]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
Update SetupBrowserDxe and BdsDxe to use an internal string for prompting string...
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Setup.c
index e617f2f367b12c39cc3ca2132b7b2a2ad7bb2de3..15d4af3cf1af843018dbc4eafa6314da5c2044b0 100644 (file)
@@ -29,8 +29,8 @@ EFI_HII_DATABASE_PROTOCOL         *mHiiDatabase;
 EFI_HII_STRING_PROTOCOL           *mHiiString;\r
 EFI_HII_CONFIG_ROUTING_PROTOCOL   *mHiiConfigRouting;\r
 \r
-BANNER_DATA           *BannerData;\r
-EFI_HII_HANDLE        FrontPageHandle;\r
+BANNER_DATA           *gBannerData;\r
+EFI_HII_HANDLE        gFrontPageHandle;\r
 UINTN                 gClassOfVfr;\r
 UINTN                 gFunctionKeySetting;\r
 BOOLEAN               gResetRequired;\r
@@ -76,6 +76,8 @@ CHAR16            *gAdjustNumber;
 CHAR16            *gSaveChanges;\r
 CHAR16            *gOptionMismatch;\r
 \r
+CHAR16            *mUnknownString = L"!";\r
+\r
 CHAR16            gPromptBlockWidth;\r
 CHAR16            gOptionBlockWidth;\r
 CHAR16            gHelpBlockWidth;\r
@@ -268,7 +270,7 @@ SendForm (
   InitializeBrowserStrings ();\r
 \r
   gFunctionKeySetting = DEFAULT_FUNCTION_KEY_SETTING;\r
-  gClassOfVfr         = EFI_SETUP_APPLICATION_SUBCLASS;\r
+  gClassOfVfr         = FORMSET_CLASS_PLATFORM_SETUP;\r
 \r
   //\r
   // Ensure we are in Text mode\r
@@ -525,7 +527,6 @@ InitializeSetup (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
 \r
   //\r
   // Locate required Hii relative protocols\r
@@ -554,21 +555,19 @@ InitializeSetup (
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (1, &gSetupBrowserGuid, SetupBrowserStrings);\r
-  ASSERT (PackageList != NULL);\r
-  Status = mHiiDatabase->NewPackageList (\r
-                           mHiiDatabase,\r
-                           PackageList,\r
-                           ImageHandle,\r
-                           &gHiiHandle\r
-                           );\r
-  ASSERT_EFI_ERROR (Status);\r
+  gHiiHandle = HiiAddPackages (\r
+                 &gSetupBrowserGuid,\r
+                 ImageHandle,\r
+                 SetupBrowserStrings,\r
+                 NULL\r
+                 );\r
+  ASSERT (gHiiHandle != NULL);\r
 \r
   //\r
   // Initialize Driver private data\r
   //\r
-  BannerData = AllocateZeroPool (sizeof (BANNER_DATA));\r
-  ASSERT (BannerData != NULL);\r
+  gBannerData = AllocateZeroPool (sizeof (BANNER_DATA));\r
+  ASSERT (gBannerData != NULL);\r
 \r
   //\r
   // Install FormBrowser2 protocol\r
@@ -603,11 +602,9 @@ NewString (
   )\r
 {\r
   EFI_STRING_ID  StringId;\r
-  EFI_STATUS     Status;\r
 \r
-  StringId = 0;\r
-  Status = HiiLibNewString (HiiHandle, &StringId, String);\r
-  ASSERT_EFI_ERROR (Status);\r
+  StringId = HiiSetString (HiiHandle, 0, String, NULL);\r
+  ASSERT (StringId != 0);\r
 \r
   return StringId;\r
 }\r
@@ -631,7 +628,8 @@ DeleteString (
   CHAR16  NullChar;\r
 \r
   NullChar = CHAR_NULL;\r
-  return HiiLibSetString (HiiHandle, StringId, &NullChar);\r
+  HiiSetString (HiiHandle, StringId, &NullChar, NULL);\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 \r
@@ -651,29 +649,14 @@ GetToken (
   IN  EFI_HII_HANDLE               HiiHandle\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
-  CHAR16      *String;\r
-  UINTN       BufferLength;\r
+  EFI_STRING  String;\r
 \r
-  //\r
-  // Set default string size assumption at no more than 256 bytes\r
-  //\r
-  BufferLength = 0x100;\r
-  String = AllocateZeroPool (BufferLength);\r
-  ASSERT (String != NULL);\r
-\r
-  Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
-\r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    FreePool (String);\r
-    String = AllocateZeroPool (BufferLength);\r
+  String = HiiGetString (HiiHandle, Token, NULL);\r
+  if (String == NULL) {\r
+    String = AllocateCopyPool (sizeof (mUnknownString), mUnknownString);\r
     ASSERT (String != NULL);\r
-\r
-    Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
   }\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  return String;\r
+  return (CHAR16 *) String;\r
 }\r
 \r
 \r
@@ -1179,7 +1162,7 @@ GetQuestionValue (
             if ((Index & 1) == 0) {\r
               Dst [Index/2] = DigitUint8;\r
             } else {\r
-              Dst [Index/2] = (UINT8) ((Dst [Index/2] << 4) + DigitUint8);\r
+              Dst [Index/2] = (UINT8) ((DigitUint8 << 4) + Dst [Index/2]);\r
             }\r
           }\r
         }\r
@@ -1288,7 +1271,7 @@ GetQuestionValue (
           if ((Index & 1) == 0) {\r
             Dst [Index/2] = DigitUint8;\r
           } else {\r
-            Dst [Index/2] = (UINT8) ((Dst [Index/2] << 4) + DigitUint8);\r
+            Dst [Index/2] = (UINT8) ((DigitUint8 << 4) + Dst [Index/2]);\r
           }\r
         }\r
       }\r
@@ -1896,21 +1879,16 @@ GetQuestionDefault (
   // For Questions without default\r
   //\r
   switch (Question->Operand) {\r
-  case EFI_IFR_NUMERIC_OP:\r
-    //\r
-    // Take minimal value as numeric's default value\r
-    //\r
-    HiiValue->Value.u64 = Question->Minimum;\r
-    break;\r
-\r
   case EFI_IFR_ONE_OF_OP:\r
     //\r
     // Take first oneof option as oneof's default value\r
     //\r
-    Link = GetFirstNode (&Question->OptionListHead);\r
-    if (!IsNull (&Question->OptionListHead, Link)) {\r
-      Option = QUESTION_OPTION_FROM_LINK (Link);\r
-      CopyMem (HiiValue, &Option->Value, sizeof (EFI_HII_VALUE));\r
+    if (ValueToOption (Question, HiiValue) == NULL) {    \r
+      Link = GetFirstNode (&Question->OptionListHead);\r
+      if (!IsNull (&Question->OptionListHead, Link)) {\r
+        Option = QUESTION_OPTION_FROM_LINK (Link);\r
+        CopyMem (HiiValue, &Option->Value, sizeof (EFI_HII_VALUE));\r
+      }\r
     }\r
     break;\r
 \r
@@ -1970,11 +1948,11 @@ ExtractFormDefault (
     Link = GetNextNode (&Form->StatementListHead, Link);\r
 \r
     //\r
-    // If Question is suppressed, don't reset it to default\r
+    // If Question is disabled, don't reset it to default\r
     //\r
-    if (Question->SuppressExpression != NULL) {\r
-      Status = EvaluateExpression (FormSet, Form, Question->SuppressExpression);\r
-      if (!EFI_ERROR (Status) && Question->SuppressExpression->Result.Value.b) {\r
+    if (Question->DisableExpression != NULL) {\r
+      Status = EvaluateExpression (FormSet, Form, Question->DisableExpression);\r
+      if (!EFI_ERROR (Status) && Question->DisableExpression->Result.Value.b) {\r
         continue;\r
       }\r
     }\r
@@ -2189,6 +2167,10 @@ GetIfrBinaryData (
   BOOLEAN                      ReturnDefault;\r
   UINT32                       PackageListLength;\r
   EFI_HII_PACKAGE_HEADER       PackageHeader;\r
+  UINT8                        Index;\r
+  UINT8                        NumberOfClassGuid;\r
+  BOOLEAN                      IsSetupClassGuid;\r
+  EFI_GUID                     *ClassGuid;\r
 \r
   OpCodeData = NULL;\r
   Package = NULL;\r
@@ -2244,7 +2226,21 @@ GetIfrBinaryData (
           // Check whether return default FormSet\r
           //\r
           if (ReturnDefault) {\r
-            break;\r
+            //\r
+            // Check ClassGuid of formset OpCode\r
+            //\r
+            IsSetupClassGuid  = FALSE;\r
+            NumberOfClassGuid = (UINT8) (((EFI_IFR_FORM_SET *) OpCodeData)->Flags & 0x3);\r
+            ClassGuid         = (EFI_GUID *) (OpCodeData + sizeof (EFI_IFR_FORM_SET));\r
+            for (Index = 0; Index < NumberOfClassGuid; Index++) {\r
+              if (CompareGuid (ClassGuid + Index, &gEfiHiiPlatformSetupFormsetGuid)) {\r
+                IsSetupClassGuid = TRUE;\r
+                break;\r
+              }\r
+            }\r
+            if (IsSetupClassGuid) {\r
+              break;\r
+            }\r
           }\r
 \r
           //\r
@@ -2363,9 +2359,10 @@ InitializeFormSet (
     return Status;\r
   }\r
 \r
-  gClassOfVfr = FormSet->SubClass;\r
-  if (gClassOfVfr == EFI_FRONT_PAGE_SUBCLASS) {\r
-    FrontPageHandle = FormSet->HiiHandle;\r
+  gClassOfVfr = FORMSET_CLASS_PLATFORM_SETUP;\r
+  if (FormSet->SubClass == EFI_FRONT_PAGE_SUBCLASS) {\r
+    gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;\r
+    gFrontPageHandle = FormSet->HiiHandle;\r
   }\r
 \r
   //\r