grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Emulate the bios area in efi linux loader


From: Bean
Subject: [PATCH] Emulate the bios area in efi linux loader
Date: Fri, 27 Feb 2009 20:52:25 +0800

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  <address@hidden>

        * 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

Attachment: efi_2.diff
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]