]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Variable/Pei/Variable.h
Change C functions, xxxSizeOfVariable(), to MACRO, which can avoid the ICC compile...
[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 NAMESIZE_OF_VARIABLE(Variable) \
47 ((((Variable)->DataSize == (UINT32) -1) || \
48 ((Variable)->Attributes == (UINT32) -1) || \
49 ((Variable)->NameSize == (UINT32) -1)) ? \
50 0 : \
51 (Variable)->NameSize \
52 )
53
54 #define DATASIZE_OF_VARIABLE(Variable) \
55 ((((Variable)->DataSize == (UINT32) -1) || \
56 ((Variable)->Attributes == (UINT32) -1) || \
57 ((Variable)->NameSize == (UINT32) -1)) ? \
58 0 : \
59 (Variable)->DataSize \
60 )
61
62 #define GET_VARIABLE_NAME_PTR(a) (CHAR16 *) ((UINTN) (a) + sizeof (VARIABLE_HEADER))
63
64 #define GET_VARIABLE_DATA_PTR(a) \
65 (UINT8 *) ((UINTN) GET_VARIABLE_NAME_PTR (a) + NAMESIZE_OF_VARIABLE(a) + GET_PAD_SIZE (NAMESIZE_OF_VARIABLE(a)))
66
67 typedef struct {
68 VARIABLE_HEADER *CurrPtr;
69 VARIABLE_HEADER *EndPtr;
70 VARIABLE_HEADER *StartPtr;
71 } VARIABLE_POINTER_TRACK;
72
73 #define VARIABLE_INDEX_TABLE_VOLUME 122
74
75 #define EFI_VARIABLE_INDEX_TABLE_GUID \
76 { 0x8cfdb8c8, 0xd6b2, 0x40f3, { 0x8e, 0x97, 0x02, 0x30, 0x7c, 0xc9, 0x8b, 0x7c } }
77
78 typedef struct {
79 UINT16 Length;
80 UINT16 GoneThrough;
81 VARIABLE_HEADER *EndPtr;
82 VARIABLE_HEADER *StartPtr;
83 UINT16 Index[VARIABLE_INDEX_TABLE_VOLUME];
84 } VARIABLE_INDEX_TABLE;
85
86
87 //
88 // Functions
89 //
90 EFI_STATUS
91 EFIAPI
92 PeimInitializeVariableServices (
93 IN EFI_FFS_FILE_HEADER *FfsHeader,
94 IN EFI_PEI_SERVICES **PeiServices
95 )
96 /*++
97
98 Routine Description:
99
100 TODO: Add function description
101
102 Arguments:
103
104 FfsHeader - TODO: add argument description
105 PeiServices - TODO: add argument description
106
107 Returns:
108
109 TODO: add return values
110
111 --*/
112 ;
113
114 EFI_STATUS
115 EFIAPI
116 PeiGetVariable (
117 IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
118 IN CONST CHAR16 *VariableName,
119 IN CONST EFI_GUID *VariableGuid,
120 OUT UINT32 *Attributes,
121 IN OUT UINTN *DataSize,
122 OUT VOID *Data
123 )
124 /*++
125
126 Routine Description:
127
128 TODO: Add function description
129
130 Arguments:
131
132 PeiServices - TODO: add argument description
133 VariableName - TODO: add argument description
134 VendorGuid - TODO: add argument description
135 Attributes - TODO: add argument description
136 DataSize - TODO: add argument description
137 Data - TODO: add argument description
138
139 Returns:
140
141 TODO: add return values
142
143 --*/
144 ;
145
146 EFI_STATUS
147 EFIAPI
148 PeiGetNextVariableName (
149 IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
150 IN OUT UINTN *VariableNameSize,
151 IN OUT CHAR16 *VariableName,
152 IN OUT EFI_GUID *VariableGuid
153 )
154 /*++
155
156 Routine Description:
157
158 TODO: Add function description
159
160 Arguments:
161
162 PeiServices - TODO: add argument description
163 VariableNameSize - TODO: add argument description
164 VariableName - TODO: add argument description
165 VendorGuid - TODO: add argument description
166
167 Returns:
168
169 TODO: add return values
170
171 --*/
172 ;
173
174 /**
175 Get one variable by the index count.
176
177 @param IndexTable The pointer to variable index table.
178 @param Count The index count of variable in index table.
179
180 @return The pointer to variable header indexed by count.
181
182 **/
183 VARIABLE_HEADER *
184 GetVariableByIndex (
185 IN VARIABLE_INDEX_TABLE *IndexTable,
186 IN UINT32 Count
187 );
188
189 /**
190 Record Variable in VariableIndex HOB.
191
192 Record Variable in VariableIndex HOB and update the length of variable index table.
193
194 @param IndexTable The pointer to variable index table.
195 @param Variable The pointer to the variable that will be recorded.
196
197 @retval VOID
198
199 **/
200 VOID
201 VariableIndexTableUpdate (
202 IN OUT VARIABLE_INDEX_TABLE *IndexTable,
203 IN VARIABLE_HEADER *Variable
204 );
205
206 #endif // _PEI_VARIABLE_H