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