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