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