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