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