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