[U-Boot] [PATCH 2/7] efi_debug: make variable support customizable
Heinrich Schuchardt
xypron.glpk at gmx.de
Mon Jun 24 05:31:11 UTC 2019
Provide a customization option to define how UEFI variables are
implemented.
This patch provides a dummy implementation without any variable support and
provides the choice between this dummy and the legacy implementation.
Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
---
lib/efi_loader/Kconfig | 18 ++++++
lib/efi_loader/Makefile | 3 +-
lib/efi_loader/efi_setup.c | 10 +++-
lib/efi_loader/efi_variable_null.c | 96 ++++++++++++++++++++++++++++++
lib/efi_selftest/Makefile | 5 +-
5 files changed, 128 insertions(+), 4 deletions(-)
create mode 100644 lib/efi_loader/efi_variable_null.c
diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index cd5436c576..97c2ca9820 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -34,6 +34,24 @@ config EFI_SET_TIME
Provide the SetTime() runtime service at boottime. This service
can be used by an EFI application to adjust the real time clock.
+choice
+ prompt "Variable storage"
+ default EFI_VARIABLES_UBOOT
+ help
+ Define where UEFI variables are stored.
+
+config EFI_VARIABLES_UBOOT
+ bool "U-Boot environment"
+ help
+ UEFI variables are stored in the U-Boot environment.
+
+config EFI_VARIABLES_NULL
+ bool "UEFI variables are not available"
+ help
+ UEFI variables are not supported.
+
+endchoice
+
config EFI_DEVICE_PATH_TO_TEXT
bool "Device path to text protocol"
default y
diff --git a/lib/efi_loader/Makefile b/lib/efi_loader/Makefile
index 01769ea58b..e244aee2f5 100644
--- a/lib/efi_loader/Makefile
+++ b/lib/efi_loader/Makefile
@@ -31,7 +31,8 @@ obj-y += efi_root_node.o
obj-y += efi_runtime.o
obj-y += efi_setup.o
obj-$(CONFIG_EFI_UNICODE_COLLATION_PROTOCOL2) += efi_unicode_collation.o
-obj-y += efi_variable.o
+obj-$(CONFIG_EFI_VARIABLES_UBOOT) += efi_variable.o
+obj-$(CONFIG_EFI_VARIABLES_NULL) += efi_variable_null.o
obj-y += efi_watchdog.o
obj-$(CONFIG_LCD) += efi_gop.o
obj-$(CONFIG_DM_VIDEO) += efi_gop.o
diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
index bfb57836fa..a3f59506d8 100644
--- a/lib/efi_loader/efi_setup.c
+++ b/lib/efi_loader/efi_setup.c
@@ -22,6 +22,8 @@ void __weak allow_unaligned(void)
{
}
+#ifndef CONFIG_EFI_VARIABLES_NULL
+
/**
* efi_init_platform_lang() - define supported languages
*
@@ -82,6 +84,8 @@ out:
return ret;
}
+#endif
+
/**
* efi_init_obj_list() - Initialize and populate EFI object list
*
@@ -89,7 +93,9 @@ out:
*/
efi_status_t efi_init_obj_list(void)
{
+#ifndef CONFIG_EFI_VARIABLES_NULL
u64 os_indications_supported = 0; /* None */
+#endif
efi_status_t ret = EFI_SUCCESS;
/* Initialize once only */
@@ -101,7 +107,7 @@ efi_status_t efi_init_obj_list(void)
/* On ARM switch from EL3 or secure mode to EL2 or non-secure mode */
switch_to_non_secure_mode();
-
+#ifndef CONFIG_EFI_VARIABLES_NULL
/* Define supported languages */
ret = efi_init_platform_lang();
if (ret != EFI_SUCCESS)
@@ -121,7 +127,7 @@ efi_status_t efi_init_obj_list(void)
ret = efi_init_runtime_supported();
if (ret != EFI_SUCCESS)
goto out;
-
+#endif
/* Initialize system table */
ret = efi_initialize_system_table();
if (ret != EFI_SUCCESS)
diff --git a/lib/efi_loader/efi_variable_null.c b/lib/efi_loader/efi_variable_null.c
new file mode 100644
index 0000000000..f4c96c90a3
--- /dev/null
+++ b/lib/efi_loader/efi_variable_null.c
@@ -0,0 +1,96 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Dummy driver for UEFI variables. None of the variable services is supported.
+ *
+ * Copyright (c) 2019 Heinrich Schuchardt
+ */
+
+#include <efi_loader.h>
+
+/**
+ * efi_get_variable() - retrieve value of a UEFI variable
+ *
+ * This function implements the GetVariable runtime service.
+ *
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * @variable_name: name of the variable
+ * @vendor: vendor GUID
+ * @attributes: attributes of the variable
+ * @data_size: size of the buffer to which the variable value is copied
+ * @data: buffer to which the variable value is copied
+ * Return: status code
+ */
+efi_status_t __efi_runtime EFIAPI
+efi_get_variable(u16 *variable_name, const efi_guid_t *vendor, u32 *attributes,
+ efi_uintn_t *data_size, void *data)
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ * efi_get_next_variable_name() - enumerate the current variable names
+ * @variable_name_size: size of variable_name buffer in byte
+ * @variable_name: name of uefi variable's name in u16
+ * @vendor: vendor's guid
+ *
+ * This function implements the GetNextVariableName service.
+ *
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details: http://wiki.phoenix.com/wiki/index.php/
+ * EFI_RUNTIME_SERVICES#GetNextVariableName.28.29
+ *
+ * Return: status code
+ */
+efi_status_t __efi_runtime EFIAPI
+efi_get_next_variable_name(efi_uintn_t *variable_name_size, u16 *variable_name,
+ const efi_guid_t *vendor)
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ * efi_set_variable() - set value of a UEFI variable
+ *
+ * This function implements the SetVariable runtime service.
+ *
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * @variable_name: name of the variable
+ * @vendor: vendor GUID
+ * @attributes: attributes of the variable
+ * @data_size: size of the buffer with the variable value
+ * @data: buffer with the variable value
+ * Return: status code
+ */
+efi_status_t __efi_runtime EFIAPI
+efi_set_variable(u16 *variable_name, const efi_guid_t *vendor, u32 attributes,
+ efi_uintn_t data_size, const void *data)
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ * efi_query_variable_info() - query information the variable store
+ *
+ * This function implements the QueryVariableInfo runtime service.
+ *
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * @attributes: type of variables for which info shall
+ * be provided
+ * @maximum_variable_storage_size: total available storage for variables
+ * @remaining_variable_storage_size: remaining available storage
+ * @maximum_variable_size: maximum size of a variable
+ * Return: status code
+ */
+efi_status_t __efi_runtime EFIAPI
+efi_query_variable_info(u32 attributes, u64 *maximum_variable_storage_size,
+ u64 *remaining_variable_storage_size,
+ u64 *maximum_variable_size)
+{
+ return EFI_UNSUPPORTED;
+}
diff --git a/lib/efi_selftest/Makefile b/lib/efi_selftest/Makefile
index 3bebd0f573..bb3ebd7fa7 100644
--- a/lib/efi_selftest/Makefile
+++ b/lib/efi_selftest/Makefile
@@ -34,7 +34,6 @@ efi_selftest_textinputex.o \
efi_selftest_textoutput.o \
efi_selftest_tpl.o \
efi_selftest_util.o \
-efi_selftest_variables.o \
efi_selftest_watchdog.o
obj-$(CONFIG_EFI_DEVICE_PATH_TO_TEXT) += efi_selftest_devicepath.o
@@ -45,6 +44,10 @@ obj-$(CONFIG_CPU_V7) += efi_selftest_unaligned.o
obj-$(CONFIG_EFI_LOADER_HII) += efi_selftest_hii.o
obj-$(CONFIG_EFI_GET_TIME) += efi_selftest_rtc.o
+ifeq ($(CONFIG_EFI_VARIABLES_NULL),)
+obj-y += efi_selftest_variables.o
+endif
+
ifeq ($(CONFIG_GENERATE_ACPI_TABLE),)
obj-y += efi_selftest_fdt.o
endif
--
2.20.1
More information about the U-Boot
mailing list