]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c
HII Library Class interface refine.
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / DeviceMngr / DeviceManager.c
index 9492de441c39582f1964d78d7ea788998ca9aa2b..920a0506306851ee3ec2fab8d396a04eb7a83511 100644 (file)
@@ -36,6 +36,31 @@ DEVICE_MANAGER_MENU_ITEM  mDeviceManagerMenuItemTable[] = {
   { STRING_TOKEN (STR_OTHER_DEVICE),    EFI_OTHER_DEVICE_CLASS }\r
 };\r
 \r
+HII_VENDOR_DEVICE_PATH  mDeviceManagerHiiVendorDevicePath = {\r
+  {\r
+    {\r
+      HARDWARE_DEVICE_PATH,\r
+      HW_VENDOR_DP,\r
+      {\r
+        (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
+        (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+      }\r
+    },\r
+    //\r
+    // {102579A0-3686-466e-ACD8-80C087044F4A}\r
+    //\r
+    { 0x102579a0, 0x3686, 0x466e, { 0xac, 0xd8, 0x80, 0xc0, 0x87, 0x4, 0x4f, 0x4a } }\r
+  },\r
+  {\r
+    END_DEVICE_PATH_TYPE,\r
+    END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
+    { \r
+      (UINT8) (END_DEVICE_PATH_LENGTH),\r
+      (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)\r
+    }\r
+  }\r
+};\r
+\r
 #define MENU_ITEM_NUM  \\r
   (sizeof (mDeviceManagerMenuItemTable) / sizeof (DEVICE_MANAGER_MENU_ITEM))\r
 \r
@@ -87,8 +112,8 @@ DeviceManagerCallback (
 \r
   This function registers HII packages to HII database.\r
 \r
-  @retval EFI_SUCCESS This function complete successfully.\r
-  @return Other value if failed to register HII packages.\r
+  @retval  EFI_SUCCESS           HII packages for the Device Manager were registered successfully.\r
+  @retval  EFI_OUT_OF_RESOURCES  HII packages for the Device Manager failed to be registered.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -97,41 +122,35 @@ InitializeDeviceManager (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
 \r
   //\r
-  // Create driver handle used by HII database\r
+  // Install Device Path Protocol and Config Access protocol to driver handle\r
   //\r
-  Status = HiiLibCreateHiiDriverHandle (&gDeviceManagerPrivate.DriverHandle);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Install Config Access protocol to driver handle\r
-  //\r
-  Status = gBS->InstallProtocolInterface (\r
+  Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &gDeviceManagerPrivate.DriverHandle,\r
+                  &gEfiDevicePathProtocolGuid,\r
+                  &mDeviceManagerHiiVendorDevicePath,\r
                   &gEfiHiiConfigAccessProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &gDeviceManagerPrivate.ConfigAccess\r
+                  &gDeviceManagerPrivate.ConfigAccess,\r
+                  NULL\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (2, &mDeviceManagerGuid, DeviceManagerVfrBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           gDeviceManagerPrivate.DriverHandle,\r
-                           &gDeviceManagerPrivate.HiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
-\r
+  gDeviceManagerPrivate.HiiHandle = HiiAddPackages (\r
+                                      &mDeviceManagerGuid,\r
+                                      gDeviceManagerPrivate.DriverHandle,\r
+                                      DeviceManagerVfrBin,\r
+                                      BdsDxeStrings,\r
+                                      NULL\r
+                                      );\r
+  if (gDeviceManagerPrivate.HiiHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+  } else {\r
+    Status = EFI_SUCCESS;\r
+  }\r
   return Status;\r
 }\r
 \r
@@ -155,23 +174,18 @@ CallDeviceManager (
   EFI_STATUS                  Status;\r
   UINTN                       Count;\r
   UINTN                       Index;\r
-  CHAR16                      *String;\r
-  UINTN                       StringLength;\r
+  EFI_STRING                  String;\r
   EFI_HII_UPDATE_DATA         UpdateData[MENU_ITEM_NUM];\r
   EFI_STRING_ID               Token;\r
   EFI_STRING_ID               TokenHelp;\r
   EFI_HII_HANDLE              *HiiHandles;\r
-  UINTN                       HandleBufferLength;\r
-  UINTN                       NumberOfHiiHandles;\r
   EFI_HII_HANDLE              HiiHandle;\r
   UINT16                      FormSetClass;\r
   EFI_STRING_ID               FormSetTitle;\r
   EFI_STRING_ID               FormSetHelp;\r
   EFI_BROWSER_ACTION_REQUEST  ActionRequest;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
 \r
   HiiHandles          = NULL;\r
-  HandleBufferLength  = 0;\r
 \r
   Status        = EFI_SUCCESS;\r
   gCallbackKey  = 0;\r
@@ -202,37 +216,30 @@ CallDeviceManager (
   //\r
   // Get all the Hii handles\r
   //\r
-  Status = HiiLibGetHiiHandles (&HandleBufferLength, &HiiHandles);\r
-  ASSERT_EFI_ERROR (Status && (HiiHandles != NULL));\r
+  HiiHandles = HiiGetHiiHandles (NULL);\r
+  ASSERT (HiiHandles != NULL);\r
 \r
   HiiHandle = gDeviceManagerPrivate.HiiHandle;\r
 \r
-  StringLength  = 0x1000;\r
-  String        = AllocateZeroPool (StringLength);\r
-  ASSERT (String != NULL);\r
-\r
   //\r
   // Search for formset of each class type\r
   //\r
-  NumberOfHiiHandles = HandleBufferLength / sizeof (EFI_HII_HANDLE);\r
-  for (Index = 0; Index < NumberOfHiiHandles; Index++) {\r
+  for (Index = 0; HiiHandles[Index] != NULL; Index++) {\r
     IfrLibExtractClassFromHiiHandle (HiiHandles[Index], &FormSetClass, &FormSetTitle, &FormSetHelp);\r
 \r
     if (FormSetClass == EFI_NON_DEVICE_CLASS) {\r
       continue;\r
     }\r
 \r
-    Token = 0;\r
-    *String = 0;\r
-    StringLength = 0x1000;\r
-    HiiLibGetString (HiiHandles[Index], FormSetTitle, String, &StringLength);\r
-    HiiLibNewString (HiiHandle, &Token, String);\r
+    String = HiiGetString (HiiHandles[Index], FormSetTitle, NULL);\r
+    ASSERT (String != NULL);\r
+    Token = HiiSetString (HiiHandle, 0, String, NULL);\r
+    FreePool (String);\r
 \r
-    TokenHelp = 0;\r
-    *String = 0;\r
-    StringLength = 0x1000;\r
-    HiiLibGetString (HiiHandles[Index], FormSetHelp, String, &StringLength);\r
-    HiiLibNewString (HiiHandle, &TokenHelp, String);\r
+    String = HiiGetString (HiiHandles[Index], FormSetHelp, NULL);\r
+    ASSERT (String != NULL);\r
+    TokenHelp = HiiSetString (HiiHandle, 0, String, NULL);\r
+    FreePool (String);\r
 \r
     for (Count = 0; Count < MENU_ITEM_NUM; Count++) {\r
       if (FormSetClass & mDeviceManagerMenuItemTable[Count].Class) {\r
@@ -247,7 +254,6 @@ CallDeviceManager (
       }\r
     }\r
   }\r
-  FreePool (String);\r
 \r
   for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
     //\r
@@ -308,16 +314,20 @@ CallDeviceManager (
   //\r
   // Cleanup dynamic created strings in HII database by reinstall the packagelist\r
   //\r
-  gHiiDatabase->RemovePackageList (gHiiDatabase, HiiHandle);\r
-  PackageList = HiiLibPreparePackageList (2, &mDeviceManagerGuid, DeviceManagerVfrBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           gDeviceManagerPrivate.DriverHandle,\r
-                           &gDeviceManagerPrivate.HiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
+  HiiRemovePackages (HiiHandle);\r
+\r
+  gDeviceManagerPrivate.HiiHandle = HiiAddPackages (\r
+                                      &mDeviceManagerGuid,\r
+                                      gDeviceManagerPrivate.DriverHandle,\r
+                                      DeviceManagerVfrBin,\r
+                                      BdsDxeStrings,\r
+                                      NULL\r
+                                      );\r
+  if (gDeviceManagerPrivate.HiiHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+  } else {\r
+    Status = EFI_SUCCESS;\r
+  }\r
 \r
   for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
     FreePool (UpdateData[Index].Data);\r