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