]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/VfrCompile/VfrFormPkg.h
CryptoPkg: Fix GCC build break for BaseCryptLib.
[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
850 CIfrOpHeader (EFI_IFR_FORM_OP, &mImage->Header) {\r
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
1064 EFI_VFR_RETURN_CODE SetQuestionId (IN EFI_QUESTION_ID QuestionId) {\r
1065 if (QuestionId == EFI_QUESTION_ID_INVALID) {\r
1066 return VFR_RETURN_UNDEFINED;\r
1067 }\r
1068 mRef2->QuestionId = QuestionId;\r
1069 return VFR_RETURN_SUCCESS;\r
1070 }\r
1071};\r
1072\r
1073class CIfrRef3 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1074private:\r
1075 EFI_IFR_REF3 *mRef3;\r
1076\r
1077public:\r
1078 CIfrRef3 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef3, sizeof(EFI_IFR_REF3)),\r
1079 CIfrOpHeader (EFI_IFR_REF_OP, &mRef3->Header, sizeof (EFI_IFR_REF3)), \r
1080 CIfrQuestionHeader (&mRef3->Question) {\r
1081 mRef3->FormId = 0;\r
1082 mRef3->QuestionId = EFI_QUESTION_ID_INVALID;\r
1083 memset (&mRef3->FormSetId, 0, sizeof (EFI_GUID));\r
1084 }\r
1085\r
1086 VOID SetFormId (IN EFI_FORM_ID FormId) {\r
1087 mRef3->FormId = FormId;\r
1088 }\r
1089\r
1090 VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {\r
1091 mRef3->QuestionId = QuestionId;\r
1092 }\r
1093\r
1094 VOID SetFormSetId (IN EFI_GUID FormSetId) {\r
1095 mRef3->FormSetId = FormSetId;\r
1096 }\r
1097};\r
1098\r
1099class CIfrRef4 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1100private:\r
1101 EFI_IFR_REF4 *mRef4;\r
1102\r
1103public:\r
4234283c
LG
1104 CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef4, sizeof(EFI_IFR_REF4)),\r
1105 CIfrOpHeader (EFI_IFR_REF_OP, &mRef4->Header, sizeof(EFI_IFR_REF4)), \r
30fdf114
LG
1106 CIfrQuestionHeader (&mRef4->Question) {\r
1107 mRef4->FormId = 0;\r
1108 mRef4->QuestionId = EFI_QUESTION_ID_INVALID;\r
1109 memset (&mRef4->FormSetId, 0, sizeof (EFI_GUID));\r
1110 mRef4->DevicePath = EFI_STRING_ID_INVALID;\r
1111 }\r
1112\r
1113 VOID SetFormId (IN EFI_FORM_ID FormId) {\r
1114 mRef4->FormId = FormId;\r
1115 }\r
1116\r
1117 VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {\r
1118 mRef4->QuestionId = QuestionId;\r
1119 }\r
1120\r
1121 VOID SetFormSetId (IN EFI_GUID FormSetId) {\r
1122 mRef4->FormSetId = FormSetId;\r
1123 }\r
1124\r
1125 VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {\r
1126 mRef4->DevicePath = DevicePath;\r
1127 }\r
1128};\r
1129\r
4234283c
LG
1130class CIfrRef5 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1131private:\r
1132 EFI_IFR_REF5 *mRef5;\r
1133\r
1134public:\r
1135 CIfrRef5 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef5, sizeof (EFI_IFR_REF5)),\r
1136 CIfrOpHeader (EFI_IFR_REF_OP, &mRef5->Header, sizeof (EFI_IFR_REF5)), \r
1137 CIfrQuestionHeader (&mRef5->Question) {\r
1138 }\r
1139};\r
1140\r
30fdf114
LG
1141class CIfrResetButton : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {\r
1142private:\r
1143 EFI_IFR_RESET_BUTTON *mResetButton;\r
1144\r
1145public:\r
1146 CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP, (CHAR8 **)&mResetButton),\r
1147 CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP, &mResetButton->Header), \r
fd171542 1148 CIfrStatementHeader (&mResetButton->Statement) {\r
30fdf114
LG
1149 mResetButton->DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
1150 }\r
1151\r
1152 VOID SetDefaultId (IN UINT16 DefaultId) {\r
1153 mResetButton->DefaultId = DefaultId;\r
1154 }\r
1155};\r
1156\r
1157class CIfrCheckBox : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1158private:\r
1159 EFI_IFR_CHECKBOX *mCheckBox;\r
1160\r
1161public:\r
1162 CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP, (CHAR8 **)&mCheckBox),\r
1163 CIfrOpHeader (EFI_IFR_CHECKBOX_OP, &mCheckBox->Header), \r
1164 CIfrQuestionHeader (&mCheckBox->Question) {\r
1165 mCheckBox->Flags = 0;\r
fd171542 1166 gCurrentQuestion = this;\r
30fdf114
LG
1167 }\r
1168\r
1169 ~CIfrCheckBox () {\r
fd171542 1170 gCurrentQuestion = NULL;\r
30fdf114
LG
1171 }\r
1172\r
1173 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, UINT8 LFlags) {\r
1174 EFI_VFR_RETURN_CODE Ret;\r
1175\r
1176 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1177 if (Ret != VFR_RETURN_SUCCESS) {\r
1178 return Ret;\r
1179 }\r
1180\r
1181 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_CHECKBOX_DEFAULT)) {\r
1182 mCheckBox->Flags |= EFI_IFR_CHECKBOX_DEFAULT;\r
1183 }\r
1184\r
1185 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_CHECKBOX_DEFAULT_MFG)) {\r
1186 mCheckBox->Flags |= EFI_IFR_CHECKBOX_DEFAULT_MFG;\r
1187 }\r
1188\r
1189 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1190 }\r
1191\r
1192 UINT8 GetFlags (VOID) {\r
1193 return mCheckBox->Flags;\r
1194 }\r
1195};\r
1196\r
1197class CIfrAction : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1198private:\r
1199 EFI_IFR_ACTION *mAction;\r
1200\r
1201public:\r
1202 CIfrAction () : CIfrObj (EFI_IFR_ACTION_OP, (CHAR8 **)&mAction),\r
1203 CIfrOpHeader (EFI_IFR_ACTION_OP, &mAction->Header), \r
1204 CIfrQuestionHeader (&mAction->Question) {\r
1205 mAction->QuestionConfig = EFI_STRING_ID_INVALID;\r
1206 }\r
1207\r
1208 VOID SetQuestionConfig (IN EFI_STRING_ID QuestionConfig) {\r
1209 mAction->QuestionConfig = QuestionConfig;\r
1210 }\r
1211};\r
1212\r
1213class CIfrDate : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1214private:\r
1215 EFI_IFR_DATE *mDate;\r
1216\r
1217public:\r
1218 CIfrDate () : CIfrObj (EFI_IFR_DATE_OP, (CHAR8 **)&mDate),\r
1219 CIfrOpHeader (EFI_IFR_DATE_OP, &mDate->Header),\r
1220 CIfrQuestionHeader (&mDate->Question) {\r
1221 mDate->Flags = 0;\r
1222 }\r
1223\r
1224 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1225 EFI_VFR_RETURN_CODE Ret;\r
1226\r
1227 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1228 if (Ret != VFR_RETURN_SUCCESS) {\r
1229 return Ret;\r
1230 }\r
1231\r
1232 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_YEAR_SUPPRESS)) {\r
1233 mDate->Flags |= EFI_QF_DATE_YEAR_SUPPRESS;\r
1234 }\r
1235\r
1236 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_MONTH_SUPPRESS)) {\r
1237 mDate->Flags |= EFI_QF_DATE_MONTH_SUPPRESS;\r
1238 }\r
1239\r
1240 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_DAY_SUPPRESS)) {\r
1241 mDate->Flags |= EFI_QF_DATE_DAY_SUPPRESS;\r
1242 }\r
1243\r
1244 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_NORMAL)) {\r
1245 mDate->Flags |= QF_DATE_STORAGE_NORMAL;\r
1246 } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_TIME)) {\r
1247 mDate->Flags |= QF_DATE_STORAGE_TIME;\r
1248 } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_WAKEUP)) {\r
1249 mDate->Flags |= QF_DATE_STORAGE_WAKEUP;\r
1250 }\r
1251\r
1252 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1253 }\r
1254};\r
1255\r
1256class CIfrNumeric : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader, public CIfrMinMaxStepData {\r
1257private:\r
1258 EFI_IFR_NUMERIC *mNumeric;\r
1259\r
1260public:\r
1261 CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP, (CHAR8 **)&mNumeric),\r
1262 CIfrOpHeader (EFI_IFR_NUMERIC_OP, &mNumeric->Header),\r
1263 CIfrQuestionHeader (&mNumeric->Question),\r
a709adfa 1264 CIfrMinMaxStepData (&mNumeric->data, TRUE) {\r
30fdf114 1265 mNumeric->Flags = EFI_IFR_NUMERIC_SIZE_1 | EFI_IFR_DISPLAY_UINT_DEC;\r
a709adfa
LG
1266 gCurrentQuestion = this;\r
1267 gCurrentMinMaxData = this;\r
30fdf114
LG
1268 }\r
1269\r
1270 ~CIfrNumeric () {\r
a709adfa
LG
1271 gCurrentQuestion = NULL;\r
1272 gCurrentMinMaxData = NULL;\r
30fdf114
LG
1273 }\r
1274\r
1275 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1276 EFI_VFR_RETURN_CODE Ret;\r
1277\r
1278 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1279 if (Ret != VFR_RETURN_SUCCESS) {\r
1280 return Ret;\r
1281 }\r
1282\r
1283 if (LFlags & EFI_IFR_DISPLAY) {\r
1284 mNumeric->Flags = LFlags;\r
1285 } else {\r
1286 mNumeric->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;\r
1287 }\r
1288 return VFR_RETURN_SUCCESS;\r
1289 }\r
1290};\r
1291\r
1292class CIfrOneOf : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader, public CIfrMinMaxStepData {\r
1293private:\r
1294 EFI_IFR_ONE_OF *mOneOf;\r
1295\r
1296public:\r
1297 CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP, (CHAR8 **)&mOneOf),\r
1298 CIfrOpHeader (EFI_IFR_ONE_OF_OP, &mOneOf->Header),\r
1299 CIfrQuestionHeader (&mOneOf->Question),\r
1300 CIfrMinMaxStepData (&mOneOf->data) {\r
1301 mOneOf->Flags = 0;\r
a709adfa
LG
1302 gCurrentQuestion = this;\r
1303 gCurrentMinMaxData = this;\r
30fdf114
LG
1304 }\r
1305\r
1306 ~CIfrOneOf () {\r
a709adfa
LG
1307 gCurrentQuestion = NULL;\r
1308 gCurrentMinMaxData = NULL;\r
30fdf114
LG
1309 }\r
1310\r
1311 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1312 EFI_VFR_RETURN_CODE Ret;\r
1313\r
1314 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1315 if (Ret != VFR_RETURN_SUCCESS) {\r
1316 return Ret;\r
1317 }\r
1318\r
1319 if (LFlags & EFI_IFR_DISPLAY) {\r
1320 mOneOf->Flags = LFlags;\r
1321 } else {\r
1322 mOneOf->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;\r
1323 }\r
1324 return VFR_RETURN_SUCCESS;\r
1325 }\r
1326};\r
1327\r
1328class CIfrString : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1329private:\r
1330 EFI_IFR_STRING *mString;\r
1331\r
1332public:\r
1333 CIfrString () : CIfrObj (EFI_IFR_STRING_OP, (CHAR8 **)&mString),\r
1334 CIfrOpHeader (EFI_IFR_STRING_OP, &mString->Header),\r
1335 CIfrQuestionHeader (&mString->Question) {\r
1336 mString->Flags = 0;\r
1337 mString->MinSize = 0;\r
1338 mString->MaxSize = 0;\r
1339 gCurrentQuestion = this;\r
1340 }\r
1341\r
1342 ~CIfrString () {\r
1343 gCurrentQuestion = NULL;\r
1344 }\r
1345\r
1346 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1347 EFI_VFR_RETURN_CODE Ret;\r
1348\r
1349 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1350 if (Ret != VFR_RETURN_SUCCESS) {\r
1351 return Ret;\r
1352 }\r
1353\r
1354 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_STRING_MULTI_LINE)) {\r
1355 mString->Flags |= EFI_IFR_STRING_MULTI_LINE;\r
1356 }\r
1357\r
1358 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1359 }\r
1360\r
1361 VOID SetMinSize (IN UINT8 Flags) {\r
1362 mString->MinSize = Flags;\r
1363 }\r
1364\r
1365 VOID SetMaxSize (IN UINT8 MaxSize) {\r
1366 mString->MaxSize = MaxSize;\r
1367 }\r
1368};\r
1369\r
1370class CIfrPassword : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1371private:\r
1372 EFI_IFR_PASSWORD *mPassword;\r
1373\r
1374public:\r
1375 CIfrPassword () : CIfrObj (EFI_IFR_PASSWORD_OP, (CHAR8 **)&mPassword),\r
1376 CIfrOpHeader (EFI_IFR_PASSWORD_OP, &mPassword->Header),\r
1377 CIfrQuestionHeader (&mPassword->Question) {\r
1378 mPassword->MinSize = 0;\r
1379 mPassword->MaxSize = 0;\r
1380 gCurrentQuestion = this;\r
1381 }\r
1382\r
1383 ~CIfrPassword () {\r
1384 gCurrentQuestion = NULL;\r
1385 }\r
1386\r
1387 VOID SetMinSize (IN UINT16 MinSize) {\r
1388 mPassword->MinSize = MinSize;\r
1389 }\r
1390\r
1391 VOID SetMaxSize (IN UINT16 MaxSize) {\r
1392 mPassword->MaxSize = MaxSize;\r
1393 }\r
1394};\r
1395\r
1396class CIfrOrderedList : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1397private:\r
1398 EFI_IFR_ORDERED_LIST *mOrderedList;\r
1399\r
1400public:\r
1401 CIfrOrderedList () : CIfrObj (EFI_IFR_ORDERED_LIST_OP, (CHAR8 **)&mOrderedList),\r
1402 CIfrOpHeader (EFI_IFR_ORDERED_LIST_OP, &mOrderedList->Header),\r
1403 CIfrQuestionHeader (&mOrderedList->Question) {\r
1404 mOrderedList->MaxContainers = 0;\r
1405 mOrderedList->Flags = 0;\r
1406 gCurrentQuestion = this;\r
1407 }\r
1408\r
1409 ~CIfrOrderedList () {\r
1410 gCurrentQuestion = NULL;\r
1411 }\r
1412\r
1413 VOID SetMaxContainers (IN UINT8 MaxContainers) {\r
1414 mOrderedList->MaxContainers = MaxContainers;\r
1415 }\r
1416\r
1417 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1418 EFI_VFR_RETURN_CODE Ret;\r
1419\r
1420 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1421 if (Ret != VFR_RETURN_SUCCESS) {\r
1422 return Ret;\r
1423 }\r
1424\r
1425 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_UNIQUE_SET)) {\r
1426 mOrderedList->Flags |= EFI_IFR_UNIQUE_SET;\r
1427 }\r
1428\r
1429 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_NO_EMPTY_SET)) {\r
1430 mOrderedList->Flags |= EFI_IFR_NO_EMPTY_SET;\r
1431 }\r
1432\r
1433 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1434 }\r
1435};\r
1436\r
1437class CIfrTime : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
1438private:\r
1439 EFI_IFR_TIME *mTime;\r
1440\r
1441public:\r
1442 CIfrTime () : CIfrObj (EFI_IFR_TIME_OP, (CHAR8 **)&mTime),\r
1443 CIfrOpHeader (EFI_IFR_TIME_OP, &mTime->Header),\r
1444 CIfrQuestionHeader (&mTime->Question) {\r
1445 mTime->Flags = 0;\r
1446 }\r
1447\r
1448 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
1449 EFI_VFR_RETURN_CODE Ret;\r
1450\r
1451 Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
1452 if (Ret != VFR_RETURN_SUCCESS) {\r
1453 return Ret;\r
1454 }\r
1455\r
1456 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_HOUR_SUPPRESS)) {\r
1457 mTime->Flags |= QF_TIME_HOUR_SUPPRESS;\r
1458 }\r
1459\r
1460 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_MINUTE_SUPPRESS)) {\r
1461 mTime->Flags |= QF_TIME_MINUTE_SUPPRESS;\r
1462 }\r
1463\r
1464 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_SECOND_SUPPRESS)) {\r
1465 mTime->Flags |= QF_TIME_SECOND_SUPPRESS;\r
1466 }\r
1467\r
1468 if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_NORMAL)) {\r
1469 mTime->Flags |= QF_TIME_STORAGE_NORMAL;\r
1470 } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_TIME)) {\r
1471 mTime->Flags |= QF_TIME_STORAGE_TIME;\r
1472 } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_WAKEUP)) {\r
1473 mTime->Flags |= QF_TIME_STORAGE_WAKEUP;\r
1474 }\r
1475\r
1476 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1477 }\r
1478};\r
1479\r
1480class CIfrDisableIf : public CIfrObj, public CIfrOpHeader {\r
1481private:\r
1482 EFI_IFR_DISABLE_IF *mDisableIf;\r
1483\r
1484public:\r
1485 CIfrDisableIf () : CIfrObj (EFI_IFR_DISABLE_IF_OP, (CHAR8 **)&mDisableIf),\r
1486 mDisableIf ((EFI_IFR_DISABLE_IF *) GetObjBinAddr()),\r
1487 CIfrOpHeader (EFI_IFR_DISABLE_IF_OP, &mDisableIf->Header) {}\r
1488};\r
1489\r
1490class CIfrSuppressIf : public CIfrObj, public CIfrOpHeader {\r
1491private:\r
1492 EFI_IFR_SUPPRESS_IF *mSuppressIf;\r
1493\r
1494public:\r
1495 CIfrSuppressIf () : CIfrObj (EFI_IFR_SUPPRESS_IF_OP, (CHAR8 **)&mSuppressIf),\r
1496 CIfrOpHeader (EFI_IFR_SUPPRESS_IF_OP, &mSuppressIf->Header) {}\r
1497};\r
1498\r
1499class CIfrGrayOutIf : public CIfrObj, public CIfrOpHeader {\r
1500private:\r
1501 EFI_IFR_GRAY_OUT_IF *mGrayOutIf;\r
1502\r
1503public:\r
1504 CIfrGrayOutIf () : CIfrObj (EFI_IFR_GRAY_OUT_IF_OP, (CHAR8 **)&mGrayOutIf),\r
1505 CIfrOpHeader (EFI_IFR_GRAY_OUT_IF_OP, &mGrayOutIf->Header) {}\r
1506};\r
1507\r
1508class CIfrInconsistentIf : public CIfrObj, public CIfrOpHeader {\r
1509private:\r
1510 EFI_IFR_INCONSISTENT_IF *mInconsistentIf;\r
1511\r
1512public:\r
1513 CIfrInconsistentIf () : CIfrObj (EFI_IFR_INCONSISTENT_IF_OP, (CHAR8 **)&mInconsistentIf),\r
1514 CIfrOpHeader (EFI_IFR_INCONSISTENT_IF_OP, &mInconsistentIf->Header) {\r
1515 mInconsistentIf->Error = EFI_STRING_ID_INVALID;\r
1516 }\r
1517\r
1518 VOID SetError (IN EFI_STRING_ID Error) {\r
1519 mInconsistentIf->Error = Error;\r
1520 }\r
1521};\r
1522\r
1523class CIfrNoSubmitIf : public CIfrObj, public CIfrOpHeader {\r
1524private:\r
1525 EFI_IFR_NO_SUBMIT_IF *mNoSubmitIf;\r
1526\r
1527public:\r
1528 CIfrNoSubmitIf () : CIfrObj (EFI_IFR_NO_SUBMIT_IF_OP, (CHAR8 **)&mNoSubmitIf),\r
1529 CIfrOpHeader (EFI_IFR_NO_SUBMIT_IF_OP, &mNoSubmitIf->Header) {\r
1530 mNoSubmitIf->Error = EFI_STRING_ID_INVALID;\r
1531 }\r
1532\r
1533 VOID SetError (IN EFI_STRING_ID Error) {\r
1534 mNoSubmitIf->Error = Error;\r
1535 }\r
1536};\r
1537\r
1538class CIfrRefresh : public CIfrObj, public CIfrOpHeader {\r
1539private:\r
1540 EFI_IFR_REFRESH *mRefresh;\r
1541\r
1542public:\r
1543 CIfrRefresh () : CIfrObj (EFI_IFR_REFRESH_OP, (CHAR8 **)&mRefresh),\r
1544 CIfrOpHeader (EFI_IFR_REFRESH_OP, &mRefresh->Header) {\r
1545 mRefresh->RefreshInterval = 0;\r
1546 }\r
1547\r
1548 VOID SetRefreshInterval (IN UINT8 RefreshInterval) {\r
1549 mRefresh->RefreshInterval = RefreshInterval;\r
1550 }\r
1551};\r
1552\r
4234283c
LG
1553class CIfrRefreshId : public CIfrObj, public CIfrOpHeader {\r
1554private:\r
1555 EFI_IFR_REFRESH_ID *mRefreshId;\r
1556\r
1557public:\r
1558 CIfrRefreshId () : CIfrObj (EFI_IFR_REFRESH_ID_OP, (CHAR8 **)&mRefreshId),\r
1559 CIfrOpHeader (EFI_IFR_REFRESH_ID_OP, &mRefreshId->Header) {\r
1560 memset (&mRefreshId->RefreshEventGroupId, 0, sizeof (EFI_GUID));\r
1561 }\r
1562\r
1563 VOID SetRefreshEventGroutId (IN EFI_GUID *RefreshEventGroupId) {\r
1564 memcpy (&mRefreshId->RefreshEventGroupId, RefreshEventGroupId, sizeof (EFI_GUID));\r
1565 }\r
1566};\r
1567\r
30fdf114
LG
1568class CIfrVarStoreDevice : public CIfrObj, public CIfrOpHeader {\r
1569private:\r
1570 EFI_IFR_VARSTORE_DEVICE *mVarStoreDevice;\r
1571\r
1572public:\r
1573 CIfrVarStoreDevice () : CIfrObj (EFI_IFR_VARSTORE_DEVICE_OP, (CHAR8 **)&mVarStoreDevice),\r
1574 CIfrOpHeader (EFI_IFR_VARSTORE_DEVICE_OP, &mVarStoreDevice->Header) {\r
1575 mVarStoreDevice->DevicePath = EFI_STRING_ID_INVALID;\r
1576 }\r
1577\r
1578 VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {\r
1579 mVarStoreDevice->DevicePath = DevicePath;\r
1580 }\r
1581};\r
1582\r
1583class CIfrOneOfOption : public CIfrObj, public CIfrOpHeader {\r
1584private:\r
1585 EFI_IFR_ONE_OF_OPTION *mOneOfOption;\r
1586\r
1587public:\r
1588 CIfrOneOfOption () : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP, (CHAR8 **)&mOneOfOption),\r
1589 CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP, &mOneOfOption->Header) {\r
1590 mOneOfOption->Flags = 0;\r
1591 mOneOfOption->Option = EFI_STRING_ID_INVALID;\r
1592 mOneOfOption->Type = EFI_IFR_TYPE_OTHER;\r
1593 memset (&mOneOfOption->Value, 0, sizeof (mOneOfOption->Value));\r
1594 }\r
1595\r
1596 VOID SetOption (IN EFI_STRING_ID Option) {\r
1597 mOneOfOption->Option = Option;\r
1598 }\r
1599\r
1600 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {\r
1601 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT)) {\r
1602 mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT;\r
1603 }\r
1604\r
1605 if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT_MFG)) {\r
1606 mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT_MFG;\r
1607 }\r
1608\r
1609 if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_8)) {\r
1610 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_8);\r
1611 mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_8;\r
1612 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_16)) {\r
1613 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_16);\r
1614 mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_16;\r
1615 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_32)) {\r
1616 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_32);\r
1617 mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_32;\r
1618 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_64)) {\r
1619 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_64);\r
1620 mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_64;\r
1621 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_BOOLEAN)) {\r
1622 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_BOOLEAN);\r
1623 mOneOfOption->Flags |= EFI_IFR_TYPE_BOOLEAN;\r
1624 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_TIME)) {\r
1625 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_TIME);\r
1626 mOneOfOption->Flags |= EFI_IFR_TYPE_TIME;\r
1627 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_DATE)) {\r
1628 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_DATE);\r
1629 mOneOfOption->Flags |= EFI_IFR_TYPE_DATE;\r
1630 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_STRING)) {\r
1631 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_STRING);\r
1632 mOneOfOption->Flags |= EFI_IFR_TYPE_STRING;\r
1633 } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_OTHER)) {\r
1634 _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_OTHER);\r
1635 mOneOfOption->Flags |= EFI_IFR_TYPE_OTHER;\r
1636 }\r
1637\r
1638 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
1639 }\r
1640\r
1641 VOID SetType (IN UINT8 Type) {\r
1642 mOneOfOption->Type = Type;\r
1643 }\r
1644\r
1645 VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {\r
1646 mOneOfOption->Value = Value;\r
1647 }\r
1648\r
1649 UINT8 GetFlags (VOID) {\r
1650 return mOneOfOption->Flags;\r
1651 }\r
1652};\r
1653\r
1654static EFI_GUID IfrTianoGuid = EFI_IFR_TIANO_GUID;\r
1655static EFI_GUID IfrFrameworkGuid = EFI_IFR_FRAMEWORK_GUID;\r
1656\r
1657class CIfrClass : public CIfrObj, public CIfrOpHeader {\r
1658private:\r
1659 EFI_IFR_GUID_CLASS *mClass;\r
1660\r
1661public:\r
1662 CIfrClass () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mClass, sizeof (EFI_IFR_GUID_CLASS)),\r
1663 CIfrOpHeader (EFI_IFR_GUID_OP, &mClass->Header, sizeof (EFI_IFR_GUID_CLASS)) {\r
1664 mClass->ExtendOpCode = EFI_IFR_EXTEND_OP_CLASS;\r
1665 mClass->Guid = IfrTianoGuid;\r
1666 mClass->Class = EFI_NON_DEVICE_CLASS;\r
1667 }\r
1668\r
1669 VOID SetClass (IN UINT16 Class) {\r
1670 mClass->Class = Class;\r
1671 }\r
1672};\r
1673\r
1674class CIfrSubClass : public CIfrObj, public CIfrOpHeader {\r
1675private:\r
1676 EFI_IFR_GUID_SUBCLASS *mSubClass;\r
1677\r
1678public:\r
1679 CIfrSubClass () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mSubClass, sizeof (EFI_IFR_GUID_SUBCLASS)),\r
1680 CIfrOpHeader (EFI_IFR_GUID_OP, &mSubClass->Header, sizeof (EFI_IFR_GUID_SUBCLASS)) {\r
1681 mSubClass->ExtendOpCode = EFI_IFR_EXTEND_OP_SUBCLASS;\r
1682 mSubClass->Guid = IfrTianoGuid;\r
1683 mSubClass->SubClass = EFI_SETUP_APPLICATION_SUBCLASS;\r
1684 }\r
1685\r
1686 VOID SetSubClass (IN UINT16 SubClass) {\r
1687 mSubClass->SubClass = SubClass;\r
1688 }\r
1689};\r
1690\r
1691class CIfrLabel : public CIfrObj, public CIfrOpHeader {\r
1692private:\r
1693 EFI_IFR_GUID_LABEL *mLabel;\r
1694\r
1695public:\r
1696 CIfrLabel () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mLabel, sizeof (EFI_IFR_GUID_LABEL)),\r
1697 CIfrOpHeader (EFI_IFR_GUID_OP, &mLabel->Header, sizeof (EFI_IFR_GUID_LABEL)) {\r
1698 mLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
1699 mLabel->Guid = IfrTianoGuid;\r
1700 }\r
1701\r
1702 VOID SetNumber (IN UINT16 Number) {\r
1703 mLabel->Number = Number;\r
1704 }\r
1705};\r
1706\r
1707class CIfrBanner : public CIfrObj, public CIfrOpHeader {\r
1708private:\r
1709 EFI_IFR_GUID_BANNER *mBanner;\r
1710\r
1711public:\r
1712 CIfrBanner () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mBanner, sizeof (EFI_IFR_GUID_BANNER)),\r
1713 CIfrOpHeader (EFI_IFR_GUID_OP, &mBanner->Header, sizeof (EFI_IFR_GUID_BANNER)) {\r
1714 mBanner->ExtendOpCode = EFI_IFR_EXTEND_OP_BANNER;\r
1715 mBanner->Guid = IfrTianoGuid;\r
1716 }\r
1717\r
1718 VOID SetTitle (IN EFI_STRING_ID StringId) {\r
1719 mBanner->Title = StringId;\r
1720 }\r
1721\r
1722 VOID SetLine (IN UINT16 Line) {\r
1723 mBanner->LineNumber = Line;\r
1724 }\r
1725\r
1726 VOID SetAlign (IN UINT8 Align) {\r
1727 mBanner->Alignment = Align;\r
1728 }\r
1729};\r
1730\r
1731class CIfrOptionKey : public CIfrObj, public CIfrOpHeader {\r
1732private:\r
1733 EFI_IFR_GUID_OPTIONKEY *mOptionKey;\r
1734\r
1735public:\r
1736 CIfrOptionKey (\r
1737 IN EFI_QUESTION_ID QuestionId,\r
1738 IN EFI_IFR_TYPE_VALUE &OptionValue,\r
1739 IN EFI_QUESTION_ID KeyValue\r
1740 ) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mOptionKey, sizeof (EFI_IFR_GUID_OPTIONKEY)),\r
1741 CIfrOpHeader (EFI_IFR_GUID_OP, &mOptionKey->Header, sizeof (EFI_IFR_GUID_OPTIONKEY)) {\r
1742 mOptionKey->ExtendOpCode = EFI_IFR_EXTEND_OP_OPTIONKEY;\r
1743 mOptionKey->Guid = IfrFrameworkGuid;\r
1744 mOptionKey->QuestionId = QuestionId;\r
1745 mOptionKey->OptionValue = OptionValue;\r
1746 mOptionKey->KeyValue = KeyValue;\r
1747 }\r
1748};\r
1749\r
1750class CIfrVarEqName : public CIfrObj, public CIfrOpHeader {\r
1751private:\r
1752 EFI_IFR_GUID_VAREQNAME *mVarEqName;\r
1753\r
1754public:\r
1755 CIfrVarEqName (\r
1756 IN EFI_QUESTION_ID QuestionId,\r
1757 IN EFI_STRING_ID NameId\r
1758 ) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mVarEqName, sizeof (EFI_IFR_GUID_VAREQNAME)),\r
1759 CIfrOpHeader (EFI_IFR_GUID_OP, &mVarEqName->Header, sizeof (EFI_IFR_GUID_VAREQNAME)) {\r
1760 mVarEqName->ExtendOpCode = EFI_IFR_EXTEND_OP_VAREQNAME;\r
1761 mVarEqName->Guid = IfrFrameworkGuid;\r
1762 mVarEqName->QuestionId = QuestionId;\r
1763 mVarEqName->NameId = NameId;\r
1764 }\r
1765};\r
1766\r
1767class CIfrTimeout : public CIfrObj, public CIfrOpHeader {\r
1768private:\r
1769 EFI_IFR_GUID_TIMEOUT *mTimeout;\r
1770\r
1771public:\r
1772 CIfrTimeout (IN UINT16 Timeout = 0) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mTimeout, sizeof (EFI_IFR_GUID_TIMEOUT)),\r
1773 CIfrOpHeader (EFI_IFR_GUID_OP, &mTimeout->Header, sizeof (EFI_IFR_GUID_TIMEOUT)) {\r
1774 mTimeout->ExtendOpCode = EFI_IFR_EXTEND_OP_TIMEOUT;\r
1775 mTimeout->Guid = IfrTianoGuid;\r
1776 mTimeout->TimeOut = Timeout;\r
1777 }\r
1778\r
1779 VOID SetTimeout (IN UINT16 Timeout) {\r
1780 mTimeout->TimeOut = Timeout;\r
1781 }\r
1782};\r
1783\r
da92f276
LG
1784class CIfrGuid : public CIfrObj, public CIfrOpHeader {\r
1785private:\r
1786 EFI_IFR_GUID *mGuid;\r
1787\r
1788public:\r
1789 CIfrGuid (UINT8 Size) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mGuid, sizeof (EFI_IFR_GUID)+Size),\r
1790 CIfrOpHeader (EFI_IFR_GUID_OP, &mGuid->Header, sizeof (EFI_IFR_GUID)+Size) {\r
1791 memset (&mGuid->Guid, 0, sizeof (EFI_GUID));\r
1792 }\r
1793\r
1794 VOID SetGuid (IN EFI_GUID *Guid) {\r
1795 memcpy (&mGuid->Guid, Guid, sizeof (EFI_GUID));\r
1796 }\r
1797\r
1798 VOID SetData (IN UINT8* DataBuff, IN UINT8 Size) {\r
1799 memcpy ((UINT8 *)mGuid + sizeof (EFI_IFR_GUID), DataBuff, Size);\r
1800 }\r
1801};\r
1802\r
30fdf114
LG
1803class CIfrDup : public CIfrObj, public CIfrOpHeader {\r
1804private:\r
1805 EFI_IFR_DUP *mDup;\r
1806\r
1807public:\r
1808 CIfrDup (\r
1809 IN UINT32 LineNo\r
1810 ) : CIfrObj (EFI_IFR_DUP_OP, (CHAR8 **)&mDup),\r
1811 CIfrOpHeader (EFI_IFR_DUP_OP, &mDup->Header) {\r
1812 SetLineNo (LineNo);\r
1813 }\r
1814};\r
1815\r
1816class CIfrEqIdId : public CIfrObj, public CIfrOpHeader {\r
1817private:\r
1818 EFI_IFR_EQ_ID_ID *mEqIdId;\r
1819\r
1820public:\r
1821 CIfrEqIdId (\r
1822 IN UINT32 LineNo\r
1823 ) : CIfrObj (EFI_IFR_EQ_ID_ID_OP, (CHAR8 **)&mEqIdId),\r
1824 CIfrOpHeader (EFI_IFR_EQ_ID_ID_OP, &mEqIdId->Header) {\r
1825 SetLineNo (LineNo);\r
1826 mEqIdId->QuestionId1 = EFI_QUESTION_ID_INVALID;\r
1827 mEqIdId->QuestionId2 = EFI_QUESTION_ID_INVALID;\r
1828 }\r
1829\r
1830 VOID SetQuestionId1 (\r
1831 IN EFI_QUESTION_ID QuestionId,\r
1832 IN CHAR8 *VarIdStr,\r
1833 IN UINT32 LineNo\r
1834 ) {\r
1835 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
1836 mEqIdId->QuestionId1 = QuestionId;\r
1837 } else {\r
1838 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId1), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
1839 }\r
1840 }\r
1841\r
1842 VOID SetQuestionId2 (\r
1843 IN EFI_QUESTION_ID QuestionId,\r
1844 IN CHAR8 *VarIdStr,\r
1845 IN UINT32 LineNo\r
1846 ) {\r
1847 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
1848 mEqIdId->QuestionId2 = QuestionId;\r
1849 } else {\r
1850 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId2), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
1851 }\r
1852 }\r
1853};\r
1854\r
1855class CIfrEqIdVal : public CIfrObj, public CIfrOpHeader {\r
1856private:\r
1857 EFI_IFR_EQ_ID_VAL *mEqIdVal;\r
1858\r
1859public:\r
1860 CIfrEqIdVal (\r
1861 IN UINT32 LineNo\r
1862 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_OP, (CHAR8 **)&mEqIdVal),\r
1863 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_OP, &mEqIdVal->Header) {\r
1864 SetLineNo (LineNo);\r
1865 mEqIdVal->QuestionId = EFI_QUESTION_ID_INVALID;\r
1866 }\r
1867\r
1868 VOID SetQuestionId (\r
1869 IN EFI_QUESTION_ID QuestionId,\r
1870 IN CHAR8 *VarIdStr,\r
1871 IN UINT32 LineNo\r
1872 ) {\r
1873 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
1874 mEqIdVal->QuestionId = QuestionId;\r
1875 } else {\r
1876 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVal->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
1877 }\r
1878 }\r
1879\r
1880 VOID SetValue (IN UINT16 Value) {\r
1881 mEqIdVal->Value = Value;\r
1882 }\r
1883};\r
1884\r
1885class CIfrEqIdList : public CIfrObj, public CIfrOpHeader {\r
1886private:\r
b303ea72 1887 EFI_IFR_EQ_ID_VAL_LIST *mEqIdVList;\r
30fdf114
LG
1888\r
1889public:\r
1890 CIfrEqIdList (\r
1891 IN UINT32 LineNo\r
b303ea72 1892 ) : CIfrObj (EFI_IFR_EQ_ID_LIST_OP, (CHAR8 **)&mEqIdVList, sizeof (EFI_IFR_EQ_ID_VAL_LIST), TRUE),\r
30fdf114
LG
1893 CIfrOpHeader (EFI_IFR_EQ_ID_LIST_OP, &mEqIdVList->Header) {\r
1894 SetLineNo (LineNo);\r
1895 mEqIdVList->QuestionId = EFI_QUESTION_ID_INVALID;\r
1896 mEqIdVList->ListLength = 0;\r
1897 mEqIdVList->ValueList[0] = 0;\r
1898 }\r
1899 \r
1900 VOID UpdateIfrBuffer ( \r
1901 ) {\r
1902 _EMIT_PENDING_OBJ();\r
b303ea72 1903 mEqIdVList = (EFI_IFR_EQ_ID_VAL_LIST *) GetObjBinAddr();\r
30fdf114
LG
1904 UpdateHeader (&mEqIdVList->Header);\r
1905 }\r
1906\r
1907 VOID SetQuestionId (\r
1908 IN EFI_QUESTION_ID QuestionId,\r
1909 IN CHAR8 *VarIdStr,\r
1910 IN UINT32 LineNo\r
1911 ) {\r
1912 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
1913 mEqIdVList->QuestionId = QuestionId;\r
1914 } else {\r
1915 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVList->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
1916 }\r
1917 }\r
1918\r
1919 VOID SetListLength (IN UINT16 ListLength) {\r
1920 mEqIdVList->ListLength = ListLength;\r
1921 }\r
1922\r
1923 VOID SetValueList (IN UINT16 Index, IN UINT16 Value) {\r
1924 if (Index == 0) {\r
1925 mEqIdVList->ValueList[0] = Value;\r
1926 return;\r
1927 }\r
1928\r
1929 if (ExpendObjBin (sizeof (UINT16)) ==TRUE) {\r
1930 IncLength (sizeof (UINT16));\r
1931 mEqIdVList->ValueList[Index] = Value;\r
1932 }\r
1933 }\r
1934};\r
1935\r
1936class CIfrQuestionRef1 : public CIfrObj, public CIfrOpHeader {\r
1937private:\r
1938 EFI_IFR_QUESTION_REF1 *mQuestionRef1;\r
1939\r
1940public:\r
1941 CIfrQuestionRef1 (\r
1942 IN UINT32 LineNo\r
1943 ) : CIfrObj (EFI_IFR_QUESTION_REF1_OP, (CHAR8 **)&mQuestionRef1),\r
1944 CIfrOpHeader (EFI_IFR_QUESTION_REF1_OP, &mQuestionRef1->Header) {\r
1945 SetLineNo (LineNo);\r
1946 mQuestionRef1->QuestionId = EFI_QUESTION_ID_INVALID;\r
1947 }\r
1948\r
1949 VOID SetQuestionId (\r
1950 IN EFI_QUESTION_ID QuestionId,\r
1951 IN CHAR8 *VarIdStr,\r
1952 IN UINT32 LineNo\r
1953 ) {\r
1954 if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
1955 mQuestionRef1->QuestionId = QuestionId;\r
1956 } else {\r
1957 gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mQuestionRef1->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
1958 }\r
1959 }\r
1960};\r
1961\r
1962class CIfrQuestionRef2 : public CIfrObj, public CIfrOpHeader {\r
1963private:\r
1964 EFI_IFR_QUESTION_REF2 *mQuestionRef2;\r
1965\r
1966public:\r
1967 CIfrQuestionRef2 (\r
1968 IN UINT32 LineNo\r
1969 ) : CIfrObj (EFI_IFR_QUESTION_REF2_OP, (CHAR8 **)&mQuestionRef2),\r
1970 CIfrOpHeader (EFI_IFR_QUESTION_REF2_OP, &mQuestionRef2->Header) {\r
1971 SetLineNo (LineNo);\r
1972 }\r
1973};\r
1974\r
1975class CIfrQuestionRef3 : public CIfrObj, public CIfrOpHeader {\r
1976private:\r
1977 EFI_IFR_QUESTION_REF3 *mQuestionRef3;\r
1978\r
1979public:\r
1980 CIfrQuestionRef3 (\r
1981 IN UINT32 LineNo\r
1982 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3),\r
1983 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3->Header) {\r
1984 SetLineNo (LineNo);\r
1985 }\r
1986};\r
1987\r
1988class CIfrQuestionRef3_2 : public CIfrObj, public CIfrOpHeader {\r
1989private:\r
1990 EFI_IFR_QUESTION_REF3_2 *mQuestionRef3_2;\r
1991\r
1992public:\r
1993 CIfrQuestionRef3_2 (\r
1994 IN UINT32 LineNo\r
1995 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3_2, sizeof (EFI_IFR_QUESTION_REF3_2)),\r
1996 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3_2->Header, sizeof (EFI_IFR_QUESTION_REF3_2)) {\r
1997 SetLineNo (LineNo);\r
1998 mQuestionRef3_2->DevicePath = EFI_STRING_ID_INVALID;\r
1999 }\r
2000\r
2001 VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {\r
2002 mQuestionRef3_2->DevicePath = DevicePath;\r
2003 }\r
2004};\r
2005\r
2006class CIfrQuestionRef3_3 : public CIfrObj, public CIfrOpHeader {\r
2007private:\r
2008 EFI_IFR_QUESTION_REF3_3 *mQuestionRef3_3;\r
2009\r
2010public:\r
2011 CIfrQuestionRef3_3 (\r
2012 IN UINT32 LineNo\r
2013 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3_3, sizeof (EFI_IFR_QUESTION_REF3_3)),\r
2014 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3_3->Header, sizeof (EFI_IFR_QUESTION_REF3_3)) {\r
2015 SetLineNo (LineNo);\r
2016 mQuestionRef3_3->DevicePath = EFI_STRING_ID_INVALID;\r
2017 memset (&mQuestionRef3_3->Guid, 0, sizeof (EFI_GUID));\r
2018 }\r
2019\r
2020 VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {\r
2021 mQuestionRef3_3->DevicePath = DevicePath;\r
2022 }\r
2023\r
2024 VOID SetGuid (IN EFI_GUID *Guid) {\r
2025 mQuestionRef3_3->Guid = *Guid;\r
2026 }\r
2027};\r
2028\r
2029class CIfrRuleRef : public CIfrObj, public CIfrOpHeader {\r
2030private:\r
2031 EFI_IFR_RULE_REF *mRuleRef;\r
2032\r
2033public:\r
2034 CIfrRuleRef (\r
2035 IN UINT32 LineNo\r
2036 ) : CIfrObj (EFI_IFR_RULE_REF_OP, (CHAR8 **)&mRuleRef),\r
2037 CIfrOpHeader (EFI_IFR_RULE_REF_OP, &mRuleRef->Header) {\r
2038 SetLineNo (LineNo);\r
2039 mRuleRef->RuleId = EFI_RULE_ID_INVALID;\r
2040 }\r
2041\r
2042 VOID SetRuleId (IN UINT8 RuleId) {\r
2043 mRuleRef->RuleId = RuleId;\r
2044 }\r
2045};\r
2046\r
2047class CIfrStringRef1 : public CIfrObj, public CIfrOpHeader {\r
2048private:\r
2049 EFI_IFR_STRING_REF1 *mStringRef1;\r
2050\r
2051public:\r
2052 CIfrStringRef1 (\r
2053 IN UINT32 LineNo\r
2054 ) : CIfrObj (EFI_IFR_STRING_REF1_OP, (CHAR8 **)&mStringRef1),\r
2055 CIfrOpHeader (EFI_IFR_STRING_REF1_OP, &mStringRef1->Header) {\r
2056 SetLineNo (LineNo);\r
2057 mStringRef1->StringId = EFI_STRING_ID_INVALID;\r
2058 }\r
2059\r
2060 VOID SetStringId (IN EFI_STRING_ID StringId) {\r
2061 mStringRef1->StringId = StringId;\r
2062 }\r
2063};\r
2064\r
2065class CIfrStringRef2 : public CIfrObj, public CIfrOpHeader {\r
2066private:\r
2067 EFI_IFR_STRING_REF2 *mStringRef2;\r
2068\r
2069public:\r
2070 CIfrStringRef2 (\r
2071 IN UINT32 LineNo\r
2072 ) : CIfrObj (EFI_IFR_STRING_REF2_OP, (CHAR8 **)&mStringRef2),\r
2073 CIfrOpHeader (EFI_IFR_STRING_REF2_OP, &mStringRef2->Header) {\r
2074 SetLineNo (LineNo);\r
2075 }\r
2076};\r
2077\r
2078class CIfrThis : public CIfrObj, public CIfrOpHeader {\r
2079private:\r
2080 EFI_IFR_THIS *mThis;\r
2081\r
2082public:\r
2083 CIfrThis (\r
2084 IN UINT32 LineNo\r
2085 ) : CIfrObj (EFI_IFR_THIS_OP, (CHAR8 **)&mThis),\r
2086 CIfrOpHeader (EFI_IFR_THIS_OP, &mThis->Header) {\r
2087 SetLineNo (LineNo);\r
2088 }\r
2089};\r
2090\r
a709adfa
LG
2091class CIfrSecurity : public CIfrObj, public CIfrOpHeader {\r
2092private:\r
2093 EFI_IFR_SECURITY *mSecurity;\r
2094\r
2095public:\r
2096 CIfrSecurity (\r
2097 IN UINT32 LineNo\r
2098 ) : CIfrObj (EFI_IFR_SECURITY_OP, (CHAR8 **)&mSecurity),\r
2099 CIfrOpHeader (EFI_IFR_SECURITY_OP, &mSecurity->Header) {\r
2100 SetLineNo (LineNo);\r
2101 memset (&mSecurity->Permissions, 0, sizeof (EFI_GUID));\r
2102 }\r
2103\r
2104 VOID SetPermissions (IN EFI_GUID *Permissions) {\r
2105 memcpy (&mSecurity->Permissions, Permissions, sizeof (EFI_GUID));\r
2106 }\r
2107};\r
2108\r
30fdf114
LG
2109class CIfrUint8 : public CIfrObj, public CIfrOpHeader {\r
2110private:\r
2111 EFI_IFR_UINT8 *mUint8;\r
2112\r
2113public:\r
2114 CIfrUint8 (\r
2115 IN UINT32 LineNo\r
2116 ) : CIfrObj (EFI_IFR_UINT8_OP, (CHAR8 **)&mUint8),\r
2117 CIfrOpHeader (EFI_IFR_UINT8_OP, &mUint8->Header) {\r
2118 SetLineNo (LineNo);\r
2119 }\r
2120\r
2121 VOID SetValue (IN UINT8 Value) {\r
2122 mUint8->Value = Value;\r
2123 }\r
2124};\r
2125\r
2126class CIfrUint16 : public CIfrObj, public CIfrOpHeader {\r
2127private:\r
2128 EFI_IFR_UINT16 *mUint16;\r
2129\r
2130public:\r
2131 CIfrUint16 (\r
2132 IN UINT32 LineNo\r
2133 ) : CIfrObj (EFI_IFR_UINT16_OP, (CHAR8 **)&mUint16),\r
2134 CIfrOpHeader (EFI_IFR_UINT16_OP, &mUint16->Header) {\r
2135 SetLineNo (LineNo);\r
2136 }\r
2137\r
2138 VOID SetValue (IN UINT16 Value) {\r
2139 mUint16->Value = Value;\r
2140 }\r
2141};\r
2142\r
2143class CIfrUint32 : public CIfrObj, public CIfrOpHeader {\r
2144private:\r
2145 EFI_IFR_UINT32 *mUint32;\r
2146\r
2147public:\r
2148 CIfrUint32 (\r
2149 IN UINT32 LineNo\r
2150 ) : CIfrObj (EFI_IFR_UINT32_OP, (CHAR8 **)&mUint32),\r
2151 CIfrOpHeader (EFI_IFR_UINT32_OP, &mUint32->Header) {\r
2152 SetLineNo (LineNo);\r
2153 }\r
2154\r
2155 VOID SetValue (IN UINT32 Value) {\r
2156 mUint32->Value = Value;\r
2157 }\r
2158};\r
2159\r
2160class CIfrUint64 : public CIfrObj, public CIfrOpHeader {\r
2161private:\r
2162 EFI_IFR_UINT64 *mUint64;\r
2163\r
2164public:\r
2165 CIfrUint64 (\r
2166 IN UINT32 LineNo\r
2167 ) : CIfrObj (EFI_IFR_UINT64_OP, (CHAR8 **)&mUint64),\r
2168 CIfrOpHeader (EFI_IFR_UINT64_OP, &mUint64->Header) {\r
2169 SetLineNo (LineNo);\r
2170 }\r
2171\r
2172 VOID SetValue (IN UINT64 Value) {\r
2173 mUint64->Value = Value;\r
2174 }\r
2175};\r
2176\r
2177class CIfrTrue : public CIfrObj, public CIfrOpHeader {\r
2178private:\r
2179 EFI_IFR_TRUE *mTrue;\r
2180\r
2181public:\r
2182 CIfrTrue (\r
2183 IN UINT32 LineNo\r
2184 ) : CIfrObj (EFI_IFR_TRUE_OP, (CHAR8 **)&mTrue),\r
2185 CIfrOpHeader (EFI_IFR_TRUE_OP, &mTrue->Header) {\r
2186 SetLineNo (LineNo);\r
2187 }\r
2188};\r
2189\r
2190class CIfrFalse : public CIfrObj, public CIfrOpHeader {\r
2191private:\r
2192 EFI_IFR_FALSE *mFalse;\r
2193\r
2194public:\r
2195 CIfrFalse (\r
2196 IN UINT32 LineNo\r
2197 ) : CIfrObj (EFI_IFR_FALSE_OP, (CHAR8 **)&mFalse),\r
2198 CIfrOpHeader (EFI_IFR_FALSE_OP, &mFalse->Header) {\r
2199 SetLineNo (LineNo);\r
2200 }\r
2201};\r
2202\r
2203class CIfrOne : public CIfrObj, public CIfrOpHeader {\r
2204private:\r
2205 EFI_IFR_ONE *mOne;\r
2206\r
2207public:\r
2208 CIfrOne (\r
2209 IN UINT32 LineNo\r
2210 ) : CIfrObj (EFI_IFR_ONE_OP, (CHAR8 **)&mOne),\r
2211 CIfrOpHeader (EFI_IFR_ONE_OP, &mOne->Header) {\r
2212 SetLineNo (LineNo);\r
2213 }\r
2214};\r
2215\r
2216class CIfrOnes : public CIfrObj, public CIfrOpHeader {\r
2217private:\r
2218 EFI_IFR_ONES *mOnes;\r
2219\r
2220public:\r
2221 CIfrOnes (\r
2222 IN UINT32 LineNo\r
2223 ) : CIfrObj (EFI_IFR_ONES_OP, (CHAR8 **)&mOnes),\r
2224 CIfrOpHeader (EFI_IFR_ONES_OP, &mOnes->Header) {\r
2225 SetLineNo (LineNo);\r
2226 }\r
2227};\r
2228\r
2229class CIfrZero : public CIfrObj, public CIfrOpHeader {\r
2230private:\r
2231 EFI_IFR_ZERO *mZero;\r
2232\r
2233public:\r
2234 CIfrZero (\r
2235 IN UINT32 LineNo\r
2236 ) : CIfrObj (EFI_IFR_ZERO_OP, (CHAR8 **)&mZero),\r
2237 CIfrOpHeader (EFI_IFR_ZERO_OP, &mZero->Header) {\r
2238 SetLineNo (LineNo);\r
2239 }\r
2240};\r
2241\r
2242class CIfrUndefined : public CIfrObj, public CIfrOpHeader {\r
2243private:\r
2244 EFI_IFR_UNDEFINED *mUndefined;\r
2245\r
2246public:\r
2247 CIfrUndefined (\r
2248 IN UINT32 LineNo\r
2249 ) : CIfrObj (EFI_IFR_UNDEFINED_OP, (CHAR8 **)&mUndefined),\r
2250 CIfrOpHeader (EFI_IFR_UNDEFINED_OP, &mUndefined->Header) {\r
2251 SetLineNo (LineNo);\r
2252 }\r
2253};\r
2254\r
2255class CIfrVersion : public CIfrObj, public CIfrOpHeader {\r
2256private:\r
2257 EFI_IFR_VERSION *mVersion;\r
2258\r
2259public:\r
2260 CIfrVersion (\r
2261 IN UINT32 LineNo\r
2262 ) : CIfrObj (EFI_IFR_VERSION_OP, (CHAR8 **)&mVersion),\r
2263 CIfrOpHeader (EFI_IFR_VERSION_OP, &mVersion->Header) {\r
2264 SetLineNo (LineNo);\r
2265 }\r
2266};\r
2267\r
2268class CIfrLength : public CIfrObj, public CIfrOpHeader {\r
2269private:\r
2270 EFI_IFR_LENGTH *mLength;\r
2271\r
2272public:\r
2273 CIfrLength (\r
2274 IN UINT32 LineNo\r
2275 ) : CIfrObj (EFI_IFR_LENGTH_OP, (CHAR8 **)&mLength),\r
2276 CIfrOpHeader (EFI_IFR_LENGTH_OP, &mLength->Header) {\r
2277 SetLineNo (LineNo);\r
2278 }\r
2279};\r
2280\r
2281class CIfrNot : public CIfrObj, public CIfrOpHeader {\r
2282private:\r
2283 EFI_IFR_NOT *mNot;\r
2284\r
2285public:\r
2286 CIfrNot (\r
2287 IN UINT32 LineNo\r
2288 ) : CIfrObj (EFI_IFR_NOT_OP, (CHAR8 **)&mNot),\r
2289 CIfrOpHeader (EFI_IFR_NOT_OP, &mNot->Header) {\r
2290 SetLineNo (LineNo);\r
2291 }\r
2292};\r
2293\r
2294class CIfrBitWiseNot : public CIfrObj, public CIfrOpHeader {\r
2295private:\r
2296 EFI_IFR_BITWISE_NOT *mBitWise;\r
2297\r
2298public:\r
2299 CIfrBitWiseNot (\r
2300 IN UINT32 LineNo\r
2301 ) : CIfrObj (EFI_IFR_BITWISE_NOT_OP, (CHAR8 **)&mBitWise),\r
2302 CIfrOpHeader (EFI_IFR_BITWISE_NOT_OP, &mBitWise->Header) {\r
2303 SetLineNo (LineNo);\r
2304 }\r
2305};\r
2306\r
2307class CIfrToBoolean : public CIfrObj, public CIfrOpHeader {\r
2308private:\r
2309 EFI_IFR_TO_BOOLEAN *mToBoolean;\r
2310\r
2311public:\r
2312 CIfrToBoolean (\r
2313 IN UINT32 LineNo\r
2314 ) : CIfrObj (EFI_IFR_TO_BOOLEAN_OP, (CHAR8 **)&mToBoolean),\r
2315 CIfrOpHeader (EFI_IFR_TO_BOOLEAN_OP, &mToBoolean->Header) {\r
2316 SetLineNo (LineNo);\r
2317 }\r
2318};\r
2319\r
2320class CIfrToString : public CIfrObj, public CIfrOpHeader {\r
2321private:\r
2322 EFI_IFR_TO_STRING *mToString;\r
2323\r
2324public:\r
2325 CIfrToString (\r
2326 IN UINT32 LineNo\r
2327 ) : CIfrObj (EFI_IFR_TO_STRING_OP, (CHAR8 **)&mToString),\r
2328 CIfrOpHeader (EFI_IFR_TO_STRING_OP, &mToString->Header) {\r
2329 SetLineNo (LineNo);\r
2330 }\r
2331\r
2332 VOID SetFormat (IN UINT8 Format) {\r
2333 mToString->Format = Format;\r
2334 }\r
2335};\r
2336\r
2337class CIfrToUint : public CIfrObj, public CIfrOpHeader {\r
2338private:\r
2339 EFI_IFR_TO_UINT *mToUint;\r
2340\r
2341public:\r
2342 CIfrToUint (\r
2343 IN UINT32 LineNo\r
2344 ) : CIfrObj (EFI_IFR_TO_UINT_OP, (CHAR8 **)&mToUint),\r
2345 CIfrOpHeader (EFI_IFR_TO_UINT_OP, &mToUint->Header) {\r
2346 SetLineNo (LineNo);\r
2347 }\r
2348};\r
2349\r
2350class CIfrToUpper : public CIfrObj, public CIfrOpHeader {\r
2351private:\r
2352 EFI_IFR_TO_UPPER *mToUpper;\r
2353\r
2354public:\r
2355 CIfrToUpper (\r
2356 IN UINT32 LineNo\r
2357 ) : CIfrObj (EFI_IFR_TO_UPPER_OP, (CHAR8 **)&mToUpper),\r
2358 CIfrOpHeader (EFI_IFR_TO_UPPER_OP, &mToUpper->Header) {\r
2359 SetLineNo (LineNo);\r
2360 }\r
2361};\r
2362\r
2363class CIfrToLower : public CIfrObj, public CIfrOpHeader {\r
2364private:\r
2365 EFI_IFR_TO_LOWER *mToLower;\r
2366\r
2367public:\r
2368 CIfrToLower (\r
2369 IN UINT32 LineNo\r
2370 ) : CIfrObj (EFI_IFR_TO_LOWER_OP, (CHAR8 **)&mToLower),\r
2371 CIfrOpHeader (EFI_IFR_TO_LOWER_OP, &mToLower->Header) {\r
2372 SetLineNo (LineNo);\r
2373 }\r
2374};\r
2375\r
2376class CIfrAdd : public CIfrObj, public CIfrOpHeader {\r
2377private:\r
2378 EFI_IFR_ADD *mAdd;\r
2379\r
2380public:\r
2381 CIfrAdd (\r
2382 IN UINT32 LineNo\r
2383 ) : CIfrObj (EFI_IFR_ADD_OP, (CHAR8 **)&mAdd),\r
2384 CIfrOpHeader (EFI_IFR_ADD_OP, &mAdd->Header) {\r
2385 SetLineNo (LineNo);\r
2386 }\r
2387};\r
2388\r
2389class CIfrBitWiseAnd : public CIfrObj, public CIfrOpHeader {\r
2390private:\r
2391 EFI_IFR_BITWISE_AND *mBitWiseAnd;\r
2392\r
2393public:\r
2394 CIfrBitWiseAnd (\r
2395 IN UINT32 LineNo\r
2396 ) : CIfrObj (EFI_IFR_BITWISE_AND_OP, (CHAR8 **)&mBitWiseAnd),\r
2397 CIfrOpHeader (EFI_IFR_BITWISE_AND_OP, &mBitWiseAnd->Header) {\r
2398 SetLineNo(LineNo);\r
2399 }\r
2400};\r
2401\r
2402class CIfrBitWiseOr : public CIfrObj, public CIfrOpHeader {\r
2403private:\r
2404 EFI_IFR_BITWISE_OR *mBitWiseOr;\r
2405\r
2406public:\r
2407 CIfrBitWiseOr (\r
2408 IN UINT32 LineNo\r
2409 ) : CIfrObj (EFI_IFR_BITWISE_OR_OP, (CHAR8 **)&mBitWiseOr),\r
2410 CIfrOpHeader (EFI_IFR_BITWISE_OR_OP, &mBitWiseOr->Header) {\r
2411 SetLineNo (LineNo);\r
2412 }\r
2413};\r
2414\r
2415class CIfrAnd : public CIfrObj, public CIfrOpHeader {\r
2416private:\r
2417 EFI_IFR_AND *mAnd;\r
2418\r
2419public:\r
2420 CIfrAnd (\r
2421 IN UINT32 LineNo\r
2422 ) : CIfrObj (EFI_IFR_AND_OP, (CHAR8 **)&mAnd),\r
2423 CIfrOpHeader (EFI_IFR_AND_OP, &mAnd->Header) {\r
2424 SetLineNo (LineNo);\r
2425 }\r
2426};\r
2427\r
2428class CIfrCatenate : public CIfrObj, public CIfrOpHeader {\r
2429private:\r
2430 EFI_IFR_CATENATE *mCatenate;\r
2431\r
2432public:\r
2433 CIfrCatenate (\r
2434 IN UINT32 LineNo\r
2435 ) : CIfrObj (EFI_IFR_CATENATE_OP, (CHAR8 **)&mCatenate),\r
2436 CIfrOpHeader (EFI_IFR_CATENATE_OP, &mCatenate->Header) {\r
2437 SetLineNo (LineNo);\r
2438 }\r
2439};\r
2440\r
2441class CIfrDivide : public CIfrObj, public CIfrOpHeader {\r
2442private:\r
2443 EFI_IFR_DIVIDE *mDivide;\r
2444\r
2445public:\r
2446 CIfrDivide (\r
2447 IN UINT32 LineNo\r
2448 ) : CIfrObj (EFI_IFR_DIVIDE_OP, (CHAR8 **)&mDivide),\r
2449 CIfrOpHeader (EFI_IFR_DIVIDE_OP, &mDivide->Header) {\r
2450 SetLineNo (LineNo);\r
2451 }\r
2452};\r
2453\r
2454class CIfrEqual : public CIfrObj, public CIfrOpHeader {\r
2455private:\r
2456 EFI_IFR_EQUAL *mEqual;\r
2457\r
2458public:\r
2459 CIfrEqual (\r
2460 IN UINT32 LineNo\r
2461 ) : CIfrObj (EFI_IFR_EQUAL_OP, (CHAR8 **)&mEqual),\r
2462 CIfrOpHeader (EFI_IFR_EQUAL_OP, &mEqual->Header) {\r
2463 SetLineNo (LineNo);\r
2464 }\r
2465};\r
2466\r
2467class CIfrGreaterEqual : public CIfrObj, public CIfrOpHeader {\r
2468private:\r
2469 EFI_IFR_GREATER_EQUAL *mGreaterEqual;\r
2470\r
2471public:\r
2472 CIfrGreaterEqual (\r
2473 IN UINT32 LineNo\r
2474 ) : CIfrObj (EFI_IFR_GREATER_EQUAL_OP, (CHAR8 **)&mGreaterEqual),\r
2475 CIfrOpHeader (EFI_IFR_GREATER_EQUAL_OP, &mGreaterEqual->Header) {\r
2476 SetLineNo (LineNo);\r
2477 }\r
2478};\r
2479\r
2480class CIfrGreaterThan : public CIfrObj, public CIfrOpHeader {\r
2481private:\r
2482 EFI_IFR_GREATER_THAN *mGreaterThan;\r
2483\r
2484public:\r
2485 CIfrGreaterThan (\r
2486 IN UINT32 LineNo\r
2487 ) : CIfrObj (EFI_IFR_GREATER_THAN_OP, (CHAR8 **)&mGreaterThan),\r
2488 CIfrOpHeader (EFI_IFR_GREATER_THAN_OP, &mGreaterThan->Header) {\r
2489 SetLineNo (LineNo);\r
2490 }\r
2491};\r
2492\r
2493class CIfrLessEqual : public CIfrObj, public CIfrOpHeader {\r
2494private:\r
2495 EFI_IFR_LESS_EQUAL *mLessEqual;\r
2496\r
2497public:\r
2498 CIfrLessEqual (\r
2499 IN UINT32 LineNo\r
2500 ) : CIfrObj (EFI_IFR_LESS_EQUAL_OP, (CHAR8 **)&mLessEqual),\r
2501 CIfrOpHeader (EFI_IFR_LESS_EQUAL_OP, &mLessEqual->Header) {\r
2502 SetLineNo (LineNo);\r
2503 }\r
2504};\r
2505\r
2506class CIfrLessThan : public CIfrObj, public CIfrOpHeader {\r
2507private:\r
2508 EFI_IFR_LESS_THAN *mLessThan;\r
2509\r
2510public:\r
2511 CIfrLessThan (\r
2512 IN UINT32 LineNo\r
2513 ) : CIfrObj (EFI_IFR_LESS_THAN_OP, (CHAR8 **)&mLessThan),\r
2514 CIfrOpHeader (EFI_IFR_LESS_THAN_OP, &mLessThan->Header) {\r
2515 SetLineNo (LineNo);\r
2516 }\r
2517};\r
2518\r
52302d4d
LG
2519class CIfrMap : public CIfrObj, public CIfrOpHeader{\r
2520private:\r
2521 EFI_IFR_MAP *mMap;\r
2522\r
2523public:\r
2524 CIfrMap (\r
2525 IN UINT32 LineNo \r
2526 ) : CIfrObj (EFI_IFR_MAP_OP, (CHAR8 **)&mMap),\r
2527 CIfrOpHeader (EFI_IFR_MAP_OP, &mMap->Header) {\r
2528 SetLineNo (LineNo);\r
2529 }\r
2530};\r
2531\r
30fdf114
LG
2532class CIfrMatch : public CIfrObj, public CIfrOpHeader {\r
2533private:\r
2534 EFI_IFR_MATCH *mMatch;\r
2535\r
2536public:\r
2537 CIfrMatch (\r
2538 IN UINT32 LineNo\r
2539 ) : CIfrObj (EFI_IFR_MATCH_OP, (CHAR8 **)&mMatch),\r
2540 CIfrOpHeader (EFI_IFR_MATCH_OP, &mMatch->Header) {\r
2541 SetLineNo (LineNo);\r
2542 }\r
2543};\r
2544\r
2545class CIfrMultiply : public CIfrObj, public CIfrOpHeader {\r
2546private:\r
2547 EFI_IFR_MULTIPLY *mMultiply;\r
2548\r
2549public:\r
2550 CIfrMultiply (\r
2551 IN UINT32 LineNo\r
2552 ) : CIfrObj (EFI_IFR_MULTIPLY_OP, (CHAR8 **)&mMultiply),\r
2553 CIfrOpHeader (EFI_IFR_MULTIPLY_OP, &mMultiply->Header) {\r
2554 SetLineNo (LineNo);\r
2555 }\r
2556};\r
2557\r
2558class CIfrModulo : public CIfrObj, public CIfrOpHeader {\r
2559private:\r
2560 EFI_IFR_MODULO *mModulo;\r
2561\r
2562public:\r
2563 CIfrModulo (\r
2564 IN UINT32 LineNo\r
2565 ) : CIfrObj (EFI_IFR_MODULO_OP, (CHAR8 **)&mModulo),\r
2566 CIfrOpHeader (EFI_IFR_MODULO_OP, &mModulo->Header) {\r
2567 SetLineNo (LineNo);\r
2568 }\r
2569};\r
2570\r
2571class CIfrNotEqual : public CIfrObj, public CIfrOpHeader {\r
2572private:\r
2573 EFI_IFR_NOT_EQUAL *mNotEqual;\r
2574\r
2575public:\r
2576 CIfrNotEqual (\r
2577 IN UINT32 LineNo\r
2578 ) : CIfrObj (EFI_IFR_NOT_EQUAL_OP, (CHAR8 **)&mNotEqual),\r
2579 CIfrOpHeader (EFI_IFR_NOT_EQUAL_OP, &mNotEqual->Header) {\r
2580 SetLineNo (LineNo);\r
2581 }\r
2582};\r
2583\r
2584class CIfrOr : public CIfrObj, public CIfrOpHeader {\r
2585private:\r
2586 EFI_IFR_OR *mOr;\r
2587\r
2588public:\r
2589 CIfrOr (\r
2590 IN UINT32 LineNo\r
2591 ) : CIfrObj (EFI_IFR_OR_OP, (CHAR8 **)&mOr),\r
2592 CIfrOpHeader (EFI_IFR_OR_OP, &mOr->Header) {\r
2593 SetLineNo (LineNo);\r
2594 }\r
2595};\r
2596\r
2597class CIfrShiftLeft : public CIfrObj, public CIfrOpHeader {\r
2598private:\r
2599 EFI_IFR_SHIFT_LEFT *mShiftLeft;\r
2600\r
2601public:\r
2602 CIfrShiftLeft (\r
2603 IN UINT32 LineNo\r
2604 ) : CIfrObj (EFI_IFR_SHIFT_LEFT_OP, (CHAR8 **)&mShiftLeft),\r
2605 CIfrOpHeader (EFI_IFR_SHIFT_LEFT_OP, &mShiftLeft->Header) {\r
2606 SetLineNo (LineNo);\r
2607 }\r
2608};\r
2609\r
2610class CIfrShiftRight : public CIfrObj, public CIfrOpHeader {\r
2611private:\r
2612 EFI_IFR_SHIFT_RIGHT *mShiftRight;\r
2613\r
2614public:\r
2615 CIfrShiftRight (\r
2616 IN UINT32 LineNo\r
2617 ) : CIfrObj (EFI_IFR_SHIFT_RIGHT_OP, (CHAR8 **)&mShiftRight),\r
2618 CIfrOpHeader (EFI_IFR_SHIFT_RIGHT_OP, &mShiftRight->Header) {\r
2619 SetLineNo (LineNo);\r
2620 }\r
2621};\r
2622\r
2623class CIfrSubtract : public CIfrObj, public CIfrOpHeader {\r
2624private:\r
2625 EFI_IFR_SUBTRACT *mSubtract;\r
2626\r
2627public:\r
2628 CIfrSubtract (\r
2629 IN UINT32 LineNo\r
2630 ) : CIfrObj (EFI_IFR_SUBTRACT_OP, (CHAR8 **)&mSubtract),\r
2631 CIfrOpHeader (EFI_IFR_SUBTRACT_OP, &mSubtract->Header) {\r
2632 SetLineNo (LineNo);\r
2633 }\r
2634};\r
2635\r
2636class CIfrConditional : public CIfrObj, public CIfrOpHeader {\r
2637private:\r
2638 EFI_IFR_CONDITIONAL *mConditional;\r
2639\r
2640public:\r
2641 CIfrConditional (\r
2642 IN UINT32 LineNo\r
2643 ) : CIfrObj (EFI_IFR_CONDITIONAL_OP, (CHAR8 **)&mConditional),\r
2644 CIfrOpHeader (EFI_IFR_CONDITIONAL_OP, &mConditional->Header) {\r
2645 SetLineNo (LineNo);\r
2646 }\r
2647};\r
2648\r
2649class CIfrFind : public CIfrObj, public CIfrOpHeader {\r
2650private:\r
2651 EFI_IFR_FIND *mFind;\r
2652\r
2653public:\r
2654 CIfrFind (\r
2655 IN UINT32 LineNo\r
2656 ) : CIfrObj (EFI_IFR_FIND_OP, (CHAR8 **)&mFind),\r
2657 CIfrOpHeader (EFI_IFR_FIND_OP, &mFind->Header) {\r
2658 SetLineNo (LineNo);\r
2659 }\r
2660\r
2661 VOID SetFormat (IN UINT8 Format) {\r
2662 mFind->Format = Format;\r
2663 }\r
2664};\r
2665\r
2666class CIfrMid : public CIfrObj, public CIfrOpHeader {\r
2667private:\r
2668 EFI_IFR_MID *mMid;\r
2669\r
2670public:\r
2671 CIfrMid (\r
2672 IN UINT32 LineNo\r
2673 ) : CIfrObj (EFI_IFR_MID_OP, (CHAR8 **)&mMid),\r
2674 CIfrOpHeader (EFI_IFR_MID_OP, &mMid->Header) {\r
2675 SetLineNo (LineNo);\r
2676 }\r
2677};\r
2678\r
2679class CIfrToken : public CIfrObj, public CIfrOpHeader {\r
2680private:\r
2681 EFI_IFR_TOKEN *mToken;\r
2682\r
2683public:\r
2684 CIfrToken (\r
2685 IN UINT32 LineNo\r
2686 ) : CIfrObj (EFI_IFR_TOKEN_OP, (CHAR8 **)&mToken),\r
2687 CIfrOpHeader (EFI_IFR_TOKEN_OP, &mToken->Header) {\r
2688 SetLineNo (LineNo);\r
2689 }\r
2690};\r
2691\r
2692class CIfrSpan : public CIfrObj, public CIfrOpHeader {\r
2693private:\r
2694 EFI_IFR_SPAN *mSpan;\r
2695\r
2696public:\r
2697 CIfrSpan (\r
2698 IN UINT32 LineNo\r
2699 ) : CIfrObj (EFI_IFR_SPAN_OP, (CHAR8 **)&mSpan),\r
2700 CIfrOpHeader (EFI_IFR_SPAN_OP, &mSpan->Header) {\r
2701 SetLineNo (LineNo);\r
2702 mSpan->Flags = EFI_IFR_FLAGS_FIRST_MATCHING;\r
2703 }\r
2704\r
2705 EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {\r
2706 if (_IS_EQUAL (LFlags, EFI_IFR_FLAGS_FIRST_MATCHING)) {\r
2707 mSpan->Flags |= EFI_IFR_FLAGS_FIRST_MATCHING;\r
2708 } else if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_FLAGS_FIRST_NON_MATCHING)) {\r
2709 mSpan->Flags |= EFI_IFR_FLAGS_FIRST_NON_MATCHING;\r
2710 }\r
2711\r
2712 return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
2713 }\r
2714};\r
2715\r
2716#endif\r