aboutsummaryrefslogtreecommitdiff
path: root/lib/efi_loader/efi_var_file.c
diff options
context:
space:
mode:
authorIlias Apalodimas <ilias.apalodimas@linaro.org>2020-07-23 15:49:49 +0300
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-08-01 11:57:41 +0200
commite01aed47d6a0e4d99e886d80b885fe0898850357 (patch)
tree718e81bb971d7211e89604cbe4c95cd44c53760a /lib/efi_loader/efi_var_file.c
parentdb94dfbd525943b1bf4ecda81477cedfe70fc50e (diff)
downloadu-boot-e01aed47d6a0e4d99e886d80b885fe0898850357.zip
u-boot-e01aed47d6a0e4d99e886d80b885fe0898850357.tar.gz
u-boot-e01aed47d6a0e4d99e886d80b885fe0898850357.tar.bz2
efi_loader: Enable run-time variable support for tee based variables
We recently added functions for storing/restoring variables from a file to a memory backed buffer marked as __efi_runtime_data commit f1f990a8c958 ("efi_loader: memory buffer for variables") commit 5f7dcf079de8 ("efi_loader: UEFI variable persistence") Using the same idea we now can support GetVariable() and GetNextVariable() on the OP-TEE based variables as well. So let's re-arrange the code a bit and move the commmon code for accessing variables out of efi_variable.c. Create common functions for reading variables from memory that both implementations can use on run-time. Then just use those functions in the run-time variants of the OP-TEE based EFI variable implementation and initialize the memory buffer on ExitBootServices() Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'lib/efi_loader/efi_var_file.c')
-rw-r--r--lib/efi_loader/efi_var_file.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/lib/efi_loader/efi_var_file.c b/lib/efi_loader/efi_var_file.c
index 6f9d76f..b171d2d 100644
--- a/lib/efi_loader/efi_var_file.c
+++ b/lib/efi_loader/efi_var_file.c
@@ -46,18 +46,8 @@ static efi_status_t __maybe_unused efi_set_blk_dev_to_system_partition(void)
return EFI_SUCCESS;
}
-/**
- * efi_var_collect() - collect non-volatile variables in buffer
- *
- * A buffer is allocated and filled with all non-volatile variables in a
- * format ready to be written to disk.
- *
- * @bufp: pointer to pointer of buffer with collected variables
- * @lenp: pointer to length of buffer
- * Return: status code
- */
-static efi_status_t __maybe_unused efi_var_collect(struct efi_var_file **bufp,
- loff_t *lenp)
+efi_status_t __maybe_unused efi_var_collect(struct efi_var_file **bufp, loff_t *lenp,
+ u32 check_attr_mask)
{
size_t len = EFI_VAR_BUF_SIZE;
struct efi_var_file *buf;
@@ -102,11 +92,10 @@ static efi_status_t __maybe_unused efi_var_collect(struct efi_var_file **bufp,
free(buf);
return ret;
}
- if (!(var->attr & EFI_VARIABLE_NON_VOLATILE))
- continue;
- var->length = data_length;
- var = (struct efi_var_entry *)
- ALIGN((uintptr_t)data + data_length, 8);
+ if ((var->attr & check_attr_mask) == check_attr_mask) {
+ var->length = data_length;
+ var = (struct efi_var_entry *)ALIGN((uintptr_t)data + data_length, 8);
+ }
}
buf->reserved = 0;
@@ -137,7 +126,7 @@ efi_status_t efi_var_to_file(void)
loff_t actlen;
int r;
- ret = efi_var_collect(&buf, &len);
+ ret = efi_var_collect(&buf, &len, EFI_VARIABLE_NON_VOLATILE);
if (ret != EFI_SUCCESS)
goto error;