BOOLEAN mInScopeSubtitle;\r
BOOLEAN mInScopeSuppress;\r
BOOLEAN mInScopeGrayOut;\r
+BOOLEAN mInScopeDisable;\r
FORM_EXPRESSION *mSuppressExpression;\r
FORM_EXPRESSION *mGrayOutExpression;\r
-\r
-EFI_GUID gTianoHiiIfrGuid = EFI_IFR_TIANO_GUID;\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID mFrameworkHiiCompatibilityGuid = EFI_IFR_FRAMEWORK_GUID;\r
-\r
+FORM_EXPRESSION *mDisableExpression;\r
\r
/**\r
Initialize Statement header members.\r
Statement->GrayOutExpression = mGrayOutExpression;\r
}\r
\r
+\r
+ if (mInScopeDisable) {\r
+ Statement->DisableExpression = mDisableExpression;\r
+ }\r
+\r
Statement->InSubtitle = mInScopeSubtitle;\r
\r
//\r
{\r
CHAR16 Str[MAXIMUM_VALUE_CHARACTERS];\r
EFI_STRING_ID Id;\r
- EFI_STATUS Status;\r
\r
ASSERT (Statement != NULL);\r
ASSERT (Statement->Operand == EFI_IFR_NUMERIC_OP);\r
\r
UnicodeValueToString (Str, 0, Statement->VarStoreInfo.VarName, MAXIMUM_VALUE_CHARACTERS - 1);\r
- \r
- Status = HiiLibNewString (FormSet->HiiHandle, &Id, Str);\r
\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ Id = HiiSetString (FormSet->HiiHandle, 0, Str, NULL);\r
+ if (Id == 0) {\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
\r
Statement->VarStoreInfo.VarName = Id;\r
//\r
OpCodeData += ((EFI_IFR_OP_HEADER *) OpCodeData)->Length;\r
if (*OpCodeData == EFI_IFR_GUID_OP) {\r
- if (CompareGuid (&mFrameworkHiiCompatibilityGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
+ if (CompareGuid (&gEfiIfrFrameworkGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
//\r
// Specific GUIDed opcodes to support IFR generated from Framework HII VFR \r
//\r
// Take a look at next OpCode to see whether it is a GUIDed opcode to support\r
// Framework Compatibility\r
//\r
- if (FeaturePcdGet (PcdFrameworkHiiCompatibilitySupport)) {\r
+ if (FeaturePcdGet (PcdFrameworkCompatibilitySupport)) {\r
if ((*OpCodeData == EFI_IFR_NUMERIC_OP) && IsNextOpCodeGuidedVarEqName (OpCodeData)) {\r
Status = UpdateCheckBoxStringToken (FormSet, Statement);\r
if (EFI_ERROR (Status)) {\r
IN OUT FORMSET_STORAGE *Storage\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN StrBufferLen;\r
CHAR16 *Name;\r
-\r
+ \r
if (Storage->Type == EFI_HII_VARSTORE_BUFFER) {\r
Name = Storage->Name;\r
} else {\r
Name = NULL;\r
}\r
-\r
- StrBufferLen = 0;\r
- Status = ConstructConfigHdr (\r
- Storage->ConfigHdr,\r
- &StrBufferLen,\r
- &Storage->Guid,\r
- Name,\r
- FormSet->DriverHandle\r
- );\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- Storage->ConfigHdr = AllocateZeroPool (StrBufferLen);\r
- Status = ConstructConfigHdr (\r
- Storage->ConfigHdr,\r
- &StrBufferLen,\r
- &Storage->Guid,\r
- Name,\r
- FormSet->DriverHandle\r
- );\r
- }\r
-\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ \r
+ Storage->ConfigHdr = HiiConstructConfigHdr (\r
+ &Storage->Guid,\r
+ Name,\r
+ FormSet->DriverHandle\r
+ );\r
+ \r
+ if (Storage->ConfigHdr == NULL) {\r
+ return EFI_NOT_FOUND;\r
}\r
\r
- Storage->ConfigRequest = AllocateCopyPool (StrBufferLen, Storage->ConfigHdr);\r
+ Storage->ConfigRequest = AllocateCopyPool (StrSize (Storage->ConfigHdr), Storage->ConfigHdr);\r
Storage->SpareStrLen = 0;\r
\r
return EFI_SUCCESS;\r
BOOLEAN SuppressForOption;\r
BOOLEAN InScopeOptionSuppress;\r
FORM_EXPRESSION *OptionSuppressExpression;\r
- BOOLEAN InScopeDisable;\r
UINT16 DepthOfDisable;\r
BOOLEAN OpCodeDisabled;\r
BOOLEAN SingleOpCodeExpression;\r
mInScopeSuppress = FALSE;\r
InScopeOptionSuppress = FALSE;\r
mInScopeGrayOut = FALSE;\r
- InScopeDisable = FALSE;\r
+ mInScopeDisable = FALSE;\r
DepthOfDisable = 0;\r
OpCodeDisabled = FALSE;\r
SingleOpCodeExpression = FALSE;\r
\r
if (ScopeOpCode == EFI_IFR_DISABLE_IF_OP) {\r
if (DepthOfDisable == 0) {\r
- InScopeDisable = FALSE;\r
+ mInScopeDisable = FALSE;\r
OpCodeDisabled = FALSE;\r
} else {\r
DepthOfDisable--;\r
//\r
SingleOpCodeExpression = FALSE;\r
\r
- if (InScopeDisable) {\r
+ if (mInScopeDisable && CurrentForm == NULL) {\r
//\r
- // Evaluate DisableIf expression\r
+ // This is DisableIf expression for Form, it should be a constant expression\r
//\r
Status = EvaluateExpression (FormSet, CurrentForm, CurrentExpression);\r
if (EFI_ERROR (Status)) {\r
\r
CopyMem (&FormSet->FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));\r
CopyMem (&FormSet->Help, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));\r
+\r
+ //\r
+ // The formset OpCode contains ClassGuid\r
+ //\r
+ FormSet->NumberOfClassGuid = (UINT8) (((EFI_IFR_FORM_SET *) OpCodeData)->Flags & 0x3);\r
+ CopyMem (FormSet->ClassGuid, OpCodeData + sizeof (EFI_IFR_FORM_SET), FormSet->NumberOfClassGuid * sizeof (EFI_GUID));\r
break;\r
\r
case EFI_IFR_FORM_OP:\r
break;\r
\r
case EFI_IFR_RESET_BUTTON_OP:\r
- CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
-\r
+ //\r
+ // Create Statement\r
+ //\r
+ CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
CopyMem (&CurrentStatement->DefaultId, &((EFI_IFR_RESET_BUTTON *) OpCodeData)->DefaultId, sizeof (EFI_DEFAULT_ID));\r
break;\r
\r
CurrentExpression->Type = EFI_HII_EXPRESSION_DISABLE_IF;\r
InitializeListHead (&CurrentExpression->OpCodeListHead);\r
\r
- InScopeDisable = TRUE;\r
- OpCodeDisabled = FALSE;\r
+ if (CurrentForm != NULL) {\r
+ //\r
+ // This is DisableIf for Question, enqueue it to Form expression list\r
+ //\r
+ InsertTailList (&CurrentForm->ExpressionListHead, &CurrentExpression->Link);\r
+ }\r
+\r
+ mDisableExpression = CurrentExpression;\r
+ mInScopeDisable = TRUE;\r
+ OpCodeDisabled = FALSE;\r
\r
//\r
// Take a look at next OpCode to see whether current expression consists\r
// Vendor specific\r
//\r
case EFI_IFR_GUID_OP:\r
- if (CompareGuid (&gTianoHiiIfrGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
+ if (CompareGuid (&gEfiIfrTianoGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
//\r
// Tiano specific GUIDed opcodes\r
//\r
break;\r
\r
case EFI_IFR_EXTEND_OP_BANNER:\r
+ //\r
+ // By SubClass to get Banner Data from Front Page\r
+ //\r
if (FormSet->SubClass == EFI_FRONT_PAGE_SUBCLASS) {\r
CopyMem (\r
- &BannerData->Banner[((EFI_IFR_GUID_BANNER *) OpCodeData)->LineNumber][\r
+ &gBannerData->Banner[((EFI_IFR_GUID_BANNER *) OpCodeData)->LineNumber][\r
((EFI_IFR_GUID_BANNER *) OpCodeData)->Alignment],\r
&((EFI_IFR_GUID_BANNER *) OpCodeData)->Title,\r
sizeof (EFI_STRING_ID)\r
break;\r
\r
case EFI_IFR_DISABLE_IF_OP:\r
- InScopeDisable = FALSE;\r
+ mInScopeDisable = FALSE;\r
OpCodeDisabled = FALSE;\r
break;\r
\r
\r
default:\r
if (IsExpressionOpCode (ScopeOpCode)) {\r
- if (InScopeDisable) {\r
+ if (mInScopeDisable && CurrentForm == NULL) {\r
//\r
- // Evaluate DisableIf expression\r
+ // This is DisableIf expression for Form, it should be a constant expression\r
//\r
Status = EvaluateExpression (FormSet, CurrentForm, CurrentExpression);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
+ ASSERT (CurrentExpression != NULL);\r
if (CurrentExpression->Result.Type != EFI_IFR_TYPE_BOOLEAN) {\r
return EFI_INVALID_PARAMETER;\r
}\r