2 Module produce EFI_PEI_READ_ONLY_VARIABLE_PPI on top of EFI_PEI_READ_ONLY_VARIABLE2_PPI.
3 UEFI PI Spec supersedes Intel's Framework Specs.
4 # EFI_PEI_READ_ONLY_VARIABLE_PPI defined in Intel Framework Pkg is replaced by EFI_PEI_READ_ONLY_VARIABLE2_PPI
6 # This module produces EFI_PEI_READ_ONLY_VARIABLE_PPI on top of EFI_PEI_READ_ONLY_VARIABLE2_PPI.
7 # This module is used on platform when both of these two conditions are true:
8 # 1) Framework module consumes EFI_PEI_READ_ONLY_VARIABLE_PPI is present.
9 # 2) The platform has a PI module that only produces EFI_PEI_READ_ONLY_VARIABLE2_PPI.
11 This module can't be used together with ReadOnlyVariable2ToReadOnlyVariableThunk module.
13 Copyright (c) 2006 - 2008 Intel Corporation. <BR>
14 All rights reserved. This program and the accompanying materials
15 are licensed and made available under the terms and conditions of the BSD License
16 which accompanies this distribution. The full text of the license may be found at
17 http://opensource.org/licenses/bsd-license.php
19 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
20 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
26 #include <Ppi/ReadOnlyVariable.h>
27 #include <Ppi/ReadOnlyVariable2.h>
28 #include <Ppi/ReadOnlyVariableThunkPresent.h>
29 #include <Library/DebugLib.h>
30 #include <Library/PeiServicesLib.h>
33 // Function Prototypes
38 IN EFI_PEI_SERVICES
**PeiServices
,
39 IN CHAR16
*VariableName
,
40 IN EFI_GUID
*VendorGuid
,
41 OUT UINT32
*Attributes OPTIONAL
,
42 IN OUT UINTN
*DataSize
,
48 PeiGetNextVariableName (
49 IN EFI_PEI_SERVICES
**PeiServices
,
50 IN OUT UINTN
*VariableNameSize
,
51 IN OUT CHAR16
*VariableName
,
52 IN OUT EFI_GUID
*VendorGuid
58 EFI_PEI_READ_ONLY_VARIABLE_PPI mVariablePpi
= {
60 PeiGetNextVariableName
63 EFI_PEI_PPI_DESCRIPTOR mPpiListVariable
= {
64 (EFI_PEI_PPI_DESCRIPTOR_PPI
| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST
),
65 &gEfiPeiReadOnlyVariablePpiGuid
,
71 PeimInitializeReadOnlyVariable (
72 IN EFI_FFS_FILE_HEADER
*FfsHeader
,
73 IN CONST EFI_PEI_SERVICES
**PeiServices
79 Provide the functionality of the variable services.
83 FfsHeadher - The FFS file header
84 PeiServices - General purpose services available to every PEIM.
88 Status - EFI_SUCCESS if the interface could be successfully
97 // Make sure ReadOnlyVariableToReadOnlyVariable2 module is not present. If so, the call chain will form a
98 // infinite loop: ReadOnlyVariable -> ReadOnlyVariable2 -> ReadOnlyVariable -> ....
100 Status
= PeiServicesLocatePpi (&gPeiReadonlyVariableThunkPresentPpiGuid
, 0, NULL
, &Interface
);
101 ASSERT (Status
== EFI_NOT_FOUND
);
104 // Publish the variable capability to other modules
106 return (*PeiServices
)->InstallPpi (PeiServices
, &mPpiListVariable
);
112 IN EFI_PEI_SERVICES
**PeiServices
,
113 IN CHAR16
*VariableName
,
114 IN EFI_GUID
*VendorGuid
,
115 OUT UINT32
*Attributes OPTIONAL
,
116 IN OUT UINTN
*DataSize
,
123 Provide the read variable functionality of the variable services.
127 PeiServices - General purpose services available to every PEIM.
129 VariableName - The variable name
131 VendorGuid - The vendor's GUID
133 Attributes - Pointer to the attribute
135 DataSize - Size of data
137 Data - Pointer to data
141 EFI_SUCCESS - The interface could be successfully installed
143 EFI_NOT_FOUND - The variable could not be discovered
145 EFI_BUFFER_TOO_SMALL - The caller buffer is not large enough
150 EFI_PEI_READ_ONLY_VARIABLE2_PPI
*ReadOnlyVariable2
;
152 Status
= (*PeiServices
)->LocatePpi (
153 (CONST EFI_PEI_SERVICES
**)PeiServices
,
154 &gEfiPeiReadOnlyVariable2PpiGuid
,
157 (VOID
**)&ReadOnlyVariable2
159 ASSERT_EFI_ERROR (Status
);
161 return ReadOnlyVariable2
->GetVariable (
173 PeiGetNextVariableName (
174 IN EFI_PEI_SERVICES
**PeiServices
,
175 IN OUT UINTN
*VariableNameSize
,
176 IN OUT CHAR16
*VariableName
,
177 IN OUT EFI_GUID
*VendorGuid
183 Provide the get next variable functionality of the variable services.
187 PeiServices - General purpose services available to every PEIM.
188 VariabvleNameSize - The variable name's size.
189 VariableName - A pointer to the variable's name.
190 VariableGuid - A pointer to the EFI_GUID structure.
192 VariableNameSize - Size of the variable name
194 VariableName - The variable name
196 VendorGuid - The vendor's GUID
200 EFI_SUCCESS - The interface could be successfully installed
202 EFI_NOT_FOUND - The variable could not be discovered
207 EFI_PEI_READ_ONLY_VARIABLE2_PPI
*ReadOnlyVariable2
;
209 Status
= (*PeiServices
)->LocatePpi (
210 (CONST EFI_PEI_SERVICES
**)PeiServices
,
211 &gEfiPeiReadOnlyVariable2PpiGuid
,
214 (VOID
**)&ReadOnlyVariable2
216 ASSERT_EFI_ERROR (Status
);
218 return ReadOnlyVariable2
->NextVariableName (