EFI_IFR_FORM_SET *mFormSet;\r
\r
public:\r
- CIfrFormSet () : CIfrObj (EFI_IFR_FORM_SET_OP, (CHAR8 **)&mFormSet),\r
- CIfrOpHeader (EFI_IFR_FORM_SET_OP, &mFormSet->Header) {\r
+ CIfrFormSet (UINT8 Size) : CIfrObj (EFI_IFR_FORM_SET_OP, (CHAR8 **)&mFormSet, Size),\r
+ CIfrOpHeader (EFI_IFR_FORM_SET_OP, &mFormSet->Header, Size) {\r
mFormSet->Help = EFI_STRING_ID_INVALID;\r
mFormSet->FormSetTitle = EFI_STRING_ID_INVALID;\r
+ mFormSet->Flags = 0;\r
memset (&mFormSet->Guid, 0, sizeof (EFI_GUID));\r
}\r
\r
VOID SetHelp (IN EFI_STRING_ID Help) {\r
mFormSet->Help = Help;\r
}\r
+\r
+ VOID SetClassGuid (IN EFI_GUID *Guid) {\r
+ memcpy (&(mFormSet->ClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));\r
+ }\r
+\r
+ UINT8 GetFlags() {\r
+ return mFormSet->Flags;\r
+ }\r
};\r
\r
class CIfrEnd : public CIfrObj, public CIfrOpHeader {\r
#token OptionOnlyFlag("OPTIONS_ONLY") "OPTIONS_ONLY"\r
#token Class("class") "class"\r
#token Subclass("subclass") "subclass"\r
+#token ClassGuid("classguid") "classguid"\r
#token TypeDef("typedef") "typedef"\r
#token Restore("restore") "restore"\r
#token Save("save") "save"\r
vfrFormSetDefinition :\r
<<\r
EFI_GUID Guid;\r
- CIfrFormSet FSObj;\r
+ EFI_GUID DefaultClassGuid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID;\r
+ EFI_GUID ClassGuid1, ClassGuid2, ClassGuid3;\r
+ UINT8 ClassGuidNum = 0;\r
+ CIfrFormSet *FSObj = NULL;\r
UINT16 C, SC;\r
>>\r
- L:FormSet << SET_LINE_INFO (FSObj, L); >>\r
- Uuid "=" guidDefinition[Guid] "," <<\r
- FSObj.SetGuid (&Guid);\r
- //\r
- // for framework vfr to store formset guid used by varstore and efivarstore\r
- //\r
- if (mCompatibleMode) {\r
- memcpy (&mFormsetGuid, &Guid, sizeof (EFI_GUID));\r
- }\r
+ L:FormSet\r
+ Uuid "=" guidDefinition[Guid] ","\r
+ Title "=" "STRING_TOKEN" "\(" S1:Number "\)" ","\r
+ Help "=" "STRING_TOKEN" "\(" S2:Number "\)" ","\r
+ {\r
+ ClassGuid "=" guidDefinition[ClassGuid1] << ++ClassGuidNum; >>\r
+ {\r
+ "\|" guidDefinition[ClassGuid2] << ++ClassGuidNum; >>\r
+ }\r
+ {\r
+ "\|" guidDefinition[ClassGuid3] << ++ClassGuidNum; >>\r
+ }\r
+ ","\r
+ }\r
+ <<\r
+ switch (ClassGuidNum) {\r
+ case 0:\r
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
+ FSObj->SetClassGuid(&DefaultClassGuid);\r
+ break;\r
+ case 1:\r
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
+ FSObj->SetClassGuid(&ClassGuid1);\r
+ break;\r
+ case 2:\r
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID));\r
+ FSObj->SetClassGuid(&ClassGuid1);\r
+ FSObj->SetClassGuid(&ClassGuid2);\r
+ break;\r
+ default:\r
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + 2 * sizeof(EFI_GUID));\r
+ FSObj->SetClassGuid(&ClassGuid1);\r
+ FSObj->SetClassGuid(&ClassGuid2);\r
+ FSObj->SetClassGuid(&ClassGuid3);\r
+ break;\r
+ }\r
+\r
+ SET_LINE_INFO (*FSObj, L);\r
+ FSObj->SetGuid (&Guid);\r
+ //\r
+ // for framework vfr to store formset guid used by varstore and efivarstore\r
+ //\r
+ if (mCompatibleMode) {\r
+ memcpy (&mFormsetGuid, &Guid, sizeof (EFI_GUID));\r
+ }\r
+ FSObj->SetFormSetTitle (_STOSID(S1->getText()));\r
+ FSObj->SetHelp (_STOSID(S2->getText()));\r
>>\r
- Title "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << FSObj.SetFormSetTitle (_STOSID(S1->getText())); >>\r
- Help "=" "STRING_TOKEN" "\(" S2:Number "\)" "," << FSObj.SetHelp (_STOSID(S2->getText())); >>\r
{\r
- FC:Class "=" classDefinition[C] "," << {CIfrClass CObj;SET_LINE_INFO (CObj, FC); CObj.SetClass(C);} >>\r
+ FC:Class "=" classDefinition[C] "," << {CIfrClass CObj;SET_LINE_INFO (CObj, FC); CObj.SetClass(C);} >>\r
}\r
{\r
- FSC:Subclass "=" subclassDefinition[SC] "," << {CIfrSubClass SCObj; SET_LINE_INFO (SCObj, FSC); SCObj.SetSubClass(SC);} >>\r
+ FSC:Subclass "=" subclassDefinition[SC] "," << {CIfrSubClass SCObj; SET_LINE_INFO (SCObj, FSC); SCObj.SetSubClass(SC);} >>\r
}\r
<<\r
_DeclareStandardDefaultStorage (GET_LINENO (L));\r
//\r
_DeclareDefaultFrameworkVarStore (GET_LINENO(E));\r
}\r
- CRT_END_OP (E);\r
+ CRT_END_OP (E); if (FSObj != NULL) delete FSObj;\r
>>\r
";"\r
;\r
CHAR8 *SName = NULL;\r
CHAR8 *TName = NULL;\r
EFI_VFR_RETURN_CODE VfrReturnCode = VFR_RETURN_SUCCESS;\r
- EFI_IFR_TYPE_VALUE Dummy = {0};\r
+ EFI_IFR_TYPE_VALUE Dummy = gZeroEfiIfrTypeValue;\r
>>\r
(\r
SN1:StringIdentifier << SName = SN1->getText(); _STRCAT(&VarIdStr, SN1->getText()); >>\r
vfrStatementDefault :\r
<<\r
BOOLEAN IsExp = FALSE;\r
- EFI_IFR_TYPE_VALUE Val;\r
+ EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
CIfrDefault DObj;\r
EFI_DEFAULT_ID DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
CHAR8 *VarStoreName = NULL;\r
vfrStatementCheckBox :\r
<<\r
CIfrCheckBox CBObj;\r
- EFI_IFR_TYPE_VALUE Val;\r
+ EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
CHAR8 *VarStoreName = NULL;\r
UINT32 DataTypeSize;\r
>>\r
\r
vfrStatementOneOfOption :\r
<<\r
- EFI_IFR_TYPE_VALUE Val;\r
+ EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
CIfrOneOfOption OOOObj;\r
CHAR8 *VarStoreName = NULL;\r
>>\r