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