/** @file
Copyright (c) 2018 - 2023, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef __VARIABLE_SERVICE_H__
#define __VARIABLE_SERVICE_H__
#include
#define VARIABLE_SERVICE_SIGNATURE SIGNATURE_32 ('V', 'A', 'R', ' ')
#define VARIABLE_SERVICE_VERSION 1
/**
This code gets variable in storage blocks.
@param VariableName Name of Variable to be found.
@param VariableGuid Variable GUID. Zero GUID is used if it is NULL.
@param Attributes Attribute value of the variable found.
@param DataSize Size of Data found. If size is less than the
data, this value contains the required size.
@param Data The buffer to return the contents of the variable. May be NULL
with a zero DataSize in order to determine the size buffer needed.
@retval EFI_INVALID_PARAMETER Invalid parameter.
@retval EFI_SUCCESS Find the specified variable.
@retval EFI_NOT_FOUND Not found.
@retval EFI_BUFFER_TOO_SMALL DataSize is too small for the result.
@retval EFI_VOLUME_CORRUPTED Variable store is corrupted.
**/
typedef
EFI_STATUS
(EFIAPI *GET_VARIABLE) (
IN CHAR16 *VariableName,
IN EFI_GUID *VariableGuid OPTIONAL,
OUT UINT32 *Attributes OPTIONAL,
IN OUT UINTN *DataSize,
OUT VOID *Data OPTIONAL
);
/**
This code Finds the Next available variable.
Caution: This function may receive untrusted input.
@param VariableNameSize The size of the VariableName buffer. The size must be large
enough to fit input string supplied in VariableName buffer.
@param VariableName Pointer to variable name.
@param VariableGuid Variable GUID.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_NOT_FOUND The next variable was not found.
@retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the result.
VariableNameSize has been updated with the size needed to complete the request.
@retval EFI_VOLUME_CORRUPTED Variable store is corrupted.
@retval EFI_INVALID_PARAMETER VariableNameSize is NULL.
@retval EFI_INVALID_PARAMETER VariableName is NULL.
@retval EFI_INVALID_PARAMETER VendorGuid is NULL.
@retval EFI_INVALID_PARAMETER The input values of VariableName and VendorGuid are not a name and
GUID of an existing variable.
@retval EFI_INVALID_PARAMETER Null-terminator is not found in the first VariableNameSize bytes of
the input VariableName buffer.
**/
typedef
EFI_STATUS
(EFIAPI *GET_NEXT_VARIABLE_NAME) (
IN OUT UINTN *VariableNameSize,
IN OUT CHAR16 *VariableName,
IN OUT EFI_GUID *VariableGuid
);
/**
This code sets variable in storage blocks.
@param VariableName Name of Variable to be found.
@param VariableGuid Variable GUID. Zero GUID is used if it is NULL.
@param Attributes Attribute value of the variable found
@param DataSize Size of Data found. If size is less than the
data, this value contains the required size.
@param Data Data pointer.
@return EFI_INVALID_PARAMETER Invalid parameter.
@return EFI_SUCCESS Set successfully.
@return EFI_OUT_OF_RESOURCES Resource not enough to set variable.
@return EFI_NOT_FOUND Not found.
@return EFI_WRITE_PROTECTED Variable is read-only.
@return EFI_DEVICE_ERROR Variable storage is corrupted.
**/
typedef
EFI_STATUS
(EFIAPI *SET_VARIABLE) (
IN CHAR16 *VariableName,
IN EFI_GUID *VariableGuid OPTIONAL,
IN UINT32 Attributes OPTIONAL,
IN UINTN DataSize,
IN VOID *Data
);
typedef struct {
SERVICE_COMMON_HEADER Header;
GET_VARIABLE GetVariable;
GET_NEXT_VARIABLE_NAME GetNextVariableName;
SET_VARIABLE SetVariable;
} VARIABLE_SERVICE;
#endif