File grub-0.97-eficd.patch of Package grub
--- grub-0.97/stage2/common.c 2009-03-02 14:00:46.000000000 -0500
+++ grub-0.97/stage2/common.c 2009-03-02 14:04:16.000000000 -0500
@@ -32,7 +32,7 @@
struct multiboot_info mbi;
unsigned long saved_drive;
unsigned long saved_partition;
-unsigned long cdrom_drive;
+unsigned long cdrom_drive = 0x100;
#ifndef STAGE1_5
unsigned long saved_mem_upper;
--- grub-0.97/efi/efidisk.c 2009-03-02 14:00:46.000000000 -0500
+++ grub-0.97/efi/efidisk.c 2009-03-02 14:04:12.000000000 -0500
@@ -534,7 +534,7 @@
unsigned long *drive,
unsigned long *partition)
{
- grub_efi_device_path_t *dp;
+ grub_efi_device_path_t *dp, *dp1;
struct grub_efidisk_data *d, *devices;
int drv;
unsigned long part;
@@ -562,6 +563,27 @@
if (! dp)
return 0;
+ dp1 = dp;
+ while (1)
+ {
+ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp1);
+ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE(dp1);
+
+ if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE &&
+ subtype == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE)
+ {
+ dp1->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
+ dp1->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
+ dp1->length[0] = 4;
+ dp1->length[1] = 0;
+ }
+
+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1))
+ break;
+
+ dp1 = GRUB_EFI_NEXT_DEVICE_PATH(dp1);
+ }
+
drv = 0;
for (d = fd_devices; d; d = d->next, drv++)
{