Hi, Linux needs to locate important data structure such as ACPI. In normal EFI booting, these information can be retrieved from efi system table, However, in case of cross booting, for example, booting 32-bit kernel from 64-bit firmware, or vice verse, the efi information is not usable, which leads to dead keyboard and the hda timeout problem.
Moreover, in kernel 2.6.27 and above, linux only map RAM, and efi runtime area need to be mapped with efi_ioremap. However, efi_ioremap only reserve MAX_EFI_IO_PAGES (100) pages for efi, which is not enough for apple 64-bit firmware (about 17m). Until this is fixed, we need to pass "noefi" option to avoid hanging at startup. But this would lead to similar problem as cross booting. This patch copy the ACPI information to conventional memory and emulated the extended bios data area. With this, linux can find information about ACPI even if efi information is not available, thus resolving the above problem. 2009-02-27 Bean <bean12...@gmail.com> * include/grub/efi/api.h (GRUB_EFI_MPS_TABALE_GUID): New constant. (GRUB_EFI_ACPI_TABLE_GUID): Likewise. (GRUB_EFI_ACPI_20_TABLE_GUID): Likewise. (GRUB_EFI_SMBIOS_TABLE_GUID): Likewise. * loader/i386/efi/linux.c (acpi2_guid): New variable. (EBDA_SEG_ADDR): New constant. (LOW_MEM_ADDR): Likewise. (FAKE_EBDA_SEG): Likewise. (fake_bios_data): New function. (grub_linux_boot): Call fake_bios_data. -- Bean
efi_2.diff
Description: Binary data
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel