From nobody@FreeBSD.org  Sat Feb 23 12:11:56 2008
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 8BBDD16A400
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 23 Feb 2008 12:11:56 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 6E9AA13C442
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 23 Feb 2008 12:11:56 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m1NC9Ig8054769
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 23 Feb 2008 12:09:18 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.2/8.14.1/Submit) id m1NC9ILE054768;
	Sat, 23 Feb 2008 12:09:18 GMT
	(envelope-from nobody)
Message-Id: <200802231209.m1NC9ILE054768@www.freebsd.org>
Date: Sat, 23 Feb 2008 12:09:18 GMT
From: Robert Millan <rmh@aybabtu.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [PATCH] support "BIOS Boot" partition type in gpt(8)
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         120990
>Category:       bin
>Synopsis:       [patch] support "BIOS Boot" partition type in gpt(8)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    ae
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sat Feb 23 12:20:01 UTC 2008
>Closed-Date:    Fri Feb 11 05:57:32 UTC 2011
>Last-Modified:  Fri Feb 11 05:57:32 UTC 2011
>Originator:     Robert Millan
>Release:        
>Organization:
>Environment:
>Description:

This patch adds support to gpt(8) partition editor for BIOS Boot Partition.

This partition type is roughly equivalent to FreeBSD Boot; it is used by GRUB 2 and aimed at standarization.  More details at:

  http://en.wikipedia.org/wiki/BIOS_Boot_Partition_(GPT)

>How-To-Repeat:

>Fix:
Patch attached.

Patch attached with submission follows:

diff -ur src/sbin/gpt/gpt.c src.new/sbin/gpt/gpt.c
--- src/sbin/gpt/gpt.c	2008-01-30 14:29:10.000000000 +0100
+++ src.new/sbin/gpt/gpt.c	2008-02-23 13:02:32.000000000 +0100
@@ -275,6 +275,12 @@
 			return (0);
 		}
 		break;
+		if (strcmp(s, "bios_boot") == 0) {
+			uuid_t bios_boot = GPT_ENT_TYPE_BIOS_BOOT;
+			*uuid = bios_boot;
+			return (0);
+		}
+		break;
 	case 'e':
 		if (strcmp(s, "efi") == 0) {
 			uuid_t efi = GPT_ENT_TYPE_EFI;
diff -ur src/sbin/gpt/show.c src.new/sbin/gpt/show.c
--- src/sbin/gpt/show.c	2008-02-06 00:37:42.000000000 +0100
+++ src.new/sbin/gpt/show.c	2008-02-23 13:00:25.000000000 +0100
@@ -55,6 +55,7 @@
 friendly(uuid_t *t)
 {
 	static uuid_t boot = GPT_ENT_TYPE_FREEBSD_BOOT;
+	static uuid_t bios_boot = GPT_ENT_TYPE_BIOS_BOOT;
 	static uuid_t efi_slice = GPT_ENT_TYPE_EFI;
 	static uuid_t mslinux = GPT_ENT_TYPE_MS_BASIC_DATA;
 	static uuid_t freebsd = GPT_ENT_TYPE_FREEBSD;
@@ -75,6 +76,8 @@
 		return ("EFI System");
 	if (uuid_equal(t, &boot, NULL))
 		return ("FreeBSD boot");
+	if (uuid_equal(t, &bios_boot, NULL))
+		return ("BIOS boot");
 	if (uuid_equal(t, &swap, NULL))
 		return ("FreeBSD swap");
 	if (uuid_equal(t, &ufs, NULL))
diff -ur src/sys/sys/gpt.h src.new/sys/sys/gpt.h
--- src/sys/sys/gpt.h	2007-10-24 23:32:56.000000000 +0200
+++ src.new/sys/sys/gpt.h	2008-02-23 13:00:25.000000000 +0100
@@ -120,4 +120,11 @@
 #define	GPT_ENT_TYPE_APPLE_HFS		\
 	{0x48465300,0x0000,0x11aa,0xaa,0x11,{0x00,0x30,0x65,0x43,0xec,0xac}}
 
+/*
+ * Same functionality as GPT_ENT_TYPE_FREEBSD_BOOT.  Used for others such as
+ * GRUB 2, but aimed at standarization.
+ */
+#define	GPT_ENT_TYPE_BIOS_BOOT		\
+	{0x21686148,0x6449,0x6e6f,0x74,0x4e,{0x65,0x65,0x64,0x45,0x46,0x49}}
+
 #endif /* _SYS_GPT_H_ */


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->marcel 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Sat Feb 23 14:32:55 UTC 2008 
Responsible-Changed-Why:  
Marcel, can you take a look at this?  If you're not working in this 
area any more, just return it to bugs@.  Thanks. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=120990 
Responsible-Changed-From-To: marcel->bugs 
Responsible-Changed-By: marcel 
Responsible-Changed-When: Sat Nov 22 20:50:34 UTC 2008 
Responsible-Changed-Why:  
I don't have the bandwidth to work on PC-specific code. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=120990 
Responsible-Changed-From-To: bugs->freebsd-bugs 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Sat Nov 22 20:57:01 UTC 2008 
Responsible-Changed-Why:  
Canonicalize assignment. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=120990 
Responsible-Changed-From-To: freebsd-bugs->freebsd-geom 
Responsible-Changed-By: arundel 
Responsible-Changed-When: Sat Nov 13 09:53:15 UTC 2010 
Responsible-Changed-Why:  
Assign to freebsd-geom@, since they will have an opinion regarding this issue. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=120990 

From: Andriy Gapon <avg@freebsd.org>
To: bug-followup@freebsd.org, rmh@winomega.com
Cc: ae@freebsd.org
Subject: Re: bin/120990: [patch] support "BIOS Boot" partition type in gpt(8)
Date: Mon, 15 Nov 2010 15:57:23 +0200

 I think there is no reason not add support for this kind of partition.
 
 Robert,
 BTW, just in case, you can create any type of partition using its GUID with gpart.
 
 Andrey,
 what do you think?
 
 -- 
 Andriy Gapon

From: "Andrey V. Elsukov" <bu7cher@yandex.ru>
To: Andriy Gapon <avg@freebsd.org>
Cc: bug-followup@freebsd.org, rmh@winomega.com, ae@freebsd.org
Subject: Re: bin/120990: [patch] support "BIOS Boot" partition type in gpt(8)
Date: Mon, 15 Nov 2010 18:11:29 +0300

 This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
 --------------enigB7084245445E8DD2E3EA198D
 Content-Type: text/plain; charset=KOI8-R
 Content-Transfer-Encoding: quoted-printable
 
 On 15.11.2010 16:57, Andriy Gapon wrote:
 >=20
 > I think there is no reason not add support for this kind of partition.
 >=20
 > Robert,
 > BTW, just in case, you can create any type of partition using its GUID =
 with gpart.
 >=20
 > Andrey,
 > what do you think?
 
 1. This patch is for deprecated now gpt(8).
 2. Without corresponding support in pmbr and boot code it
 will be only cosmetic change.
 
 --=20
 WBR, Andrey V. Elsukov
 
 
 --------------enigB7084245445E8DD2E3EA198D
 Content-Type: application/pgp-signature; name="signature.asc"
 Content-Description: OpenPGP digital signature
 Content-Disposition: attachment; filename="signature.asc"
 
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.16 (FreeBSD)
 
 iQEcBAEBAgAGBQJM4U2mAAoJEAHF6gQQyKF6s0QH/RyCpAXcvvDTWKZvuR0bSO4X
 eYw8ejxYwMmJZ2CuRA7+UNQj2PMHouyX+UYzY5pLQHjZjRIPXvITF3wpkhoiD1aU
 mWwiFQyW3kYaATG9J7hmT8hHE602F05LGoMRgCiTeuw7nZzawDBnmn/DRuiMg9vi
 wRS8a0fRamcgNipHl46uKyT4S0ESOcWmWzQB52evY25MeozDzRCrZCA0JO0UCuat
 MRQLxS+cwzVK6vy7+vMwDbQhfzn8juN+q+RFlyvmr67Yfg0vsG8Crs8EJH7Hw6FY
 t15YY2u8hh/sxgDx5iqk1bP7EY4ycCYO/1bkNVj96gFeyUKV5Xo8UZFzzwAwGI4=
 =1jJL
 -----END PGP SIGNATURE-----
 
 --------------enigB7084245445E8DD2E3EA198D--

From: Andriy Gapon <avg@freebsd.org>
To: "Andrey V. Elsukov" <bu7cher@yandex.ru>
Cc: bug-followup@freebsd.org, rmh@winomega.com, ae@freebsd.org
Subject: Re: bin/120990: [patch] support "BIOS Boot" partition type in gpt(8)
Date: Mon, 15 Nov 2010 17:46:47 +0200

 on 15/11/2010 17:11 Andrey V. Elsukov said the following:
 > On 15.11.2010 16:57, Andriy Gapon wrote:
 >>
 >> I think there is no reason not add support for this kind of partition.
 >>
 >> Robert,
 >> BTW, just in case, you can create any type of partition using its GUID with gpart.
 >>
 >> Andrey,
 >> what do you think?
 > 
 > 1. This patch is for deprecated now gpt(8).
 
 Oh, I didn't notice that, sorry.
 
 > 2. Without corresponding support in pmbr and boot code it
 > will be only cosmetic change.
 
 I think that it would still be useful when using an alternative boot-chain.
 I think that this request comes from Debian GNU/kFreeBSD project, which does use
 different boot blocks.
 
 -- 
 Andriy Gapon
Responsible-Changed-From-To: freebsd-geom->ae 
Responsible-Changed-By: ae 
Responsible-Changed-When: Fri Jan 28 11:13:32 UTC 2011 
Responsible-Changed-Why:  
Take it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=120990 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/120990: commit references a PR
Date: Fri, 28 Jan 2011 11:13:07 +0000 (UTC)

 Author: ae
 Date: Fri Jan 28 11:13:01 2011
 New Revision: 218014
 URL: http://svn.freebsd.org/changeset/base/218014
 
 Log:
   Add new user-friendly aliases for partition types for the MBR and
   EBR schemes: fat32, ebr, linux-data, linux-raid, linux-swap and
   linux-lvm. Add bios-boot GUID and alias for the GPT scheme. It used by
   GRUB 2 loader. Also do sorting definitions of types in diskmbr.h
   and in g_part.c.
   
   PR:		bin/120990, kern/147664
   MFC after:	2 weeks
 
 Modified:
   head/sys/geom/part/g_part.c
   head/sys/geom/part/g_part.h
   head/sys/geom/part/g_part_ebr.c
   head/sys/geom/part/g_part_gpt.c
   head/sys/geom/part/g_part_mbr.c
   head/sys/sys/diskmbr.h
   head/sys/sys/gpt.h
 
 Modified: head/sys/geom/part/g_part.c
 ==============================================================================
 --- head/sys/geom/part/g_part.c	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part.c	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -76,7 +76,10 @@ struct g_part_alias_list {
  	{ "apple-raid-offline", G_PART_ALIAS_APPLE_RAID_OFFLINE },
  	{ "apple-tv-recovery", G_PART_ALIAS_APPLE_TV_RECOVERY },
  	{ "apple-ufs", G_PART_ALIAS_APPLE_UFS },
 +	{ "bios-boot", G_PART_ALIAS_BIOS_BOOT },
 +	{ "ebr", G_PART_ALIAS_EBR },
  	{ "efi", G_PART_ALIAS_EFI },
 +	{ "fat32", G_PART_ALIAS_MS_FAT32 },
  	{ "freebsd", G_PART_ALIAS_FREEBSD },
  	{ "freebsd-boot", G_PART_ALIAS_FREEBSD_BOOT },
  	{ "freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
 @@ -87,6 +90,7 @@ struct g_part_alias_list {
  	{ "linux-lvm", G_PART_ALIAS_LINUX_LVM },
  	{ "linux-raid", G_PART_ALIAS_LINUX_RAID },
  	{ "linux-swap", G_PART_ALIAS_LINUX_SWAP },
 +	{ "mbr", G_PART_ALIAS_MBR },
  	{ "ms-basic-data", G_PART_ALIAS_MS_BASIC_DATA },
  	{ "ms-ldm-data", G_PART_ALIAS_MS_LDM_DATA },
  	{ "ms-ldm-metadata", G_PART_ALIAS_MS_LDM_METADATA },
 @@ -98,7 +102,6 @@ struct g_part_alias_list {
  	{ "netbsd-lfs", G_PART_ALIAS_NETBSD_LFS },
  	{ "netbsd-raid", G_PART_ALIAS_NETBSD_RAID },
  	{ "netbsd-swap", G_PART_ALIAS_NETBSD_SWAP },
 -	{ "mbr", G_PART_ALIAS_MBR }
  };
  
  /*
 
 Modified: head/sys/geom/part/g_part.h
 ==============================================================================
 --- head/sys/geom/part/g_part.h	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part.h	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -66,6 +66,9 @@ enum g_part_alias {
  	G_PART_ALIAS_NETBSD_RAID,	/* A NetBSD RAID partition entry. */
  	G_PART_ALIAS_NETBSD_SWAP,	/* A NetBSD swap partition entry. */
  	G_PART_ALIAS_NETBSD_LFS,	/* A NetBSD LFS partition entry. */
 +	G_PART_ALIAS_EBR,		/* A EBR partition entry. */
 +	G_PART_ALIAS_MS_FAT32,		/* A Microsoft FAT32 partition entry. */
 +	G_PART_ALIAS_BIOS_BOOT,		/* A GRUB 2 boot partition entry. */
  	/* Keep the following last */
  	G_PART_ALIAS_COUNT
  };
 
 Modified: head/sys/geom/part/g_part_ebr.c
 ==============================================================================
 --- head/sys/geom/part/g_part_ebr.c	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part_ebr.c	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -113,6 +113,19 @@ static struct g_part_scheme g_part_ebr_s
  };
  G_PART_SCHEME_DECLARE(g_part_ebr);
  
 +static struct g_part_ebr_alias {
 +	u_char		typ;
 +	int		alias;
 +} ebr_alias_match[] = {
 +	{ DOSPTYP_386BSD,	G_PART_ALIAS_FREEBSD },
 +	{ DOSPTYP_NTFS,		G_PART_ALIAS_MS_NTFS },
 +	{ DOSPTYP_FAT32,	G_PART_ALIAS_MS_FAT32 },
 +	{ DOSPTYP_LINSWP,	G_PART_ALIAS_LINUX_SWAP },
 +	{ DOSPTYP_LINUX,	G_PART_ALIAS_LINUX_DATA },
 +	{ DOSPTYP_LINLVM,	G_PART_ALIAS_LINUX_LVM },
 +	{ DOSPTYP_LINRAID,	G_PART_ALIAS_LINUX_RAID },
 +};
 +
  static void ebr_set_chs(struct g_part_table *, uint32_t, u_char *, u_char *,
      u_char *);
  
 @@ -152,6 +165,7 @@ ebr_parse_type(const char *type, u_char 
  	const char *alias;
  	char *endp;
  	long lt;
 +	int i;
  
  	if (type[0] == '!') {
  		lt = strtol(type + 1, &endp, 0);
 @@ -160,14 +174,18 @@ ebr_parse_type(const char *type, u_char 
  		*dp_typ = (u_char)lt;
  		return (0);
  	}
 -	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_386BSD;
 -		return (0);
 +	for (i = 0;
 +	    i < sizeof(ebr_alias_match) / sizeof(ebr_alias_match[0]); i++) {
 +		alias = g_part_alias_name(ebr_alias_match[i].alias);
 +		if (strcasecmp(type, alias) == 0) {
 +			*dp_typ = ebr_alias_match[i].typ;
 +			return (0);
 +		}
  	}
  	return (EINVAL);
  }
  
 +
  static void
  ebr_set_chs(struct g_part_table *table, uint32_t lba, u_char *cylp, u_char *hdp,
      u_char *secp)
 @@ -543,13 +561,15 @@ g_part_ebr_type(struct g_part_table *bas
      char *buf, size_t bufsz)
  {
  	struct g_part_ebr_entry *entry;
 -	int type;
 +	int i;
  
  	entry = (struct g_part_ebr_entry *)baseentry;
 -	type = entry->ent.dp_typ;
 -	if (type == DOSPTYP_386BSD)
 -		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
 -	snprintf(buf, bufsz, "!%d", type);
 +	for (i = 0;
 +	    i < sizeof(ebr_alias_match) / sizeof(ebr_alias_match[0]); i++) {
 +		if (ebr_alias_match[i].typ == entry->ent.dp_typ)
 +			return (g_part_alias_name(ebr_alias_match[i].alias));
 +	}
 +	snprintf(buf, bufsz, "!%d", entry->ent.dp_typ);
  	return (buf);
  }
  
 
 Modified: head/sys/geom/part/g_part_gpt.c
 ==============================================================================
 --- head/sys/geom/part/g_part_gpt.c	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part_gpt.c	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -146,6 +146,7 @@ static struct uuid gpt_uuid_apple_raid =
  static struct uuid gpt_uuid_apple_raid_offline = GPT_ENT_TYPE_APPLE_RAID_OFFLINE;
  static struct uuid gpt_uuid_apple_tv_recovery = GPT_ENT_TYPE_APPLE_TV_RECOVERY;
  static struct uuid gpt_uuid_apple_ufs = GPT_ENT_TYPE_APPLE_UFS;
 +static struct uuid gpt_uuid_bios_boot = GPT_ENT_TYPE_BIOS_BOOT;
  static struct uuid gpt_uuid_efi = GPT_ENT_TYPE_EFI;
  static struct uuid gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
  static struct uuid gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;
 @@ -181,6 +182,7 @@ static struct g_part_uuid_alias {
  	{ &gpt_uuid_apple_raid_offline,	G_PART_ALIAS_APPLE_RAID_OFFLINE },
  	{ &gpt_uuid_apple_tv_recovery,	G_PART_ALIAS_APPLE_TV_RECOVERY },
  	{ &gpt_uuid_apple_ufs,		G_PART_ALIAS_APPLE_UFS },
 +	{ &gpt_uuid_bios_boot,		G_PART_ALIAS_BIOS_BOOT },
  	{ &gpt_uuid_efi, 		G_PART_ALIAS_EFI },
  	{ &gpt_uuid_freebsd,		G_PART_ALIAS_FREEBSD },
  	{ &gpt_uuid_freebsd_boot, 	G_PART_ALIAS_FREEBSD_BOOT },
 
 Modified: head/sys/geom/part/g_part_mbr.c
 ==============================================================================
 --- head/sys/geom/part/g_part_mbr.c	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part_mbr.c	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -108,12 +108,27 @@ static struct g_part_scheme g_part_mbr_s
  };
  G_PART_SCHEME_DECLARE(g_part_mbr);
  
 +static struct g_part_mbr_alias {
 +	u_char		typ;
 +	int		alias;
 +} mbr_alias_match[] = {
 +	{ DOSPTYP_386BSD,	G_PART_ALIAS_FREEBSD },
 +	{ DOSPTYP_EXT,		G_PART_ALIAS_EBR },
 +	{ DOSPTYP_NTFS,		G_PART_ALIAS_MS_NTFS },
 +	{ DOSPTYP_FAT32,	G_PART_ALIAS_MS_FAT32 },
 +	{ DOSPTYP_LINSWP,	G_PART_ALIAS_LINUX_SWAP },
 +	{ DOSPTYP_LINUX,	G_PART_ALIAS_LINUX_DATA },
 +	{ DOSPTYP_LINLVM,	G_PART_ALIAS_LINUX_LVM },
 +	{ DOSPTYP_LINRAID,	G_PART_ALIAS_LINUX_RAID },
 +};
 +
  static int
  mbr_parse_type(const char *type, u_char *dp_typ)
  {
  	const char *alias;
  	char *endp;
  	long lt;
 +	int i;
  
  	if (type[0] == '!') {
  		lt = strtol(type + 1, &endp, 0);
 @@ -122,15 +137,13 @@ mbr_parse_type(const char *type, u_char 
  		*dp_typ = (u_char)lt;
  		return (0);
  	}
 -	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_386BSD;
 -		return (0);
 -	}
 -	alias = g_part_alias_name(G_PART_ALIAS_MS_NTFS);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_NTFS;
 -		return (0);
 +	for (i = 0;
 +	    i < sizeof(mbr_alias_match) / sizeof(mbr_alias_match[0]); i++) {
 +		alias = g_part_alias_name(mbr_alias_match[i].alias);
 +		if (strcasecmp(type, alias) == 0) {
 +			*dp_typ = mbr_alias_match[i].typ;
 +			return (0);
 +		}
  	}
  	return (EINVAL);
  }
 @@ -505,18 +518,15 @@ g_part_mbr_type(struct g_part_table *bas
      char *buf, size_t bufsz)
  {
  	struct g_part_mbr_entry *entry;
 -	int type;
 +	int i;
  
  	entry = (struct g_part_mbr_entry *)baseentry;
 -	type = entry->ent.dp_typ;
 -	switch (type) {
 -	case DOSPTYP_386BSD:
 -		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
 -	case DOSPTYP_NTFS:
 -		return (g_part_alias_name(G_PART_ALIAS_MS_NTFS));
 -	default:
 -		snprintf(buf, bufsz, "!%d", type);
 +	for (i = 0;
 +	    i < sizeof(mbr_alias_match) / sizeof(mbr_alias_match[0]); i++) {
 +		if (mbr_alias_match[i].typ == entry->ent.dp_typ)
 +			return (g_part_alias_name(mbr_alias_match[i].alias));
  	}
 +	snprintf(buf, bufsz, "!%d", entry->ent.dp_typ);
  	return (buf);
  }
  
 
 Modified: head/sys/sys/diskmbr.h
 ==============================================================================
 --- head/sys/sys/diskmbr.h	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/sys/diskmbr.h	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -43,13 +43,16 @@
  #define	DOSMAGICOFFSET	510
  #define	DOSMAGIC	0xAA55
  
 +#define	DOSPTYP_EXT	0x05	/* DOS extended partition */
 +#define	DOSPTYP_NTFS	0x07	/* NTFS partition */
 +#define	DOSPTYP_FAT32	0x0b	/* FAT32 partition */
 +#define	DOSPTYP_EXTLBA	0x0f	/* DOS extended partition */
  #define	DOSPTYP_386BSD	0xa5	/* 386BSD partition type */
  #define	DOSPTYP_LINSWP	0x82	/* Linux swap partition */
  #define	DOSPTYP_LINUX	0x83	/* Linux partition */
 +#define	DOSPTYP_LINLVM	0x8e	/* Linux LVM partition */
  #define	DOSPTYP_PMBR	0xee	/* GPT Protective MBR */
 -#define	DOSPTYP_EXT	5	/* DOS extended partition */
 -#define	DOSPTYP_EXTLBA	15	/* DOS extended partition */
 -#define	DOSPTYP_NTFS	0x07	/* NTFS partition */
 +#define	DOSPTYP_LINRAID	0xfd	/* Linux raid partition */
  
  struct dos_partition {
  	unsigned char	dp_flag;	/* bootstrap flags */
 
 Modified: head/sys/sys/gpt.h
 ==============================================================================
 --- head/sys/sys/gpt.h	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/sys/gpt.h	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -150,4 +150,10 @@ struct gpt_ent {
  #define	GPT_ENT_TYPE_NETBSD_CGD		\
  	{0x2db519ec,0xb10f,0x11dc,0xb9,0x9b,{0x00,0x19,0xd1,0x87,0x96,0x48}}
  
 +/*
 + * Boot partition used by GRUB 2.
 + */
 +#define	GPT_ENT_TYPE_BIOS_BOOT		\
 +	{0x21686148,0x6449,0x6e6f,0x74,0x4e,{0x65,0x65,0x64,0x45,0x46,0x49}}
 +
  #endif /* _SYS_GPT_H_ */
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: ae 
State-Changed-When: Mon Jan 31 11:44:11 UTC 2011 
State-Changed-Why:  
Patched in head/. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=120990 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/120990: commit references a PR
Date: Fri, 11 Feb 2011 05:37:13 +0000 (UTC)

 Author: ae
 Date: Fri Feb 11 05:37:05 2011
 New Revision: 218536
 URL: http://svn.freebsd.org/changeset/base/218536
 
 Log:
   MFC r218014:
     Add new user-friendly aliases for partition types for the MBR and
     EBR schemes: fat32, ebr, linux-data, linux-raid, linux-swap and
     linux-lvm. Add bios-boot GUID and alias for the GPT scheme. It used by
     GRUB 2 loader. Also do sorting definitions of types in diskmbr.h
     and in g_part.c.
   
     PR:		bin/120990, kern/147664
 
 Modified:
   stable/8/sys/geom/part/g_part.c
   stable/8/sys/geom/part/g_part.h
   stable/8/sys/geom/part/g_part_ebr.c
   stable/8/sys/geom/part/g_part_gpt.c
   stable/8/sys/geom/part/g_part_mbr.c
   stable/8/sys/sys/diskmbr.h
   stable/8/sys/sys/gpt.h
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
 
 Modified: stable/8/sys/geom/part/g_part.c
 ==============================================================================
 --- stable/8/sys/geom/part/g_part.c	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part.c	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -76,7 +76,10 @@ struct g_part_alias_list {
  	{ "apple-raid-offline", G_PART_ALIAS_APPLE_RAID_OFFLINE },
  	{ "apple-tv-recovery", G_PART_ALIAS_APPLE_TV_RECOVERY },
  	{ "apple-ufs", G_PART_ALIAS_APPLE_UFS },
 +	{ "bios-boot", G_PART_ALIAS_BIOS_BOOT },
 +	{ "ebr", G_PART_ALIAS_EBR },
  	{ "efi", G_PART_ALIAS_EFI },
 +	{ "fat32", G_PART_ALIAS_MS_FAT32 },
  	{ "freebsd", G_PART_ALIAS_FREEBSD },
  	{ "freebsd-boot", G_PART_ALIAS_FREEBSD_BOOT },
  	{ "freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
 @@ -87,6 +90,7 @@ struct g_part_alias_list {
  	{ "linux-lvm", G_PART_ALIAS_LINUX_LVM },
  	{ "linux-raid", G_PART_ALIAS_LINUX_RAID },
  	{ "linux-swap", G_PART_ALIAS_LINUX_SWAP },
 +	{ "mbr", G_PART_ALIAS_MBR },
  	{ "ms-basic-data", G_PART_ALIAS_MS_BASIC_DATA },
  	{ "ms-ldm-data", G_PART_ALIAS_MS_LDM_DATA },
  	{ "ms-ldm-metadata", G_PART_ALIAS_MS_LDM_METADATA },
 @@ -98,7 +102,6 @@ struct g_part_alias_list {
  	{ "netbsd-lfs", G_PART_ALIAS_NETBSD_LFS },
  	{ "netbsd-raid", G_PART_ALIAS_NETBSD_RAID },
  	{ "netbsd-swap", G_PART_ALIAS_NETBSD_SWAP },
 -	{ "mbr", G_PART_ALIAS_MBR }
  };
  
  /*
 
 Modified: stable/8/sys/geom/part/g_part.h
 ==============================================================================
 --- stable/8/sys/geom/part/g_part.h	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part.h	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -66,6 +66,9 @@ enum g_part_alias {
  	G_PART_ALIAS_NETBSD_RAID,	/* A NetBSD RAID partition entry. */
  	G_PART_ALIAS_NETBSD_SWAP,	/* A NetBSD swap partition entry. */
  	G_PART_ALIAS_NETBSD_LFS,	/* A NetBSD LFS partition entry. */
 +	G_PART_ALIAS_EBR,		/* A EBR partition entry. */
 +	G_PART_ALIAS_MS_FAT32,		/* A Microsoft FAT32 partition entry. */
 +	G_PART_ALIAS_BIOS_BOOT,		/* A GRUB 2 boot partition entry. */
  	/* Keep the following last */
  	G_PART_ALIAS_COUNT
  };
 
 Modified: stable/8/sys/geom/part/g_part_ebr.c
 ==============================================================================
 --- stable/8/sys/geom/part/g_part_ebr.c	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part_ebr.c	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -113,6 +113,19 @@ static struct g_part_scheme g_part_ebr_s
  };
  G_PART_SCHEME_DECLARE(g_part_ebr);
  
 +static struct g_part_ebr_alias {
 +	u_char		typ;
 +	int		alias;
 +} ebr_alias_match[] = {
 +	{ DOSPTYP_386BSD,	G_PART_ALIAS_FREEBSD },
 +	{ DOSPTYP_NTFS,		G_PART_ALIAS_MS_NTFS },
 +	{ DOSPTYP_FAT32,	G_PART_ALIAS_MS_FAT32 },
 +	{ DOSPTYP_LINSWP,	G_PART_ALIAS_LINUX_SWAP },
 +	{ DOSPTYP_LINUX,	G_PART_ALIAS_LINUX_DATA },
 +	{ DOSPTYP_LINLVM,	G_PART_ALIAS_LINUX_LVM },
 +	{ DOSPTYP_LINRAID,	G_PART_ALIAS_LINUX_RAID },
 +};
 +
  static void ebr_set_chs(struct g_part_table *, uint32_t, u_char *, u_char *,
      u_char *);
  
 @@ -152,6 +165,7 @@ ebr_parse_type(const char *type, u_char 
  	const char *alias;
  	char *endp;
  	long lt;
 +	int i;
  
  	if (type[0] == '!') {
  		lt = strtol(type + 1, &endp, 0);
 @@ -160,14 +174,18 @@ ebr_parse_type(const char *type, u_char 
  		*dp_typ = (u_char)lt;
  		return (0);
  	}
 -	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_386BSD;
 -		return (0);
 +	for (i = 0;
 +	    i < sizeof(ebr_alias_match) / sizeof(ebr_alias_match[0]); i++) {
 +		alias = g_part_alias_name(ebr_alias_match[i].alias);
 +		if (strcasecmp(type, alias) == 0) {
 +			*dp_typ = ebr_alias_match[i].typ;
 +			return (0);
 +		}
  	}
  	return (EINVAL);
  }
  
 +
  static void
  ebr_set_chs(struct g_part_table *table, uint32_t lba, u_char *cylp, u_char *hdp,
      u_char *secp)
 @@ -537,13 +555,15 @@ g_part_ebr_type(struct g_part_table *bas
      char *buf, size_t bufsz)
  {
  	struct g_part_ebr_entry *entry;
 -	int type;
 +	int i;
  
  	entry = (struct g_part_ebr_entry *)baseentry;
 -	type = entry->ent.dp_typ;
 -	if (type == DOSPTYP_386BSD)
 -		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
 -	snprintf(buf, bufsz, "!%d", type);
 +	for (i = 0;
 +	    i < sizeof(ebr_alias_match) / sizeof(ebr_alias_match[0]); i++) {
 +		if (ebr_alias_match[i].typ == entry->ent.dp_typ)
 +			return (g_part_alias_name(ebr_alias_match[i].alias));
 +	}
 +	snprintf(buf, bufsz, "!%d", entry->ent.dp_typ);
  	return (buf);
  }
  
 
 Modified: stable/8/sys/geom/part/g_part_gpt.c
 ==============================================================================
 --- stable/8/sys/geom/part/g_part_gpt.c	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part_gpt.c	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -146,6 +146,7 @@ static struct uuid gpt_uuid_apple_raid =
  static struct uuid gpt_uuid_apple_raid_offline = GPT_ENT_TYPE_APPLE_RAID_OFFLINE;
  static struct uuid gpt_uuid_apple_tv_recovery = GPT_ENT_TYPE_APPLE_TV_RECOVERY;
  static struct uuid gpt_uuid_apple_ufs = GPT_ENT_TYPE_APPLE_UFS;
 +static struct uuid gpt_uuid_bios_boot = GPT_ENT_TYPE_BIOS_BOOT;
  static struct uuid gpt_uuid_efi = GPT_ENT_TYPE_EFI;
  static struct uuid gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
  static struct uuid gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;
 @@ -181,6 +182,7 @@ static struct g_part_uuid_alias {
  	{ &gpt_uuid_apple_raid_offline,	G_PART_ALIAS_APPLE_RAID_OFFLINE },
  	{ &gpt_uuid_apple_tv_recovery,	G_PART_ALIAS_APPLE_TV_RECOVERY },
  	{ &gpt_uuid_apple_ufs,		G_PART_ALIAS_APPLE_UFS },
 +	{ &gpt_uuid_bios_boot,		G_PART_ALIAS_BIOS_BOOT },
  	{ &gpt_uuid_efi, 		G_PART_ALIAS_EFI },
  	{ &gpt_uuid_freebsd,		G_PART_ALIAS_FREEBSD },
  	{ &gpt_uuid_freebsd_boot, 	G_PART_ALIAS_FREEBSD_BOOT },
 
 Modified: stable/8/sys/geom/part/g_part_mbr.c
 ==============================================================================
 --- stable/8/sys/geom/part/g_part_mbr.c	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part_mbr.c	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -108,12 +108,27 @@ static struct g_part_scheme g_part_mbr_s
  };
  G_PART_SCHEME_DECLARE(g_part_mbr);
  
 +static struct g_part_mbr_alias {
 +	u_char		typ;
 +	int		alias;
 +} mbr_alias_match[] = {
 +	{ DOSPTYP_386BSD,	G_PART_ALIAS_FREEBSD },
 +	{ DOSPTYP_EXT,		G_PART_ALIAS_EBR },
 +	{ DOSPTYP_NTFS,		G_PART_ALIAS_MS_NTFS },
 +	{ DOSPTYP_FAT32,	G_PART_ALIAS_MS_FAT32 },
 +	{ DOSPTYP_LINSWP,	G_PART_ALIAS_LINUX_SWAP },
 +	{ DOSPTYP_LINUX,	G_PART_ALIAS_LINUX_DATA },
 +	{ DOSPTYP_LINLVM,	G_PART_ALIAS_LINUX_LVM },
 +	{ DOSPTYP_LINRAID,	G_PART_ALIAS_LINUX_RAID },
 +};
 +
  static int
  mbr_parse_type(const char *type, u_char *dp_typ)
  {
  	const char *alias;
  	char *endp;
  	long lt;
 +	int i;
  
  	if (type[0] == '!') {
  		lt = strtol(type + 1, &endp, 0);
 @@ -122,15 +137,13 @@ mbr_parse_type(const char *type, u_char 
  		*dp_typ = (u_char)lt;
  		return (0);
  	}
 -	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_386BSD;
 -		return (0);
 -	}
 -	alias = g_part_alias_name(G_PART_ALIAS_MS_NTFS);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_NTFS;
 -		return (0);
 +	for (i = 0;
 +	    i < sizeof(mbr_alias_match) / sizeof(mbr_alias_match[0]); i++) {
 +		alias = g_part_alias_name(mbr_alias_match[i].alias);
 +		if (strcasecmp(type, alias) == 0) {
 +			*dp_typ = mbr_alias_match[i].typ;
 +			return (0);
 +		}
  	}
  	return (EINVAL);
  }
 @@ -511,18 +524,15 @@ g_part_mbr_type(struct g_part_table *bas
      char *buf, size_t bufsz)
  {
  	struct g_part_mbr_entry *entry;
 -	int type;
 +	int i;
  
  	entry = (struct g_part_mbr_entry *)baseentry;
 -	type = entry->ent.dp_typ;
 -	switch (type) {
 -	case DOSPTYP_386BSD:
 -		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
 -	case DOSPTYP_NTFS:
 -		return (g_part_alias_name(G_PART_ALIAS_MS_NTFS));
 -	default:
 -		snprintf(buf, bufsz, "!%d", type);
 +	for (i = 0;
 +	    i < sizeof(mbr_alias_match) / sizeof(mbr_alias_match[0]); i++) {
 +		if (mbr_alias_match[i].typ == entry->ent.dp_typ)
 +			return (g_part_alias_name(mbr_alias_match[i].alias));
  	}
 +	snprintf(buf, bufsz, "!%d", entry->ent.dp_typ);
  	return (buf);
  }
  
 
 Modified: stable/8/sys/sys/diskmbr.h
 ==============================================================================
 --- stable/8/sys/sys/diskmbr.h	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/sys/diskmbr.h	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -43,13 +43,16 @@
  #define	DOSMAGICOFFSET	510
  #define	DOSMAGIC	0xAA55
  
 +#define	DOSPTYP_EXT	0x05	/* DOS extended partition */
 +#define	DOSPTYP_NTFS	0x07	/* NTFS partition */
 +#define	DOSPTYP_FAT32	0x0b	/* FAT32 partition */
 +#define	DOSPTYP_EXTLBA	0x0f	/* DOS extended partition */
  #define	DOSPTYP_386BSD	0xa5	/* 386BSD partition type */
  #define	DOSPTYP_LINSWP	0x82	/* Linux swap partition */
  #define	DOSPTYP_LINUX	0x83	/* Linux partition */
 +#define	DOSPTYP_LINLVM	0x8e	/* Linux LVM partition */
  #define	DOSPTYP_PMBR	0xee	/* GPT Protective MBR */
 -#define	DOSPTYP_EXT	5	/* DOS extended partition */
 -#define	DOSPTYP_EXTLBA	15	/* DOS extended partition */
 -#define	DOSPTYP_NTFS	0x07	/* NTFS partition */
 +#define	DOSPTYP_LINRAID	0xfd	/* Linux raid partition */
  
  struct dos_partition {
  	unsigned char	dp_flag;	/* bootstrap flags */
 
 Modified: stable/8/sys/sys/gpt.h
 ==============================================================================
 --- stable/8/sys/sys/gpt.h	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/sys/gpt.h	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -150,4 +150,10 @@ struct gpt_ent {
  #define	GPT_ENT_TYPE_NETBSD_CGD		\
  	{0x2db519ec,0xb10f,0x11dc,0xb9,0x9b,{0x00,0x19,0xd1,0x87,0x96,0x48}}
  
 +/*
 + * Boot partition used by GRUB 2.
 + */
 +#define	GPT_ENT_TYPE_BIOS_BOOT		\
 +	{0x21686148,0x6449,0x6e6f,0x74,0x4e,{0x65,0x65,0x64,0x45,0x46,0x49}}
 +
  #endif /* _SYS_GPT_H_ */
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: ae 
State-Changed-When: Fri Feb 11 05:57:10 UTC 2011 
State-Changed-Why:  
Merged to stable/8. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=120990 
>Unformatted:
