]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/VfrCompile/VfrFormPkg.h
BaseTools/VfrCompile: Avoid freeing memory with mismatched functions
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrFormPkg.h
CommitLineData
30fdf114
LG
1/** @file\r
2 \r
3 The definition of CFormPkg's member function\r
4\r
74bbe31b 5Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>\r
40d841f6 6This program and the accompanying materials \r
30fdf114
LG
7are licensed and made available under the terms and conditions of the BSD License \r
8which accompanies this distribution. The full text of the license may be found at \r
9http://opensource.org/licenses/bsd-license.php \r
10 \r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
13\r
14**/\r
15\r
16#ifndef _EFIIFRCLASS_H_\r
17#define _EFIIFRCLASS_H_\r
18\r
19#include "string.h"\r
20#include "EfiVfr.h"\r
21#include "VfrError.h"\r
22#include "VfrUtilityLib.h"\r
23\r
24#define NO_QST_REFED "no question refered"\r
25\r
26struct PACKAGE_DATA {\r
27 CHAR8 *Buffer;\r
28 UINT32 Size;\r
29};\r
30\r
31/*\r
32 * The functions below are used for flags setting\r
33 */\r
34static inline BOOLEAN _FLAGS_ZERO (\r
35 IN UINT8 &Flags\r
36 )\r
37{\r
38 return Flags == 0;\r
39}\r
40\r
41static inline VOID _FLAG_CLEAR (\r
42 IN UINT8 &Flags,\r
43 IN UINT8 Mask\r
44 )\r
45{\r
46 Flags &= (~Mask);\r
47}\r
48\r
49static inline UINT8 _FLAG_TEST_AND_CLEAR (\r
50 IN UINT8 &Flags,\r
51 IN UINT8 Mask\r
52 )\r
53{\r
54 UINT8 Ret = Flags & Mask;\r
55 Flags &= (~Mask);\r
56 return Ret;\r
57}\r
58\r
59static inline UINT8 _IS_EQUAL (\r
60 IN UINT8 &Flags,\r
61 IN UINT8 Value\r
62 )\r
63{\r
64 return Flags == Value;\r
65}\r
66\r
67/*\r
68 * The definition of CIfrBin\r
69 */\r
70typedef enum {\r
71 PENDING,\r
72 ASSIGNED\r
73} ASSIGN_FLAG;\r
74\r
75struct SPendingAssign {\r
76 CHAR8 *mKey; // key ! unique\r
77 VOID *mAddr;\r
78 UINT32 mLen;\r
79 ASSIGN_FLAG mFlag;\r
80 UINT32 mLineNo;\r
81 CHAR8 *mMsg;\r
82 struct SPendingAssign *mNext;\r
83\r
52302d4d 84 SPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CONST CHAR8 *);\r
30fdf114
LG
85 ~SPendingAssign ();\r
86\r
87 VOID SetAddrAndLen (IN VOID *, IN UINT32);\r
88 VOID AssignValue (IN VOID *, IN UINT32);\r
89 CHAR8 * GetKey (VOID);\r
90};\r
91\r
92struct SBufferNode {\r
93 CHAR8 *mBufferStart;\r
94 CHAR8 *mBufferEnd;\r
95 CHAR8 *mBufferFree;\r
96 struct SBufferNode *mNext;\r
97};\r
98\r
4234283c
LG
99typedef struct {\r
100 BOOLEAN CompatibleMode;\r
101 EFI_GUID *OverrideClassGuid;\r
102} INPUT_INFO_TO_SYNTAX;\r
103\r
30fdf114
LG
104class CFormPkg {\r
105private:\r
106 UINT32 mBufferSize;\r
107 SBufferNode *mBufferNodeQueueHead;\r
108 SBufferNode *mBufferNodeQueueTail;\r
109 SBufferNode *mCurrBufferNode;\r
110\r
111 SBufferNode *mReadBufferNode;\r
112 UINT32 mReadBufferOffset;\r
113\r
114 UINT32 mPkgLength;\r
115\r
52302d4d
LG
116 VOID _WRITE_PKG_LINE (IN FILE *, IN UINT32 , IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);\r
117 VOID _WRITE_PKG_END (IN FILE *, IN UINT32 , IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);\r
4afd3d04
LG
118 SBufferNode * GetBinBufferNodeForAddr (IN CHAR8 *);\r
119 SBufferNode * CreateNewNode ();\r
120 SBufferNode * GetNodeBefore (IN SBufferNode *);\r
121 EFI_VFR_RETURN_CODE InsertNodeBefore (IN SBufferNode *, IN SBufferNode *);\r
30fdf114
LG
122\r
123private:\r
124 SPendingAssign *PendingAssignList;\r
125\r
126public:\r
ed395cfe 127 CFormPkg (IN UINT32 BufferSize = 4096);\r
30fdf114
LG
128 ~CFormPkg ();\r
129\r
130 CHAR8 * IfrBinBufferGet (IN UINT32);\r
131 inline UINT32 GetPkgLength (VOID);\r
132\r
133 VOID Open ();\r
134 UINT32 Read (IN CHAR8 *, IN UINT32);\r
135 VOID Close ();\r
136\r
137 EFI_VFR_RETURN_CODE BuildPkgHdr (OUT EFI_HII_PACKAGE_HEADER **);\r
138 EFI_VFR_RETURN_CODE BuildPkg (IN FILE *, IN PACKAGE_DATA *PkgData = NULL);\r
139 EFI_VFR_RETURN_CODE BuildPkg (OUT PACKAGE_DATA &);\r
140 EFI_VFR_RETURN_CODE GenCFile (IN CHAR8 *, IN FILE *, IN PACKAGE_DATA *PkgData = NULL);\r
141\r
142public:\r
52302d4d 143 EFI_VFR_RETURN_CODE AssignPending (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CONST CHAR8 *Msg = NULL);\r
30fdf114
LG
144 VOID DoPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32);\r
145 bool HavePendingUnassigned (VOID);\r
146 VOID PendingAssignPrintAll (VOID);\r
147 EFI_VFR_RETURN_CODE DeclarePendingQuestion (\r
148 IN CVfrVarDataTypeDB &lCVfrVarDataTypeDB,\r
149 IN CVfrDataStorage &lCVfrDataStorage,\r
150 IN CVfrQuestionDB &lCVfrQuestionDB,\r
151 IN EFI_GUID *LocalFormSetGuid,\r
4afd3d04
LG
152 IN UINT32 LineNo,\r
153 OUT CHAR8 **InsertOpcodeAddr\r
154 );\r
155 EFI_VFR_RETURN_CODE AdjustDynamicInsertOpcode (\r
156 IN CHAR8 *LastFormEndAddr,\r
74bbe31b
DB
157 IN CHAR8 *InsertOpcodeAddr,\r
158 IN BOOLEAN CreateOpcodeAfterParsingVfr\r
4afd3d04
LG
159 );\r
160 CHAR8 * GetBufAddrBaseOnOffset (\r
161 IN UINT32 Offset\r
30fdf114
LG
162 );\r
163};\r
164\r
4234283c
LG
165extern CFormPkg gCFormPkg;\r
166extern CVfrStringDB gCVfrStringDB;\r
4afd3d04
LG
167extern UINT32 gAdjustOpcodeOffset;\r
168extern BOOLEAN gNeedAdjustOpcode;\r
30fdf114
LG
169\r
170struct SIfrRecord {\r
171 UINT32 mLineNo;\r
172 CHAR8 *mIfrBinBuf;\r
173 UINT8 mBinBufLen;\r
174 UINT32 mOffset;\r
175 SIfrRecord *mNext;\r
176\r
177 SIfrRecord (VOID);\r
178 ~SIfrRecord (VOID);\r
179};\r
180\r
74bbe31b 181\r
30fdf114
LG
182#define EFI_IFR_RECORDINFO_IDX_INVALUD 0xFFFFFF\r
183#define EFI_IFR_RECORDINFO_IDX_START 0x0\r
74bbe31b
DB
184#define EFI_HII_MAX_SUPPORT_DEFAULT_TYPE 0x08\r
185\r
186struct QuestionDefaultRecord {\r
187 BOOLEAN mIsDefaultIdExist[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE]; // Record the default id in mAllDefaultIdArray[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE]\r
188 // whether exists in current question.\r
189\r
190 SIfrRecord *mDefaultValueRecord; // Point to the default value record in RecordList which has smallest default Id.\r
191 // (for checkbox it may be NULL, because the dedault value is always true when the flag is set.)\r
192\r
193 BOOLEAN mIsDefaultOpcode; // whether the default value with smallest default id is given by default opcode.\r
194 // (for oneof and checkbox default info may be given by flag.)\r
195\r
196 UINT16 mDefaultNumber; // The default number of this question.\r
197};\r
30fdf114
LG
198\r
199class CIfrRecordInfoDB {\r
200private:\r
201 bool mSwitch;\r
202 UINT32 mRecordCount;\r
203 SIfrRecord *mIfrRecordListHead;\r
204 SIfrRecord *mIfrRecordListTail;\r
74bbe31b
DB
205 UINT8 mAllDefaultTypeCount;\r
206 UINT16 mAllDefaultIdArray[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE];\r
30fdf114
LG
207\r
208 SIfrRecord * GetRecordInfoFromIdx (IN UINT32);\r
209 BOOLEAN CheckQuestionOpCode (IN UINT8);\r
210 BOOLEAN CheckIdOpCode (IN UINT8);\r
211 EFI_QUESTION_ID GetOpcodeQuestionId (IN EFI_IFR_OP_HEADER *);\r
212public:\r
213 CIfrRecordInfoDB (VOID);\r
214 ~CIfrRecordInfoDB (VOID);\r
215\r
216 inline VOID TurnOn (VOID) {\r
217 mSwitch = TRUE;\r
218 }\r
219\r
220 inline VOID TurnOff (VOID) {\r
221 mSwitch = FALSE;\r
222 }\r
223\r
4afd3d04
LG
224 SIfrRecord * GetRecordInfoFromOffset (IN UINT32);\r
225 VOID IfrAdjustOffsetForRecord (VOID);\r
74bbe31b 226 BOOLEAN IfrAdjustDynamicOpcodeInRecords (IN BOOLEAN);\r
4afd3d04 227\r
30fdf114
LG
228 UINT32 IfrRecordRegister (IN UINT32, IN CHAR8 *, IN UINT8, IN UINT32);\r
229 VOID IfrRecordInfoUpdate (IN UINT32, IN UINT32, IN CHAR8*, IN UINT8, IN UINT32);\r
230 VOID IfrRecordOutput (IN FILE *, IN UINT32 LineNo);\r
231 VOID IfrRecordOutput (OUT PACKAGE_DATA &);\r
74bbe31b
DB
232 EFI_VFR_RETURN_CODE IfrRecordAdjust (VOID);\r
233 VOID IfrUpdateRecordInfoForDynamicOpcode (IN BOOLEAN);\r
234 VOID IfrCheckAddDefaultRecord (IN BOOLEAN, IN BOOLEAN);\r
235 VOID IfrGetDefaultStoreInfo ();\r
236 VOID IfrCreateDefaultRecord (IN UINT8 Size,IN UINT16 DefaultId,IN UINT8 Type,IN UINT32 LineNo,IN EFI_IFR_TYPE_VALUE Value);\r
237 VOID IfrCreateDefaultForQuestion (IN SIfrRecord *, IN QuestionDefaultRecord *);\r
238 VOID IfrParseDefaulInfoInQuestion (IN SIfrRecord *, OUT QuestionDefaultRecord *);\r
239 VOID IfrAddDefaultToBufferConfig (IN UINT16, IN SIfrRecord *,IN EFI_IFR_TYPE_VALUE);\r
30fdf114
LG
240};\r
241\r
242extern CIfrRecordInfoDB gCIfrRecordInfoDB;\r
243\r
244/*\r
245 * The definition of CIfrObj\r
246 */\r
52302d4d 247extern BOOLEAN gCreateOp;\r
30fdf114
LG
248\r
249class CIfrObj {\r
250private:\r
52302d4d 251 BOOLEAN mDelayEmit;\r
30fdf114
LG
252\r
253 CHAR8 *mObjBinBuf;\r
254 UINT8 mObjBinLen;\r
255 UINT32 mLineNo;\r
256 UINT32 mRecordIdx;\r
257 UINT32 mPkgOffset;\r
258\r
259public:\r
260 CIfrObj (IN UINT8 OpCode, OUT CHAR8 **IfrObj = NULL, IN UINT8 ObjBinLen = 0, IN BOOLEAN DelayEmit = FALSE);\r
261 virtual ~CIfrObj(VOID);\r
262\r
263 VOID _EMIT_PENDING_OBJ (VOID);\r
264 \r
265 inline VOID SetLineNo (IN UINT32 LineNo) {\r
266 mLineNo = LineNo;\r
267 }\r
268\r
269 inline CHAR8 * GetObjBinAddr (VOID) {\r
270 return mObjBinBuf;\r
271 }\r
272\r
4afd3d04
LG
273 inline UINT32 GetObjBinOffset (VOID) {\r
274 return mPkgOffset;\r
275 }\r
276\r
30fdf114
LG
277 inline UINT8 GetObjBinLen (VOID) {\r
278 return mObjBinLen;\r
279 }\r
280\r
281 inline bool ExpendObjBin (IN UINT8 Size) {\r
282 if ((mDelayEmit == TRUE) && ((mObjBinLen + Size) > mObjBinLen)) {\r
52302d4d 283 mObjBinLen = mObjBinLen + Size;\r
30fdf114
LG
284 return TRUE;\r
285 } else {\r
286 return FALSE;\r
287 }\r
288 }\r
4234283c
LG
289\r
290 inline bool ShrinkObjBin (IN UINT8 Size) {\r
291 if ((mDelayEmit == TRUE) && (mObjBinLen > Size)) {\r
292 mObjBinLen -= Size;\r
293 return TRUE;\r
294 } else {\r
295 return FALSE;\r
296 }\r
297 }\r
30fdf114
LG
298};\r
299\r
300/*\r
301 * The definition of CIfrOpHeader\r
302 */\r
303class CIfrOpHeader {\r
304private:\r
305 EFI_IFR_OP_HEADER *mHeader;\r
306\r
307public:\r
308 CIfrOpHeader (IN UINT8 OpCode, IN VOID *StartAddr, IN UINT8 Length = 0);\r
309 CIfrOpHeader (IN CIfrOpHeader &);\r
310\r
311 VOID IncLength (UINT8 Size) {\r
312 if ((mHeader->Length + Size) > mHeader->Length) {\r
52302d4d 313 mHeader->Length = mHeader->Length + Size;\r
30fdf114
LG
314 }\r
315 }\r
316\r
317 VOID DecLength (UINT8 Size) {\r
318 if (mHeader->Length >= Size) {\r
4234283c 319 mHeader->Length -= Size;\r
30fdf114
LG
320 }\r
321 }\r
322\r
323 UINT8 GetLength () {\r
324 return mHeader->Length;\r
325 }\r
326\r
327 UINT8 GetScope () {\r
328 return mHeader->Scope;\r
329 }\r
330\r
331 VOID SetScope (IN UINT8 Scope) {\r
332 mHeader->Scope = Scope;\r
333 }\r
334\r
335 VOID UpdateHeader (IN EFI_IFR_OP_HEADER *Header) {\r
336 mHeader = Header;\r
337 }\r
1afac950
ED
338\r
339 UINT8 GetOpCode () {\r
340 return mHeader->OpCode;\r
341 }\r
30fdf114
LG
342};\r
343\r
344extern UINT8 gScopeCount;\r
345\r
346/*\r
347 * The definition of CIfrStatementHeader\r
348 */\r
349class CIfrStatementHeader {\r
350private:\r
351 EFI_IFR_STATEMENT_HEADER *mHeader;\r
352\r
353public:\r
354 CIfrStatementHeader (\r
355 IN EFI_IFR_STATEMENT_HEADER *StartAddr\r
356 ) : mHeader ((EFI_IFR_STATEMENT_HEADER *)StartAddr) {\r
357 mHeader = StartAddr;\r
358 mHeader->Help = EFI_STRING_ID_INVALID;\r
359 mHeader->Prompt = EFI_STRING_ID_INVALID;\r
360 }\r
361\r
362 EFI_IFR_STATEMENT_HEADER *GetStatementHeader () {\r
363 return mHeader;\r
364 }\r
365\r
366 VOID SetPrompt (IN EFI_STRING_ID Prompt) {\r
367 mHeader->Prompt = Prompt;\r
368 }\r
369\r
370 VOID SetHelp (IN EFI_STRING_ID Help) {\r
371 mHeader->Help = Help;\r
372 }\r
373};\r
374\r
375/*\r
376 * The definition of CIfrQuestionHeader\r
377 */\r
378#define EFI_IFR_QUESTION_FLAG_DEFAULT 0\r
379\r
380class CIfrQuestionHeader : public CIfrStatementHeader {\r
381private:\r
382 EFI_IFR_QUESTION_HEADER *mHeader;\r
383\r
384 EFI_IFR_STATEMENT_HEADER * QH2SH (EFI_IFR_QUESTION_HEADER *Qheader) {\r
385 return &(Qheader)->Header;\r
386 }\r
387\r
388public:\r
389 EFI_QUESTION_ID QUESTION_ID (VOID) {\r
390 return mHeader->QuestionId;\r
391 }\r
392\r
393 EFI_VARSTORE_ID VARSTORE_ID (VOID) {\r
394 return mHeader->VarStoreId;\r
395 }\r
396\r
397 VOID VARSTORE_INFO (OUT EFI_VARSTORE_INFO *Info) {\r
398 if (Info != NULL) {\r
399 Info->mVarStoreId = mHeader->VarStoreId;\r
f51461c8 400 memmove (&Info->mVarStoreId, &mHeader->VarStoreInfo, sizeof (Info->mVarStoreId));\r
30fdf114
LG
401 }\r
402 }\r
403\r
404 UINT8 FLAGS (VOID) {\r
405 return mHeader->Flags;\r
406 }\r
407\r
408public:\r
409 CIfrQuestionHeader (\r
410 IN EFI_IFR_QUESTION_HEADER *StartAddr, \r
411 IN UINT8 Flags = EFI_IFR_QUESTION_FLAG_DEFAULT\r
412 ) : CIfrStatementHeader (QH2SH(StartAddr)) {\r
413 mHeader = StartAddr;\r
414 mHeader->QuestionId = EFI_QUESTION_ID_INVALID;\r
415 mHeader->VarStoreId = EFI_VARSTORE_ID_INVALID;\r
416 mHeader->VarStoreInfo.VarName = EFI_STRING_ID_INVALID;\r
417 mHeader->VarStoreInfo.VarOffset = EFI_VAROFFSET_INVALID;\r
418 mHeader->Flags = Flags;\r
419 }\r
420\r
421 VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {\r
422 mHeader->QuestionId = QuestionId;\r
423 }\r
424\r
425 VOID SetVarStoreInfo (IN EFI_VARSTORE_INFO *Info) {\r
426 mHeader->VarStoreId = Info->mVarStoreId;\r
fd171542 427 mHeader->VarStoreInfo.VarName = Info->mInfo.mVarName;\r
30fdf114
LG
428 mHeader->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset;\r
429 }\r
430\r
431 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 Flags) {\r
432 if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_READ_ONLY)) {\r
433 mHeader->Flags |= EFI_IFR_FLAG_READ_ONLY;\r
434 }\r
435\r
436 _FLAG_CLEAR (Flags, 0x02);\r
437\r
438 if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_CALLBACK)) {\r
439 mHeader->Flags |= EFI_IFR_FLAG_CALLBACK;\r
440 }\r
441 \r
442 //\r
443 // ignore NVAccessFlag\r
444 //\r
445 _FLAG_CLEAR (Flags, 0x08);\r
446\r
447 if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_RESET_REQUIRED)) {\r
448 mHeader->Flags |= EFI_IFR_FLAG_RESET_REQUIRED;\r
449 }\r
366430c7
ED
450\r
451 if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_RECONNECT_REQUIRED)) {\r
452 mHeader->Flags |= EFI_IFR_FLAG_RECONNECT_REQUIRED;\r
453 }\r
454\r
30fdf114
LG
455 //\r
456 // Set LateCheck Flag to compatible for framework flag\r
457 // but it uses 0x20 as its flag, if in the future UEFI may take this flag\r
458 //\r
459 if (_FLAG_TEST_AND_CLEAR (Flags, 0x20)) {\r
460 mHeader->Flags |= 0x20;\r
461 }\r
462\r
463 if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_OPTIONS_ONLY)) {\r
464 mHeader->Flags |= EFI_IFR_FLAG_OPTIONS_ONLY;\r
465 }\r
466\r
467 return _FLAGS_ZERO (Flags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
468 }\r
4afd3d04
LG
469\r
470 VOID UpdateCIfrQuestionHeader (IN EFI_IFR_QUESTION_HEADER *Header) {\r
471 mHeader = Header;\r
472 }\r
30fdf114
LG
473};\r
474\r
30fdf114
LG
475/*\r
476 * The definition of CIfrMinMaxStepData\r
477 */\r
478class CIfrMinMaxStepData {\r
479private:\r
480 MINMAXSTEP_DATA *mMinMaxStepData;\r
a709adfa
LG
481 BOOLEAN ValueIsSet;\r
482 BOOLEAN IsNumeric;\r
30fdf114
LG
483\r
484public:\r
a709adfa 485 CIfrMinMaxStepData (MINMAXSTEP_DATA *DataAddr, BOOLEAN NumericOpcode=FALSE) : mMinMaxStepData (DataAddr) {\r
30fdf114
LG
486 mMinMaxStepData->u64.MinValue = 0;\r
487 mMinMaxStepData->u64.MaxValue = 0;\r
488 mMinMaxStepData->u64.Step = 0;\r
a709adfa
LG
489 ValueIsSet = FALSE;\r
490 IsNumeric = NumericOpcode;\r
30fdf114
LG
491 }\r
492\r
493 VOID SetMinMaxStepData (IN UINT64 MinValue, IN UINT64 MaxValue, IN UINT64 Step) {\r
a709adfa
LG
494 if (!ValueIsSet) {\r
495 mMinMaxStepData->u64.MinValue = MinValue;\r
496 mMinMaxStepData->u64.MaxValue = MaxValue;\r
497 ValueIsSet = TRUE;\r
498 } else {\r
499 if (MinValue < mMinMaxStepData->u64.MinValue) {\r
500 mMinMaxStepData->u64.MinValue = MinValue;\r
501 }\r
502 if (MaxValue > mMinMaxStepData->u64.MaxValue) {\r
503 mMinMaxStepData->u64.MaxValue = MaxValue;\r
504 }\r
505 }\r
506 mMinMaxStepData->u64.Step = Step;\r
30fdf114
LG
507 }\r
508\r
509 VOID SetMinMaxStepData (IN UINT32 MinValue, IN UINT32 MaxValue, IN UINT32 Step) {\r
a709adfa
LG
510 if (!ValueIsSet) {\r
511 mMinMaxStepData->u32.MinValue = MinValue;\r
512 mMinMaxStepData->u32.MaxValue = MaxValue;\r
513 ValueIsSet = TRUE;\r
514 } else {\r
515 if (MinValue < mMinMaxStepData->u32.MinValue) {\r
516 mMinMaxStepData->u32.MinValue = MinValue;\r
517 }\r
518 if (MaxValue > mMinMaxStepData->u32.MaxValue) {\r
519 mMinMaxStepData->u32.MaxValue = MaxValue;\r
520 }\r
521 }\r
522 mMinMaxStepData->u32.Step = Step;\r
30fdf114
LG
523 }\r
524\r
525 VOID SetMinMaxStepData (IN UINT16 MinValue, IN UINT16 MaxValue, IN UINT16 Step) {\r
a709adfa
LG
526 if (!ValueIsSet) {\r
527 mMinMaxStepData->u16.MinValue = MinValue;\r
528 mMinMaxStepData->u16.MaxValue = MaxValue;\r
529 ValueIsSet = TRUE;\r
530 } else {\r
531 if (MinValue < mMinMaxStepData->u16.MinValue) {\r
532 mMinMaxStepData->u16.MinValue = MinValue;\r
533 }\r
534 if (MaxValue > mMinMaxStepData->u16.MaxValue) {\r
535 mMinMaxStepData->u16.MaxValue = MaxValue;\r
536 }\r
537 }\r
538 mMinMaxStepData->u16.Step = Step;\r
30fdf114
LG
539 }\r
540\r
541 VOID SetMinMaxStepData (IN UINT8 MinValue, IN UINT8 MaxValue, IN UINT8 Step) {\r
a709adfa
LG
542 if (!ValueIsSet) {\r
543 mMinMaxStepData->u8.MinValue = MinValue;\r
544 mMinMaxStepData->u8.MaxValue = MaxValue;\r
545 ValueIsSet = TRUE;\r
546 } else {\r
547 if (MinValue < mMinMaxStepData->u8.MinValue) {\r
548 mMinMaxStepData->u8.MinValue = MinValue;\r
549 }\r
550 if (MaxValue > mMinMaxStepData->u8.MaxValue) {\r
551 mMinMaxStepData->u8.MaxValue = MaxValue;\r
552 }\r
553 }\r
554 mMinMaxStepData->u8.Step = Step;\r
555 }\r
556\r
557 UINT64 GetMinData (UINT8 VarType) {\r
558 UINT64 MinValue = 0;\r
559 switch (VarType) {\r
560 case EFI_IFR_TYPE_NUM_SIZE_64:\r
561 MinValue = mMinMaxStepData->u64.MinValue;\r
562 break;\r
563 case EFI_IFR_TYPE_NUM_SIZE_32:\r
564 MinValue = (UINT64) mMinMaxStepData->u32.MinValue;\r
565 break;\r
566 case EFI_IFR_TYPE_NUM_SIZE_16:\r
567 MinValue = (UINT64) mMinMaxStepData->u16.MinValue;\r
568 break;\r
569 case EFI_IFR_TYPE_NUM_SIZE_8:\r
570 MinValue = (UINT64) mMinMaxStepData->u8.MinValue;\r
571 break;\r
572 default:\r
573 break;\r
574 }\r
575 return MinValue;\r
576 }\r
577\r
578 UINT64 GetMaxData (UINT8 VarType) {\r
579 UINT64 MaxValue = 0;\r
580 switch (VarType) {\r
581 case EFI_IFR_TYPE_NUM_SIZE_64:\r
582 MaxValue = mMinMaxStepData->u64.MaxValue;\r
583 break;\r
584 case EFI_IFR_TYPE_NUM_SIZE_32:\r
585 MaxValue = (UINT64) mMinMaxStepData->u32.MaxValue;\r
586 break;\r
587 case EFI_IFR_TYPE_NUM_SIZE_16:\r
588 MaxValue = (UINT64) mMinMaxStepData->u16.MaxValue;\r
589 break;\r
590 case EFI_IFR_TYPE_NUM_SIZE_8:\r
591 MaxValue = (UINT64) mMinMaxStepData->u8.MaxValue;\r
592 break;\r
593 default:\r
594 break;\r
595 }\r
596 return MaxValue;\r
597 }\r
598\r
599 UINT64 GetStepData (UINT8 VarType) {\r
600 UINT64 MaxValue = 0;\r
601 switch (VarType) {\r
602 case EFI_IFR_TYPE_NUM_SIZE_64:\r
603 MaxValue = mMinMaxStepData->u64.Step;\r
604 break;\r
605 case EFI_IFR_TYPE_NUM_SIZE_32:\r
606 MaxValue = (UINT64) mMinMaxStepData->u32.Step;\r
607 break;\r
608 case EFI_IFR_TYPE_NUM_SIZE_16:\r
609 MaxValue = (UINT64) mMinMaxStepData->u16.Step;\r
610 break;\r
611 case EFI_IFR_TYPE_NUM_SIZE_8:\r
612 MaxValue = (UINT64) mMinMaxStepData->u8.Step;\r
613 break;\r
614 default:\r
615 break;\r
616 }\r
617 return MaxValue;\r
30fdf114
LG
618 }\r
619\r
a709adfa
LG
620 BOOLEAN IsNumericOpcode () {\r
621 return IsNumeric;\r
622 }\r
4afd3d04
LG
623\r
624 VOID UpdateCIfrMinMaxStepData (IN MINMAXSTEP_DATA *MinMaxStepData) {\r
625 mMinMaxStepData = MinMaxStepData;\r
626 }\r
30fdf114
LG
627};\r
628\r
a709adfa
LG
629static CIfrQuestionHeader *gCurrentQuestion = NULL;\r
630static CIfrMinMaxStepData *gCurrentMinMaxData = NULL;\r
ddaf640f 631static BOOLEAN gIsOrderedList = FALSE;\r
2bf63b20 632static BOOLEAN gIsStringOp = FALSE;\r
a709adfa 633\r
30fdf114
LG
634/*\r
635 * The definition of all of the UEFI IFR Objects\r
636 */\r
637class CIfrFormSet : public CIfrObj, public CIfrOpHeader {\r
638private:\r
639 EFI_IFR_FORM_SET *mFormSet;\r
52302d4d 640 EFI_GUID *mClassGuid;\r
30fdf114
LG
641\r
642public:\r
643 CIfrFormSet (UINT8 Size) : CIfrObj (EFI_IFR_FORM_SET_OP, (CHAR8 **)&mFormSet, Size),\r
644 CIfrOpHeader (EFI_IFR_FORM_SET_OP, &mFormSet->Header, Size) {\r
645 mFormSet->Help = EFI_STRING_ID_INVALID;\r
646 mFormSet->FormSetTitle = EFI_STRING_ID_INVALID;\r
647 mFormSet->Flags = 0;\r
648 memset (&mFormSet->Guid, 0, sizeof (EFI_GUID));\r
52302d4d 649 mClassGuid = (EFI_GUID *) (mFormSet + 1);\r
30fdf114
LG
650 }\r
651\r
652 VOID SetGuid (IN EFI_GUID *Guid) {\r
f51461c8 653 memmove (&mFormSet->Guid, Guid, sizeof (EFI_GUID));\r
30fdf114
LG
654 }\r
655\r
656 VOID SetFormSetTitle (IN EFI_STRING_ID FormSetTitle) {\r
657 mFormSet->FormSetTitle = FormSetTitle;\r
658 }\r
659\r
660 VOID SetHelp (IN EFI_STRING_ID Help) {\r
661 mFormSet->Help = Help;\r
662 }\r
663\r
664 VOID SetClassGuid (IN EFI_GUID *Guid) {\r
f51461c8 665 memmove (&(mClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));\r
30fdf114
LG
666 }\r
667\r
668 UINT8 GetFlags() {\r
669 return mFormSet->Flags;\r
670 }\r
671};\r
672\r
673class CIfrEnd : public CIfrObj, public CIfrOpHeader {\r
674private:\r
675 EFI_IFR_END *mEnd;\r
676\r
677public:\r
678 CIfrEnd () : CIfrObj (EFI_IFR_END_OP, (CHAR8 **)&mEnd),\r
679 CIfrOpHeader (EFI_IFR_END_OP, &mEnd->Header) {}\r
680};\r
681\r
682class CIfrDefaultStore : public CIfrObj, public CIfrOpHeader {\r
683private:\r
684 EFI_IFR_DEFAULTSTORE *mDefaultStore;\r
685\r
686public:\r
687 CIfrDefaultStore () : CIfrObj (EFI_IFR_DEFAULTSTORE_OP, (CHAR8 **)&mDefaultStore),\r
688 CIfrOpHeader (EFI_IFR_DEFAULTSTORE_OP, &mDefaultStore->Header) {\r
689 mDefaultStore->DefaultId = EFI_VARSTORE_ID_INVALID;\r
690 mDefaultStore->DefaultName = EFI_STRING_ID_INVALID;\r
691 }\r
692\r
693 VOID SetDefaultName (IN EFI_STRING_ID DefaultName) {\r
694 mDefaultStore->DefaultName = DefaultName;\r
695 }\r
696\r
697 VOID SetDefaultId (IN UINT16 DefaultId) {\r
698 mDefaultStore->DefaultId = DefaultId;\r
699 }\r
700};\r
701\r
702#define EFI_FORM_ID_MAX 0xFFFF\r
703#define EFI_FREE_FORM_ID_BITMAP_SIZE ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
704\r
52302d4d
LG
705class CIfrFormId {\r
706public:\r
30fdf114
LG
707 STATIC UINT32 FormIdBitMap[EFI_FREE_FORM_ID_BITMAP_SIZE];\r
708\r
709 STATIC BOOLEAN ChekFormIdFree (IN EFI_FORM_ID FormId) {\r
710 UINT32 Index = (FormId / EFI_BITS_PER_UINT32);\r
711 UINT32 Offset = (FormId % EFI_BITS_PER_UINT32);\r
712\r
713 return (FormIdBitMap[Index] & (0x80000000 >> Offset)) == 0;\r
714 }\r
715\r
716 STATIC VOID MarkFormIdUsed (IN EFI_FORM_ID FormId) {\r
717 UINT32 Index = (FormId / EFI_BITS_PER_UINT32);\r
718 UINT32 Offset = (FormId % EFI_BITS_PER_UINT32);\r
719\r
720 FormIdBitMap[Index] |= (0x80000000 >> Offset);\r
721 }\r
52302d4d
LG
722};\r
723\r
724class CIfrForm : public CIfrObj, public CIfrOpHeader {\r
725private:\r
726 EFI_IFR_FORM *mForm;\r
30fdf114
LG
727\r
728public:\r
729 CIfrForm () : CIfrObj (EFI_IFR_FORM_OP, (CHAR8 **)&mForm), \r
730 CIfrOpHeader (EFI_IFR_FORM_OP, &mForm->Header) {\r
731 mForm->FormId = 0;\r
732 mForm->FormTitle = EFI_STRING_ID_INVALID;\r
733 }\r
734\r
735 EFI_VFR_RETURN_CODE SetFormId (IN EFI_FORM_ID FormId) {\r
fd171542 736 if (FormId == 0) {\r
737 //\r
738 // FormId can't be 0.\r
739 //\r
740 return VFR_RETURN_INVALID_PARAMETER;\r
741 }\r
52302d4d 742 if (CIfrFormId::ChekFormIdFree (FormId) == FALSE) {\r
30fdf114
LG
743 return VFR_RETURN_FORMID_REDEFINED;\r
744 }\r
745 mForm->FormId = FormId;\r
52302d4d 746 CIfrFormId::MarkFormIdUsed (FormId);\r
30fdf114
LG
747 return VFR_RETURN_SUCCESS;\r
748 }\r
749\r
750 VOID SetFormTitle (IN EFI_STRING_ID FormTitle) {\r
751 mForm->FormTitle = FormTitle;\r
752 }\r
753};\r
754\r
52302d4d
LG
755class CIfrFormMap : public CIfrObj, public CIfrOpHeader {\r
756private:\r
757 EFI_IFR_FORM_MAP *mFormMap;\r
758 EFI_IFR_FORM_MAP_METHOD *mMethodMap;\r
759\r
760public:\r
761 CIfrFormMap () : CIfrObj (EFI_IFR_FORM_MAP_OP, (CHAR8 **)&mFormMap, sizeof (EFI_IFR_FORM_MAP), TRUE), \r
762 CIfrOpHeader (EFI_IFR_FORM_MAP_OP, &mFormMap->Header) {\r
763 mFormMap->FormId = 0;\r
764 mMethodMap = (EFI_IFR_FORM_MAP_METHOD *) (mFormMap + 1);\r
765 }\r
766\r
767 EFI_VFR_RETURN_CODE SetFormId (IN EFI_FORM_ID FormId) {\r
768 if (FormId == 0) {\r
769 //\r
770 // FormId can't be 0.\r
771 //\r
772 return VFR_RETURN_INVALID_PARAMETER;\r
773 }\r
774 if (CIfrFormId::ChekFormIdFree (FormId) == FALSE) {\r
775 return VFR_RETURN_FORMID_REDEFINED;\r
776 }\r
777 mFormMap->FormId = FormId;\r
778 CIfrFormId::MarkFormIdUsed (FormId);\r
779 return VFR_RETURN_SUCCESS;\r
780 }\r
781\r
782 VOID SetFormMapMethod (IN EFI_STRING_ID MethodTitle, IN EFI_GUID *MethodGuid) {\r
783 if (ExpendObjBin (sizeof (EFI_IFR_FORM_MAP_METHOD))) {\r
784 IncLength (sizeof (EFI_IFR_FORM_MAP_METHOD));\r
785\r
786 mMethodMap->MethodTitle = MethodTitle;\r
f51461c8 787 memmove (&(mMethodMap->MethodIdentifier), MethodGuid, sizeof (EFI_GUID));\r
52302d4d
LG
788 mMethodMap ++;\r
789 }\r
790 }\r
791};\r
792\r
30fdf114
LG
793class CIfrVarStore : public CIfrObj, public CIfrOpHeader {\r
794private:\r
795 EFI_IFR_VARSTORE *mVarStore;\r
796\r
797public:\r
798 CIfrVarStore () : CIfrObj (EFI_IFR_VARSTORE_OP, (CHAR8 **)&mVarStore, sizeof (EFI_IFR_VARSTORE), TRUE), \r
799 CIfrOpHeader (EFI_IFR_VARSTORE_OP, &mVarStore->Header) {\r
800 mVarStore->VarStoreId = EFI_VARSTORE_ID_INVALID;\r
801 mVarStore->Size = 0;\r
802 memset (&mVarStore->Guid, 0, sizeof (EFI_GUID));\r
803 mVarStore->Name[0] = '\0';\r
804 }\r
805\r
806 VOID SetGuid (IN EFI_GUID *Guid) {\r
f51461c8 807 memmove (&mVarStore->Guid, Guid, sizeof (EFI_GUID));\r
30fdf114
LG
808 }\r
809\r
810 VOID SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId) {\r
811 mVarStore->VarStoreId = VarStoreId;\r
812 }\r
813\r
814 VOID SetSize (IN UINT16 Size) {\r
815 mVarStore->Size = Size;\r
816 }\r
817\r
818 VOID SetName (IN CHAR8 *Name) {\r
819 UINT8 Len;\r
820\r
821 if (Name != NULL) {\r
52302d4d 822 Len = (UINT8) strlen (Name);\r
30fdf114
LG
823 if (Len != 0) {\r
824 if (ExpendObjBin (Len) == TRUE) {\r
825 IncLength (Len);\r
826 strcpy ((CHAR8 *)(mVarStore->Name), Name);\r
827 }\r
828 }\r
829 }\r
830 }\r
831};\r
832\r
833class CIfrVarStoreEfi : public CIfrObj, public CIfrOpHeader {\r
834private:\r
835 EFI_IFR_VARSTORE_EFI *mVarStoreEfi;\r
836\r
837public:\r
4234283c 838 CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP, (CHAR8 **)&mVarStoreEfi, sizeof (EFI_IFR_VARSTORE_EFI), TRUE),\r
30fdf114
LG
839 CIfrOpHeader (EFI_IFR_VARSTORE_EFI_OP, &mVarStoreEfi->Header) {\r
840 mVarStoreEfi->VarStoreId = EFI_VAROFFSET_INVALID;\r
4234283c 841 mVarStoreEfi->Size = 0;\r
30fdf114 842 memset (&mVarStoreEfi->Guid, 0, sizeof (EFI_GUID));\r
4234283c 843 mVarStoreEfi->Name[0] = '\0';\r
30fdf114
LG
844 }\r
845\r
846 VOID SetGuid (IN EFI_GUID *Guid) {\r
f51461c8 847 memmove (&mVarStoreEfi->Guid, Guid, sizeof (EFI_GUID));\r
30fdf114
LG
848 }\r
849\r
850 VOID SetVarStoreId (IN UINT16 VarStoreId) {\r
851 mVarStoreEfi->VarStoreId = VarStoreId;\r
852 }\r
853\r
854 VOID SetAttributes (IN UINT32 Attributes) {\r
855 mVarStoreEfi->Attributes = Attributes;\r
856 }\r
4234283c
LG
857 VOID SetSize (IN UINT16 Size) {\r
858 mVarStoreEfi->Size = Size;\r
859 }\r
860\r
861 VOID SetName (IN CHAR8 *Name) {\r
862 UINT8 Len;\r
863\r
864 if (Name != NULL) {\r
865 Len = (UINT8) strlen (Name);\r
866 if (Len != 0) {\r
867 if (ExpendObjBin (Len) == TRUE) {\r
868 IncLength (Len);\r
869 strcpy ((CHAR8 *)(mVarStoreEfi->Name), Name);\r
870 }\r
871 }\r
872 }\r
873 }\r
874\r
875 VOID SetBinaryLength (IN UINT16 Size) {\r
876 UINT16 Len;\r
877\r
878 Len = sizeof (EFI_IFR_VARSTORE_EFI);\r
879 if (Size > Len) {\r
880 ExpendObjBin(Size - Len);\r
881 IncLength(Size - Len);\r
882 } else {\r
883 ShrinkObjBin(Len - Size);\r
884 DecLength(Len - Size);\r
885 }\r
886 }\r
30fdf114
LG
887};\r
888\r
889class CIfrVarStoreNameValue : public CIfrObj, public CIfrOpHeader {\r
890private:\r
891 EFI_IFR_VARSTORE_NAME_VALUE *mVarStoreNameValue;\r
892\r
893public:\r
894 CIfrVarStoreNameValue () : CIfrObj (EFI_IFR_VARSTORE_NAME_VALUE_OP, (CHAR8 **)&mVarStoreNameValue), \r
895 CIfrOpHeader (EFI_IFR_VARSTORE_NAME_VALUE_OP, &mVarStoreNameValue->Header) {\r
896 mVarStoreNameValue->VarStoreId = EFI_VAROFFSET_INVALID;\r
897 memset (&mVarStoreNameValue->Guid, 0, sizeof (EFI_GUID));\r
898 }\r
899\r
900 VOID SetGuid (IN EFI_GUID *Guid) {\r
f51461c8 901 memmove (&mVarStoreNameValue->Guid, Guid, sizeof (EFI_GUID));\r
30fdf114
LG
902 }\r
903\r
904 VOID SetVarStoreId (IN UINT16 VarStoreId) {\r
905 mVarStoreNameValue->VarStoreId = VarStoreId;\r
906 }\r
907};\r
908\r
909class CIfrImage : public CIfrObj, public CIfrOpHeader {\r
910private:\r
911 EFI_IFR_IMAGE *mImage;\r
912\r
913public:\r
914 CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP, (CHAR8 **)&mImage),\r
0d2711a6 915 CIfrOpHeader (EFI_IFR_IMAGE_OP, &mImage->Header) {\r
30fdf114
LG
916 mImage->Id = EFI_IMAGE_ID_INVALID;\r
917 }\r
918\r
919 VOID SetImageId (IN EFI_IMAGE_ID ImageId) {\r
920 mImage->Id = ImageId;\r
921 }\r
922};\r
923\r
4234283c
LG
924class CIfrModal : public CIfrObj, public CIfrOpHeader {\r
925private:\r
4afd3d04 926 EFI_IFR_MODAL_TAG *mModal;\r
4234283c
LG
927\r
928public:\r
929 CIfrModal () : CIfrObj (EFI_IFR_MODAL_TAG_OP, (CHAR8 **)&mModal),\r
930 CIfrOpHeader (EFI_IFR_MODAL_TAG_OP, &mModal->Header) {\r
931 }\r
932};\r
933\r
934\r
30fdf114
LG
935class CIfrLocked : public CIfrObj, public CIfrOpHeader {\r
936private:\r
937 EFI_IFR_LOCKED *mLocked;\r
938\r
939public:\r
940 CIfrLocked () : CIfrObj (EFI_IFR_LOCKED_OP, (CHAR8 **)&mLocked),\r
941 CIfrOpHeader (EFI_IFR_LOCKED_OP, &mLocked->Header) {}\r
942};\r
943\r
944class CIfrRule : public CIfrObj, public CIfrOpHeader {\r
945private:\r
946 EFI_IFR_RULE *mRule;\r
947\r
948public:\r
949 CIfrRule () : CIfrObj (EFI_IFR_RULE_OP, (CHAR8 **)&mRule),\r
950 mRule ((EFI_IFR_RULE *)GetObjBinAddr()),\r
951 CIfrOpHeader (EFI_IFR_RULE_OP, &mRule->Header) {\r
952 mRule->RuleId = EFI_RULE_ID_INVALID;\r
953 }\r
954\r
955 VOID SetRuleId (IN UINT8 RuleId) {\r
956 mRule->RuleId = RuleId;\r
957 }\r
958};\r
959\r
960static EFI_IFR_TYPE_VALUE gZeroEfiIfrTypeValue = {0, };\r
961\r
962class CIfrDefault : public CIfrObj, public CIfrOpHeader {\r
963private:\r
964 EFI_IFR_DEFAULT *mDefault;\r
965\r
966public:\r
967 CIfrDefault (\r
4afd3d04 968 IN UINT8 Size,\r
30fdf114
LG
969 IN UINT16 DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD,\r
970 IN UINT8 Type = EFI_IFR_TYPE_OTHER,\r
971 IN EFI_IFR_TYPE_VALUE Value = gZeroEfiIfrTypeValue\r
4afd3d04
LG
972 ) : CIfrObj (EFI_IFR_DEFAULT_OP, (CHAR8 **)&mDefault, Size),\r
973 CIfrOpHeader (EFI_IFR_DEFAULT_OP, &mDefault->Header, Size) {\r
30fdf114 974 mDefault->Type = Type;\r
30fdf114 975 mDefault->DefaultId = DefaultId;\r
f51461c8 976 memmove (&(mDefault->Value), &Value, Size - OFFSET_OF (EFI_IFR_DEFAULT, Value));\r
30fdf114
LG
977 }\r
978\r
979 VOID SetDefaultId (IN UINT16 DefaultId) {\r
980 mDefault->DefaultId = DefaultId;\r
981 }\r
982\r
983 VOID SetType (IN UINT8 Type) {\r
984 mDefault->Type = Type;\r
985 }\r
986\r
987 VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {\r
f51461c8 988 memmove (&mDefault->Value, &Value, mDefault->Header.Length - OFFSET_OF (EFI_IFR_DEFAULT, Value));\r
4afd3d04
LG
989 }\r
990};\r
991\r
992class CIfrDefault2 : public CIfrObj, public CIfrOpHeader {\r
993private:\r
994 EFI_IFR_DEFAULT_2 *mDefault;\r
995\r
996public:\r
997 CIfrDefault2 (\r
998 IN UINT16 DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD,\r
999 IN UINT8 Type = EFI_IFR_TYPE_OTHER\r
1000 ) : CIfrObj (EFI_IFR_DEFAULT_OP, (CHAR8 **)&mDefault, sizeof (EFI_IFR_DEFAULT_2)),\r
1001 CIfrOpHeader (EFI_IFR_DEFAULT_OP, &mDefault->Header, sizeof (EFI_IFR_DEFAULT_2)) {\r
1002 mDefault->Type = Type;\r
1003 mDefault->DefaultId = DefaultId;\r
1004 }\r
1005\r
1006 VOID SetDefaultId (IN UINT16 DefaultId) {\r
1007 mDefault->DefaultId = DefaultId;\r
1008 }\r
1009\r
1010 VOID SetType (IN UINT8 Type) {\r
1011 mDefault->Type = Type;\r
30fdf114
LG
1012 }\r
1013};\r
1014\r
1015class CIfrValue : public CIfrObj, public CIfrOpHeader{\r
1016private:\r
1017 EFI_IFR_VALUE *mValue;\r
1018\r
1019public:\r
1020 CIfrValue () : CIfrObj (EFI_IFR_VALUE_OP, (CHAR8 **)&mValue),\r
1021 CIfrOpHeader (EFI_IFR_VALUE_OP, &mValue->Header) {}\r
1022\r
1023};\r
1024\r
52302d4d
LG
1025class CIfrRead : public CIfrObj, public CIfrOpHeader{\r
1026private:\r
1027 EFI_IFR_READ *mRead;\r
1028\r
1029public:\r
1030 CIfrRead () : CIfrObj (EFI_IFR_READ_OP, (CHAR8 **)&mRead),\r
1031 CIfrOpHeader (EFI_IFR_READ_OP, &mRead->Header) {}\r
1032\r
1033};\r
1034\r
1035class CIfrWrite : public CIfrObj, public CIfrOpHeader{\r
1036private:\r
1037 EFI_IFR_WRITE *mWrite;\r
1038\r
1039public:\r
1040 CIfrWrite () : CIfrObj (EFI_IFR_WRITE_OP, (CHAR8 **)&mWrite),\r
1041 CIfrOpHeader (EFI_IFR_WRITE_OP, &mWrite->Header) {}\r
1042\r
1043};\r
1044\r
1045class CIfrGet : public CIfrObj, public CIfrOpHeader{\r
1046private:\r
1047 EFI_IFR_GET *mGet;\r
1048\r
1049public:\r
1050 CIfrGet (\r
1051 IN UINT32 LineNo \r
1052 ) : CIfrObj (EFI_IFR_GET_OP, (CHAR8 **)&mGet),\r
1053 CIfrOpHeader (EFI_IFR_GET_OP, &mGet->Header) {\r
1054 SetLineNo (LineNo);\r
1055 }\r
1056\r
1057 VOID SetVarInfo (IN EFI_VARSTORE_INFO *Info) {\r
1058 mGet->VarStoreId = Info->mVarStoreId;\r
1059 mGet->VarStoreInfo.VarName = Info->mInfo.mVarName;\r
1060 mGet->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset;\r
1061 mGet->VarStoreType = Info->mVarType;\r
1062 }\r
1063};\r
1064\r
1065class CIfrSet : public CIfrObj, public CIfrOpHeader{\r
1066private:\r
1067 EFI_IFR_SET *mSet;\r
1068\r
1069public:\r
1070 CIfrSet (\r
1071 IN UINT32 LineNo\r
1072 ) : CIfrObj (EFI_IFR_SET_OP, (CHAR8 **)&mSet),\r
1073 CIfrOpHeader (EFI_IFR_SET_OP, &mSet->Header) {\r
1074 SetLineNo (LineNo);\r
1075 }\r
1076\r
1077 VOID SetVarInfo (IN EFI_VARSTORE_INFO *Info) {\r
1078 mSet->VarStoreId = Info->mVarStoreId;\r
1079 mSet->VarStoreInfo.VarName = Info->mInfo.mVarName;\r
1080 mSet->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset;\r
1081 mSet->VarStoreType = Info->mVarType;\r
1082 }\r
1083};\r
1084\r
30fdf114
LG
1085class CIfrSubtitle : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {\r
1086private:\r
1087 EFI_IFR_SUBTITLE *mSubtitle;\r
1088\r
1089public:\r
1090 CIfrSubtitle () : CIfrObj (EFI_IFR_SUBTITLE_OP, (CHAR8 **)&mSubtitle),\r
1091 CIfrOpHeader (EFI_IFR_SUBTITLE_OP, &mSubtitle->Header),\r
fd171542 1092 CIfrStatementHeader (&mSubtitle->Statement) {\r
30fdf114
LG
1093 mSubtitle->Flags = 0;\r
1094 }\r
1095\r
1096 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {\r
1097 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_FLAGS_HORIZONTAL)) {\r
1098 mSubtitle->Flags |= EFI_IFR_FLAGS_HORIZONTAL;\r
1099 }\r
1100\r
1101 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1102 }\r
1103};\r
1104\r
1105class CIfrText : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {\r
1106private:\r
1107 EFI_IFR_TEXT *mText;\r
1108\r
1109public:\r
1110 CIfrText () : CIfrObj (EFI_IFR_TEXT_OP, (CHAR8 **)&mText),\r
1111 CIfrOpHeader (EFI_IFR_TEXT_OP, &mText->Header), \r
1112 CIfrStatementHeader (&mText->Statement) {\r
1113 mText->TextTwo = EFI_STRING_ID_INVALID;\r
1114 }\r
1115\r
1116 VOID SetTextTwo (IN EFI_STRING_ID StringId) {\r
1117 mText->TextTwo = StringId;\r
1118 }\r
1119};\r
1120\r
1121class CIfrRef : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1122private:\r
1123 EFI_IFR_REF *mRef;\r
1124\r
1125public:\r
1126 CIfrRef () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef),\r
1127 CIfrOpHeader (EFI_IFR_REF_OP, &mRef->Header), \r
1128 CIfrQuestionHeader (&mRef->Question) {\r
1129 mRef->FormId = 0;\r
1130 }\r
1131\r
1132 VOID SetFormId (IN EFI_FORM_ID FormId) {\r
1133 mRef->FormId = FormId;\r
1134 }\r
1135};\r
1136\r
1137class CIfrRef2 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1138private:\r
1139 EFI_IFR_REF2 *mRef2;\r
1140\r
1141public:\r
1142 CIfrRef2 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef2, sizeof (EFI_IFR_REF2)),\r
1143 CIfrOpHeader (EFI_IFR_REF_OP, &mRef2->Header, sizeof (EFI_IFR_REF2)), \r
1144 CIfrQuestionHeader (&mRef2->Question) {\r
1145 mRef2->FormId = 0;\r
1146 mRef2->QuestionId = EFI_QUESTION_ID_INVALID;\r
1147 }\r
1148\r
1149 VOID SetFormId (IN EFI_FORM_ID FormId) {\r
1150 mRef2->FormId = FormId;\r
1151 }\r
1152\r
0d2711a6 1153 VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {\r
30fdf114 1154 mRef2->QuestionId = QuestionId;\r
30fdf114
LG
1155 }\r
1156};\r
1157\r
1158class CIfrRef3 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1159private:\r
1160 EFI_IFR_REF3 *mRef3;\r
1161\r
1162public:\r
1163 CIfrRef3 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef3, sizeof(EFI_IFR_REF3)),\r
1164 CIfrOpHeader (EFI_IFR_REF_OP, &mRef3->Header, sizeof (EFI_IFR_REF3)), \r
1165 CIfrQuestionHeader (&mRef3->Question) {\r
1166 mRef3->FormId = 0;\r
1167 mRef3->QuestionId = EFI_QUESTION_ID_INVALID;\r
1168 memset (&mRef3->FormSetId, 0, sizeof (EFI_GUID));\r
1169 }\r
1170\r
1171 VOID SetFormId (IN EFI_FORM_ID FormId) {\r
1172 mRef3->FormId = FormId;\r
1173 }\r
1174\r
1175 VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {\r
1176 mRef3->QuestionId = QuestionId;\r
1177 }\r
1178\r
1179 VOID SetFormSetId (IN EFI_GUID FormSetId) {\r
1180 mRef3->FormSetId = FormSetId;\r
1181 }\r
1182};\r
1183\r
1184class CIfrRef4 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1185private:\r
1186 EFI_IFR_REF4 *mRef4;\r
1187\r
1188public:\r
4234283c
LG
1189 CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef4, sizeof(EFI_IFR_REF4)),\r
1190 CIfrOpHeader (EFI_IFR_REF_OP, &mRef4->Header, sizeof(EFI_IFR_REF4)), \r
30fdf114
LG
1191 CIfrQuestionHeader (&mRef4->Question) {\r
1192 mRef4->FormId = 0;\r
1193 mRef4->QuestionId = EFI_QUESTION_ID_INVALID;\r
1194 memset (&mRef4->FormSetId, 0, sizeof (EFI_GUID));\r
1195 mRef4->DevicePath = EFI_STRING_ID_INVALID;\r
1196 }\r
1197\r
1198 VOID SetFormId (IN EFI_FORM_ID FormId) {\r
1199 mRef4->FormId = FormId;\r
1200 }\r
1201\r
1202 VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {\r
1203 mRef4->QuestionId = QuestionId;\r
1204 }\r
1205\r
1206 VOID SetFormSetId (IN EFI_GUID FormSetId) {\r
1207 mRef4->FormSetId = FormSetId;\r
1208 }\r
1209\r
1210 VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {\r
1211 mRef4->DevicePath = DevicePath;\r
1212 }\r
1213};\r
1214\r
4234283c
LG
1215class CIfrRef5 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1216private:\r
1217 EFI_IFR_REF5 *mRef5;\r
1218\r
1219public:\r
1220 CIfrRef5 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef5, sizeof (EFI_IFR_REF5)),\r
1221 CIfrOpHeader (EFI_IFR_REF_OP, &mRef5->Header, sizeof (EFI_IFR_REF5)), \r
1222 CIfrQuestionHeader (&mRef5->Question) {\r
1223 }\r
1224};\r
1225\r
30fdf114
LG
1226class CIfrResetButton : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {\r
1227private:\r
1228 EFI_IFR_RESET_BUTTON *mResetButton;\r
1229\r
1230public:\r
1231 CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP, (CHAR8 **)&mResetButton),\r
1232 CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP, &mResetButton->Header), \r
fd171542 1233 CIfrStatementHeader (&mResetButton->Statement) {\r
30fdf114
LG
1234 mResetButton->DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
1235 }\r
1236\r
1237 VOID SetDefaultId (IN UINT16 DefaultId) {\r
1238 mResetButton->DefaultId = DefaultId;\r
1239 }\r
1240};\r
1241\r
1242class CIfrCheckBox : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1243private:\r
1244 EFI_IFR_CHECKBOX *mCheckBox;\r
1245\r
1246public:\r
1247 CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP, (CHAR8 **)&mCheckBox),\r
1248 CIfrOpHeader (EFI_IFR_CHECKBOX_OP, &mCheckBox->Header), \r
1249 CIfrQuestionHeader (&mCheckBox->Question) {\r
1250 mCheckBox->Flags = 0;\r
fd171542 1251 gCurrentQuestion = this;\r
30fdf114
LG
1252 }\r
1253\r
1254 ~CIfrCheckBox () {\r
fd171542 1255 gCurrentQuestion = NULL;\r
30fdf114
LG
1256 }\r
1257\r
1258 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, UINT8 LFlags) {\r
1259 EFI_VFR_RETURN_CODE Ret;\r
1260\r
1261 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1262 if (Ret != VFR_RETURN_SUCCESS) {\r
1263 return Ret;\r
1264 }\r
1265\r
1266 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_CHECKBOX_DEFAULT)) {\r
1267 mCheckBox->Flags |= EFI_IFR_CHECKBOX_DEFAULT;\r
1268 }\r
1269\r
1270 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_CHECKBOX_DEFAULT_MFG)) {\r
1271 mCheckBox->Flags |= EFI_IFR_CHECKBOX_DEFAULT_MFG;\r
1272 }\r
1273\r
1274 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1275 }\r
1276\r
1277 UINT8 GetFlags (VOID) {\r
1278 return mCheckBox->Flags;\r
1279 }\r
1280};\r
1281\r
1282class CIfrAction : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1283private:\r
1284 EFI_IFR_ACTION *mAction;\r
1285\r
1286public:\r
1287 CIfrAction () : CIfrObj (EFI_IFR_ACTION_OP, (CHAR8 **)&mAction),\r
1288 CIfrOpHeader (EFI_IFR_ACTION_OP, &mAction->Header), \r
1289 CIfrQuestionHeader (&mAction->Question) {\r
1290 mAction->QuestionConfig = EFI_STRING_ID_INVALID;\r
1291 }\r
1292\r
1293 VOID SetQuestionConfig (IN EFI_STRING_ID QuestionConfig) {\r
1294 mAction->QuestionConfig = QuestionConfig;\r
1295 }\r
1296};\r
1297\r
1298class CIfrDate : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1299private:\r
1300 EFI_IFR_DATE *mDate;\r
1301\r
1302public:\r
1303 CIfrDate () : CIfrObj (EFI_IFR_DATE_OP, (CHAR8 **)&mDate),\r
1304 CIfrOpHeader (EFI_IFR_DATE_OP, &mDate->Header),\r
1305 CIfrQuestionHeader (&mDate->Question) {\r
1306 mDate->Flags = 0;\r
1307 }\r
1308\r
1309 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1310 EFI_VFR_RETURN_CODE Ret;\r
1311\r
1312 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1313 if (Ret != VFR_RETURN_SUCCESS) {\r
1314 return Ret;\r
1315 }\r
1316\r
1317 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_YEAR_SUPPRESS)) {\r
1318 mDate->Flags |= EFI_QF_DATE_YEAR_SUPPRESS;\r
1319 }\r
1320\r
1321 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_MONTH_SUPPRESS)) {\r
1322 mDate->Flags |= EFI_QF_DATE_MONTH_SUPPRESS;\r
1323 }\r
1324\r
1325 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_DAY_SUPPRESS)) {\r
1326 mDate->Flags |= EFI_QF_DATE_DAY_SUPPRESS;\r
1327 }\r
1328\r
1329 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_NORMAL)) {\r
1330 mDate->Flags |= QF_DATE_STORAGE_NORMAL;\r
1331 } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_TIME)) {\r
1332 mDate->Flags |= QF_DATE_STORAGE_TIME;\r
1333 } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_WAKEUP)) {\r
1334 mDate->Flags |= QF_DATE_STORAGE_WAKEUP;\r
1335 }\r
1336\r
1337 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1338 }\r
1339};\r
1340\r
1341class CIfrNumeric : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader, public CIfrMinMaxStepData {\r
1342private:\r
1343 EFI_IFR_NUMERIC *mNumeric;\r
1344\r
1345public:\r
4afd3d04 1346 CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP, (CHAR8 **)&mNumeric, sizeof (EFI_IFR_NUMERIC), TRUE),\r
30fdf114
LG
1347 CIfrOpHeader (EFI_IFR_NUMERIC_OP, &mNumeric->Header),\r
1348 CIfrQuestionHeader (&mNumeric->Question),\r
a709adfa 1349 CIfrMinMaxStepData (&mNumeric->data, TRUE) {\r
30fdf114 1350 mNumeric->Flags = EFI_IFR_NUMERIC_SIZE_1 | EFI_IFR_DISPLAY_UINT_DEC;\r
a709adfa
LG
1351 gCurrentQuestion = this;\r
1352 gCurrentMinMaxData = this;\r
30fdf114
LG
1353 }\r
1354\r
1355 ~CIfrNumeric () {\r
a709adfa
LG
1356 gCurrentQuestion = NULL;\r
1357 gCurrentMinMaxData = NULL;\r
30fdf114
LG
1358 }\r
1359\r
4afd3d04
LG
1360 VOID ShrinkBinSize (IN UINT16 Size) {\r
1361 //\r
1362 // Update the buffer size which is truly be used later.\r
1363 //\r
1364 ShrinkObjBin(Size);\r
1365 DecLength(Size);\r
1366\r
1367 //\r
1368 // Allocate buffer in gCFormPkg.\r
1369 //\r
1370 _EMIT_PENDING_OBJ();\r
1371\r
1372 //\r
1373 // Update the buffer pointer used by other class.\r
1374 //\r
1375 mNumeric = (EFI_IFR_NUMERIC *) GetObjBinAddr();\r
1376 UpdateHeader (&mNumeric->Header);\r
1377 UpdateCIfrQuestionHeader(&mNumeric->Question);\r
1378 UpdateCIfrMinMaxStepData(&mNumeric->data);\r
1379 }\r
1380\r
e4ac870f 1381 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags, BOOLEAN DisplaySettingsSpecified = FALSE) {\r
30fdf114
LG
1382 EFI_VFR_RETURN_CODE Ret;\r
1383\r
1384 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1385 if (Ret != VFR_RETURN_SUCCESS) {\r
1386 return Ret;\r
1387 }\r
1388\r
e4ac870f 1389 if (DisplaySettingsSpecified == FALSE) {\r
30fdf114 1390 mNumeric->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;\r
e4ac870f
LG
1391 } else {\r
1392 mNumeric->Flags = LFlags;\r
30fdf114
LG
1393 }\r
1394 return VFR_RETURN_SUCCESS;\r
1395 }\r
1afac950
ED
1396\r
1397 UINT8 GetNumericFlags () {\r
1398 return mNumeric->Flags;\r
1399 }\r
30fdf114
LG
1400};\r
1401\r
1402class CIfrOneOf : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader, public CIfrMinMaxStepData {\r
1403private:\r
1404 EFI_IFR_ONE_OF *mOneOf;\r
1405\r
1406public:\r
4afd3d04 1407 CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP, (CHAR8 **)&mOneOf, sizeof (EFI_IFR_ONE_OF), TRUE),\r
30fdf114
LG
1408 CIfrOpHeader (EFI_IFR_ONE_OF_OP, &mOneOf->Header),\r
1409 CIfrQuestionHeader (&mOneOf->Question),\r
1410 CIfrMinMaxStepData (&mOneOf->data) {\r
1411 mOneOf->Flags = 0;\r
a709adfa
LG
1412 gCurrentQuestion = this;\r
1413 gCurrentMinMaxData = this;\r
30fdf114
LG
1414 }\r
1415\r
1416 ~CIfrOneOf () {\r
a709adfa
LG
1417 gCurrentQuestion = NULL;\r
1418 gCurrentMinMaxData = NULL;\r
30fdf114
LG
1419 }\r
1420\r
1421 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1422 EFI_VFR_RETURN_CODE Ret;\r
1423\r
1424 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1425 if (Ret != VFR_RETURN_SUCCESS) {\r
1426 return Ret;\r
1427 }\r
1428\r
1429 if (LFlags & EFI_IFR_DISPLAY) {\r
1430 mOneOf->Flags = LFlags;\r
1431 } else {\r
1432 mOneOf->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;\r
1433 }\r
1434 return VFR_RETURN_SUCCESS;\r
1435 }\r
4afd3d04
LG
1436\r
1437 VOID ShrinkBinSize (IN UINT16 Size) {\r
1438 //\r
1439 // Update the buffer size which is truly be used later.\r
1440 //\r
1441 ShrinkObjBin(Size);\r
1442 DecLength(Size);\r
1443\r
1444 //\r
1445 // Allocate buffer in gCFormPkg.\r
1446 //\r
1447 _EMIT_PENDING_OBJ();\r
1448\r
1449 //\r
1450 // Update the buffer pointer used by other class.\r
1451 //\r
1452 mOneOf = (EFI_IFR_ONE_OF *) GetObjBinAddr();\r
1453 UpdateHeader (&mOneOf->Header);\r
1454 UpdateCIfrQuestionHeader(&mOneOf->Question);\r
1455 UpdateCIfrMinMaxStepData(&mOneOf->data);\r
1456 }\r
30fdf114
LG
1457};\r
1458\r
1459class CIfrString : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1460private:\r
1461 EFI_IFR_STRING *mString;\r
1462\r
1463public:\r
1464 CIfrString () : CIfrObj (EFI_IFR_STRING_OP, (CHAR8 **)&mString),\r
1465 CIfrOpHeader (EFI_IFR_STRING_OP, &mString->Header),\r
1466 CIfrQuestionHeader (&mString->Question) {\r
1467 mString->Flags = 0;\r
1468 mString->MinSize = 0;\r
1469 mString->MaxSize = 0;\r
1470 gCurrentQuestion = this;\r
1471 }\r
1472\r
1473 ~CIfrString () {\r
1474 gCurrentQuestion = NULL;\r
1475 }\r
1476\r
1477 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1478 EFI_VFR_RETURN_CODE Ret;\r
1479\r
1480 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1481 if (Ret != VFR_RETURN_SUCCESS) {\r
1482 return Ret;\r
1483 }\r
1484\r
1485 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_STRING_MULTI_LINE)) {\r
1486 mString->Flags |= EFI_IFR_STRING_MULTI_LINE;\r
1487 }\r
1488\r
1489 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1490 }\r
1491\r
1492 VOID SetMinSize (IN UINT8 Flags) {\r
1493 mString->MinSize = Flags;\r
1494 }\r
1495\r
1496 VOID SetMaxSize (IN UINT8 MaxSize) {\r
1497 mString->MaxSize = MaxSize;\r
1498 }\r
1499};\r
1500\r
1501class CIfrPassword : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1502private:\r
1503 EFI_IFR_PASSWORD *mPassword;\r
1504\r
1505public:\r
1506 CIfrPassword () : CIfrObj (EFI_IFR_PASSWORD_OP, (CHAR8 **)&mPassword),\r
1507 CIfrOpHeader (EFI_IFR_PASSWORD_OP, &mPassword->Header),\r
1508 CIfrQuestionHeader (&mPassword->Question) {\r
1509 mPassword->MinSize = 0;\r
1510 mPassword->MaxSize = 0;\r
1511 gCurrentQuestion = this;\r
1512 }\r
1513\r
1514 ~CIfrPassword () {\r
1515 gCurrentQuestion = NULL;\r
1516 }\r
1517\r
1518 VOID SetMinSize (IN UINT16 MinSize) {\r
1519 mPassword->MinSize = MinSize;\r
1520 }\r
1521\r
1522 VOID SetMaxSize (IN UINT16 MaxSize) {\r
1523 mPassword->MaxSize = MaxSize;\r
1524 }\r
1525};\r
1526\r
1527class CIfrOrderedList : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1528private:\r
1529 EFI_IFR_ORDERED_LIST *mOrderedList;\r
1530\r
1531public:\r
1532 CIfrOrderedList () : CIfrObj (EFI_IFR_ORDERED_LIST_OP, (CHAR8 **)&mOrderedList),\r
1533 CIfrOpHeader (EFI_IFR_ORDERED_LIST_OP, &mOrderedList->Header),\r
1534 CIfrQuestionHeader (&mOrderedList->Question) {\r
1535 mOrderedList->MaxContainers = 0;\r
1536 mOrderedList->Flags = 0;\r
1537 gCurrentQuestion = this;\r
1538 }\r
1539\r
1540 ~CIfrOrderedList () {\r
1541 gCurrentQuestion = NULL;\r
1542 }\r
1543\r
1544 VOID SetMaxContainers (IN UINT8 MaxContainers) {\r
1545 mOrderedList->MaxContainers = MaxContainers;\r
1546 }\r
1547\r
1548 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1549 EFI_VFR_RETURN_CODE Ret;\r
1550\r
1551 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1552 if (Ret != VFR_RETURN_SUCCESS) {\r
1553 return Ret;\r
1554 }\r
1555\r
1556 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_UNIQUE_SET)) {\r
1557 mOrderedList->Flags |= EFI_IFR_UNIQUE_SET;\r
1558 }\r
1559\r
1560 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_NO_EMPTY_SET)) {\r
1561 mOrderedList->Flags |= EFI_IFR_NO_EMPTY_SET;\r
1562 }\r
1563\r
1564 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1565 }\r
1566};\r
1567\r
1568class CIfrTime : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1569private:\r
1570 EFI_IFR_TIME *mTime;\r
1571\r
1572public:\r
1573 CIfrTime () : CIfrObj (EFI_IFR_TIME_OP, (CHAR8 **)&mTime),\r
1574 CIfrOpHeader (EFI_IFR_TIME_OP, &mTime->Header),\r
1575 CIfrQuestionHeader (&mTime->Question) {\r
1576 mTime->Flags = 0;\r
1577 }\r
1578\r
1579 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1580 EFI_VFR_RETURN_CODE Ret;\r
1581\r
1582 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1583 if (Ret != VFR_RETURN_SUCCESS) {\r
1584 return Ret;\r
1585 }\r
1586\r
1587 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_HOUR_SUPPRESS)) {\r
1588 mTime->Flags |= QF_TIME_HOUR_SUPPRESS;\r
1589 }\r
1590\r
1591 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_MINUTE_SUPPRESS)) {\r
1592 mTime->Flags |= QF_TIME_MINUTE_SUPPRESS;\r
1593 }\r
1594\r
1595 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_SECOND_SUPPRESS)) {\r
1596 mTime->Flags |= QF_TIME_SECOND_SUPPRESS;\r
1597 }\r
1598\r
1599 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_NORMAL)) {\r
1600 mTime->Flags |= QF_TIME_STORAGE_NORMAL;\r
1601 } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_TIME)) {\r
1602 mTime->Flags |= QF_TIME_STORAGE_TIME;\r
1603 } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_WAKEUP)) {\r
1604 mTime->Flags |= QF_TIME_STORAGE_WAKEUP;\r
1605 }\r
1606\r
1607 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1608 }\r
1609};\r
1610\r
1611class CIfrDisableIf : public CIfrObj, public CIfrOpHeader {\r
1612private:\r
1613 EFI_IFR_DISABLE_IF *mDisableIf;\r
1614\r
1615public:\r
1616 CIfrDisableIf () : CIfrObj (EFI_IFR_DISABLE_IF_OP, (CHAR8 **)&mDisableIf),\r
1617 mDisableIf ((EFI_IFR_DISABLE_IF *) GetObjBinAddr()),\r
1618 CIfrOpHeader (EFI_IFR_DISABLE_IF_OP, &mDisableIf->Header) {}\r
1619};\r
1620\r
1621class CIfrSuppressIf : public CIfrObj, public CIfrOpHeader {\r
1622private:\r
1623 EFI_IFR_SUPPRESS_IF *mSuppressIf;\r
1624\r
1625public:\r
1626 CIfrSuppressIf () : CIfrObj (EFI_IFR_SUPPRESS_IF_OP, (CHAR8 **)&mSuppressIf),\r
1627 CIfrOpHeader (EFI_IFR_SUPPRESS_IF_OP, &mSuppressIf->Header) {}\r
1628};\r
1629\r
1630class CIfrGrayOutIf : public CIfrObj, public CIfrOpHeader {\r
1631private:\r
1632 EFI_IFR_GRAY_OUT_IF *mGrayOutIf;\r
1633\r
1634public:\r
1635 CIfrGrayOutIf () : CIfrObj (EFI_IFR_GRAY_OUT_IF_OP, (CHAR8 **)&mGrayOutIf),\r
1636 CIfrOpHeader (EFI_IFR_GRAY_OUT_IF_OP, &mGrayOutIf->Header) {}\r
1637};\r
1638\r
1639class CIfrInconsistentIf : public CIfrObj, public CIfrOpHeader {\r
1640private:\r
1641 EFI_IFR_INCONSISTENT_IF *mInconsistentIf;\r
1642\r
1643public:\r
1644 CIfrInconsistentIf () : CIfrObj (EFI_IFR_INCONSISTENT_IF_OP, (CHAR8 **)&mInconsistentIf),\r
1645 CIfrOpHeader (EFI_IFR_INCONSISTENT_IF_OP, &mInconsistentIf->Header) {\r
1646 mInconsistentIf->Error = EFI_STRING_ID_INVALID;\r
1647 }\r
1648\r
1649 VOID SetError (IN EFI_STRING_ID Error) {\r
1650 mInconsistentIf->Error = Error;\r
1651 }\r
1652};\r
1653\r
ea0f6464
LG
1654class CIfrWarningIf : public CIfrObj, public CIfrOpHeader {\r
1655private:\r
1656 EFI_IFR_WARNING_IF *mWarningIf;\r
1657\r
1658public:\r
1659 CIfrWarningIf () : CIfrObj (EFI_IFR_WARNING_IF_OP, (CHAR8 **)&mWarningIf),\r
1660 CIfrOpHeader (EFI_IFR_WARNING_IF_OP, &mWarningIf->Header) {\r
1661 mWarningIf->Warning = EFI_STRING_ID_INVALID;\r
1662 mWarningIf->TimeOut = 0;\r
1663 }\r
1664\r
1665 VOID SetWarning (IN EFI_STRING_ID Warning) {\r
1666 mWarningIf->Warning = Warning;\r
1667 }\r
1668\r
1669 VOID SetTimeOut (IN UINT8 TimeOut) {\r
1670 mWarningIf->TimeOut = TimeOut;\r
1671 }\r
1672};\r
1673\r
30fdf114
LG
1674class CIfrNoSubmitIf : public CIfrObj, public CIfrOpHeader {\r
1675private:\r
1676 EFI_IFR_NO_SUBMIT_IF *mNoSubmitIf;\r
1677\r
1678public:\r
1679 CIfrNoSubmitIf () : CIfrObj (EFI_IFR_NO_SUBMIT_IF_OP, (CHAR8 **)&mNoSubmitIf),\r
1680 CIfrOpHeader (EFI_IFR_NO_SUBMIT_IF_OP, &mNoSubmitIf->Header) {\r
1681 mNoSubmitIf->Error = EFI_STRING_ID_INVALID;\r
1682 }\r
1683\r
1684 VOID SetError (IN EFI_STRING_ID Error) {\r
1685 mNoSubmitIf->Error = Error;\r
1686 }\r
1687};\r
1688\r
1689class CIfrRefresh : public CIfrObj, public CIfrOpHeader {\r
1690private:\r
1691 EFI_IFR_REFRESH *mRefresh;\r
1692\r
1693public:\r
1694 CIfrRefresh () : CIfrObj (EFI_IFR_REFRESH_OP, (CHAR8 **)&mRefresh),\r
1695 CIfrOpHeader (EFI_IFR_REFRESH_OP, &mRefresh->Header) {\r
1696 mRefresh->RefreshInterval = 0;\r
1697 }\r
1698\r
1699 VOID SetRefreshInterval (IN UINT8 RefreshInterval) {\r
1700 mRefresh->RefreshInterval = RefreshInterval;\r
1701 }\r
1702};\r
1703\r
4234283c
LG
1704class CIfrRefreshId : public CIfrObj, public CIfrOpHeader {\r
1705private:\r
1706 EFI_IFR_REFRESH_ID *mRefreshId;\r
1707\r
1708public:\r
1709 CIfrRefreshId () : CIfrObj (EFI_IFR_REFRESH_ID_OP, (CHAR8 **)&mRefreshId),\r
1710 CIfrOpHeader (EFI_IFR_REFRESH_ID_OP, &mRefreshId->Header) {\r
1711 memset (&mRefreshId->RefreshEventGroupId, 0, sizeof (EFI_GUID));\r
1712 }\r
1713\r
1714 VOID SetRefreshEventGroutId (IN EFI_GUID *RefreshEventGroupId) {\r
f51461c8 1715 memmove (&mRefreshId->RefreshEventGroupId, RefreshEventGroupId, sizeof (EFI_GUID));\r
4234283c
LG
1716 }\r
1717};\r
1718\r
30fdf114
LG
1719class CIfrVarStoreDevice : public CIfrObj, public CIfrOpHeader {\r
1720private:\r
1721 EFI_IFR_VARSTORE_DEVICE *mVarStoreDevice;\r
1722\r
1723public:\r
1724 CIfrVarStoreDevice () : CIfrObj (EFI_IFR_VARSTORE_DEVICE_OP, (CHAR8 **)&mVarStoreDevice),\r
1725 CIfrOpHeader (EFI_IFR_VARSTORE_DEVICE_OP, &mVarStoreDevice->Header) {\r
1726 mVarStoreDevice->DevicePath = EFI_STRING_ID_INVALID;\r
1727 }\r
1728\r
1729 VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {\r
1730 mVarStoreDevice->DevicePath = DevicePath;\r
1731 }\r
1732};\r
1733\r
1734class CIfrOneOfOption : public CIfrObj, public CIfrOpHeader {\r
1735private:\r
1736 EFI_IFR_ONE_OF_OPTION *mOneOfOption;\r
1737\r
1738public:\r
4afd3d04
LG
1739 CIfrOneOfOption (UINT8 Size) : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP, (CHAR8 **)&mOneOfOption, Size),\r
1740 CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP, &mOneOfOption->Header, Size) {\r
30fdf114
LG
1741 mOneOfOption->Flags = 0;\r
1742 mOneOfOption->Option = EFI_STRING_ID_INVALID;\r
1743 mOneOfOption->Type = EFI_IFR_TYPE_OTHER;\r
4afd3d04 1744 memset (&mOneOfOption->Value, 0, Size - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));\r
30fdf114
LG
1745 }\r
1746\r
1747 VOID SetOption (IN EFI_STRING_ID Option) {\r
1748 mOneOfOption->Option = Option;\r
1749 }\r
1750\r
1751 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {\r
ddaf640f 1752 mOneOfOption->Flags = 0;\r
30fdf114
LG
1753 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT)) {\r
1754 mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT;\r
1755 }\r
1756\r
1757 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT_MFG)) {\r
1758 mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT_MFG;\r
1759 }\r
1760\r
1761 if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_8)) {\r
1762 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_8);\r
1763 mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_8;\r
1764 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_16)) {\r
1765 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_16);\r
1766 mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_16;\r
1767 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_32)) {\r
1768 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_32);\r
1769 mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_32;\r
1770 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_64)) {\r
1771 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_64);\r
1772 mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_64;\r
1773 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_BOOLEAN)) {\r
1774 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_BOOLEAN);\r
1775 mOneOfOption->Flags |= EFI_IFR_TYPE_BOOLEAN;\r
1776 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_TIME)) {\r
1777 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_TIME);\r
1778 mOneOfOption->Flags |= EFI_IFR_TYPE_TIME;\r
1779 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_DATE)) {\r
1780 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_DATE);\r
1781 mOneOfOption->Flags |= EFI_IFR_TYPE_DATE;\r
1782 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_STRING)) {\r
1783 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_STRING);\r
1784 mOneOfOption->Flags |= EFI_IFR_TYPE_STRING;\r
1785 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_OTHER)) {\r
1786 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_OTHER);\r
1787 mOneOfOption->Flags |= EFI_IFR_TYPE_OTHER;\r
1788 }\r
1789\r
1790 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1791 }\r
1792\r
1793 VOID SetType (IN UINT8 Type) {\r
1794 mOneOfOption->Type = Type;\r
1795 }\r
1796\r
1797 VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {\r
f51461c8 1798 memmove (&mOneOfOption->Value, &Value, mOneOfOption->Header.Length - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));\r
30fdf114
LG
1799 }\r
1800\r
1801 UINT8 GetFlags (VOID) {\r
1802 return mOneOfOption->Flags;\r
1803 }\r
1804};\r
1805\r
1806static EFI_GUID IfrTianoGuid = EFI_IFR_TIANO_GUID;\r
1807static EFI_GUID IfrFrameworkGuid = EFI_IFR_FRAMEWORK_GUID;\r
1808\r
1809class CIfrClass : public CIfrObj, public CIfrOpHeader {\r
1810private:\r
1811 EFI_IFR_GUID_CLASS *mClass;\r
1812\r
1813public:\r
1814 CIfrClass () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mClass, sizeof (EFI_IFR_GUID_CLASS)),\r
1815 CIfrOpHeader (EFI_IFR_GUID_OP, &mClass->Header, sizeof (EFI_IFR_GUID_CLASS)) {\r
1816 mClass->ExtendOpCode = EFI_IFR_EXTEND_OP_CLASS;\r
1817 mClass->Guid = IfrTianoGuid;\r
1818 mClass->Class = EFI_NON_DEVICE_CLASS;\r
1819 }\r
1820\r
1821 VOID SetClass (IN UINT16 Class) {\r
1822 mClass->Class = Class;\r
1823 }\r
1824};\r
1825\r
1826class CIfrSubClass : public CIfrObj, public CIfrOpHeader {\r
1827private:\r
1828 EFI_IFR_GUID_SUBCLASS *mSubClass;\r
1829\r
1830public:\r
1831 CIfrSubClass () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mSubClass, sizeof (EFI_IFR_GUID_SUBCLASS)),\r
1832 CIfrOpHeader (EFI_IFR_GUID_OP, &mSubClass->Header, sizeof (EFI_IFR_GUID_SUBCLASS)) {\r
1833 mSubClass->ExtendOpCode = EFI_IFR_EXTEND_OP_SUBCLASS;\r
1834 mSubClass->Guid = IfrTianoGuid;\r
1835 mSubClass->SubClass = EFI_SETUP_APPLICATION_SUBCLASS;\r
1836 }\r
1837\r
1838 VOID SetSubClass (IN UINT16 SubClass) {\r
1839 mSubClass->SubClass = SubClass;\r
1840 }\r
1841};\r
1842\r
1843class CIfrLabel : public CIfrObj, public CIfrOpHeader {\r
1844private:\r
1845 EFI_IFR_GUID_LABEL *mLabel;\r
1846\r
1847public:\r
1848 CIfrLabel () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mLabel, sizeof (EFI_IFR_GUID_LABEL)),\r
1849 CIfrOpHeader (EFI_IFR_GUID_OP, &mLabel->Header, sizeof (EFI_IFR_GUID_LABEL)) {\r
1850 mLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
1851 mLabel->Guid = IfrTianoGuid;\r
1852 }\r
1853\r
1854 VOID SetNumber (IN UINT16 Number) {\r
1855 mLabel->Number = Number;\r
1856 }\r
1857};\r
1858\r
1859class CIfrBanner : public CIfrObj, public CIfrOpHeader {\r
1860private:\r
1861 EFI_IFR_GUID_BANNER *mBanner;\r
1862\r
1863public:\r
1864 CIfrBanner () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mBanner, sizeof (EFI_IFR_GUID_BANNER)),\r
1865 CIfrOpHeader (EFI_IFR_GUID_OP, &mBanner->Header, sizeof (EFI_IFR_GUID_BANNER)) {\r
1866 mBanner->ExtendOpCode = EFI_IFR_EXTEND_OP_BANNER;\r
1867 mBanner->Guid = IfrTianoGuid;\r
1868 }\r
1869\r
1870 VOID SetTitle (IN EFI_STRING_ID StringId) {\r
1871 mBanner->Title = StringId;\r
1872 }\r
1873\r
1874 VOID SetLine (IN UINT16 Line) {\r
1875 mBanner->LineNumber = Line;\r
1876 }\r
1877\r
1878 VOID SetAlign (IN UINT8 Align) {\r
1879 mBanner->Alignment = Align;\r
1880 }\r
1881};\r
1882\r
1883class CIfrOptionKey : public CIfrObj, public CIfrOpHeader {\r
1884private:\r
1885 EFI_IFR_GUID_OPTIONKEY *mOptionKey;\r
1886\r
1887public:\r
1888 CIfrOptionKey (\r
1889 IN EFI_QUESTION_ID QuestionId,\r
1890 IN EFI_IFR_TYPE_VALUE &OptionValue,\r
1891 IN EFI_QUESTION_ID KeyValue\r
1892 ) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mOptionKey, sizeof (EFI_IFR_GUID_OPTIONKEY)),\r
1893 CIfrOpHeader (EFI_IFR_GUID_OP, &mOptionKey->Header, sizeof (EFI_IFR_GUID_OPTIONKEY)) {\r
1894 mOptionKey->ExtendOpCode = EFI_IFR_EXTEND_OP_OPTIONKEY;\r
1895 mOptionKey->Guid = IfrFrameworkGuid;\r
1896 mOptionKey->QuestionId = QuestionId;\r
1897 mOptionKey->OptionValue = OptionValue;\r
1898 mOptionKey->KeyValue = KeyValue;\r
1899 }\r
1900};\r
1901\r
1902class CIfrVarEqName : public CIfrObj, public CIfrOpHeader {\r
1903private:\r
1904 EFI_IFR_GUID_VAREQNAME *mVarEqName;\r
1905\r
1906public:\r
1907 CIfrVarEqName (\r
1908 IN EFI_QUESTION_ID QuestionId,\r
1909 IN EFI_STRING_ID NameId\r
1910 ) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mVarEqName, sizeof (EFI_IFR_GUID_VAREQNAME)),\r
1911 CIfrOpHeader (EFI_IFR_GUID_OP, &mVarEqName->Header, sizeof (EFI_IFR_GUID_VAREQNAME)) {\r
1912 mVarEqName->ExtendOpCode = EFI_IFR_EXTEND_OP_VAREQNAME;\r
1913 mVarEqName->Guid = IfrFrameworkGuid;\r
1914 mVarEqName->QuestionId = QuestionId;\r
1915 mVarEqName->NameId = NameId;\r
1916 }\r
1917};\r
1918\r
1919class CIfrTimeout : public CIfrObj, public CIfrOpHeader {\r
1920private:\r
1921 EFI_IFR_GUID_TIMEOUT *mTimeout;\r
1922\r
1923public:\r
1924 CIfrTimeout (IN UINT16 Timeout = 0) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mTimeout, sizeof (EFI_IFR_GUID_TIMEOUT)),\r
1925 CIfrOpHeader (EFI_IFR_GUID_OP, &mTimeout->Header, sizeof (EFI_IFR_GUID_TIMEOUT)) {\r
1926 mTimeout->ExtendOpCode = EFI_IFR_EXTEND_OP_TIMEOUT;\r
1927 mTimeout->Guid = IfrTianoGuid;\r
1928 mTimeout->TimeOut = Timeout;\r
1929 }\r
1930\r
1931 VOID SetTimeout (IN UINT16 Timeout) {\r
1932 mTimeout->TimeOut = Timeout;\r
1933 }\r
1934};\r
1935\r
da92f276
LG
1936class CIfrGuid : public CIfrObj, public CIfrOpHeader {\r
1937private:\r
1938 EFI_IFR_GUID *mGuid;\r
1939\r
1940public:\r
1941 CIfrGuid (UINT8 Size) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mGuid, sizeof (EFI_IFR_GUID)+Size),\r
1942 CIfrOpHeader (EFI_IFR_GUID_OP, &mGuid->Header, sizeof (EFI_IFR_GUID)+Size) {\r
1943 memset (&mGuid->Guid, 0, sizeof (EFI_GUID));\r
1944 }\r
1945\r
1946 VOID SetGuid (IN EFI_GUID *Guid) {\r
f51461c8 1947 memmove (&mGuid->Guid, Guid, sizeof (EFI_GUID));\r
da92f276
LG
1948 }\r
1949\r
1950 VOID SetData (IN UINT8* DataBuff, IN UINT8 Size) {\r
f51461c8 1951 memmove ((UINT8 *)mGuid + sizeof (EFI_IFR_GUID), DataBuff, Size);\r
da92f276
LG
1952 }\r
1953};\r
1954\r
30fdf114
LG
1955class CIfrDup : public CIfrObj, public CIfrOpHeader {\r
1956private:\r
1957 EFI_IFR_DUP *mDup;\r
1958\r
1959public:\r
1960 CIfrDup (\r
1961 IN UINT32 LineNo\r
1962 ) : CIfrObj (EFI_IFR_DUP_OP, (CHAR8 **)&mDup),\r
1963 CIfrOpHeader (EFI_IFR_DUP_OP, &mDup->Header) {\r
1964 SetLineNo (LineNo);\r
1965 }\r
1966};\r
1967\r
1968class CIfrEqIdId : public CIfrObj, public CIfrOpHeader {\r
1969private:\r
1970 EFI_IFR_EQ_ID_ID *mEqIdId;\r
1971\r
1972public:\r
1973 CIfrEqIdId (\r
1974 IN UINT32 LineNo\r
1975 ) : CIfrObj (EFI_IFR_EQ_ID_ID_OP, (CHAR8 **)&mEqIdId),\r
1976 CIfrOpHeader (EFI_IFR_EQ_ID_ID_OP, &mEqIdId->Header) {\r
1977 SetLineNo (LineNo);\r
1978 mEqIdId->QuestionId1 = EFI_QUESTION_ID_INVALID;\r
1979 mEqIdId->QuestionId2 = EFI_QUESTION_ID_INVALID;\r
1980 }\r
1981\r
1982 VOID SetQuestionId1 (\r
1983 IN EFI_QUESTION_ID QuestionId,\r
1984 IN CHAR8 *VarIdStr,\r
1985 IN UINT32 LineNo\r
1986 ) {\r
1987 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
1988 mEqIdId->QuestionId1 = QuestionId;\r
1989 } else {\r
1990 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId1), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
1991 }\r
1992 }\r
1993\r
1994 VOID SetQuestionId2 (\r
1995 IN EFI_QUESTION_ID QuestionId,\r
1996 IN CHAR8 *VarIdStr,\r
1997 IN UINT32 LineNo\r
1998 ) {\r
1999 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
2000 mEqIdId->QuestionId2 = QuestionId;\r
2001 } else {\r
2002 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId2), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
2003 }\r
2004 }\r
2005};\r
2006\r
2007class CIfrEqIdVal : public CIfrObj, public CIfrOpHeader {\r
2008private:\r
2009 EFI_IFR_EQ_ID_VAL *mEqIdVal;\r
2010\r
2011public:\r
2012 CIfrEqIdVal (\r
2013 IN UINT32 LineNo\r
2014 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_OP, (CHAR8 **)&mEqIdVal),\r
2015 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_OP, &mEqIdVal->Header) {\r
2016 SetLineNo (LineNo);\r
2017 mEqIdVal->QuestionId = EFI_QUESTION_ID_INVALID;\r
2018 }\r
2019\r
2020 VOID SetQuestionId (\r
2021 IN EFI_QUESTION_ID QuestionId,\r
2022 IN CHAR8 *VarIdStr,\r
2023 IN UINT32 LineNo\r
2024 ) {\r
2025 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
2026 mEqIdVal->QuestionId = QuestionId;\r
2027 } else {\r
2028 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVal->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
2029 }\r
2030 }\r
2031\r
2032 VOID SetValue (IN UINT16 Value) {\r
2033 mEqIdVal->Value = Value;\r
2034 }\r
2035};\r
2036\r
2037class CIfrEqIdList : public CIfrObj, public CIfrOpHeader {\r
2038private:\r
b303ea72 2039 EFI_IFR_EQ_ID_VAL_LIST *mEqIdVList;\r
30fdf114
LG
2040\r
2041public:\r
2042 CIfrEqIdList (\r
2043 IN UINT32 LineNo\r
64b2609f
LG
2044 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_LIST_OP, (CHAR8 **)&mEqIdVList, sizeof (EFI_IFR_EQ_ID_VAL_LIST), TRUE),\r
2045 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_LIST_OP, &mEqIdVList->Header) {\r
30fdf114
LG
2046 SetLineNo (LineNo);\r
2047 mEqIdVList->QuestionId = EFI_QUESTION_ID_INVALID;\r
2048 mEqIdVList->ListLength = 0;\r
2049 mEqIdVList->ValueList[0] = 0;\r
2050 }\r
2051 \r
2052 VOID UpdateIfrBuffer ( \r
2053 ) {\r
2054 _EMIT_PENDING_OBJ();\r
b303ea72 2055 mEqIdVList = (EFI_IFR_EQ_ID_VAL_LIST *) GetObjBinAddr();\r
30fdf114
LG
2056 UpdateHeader (&mEqIdVList->Header);\r
2057 }\r
2058\r
2059 VOID SetQuestionId (\r
2060 IN EFI_QUESTION_ID QuestionId,\r
2061 IN CHAR8 *VarIdStr,\r
2062 IN UINT32 LineNo\r
2063 ) {\r
2064 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
2065 mEqIdVList->QuestionId = QuestionId;\r
2066 } else {\r
2067 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVList->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
2068 }\r
2069 }\r
2070\r
2071 VOID SetListLength (IN UINT16 ListLength) {\r
2072 mEqIdVList->ListLength = ListLength;\r
2073 }\r
2074\r
2075 VOID SetValueList (IN UINT16 Index, IN UINT16 Value) {\r
2076 if (Index == 0) {\r
2077 mEqIdVList->ValueList[0] = Value;\r
2078 return;\r
2079 }\r
2080\r
2081 if (ExpendObjBin (sizeof (UINT16)) ==TRUE) {\r
2082 IncLength (sizeof (UINT16));\r
2083 mEqIdVList->ValueList[Index] = Value;\r
2084 }\r
2085 }\r
2086};\r
2087\r
2088class CIfrQuestionRef1 : public CIfrObj, public CIfrOpHeader {\r
2089private:\r
2090 EFI_IFR_QUESTION_REF1 *mQuestionRef1;\r
2091\r
2092public:\r
2093 CIfrQuestionRef1 (\r
2094 IN UINT32 LineNo\r
2095 ) : CIfrObj (EFI_IFR_QUESTION_REF1_OP, (CHAR8 **)&mQuestionRef1),\r
2096 CIfrOpHeader (EFI_IFR_QUESTION_REF1_OP, &mQuestionRef1->Header) {\r
2097 SetLineNo (LineNo);\r
2098 mQuestionRef1->QuestionId = EFI_QUESTION_ID_INVALID;\r
2099 }\r
2100\r
2101 VOID SetQuestionId (\r
2102 IN EFI_QUESTION_ID QuestionId,\r
2103 IN CHAR8 *VarIdStr,\r
2104 IN UINT32 LineNo\r
2105 ) {\r
2106 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
2107 mQuestionRef1->QuestionId = QuestionId;\r
2108 } else {\r
2109 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mQuestionRef1->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
2110 }\r
2111 }\r
2112};\r
2113\r
2114class CIfrQuestionRef2 : public CIfrObj, public CIfrOpHeader {\r
2115private:\r
2116 EFI_IFR_QUESTION_REF2 *mQuestionRef2;\r
2117\r
2118public:\r
2119 CIfrQuestionRef2 (\r
2120 IN UINT32 LineNo\r
2121 ) : CIfrObj (EFI_IFR_QUESTION_REF2_OP, (CHAR8 **)&mQuestionRef2),\r
2122 CIfrOpHeader (EFI_IFR_QUESTION_REF2_OP, &mQuestionRef2->Header) {\r
2123 SetLineNo (LineNo);\r
2124 }\r
2125};\r
2126\r
2127class CIfrQuestionRef3 : public CIfrObj, public CIfrOpHeader {\r
2128private:\r
2129 EFI_IFR_QUESTION_REF3 *mQuestionRef3;\r
2130\r
2131public:\r
2132 CIfrQuestionRef3 (\r
2133 IN UINT32 LineNo\r
2134 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3),\r
2135 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3->Header) {\r
2136 SetLineNo (LineNo);\r
2137 }\r
2138};\r
2139\r
2140class CIfrQuestionRef3_2 : public CIfrObj, public CIfrOpHeader {\r
2141private:\r
2142 EFI_IFR_QUESTION_REF3_2 *mQuestionRef3_2;\r
2143\r
2144public:\r
2145 CIfrQuestionRef3_2 (\r
2146 IN UINT32 LineNo\r
2147 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3_2, sizeof (EFI_IFR_QUESTION_REF3_2)),\r
2148 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3_2->Header, sizeof (EFI_IFR_QUESTION_REF3_2)) {\r
2149 SetLineNo (LineNo);\r
2150 mQuestionRef3_2->DevicePath = EFI_STRING_ID_INVALID;\r
2151 }\r
2152\r
2153 VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {\r
2154 mQuestionRef3_2->DevicePath = DevicePath;\r
2155 }\r
2156};\r
2157\r
2158class CIfrQuestionRef3_3 : public CIfrObj, public CIfrOpHeader {\r
2159private:\r
2160 EFI_IFR_QUESTION_REF3_3 *mQuestionRef3_3;\r
2161\r
2162public:\r
2163 CIfrQuestionRef3_3 (\r
2164 IN UINT32 LineNo\r
2165 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3_3, sizeof (EFI_IFR_QUESTION_REF3_3)),\r
2166 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3_3->Header, sizeof (EFI_IFR_QUESTION_REF3_3)) {\r
2167 SetLineNo (LineNo);\r
2168 mQuestionRef3_3->DevicePath = EFI_STRING_ID_INVALID;\r
2169 memset (&mQuestionRef3_3->Guid, 0, sizeof (EFI_GUID));\r
2170 }\r
2171\r
2172 VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {\r
2173 mQuestionRef3_3->DevicePath = DevicePath;\r
2174 }\r
2175\r
2176 VOID SetGuid (IN EFI_GUID *Guid) {\r
2177 mQuestionRef3_3->Guid = *Guid;\r
2178 }\r
2179};\r
2180\r
2181class CIfrRuleRef : public CIfrObj, public CIfrOpHeader {\r
2182private:\r
2183 EFI_IFR_RULE_REF *mRuleRef;\r
2184\r
2185public:\r
2186 CIfrRuleRef (\r
2187 IN UINT32 LineNo\r
2188 ) : CIfrObj (EFI_IFR_RULE_REF_OP, (CHAR8 **)&mRuleRef),\r
2189 CIfrOpHeader (EFI_IFR_RULE_REF_OP, &mRuleRef->Header) {\r
2190 SetLineNo (LineNo);\r
2191 mRuleRef->RuleId = EFI_RULE_ID_INVALID;\r
2192 }\r
2193\r
2194 VOID SetRuleId (IN UINT8 RuleId) {\r
2195 mRuleRef->RuleId = RuleId;\r
2196 }\r
2197};\r
2198\r
2199class CIfrStringRef1 : public CIfrObj, public CIfrOpHeader {\r
2200private:\r
2201 EFI_IFR_STRING_REF1 *mStringRef1;\r
2202\r
2203public:\r
2204 CIfrStringRef1 (\r
2205 IN UINT32 LineNo\r
2206 ) : CIfrObj (EFI_IFR_STRING_REF1_OP, (CHAR8 **)&mStringRef1),\r
2207 CIfrOpHeader (EFI_IFR_STRING_REF1_OP, &mStringRef1->Header) {\r
2208 SetLineNo (LineNo);\r
2209 mStringRef1->StringId = EFI_STRING_ID_INVALID;\r
2210 }\r
2211\r
2212 VOID SetStringId (IN EFI_STRING_ID StringId) {\r
2213 mStringRef1->StringId = StringId;\r
2214 }\r
2215};\r
2216\r
2217class CIfrStringRef2 : public CIfrObj, public CIfrOpHeader {\r
2218private:\r
2219 EFI_IFR_STRING_REF2 *mStringRef2;\r
2220\r
2221public:\r
2222 CIfrStringRef2 (\r
2223 IN UINT32 LineNo\r
2224 ) : CIfrObj (EFI_IFR_STRING_REF2_OP, (CHAR8 **)&mStringRef2),\r
2225 CIfrOpHeader (EFI_IFR_STRING_REF2_OP, &mStringRef2->Header) {\r
2226 SetLineNo (LineNo);\r
2227 }\r
2228};\r
2229\r
2230class CIfrThis : public CIfrObj, public CIfrOpHeader {\r
2231private:\r
2232 EFI_IFR_THIS *mThis;\r
2233\r
2234public:\r
2235 CIfrThis (\r
2236 IN UINT32 LineNo\r
2237 ) : CIfrObj (EFI_IFR_THIS_OP, (CHAR8 **)&mThis),\r
2238 CIfrOpHeader (EFI_IFR_THIS_OP, &mThis->Header) {\r
2239 SetLineNo (LineNo);\r
2240 }\r
2241};\r
2242\r
a709adfa
LG
2243class CIfrSecurity : public CIfrObj, public CIfrOpHeader {\r
2244private:\r
2245 EFI_IFR_SECURITY *mSecurity;\r
2246\r
2247public:\r
2248 CIfrSecurity (\r
2249 IN UINT32 LineNo\r
2250 ) : CIfrObj (EFI_IFR_SECURITY_OP, (CHAR8 **)&mSecurity),\r
2251 CIfrOpHeader (EFI_IFR_SECURITY_OP, &mSecurity->Header) {\r
2252 SetLineNo (LineNo);\r
2253 memset (&mSecurity->Permissions, 0, sizeof (EFI_GUID));\r
2254 }\r
2255\r
2256 VOID SetPermissions (IN EFI_GUID *Permissions) {\r
f51461c8 2257 memmove (&mSecurity->Permissions, Permissions, sizeof (EFI_GUID));\r
a709adfa
LG
2258 }\r
2259};\r
2260\r
30fdf114
LG
2261class CIfrUint8 : public CIfrObj, public CIfrOpHeader {\r
2262private:\r
2263 EFI_IFR_UINT8 *mUint8;\r
2264\r
2265public:\r
2266 CIfrUint8 (\r
2267 IN UINT32 LineNo\r
2268 ) : CIfrObj (EFI_IFR_UINT8_OP, (CHAR8 **)&mUint8),\r
2269 CIfrOpHeader (EFI_IFR_UINT8_OP, &mUint8->Header) {\r
2270 SetLineNo (LineNo);\r
2271 }\r
2272\r
2273 VOID SetValue (IN UINT8 Value) {\r
2274 mUint8->Value = Value;\r
2275 }\r
2276};\r
2277\r
2278class CIfrUint16 : public CIfrObj, public CIfrOpHeader {\r
2279private:\r
2280 EFI_IFR_UINT16 *mUint16;\r
2281\r
2282public:\r
2283 CIfrUint16 (\r
2284 IN UINT32 LineNo\r
2285 ) : CIfrObj (EFI_IFR_UINT16_OP, (CHAR8 **)&mUint16),\r
2286 CIfrOpHeader (EFI_IFR_UINT16_OP, &mUint16->Header) {\r
2287 SetLineNo (LineNo);\r
2288 }\r
2289\r
2290 VOID SetValue (IN UINT16 Value) {\r
2291 mUint16->Value = Value;\r
2292 }\r
2293};\r
2294\r
2295class CIfrUint32 : public CIfrObj, public CIfrOpHeader {\r
2296private:\r
2297 EFI_IFR_UINT32 *mUint32;\r
2298\r
2299public:\r
2300 CIfrUint32 (\r
2301 IN UINT32 LineNo\r
2302 ) : CIfrObj (EFI_IFR_UINT32_OP, (CHAR8 **)&mUint32),\r
2303 CIfrOpHeader (EFI_IFR_UINT32_OP, &mUint32->Header) {\r
2304 SetLineNo (LineNo);\r
2305 }\r
2306\r
2307 VOID SetValue (IN UINT32 Value) {\r
2308 mUint32->Value = Value;\r
2309 }\r
2310};\r
2311\r
2312class CIfrUint64 : public CIfrObj, public CIfrOpHeader {\r
2313private:\r
2314 EFI_IFR_UINT64 *mUint64;\r
2315\r
2316public:\r
2317 CIfrUint64 (\r
2318 IN UINT32 LineNo\r
2319 ) : CIfrObj (EFI_IFR_UINT64_OP, (CHAR8 **)&mUint64),\r
2320 CIfrOpHeader (EFI_IFR_UINT64_OP, &mUint64->Header) {\r
2321 SetLineNo (LineNo);\r
2322 }\r
2323\r
2324 VOID SetValue (IN UINT64 Value) {\r
2325 mUint64->Value = Value;\r
2326 }\r
2327};\r
2328\r
2329class CIfrTrue : public CIfrObj, public CIfrOpHeader {\r
2330private:\r
2331 EFI_IFR_TRUE *mTrue;\r
2332\r
2333public:\r
2334 CIfrTrue (\r
2335 IN UINT32 LineNo\r
2336 ) : CIfrObj (EFI_IFR_TRUE_OP, (CHAR8 **)&mTrue),\r
2337 CIfrOpHeader (EFI_IFR_TRUE_OP, &mTrue->Header) {\r
2338 SetLineNo (LineNo);\r
2339 }\r
2340};\r
2341\r
2342class CIfrFalse : public CIfrObj, public CIfrOpHeader {\r
2343private:\r
2344 EFI_IFR_FALSE *mFalse;\r
2345\r
2346public:\r
2347 CIfrFalse (\r
2348 IN UINT32 LineNo\r
2349 ) : CIfrObj (EFI_IFR_FALSE_OP, (CHAR8 **)&mFalse),\r
2350 CIfrOpHeader (EFI_IFR_FALSE_OP, &mFalse->Header) {\r
2351 SetLineNo (LineNo);\r
2352 }\r
2353};\r
2354\r
2355class CIfrOne : public CIfrObj, public CIfrOpHeader {\r
2356private:\r
2357 EFI_IFR_ONE *mOne;\r
2358\r
2359public:\r
2360 CIfrOne (\r
2361 IN UINT32 LineNo\r
2362 ) : CIfrObj (EFI_IFR_ONE_OP, (CHAR8 **)&mOne),\r
2363 CIfrOpHeader (EFI_IFR_ONE_OP, &mOne->Header) {\r
2364 SetLineNo (LineNo);\r
2365 }\r
2366};\r
2367\r
2368class CIfrOnes : public CIfrObj, public CIfrOpHeader {\r
2369private:\r
2370 EFI_IFR_ONES *mOnes;\r
2371\r
2372public:\r
2373 CIfrOnes (\r
2374 IN UINT32 LineNo\r
2375 ) : CIfrObj (EFI_IFR_ONES_OP, (CHAR8 **)&mOnes),\r
2376 CIfrOpHeader (EFI_IFR_ONES_OP, &mOnes->Header) {\r
2377 SetLineNo (LineNo);\r
2378 }\r
2379};\r
2380\r
2381class CIfrZero : public CIfrObj, public CIfrOpHeader {\r
2382private:\r
2383 EFI_IFR_ZERO *mZero;\r
2384\r
2385public:\r
2386 CIfrZero (\r
2387 IN UINT32 LineNo\r
2388 ) : CIfrObj (EFI_IFR_ZERO_OP, (CHAR8 **)&mZero),\r
2389 CIfrOpHeader (EFI_IFR_ZERO_OP, &mZero->Header) {\r
2390 SetLineNo (LineNo);\r
2391 }\r
2392};\r
2393\r
2394class CIfrUndefined : public CIfrObj, public CIfrOpHeader {\r
2395private:\r
2396 EFI_IFR_UNDEFINED *mUndefined;\r
2397\r
2398public:\r
2399 CIfrUndefined (\r
2400 IN UINT32 LineNo\r
2401 ) : CIfrObj (EFI_IFR_UNDEFINED_OP, (CHAR8 **)&mUndefined),\r
2402 CIfrOpHeader (EFI_IFR_UNDEFINED_OP, &mUndefined->Header) {\r
2403 SetLineNo (LineNo);\r
2404 }\r
2405};\r
2406\r
2407class CIfrVersion : public CIfrObj, public CIfrOpHeader {\r
2408private:\r
2409 EFI_IFR_VERSION *mVersion;\r
2410\r
2411public:\r
2412 CIfrVersion (\r
2413 IN UINT32 LineNo\r
2414 ) : CIfrObj (EFI_IFR_VERSION_OP, (CHAR8 **)&mVersion),\r
2415 CIfrOpHeader (EFI_IFR_VERSION_OP, &mVersion->Header) {\r
2416 SetLineNo (LineNo);\r
2417 }\r
2418};\r
2419\r
2420class CIfrLength : public CIfrObj, public CIfrOpHeader {\r
2421private:\r
2422 EFI_IFR_LENGTH *mLength;\r
2423\r
2424public:\r
2425 CIfrLength (\r
2426 IN UINT32 LineNo\r
2427 ) : CIfrObj (EFI_IFR_LENGTH_OP, (CHAR8 **)&mLength),\r
2428 CIfrOpHeader (EFI_IFR_LENGTH_OP, &mLength->Header) {\r
2429 SetLineNo (LineNo);\r
2430 }\r
2431};\r
2432\r
2433class CIfrNot : public CIfrObj, public CIfrOpHeader {\r
2434private:\r
2435 EFI_IFR_NOT *mNot;\r
2436\r
2437public:\r
2438 CIfrNot (\r
2439 IN UINT32 LineNo\r
2440 ) : CIfrObj (EFI_IFR_NOT_OP, (CHAR8 **)&mNot),\r
2441 CIfrOpHeader (EFI_IFR_NOT_OP, &mNot->Header) {\r
2442 SetLineNo (LineNo);\r
2443 }\r
2444};\r
2445\r
2446class CIfrBitWiseNot : public CIfrObj, public CIfrOpHeader {\r
2447private:\r
2448 EFI_IFR_BITWISE_NOT *mBitWise;\r
2449\r
2450public:\r
2451 CIfrBitWiseNot (\r
2452 IN UINT32 LineNo\r
2453 ) : CIfrObj (EFI_IFR_BITWISE_NOT_OP, (CHAR8 **)&mBitWise),\r
2454 CIfrOpHeader (EFI_IFR_BITWISE_NOT_OP, &mBitWise->Header) {\r
2455 SetLineNo (LineNo);\r
2456 }\r
2457};\r
2458\r
2459class CIfrToBoolean : public CIfrObj, public CIfrOpHeader {\r
2460private:\r
2461 EFI_IFR_TO_BOOLEAN *mToBoolean;\r
2462\r
2463public:\r
2464 CIfrToBoolean (\r
2465 IN UINT32 LineNo\r
2466 ) : CIfrObj (EFI_IFR_TO_BOOLEAN_OP, (CHAR8 **)&mToBoolean),\r
2467 CIfrOpHeader (EFI_IFR_TO_BOOLEAN_OP, &mToBoolean->Header) {\r
2468 SetLineNo (LineNo);\r
2469 }\r
2470};\r
2471\r
2472class CIfrToString : public CIfrObj, public CIfrOpHeader {\r
2473private:\r
2474 EFI_IFR_TO_STRING *mToString;\r
2475\r
2476public:\r
2477 CIfrToString (\r
2478 IN UINT32 LineNo\r
2479 ) : CIfrObj (EFI_IFR_TO_STRING_OP, (CHAR8 **)&mToString),\r
2480 CIfrOpHeader (EFI_IFR_TO_STRING_OP, &mToString->Header) {\r
2481 SetLineNo (LineNo);\r
2482 }\r
2483\r
2484 VOID SetFormat (IN UINT8 Format) {\r
2485 mToString->Format = Format;\r
2486 }\r
2487};\r
2488\r
2489class CIfrToUint : public CIfrObj, public CIfrOpHeader {\r
2490private:\r
2491 EFI_IFR_TO_UINT *mToUint;\r
2492\r
2493public:\r
2494 CIfrToUint (\r
2495 IN UINT32 LineNo\r
2496 ) : CIfrObj (EFI_IFR_TO_UINT_OP, (CHAR8 **)&mToUint),\r
2497 CIfrOpHeader (EFI_IFR_TO_UINT_OP, &mToUint->Header) {\r
2498 SetLineNo (LineNo);\r
2499 }\r
2500};\r
2501\r
2502class CIfrToUpper : public CIfrObj, public CIfrOpHeader {\r
2503private:\r
2504 EFI_IFR_TO_UPPER *mToUpper;\r
2505\r
2506public:\r
2507 CIfrToUpper (\r
2508 IN UINT32 LineNo\r
2509 ) : CIfrObj (EFI_IFR_TO_UPPER_OP, (CHAR8 **)&mToUpper),\r
2510 CIfrOpHeader (EFI_IFR_TO_UPPER_OP, &mToUpper->Header) {\r
2511 SetLineNo (LineNo);\r
2512 }\r
2513};\r
2514\r
2515class CIfrToLower : public CIfrObj, public CIfrOpHeader {\r
2516private:\r
2517 EFI_IFR_TO_LOWER *mToLower;\r
2518\r
2519public:\r
2520 CIfrToLower (\r
2521 IN UINT32 LineNo\r
2522 ) : CIfrObj (EFI_IFR_TO_LOWER_OP, (CHAR8 **)&mToLower),\r
2523 CIfrOpHeader (EFI_IFR_TO_LOWER_OP, &mToLower->Header) {\r
2524 SetLineNo (LineNo);\r
2525 }\r
2526};\r
2527\r
2528class CIfrAdd : public CIfrObj, public CIfrOpHeader {\r
2529private:\r
2530 EFI_IFR_ADD *mAdd;\r
2531\r
2532public:\r
2533 CIfrAdd (\r
2534 IN UINT32 LineNo\r
2535 ) : CIfrObj (EFI_IFR_ADD_OP, (CHAR8 **)&mAdd),\r
2536 CIfrOpHeader (EFI_IFR_ADD_OP, &mAdd->Header) {\r
2537 SetLineNo (LineNo);\r
2538 }\r
2539};\r
2540\r
2541class CIfrBitWiseAnd : public CIfrObj, public CIfrOpHeader {\r
2542private:\r
2543 EFI_IFR_BITWISE_AND *mBitWiseAnd;\r
2544\r
2545public:\r
2546 CIfrBitWiseAnd (\r
2547 IN UINT32 LineNo\r
2548 ) : CIfrObj (EFI_IFR_BITWISE_AND_OP, (CHAR8 **)&mBitWiseAnd),\r
2549 CIfrOpHeader (EFI_IFR_BITWISE_AND_OP, &mBitWiseAnd->Header) {\r
2550 SetLineNo(LineNo);\r
2551 }\r
2552};\r
2553\r
2554class CIfrBitWiseOr : public CIfrObj, public CIfrOpHeader {\r
2555private:\r
2556 EFI_IFR_BITWISE_OR *mBitWiseOr;\r
2557\r
2558public:\r
2559 CIfrBitWiseOr (\r
2560 IN UINT32 LineNo\r
2561 ) : CIfrObj (EFI_IFR_BITWISE_OR_OP, (CHAR8 **)&mBitWiseOr),\r
2562 CIfrOpHeader (EFI_IFR_BITWISE_OR_OP, &mBitWiseOr->Header) {\r
2563 SetLineNo (LineNo);\r
2564 }\r
2565};\r
2566\r
2567class CIfrAnd : public CIfrObj, public CIfrOpHeader {\r
2568private:\r
2569 EFI_IFR_AND *mAnd;\r
2570\r
2571public:\r
2572 CIfrAnd (\r
2573 IN UINT32 LineNo\r
2574 ) : CIfrObj (EFI_IFR_AND_OP, (CHAR8 **)&mAnd),\r
2575 CIfrOpHeader (EFI_IFR_AND_OP, &mAnd->Header) {\r
2576 SetLineNo (LineNo);\r
2577 }\r
2578};\r
2579\r
2580class CIfrCatenate : public CIfrObj, public CIfrOpHeader {\r
2581private:\r
2582 EFI_IFR_CATENATE *mCatenate;\r
2583\r
2584public:\r
2585 CIfrCatenate (\r
2586 IN UINT32 LineNo\r
2587 ) : CIfrObj (EFI_IFR_CATENATE_OP, (CHAR8 **)&mCatenate),\r
2588 CIfrOpHeader (EFI_IFR_CATENATE_OP, &mCatenate->Header) {\r
2589 SetLineNo (LineNo);\r
2590 }\r
2591};\r
2592\r
2593class CIfrDivide : public CIfrObj, public CIfrOpHeader {\r
2594private:\r
2595 EFI_IFR_DIVIDE *mDivide;\r
2596\r
2597public:\r
2598 CIfrDivide (\r
2599 IN UINT32 LineNo\r
2600 ) : CIfrObj (EFI_IFR_DIVIDE_OP, (CHAR8 **)&mDivide),\r
2601 CIfrOpHeader (EFI_IFR_DIVIDE_OP, &mDivide->Header) {\r
2602 SetLineNo (LineNo);\r
2603 }\r
2604};\r
2605\r
2606class CIfrEqual : public CIfrObj, public CIfrOpHeader {\r
2607private:\r
2608 EFI_IFR_EQUAL *mEqual;\r
2609\r
2610public:\r
2611 CIfrEqual (\r
2612 IN UINT32 LineNo\r
2613 ) : CIfrObj (EFI_IFR_EQUAL_OP, (CHAR8 **)&mEqual),\r
2614 CIfrOpHeader (EFI_IFR_EQUAL_OP, &mEqual->Header) {\r
2615 SetLineNo (LineNo);\r
2616 }\r
2617};\r
2618\r
2619class CIfrGreaterEqual : public CIfrObj, public CIfrOpHeader {\r
2620private:\r
2621 EFI_IFR_GREATER_EQUAL *mGreaterEqual;\r
2622\r
2623public:\r
2624 CIfrGreaterEqual (\r
2625 IN UINT32 LineNo\r
2626 ) : CIfrObj (EFI_IFR_GREATER_EQUAL_OP, (CHAR8 **)&mGreaterEqual),\r
2627 CIfrOpHeader (EFI_IFR_GREATER_EQUAL_OP, &mGreaterEqual->Header) {\r
2628 SetLineNo (LineNo);\r
2629 }\r
2630};\r
2631\r
2632class CIfrGreaterThan : public CIfrObj, public CIfrOpHeader {\r
2633private:\r
2634 EFI_IFR_GREATER_THAN *mGreaterThan;\r
2635\r
2636public:\r
2637 CIfrGreaterThan (\r
2638 IN UINT32 LineNo\r
2639 ) : CIfrObj (EFI_IFR_GREATER_THAN_OP, (CHAR8 **)&mGreaterThan),\r
2640 CIfrOpHeader (EFI_IFR_GREATER_THAN_OP, &mGreaterThan->Header) {\r
2641 SetLineNo (LineNo);\r
2642 }\r
2643};\r
2644\r
2645class CIfrLessEqual : public CIfrObj, public CIfrOpHeader {\r
2646private:\r
2647 EFI_IFR_LESS_EQUAL *mLessEqual;\r
2648\r
2649public:\r
2650 CIfrLessEqual (\r
2651 IN UINT32 LineNo\r
2652 ) : CIfrObj (EFI_IFR_LESS_EQUAL_OP, (CHAR8 **)&mLessEqual),\r
2653 CIfrOpHeader (EFI_IFR_LESS_EQUAL_OP, &mLessEqual->Header) {\r
2654 SetLineNo (LineNo);\r
2655 }\r
2656};\r
2657\r
2658class CIfrLessThan : public CIfrObj, public CIfrOpHeader {\r
2659private:\r
2660 EFI_IFR_LESS_THAN *mLessThan;\r
2661\r
2662public:\r
2663 CIfrLessThan (\r
2664 IN UINT32 LineNo\r
2665 ) : CIfrObj (EFI_IFR_LESS_THAN_OP, (CHAR8 **)&mLessThan),\r
2666 CIfrOpHeader (EFI_IFR_LESS_THAN_OP, &mLessThan->Header) {\r
2667 SetLineNo (LineNo);\r
2668 }\r
2669};\r
2670\r
52302d4d
LG
2671class CIfrMap : public CIfrObj, public CIfrOpHeader{\r
2672private:\r
2673 EFI_IFR_MAP *mMap;\r
2674\r
2675public:\r
2676 CIfrMap (\r
2677 IN UINT32 LineNo \r
2678 ) : CIfrObj (EFI_IFR_MAP_OP, (CHAR8 **)&mMap),\r
2679 CIfrOpHeader (EFI_IFR_MAP_OP, &mMap->Header) {\r
2680 SetLineNo (LineNo);\r
2681 }\r
2682};\r
2683\r
30fdf114
LG
2684class CIfrMatch : public CIfrObj, public CIfrOpHeader {\r
2685private:\r
2686 EFI_IFR_MATCH *mMatch;\r
2687\r
2688public:\r
2689 CIfrMatch (\r
2690 IN UINT32 LineNo\r
2691 ) : CIfrObj (EFI_IFR_MATCH_OP, (CHAR8 **)&mMatch),\r
2692 CIfrOpHeader (EFI_IFR_MATCH_OP, &mMatch->Header) {\r
2693 SetLineNo (LineNo);\r
2694 }\r
2695};\r
2696\r
5d377616
ED
2697class CIfrMatch2 : public CIfrObj, public CIfrOpHeader {\r
2698private:\r
2699 EFI_IFR_MATCH2 *mMatch2;\r
2700\r
2701public:\r
2702 CIfrMatch2 (\r
2703 IN UINT32 LineNo,\r
2704 IN EFI_GUID *Guid\r
2705 ) : CIfrObj (EFI_IFR_MATCH2_OP, (CHAR8 **)&mMatch2),\r
2706 CIfrOpHeader (EFI_IFR_MATCH2_OP, &mMatch2->Header) {\r
2707 SetLineNo (LineNo);\r
2708 memmove (&mMatch2->SyntaxType, Guid, sizeof (EFI_GUID));\r
2709 }\r
2710};\r
2711\r
30fdf114
LG
2712class CIfrMultiply : public CIfrObj, public CIfrOpHeader {\r
2713private:\r
2714 EFI_IFR_MULTIPLY *mMultiply;\r
2715\r
2716public:\r
2717 CIfrMultiply (\r
2718 IN UINT32 LineNo\r
2719 ) : CIfrObj (EFI_IFR_MULTIPLY_OP, (CHAR8 **)&mMultiply),\r
2720 CIfrOpHeader (EFI_IFR_MULTIPLY_OP, &mMultiply->Header) {\r
2721 SetLineNo (LineNo);\r
2722 }\r
2723};\r
2724\r
2725class CIfrModulo : public CIfrObj, public CIfrOpHeader {\r
2726private:\r
2727 EFI_IFR_MODULO *mModulo;\r
2728\r
2729public:\r
2730 CIfrModulo (\r
2731 IN UINT32 LineNo\r
2732 ) : CIfrObj (EFI_IFR_MODULO_OP, (CHAR8 **)&mModulo),\r
2733 CIfrOpHeader (EFI_IFR_MODULO_OP, &mModulo->Header) {\r
2734 SetLineNo (LineNo);\r
2735 }\r
2736};\r
2737\r
2738class CIfrNotEqual : public CIfrObj, public CIfrOpHeader {\r
2739private:\r
2740 EFI_IFR_NOT_EQUAL *mNotEqual;\r
2741\r
2742public:\r
2743 CIfrNotEqual (\r
2744 IN UINT32 LineNo\r
2745 ) : CIfrObj (EFI_IFR_NOT_EQUAL_OP, (CHAR8 **)&mNotEqual),\r
2746 CIfrOpHeader (EFI_IFR_NOT_EQUAL_OP, &mNotEqual->Header) {\r
2747 SetLineNo (LineNo);\r
2748 }\r
2749};\r
2750\r
2751class CIfrOr : public CIfrObj, public CIfrOpHeader {\r
2752private:\r
2753 EFI_IFR_OR *mOr;\r
2754\r
2755public:\r
2756 CIfrOr (\r
2757 IN UINT32 LineNo\r
2758 ) : CIfrObj (EFI_IFR_OR_OP, (CHAR8 **)&mOr),\r
2759 CIfrOpHeader (EFI_IFR_OR_OP, &mOr->Header) {\r
2760 SetLineNo (LineNo);\r
2761 }\r
2762};\r
2763\r
2764class CIfrShiftLeft : public CIfrObj, public CIfrOpHeader {\r
2765private:\r
2766 EFI_IFR_SHIFT_LEFT *mShiftLeft;\r
2767\r
2768public:\r
2769 CIfrShiftLeft (\r
2770 IN UINT32 LineNo\r
2771 ) : CIfrObj (EFI_IFR_SHIFT_LEFT_OP, (CHAR8 **)&mShiftLeft),\r
2772 CIfrOpHeader (EFI_IFR_SHIFT_LEFT_OP, &mShiftLeft->Header) {\r
2773 SetLineNo (LineNo);\r
2774 }\r
2775};\r
2776\r
2777class CIfrShiftRight : public CIfrObj, public CIfrOpHeader {\r
2778private:\r
2779 EFI_IFR_SHIFT_RIGHT *mShiftRight;\r
2780\r
2781public:\r
2782 CIfrShiftRight (\r
2783 IN UINT32 LineNo\r
2784 ) : CIfrObj (EFI_IFR_SHIFT_RIGHT_OP, (CHAR8 **)&mShiftRight),\r
2785 CIfrOpHeader (EFI_IFR_SHIFT_RIGHT_OP, &mShiftRight->Header) {\r
2786 SetLineNo (LineNo);\r
2787 }\r
2788};\r
2789\r
2790class CIfrSubtract : public CIfrObj, public CIfrOpHeader {\r
2791private:\r
2792 EFI_IFR_SUBTRACT *mSubtract;\r
2793\r
2794public:\r
2795 CIfrSubtract (\r
2796 IN UINT32 LineNo\r
2797 ) : CIfrObj (EFI_IFR_SUBTRACT_OP, (CHAR8 **)&mSubtract),\r
2798 CIfrOpHeader (EFI_IFR_SUBTRACT_OP, &mSubtract->Header) {\r
2799 SetLineNo (LineNo);\r
2800 }\r
2801};\r
2802\r
2803class CIfrConditional : public CIfrObj, public CIfrOpHeader {\r
2804private:\r
2805 EFI_IFR_CONDITIONAL *mConditional;\r
2806\r
2807public:\r
2808 CIfrConditional (\r
2809 IN UINT32 LineNo\r
2810 ) : CIfrObj (EFI_IFR_CONDITIONAL_OP, (CHAR8 **)&mConditional),\r
2811 CIfrOpHeader (EFI_IFR_CONDITIONAL_OP, &mConditional->Header) {\r
2812 SetLineNo (LineNo);\r
2813 }\r
2814};\r
2815\r
2816class CIfrFind : public CIfrObj, public CIfrOpHeader {\r
2817private:\r
2818 EFI_IFR_FIND *mFind;\r
2819\r
2820public:\r
2821 CIfrFind (\r
2822 IN UINT32 LineNo\r
2823 ) : CIfrObj (EFI_IFR_FIND_OP, (CHAR8 **)&mFind),\r
2824 CIfrOpHeader (EFI_IFR_FIND_OP, &mFind->Header) {\r
2825 SetLineNo (LineNo);\r
2826 }\r
2827\r
2828 VOID SetFormat (IN UINT8 Format) {\r
2829 mFind->Format = Format;\r
2830 }\r
2831};\r
2832\r
2833class CIfrMid : public CIfrObj, public CIfrOpHeader {\r
2834private:\r
2835 EFI_IFR_MID *mMid;\r
2836\r
2837public:\r
2838 CIfrMid (\r
2839 IN UINT32 LineNo\r
2840 ) : CIfrObj (EFI_IFR_MID_OP, (CHAR8 **)&mMid),\r
2841 CIfrOpHeader (EFI_IFR_MID_OP, &mMid->Header) {\r
2842 SetLineNo (LineNo);\r
2843 }\r
2844};\r
2845\r
2846class CIfrToken : public CIfrObj, public CIfrOpHeader {\r
2847private:\r
2848 EFI_IFR_TOKEN *mToken;\r
2849\r
2850public:\r
2851 CIfrToken (\r
2852 IN UINT32 LineNo\r
2853 ) : CIfrObj (EFI_IFR_TOKEN_OP, (CHAR8 **)&mToken),\r
2854 CIfrOpHeader (EFI_IFR_TOKEN_OP, &mToken->Header) {\r
2855 SetLineNo (LineNo);\r
2856 }\r
2857};\r
2858\r
2859class CIfrSpan : public CIfrObj, public CIfrOpHeader {\r
2860private:\r
2861 EFI_IFR_SPAN *mSpan;\r
2862\r
2863public:\r
2864 CIfrSpan (\r
2865 IN UINT32 LineNo\r
2866 ) : CIfrObj (EFI_IFR_SPAN_OP, (CHAR8 **)&mSpan),\r
2867 CIfrOpHeader (EFI_IFR_SPAN_OP, &mSpan->Header) {\r
2868 SetLineNo (LineNo);\r
2869 mSpan->Flags = EFI_IFR_FLAGS_FIRST_MATCHING;\r
2870 }\r
2871\r
2872 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {\r
2873 if (_IS_EQUAL (LFlags, EFI_IFR_FLAGS_FIRST_MATCHING)) {\r
2874 mSpan->Flags |= EFI_IFR_FLAGS_FIRST_MATCHING;\r
2875 } else if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_FLAGS_FIRST_NON_MATCHING)) {\r
2876 mSpan->Flags |= EFI_IFR_FLAGS_FIRST_NON_MATCHING;\r
2877 }\r
2878\r
2879 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
2880 }\r
2881};\r
2882\r
2883#endif\r