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