提交 4b27a761 编写于 作者: A AKASHI Takahiro 提交者: Heinrich Schuchardt

cmd: env: add -nv option for UEFI non-volatile variable

With this option, -nv, at "setenv -e" command, a variable will be defined
as non-volatile.
Signed-off-by: NAKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: NHeinrich Schuchardt <xypron.glpk@gmx.de>
上级 f658c2e1
......@@ -1344,8 +1344,9 @@ U_BOOT_CMD_COMPLETE(
setenv, CONFIG_SYS_MAXARGS, 0, do_env_set,
"set environment variables",
#if defined(CONFIG_CMD_NVEDIT_EFI)
"-e name [value ...]\n"
"-e [-nv] name [value ...]\n"
" - set UEFI variable 'name' to 'value' ...'\n"
" 'nv' option makes the variable non-volatile\n"
" - delete UEFI variable 'name' if 'value' not specified\n"
#endif
"setenv [-f] name value ...\n"
......
......@@ -349,6 +349,7 @@ int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
u16 *var_name16 = NULL, *p;
size_t len;
efi_guid_t guid;
u32 attributes;
efi_status_t ret;
if (argc == 1)
......@@ -362,6 +363,16 @@ int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
return CMD_RET_FAILURE;
}
attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS |
EFI_VARIABLE_RUNTIME_ACCESS;
if (!strcmp(argv[1], "-nv")) {
attributes |= EFI_VARIABLE_NON_VOLATILE;
argc--;
argv++;
if (argc == 1)
return CMD_RET_SUCCESS;
}
var_name = argv[1];
if (argc == 2) {
/* delete */
......@@ -391,9 +402,7 @@ int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
utf8_utf16_strncpy(&p, var_name, len + 1);
guid = efi_global_variable_guid;
ret = EFI_CALL(efi_set_variable(var_name16, &guid,
EFI_VARIABLE_BOOTSERVICE_ACCESS |
EFI_VARIABLE_RUNTIME_ACCESS,
ret = EFI_CALL(efi_set_variable(var_name16, &guid, attributes,
size, value));
if (ret == EFI_SUCCESS) {
ret = CMD_RET_SUCCESS;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册