HII_VENDOR_DEVICE_PATH mUefiHiiVendorDevicePath = {\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
+ 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
- // {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
- (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
EFI_STATUS Status;\r
CONFIG_ACCESS_PRIVATE *ConfigAccessInstance;\r
+ HII_VENDOR_DEVICE_PATH *HiiVendorPath;\r
\r
ASSERT (ThunkContext->IfrPackageCount != 0);\r
\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
- &mUefiHiiVendorDevicePath,\r
+ HiiVendorPath,\r
&gEfiHiiConfigAccessProtocolGuid,\r
&ConfigAccessInstance->ConfigAccessProtocol,\r
NULL\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
} 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
- VENDOR_DEVICE_PATH VendorDevicePath;\r
+ HII_VENDOR_DEVICE_PATH_NODE Node;\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