summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/efi.h10
-rw-r--r--lib/efi/efi_stub.c4
2 files changed, 14 insertions, 0 deletions
diff --git a/include/efi.h b/include/efi.h
index 7e7c1cafc28..63017c86f25 100644
--- a/include/efi.h
+++ b/include/efi.h
@@ -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)
{
diff --git a/lib/efi/efi_stub.c b/lib/efi/efi_stub.c
index 1b495ec81b2..12e3d637dda 100644
--- a/lib/efi/efi_stub.c
+++ b/lib/efi/efi_stub.c
@@ -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) {
/*