diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | doc/parted.texi | 2 | ||||
-rw-r--r-- | libparted/labels/gpt.c | 38 |
3 files changed, 42 insertions, 1 deletions
@@ -8,6 +8,9 @@ GNU parted NEWS -*- outline -*- or are longer than the disk. This allows you to use parted to repair the problem. + Add support for prep flag to GPT to select PowerPC Reference Platform + boot partition type. + ** Bug Fixes Avoid generating udev add/remove events for all unmodified partitions diff --git a/doc/parted.texi b/doc/parted.texi index 008c383..25a02c7 100644 --- a/doc/parted.texi +++ b/doc/parted.texi @@ -865,7 +865,7 @@ physical volume. by the Linux/PA-RISC boot loader, palo. @item PREP -(MS-DOS) - this flag can be enabled so that the partition can be used +(MS-DOS, GPT) - this flag can be enabled so that the partition can be used as a PReP boot partition on PowerPC PReP or IBM RS6K/CHRP hardware. @item DIAG diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c index bcf7812..66c96e6 100644 --- a/libparted/labels/gpt.c +++ b/libparted/labels/gpt.c @@ -146,6 +146,10 @@ typedef struct ((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \ PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \ { 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }}) +#define PARTITION_PREP_GUID \ + ((efi_guid_t) { PED_CPU_TO_LE32 (0x9e1a2d38), PED_CPU_TO_LE16 (0xc612), \ + PED_CPU_TO_LE16 (0x4316), 0xaa, 0x26, \ + { 0x8b, 0x49, 0x52, 0x1e, 0x5a, 0x8b }}) struct __attribute__ ((packed)) _GuidPartitionTableHeader_t { @@ -289,6 +293,7 @@ typedef struct _GPTPartitionData int atvrecv; int msftrecv; int legacy_boot; + int prep; } GPTPartitionData; static PedDiskType gpt_disk_type; @@ -803,6 +808,7 @@ _parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte) = gpt_part_data->msftdata = gpt_part_data->msftrecv = gpt_part_data->legacy_boot + = gpt_part_data->prep = gpt_part_data->bios_grub = gpt_part_data->atvrecv = 0; if (pte->Attributes.RequiredToFunction & 0x1) @@ -828,6 +834,8 @@ _parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte) gpt_part_data->msftrecv = 1; else if (!guid_cmp (gpt_part_data->type, PARTITION_APPLE_TV_RECOVERY_GUID)) gpt_part_data->atvrecv = 1; + else if (!guid_cmp (gpt_part_data->type, PARTITION_PREP_GUID)) + gpt_part_data->prep = 1; return part; } @@ -1344,6 +1352,7 @@ gpt_partition_new (const PedDisk *disk, gpt_part_data->msftrecv = 0; gpt_part_data->atvrecv = 0; gpt_part_data->legacy_boot = 0; + gpt_part_data->prep = 0; uuid_generate ((unsigned char *) &gpt_part_data->uuid); swap_uuid_and_efi_guid ((unsigned char *) (&gpt_part_data->uuid)); memset (gpt_part_data->name, 0, sizeof gpt_part_data->name); @@ -1417,6 +1426,11 @@ gpt_partition_set_system (PedPartition *part, gpt_part_data->type = PARTITION_RAID_GUID; return 1; } + if (gpt_part_data->prep) + { + gpt_part_data->type = PARTITION_PREP_GUID; + return 1; + } if (gpt_part_data->boot) { gpt_part_data->type = PARTITION_SYSTEM_GUID; @@ -1593,6 +1607,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->msftres = gpt_part_data->msftdata = gpt_part_data->msftrecv + = gpt_part_data->prep = gpt_part_data->atvrecv = 0; return gpt_partition_set_system (part, part->fs_type); case PED_PARTITION_BIOS_GRUB: @@ -1605,6 +1620,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->msftres = gpt_part_data->msftdata = gpt_part_data->msftrecv + = gpt_part_data->prep = gpt_part_data->atvrecv = 0; return gpt_partition_set_system (part, part->fs_type); case PED_PARTITION_RAID: @@ -1617,6 +1633,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->msftres = gpt_part_data->msftdata = gpt_part_data->msftrecv + = gpt_part_data->prep = gpt_part_data->atvrecv = 0; return gpt_partition_set_system (part, part->fs_type); case PED_PARTITION_LVM: @@ -1629,6 +1646,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->msftres = gpt_part_data->msftdata = gpt_part_data->msftrecv + = gpt_part_data->prep = gpt_part_data->atvrecv = 0; return gpt_partition_set_system (part, part->fs_type); case PED_PARTITION_HPSERVICE: @@ -1641,6 +1659,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->msftres = gpt_part_data->msftdata = gpt_part_data->msftrecv + = gpt_part_data->prep = gpt_part_data->atvrecv = 0; return gpt_partition_set_system (part, part->fs_type); case PED_PARTITION_MSFT_RESERVED: @@ -1653,6 +1672,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->hp_service = gpt_part_data->msftdata = gpt_part_data->msftrecv + = gpt_part_data->prep = gpt_part_data->atvrecv = 0; return gpt_partition_set_system (part, part->fs_type); case PED_PARTITION_MSFT_DATA: @@ -1665,6 +1685,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->hp_service = gpt_part_data->msftres = gpt_part_data->msftrecv + = gpt_part_data->prep = gpt_part_data->atvrecv = 0; gpt_part_data->msftdata = 1; } else { @@ -1681,6 +1702,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->hp_service = gpt_part_data->msftdata = gpt_part_data->msftres + = gpt_part_data->prep = gpt_part_data->atvrecv = 0; return gpt_partition_set_system (part, part->fs_type); case PED_PARTITION_APPLE_TV_RECOVERY: @@ -1693,8 +1715,21 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) = gpt_part_data->hp_service = gpt_part_data->msftres = gpt_part_data->msftdata + = gpt_part_data->prep = gpt_part_data->msftrecv = 0; return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_PREP: + gpt_part_data->prep = state; + if (state) + gpt_part_data->boot + = gpt_part_data->raid + = gpt_part_data->lvm + = gpt_part_data->bios_grub + = gpt_part_data->hp_service + = gpt_part_data->msftres + = gpt_part_data->msftrecv + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); case PED_PARTITION_HIDDEN: gpt_part_data->hidden = state; return 1; @@ -1741,6 +1776,8 @@ gpt_partition_get_flag (const PedPartition *part, PedPartitionFlag flag) return gpt_part_data->hidden; case PED_PARTITION_LEGACY_BOOT: return gpt_part_data->legacy_boot; + case PED_PARTITION_PREP: + return gpt_part_data->prep; case PED_PARTITION_SWAP: case PED_PARTITION_LBA: case PED_PARTITION_ROOT: @@ -1767,6 +1804,7 @@ gpt_partition_is_flag_available (const PedPartition *part, case PED_PARTITION_APPLE_TV_RECOVERY: case PED_PARTITION_HIDDEN: case PED_PARTITION_LEGACY_BOOT: + case PED_PARTITION_PREP: return 1; case PED_PARTITION_SWAP: case PED_PARTITION_ROOT: |