#include <Protocol/DevicePathToText.h>\r
#include <Protocol/DevicePath.h>\r
\r
+#include <Library/DevicePathLib.h>\r
#include <Library/BaseLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/UefiLib.h>\r
#include <Library/PlatformDriverOverrideLib.h>\r
#include <Library/HiiLib.h>\r
#include <Library/IfrSupportLib.h>\r
-#include <Library/ExtendedHiiLib.h>\r
#include <Library/ExtendedIfrSupportLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;\r
} EFI_CALLBACK_INFO;\r
\r
+#pragma pack(1)\r
+\r
+///\r
+/// HII specific Vendor Device Path definition.\r
+///\r
+typedef struct {\r
+ VENDOR_DEVICE_PATH VendorDevicePath;\r
+ EFI_DEVICE_PATH_PROTOCOL End;\r
+} HII_VENDOR_DEVICE_PATH;\r
+\r
+#pragma pack()\r
+\r
//\r
// uni string and Vfr Binary data.\r
//\r
UINTN mLastSavedDriverImageNum;\r
UINT16 mCurrentPage;\r
\r
+HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {\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
+ },\r
+ //\r
+ // {99936717-BF3D-4b04-9787-76CEE324D76F}\r
+ //\r
+ { 0x99936717, 0xbf3d, 0x4b04, { 0x97, 0x87, 0x76, 0xce, 0xe3, 0x24, 0xd7, 0x6f } }\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
+ }\r
+ }\r
+};\r
+\r
/**\r
Converting a given device to an unicode string. \r
\r
EFI_HII_DATABASE_PROTOCOL *HiiDatabase;\r
EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
EFI_CALLBACK_INFO *CallbackInfo;\r
- EFI_HANDLE DriverHandle;\r
- EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;\r
+ EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;\r
\r
//\r
// There should only be one HII protocol\r
CallbackInfo->ConfigAccess.Callback = PlatOverMngrCallback;\r
\r
//\r
- // Create driver handle used by HII database\r
+ // Install Device Path Protocol and Config Access protocol to driver handle\r
//\r
- Status = HiiLibCreateHiiDriverHandle (&DriverHandle);\r
- if (EFI_ERROR (Status)) {\r
- goto Finish;\r
- }\r
- CallbackInfo->DriverHandle = DriverHandle;\r
-\r
- //\r
- // Install Config Access protocol to driver handle\r
- //\r
- Status = gBS->InstallProtocolInterface (\r
- &DriverHandle,\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &CallbackInfo->DriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath,\r
&gEfiHiiConfigAccessProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &CallbackInfo->ConfigAccess\r
+ &CallbackInfo->ConfigAccess,\r
+ NULL\r
);\r
if (EFI_ERROR (Status)) {\r
goto Finish;\r
Status = HiiDatabase->NewPackageList (\r
HiiDatabase,\r
PackageList,\r
- DriverHandle,\r
+ CallbackInfo->DriverHandle,\r
&CallbackInfo->RegisteredHandle\r
);\r
FreePool (PackageList);\r
\r
Finish:\r
if (CallbackInfo->DriverHandle != NULL) {\r
- HiiLibDestroyHiiDriverHandle (CallbackInfo->DriverHandle);\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ CallbackInfo->DriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &CallbackInfo->ConfigAccess,\r
+ NULL\r
+ );\r
}\r
if (CallbackInfo != NULL) {\r
FreePool (CallbackInfo);\r