\r
**/\r
\r
-#include <PiDxe.h>\r
-\r
-#include <Protocol/HiiConfigAccess.h>\r
-#include <Protocol/HiiConfigRouting.h>\r
-#include <Protocol/HiiDatabase.h>\r
-#include <Protocol/HiiString.h>\r
-\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/HiiLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/PrintLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
-#include <Guid/MdeModuleHii.h>\r
-\r
-#include "UefiIfrParser.h"\r
+#include "HiiDatabase.h"\r
\r
#include "UefiIfrParserExpression.h"\r
\r
)\r
{\r
if (((Operand >= EFI_IFR_EQ_ID_VAL_OP) && (Operand <= EFI_IFR_NOT_OP)) ||\r
- ((Operand >= EFI_IFR_MATCH_OP) && (Operand <= EFI_IFR_SPAN_OP)) ||\r
- (Operand == EFI_IFR_CATENATE_OP)\r
- ) {\r
+ ((Operand >= EFI_IFR_MATCH_OP) && (Operand <= EFI_IFR_SET_OP)) ||\r
+ ((Operand >= EFI_IFR_EQUAL_OP) && (Operand <= EFI_IFR_SPAN_OP)) ||\r
+ (Operand == EFI_IFR_CATENATE_OP) ||\r
+ (Operand == EFI_IFR_TO_LOWER_OP) ||\r
+ (Operand == EFI_IFR_TO_UPPER_OP) ||\r
+ (Operand == EFI_IFR_MAP_OP) ||\r
+ (Operand == EFI_IFR_VERSION_OP) ||\r
+ (Operand == EFI_IFR_SECURITY_OP)) {\r
return TRUE;\r
} else {\r
return FALSE;\r
ONE_OF_OPTION_MAP_ENTRY *OneOfOptionMapEntry;\r
UINT8 OneOfType;\r
EFI_IFR_ONE_OF *OneOfOpcode;\r
+ HII_THUNK_CONTEXT *ThunkContext;\r
+ EFI_IFR_FORM_MAP_METHOD *MapMethod;\r
\r
- mInScopeSubtitle = FALSE;\r
- mInScopeSuppress = FALSE;\r
- mInScopeGrayOut = FALSE;\r
- CurrentDefault = NULL;\r
- CurrentOption = NULL;\r
+ mInScopeSubtitle = FALSE;\r
+ mInScopeSuppress = FALSE;\r
+ mInScopeGrayOut = FALSE;\r
+ CurrentDefault = NULL;\r
+ CurrentOption = NULL;\r
+ MapMethod = NULL;\r
+ ThunkContext = UefiHiiHandleToThunkContext ((CONST HII_THUNK_PRIVATE_DATA*) mHiiThunkPrivateData, FormSet->HiiHandle);\r
\r
//\r
// Set to a invalid value.\r
InsertTailList (&FormSet->FormListHead, &CurrentForm->Link);\r
break;\r
\r
+ case EFI_IFR_FORM_MAP_OP:\r
+ //\r
+ // Create a new Form Map for this FormSet\r
+ //\r
+ CurrentForm = AllocateZeroPool (sizeof (FORM_BROWSER_FORM));\r
+ CurrentForm->Signature = FORM_BROWSER_FORM_SIGNATURE;\r
+\r
+ InitializeListHead (&CurrentForm->StatementListHead);\r
+\r
+ CopyMem (&CurrentForm->FormId, &((EFI_IFR_FORM *) OpCodeData)->FormId, sizeof (UINT16));\r
+ MapMethod = (EFI_IFR_FORM_MAP_METHOD *) (OpCodeData + sizeof (EFI_IFR_FORM_MAP));\r
+\r
+ //\r
+ // FormMap Form must contain at least one Map Method.\r
+ //\r
+ if (((EFI_IFR_OP_HEADER *) OpCodeData)->Length < ((UINTN) (UINT8 *) (MapMethod + 1) - (UINTN) OpCodeData)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ //\r
+ // Try to find the standard form map method.\r
+ //\r
+ while (((UINTN) (UINT8 *) MapMethod - (UINTN) OpCodeData) < ((EFI_IFR_OP_HEADER *) OpCodeData)->Length) {\r
+ if (CompareGuid ((EFI_GUID *) (VOID *) &MapMethod->MethodIdentifier, &gEfiHiiStandardFormGuid)) {\r
+ CopyMem (&CurrentForm->FormTitle, &MapMethod->MethodTitle, sizeof (EFI_STRING_ID));\r
+ break;\r
+ }\r
+ MapMethod ++;\r
+ }\r
+ //\r
+ // If the standard form map method is not found, the first map method title will be used.\r
+ //\r
+ if (CurrentForm->FormTitle == 0) {\r
+ MapMethod = (EFI_IFR_FORM_MAP_METHOD *) (OpCodeData + sizeof (EFI_IFR_FORM_MAP));\r
+ CopyMem (&CurrentForm->FormTitle, &MapMethod->MethodTitle, sizeof (EFI_STRING_ID));\r
+ }\r
+\r
+ //\r
+ // Insert into Form list of this FormSet\r
+ //\r
+ InsertTailList (&FormSet->FormListHead, &CurrentForm->Link);\r
+ break;\r
+\r
//\r
// Storage\r
//\r
break;\r
\r
case EFI_IFR_VARSTORE_NAME_VALUE_OP:\r
- ASSERT (FALSE);\r
+ //\r
+ // Framework IFR doesn't support Name/Value VarStore opcode\r
+ //\r
+ if (ThunkContext != NULL && ThunkContext->ByFrameworkHiiNewPack) {\r
+ ASSERT (FALSE);\r
+ }\r
+\r
+ //\r
+ // Create a name/value Storage for this FormSet\r
+ //\r
+ Storage = CreateStorage (FormSet);\r
+ Storage->Type = EFI_HII_VARSTORE_NAME_VALUE;\r
+\r
+ CopyMem (&Storage->VarStoreId, &((EFI_IFR_VARSTORE_NAME_VALUE *) OpCodeData)->VarStoreId, sizeof (EFI_VARSTORE_ID));\r
+ CopyMem (&Storage->Guid, &((EFI_IFR_VARSTORE_NAME_VALUE *) OpCodeData)->Guid, sizeof (EFI_GUID));\r
\r
break;\r
\r
break;\r
\r
case EFI_IFR_RESET_BUTTON_OP:\r
- CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\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
break;\r
\r
case EFI_IFR_DISABLE_IF_OP:\r
- ASSERT (FALSE);\r
-\r
+ //\r
+ // Framework IFR doesn't support DisableIf opcode\r
+ //\r
+ if (ThunkContext != NULL && ThunkContext->ByFrameworkHiiNewPack) {\r
+ ASSERT (FALSE);\r
+ }\r
\r
//\r
// Expression\r
//\r
case EFI_IFR_VALUE_OP:\r
+ case EFI_IFR_READ_OP:\r
+ case EFI_IFR_WRITE_OP:\r
break;\r
\r
case EFI_IFR_RULE_OP:\r
break;\r
\r
case EFI_IFR_FORM_OP:\r
+ case EFI_IFR_FORM_MAP_OP:\r
ImageId = &CurrentForm->ImageId;\r
break;\r
\r
default:\r
break;\r
}\r
- } \r
- else if (CompareGuid ((EFI_GUID *)(VOID *)&OptionMap->Guid, &mFrameworkHiiCompatibilityGuid)) {\r
+ } else if (CompareGuid ((EFI_GUID *)(VOID *)&OptionMap->Guid, &mFrameworkHiiCompatibilityGuid)) {\r
if (OptionMap->ExtendOpCode == EFI_IFR_EXTEND_OP_OPTIONKEY) {\r
OneOfOptinMapEntryListHead = GetOneOfOptionMapEntryListHead (FormSet, OptionMap->QuestionId);\r
if (OneOfOptinMapEntryListHead == NULL) {\r
break;\r
\r
case EFI_IFR_FORM_OP:\r
+ case EFI_IFR_FORM_MAP_OP:\r
//\r
// End of Form\r
//\r