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