]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrUtilityLib.h
1) Sync EdkCompatibilityPkg with EDK 1.04. The changes includes:
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Tools / Source / UefiVfrCompile / VfrUtilityLib.h
CommitLineData
95d675b5 1#ifndef _VFRUTILITYLIB_H_\r
2#define _VFRUTILITYLIB_H_\r
3\r
4#include "Tiano.h"\r
5#include "string.h"\r
6#include "EfiTypes.h"\r
7#include "EfiVfr.h"\r
8#include "VfrError.h"\r
9\r
10#define MAX_NAME_LEN 64\r
11#define DEFAULT_ALIGN 1\r
12#define DEFAULT_PACK_ALIGN 0xFFFFFFFF\r
13#define DEFAULT_NAME_TABLE_ITEMS 1024\r
14\r
15#define EFI_BITS_SHIFT_PER_UINT32 0x5\r
16#define EFI_BITS_PER_UINT32 (1 << EFI_BITS_SHIFT_PER_UINT32)\r
17\r
18#define BUFFER_SAFE_FREE(Buf) do { if ((Buf) != NULL) { delete (Buf); } } while (0);\r
19\r
20class CVfrBinaryOutput {\r
21public:\r
22 virtual VOID WriteLine (IN FILE *, IN UINT32, IN INT8 *, IN INT8 *, IN UINT32);\r
23 virtual VOID WriteEnd (IN FILE *, IN UINT32, IN INT8 *, IN INT8 *, IN UINT32);\r
24};\r
25\r
26UINT32\r
27_STR2U32 (\r
28 IN INT8 *Str\r
29 );\r
30\r
31struct SConfigInfo {\r
32 UINT16 mOffset;\r
33 UINT16 mWidth;\r
34 UINT8 *mValue;\r
35 SConfigInfo *mNext;\r
36\r
37 SConfigInfo (IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
38 ~SConfigInfo (VOID);\r
39};\r
40\r
41struct SConfigItem {\r
42 INT8 *mId;\r
43 INT8 *mInfo;\r
44 SConfigInfo *mInfoStrList;\r
45 SConfigItem *mNext;\r
46\r
47public:\r
48 SConfigItem (IN INT8 *, IN INT8 *);\r
49 SConfigItem (IN INT8 *, IN INT8 *, IN UINT8, IN UINT16, IN UINT16, IN EFI_IFR_TYPE_VALUE);\r
50 virtual ~SConfigItem ();\r
51};\r
52\r
53class CVfrBufferConfig {\r
54private:\r
55 SConfigItem *mItemListHead;\r
56 SConfigItem *mItemListTail;\r
57 SConfigItem *mItemListPos;\r
58\r
59public:\r
60 CVfrBufferConfig (VOID);\r
61 virtual ~CVfrBufferConfig (VOID);\r
62\r
63 virtual UINT8 Register (IN INT8 *, IN INT8 *Info = NULL);\r
64 virtual VOID Open (VOID);\r
65 virtual BOOLEAN Eof(VOID);\r
66 virtual UINT8 Select (IN INT8 *, IN INT8 *Info = NULL);\r
67 virtual UINT8 Write (IN CONST CHAR8, IN INT8 *, IN INT8 *, IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
68#if 0\r
69 virtual UINT8 Read (OUT INT8 **, OUT INT8 **, OUT INT8 **, OUT INT8 **, OUT INT8 **);\r
70#endif\r
71 virtual VOID Close (VOID);\r
72 virtual VOID OutputCFile (IN FILE *, IN INT8 *);\r
73};\r
74\r
75extern CVfrBufferConfig gCVfrBufferConfig;\r
76\r
77#define ALIGN_STUFF(Size, Align) ((Align) - (Size) % (Align))\r
78#define INVALID_ARRAY_INDEX 0xFFFFFFFF\r
79\r
80struct SVfrDataType;\r
81\r
82struct SVfrDataField {\r
83 INT8 mFieldName[MAX_NAME_LEN];\r
84 SVfrDataType *mFieldType;\r
85 UINT32 mOffset;\r
86 UINT32 mArrayNum;\r
87 SVfrDataField *mNext;\r
88};\r
89\r
90struct SVfrDataType {\r
91 INT8 mTypeName[MAX_NAME_LEN];\r
92 UINT8 mType;\r
93 UINT32 mAlign;\r
94 UINT32 mTotalSize;\r
95 SVfrDataField *mMembers;\r
96 SVfrDataType *mNext;\r
97};\r
98\r
99class CVfrVarDataTypeDB {\r
100private:\r
101 SVfrDataType *mDataTypeList;\r
102 UINT32 mPackAlign;\r
103\r
104 SVfrDataType *mNewDataType;\r
105 SVfrDataType *mCurrDataType;\r
106 SVfrDataField *mCurrDataField;\r
107\r
108 VOID InternalTypesListInit (VOID);\r
109 VOID RegisterNewType (IN SVfrDataType *);\r
110\r
111 EFI_VFR_RETURN_CODE ExtractStructTypeName (IN INT8 *&, OUT INT8 *);\r
112 EFI_VFR_RETURN_CODE ExtractFieldNameAndArrary (IN INT8 *&, OUT INT8 *, OUT UINT32 &);\r
113 EFI_VFR_RETURN_CODE GetTypeField (IN INT8 *, IN SVfrDataType *, IN SVfrDataField *&);\r
114 EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &);\r
115 UINT8 GetFieldWidth (IN SVfrDataField *);\r
116 UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32);\r
117\r
118public:\r
119 CVfrVarDataTypeDB (VOID);\r
120 ~CVfrVarDataTypeDB (VOID);\r
121\r
122 EFI_VFR_RETURN_CODE Pack (IN UINT32);\r
123 VOID UnPack (VOID);\r
124\r
125 VOID DeclareDataTypeBegin (VOID);\r
126 EFI_VFR_RETURN_CODE SetNewTypeName (IN INT8 *);\r
127 EFI_VFR_RETURN_CODE DataTypeAddField (IN INT8 *, IN INT8 *, IN UINT32);\r
128 VOID DeclareDataTypeEnd (VOID);\r
129\r
130 EFI_VFR_RETURN_CODE GetDataType (IN INT8 *, OUT SVfrDataType **);\r
131 EFI_VFR_RETURN_CODE GetDataTypeSize (IN INT8 *, OUT UINT32 *);\r
132 EFI_VFR_RETURN_CODE GetDataFieldInfo (IN INT8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &);\r
133\r
134 EFI_VFR_RETURN_CODE GetUserDefinedTypeNameList (OUT INT8 ***, OUT UINT32 *);\r
135 BOOLEAN IsTypeNameDefined (IN INT8 *);\r
136\r
137#ifdef CVFR_VARDATATYPEDB_DEBUG\r
138 VOID ParserDB ();\r
139#endif\r
140};\r
141\r
142typedef enum {\r
143 EFI_VFR_VARSTORE_INVALID,\r
144 EFI_VFR_VARSTORE_BUFFER,\r
145 EFI_VFR_VARSTORE_EFI,\r
146 EFI_VFR_VARSTORE_NAME\r
147} EFI_VFR_VARSTORE_TYPE;\r
148\r
149struct SVfrVarStorageNode {\r
150 EFI_GUID mGuid;\r
151 INT8 *mVarStoreName;\r
152 EFI_VARSTORE_ID mVarStoreId;\r
153 struct SVfrVarStorageNode *mNext;\r
154\r
155 EFI_VFR_VARSTORE_TYPE mVarStoreType;\r
156 union {\r
157 // EFI Variable\r
158 struct {\r
159 EFI_STRING_ID mEfiVarName;\r
160 UINT32 mEfiVarSize;\r
161 } mEfiVar;\r
162\r
163 // Buffer Storage\r
164 SVfrDataType *mDataType;\r
165\r
166 // NameValue Storage\r
167 struct {\r
168 EFI_STRING_ID *mNameTable;\r
169 UINT32 mTableSize;\r
170 } mNameSpace;\r
171 } mStorageInfo;\r
172\r
173public:\r
174 SVfrVarStorageNode (IN EFI_GUID *, IN INT8 *, IN EFI_VARSTORE_ID, IN EFI_STRING_ID, IN UINT32);\r
175 SVfrVarStorageNode (IN EFI_GUID *, IN INT8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *);\r
176 SVfrVarStorageNode (IN INT8 *, IN EFI_VARSTORE_ID);\r
177 ~SVfrVarStorageNode (VOID);\r
178};\r
179\r
180struct EFI_VARSTORE_INFO {\r
181 EFI_VARSTORE_ID mVarStoreId;\r
182 union {\r
183 EFI_STRING_ID mVarName;\r
184 UINT16 mVarOffset;\r
185 } mInfo;\r
186 UINT8 mVarType;\r
187 UINT32 mVarTotalSize;\r
188\r
189 EFI_VARSTORE_INFO (VOID);\r
190 EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO &);\r
191 BOOLEAN operator == (IN EFI_VARSTORE_INFO *);\r
192};\r
193\r
194#define EFI_VARSTORE_ID_MAX 0xFFFF\r
195#define EFI_FREE_VARSTORE_ID_BITMAP_SIZE ((EFI_VARSTORE_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
196\r
197class CVfrDataStorage {\r
198private:\r
199 UINT32 mFreeVarStoreIdBitMap[EFI_FREE_VARSTORE_ID_BITMAP_SIZE];\r
200\r
201 struct SVfrVarStorageNode *mBufferVarStoreList;\r
202 struct SVfrVarStorageNode *mEfiVarStoreList;\r
203 struct SVfrVarStorageNode *mNameVarStoreList;\r
204\r
205 struct SVfrVarStorageNode *mCurrVarStorageNode;\r
206 struct SVfrVarStorageNode *mNewVarStorageNode;\r
207\r
208private:\r
209\r
210 EFI_VARSTORE_ID GetFreeVarStoreId (VOID);\r
211 BOOLEAN ChekVarStoreIdFree (IN EFI_VARSTORE_ID);\r
212 VOID MarkVarStoreIdUsed (IN EFI_VARSTORE_ID);\r
213 VOID MarkVarStoreIdUnused (IN EFI_VARSTORE_ID);\r
214\r
215public:\r
216 CVfrDataStorage ();\r
217 ~CVfrDataStorage ();\r
218\r
219 EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (INT8 *);\r
220 EFI_VFR_RETURN_CODE NameTableAddItem (EFI_STRING_ID);\r
221 EFI_VFR_RETURN_CODE DeclareNameVarStoreEnd (EFI_GUID *);\r
222\r
223 EFI_VFR_RETURN_CODE DeclareEfiVarStore (IN INT8 *, IN EFI_GUID *, IN EFI_STRING_ID, IN UINT32);\r
224\r
225 EFI_VFR_RETURN_CODE DeclareBufferVarStore (IN INT8 *, IN EFI_GUID *, IN CVfrVarDataTypeDB *, IN INT8 *, IN EFI_VARSTORE_ID);\r
226\r
227 EFI_VFR_RETURN_CODE GetVarStoreId (IN INT8 *, OUT EFI_VARSTORE_ID *);\r
228 EFI_VFR_RETURN_CODE GetVarStoreType (IN INT8 *, OUT EFI_VFR_VARSTORE_TYPE &);\r
229 EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT INT8 **);\r
230\r
231 EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN INT8 *, OUT INT8 **);\r
232 EFI_VFR_RETURN_CODE GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO *);\r
233 EFI_VFR_RETURN_CODE GetNameVarStoreInfo (IN EFI_VARSTORE_INFO *, IN UINT32);\r
234\r
235 EFI_VFR_RETURN_CODE BufferVarStoreRequestElementAdd (IN INT8 *, IN EFI_VARSTORE_INFO &);\r
236};\r
237\r
238#define EFI_QUESTION_ID_MAX 0xFFFF\r
239#define EFI_FREE_QUESTION_ID_BITMAP_SIZE ((EFI_QUESTION_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
240#define EFI_QUESTION_ID_INVALID 0x0\r
241\r
242#define DATE_YEAR_BITMASK 0x0000FFFF\r
243#define DATE_MONTH_BITMASK 0x00FF0000\r
244#define DATE_DAY_BITMASK 0xFF000000\r
245#define TIME_HOUR_BITMASK 0x000000FF\r
246#define TIME_MINUTE_BITMASK 0x0000FF00\r
247#define TIME_SECOND_BITMASK 0x00FF0000\r
248\r
249struct SVfrQuestionNode {\r
250 INT8 *mName;\r
251 INT8 *mVarIdStr;\r
252 EFI_QUESTION_ID mQuestionId;\r
253 UINT32 mBitMask;\r
254 SVfrQuestionNode *mNext;\r
255\r
256 SVfrQuestionNode (IN INT8 *, IN INT8 *, IN UINT32 BitMask = 0);\r
257 ~SVfrQuestionNode ();\r
258};\r
259\r
260class CVfrQuestionDB {\r
261private:\r
262 SVfrQuestionNode *mQuestionList;\r
263 UINT32 mFreeQIdBitMap[EFI_FREE_QUESTION_ID_BITMAP_SIZE];\r
264\r
265private:\r
266 EFI_QUESTION_ID GetFreeQuestionId (VOID);\r
267 BOOLEAN ChekQuestionIdFree (IN EFI_QUESTION_ID);\r
268 VOID MarkQuestionIdUsed (IN EFI_QUESTION_ID);\r
269 VOID MarkQuestionIdUnused (IN EFI_QUESTION_ID);\r
270\r
271public:\r
272 CVfrQuestionDB ();\r
273 ~CVfrQuestionDB();\r
274\r
275 EFI_VFR_RETURN_CODE RegisterQuestion (IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
276 VOID RegisterOldDateQuestion (IN INT8 *, IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
277 VOID RegisterNewDateQuestion (IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
278 VOID RegisterOldTimeQuestion (IN INT8 *, IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
279 VOID RegisterNewTimeQuestion (IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
280 EFI_VFR_RETURN_CODE UpdateQuestionId (IN EFI_QUESTION_ID, IN EFI_QUESTION_ID);\r
281 VOID GetQuestionId (IN INT8 *, IN INT8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &);\r
282 EFI_VFR_RETURN_CODE FindQuestion (IN EFI_QUESTION_ID);\r
283 EFI_VFR_RETURN_CODE FindQuestion (IN INT8 *);\r
284 };\r
285\r
286struct SVfrDefaultStoreNode {\r
287 EFI_IFR_DEFAULTSTORE *mObjBinAddr;\r
288 INT8 *mRefName;\r
289 EFI_STRING_ID mDefaultStoreNameId;\r
290 UINT16 mDefaultId;\r
291\r
292 SVfrDefaultStoreNode *mNext;\r
293\r
294 SVfrDefaultStoreNode (IN EFI_IFR_DEFAULTSTORE *, IN INT8 *, IN EFI_STRING_ID, IN UINT16);\r
295 ~SVfrDefaultStoreNode();\r
296};\r
297\r
298class CVfrDefaultStore {\r
299private:\r
300 SVfrDefaultStoreNode *mDefaultStoreList;\r
301\r
302public:\r
303 CVfrDefaultStore ();\r
304 ~CVfrDefaultStore ();\r
305\r
306 EFI_VFR_RETURN_CODE RegisterDefaultStore (IN CHAR8 *, IN INT8 *, IN EFI_STRING_ID, IN UINT16);\r
307 EFI_VFR_RETURN_CODE ReRegisterDefaultStoreById (IN UINT16, IN INT8 *, IN EFI_STRING_ID);\r
308 BOOLEAN DefaultIdRegistered (IN UINT16);\r
309 EFI_VFR_RETURN_CODE GetDefaultId (IN INT8 *, OUT UINT16 *);\r
310 EFI_VFR_RETURN_CODE BufferVarStoreAltConfigAdd (IN EFI_VARSTORE_ID, IN EFI_VARSTORE_INFO &, IN INT8 *, IN UINT8, IN EFI_IFR_TYPE_VALUE);\r
311};\r
312\r
313#define EFI_RULE_ID_START 0x01\r
314#define EFI_RULE_ID_INVALID 0x00\r
315\r
316struct SVfrRuleNode {\r
317 UINT8 mRuleId;\r
318 INT8 *mRuleName;\r
319 SVfrRuleNode *mNext;\r
320\r
321 SVfrRuleNode(IN INT8 *, IN UINT8);\r
322 ~SVfrRuleNode();\r
323};\r
324\r
325class CVfrRulesDB {\r
326private:\r
327 SVfrRuleNode *mRuleList;\r
328 UINT8 mFreeRuleId;\r
329\r
330public:\r
331 CVfrRulesDB ();\r
332 ~CVfrRulesDB();\r
333\r
334 VOID RegisterRule (IN INT8 *);\r
335 UINT8 GetRuleId (IN INT8 *);\r
336};\r
337\r
338#define MIN(v1, v2) (((v1) < (v2)) ? (v1) : (v2))\r
339#define MAX(v1, v2) (((v1) > (v2)) ? (v1) : (v2))\r
340\r
341#endif\r