summaryrefslogtreecommitdiffstats
path: root/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c
diff options
context:
space:
mode:
Diffstat (limited to 'EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c')
-rw-r--r--EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c b/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c
index 341d31cb1c..16630b4b7c 100644
--- a/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c
+++ b/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c
@@ -22,24 +22,25 @@ BOOLEAN mHiiPackageListUpdated = FALSE;
HII_VENDOR_DEVICE_PATH mUefiHiiVendorDevicePath = {
{
{
- HARDWARE_DEVICE_PATH,
- HW_VENDOR_DP,
{
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
- }
+ HARDWARE_DEVICE_PATH,
+ HW_VENDOR_DP,
+ {
+ (UINT8) (sizeof (HII_VENDOR_DEVICE_PATH_NODE)),
+ (UINT8) ((sizeof (HII_VENDOR_DEVICE_PATH_NODE)) >> 8)
+ }
+ },
+ EFI_CALLER_ID_GUID
},
- //
- // {2A1F1827-03E2-4b2f-83DE-89B6073A0182}
- //
- { 0x2a1f1827, 0x3e2, 0x4b2f, { 0x83, 0xde, 0x89, 0xb6, 0x7, 0x3a, 0x1, 0x82 } }
+ 0,
+ 0
},
{
END_DEVICE_PATH_TYPE,
END_ENTIRE_DEVICE_PATH_SUBTYPE,
{
- (UINT8) (END_DEVICE_PATH_LENGTH),
- (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)
+ (UINT8) (sizeof (EFI_DEVICE_PATH_PROTOCOL)),
+ (UINT8) ((sizeof (EFI_DEVICE_PATH_PROTOCOL)) >> 8)
}
}
};
@@ -220,6 +221,7 @@ InstallDefaultConfigAccessProtocol (
{
EFI_STATUS Status;
CONFIG_ACCESS_PRIVATE *ConfigAccessInstance;
+ HII_VENDOR_DEVICE_PATH *HiiVendorPath;
ASSERT (ThunkContext->IfrPackageCount != 0);
@@ -228,11 +230,23 @@ InstallDefaultConfigAccessProtocol (
&gConfigAccessPrivateTempate
);
ASSERT (ConfigAccessInstance != NULL);
-
+
+ //
+ // Use memory address as unique ID to distinguish from different device paths
+ // This function may be called multi times by the framework HII driver.
+ //
+ HiiVendorPath = AllocateCopyPool (
+ sizeof (HII_VENDOR_DEVICE_PATH),
+ &mUefiHiiVendorDevicePath
+ );
+ ASSERT (HiiVendorPath != NULL);
+
+ HiiVendorPath->Node.UniqueId = (UINT64) ((UINTN) HiiVendorPath);
+
Status = gBS->InstallMultipleProtocolInterfaces (
&ThunkContext->UefiHiiDriverHandle,
&gEfiDevicePathProtocolGuid,
- &mUefiHiiVendorDevicePath,
+ HiiVendorPath,
&gEfiHiiConfigAccessProtocolGuid,
&ConfigAccessInstance->ConfigAccessProtocol,
NULL