[U-Boot] [PATCH v3 7/8] cmd: efishell: export uefi variable helper functions

AKASHI Takahiro
2018-12-18T05:05:09Z

Those function will be used for integration with 'env' command
so as to handle uefi variables.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
---
cmd/efishell.c | 38 ++++++++++++++++++++++++++++++++++----
include/command.h | 4 ++++
2 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/cmd/efishell.c b/cmd/efishell.c
index 47ad77606062..42a29de7617c 100644
--- a/cmd/efishell.c
+++ b/cmd/efishell.c
@@ -65,7 +65,7 @@ static void dump_var_data(char *data, unsigned long len)
*
* efi_$guid_$varname = {attributes}(type)value
*/
-static int do_efi_dump_var(int argc, char * const argv[])
+static int _do_efi_dump_var(int argc, char * const argv[])
{
char regex[256];
char * const regexlist[] = {regex};
@@ -128,6 +128,21 @@ static int do_efi_dump_var(int argc, char * const argv[])
return CMD_RET_SUCCESS;
}

+int do_efi_dump_var(int argc, char * const argv[])
+{
+ efi_status_t r;
+
+ /* Initialize EFI drivers */
+ r = efi_init_obj_list();
+ if (r != EFI_SUCCESS) {
+ printf("Error: Cannot set up EFI drivers, r = %lu\n",
+ r & ~EFI_ERROR_MASK);
+ return CMD_RET_FAILURE;
+ }
+
+ return _do_efi_dump_var(argc, argv);
+}
+
static int append_value(char **bufp, unsigned long *sizep, char *data)
{
char *tmp_buf = NULL, *new_buf = NULL, *value;
@@ -225,7 +240,7 @@ out:
return 0;
}

-static int do_efi_set_var(int argc, char * const argv[])
+static int _do_efi_set_var(int argc, char * const argv[])
{
char *var_name, *value = NULL;
unsigned long size = 0;
@@ -265,6 +280,21 @@ out:
return ret;
}

+int do_efi_set_var(int argc, char * const argv[])
+{
+ efi_status_t r;
+
+ /* Initialize EFI drivers */
+ r = efi_init_obj_list();
+ if (r != EFI_SUCCESS) {
+ printf("Error: Cannot set up EFI drivers, r = %lu\n",
+ r & ~EFI_ERROR_MASK);
+ return CMD_RET_FAILURE;
+ }
+
+ return _do_efi_set_var(argc, argv);
+}
+
static efi_handle_t *efi_get_handles_by_proto(efi_guid_t *guid)
{
efi_handle_t *handles = NULL;
@@ -916,9 +946,9 @@ static int do_efishell(cmd_tbl_t *cmdtp, int flag,
if (!strcmp(command, "boot"))
return do_efi_boot_opt(argc, argv);
else if (!strcmp(command, "dumpvar") || !strcmp(command, "dmpstore"))
- return do_efi_dump_var(argc, argv);
+ return _do_efi_dump_var(argc, argv);
else if (!strcmp(command, "setvar"))
- return do_efi_set_var(argc, argv);
+ return _do_efi_set_var(argc, argv);
else if (!strcmp(command, "devices"))
return do_efi_show_devices(argc, argv);
else if (!strcmp(command, "drivers"))
diff --git a/include/command.h b/include/command.h
index 9b7b876585d9..5b081ae94cf3 100644
--- a/include/command.h
+++ b/include/command.h
@@ -51,6 +51,10 @@ extern int do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
#if defined(CONFIG_CMD_BOOTEFI)
int do_bootefi_bootmgr_exec(int boot_id);
#endif
+#if defined(CONFIG_CMD_EFISHELL)
+int do_efi_dump_var(int argc, char * const argv[]);
+int do_efi_set_var(int argc, char * const argv[]);
+#endif

/* common/command.c */
int _do_help (cmd_tbl_t *cmd_start, int cmd_items, cmd_tbl_t * cmdtp, int
--
2.19.1