1 /** @file 2 Provides variable check services and database management. 3 4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials are licensed and made available under 6 the terms and conditions of the BSD License that accompanies this distribution. 7 The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php. 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef _VARIABLE_CHECK_LIB_H_ 16 #define _VARIABLE_CHECK_LIB_H_ 17 18 #include <Protocol/VarCheck.h> 19 20 typedef enum { 21 VarCheckRequestReserved0 = 0, 22 VarCheckRequestReserved1 = 1, 23 VarCheckFromTrusted = 2, 24 VarCheckFromUntrusted = 3, 25 } VAR_CHECK_REQUEST_SOURCE; 26 27 typedef 28 VOID 29 (EFIAPI *VAR_CHECK_END_OF_DXE_CALLBACK) ( 30 VOID 31 ); 32 33 /** 34 Register END_OF_DXE callback. 35 The callback will be invoked by VarCheckLibInitializeAtEndOfDxe(). 36 37 @param[in] Callback END_OF_DXE callback. 38 39 @retval EFI_SUCCESS The callback was registered successfully. 40 @retval EFI_INVALID_PARAMETER Callback is NULL. 41 @retval EFI_ACCESS_DENIED EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has 42 already been signaled. 43 @retval EFI_OUT_OF_RESOURCES There is not enough resource for the callback register request. 44 45 **/ 46 EFI_STATUS 47 EFIAPI 48 VarCheckLibRegisterEndOfDxeCallback ( 49 IN VAR_CHECK_END_OF_DXE_CALLBACK Callback 50 ); 51 52 /** 53 Var check initialize at END_OF_DXE. 54 55 This function needs to be called at END_OF_DXE. 56 Address pointers may be returned, 57 and caller needs to ConvertPointer() for the pointers. 58 59 @param[in, out] AddressPointerCount Output pointer to address pointer count. 60 61 @return Address pointer buffer, NULL if input AddressPointerCount is NULL. 62 63 **/ 64 VOID *** 65 EFIAPI 66 VarCheckLibInitializeAtEndOfDxe ( 67 IN OUT UINTN *AddressPointerCount OPTIONAL 68 ); 69 70 /** 71 Register address pointer. 72 The AddressPointer may be returned by VarCheckLibInitializeAtEndOfDxe(). 73 74 @param[in] AddressPointer Address pointer. 75 76 @retval EFI_SUCCESS The address pointer was registered successfully. 77 @retval EFI_INVALID_PARAMETER AddressPointer is NULL. 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 address pointer register request. 81 82 **/ 83 EFI_STATUS 84 EFIAPI 85 VarCheckLibRegisterAddressPointer ( 86 IN VOID **AddressPointer 87 ); 88 89 /** 90 Register SetVariable check handler. 91 92 @param[in] Handler Pointer to check handler. 93 94 @retval EFI_SUCCESS The SetVariable check handler was registered successfully. 95 @retval EFI_INVALID_PARAMETER Handler is NULL. 96 @retval EFI_ACCESS_DENIED EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has 97 already been signaled. 98 @retval EFI_OUT_OF_RESOURCES There is not enough resource for the SetVariable check handler register request. 99 @retval EFI_UNSUPPORTED This interface is not implemented. 100 For example, it is unsupported in VarCheck protocol if both VarCheck and SmmVarCheck protocols are present. 101 102 **/ 103 EFI_STATUS 104 EFIAPI 105 VarCheckLibRegisterSetVariableCheckHandler ( 106 IN VAR_CHECK_SET_VARIABLE_CHECK_HANDLER Handler 107 ); 108 109 /** 110 Variable property set. 111 112 @param[in] Name Pointer to the variable name. 113 @param[in] Guid Pointer to the vendor GUID. 114 @param[in] VariableProperty Pointer to the input variable property. 115 116 @retval EFI_SUCCESS The property of variable specified by the Name and Guid was set successfully. 117 @retval EFI_INVALID_PARAMETER Name, Guid or VariableProperty is NULL, or Name is an empty string, 118 or the fields of VariableProperty are not valid. 119 @retval EFI_ACCESS_DENIED EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has 120 already been signaled. 121 @retval EFI_OUT_OF_RESOURCES There is not enough resource for the variable property set request. 122 123 **/ 124 EFI_STATUS 125 EFIAPI 126 VarCheckLibVariablePropertySet ( 127 IN CHAR16 *Name, 128 IN EFI_GUID *Guid, 129 IN VAR_CHECK_VARIABLE_PROPERTY *VariableProperty 130 ); 131 132 /** 133 Variable property get. 134 135 @param[in] Name Pointer to the variable name. 136 @param[in] Guid Pointer to the vendor GUID. 137 @param[out] VariableProperty Pointer to the output variable property. 138 139 @retval EFI_SUCCESS The property of variable specified by the Name and Guid was got successfully. 140 @retval EFI_INVALID_PARAMETER Name, Guid or VariableProperty is NULL, or Name is an empty string. 141 @retval EFI_NOT_FOUND The property of variable specified by the Name and Guid was not found. 142 143 **/ 144 EFI_STATUS 145 EFIAPI 146 VarCheckLibVariablePropertyGet ( 147 IN CHAR16 *Name, 148 IN EFI_GUID *Guid, 149 OUT VAR_CHECK_VARIABLE_PROPERTY *VariableProperty 150 ); 151 152 /** 153 SetVariable check. 154 155 @param[in] VariableName Name of Variable to set. 156 @param[in] VendorGuid Variable vendor GUID. 157 @param[in] Attributes Attribute value of the variable. 158 @param[in] DataSize Size of Data to set. 159 @param[in] Data Data pointer. 160 @param[in] RequestSource Request source. 161 162 @retval EFI_SUCCESS The SetVariable check result was success. 163 @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, GUID, 164 DataSize and Data value was supplied. 165 @retval EFI_WRITE_PROTECTED The variable in question is read-only. 166 @retval Others The other return status from check handler. 167 168 **/ 169 EFI_STATUS 170 EFIAPI 171 VarCheckLibSetVariableCheck ( 172 IN CHAR16 *VariableName, 173 IN EFI_GUID *VendorGuid, 174 IN UINT32 Attributes, 175 IN UINTN DataSize, 176 IN VOID *Data, 177 IN VAR_CHECK_REQUEST_SOURCE RequestSource 178 ); 179 180 #endif 181