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