Thanks, will fix that in next version.
On 01/09/14 23:06, Al Stone wrote:
Changelog, please.
On 01/09/2014 02:26 AM, Tomasz Nowicki wrote:
grub-core/loader/arm64/linux.c | 70 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-)
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c index 75ad871..17938ba 100644 --- a/grub-core/loader/arm64/linux.c +++ b/grub-core/loader/arm64/linux.c @@ -54,6 +54,8 @@ static grub_addr_t initrd_end; static void *loaded_fdt; static void *fdt;
+static void *apei_data;
- static void * get_firmware_fdt (void) {
@@ -241,6 +243,69 @@ out: }
static grub_err_t +grub_cmd_apei (grub_command_t cmd __attribute__ ((unused)),
int argc, char *argv[])
+{
- grub_efi_physical_address_t apei_phy_addr;
- grub_efi_boot_services_t *b;
- grub_efi_status_t status;
- grub_file_t apei;
- void *blob = NULL;
- int size;
- if (!loaded)
- {
grub_error (GRUB_ERR_BAD_ARGUMENT,
N_("you need to load the kernel first"));
return GRUB_ERR_BAD_OS;
- }
- if (argc != 1)
- return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
- apei = grub_file_open (argv[0]);
- if (!apei)
- goto out;
- size = grub_file_size (apei);
- if (size == 0)
- goto out;
- blob = grub_malloc (size);
- if (!blob)
- goto out;
- if (grub_file_read (apei, blob, size) < size)
- {
if (!grub_errno)
- grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
argv[0]);
goto out;
- }
- grub_dprintf ("linux", "allocating %ld bytes for APEI blob\n", size);
- apei_phy_addr = 0x80000000 + 0x2000000 - 0x200000;
- apei_data = grub_efi_allocate_pages (apei_phy_addr,
BYTES_TO_PAGES(size));
- if (!apei_data) {
- grub_error (GRUB_ERR_OUT_OF_MEMORY,
N_("can not allocate at 0x%lx"), apei_phy_addr);
- goto out;
- }
- grub_memmove (apei_data, blob, size);
- grub_dprintf ("linux", "Installed APEI blob @ %p\n", apei_data);
+out:
- if (apei)
- grub_file_close (apei);
- if (blob)
- grub_free (blob);
- return grub_errno;
+}
+static grub_err_t grub_linux_boot (void) { grub_efi_memory_mapped_device_path_t *mempath; @@ -465,7 +530,7 @@ fail: }
-static grub_command_t cmd_linux, cmd_initrd, cmd_devicetree; +static grub_command_t cmd_linux, cmd_initrd, cmd_devicetree, cmd_apei;
GRUB_MOD_INIT (linux) { @@ -476,6 +541,9 @@ GRUB_MOD_INIT (linux) cmd_devicetree = grub_register_command ("devicetree", grub_cmd_devicetree, 0, N_("Load DTB file."));
- cmd_apei = grub_register_command ("apei", grub_cmd_apei, 0,
my_mod = mod; }N_("Load APEI blob."));