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 7e7c1cafc28fa90801cf24da54f90270f4fc3837..63017c86f252f42ae6e709832935efe10250975d 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 1b495ec81b296601794be376f842522c945bd572..12e3d637ddaab3974c1e502021fa62d22bd8bb28 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) {
                /*