\r
**/\r
\r
-#define __BUILD_VERSION ""\r
+#define __BUILD_VERSION "Build 2601"\r
IFR is primarily consumed by the EFI presentation engine, and produced by EFI\r
internal application and drivers as well as all add-in card option-ROM drivers\r
\r
- Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\r
\r
This program and the accompanying materials are licensed and made available\r
under the terms and conditions of the BSD License which accompanies this\r
#define EFI_IFR_SECURITY_OP 0x60\r
#define EFI_IFR_MODAL_TAG_OP 0x61\r
#define EFI_IFR_REFRESH_ID_OP 0x62\r
+#define EFI_IFR_WARNING_IF_OP 0x63\r
\r
\r
typedef struct _EFI_IFR_OP_HEADER {\r
EFI_STRING_ID Error;\r
} EFI_IFR_NO_SUBMIT_IF;\r
\r
+typedef struct _EFI_IFR_WARNING_IF {\r
+ EFI_IFR_OP_HEADER Header;\r
+ EFI_STRING_ID Warning;\r
+ UINT8 TimeOut;\r
+} EFI_IFR_WARNING_IF;\r
+\r
typedef struct _EFI_IFR_REFRESH {\r
EFI_IFR_OP_HEADER Header;\r
UINT8 RefreshInterval;\r
{ sizeof (EFI_IFR_SECURITY), 0 }, // EFI_IFR_SECURITY_OP - 0x60\r
{ sizeof (EFI_IFR_MODAL_TAG), 0}, // EFI_IFR_MODAL_TAG_OP - 0x61\r
{ sizeof (EFI_IFR_REFRESH_ID), 0}, // EFI_IFR_REFRESH_ID_OP - 0x62\r
+ { sizeof (EFI_IFR_WARNING_IF), 1}, // EFI_IFR_WARNING_IF_OP - 0x63\r
};\r
\r
#ifdef CIFROBJ_DEUBG\r
"EFI_IFR_STRING_REF1","EFI_IFR_STRING_REF2", "EFI_IFR_CONDITIONAL", "EFI_IFR_QUESTION_REF3", "EFI_IFR_ZERO", "EFI_IFR_ONE",\r
"EFI_IFR_ONES", "EFI_IFR_UNDEFINED", "EFI_IFR_LENGTH", "EFI_IFR_DUP", "EFI_IFR_THIS", "EFI_IFR_SPAN",\r
"EFI_IFR_VALUE", "EFI_IFR_DEFAULT", "EFI_IFR_DEFAULTSTORE", "EFI_IFR_FORM_MAP", "EFI_IFR_CATENATE", "EFI_IFR_GUID",\r
- "EFI_IFR_SECURITY", "EFI_IFR_MODAL_TAG", "EFI_IFR_REFRESH_ID",\r
+ "EFI_IFR_SECURITY", "EFI_IFR_MODAL_TAG", "EFI_IFR_REFRESH_ID", "EFI_IFR_WARNING_IF",\r
};\r
\r
VOID\r
}\r
};\r
\r
+class CIfrWarningIf : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+ EFI_IFR_WARNING_IF *mWarningIf;\r
+\r
+public:\r
+ CIfrWarningIf () : CIfrObj (EFI_IFR_WARNING_IF_OP, (CHAR8 **)&mWarningIf),\r
+ CIfrOpHeader (EFI_IFR_WARNING_IF_OP, &mWarningIf->Header) {\r
+ mWarningIf->Warning = EFI_STRING_ID_INVALID;\r
+ mWarningIf->TimeOut = 0;\r
+ }\r
+\r
+ VOID SetWarning (IN EFI_STRING_ID Warning) {\r
+ mWarningIf->Warning = Warning;\r
+ }\r
+\r
+ VOID SetTimeOut (IN UINT8 TimeOut) {\r
+ mWarningIf->TimeOut = TimeOut;\r
+ }\r
+};\r
+\r
class CIfrNoSubmitIf : public CIfrObj, public CIfrOpHeader {\r
private:\r
EFI_IFR_NO_SUBMIT_IF *mNoSubmitIf;\r
#token Goto("goto") "goto"\r
#token FormSetGuid("formsetguid") "formsetguid"\r
#token InconsistentIf("inconsistentif") "inconsistentif"\r
+#token WarningIf("warningif") "warningif"\r
#token NoSubmitIf("nosubmitif") "nosubmitif"\r
#token EndIf("endif") "endif"\r
#token Key("key") "key"\r
vfrStatementRefresh |\r
vfrStatementVarstoreDevice |\r
vfrStatementExtension |\r
- vfrStatementRefreshEvent\r
+ vfrStatementRefreshEvent |\r
+ vfrStatementWarningIf\r
;\r
\r
vfrStatementQuestionTagList :\r
E:EndIf << CRT_END_OP (E); >>\r
;\r
\r
+vfrStatementWarningIf :\r
+ << CIfrWarningIf WIObj; >>\r
+ L:WarningIf << WIObj.SetLineNo(L->getLine()); >>\r
+ Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" "," << WIObj.SetWarning (_STOSID(S->getText())); >>\r
+ {Timeout "=" T:Number "," << WIObj.SetTimeOut (_STOU8(T->getText())); >>}\r
+ vfrStatementExpression[0]\r
+ E:EndIf << CRT_END_OP (E); >>\r
+ ;\r
+\r
vfrStatementDisableIfQuest :\r
<< \r
CIfrDisableIf DIObj; \r
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
#\r
\r
-gBUILD_VERSION = ""\r
+gBUILD_VERSION = "Build 2601"\r
Build version information\r
'''\r
\r
-gBUILD_VERSION = ""\r
+gBUILD_VERSION = "Build 2601"\r
except:
EdkLogger.error("Parser", FILE_READ_FAILURE, ExtraData=self.MetaFile)
+ OwnerId = {}
for Index in range(0, len(Content)):
Line = CleanString(Content[Index])
# skip empty line
self._SubsectionType = MODEL_UNKNOWN
self._SubsectionName = ''
self._Owner[-1] = -1
+ OwnerId = {}
continue
# subsection header
elif Line[0] == TAB_OPTION_START and Line[-1] == TAB_OPTION_END:
# LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, Enabled=-1
#
for Arch, ModuleType in self._Scope:
+ Owner = self._Owner[-1]
+ if self._SubsectionType != MODEL_UNKNOWN:
+ Owner = OwnerId[Arch]
self._LastItem = self._Store(
self._ItemType,
self._ValueList[0],
self._ValueList[2],
Arch,
ModuleType,
- self._Owner[-1],
+ Owner,
self._From,
self._LineIndex + 1,
- 1,
- 1,
self._Enabled
)
+ if self._SubsectionType == MODEL_UNKNOWN and self._InSubsection:
+ OwnerId[Arch] = self._LastItem
if self._DirectiveStack:
Type, Line, Text = self._DirectiveStack[-1]
ExtraData=self._CurrentLine + " (<TokenSpaceGuidCName>.<TokenCName>|<PcdValue>)",
File=self.MetaFile, Line=self._LineIndex + 1)
if self._ValueList[2] == '':
+ #
+ # The PCD values are optional for FIXEDATBUILD and PATCHABLEINMODULE
+ #
+ if self._SectionType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):
+ return
EdkLogger.error('Parser', FORMAT_INVALID, "No PCD value given",
ExtraData=self._CurrentLine + " (<TokenSpaceGuidCName>.<TokenCName>|<PcdValue>)",
File=self.MetaFile, Line=self._LineIndex + 1)