\r
BOOLEAN mHiiPackageListUpdated = FALSE;\r
\r
+HII_VENDOR_DEVICE_PATH mUefiHiiVendorDevicePath = {\r
+ {\r
+ {\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
+ 0,\r
+ 0\r
+ },\r
+ {\r
+ END_DEVICE_PATH_TYPE,\r
+ END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
+ { \r
+ (UINT8) (sizeof (EFI_DEVICE_PATH_PROTOCOL)),\r
+ (UINT8) ((sizeof (EFI_DEVICE_PATH_PROTOCOL)) >> 8)\r
+ }\r
+ }\r
+};\r
+\r
CONFIG_ACCESS_PRIVATE gConfigAccessPrivateTempate = {\r
CONFIG_ACCESS_PRIVATE_SIGNATURE,\r
{\r
{\r
EFI_STATUS Status;\r
CONFIG_ACCESS_PRIVATE *ConfigAccessInstance;\r
+ HII_VENDOR_DEVICE_PATH *HiiVendorPath;\r
\r
ASSERT (ThunkContext->IfrPackageCount != 0);\r
\r
- Status = HiiLibCreateHiiDriverHandle (&ThunkContext->UefiHiiDriverHandle);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
ConfigAccessInstance = AllocateCopyPool (\r
sizeof (CONFIG_ACCESS_PRIVATE), \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
+ HiiVendorPath,\r
&gEfiHiiConfigAccessProtocolGuid,\r
&ConfigAccessInstance->ConfigAccessProtocol,\r
NULL\r
{\r
EFI_STATUS Status;\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
- \r
- HiiLibDestroyHiiDriverHandle (ThunkContext->UefiHiiDriverHandle);\r
+ HII_VENDOR_DEVICE_PATH *HiiVendorPath;\r
\r
Status = gBS->HandleProtocol (\r
ThunkContext->UefiHiiDriverHandle,\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
- Status = gBS->UninstallProtocolInterface (\r
+ Status = gBS->HandleProtocol (\r
+ ThunkContext->UefiHiiDriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ (VOID **) &HiiVendorPath\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
ThunkContext->UefiHiiDriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ HiiVendorPath,\r
&gEfiHiiConfigAccessProtocolGuid,\r
- ConfigAccess\r
+ ConfigAccess,\r
+ NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r