diff options
author | Toomas Soome <tsoome@me.com> | 2018-10-14 11:16:25 +0300 |
---|---|---|
committer | Dan McDonald <danmcd@joyent.com> | 2018-10-29 21:09:21 -0400 |
commit | d06952d085d59072d42d77e29ac5669bbdc25d6e (patch) | |
tree | 9c1b37f715b6633c9523d40eba7afeaa7957148c | |
parent | 0ff1227b75bfc6aac8def680dc602c3b9fc2bfd4 (diff) | |
download | illumos-gate-d06952d085d59072d42d77e29ac5669bbdc25d6e.tar.gz |
9893 add some partition types
Reviewed by: Igor Kozhukhov <igor@dilos.org>
Reviewed by: Yuri Pankov <yuripv@yuripv.net>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Dan McDonald <danmcd@joyent.com>
-rw-r--r-- | usr/src/cmd/format/menu_command.c | 5 | ||||
-rw-r--r-- | usr/src/lib/libefi/common/rdwr_efi.c | 75 | ||||
-rw-r--r-- | usr/src/uts/common/sys/efi_partition.h | 8 | ||||
-rw-r--r-- | usr/src/uts/common/sys/vtoc.h | 19 |
4 files changed, 73 insertions, 34 deletions
diff --git a/usr/src/cmd/format/menu_command.c b/usr/src/cmd/format/menu_command.c index bc441b0e86..f64757cff9 100644 --- a/usr/src/cmd/format/menu_command.c +++ b/usr/src/cmd/format/menu_command.c @@ -85,6 +85,11 @@ slist_t ptag_choices[] = { { "reserved", "", V_RESERVED }, { "system", "", V_SYSTEM }, { "BIOS_boot", "", V_BIOS_BOOT }, + { "FreeBSD boot", "", V_FREEBSD_BOOT }, + { "FreeBSD swap", "", V_FREEBSD_SWAP }, + { "FreeBSD UFS", "", V_FREEBSD_UFS }, + { "FreeBSD ZFS", "", V_FREEBSD_ZFS }, + { NULL } }; diff --git a/usr/src/lib/libefi/common/rdwr_efi.c b/usr/src/lib/libefi/common/rdwr_efi.c index a878cb50d2..18ad38f0c5 100644 --- a/usr/src/lib/libefi/common/rdwr_efi.c +++ b/usr/src/lib/libefi/common/rdwr_efi.c @@ -44,39 +44,48 @@ #include <sys/byteorder.h> #include <sys/ddi.h> +/* + * The original conversion array used simple array index, but since + * we do need to take account of VTOC tag numbers from other systems, + * we need to provide tag values too, or the array will grow too large. + * + * Still we will fabricate the missing p_tag values. + */ static struct uuid_to_ptag { struct uuid uuid; + ushort_t p_tag; } conversion_array[] = { - { EFI_UNUSED }, - { EFI_BOOT }, - { EFI_ROOT }, - { EFI_SWAP }, - { EFI_USR }, - { EFI_BACKUP }, - { 0 }, /* STAND is never used */ - { EFI_VAR }, - { EFI_HOME }, - { EFI_ALTSCTR }, - { 0 }, /* CACHE is never used */ - { EFI_RESERVED }, - { EFI_SYSTEM }, - { EFI_LEGACY_MBR }, - { EFI_SYMC_PUB }, - { EFI_SYMC_CDS }, - { EFI_MSFT_RESV }, - { EFI_DELL_BASIC }, - { EFI_DELL_RAID }, - { EFI_DELL_SWAP }, - { EFI_DELL_LVM }, - { EFI_DELL_RESV }, - { EFI_AAPL_HFS }, - { EFI_AAPL_UFS }, - { EFI_BIOS_BOOT }, - { EFI_FREEBSD_BOOT }, - { EFI_FREEBSD_SWAP }, - { EFI_FREEBSD_UFS }, - { EFI_FREEBSD_VINUM }, - { EFI_FREEBSD_ZFS } + { EFI_UNUSED, V_UNASSIGNED }, + { EFI_BOOT, V_BOOT }, + { EFI_ROOT, V_ROOT }, + { EFI_SWAP, V_SWAP }, + { EFI_USR, V_USR }, + { EFI_BACKUP, V_BACKUP }, + { EFI_VAR, V_VAR }, + { EFI_HOME, V_HOME }, + { EFI_ALTSCTR, V_ALTSCTR }, + { EFI_RESERVED, V_RESERVED }, + { EFI_SYSTEM, V_SYSTEM }, /* V_SYSTEM is 0xc */ + { EFI_LEGACY_MBR, 0x10 }, + { EFI_SYMC_PUB, 0x11 }, + { EFI_SYMC_CDS, 0x12 }, + { EFI_MSFT_RESV, 0x13 }, + { EFI_DELL_BASIC, 0x14 }, + { EFI_DELL_RAID, 0x15 }, + { EFI_DELL_SWAP, 0x16 }, + { EFI_DELL_LVM, 0x17 }, + { EFI_DELL_RESV, 0x19 }, + { EFI_AAPL_HFS, 0x1a }, + { EFI_AAPL_UFS, 0x1b }, + { EFI_AAPL_ZFS, 0x1c }, + { EFI_AAPL_APFS, 0x1d }, + { EFI_BIOS_BOOT, V_BIOS_BOOT }, /* V_BIOS_BOOT is 0x18 */ + { EFI_FREEBSD_BOOT, V_FREEBSD_BOOT }, + { EFI_FREEBSD_SWAP, V_FREEBSD_SWAP }, + { EFI_FREEBSD_UFS, V_FREEBSD_UFS }, + { EFI_FREEBSD_VINUM, V_FREEBSD_VINUM }, + { EFI_FREEBSD_ZFS, V_FREEBSD_ZFS }, + { EFI_FREEBSD_NANDFS, V_FREEBSD_NANDFS } }; /* @@ -563,7 +572,8 @@ efi_read(int fd, struct dk_gpt *vtoc) if (bcmp(&vtoc->efi_parts[i].p_guid, &conversion_array[j].uuid, sizeof (struct uuid)) == 0) { - vtoc->efi_parts[i].p_tag = j; + vtoc->efi_parts[i].p_tag = + conversion_array[j].p_tag; break; } } @@ -1037,7 +1047,8 @@ efi_write(int fd, struct dk_gpt *vtoc) j < sizeof (conversion_array) / sizeof (struct uuid_to_ptag); j++) { - if (vtoc->efi_parts[i].p_tag == j) { + if (vtoc->efi_parts[i].p_tag == + conversion_array[j].p_tag) { UUID_LE_CONVERT( efi_parts[i].efi_gpe_PartitionTypeGUID, conversion_array[j].uuid); diff --git a/usr/src/uts/common/sys/efi_partition.h b/usr/src/uts/common/sys/efi_partition.h index 32d3d92b52..5fa101cbb7 100644 --- a/usr/src/uts/common/sys/efi_partition.h +++ b/usr/src/uts/common/sys/efi_partition.h @@ -131,12 +131,20 @@ typedef struct efi_gpe_Attrs { { 0x23, 0x8f, 0x2a, 0x3d, 0xf9, 0x28 } } #define EFI_DELL_RESV { 0x8da63339, 0x0007, 0x60c0, 0xc4, 0x36, \ { 0x08, 0x3a, 0xc8, 0x23, 0x09, 0x08 } } +#define EFI_AAPL_BOOT { 0x426F6F74, 0x0000, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } #define EFI_AAPL_HFS { 0x48465300, 0x0000, 0x11aa, 0xaa, 0x11, \ { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } #define EFI_AAPL_UFS { 0x55465300, 0x0000, 0x11aa, 0xaa, 0x11, \ { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_AAPL_ZFS { 0x6a898cc3, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_AAPL_APFS { 0x7c3457ef, 0x0000, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } #define EFI_FREEBSD_BOOT { 0x83bd6b9d, 0x7f41, 0x11dc, 0xbe, 0x0b, \ { 0x00, 0x15, 0x60, 0xb8, 0x4f, 0x0f } } +#define EFI_FREEBSD_NANDFS { 0x74ba7dd9, 0xa689, 0x11e1, 0xbd, 0x04, \ + { 0x00, 0xe0, 0x81, 0x28, 0x6a, 0xcf } } #define EFI_FREEBSD_SWAP { 0x516e7cb5, 0x6ecf, 0x11d6, 0x8f, 0xf8, \ { 0x00, 0x02, 0x2d, 0x09, 0x71, 0x2b } } #define EFI_FREEBSD_UFS { 0x516e7cb6, 0x6ecf, 0x11d6, 0x8f, 0xf8, \ diff --git a/usr/src/uts/common/sys/vtoc.h b/usr/src/uts/common/sys/vtoc.h index e9168d1e41..cce9938da6 100644 --- a/usr/src/uts/common/sys/vtoc.h +++ b/usr/src/uts/common/sys/vtoc.h @@ -86,9 +86,24 @@ extern "C" { /* Tags for EFI/GPT labels */ #define V_RESERVED 0x0b /* SMI reserved data */ #define V_SYSTEM 0x0c /* EFI/GPT system partition */ -#define V_BIOS_BOOT 0x18 /* BIOS Boot partition */ -#define V_UNKNOWN 0xff /* Unknown partition */ +#define V_VXVM_PUB 0x0e /* VxVM public region */ +#define V_VXVM_PRIV 0x0f /* VxVM private region */ + +#define V_BIOS_BOOT 0x18 /* Grub2 BIOS Boot partition */ + +/* NetBSD/mips defines this */ +#define V_NETBSD_FFS 0xff + +/* FreeBSD tags: the high byte equals ELFOSABI_FREEBSD */ +#define V_FREEBSD_BOOT 0x0900 +#define V_FREEBSD_SWAP 0x0901 +#define V_FREEBSD_UFS 0x0902 +#define V_FREEBSD_VINUM 0x0903 +#define V_FREEBSD_ZFS 0x0904 +#define V_FREEBSD_NANDFS 0x0905 + +#define V_UNKNOWN 0xffff /* Unknown partition */ /* * Partition permission flags |