efi: stub: Pass EFI system table address to U-Boot payload
authorBin Meng <bmeng.cn@gmail.com>
Thu, 23 Aug 2018 15:24:09 +0000 (08:24 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 30 Aug 2018 03:23:07 +0000 (11:23 +0800)
This updates the EFI stub codes to pass UEFI BIOS's system table
address to U-Boot payload so that U-Boot can utilize it.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
include/efi.h
lib/efi/efi_stub.c

index 7e7c1ca..63017c8 100644 (file)
@@ -248,6 +248,7 @@ enum efi_entry_t {
        EFIET_END,      /* Signals this is the last (empty) entry */
        EFIET_MEMORY_MAP,
        EFIET_GOP_MODE,
+       EFIET_SYS_TABLE,
 
        /* Number of entries */
        EFIET_MEMORY_COUNT,
@@ -338,6 +339,15 @@ struct efi_entry_gopmode {
        } info[];
 };
 
+/**
+ * struct efi_entry_systable - system table passed to U-Boot
+ *
+ * @sys_table: EFI system table address
+ */
+struct efi_entry_systable {
+       efi_physical_addr_t sys_table;
+};
+
 static inline struct efi_mem_desc *efi_get_next_mem_desc(
                struct efi_entry_memmap *map, struct efi_mem_desc *desc)
 {
index 1b495ec..12e3d63 100644 (file)
@@ -277,6 +277,7 @@ efi_status_t EFIAPI efi_main(efi_handle_t image,
        struct efi_entry_memmap map;
        struct efi_gop *gop;
        struct efi_entry_gopmode mode;
+       struct efi_entry_systable table;
        efi_guid_t efi_gop_guid = EFI_GOP_GUID;
        efi_uintn_t key, desc_size, size;
        efi_status_t ret;
@@ -335,6 +336,9 @@ efi_status_t EFIAPI efi_main(efi_handle_t image,
                return ret;
        }
 
+       table.sys_table = (ulong)sys_table;
+       add_entry_addr(priv, EFIET_SYS_TABLE, &table, sizeof(table), NULL, 0);
+
        ret = boot->exit_boot_services(image, key);
        if (ret) {
                /*