Date: Fri, 11 Feb 2011 05:37:06 +0000 (UTC) From: "Andrey V. Elsukov" <ae@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r218536 - in stable/8/sys: geom/part sys Message-ID: <201102110537.p1B5b6lB046766@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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_ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102110537.p1B5b6lB046766>