]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Variable/Pei/Variable.h
Align the header of variable from 1 to 4, which can avoid the size of variable conten...
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / Pei / Variable.h
1 /*++
2
3 Copyright (c) 2006 - 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 Variable.h
15
16 Abstract:
17
18 Tiano PEIM to provide the variable functionality
19
20 --*/
21
22 #ifndef _PEI_VARIABLE_H
23 #define _PEI_VARIABLE_H
24
25 #include <PiPei.h>
26 #include <Ppi/ReadOnlyVariable2.h>
27 #include <Library/DebugLib.h>
28 #include <Library/PeimEntryPoint.h>
29 #include <Library/HobLib.h>
30 #include <Library/PcdLib.h>
31 #include <Library/BaseMemoryLib.h>
32 #include <Library/PeiServicesTablePointerLib.h>
33 #include <VariableFormat.h>
34
35 //
36 // Define GET_PAD_SIZE to optimize compiler
37 //
38 #if ((ALIGNMENT == 0) || (ALIGNMENT == 1))
39 #define GET_PAD_SIZE(a) (0)
40 #else
41 #define GET_PAD_SIZE(a) (((~a) + 1) & (ALIGNMENT - 1))
42 #endif
43
44 #define HEADER_ALIGN(Header) (((UINTN) (Header) + HEADER_ALIGNMENT - 1) & (~(HEADER_ALIGNMENT - 1)))
45
46 #define GET_VARIABLE_NAME_PTR(a) (CHAR16 *) ((UINTN) (a) + sizeof (VARIABLE_HEADER))
47
48 #define GET_VARIABLE_DATA_PTR(a) \
49 (UINT8 *) ((UINTN) GET_VARIABLE_NAME_PTR (a) + NameSizeOfVariable(a) + GET_PAD_SIZE (NameSizeOfVariable(a)))
50
51 typedef struct {
52 VARIABLE_HEADER *CurrPtr;
53 VARIABLE_HEADER *EndPtr;
54 VARIABLE_HEADER *StartPtr;
55 } VARIABLE_POINTER_TRACK;
56
57 #define VARIABLE_INDEX_TABLE_VOLUME 122
58
59 #define EFI_VARIABLE_INDEX_TABLE_GUID \
60 { 0x8cfdb8c8, 0xd6b2, 0x40f3, { 0x8e, 0x97, 0x02, 0x30, 0x7c, 0xc9, 0x8b, 0x7c } }
61
62 typedef struct {
63 UINT16 Length;
64 UINT16 GoneThrough;
65 VARIABLE_HEADER *EndPtr;
66 VARIABLE_HEADER *StartPtr;
67 UINT16 Index[VARIABLE_INDEX_TABLE_VOLUME];
68 } VARIABLE_INDEX_TABLE;
69
70
71 //
72 // Functions
73 //
74 EFI_STATUS
75 EFIAPI
76 PeimInitializeVariableServices (
77 IN EFI_FFS_FILE_HEADER *FfsHeader,
78 IN EFI_PEI_SERVICES **PeiServices
79 )
80 /*++
81
82 Routine Description:
83
84 TODO: Add function description
85
86 Arguments:
87
88 FfsHeader - TODO: add argument description
89 PeiServices - TODO: add argument description
90
91 Returns:
92
93 TODO: add return values
94
95 --*/
96 ;
97
98 EFI_STATUS
99 EFIAPI
100 PeiGetVariable (
101 IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
102 IN CONST CHAR16 *VariableName,
103 IN CONST EFI_GUID *VariableGuid,
104 OUT UINT32 *Attributes,
105 IN OUT UINTN *DataSize,
106 OUT VOID *Data
107 )
108 /*++
109
110 Routine Description:
111
112 TODO: Add function description
113
114 Arguments:
115
116 PeiServices - TODO: add argument description
117 VariableName - TODO: add argument description
118 VendorGuid - TODO: add argument description
119 Attributes - TODO: add argument description
120 DataSize - TODO: add argument description
121 Data - TODO: add argument description
122
123 Returns:
124
125 TODO: add return values
126
127 --*/
128 ;
129
130 EFI_STATUS
131 EFIAPI
132 PeiGetNextVariableName (
133 IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
134 IN OUT UINTN *VariableNameSize,
135 IN OUT CHAR16 *VariableName,
136 IN OUT EFI_GUID *VariableGuid
137 )
138 /*++
139
140 Routine Description:
141
142 TODO: Add function description
143
144 Arguments:
145
146 PeiServices - TODO: add argument description
147 VariableNameSize - TODO: add argument description
148 VariableName - TODO: add argument description
149 VendorGuid - TODO: add argument description
150
151 Returns:
152
153 TODO: add return values
154
155 --*/
156 ;
157
158 /**
159 Get one variable by the index count.
160
161 @param IndexTable The pointer to variable index table.
162 @param Count The index count of variable in index table.
163
164 @return The pointer to variable header indexed by count.
165
166 **/
167 VARIABLE_HEADER *
168 GetVariableByIndex (
169 IN VARIABLE_INDEX_TABLE *IndexTable,
170 IN UINT32 Count
171 );
172
173 /**
174 Record Variable in VariableIndex HOB.
175
176 Record Variable in VariableIndex HOB and update the length of variable index table.
177
178 @param IndexTable The pointer to variable index table.
179 @param Variable The pointer to the variable that will be recorded.
180
181 @retval VOID
182
183 **/
184 VOID
185 VariableIndexTableUpdate (
186 IN OUT VARIABLE_INDEX_TABLE *IndexTable,
187 IN VARIABLE_HEADER *Variable
188 );
189
190 #endif // _PEI_VARIABLE_H