3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
4 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
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.
20 #ifndef _VFRUTILITYLIB_H_
21 #define _VFRUTILITYLIB_H_
29 #define MAX_NAME_LEN 64
30 #define DEFAULT_ALIGN 1
31 #define DEFAULT_PACK_ALIGN 0xFFFFFFFF
32 #define DEFAULT_NAME_TABLE_ITEMS 1024
34 #define EFI_BITS_SHIFT_PER_UINT32 0x5
35 #define EFI_BITS_PER_UINT32 (1 << EFI_BITS_SHIFT_PER_UINT32)
37 #define BUFFER_SAFE_FREE(Buf) do { if ((Buf) != NULL) { delete (Buf); } } while (0);
39 class CVfrBinaryOutput
{
41 virtual VOID
WriteLine (IN
FILE *, IN UINT32
, IN INT8
*, IN INT8
*, IN UINT32
);
42 virtual VOID
WriteEnd (IN
FILE *, IN UINT32
, IN INT8
*, IN INT8
*, IN UINT32
);
56 SConfigInfo (IN UINT8
, IN UINT16
, IN UINT32
, IN EFI_IFR_TYPE_VALUE
);
63 SConfigInfo
*mInfoStrList
;
67 SConfigItem (IN INT8
*, IN INT8
*);
68 SConfigItem (IN INT8
*, IN INT8
*, IN UINT8
, IN UINT16
, IN UINT16
, IN EFI_IFR_TYPE_VALUE
);
69 virtual ~SConfigItem ();
72 class CVfrBufferConfig
{
74 SConfigItem
*mItemListHead
;
75 SConfigItem
*mItemListTail
;
76 SConfigItem
*mItemListPos
;
79 CVfrBufferConfig (VOID
);
80 virtual ~CVfrBufferConfig (VOID
);
82 virtual UINT8
Register (IN INT8
*, IN INT8
*Info
= NULL
);
83 virtual VOID
Open (VOID
);
84 virtual BOOLEAN
Eof(VOID
);
85 virtual UINT8
Select (IN INT8
*, IN INT8
*Info
= NULL
);
86 virtual UINT8
Write (IN CONST CHAR8
, IN INT8
*, IN INT8
*, IN UINT8
, IN UINT16
, IN UINT32
, IN EFI_IFR_TYPE_VALUE
);
88 virtual UINT8
Read (OUT INT8
**, OUT INT8
**, OUT INT8
**, OUT INT8
**, OUT INT8
**);
90 virtual VOID
Close (VOID
);
91 virtual VOID
OutputCFile (IN
FILE *, IN INT8
*);
94 extern CVfrBufferConfig gCVfrBufferConfig
;
96 #define ALIGN_STUFF(Size, Align) ((Align) - (Size) % (Align))
97 #define INVALID_ARRAY_INDEX 0xFFFFFFFF
101 struct SVfrDataField
{
102 INT8 mFieldName
[MAX_NAME_LEN
];
103 SVfrDataType
*mFieldType
;
106 SVfrDataField
*mNext
;
109 struct SVfrDataType
{
110 INT8 mTypeName
[MAX_NAME_LEN
];
114 SVfrDataField
*mMembers
;
118 class CVfrVarDataTypeDB
{
120 SVfrDataType
*mDataTypeList
;
123 SVfrDataType
*mNewDataType
;
124 SVfrDataType
*mCurrDataType
;
125 SVfrDataField
*mCurrDataField
;
127 VOID
InternalTypesListInit (VOID
);
128 VOID
RegisterNewType (IN SVfrDataType
*);
130 EFI_VFR_RETURN_CODE
ExtractStructTypeName (IN INT8
*&, OUT INT8
*);
131 EFI_VFR_RETURN_CODE
ExtractFieldNameAndArrary (IN INT8
*&, OUT INT8
*, OUT UINT32
&);
132 EFI_VFR_RETURN_CODE
GetTypeField (IN INT8
*, IN SVfrDataType
*, IN SVfrDataField
*&);
133 EFI_VFR_RETURN_CODE
GetFieldOffset (IN SVfrDataField
*, IN UINT32
, OUT UINT32
&);
134 UINT8
GetFieldWidth (IN SVfrDataField
*);
135 UINT32
GetFieldSize (IN SVfrDataField
*, IN UINT32
);
138 CVfrVarDataTypeDB (VOID
);
139 ~CVfrVarDataTypeDB (VOID
);
141 EFI_VFR_RETURN_CODE
Pack (IN UINT32
);
144 VOID
DeclareDataTypeBegin (VOID
);
145 EFI_VFR_RETURN_CODE
SetNewTypeName (IN INT8
*);
146 EFI_VFR_RETURN_CODE
DataTypeAddField (IN INT8
*, IN INT8
*, IN UINT32
);
147 VOID
DeclareDataTypeEnd (VOID
);
149 EFI_VFR_RETURN_CODE
GetDataType (IN INT8
*, OUT SVfrDataType
**);
150 EFI_VFR_RETURN_CODE
GetDataTypeSize (IN INT8
*, OUT UINT32
*);
151 EFI_VFR_RETURN_CODE
GetDataFieldInfo (IN INT8
*, OUT UINT16
&, OUT UINT8
&, OUT UINT32
&);
153 EFI_VFR_RETURN_CODE
GetUserDefinedTypeNameList (OUT INT8
***, OUT UINT32
*);
154 BOOLEAN
IsTypeNameDefined (IN INT8
*);
156 #ifdef CVFR_VARDATATYPEDB_DEBUG
162 EFI_VFR_VARSTORE_INVALID
,
163 EFI_VFR_VARSTORE_BUFFER
,
164 EFI_VFR_VARSTORE_EFI
,
165 EFI_VFR_VARSTORE_NAME
166 } EFI_VFR_VARSTORE_TYPE
;
168 struct SVfrVarStorageNode
{
171 EFI_VARSTORE_ID mVarStoreId
;
172 struct SVfrVarStorageNode
*mNext
;
174 EFI_VFR_VARSTORE_TYPE mVarStoreType
;
178 EFI_STRING_ID mEfiVarName
;
183 SVfrDataType
*mDataType
;
187 EFI_STRING_ID
*mNameTable
;
193 SVfrVarStorageNode (IN EFI_GUID
*, IN INT8
*, IN EFI_VARSTORE_ID
, IN EFI_STRING_ID
, IN UINT32
);
194 SVfrVarStorageNode (IN EFI_GUID
*, IN INT8
*, IN EFI_VARSTORE_ID
, IN SVfrDataType
*);
195 SVfrVarStorageNode (IN INT8
*, IN EFI_VARSTORE_ID
);
196 ~SVfrVarStorageNode (VOID
);
199 struct EFI_VARSTORE_INFO
{
200 EFI_VARSTORE_ID mVarStoreId
;
202 EFI_STRING_ID mVarName
;
206 UINT32 mVarTotalSize
;
208 EFI_VARSTORE_INFO (VOID
);
209 EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO
&);
210 BOOLEAN
operator == (IN EFI_VARSTORE_INFO
*);
213 #define EFI_VARSTORE_ID_MAX 0xFFFF
214 #define EFI_FREE_VARSTORE_ID_BITMAP_SIZE ((EFI_VARSTORE_ID_MAX + 1) / EFI_BITS_PER_UINT32)
216 class CVfrDataStorage
{
218 UINT32 mFreeVarStoreIdBitMap
[EFI_FREE_VARSTORE_ID_BITMAP_SIZE
];
220 struct SVfrVarStorageNode
*mBufferVarStoreList
;
221 struct SVfrVarStorageNode
*mEfiVarStoreList
;
222 struct SVfrVarStorageNode
*mNameVarStoreList
;
224 struct SVfrVarStorageNode
*mCurrVarStorageNode
;
225 struct SVfrVarStorageNode
*mNewVarStorageNode
;
229 EFI_VARSTORE_ID
GetFreeVarStoreId (VOID
);
230 BOOLEAN
ChekVarStoreIdFree (IN EFI_VARSTORE_ID
);
231 VOID
MarkVarStoreIdUsed (IN EFI_VARSTORE_ID
);
232 VOID
MarkVarStoreIdUnused (IN EFI_VARSTORE_ID
);
238 EFI_VFR_RETURN_CODE
DeclareNameVarStoreBegin (INT8
*);
239 EFI_VFR_RETURN_CODE
NameTableAddItem (EFI_STRING_ID
);
240 EFI_VFR_RETURN_CODE
DeclareNameVarStoreEnd (EFI_GUID
*);
242 EFI_VFR_RETURN_CODE
DeclareEfiVarStore (IN INT8
*, IN EFI_GUID
*, IN EFI_STRING_ID
, IN UINT32
);
244 EFI_VFR_RETURN_CODE
DeclareBufferVarStore (IN INT8
*, IN EFI_GUID
*, IN CVfrVarDataTypeDB
*, IN INT8
*, IN EFI_VARSTORE_ID
);
246 EFI_VFR_RETURN_CODE
GetVarStoreId (IN INT8
*, OUT EFI_VARSTORE_ID
*);
247 EFI_VFR_RETURN_CODE
GetVarStoreType (IN INT8
*, OUT EFI_VFR_VARSTORE_TYPE
&);
248 EFI_VFR_RETURN_CODE
GetVarStoreName (IN EFI_VARSTORE_ID
, OUT INT8
**);
250 EFI_VFR_RETURN_CODE
GetBufferVarStoreDataTypeName (IN INT8
*, OUT INT8
**);
251 EFI_VFR_RETURN_CODE
GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO
*);
252 EFI_VFR_RETURN_CODE
GetNameVarStoreInfo (IN EFI_VARSTORE_INFO
*, IN UINT32
);
254 EFI_VFR_RETURN_CODE
BufferVarStoreRequestElementAdd (IN INT8
*, IN EFI_VARSTORE_INFO
&);
257 #define EFI_QUESTION_ID_MAX 0xFFFF
258 #define EFI_FREE_QUESTION_ID_BITMAP_SIZE ((EFI_QUESTION_ID_MAX + 1) / EFI_BITS_PER_UINT32)
259 #define EFI_QUESTION_ID_INVALID 0x0
261 #define DATE_YEAR_BITMASK 0x0000FFFF
262 #define DATE_MONTH_BITMASK 0x00FF0000
263 #define DATE_DAY_BITMASK 0xFF000000
264 #define TIME_HOUR_BITMASK 0x000000FF
265 #define TIME_MINUTE_BITMASK 0x0000FF00
266 #define TIME_SECOND_BITMASK 0x00FF0000
268 struct SVfrQuestionNode
{
271 EFI_QUESTION_ID mQuestionId
;
273 SVfrQuestionNode
*mNext
;
275 SVfrQuestionNode (IN INT8
*, IN INT8
*, IN UINT32 BitMask
= 0);
276 ~SVfrQuestionNode ();
279 class CVfrQuestionDB
{
281 SVfrQuestionNode
*mQuestionList
;
282 UINT32 mFreeQIdBitMap
[EFI_FREE_QUESTION_ID_BITMAP_SIZE
];
285 EFI_QUESTION_ID
GetFreeQuestionId (VOID
);
286 BOOLEAN
ChekQuestionIdFree (IN EFI_QUESTION_ID
);
287 VOID
MarkQuestionIdUsed (IN EFI_QUESTION_ID
);
288 VOID
MarkQuestionIdUnused (IN EFI_QUESTION_ID
);
294 EFI_VFR_RETURN_CODE
RegisterQuestion (IN INT8
*, IN INT8
*, IN OUT EFI_QUESTION_ID
&);
295 VOID
RegisterOldDateQuestion (IN INT8
*, IN INT8
*, IN INT8
*, IN OUT EFI_QUESTION_ID
&);
296 VOID
RegisterNewDateQuestion (IN INT8
*, IN INT8
*, IN OUT EFI_QUESTION_ID
&);
297 VOID
RegisterOldTimeQuestion (IN INT8
*, IN INT8
*, IN INT8
*, IN OUT EFI_QUESTION_ID
&);
298 VOID
RegisterNewTimeQuestion (IN INT8
*, IN INT8
*, IN OUT EFI_QUESTION_ID
&);
299 EFI_VFR_RETURN_CODE
UpdateQuestionId (IN EFI_QUESTION_ID
, IN EFI_QUESTION_ID
);
300 VOID
GetQuestionId (IN INT8
*, IN INT8
*, OUT EFI_QUESTION_ID
&, OUT UINT32
&);
301 EFI_VFR_RETURN_CODE
FindQuestion (IN EFI_QUESTION_ID
);
302 EFI_VFR_RETURN_CODE
FindQuestion (IN INT8
*);
305 struct SVfrDefaultStoreNode
{
306 EFI_IFR_DEFAULTSTORE
*mObjBinAddr
;
308 EFI_STRING_ID mDefaultStoreNameId
;
311 SVfrDefaultStoreNode
*mNext
;
313 SVfrDefaultStoreNode (IN EFI_IFR_DEFAULTSTORE
*, IN INT8
*, IN EFI_STRING_ID
, IN UINT16
);
314 ~SVfrDefaultStoreNode();
317 class CVfrDefaultStore
{
319 SVfrDefaultStoreNode
*mDefaultStoreList
;
323 ~CVfrDefaultStore ();
325 EFI_VFR_RETURN_CODE
RegisterDefaultStore (IN CHAR8
*, IN INT8
*, IN EFI_STRING_ID
, IN UINT16
);
326 EFI_VFR_RETURN_CODE
ReRegisterDefaultStoreById (IN UINT16
, IN INT8
*, IN EFI_STRING_ID
);
327 BOOLEAN
DefaultIdRegistered (IN UINT16
);
328 EFI_VFR_RETURN_CODE
GetDefaultId (IN INT8
*, OUT UINT16
*);
329 EFI_VFR_RETURN_CODE
BufferVarStoreAltConfigAdd (IN EFI_VARSTORE_ID
, IN EFI_VARSTORE_INFO
&, IN INT8
*, IN UINT8
, IN EFI_IFR_TYPE_VALUE
);
332 #define EFI_RULE_ID_START 0x01
333 #define EFI_RULE_ID_INVALID 0x00
335 struct SVfrRuleNode
{
340 SVfrRuleNode(IN INT8
*, IN UINT8
);
346 SVfrRuleNode
*mRuleList
;
353 VOID
RegisterRule (IN INT8
*);
354 UINT8
GetRuleId (IN INT8
*);
357 #define MIN(v1, v2) (((v1) < (v2)) ? (v1) : (v2))
358 #define MAX(v1, v2) (((v1) > (v2)) ? (v1) : (v2))