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