+ ConditionalExprCount = GetConditionalExpressionCount(ExpressForm);\r
+ if ( ConditionalExprCount > 0) {\r
+ //\r
+ // Form is inside of suppressif\r
+ //\r
+ CurrentForm->SuppressExpression = (FORM_EXPRESSION_LIST *) AllocatePool( \r
+ (UINTN) (sizeof(FORM_EXPRESSION_LIST) + ((ConditionalExprCount -1) * sizeof(FORM_EXPRESSION *))));\r
+ ASSERT (CurrentForm->SuppressExpression != NULL);\r
+ CurrentForm->SuppressExpression->Count = (UINTN) ConditionalExprCount;\r
+ CurrentForm->SuppressExpression->Signature = FORM_EXPRESSION_LIST_SIGNATURE;\r
+ CopyMem (CurrentForm->SuppressExpression->Expression, GetConditionalExpressionList(ExpressForm), (UINTN) (sizeof (FORM_EXPRESSION *) * ConditionalExprCount));\r
+ }\r
+\r
+ if (Scope != 0) {\r
+ //\r
+ // Enter scope of a Form, suppressif will be used for Question or Option\r
+ //\r
+ SuppressForQuestion = TRUE;\r
+ }\r
+\r
+ //\r
+ // Insert into Form list of this FormSet\r
+ //\r
+ InsertTailList (&FormSet->FormListHead, &CurrentForm->Link);\r
+ break;\r
+\r
+ case EFI_IFR_FORM_MAP_OP:\r
+ //\r
+ // Create a new Form for this FormSet\r
+ //\r
+ CurrentForm = AllocateZeroPool (sizeof (FORM_BROWSER_FORM));\r
+ ASSERT (CurrentForm != NULL);\r
+ CurrentForm->Signature = FORM_BROWSER_FORM_SIGNATURE;\r
+ CurrentForm->NvUpdateRequired = FALSE;\r
+ InitializeListHead (&CurrentForm->ExpressionListHead);\r
+ InitializeListHead (&CurrentForm->StatementListHead);\r
+ InitializeListHead (&CurrentForm->ConfigRequestHead);\r
+ CopyMem (&CurrentForm->FormId, &((EFI_IFR_FORM *) OpCodeData)->FormId, sizeof (UINT16));\r
+\r
+ MapMethod = (EFI_IFR_FORM_MAP_METHOD *) (OpCodeData + sizeof (EFI_IFR_FORM_MAP));\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
+ // 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
+ CurrentForm->FormType = STANDARD_MAP_FORM_TYPE;\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
+ ConditionalExprCount = GetConditionalExpressionCount(ExpressForm);\r
+ if ( ConditionalExprCount > 0) {\r
+ //\r
+ // Form is inside of suppressif\r
+ //\r
+ CurrentForm->SuppressExpression = (FORM_EXPRESSION_LIST *) AllocatePool( \r
+ (UINTN) (sizeof(FORM_EXPRESSION_LIST) + ((ConditionalExprCount -1) * sizeof(FORM_EXPRESSION *))));\r
+ ASSERT (CurrentForm->SuppressExpression != NULL);\r
+ CurrentForm->SuppressExpression->Count = (UINTN) ConditionalExprCount;\r
+ CurrentForm->SuppressExpression->Signature = FORM_EXPRESSION_LIST_SIGNATURE;\r
+ CopyMem (CurrentForm->SuppressExpression->Expression, GetConditionalExpressionList(ExpressForm), (UINTN) (sizeof (FORM_EXPRESSION *) * ConditionalExprCount));\r
+ }\r
+\r
+ if (Scope != 0) {\r
+ //\r
+ // Enter scope of a Form, suppressif will be used for Question or Option\r
+ //\r
+ SuppressForQuestion = TRUE;\r
+ }\r
+\r