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