From 9d143def97d645e4ae4ba489e3ae67190f44fc73 Mon Sep 17 00:00:00 2001 From: imp Date: Thu, 18 Apr 2019 05:37:18 +0000 Subject: [PATCH] Add a more generic efi_setenv function. efi_setenv allows any UEFI variable to be set. --- stand/efi/include/efilib.h | 1 + stand/efi/libefi/efienv.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/stand/efi/include/efilib.h b/stand/efi/include/efilib.h index 28e00e80ae84..c88d55a53d96 100644 --- a/stand/efi/include/efilib.h +++ b/stand/efi/include/efilib.h @@ -125,6 +125,7 @@ void cpy16to8(const CHAR16 *, char *, size_t); EFI_STATUS efi_freebsd_getenv(const char *v, void *data, __size_t *len); EFI_STATUS efi_getenv(EFI_GUID *g, const char *v, void *data, __size_t *len); EFI_STATUS efi_global_getenv(const char *v, void *data, __size_t *len); +EFI_STATUS efi_setenv(EFI_GUID *guid, const char *varname, UINT32 attr, void *data, __size_t len); EFI_STATUS efi_setenv_freebsd_wcs(const char *varname, CHAR16 *valstr); /* guids and names */ diff --git a/stand/efi/libefi/efienv.c b/stand/efi/libefi/efienv.c index 55a2520e9dba..d71281ce6d62 100644 --- a/stand/efi/libefi/efienv.c +++ b/stand/efi/libefi/efienv.c @@ -68,6 +68,25 @@ efi_freebsd_getenv(const char *v, void *data, size_t *len) return (efi_getenv(&FreeBSDBootVarGUID, v, data, len)); } +/* + * efi_setenv -- Sets an env variable. + */ +EFI_STATUS +efi_setenv(EFI_GUID *guid, const char *varname, UINT32 attr, void *data, __size_t len) +{ + EFI_STATUS rv; + CHAR16 *uv; + size_t ul; + + uv = NULL; + if (utf8_to_ucs2(varname, &uv, &ul) != 0) + return (EFI_OUT_OF_RESOURCES); + + rv = RS->SetVariable(uv, guid, attr, len, data); + free(uv); + return (rv); +} + EFI_STATUS efi_setenv_freebsd_wcs(const char *varname, CHAR16 *valstr) {