1 /** @file 2 Variable check definitions. 3 4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> 5 SPDX-License-Identifier: BSD-2-Clause-Patent 6 7 **/ 8 9 #ifndef _VARIABLE_CHECK_H_ 10 #define _VARIABLE_CHECK_H_ 11 12 #include <Uefi/UefiSpec.h> 13 14 typedef struct _EDKII_VAR_CHECK_PROTOCOL EDKII_VAR_CHECK_PROTOCOL; 15 16 #define EDKII_VAR_CHECK_PROTOCOL_GUID { \ 17 0xaf23b340, 0x97b4, 0x4685, { 0x8d, 0x4f, 0xa3, 0xf2, 0x81, 0x69, 0xb2, 0x1d } \ 18 }; 19 20 typedef EFI_SET_VARIABLE VAR_CHECK_SET_VARIABLE_CHECK_HANDLER; 21 22 /** 23 Register SetVariable check handler. 24 Variable driver will call the handler to do check before 25 really setting the variable into variable storage. 26 27 @param[in] Handler Pointer to the check handler. 28 29 @retval EFI_SUCCESS The SetVariable check handler was registered successfully. 30 @retval EFI_INVALID_PARAMETER Handler is NULL. 31 @retval EFI_ACCESS_DENIED EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has already been signaled. 32 @retval EFI_OUT_OF_RESOURCES There is not enough resource for the SetVariable check handler register request. 33 @retval EFI_UNSUPPORTED This interface is not implemented. 34 For example, it is unsupported in VarCheck protocol if both VarCheck and SmmVarCheck protocols are present. 35 36 **/ 37 typedef 38 EFI_STATUS 39 (EFIAPI * EDKII_VAR_CHECK_REGISTER_SET_VARIABLE_CHECK_HANDLER) ( 40 IN VAR_CHECK_SET_VARIABLE_CHECK_HANDLER Handler 41 ); 42 43 #define VAR_CHECK_VARIABLE_PROPERTY_REVISION 0x0001 44 // 45 // 1. Set by VariableLock PROTOCOL 46 // 2. Set by VarCheck PROTOCOL 47 // 48 // If set, other fields for check will be ignored. 49 // 50 #define VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY BIT0 51 52 typedef struct { 53 UINT16 Revision; 54 UINT16 Property; 55 UINT32 Attributes; 56 UINTN MinSize; 57 UINTN MaxSize; 58 } VAR_CHECK_VARIABLE_PROPERTY; 59 60 typedef struct { 61 EFI_GUID *Guid; 62 CHAR16 *Name; 63 VAR_CHECK_VARIABLE_PROPERTY VariableProperty; 64 } VARIABLE_ENTRY_PROPERTY; 65 66 /** 67 Variable property set. 68 Variable driver will do check according to the VariableProperty before 69 really setting the variable into variable storage. 70 71 @param[in] Name Pointer to the variable name. 72 @param[in] Guid Pointer to the vendor GUID. 73 @param[in] VariableProperty Pointer to the input variable property. 74 75 @retval EFI_SUCCESS The property of variable specified by the Name and Guid was set successfully. 76 @retval EFI_INVALID_PARAMETER Name, Guid or VariableProperty is NULL, or Name is an empty string, 77 or the fields of VariableProperty are not valid. 78 @retval EFI_ACCESS_DENIED EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has 79 already been signaled. 80 @retval EFI_OUT_OF_RESOURCES There is not enough resource for the variable property set request. 81 82 **/ 83 typedef 84 EFI_STATUS 85 (EFIAPI * EDKII_VAR_CHECK_VARIABLE_PROPERTY_SET) ( 86 IN CHAR16 *Name, 87 IN EFI_GUID *Guid, 88 IN VAR_CHECK_VARIABLE_PROPERTY *VariableProperty 89 ); 90 91 /** 92 Variable property get. 93 94 @param[in] Name Pointer to the variable name. 95 @param[in] Guid Pointer to the vendor GUID. 96 @param[out] VariableProperty Pointer to the output variable property. 97 98 @retval EFI_SUCCESS The property of variable specified by the Name and Guid was got successfully. 99 @retval EFI_INVALID_PARAMETER Name, Guid or VariableProperty is NULL, or Name is an empty string. 100 @retval EFI_NOT_FOUND The property of variable specified by the Name and Guid was not found. 101 102 **/ 103 typedef 104 EFI_STATUS 105 (EFIAPI * EDKII_VAR_CHECK_VARIABLE_PROPERTY_GET) ( 106 IN CHAR16 *Name, 107 IN EFI_GUID *Guid, 108 OUT VAR_CHECK_VARIABLE_PROPERTY *VariableProperty 109 ); 110 111 struct _EDKII_VAR_CHECK_PROTOCOL { 112 EDKII_VAR_CHECK_REGISTER_SET_VARIABLE_CHECK_HANDLER RegisterSetVariableCheckHandler; 113 EDKII_VAR_CHECK_VARIABLE_PROPERTY_SET VariablePropertySet; 114 EDKII_VAR_CHECK_VARIABLE_PROPERTY_GET VariablePropertyGet; 115 }; 116 117 extern EFI_GUID gEdkiiVarCheckProtocolGuid; 118 119 #endif 120 121