Re: [PATCH v2] disk: dos: Add all options for EFI System Partitions
On Sun, 25 Feb 2024 at 14:23, Mark Kettenis wrote: > > > From: Peter Robinson > > Date: Sun, 25 Feb 2024 14:14:55 + > > > > The EFI spec states that the ESP can be any of FAT12/16/32 but for > > compatibility doesn't necssarily require the partition to be the > > EFI partition table ID of 0xef. A number of arm devices will not > > find their firmware on a FAT partition with an ID of 0xef so also > > allow the original FAT12/16/32 partition IDs as they are also > > permissable for an ESP. > > > > Signed-off-by: Peter Robinson > > --- > > > > v2: > > - Add 0x0c option > > - Make hex constants consistent > > - Move from if to switch statement > > Erh... > > > disk/part_dos.c | 17 +++-- > > 1 file changed, 15 insertions(+), 2 deletions(-) > > > > diff --git a/disk/part_dos.c b/disk/part_dos.c > > index 567ead7511d..ab855adf347 100644 > > --- a/disk/part_dos.c > > +++ b/disk/part_dos.c > > @@ -40,10 +40,23 @@ static int get_bootable(dos_partition_t *p) > > { > > int ret = 0; > > > > - if (p->sys_ind == 0xef) > > + switch (p->sys_ind){ > > + case 0x01: > > ret |= PART_EFI_SYSTEM_PARTITION; > > - if (p->boot_ind == 0x80) > > + case 0x06: > > + ret |= PART_EFI_SYSTEM_PARTITION; > > + case 0x0b: > > + ret |= PART_EFI_SYSTEM_PARTITION; > > + case 0x0c: > > + ret |= PART_EFI_SYSTEM_PARTITION; > > + case 0xef: > > + ret |= PART_EFI_SYSTEM_PARTITION; > > + case 0x80: > > ret |= PART_BOOTABLE; > > + default: > > + break; > > + } > > + > > That really didn't go well. The 0x80 check was for a different struct > member and there are missing break statements. And I suppose the > suggestion to use a switch was to bunch up the EFI partition type > cases. > > ENOCOFFEE? It was worse, no coffee and an early start for a flight OOPS! > > return ret; > > } > > > > -- > > 2.43.2 > > > >
Re: [PATCH v2] disk: dos: Add all options for EFI System Partitions
> From: Peter Robinson > Date: Sun, 25 Feb 2024 14:14:55 + > > The EFI spec states that the ESP can be any of FAT12/16/32 but for > compatibility doesn't necssarily require the partition to be the > EFI partition table ID of 0xef. A number of arm devices will not > find their firmware on a FAT partition with an ID of 0xef so also > allow the original FAT12/16/32 partition IDs as they are also > permissable for an ESP. > > Signed-off-by: Peter Robinson > --- > > v2: > - Add 0x0c option > - Make hex constants consistent > - Move from if to switch statement Erh... > disk/part_dos.c | 17 +++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/disk/part_dos.c b/disk/part_dos.c > index 567ead7511d..ab855adf347 100644 > --- a/disk/part_dos.c > +++ b/disk/part_dos.c > @@ -40,10 +40,23 @@ static int get_bootable(dos_partition_t *p) > { > int ret = 0; > > - if (p->sys_ind == 0xef) > + switch (p->sys_ind){ > + case 0x01: > ret |= PART_EFI_SYSTEM_PARTITION; > - if (p->boot_ind == 0x80) > + case 0x06: > + ret |= PART_EFI_SYSTEM_PARTITION; > + case 0x0b: > + ret |= PART_EFI_SYSTEM_PARTITION; > + case 0x0c: > + ret |= PART_EFI_SYSTEM_PARTITION; > + case 0xef: > + ret |= PART_EFI_SYSTEM_PARTITION; > + case 0x80: > ret |= PART_BOOTABLE; > + default: > + break; > + } > + That really didn't go well. The 0x80 check was for a different struct member and there are missing break statements. And I suppose the suggestion to use a switch was to bunch up the EFI partition type cases. ENOCOFFEE? > return ret; > } > > -- > 2.43.2 > >
[PATCH v2] disk: dos: Add all options for EFI System Partitions
The EFI spec states that the ESP can be any of FAT12/16/32 but for compatibility doesn't necssarily require the partition to be the EFI partition table ID of 0xef. A number of arm devices will not find their firmware on a FAT partition with an ID of 0xef so also allow the original FAT12/16/32 partition IDs as they are also permissable for an ESP. Signed-off-by: Peter Robinson --- v2: - Add 0x0c option - Make hex constants consistent - Move from if to switch statement disk/part_dos.c | 17 +++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/disk/part_dos.c b/disk/part_dos.c index 567ead7511d..ab855adf347 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -40,10 +40,23 @@ static int get_bootable(dos_partition_t *p) { int ret = 0; - if (p->sys_ind == 0xef) + switch (p->sys_ind){ + case 0x01: ret |= PART_EFI_SYSTEM_PARTITION; - if (p->boot_ind == 0x80) + case 0x06: + ret |= PART_EFI_SYSTEM_PARTITION; + case 0x0b: + ret |= PART_EFI_SYSTEM_PARTITION; + case 0x0c: + ret |= PART_EFI_SYSTEM_PARTITION; + case 0xef: + ret |= PART_EFI_SYSTEM_PARTITION; + case 0x80: ret |= PART_BOOTABLE; + default: + break; + } + return ret; } -- 2.43.2