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