summaryrefslogtreecommitdiffstats
path: root/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2009-04-09 05:03:21 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2009-04-09 05:03:21 +0000
commit6d931089df74638e5a21c8623f28699f0e3578a9 (patch)
tree307332f88da0eeb342ab14a3a061571e371ff8b6 /EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c
parent4376a6f27300b7f710947ccf5df53f45a556d970 (diff)
downloadedk2-6d931089df74638e5a21c8623f28699f0e3578a9.tar.gz
edk2-6d931089df74638e5a21c8623f28699f0e3578a9.tar.bz2
edk2-6d931089df74638e5a21c8623f28699f0e3578a9.zip
Produce the same HiiVendor device path for each Pack that causes Framework HII NewPack service can't be called more than once.
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
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