]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Produce the same HiiVendor device path for each Pack that causes Framework HII NewPac...
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 9 Apr 2009 05:03:21 +0000 (05:03 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 9 Apr 2009 05:03:21 +0000 (05:03 +0000)
Fix this bug to produce the difference HiiVendor device path for each Pack to support framework HII NewPack service.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8041 6f19259b-4bc3-4df7-8a09-765794883524

EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/HiiDatabase.h

index 341d31cb1ccef0c53885b58e83ba1aef454a616e..16630b4b7cccd17650f396df37597b1aa19651c7 100644 (file)
@@ -22,24 +22,25 @@ BOOLEAN            mHiiPackageListUpdated = FALSE;
 HII_VENDOR_DEVICE_PATH  mUefiHiiVendorDevicePath = {\r
   {\r
     {\r
 HII_VENDOR_DEVICE_PATH  mUefiHiiVendorDevicePath = {\r
   {\r
     {\r
-      HARDWARE_DEVICE_PATH,\r
-      HW_VENDOR_DP,\r
       {\r
       {\r
-        (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
-        (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
-      }\r
+        HARDWARE_DEVICE_PATH,\r
+        HW_VENDOR_DP,\r
+        {\r
+          (UINT8) (sizeof (HII_VENDOR_DEVICE_PATH_NODE)),\r
+          (UINT8) ((sizeof (HII_VENDOR_DEVICE_PATH_NODE)) >> 8)\r
+        }\r
+      },\r
+      EFI_CALLER_ID_GUID\r
     },\r
     },\r
-    //\r
-    // {2A1F1827-03E2-4b2f-83DE-89B6073A0182}\r
-    //\r
-    { 0x2a1f1827, 0x3e2, 0x4b2f, { 0x83, 0xde, 0x89, 0xb6, 0x7, 0x3a, 0x1, 0x82 } }\r
+    0,\r
+    0\r
   },\r
   {\r
     END_DEVICE_PATH_TYPE,\r
     END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
     { \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
+      (UINT8) (sizeof (EFI_DEVICE_PATH_PROTOCOL)),\r
+      (UINT8) ((sizeof (EFI_DEVICE_PATH_PROTOCOL)) >> 8)\r
     }\r
   }\r
 };\r
     }\r
   }\r
 };\r
@@ -220,6 +221,7 @@ InstallDefaultConfigAccessProtocol (
 {\r
   EFI_STATUS                                  Status;\r
   CONFIG_ACCESS_PRIVATE                       *ConfigAccessInstance;\r
 {\r
   EFI_STATUS                                  Status;\r
   CONFIG_ACCESS_PRIVATE                       *ConfigAccessInstance;\r
+  HII_VENDOR_DEVICE_PATH                      *HiiVendorPath;\r
 \r
   ASSERT (ThunkContext->IfrPackageCount != 0);\r
 \r
 \r
   ASSERT (ThunkContext->IfrPackageCount != 0);\r
 \r
@@ -228,11 +230,23 @@ InstallDefaultConfigAccessProtocol (
                            &gConfigAccessPrivateTempate\r
                            );\r
   ASSERT (ConfigAccessInstance != NULL);\r
                            &gConfigAccessPrivateTempate\r
                            );\r
   ASSERT (ConfigAccessInstance != NULL);\r
-  \r
+\r
+  //\r
+  // Use memory address as unique ID to distinguish from different device paths\r
+  // This function may be called multi times by the framework HII driver.\r
+  //\r
+  HiiVendorPath = AllocateCopyPool (\r
+                           sizeof (HII_VENDOR_DEVICE_PATH), \r
+                           &mUefiHiiVendorDevicePath\r
+                           );\r
+  ASSERT (HiiVendorPath != NULL);\r
+\r
+  HiiVendorPath->Node.UniqueId = (UINT64) ((UINTN) HiiVendorPath);\r
+\r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
           &ThunkContext->UefiHiiDriverHandle,\r
           &gEfiDevicePathProtocolGuid,          \r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
           &ThunkContext->UefiHiiDriverHandle,\r
           &gEfiDevicePathProtocolGuid,          \r
-          &mUefiHiiVendorDevicePath,\r
+          HiiVendorPath,\r
           &gEfiHiiConfigAccessProtocolGuid,\r
           &ConfigAccessInstance->ConfigAccessProtocol,\r
           NULL\r
           &gEfiHiiConfigAccessProtocolGuid,\r
           &ConfigAccessInstance->ConfigAccessProtocol,\r
           NULL\r
index 94b79e5e2d09f95fdb7ec99c7bd497d981fd4999..3d56a41d77f7c75c874f48a0574873451cdd35b3 100644 (file)
@@ -45,7 +45,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/UefiRuntimeServicesTableLib.h>\r
 #include <Library/HiiLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/UefiRuntimeServicesTableLib.h>\r
 #include <Library/HiiLib.h>\r
-#include <Library/DevicePathLib.h>\r
 #include <Library/UefiLib.h>\r
 \r
 #include <Library/IfrSupportLib.h>\r
 #include <Library/UefiLib.h>\r
 \r
 #include <Library/IfrSupportLib.h>\r
@@ -186,15 +185,22 @@ typedef struct {
 } BUFFER_STORAGE_ENTRY;\r
 \r
 #pragma pack(1)\r
 } BUFFER_STORAGE_ENTRY;\r
 \r
 #pragma pack(1)\r
+///\r
+/// HII specific Vendor Device Path Node definition.\r
+///\r
+typedef struct {\r
+  VENDOR_DEVICE_PATH             VendorDevicePath;\r
+  UINT32                         Reserved;\r
+  UINT64                         UniqueId;\r
+} HII_VENDOR_DEVICE_PATH_NODE;\r
 \r
 ///\r
 /// HII specific Vendor Device Path definition.\r
 ///\r
 typedef struct {\r
 \r
 ///\r
 /// HII specific Vendor Device Path definition.\r
 ///\r
 typedef struct {\r
-  VENDOR_DEVICE_PATH             VendorDevicePath;\r
+  HII_VENDOR_DEVICE_PATH_NODE    Node;\r
   EFI_DEVICE_PATH_PROTOCOL       End;\r
 } HII_VENDOR_DEVICE_PATH;\r
   EFI_DEVICE_PATH_PROTOCOL       End;\r
 } HII_VENDOR_DEVICE_PATH;\r
-\r
 #pragma pack()\r
 \r
 #define CONFIG_ACCESS_PRIVATE_SIGNATURE            SIGNATURE_32 ('H', 'T', 'c', 'a')\r
 #pragma pack()\r
 \r
 #define CONFIG_ACCESS_PRIVATE_SIGNATURE            SIGNATURE_32 ('H', 'T', 'c', 'a')\r