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