]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
Update Browser to provide the customization possibilities.
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / IfrParse.c
index 2464aebd095b0b561a2c9f302d52ae1dfabde546..1c3ab2bedca4e1e45b6160c7b1ce027827a4501e 100644 (file)
@@ -16,7 +16,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 UINT16           mStatementIndex;\r
 UINT16           mExpressionOpCodeIndex;\r
-\r
+EFI_QUESTION_ID  mUsedQuestionId;\r
 BOOLEAN          mInScopeSubtitle;\r
 extern LIST_ENTRY      gBrowserStorageList;\r
 /**\r
@@ -42,9 +42,9 @@ CreateStatement (
 \r
   if (Form == NULL) {\r
     //\r
-    // We are currently not in a Form Scope, so just skip this Statement\r
+    // Only guid op may out side the form level.\r
     //\r
-    return NULL;\r
+    ASSERT (((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_GUID_OP);\r
   }\r
 \r
   Statement = &FormSet->StatementBuffer[mStatementIndex];\r
@@ -58,6 +58,7 @@ CreateStatement (
   Statement->Signature = FORM_BROWSER_STATEMENT_SIGNATURE;\r
 \r
   Statement->Operand = ((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode;\r
+  Statement->OpCode  = (EFI_IFR_OP_HEADER *) OpCodeData;\r
 \r
   StatementHdr = (EFI_IFR_STATEMENT_HEADER *) (OpCodeData + sizeof (EFI_IFR_OP_HEADER));\r
   CopyMem (&Statement->Prompt, &StatementHdr->Prompt, sizeof (EFI_STRING_ID));\r
@@ -82,8 +83,11 @@ CreateStatement (
   //\r
   // Insert this Statement into current Form\r
   //\r
-  InsertTailList (&Form->StatementListHead, &Statement->Link);\r
-\r
+  if (Form == NULL) {\r
+    InsertTailList (&FormSet->StatementListOSF, &Statement->Link);\r
+  } else {\r
+    InsertTailList (&Form->StatementListHead, &Statement->Link);\r
+  }\r
   return Statement;\r
 }\r
 \r
@@ -1133,6 +1137,7 @@ ParseOpCodes (
   CountOpCodes (FormSet, &NumberOfStatement, &NumberOfExpression);\r
 \r
   mStatementIndex = 0;\r
+  mUsedQuestionId = 1;\r
   FormSet->StatementBuffer = AllocateZeroPool (NumberOfStatement * sizeof (FORM_BROWSER_STATEMENT));\r
   if (FormSet->StatementBuffer == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
@@ -1144,6 +1149,7 @@ ParseOpCodes (
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
+  InitializeListHead (&FormSet->StatementListOSF);\r
   InitializeListHead (&FormSet->StorageListHead);\r
   InitializeListHead (&FormSet->DefaultStoreListHead);\r
   InitializeListHead (&FormSet->FormListHead);\r
@@ -1502,7 +1508,6 @@ ParseOpCodes (
       InitializeListHead (&CurrentForm->ConfigRequestHead);\r
 \r
       CurrentForm->FormType = STANDARD_MAP_FORM_TYPE;\r
-      CurrentForm->NvUpdateRequired = FALSE;\r
       CopyMem (&CurrentForm->FormId,    &((EFI_IFR_FORM *) OpCodeData)->FormId,    sizeof (UINT16));\r
       CopyMem (&CurrentForm->FormTitle, &((EFI_IFR_FORM *) OpCodeData)->FormTitle, sizeof (EFI_STRING_ID));\r
 \r
@@ -1539,7 +1544,6 @@ ParseOpCodes (
       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
@@ -1653,7 +1657,7 @@ ParseOpCodes (
       ASSERT (CurrentStatement != NULL);\r
 \r
       CurrentStatement->Flags = ((EFI_IFR_SUBTITLE *) OpCodeData)->Flags;\r
-\r
+      CurrentStatement->FakeQuestionId = mUsedQuestionId++;\r
       if (Scope != 0) {\r
         mInScopeSubtitle = TRUE;\r
       }\r
@@ -1662,13 +1666,14 @@ ParseOpCodes (
     case EFI_IFR_TEXT_OP:\r
       CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
       ASSERT (CurrentStatement != NULL);\r
-\r
+      CurrentStatement->FakeQuestionId = mUsedQuestionId++;\r
       CopyMem (&CurrentStatement->TextTwo, &((EFI_IFR_TEXT *) OpCodeData)->TextTwo, sizeof (EFI_STRING_ID));\r
       break;\r
 \r
     case EFI_IFR_RESET_BUTTON_OP:\r
       CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
       ASSERT (CurrentStatement != NULL);\r
+      CurrentStatement->FakeQuestionId = mUsedQuestionId++;\r
       CopyMem (&CurrentStatement->DefaultId, &((EFI_IFR_RESET_BUTTON *) OpCodeData)->DefaultId, sizeof (EFI_DEFAULT_ID));\r
       break;\r
 \r
@@ -1913,6 +1918,7 @@ ParseOpCodes (
       CurrentOption = AllocateZeroPool (sizeof (QUESTION_OPTION));\r
       ASSERT (CurrentOption != NULL);\r
       CurrentOption->Signature = QUESTION_OPTION_SIGNATURE;\r
+      CurrentOption->OpCode    = (EFI_IFR_ONE_OF_OPTION *) OpCodeData;\r
 \r
       CurrentOption->Flags = ((EFI_IFR_ONE_OF_OPTION *) OpCodeData)->Flags;\r
       CurrentOption->Value.Type = ((EFI_IFR_ONE_OF_OPTION *) OpCodeData)->Type;\r
@@ -2270,45 +2276,8 @@ ParseOpCodes (
     //\r
     // Vendor specific\r
     //\r
-    case EFI_IFR_GUID_OP:\r
-      if (CompareGuid (&gEfiIfrTianoGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
-        //\r
-        // Tiano specific GUIDed opcodes\r
-        //\r
-        switch (((EFI_IFR_GUID_LABEL *) OpCodeData)->ExtendOpCode) {\r
-        case EFI_IFR_EXTEND_OP_LABEL:\r
-          //\r
-          // just ignore label\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
-              &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
-              );\r
-          }\r
-          break;\r
-\r
-        case EFI_IFR_EXTEND_OP_CLASS:\r
-          CopyMem (&FormSet->Class, &((EFI_IFR_GUID_CLASS *) OpCodeData)->Class, sizeof (UINT16));\r
-          break;\r
-\r
-        case EFI_IFR_EXTEND_OP_SUBCLASS:\r
-          CopyMem (&FormSet->SubClass, &((EFI_IFR_GUID_SUBCLASS *) OpCodeData)->SubClass, sizeof (UINT16));\r
-          break;\r
-\r
-        default:\r
-          break;\r
-        }\r
-      }\r
-\r
+    case EFI_IFR_GUID_OP:     \r
+      CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
       break;\r
 \r
     //\r