| Summary: | [patch] support "BIOS Boot" partition type in gpt(8) | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Base System | Reporter: | Robert Millan <rmh> | ||||
| Component: | bin | Assignee: | Andrey V. Elsukov <ae> | ||||
| Status: | Closed FIXED | ||||||
| Severity: | Affects Only Me | ||||||
| Priority: | Normal | ||||||
| Version: | 1.0-CURRENT | ||||||
| Hardware: | Any | ||||||
| OS: | Any | ||||||
| Attachments: |
|
||||||
|
Description
Robert Millan
2008-02-23 12:20:01 UTC
Responsible Changed From-To: freebsd-bugs->marcel Marcel, can you take a look at this? If you're not working in this area any more, just return it to bugs@. Thanks. Responsible Changed From-To: marcel->bugs I don't have the bandwidth to work on PC-specific code. Responsible Changed From-To: bugs->freebsd-bugs Canonicalize assignment. Responsible Changed From-To: freebsd-bugs->freebsd-geom Assign to freebsd-geom@, since they will have an opinion regarding this issue. 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 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).
2. Without corresponding support in pmbr and boot code it
will be only cosmetic change.
--
WBR, Andrey V. Elsukov
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 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" Responsible Changed From-To: freebsd-geom->ae Take it. State Changed From-To: open->patched Patched in head/. 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 Merged to stable/8. |