summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2020-02-26 14:49:24 -0500
committerTom Rini <trini@konsulko.com>2020-02-26 14:49:24 -0500
commit4e293f78df03b204c0034e20a3ed165e410799d6 (patch)
tree62e1713fb51d8b3404d16bd8a2280820d02e41f7
parent548ce227d3d852455c6395c0cec30af0cda77b09 (diff)
parent76be687288dc618eabd1ef643488cd5bd93f84ff (diff)
downloadu-boot-WIP/26Feb2020.tar.gz
Merge tag 'efi-2020-04-rc4' of https://gitlab.denx.de/u-boot/custodians/u-boot-efiWIP/26Feb2020
Pull request for UEFI sub-system for efi-2020-04-rc4 UEFI spec 2.8 errata A replaces the RuntimeServicesSupported variable defined in UEFI spec 2.8 by the configuration table EFI_RT_PROPERTIES_TABLE. So let's follow suit.
-rw-r--r--cmd/efidebug.c4
-rw-r--r--include/efi_api.h12
-rw-r--r--lib/efi_loader/efi_runtime.c36
-rw-r--r--lib/efi_loader/efi_setup.c8
4 files changed, 48 insertions, 12 deletions
diff --git a/cmd/efidebug.c b/cmd/efidebug.c
index 576e95b395..510e258b12 100644
--- a/cmd/efidebug.c
+++ b/cmd/efidebug.c
@@ -264,6 +264,10 @@ static const struct {
"SMBIOS table",
SMBIOS_TABLE_GUID,
},
+ {
+ "Runtime properties",
+ EFI_RT_PROPERTIES_TABLE_GUID,
+ },
};
/**
diff --git a/include/efi_api.h b/include/efi_api.h
index 22396172e1..b7b68cb7a1 100644
--- a/include/efi_api.h
+++ b/include/efi_api.h
@@ -228,6 +228,18 @@ struct efi_capsule_header {
#define EFI_RT_SUPPORTED_QUERY_CAPSULE_CAPABILITIES 0x1000
#define EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO 0x2000
+#define EFI_RT_PROPERTIES_TABLE_GUID \
+ EFI_GUID(0xeb66918a, 0x7eef, 0x402a, 0x84, 0x2e, \
+ 0x93, 0x1d, 0x21, 0xc3, 0x8a, 0xe9)
+
+#define EFI_RT_PROPERTIES_TABLE_VERSION 0x1
+
+struct efi_rt_properties_table {
+ u16 version;
+ u16 length;
+ u32 runtime_services_supported;
+};
+
struct efi_runtime_services {
struct efi_table_hdr hdr;
efi_status_t (EFIAPI *get_time)(struct efi_time *time,
diff --git a/lib/efi_loader/efi_runtime.c b/lib/efi_loader/efi_runtime.c
index 4b3c843b2c..4be51335bc 100644
--- a/lib/efi_loader/efi_runtime.c
+++ b/lib/efi_loader/efi_runtime.c
@@ -18,6 +18,10 @@
/* For manual relocation support */
DECLARE_GLOBAL_DATA_PTR;
+/* GUID of the runtime properties table */
+static const efi_guid_t efi_rt_properties_table_guid =
+ EFI_RT_PROPERTIES_TABLE_GUID;
+
struct efi_runtime_mmio_list {
struct list_head link;
void **ptr;
@@ -94,9 +98,28 @@ static __efi_runtime_data efi_uintn_t efi_descriptor_size;
* handle a good number of runtime callbacks
*/
+/**
+ * efi_init_runtime_supported() - create runtime properties table
+ *
+ * Create a configuration table specifying which services are available at
+ * runtime.
+ *
+ * Return: status code
+ */
efi_status_t efi_init_runtime_supported(void)
{
- u16 efi_runtime_services_supported =
+ efi_status_t ret;
+ struct efi_rt_properties_table *rt_table;
+
+ ret = efi_allocate_pool(EFI_RUNTIME_SERVICES_DATA,
+ sizeof(struct efi_rt_properties_table),
+ (void **)&rt_table);
+ if (ret != EFI_SUCCESS)
+ return ret;
+
+ rt_table->version = EFI_RT_PROPERTIES_TABLE_VERSION;
+ rt_table->length = sizeof(struct efi_rt_properties_table);
+ rt_table->runtime_services_supported =
EFI_RT_SUPPORTED_SET_VIRTUAL_ADDRESS_MAP |
EFI_RT_SUPPORTED_CONVERT_POINTER;
@@ -105,15 +128,12 @@ efi_status_t efi_init_runtime_supported(void)
* as well as efi_runtime_services.
*/
#ifdef CONFIG_EFI_HAVE_RUNTIME_RESET
- efi_runtime_services_supported |= EFI_RT_SUPPORTED_RESET_SYSTEM;
+ rt_table->runtime_services_supported |= EFI_RT_SUPPORTED_RESET_SYSTEM;
#endif
- return EFI_CALL(efi_set_variable(L"RuntimeServicesSupported",
- &efi_global_variable_guid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS |
- EFI_VARIABLE_RUNTIME_ACCESS,
- sizeof(efi_runtime_services_supported),
- &efi_runtime_services_supported));
+ ret = efi_install_configuration_table(&efi_rt_properties_table_guid,
+ rt_table);
+ return ret;
}
/**
diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
index de7b616c6d..2060307b05 100644
--- a/lib/efi_loader/efi_setup.c
+++ b/lib/efi_loader/efi_setup.c
@@ -122,13 +122,13 @@ efi_status_t efi_init_obj_list(void)
if (ret != EFI_SUCCESS)
goto out;
- /* Indicate supported runtime services */
- ret = efi_init_runtime_supported();
+ /* Initialize system table */
+ ret = efi_initialize_system_table();
if (ret != EFI_SUCCESS)
goto out;
- /* Initialize system table */
- ret = efi_initialize_system_table();
+ /* Indicate supported runtime services */
+ ret = efi_init_runtime_supported();
if (ret != EFI_SUCCESS)
goto out;