\r
#include "DriverSample.h"\r
\r
-#define DISPLAY_ONLY_MY_ITEM 0x0002\r
+#define DISPLAY_ONLY_MY_ITEM 0x0000\r
\r
EFI_GUID mFormSetGuid = FORMSET_GUID;\r
EFI_GUID mInventoryGuid = INVENTORY_GUID;\r
\r
CHAR16 VariableName[] = L"MyIfrNVData";\r
\r
+EFI_HANDLE DriverHandle[2] = {NULL, NULL};\r
+DRIVER_SAMPLE_PRIVATE_DATA *PrivateData = NULL;\r
+\r
+HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath0 = {\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
+ // {C153B68D-EBFC-488e-B110-662867745B87}\r
+ //\r
+ { 0xc153b68d, 0xebfc, 0x488e, { 0xb1, 0x10, 0x66, 0x28, 0x67, 0x74, 0x5b, 0x87 } }\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
+HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath1 = {\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
+ // {06F37F07-0C48-40e9-8436-0A08A0BB76B0}\r
+ //\r
+ { 0x6f37f07, 0xc48, 0x40e9, { 0x84, 0x36, 0xa, 0x8, 0xa0, 0xbb, 0x76, 0xb0 } }\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
Encode the password using a simple algorithm.\r
\r
EFI_STATUS SavedStatus;\r
EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
EFI_HII_HANDLE HiiHandle[2];\r
- EFI_HANDLE DriverHandle[2];\r
- DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;\r
EFI_SCREEN_DESCRIPTOR Screen;\r
EFI_HII_DATABASE_PROTOCOL *HiiDatabase;\r
EFI_HII_STRING_PROTOCOL *HiiString;\r
}\r
PrivateData->HiiConfigRouting = HiiConfigRouting;\r
\r
- //\r
- // Install Config Access protocol\r
- //\r
- Status = HiiLibCreateHiiDriverHandle (&DriverHandle[0]);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- PrivateData->DriverHandle[0] = DriverHandle[0];\r
-\r
- Status = gBS->InstallProtocolInterface (\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
&DriverHandle[0],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath0,\r
&gEfiHiiConfigAccessProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &PrivateData->ConfigAccess\r
+ &PrivateData->ConfigAccess,\r
+ NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
+ PrivateData->DriverHandle[0] = DriverHandle[0];\r
+\r
//\r
// Publish our HII data\r
//\r
//\r
// Publish another Fromset\r
//\r
- Status = HiiLibCreateHiiDriverHandle (&DriverHandle[1]);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &DriverHandle[1],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath1,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
PrivateData->DriverHandle[1] = DriverHandle[1];\r
\r
PackageList = HiiLibPreparePackageList (\r
//\r
// Example of how to display only the item we sent to HII\r
//\r
- if (DISPLAY_ONLY_MY_ITEM == 0x0001) {\r
- //\r
- // Have the browser pull out our copy of the data, and only display our data\r
- //\r
- // Status = FormConfig->SendForm (FormConfig, TRUE, HiiHandle, NULL, NULL, NULL, &Screen, NULL);\r
- //\r
- Status = FormBrowser2->SendForm (\r
- FormBrowser2,\r
- HiiHandle,\r
- 1,\r
- NULL,\r
- 0,\r
- NULL,\r
- NULL\r
- );\r
- SavedStatus = Status;\r
-\r
- Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[0]);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
+ //\r
+ // Have the browser pull out our copy of the data, and only display our data\r
+ //\r
+ Status = FormBrowser2->SendForm (\r
+ FormBrowser2,\r
+ &(HiiHandle[DISPLAY_ONLY_MY_ITEM]),\r
+ 1,\r
+ NULL,\r
+ 0,\r
+ NULL,\r
+ NULL\r
+ );\r
+ SavedStatus = Status;\r
\r
- Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[1]);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
+ Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
\r
- return SavedStatus;\r
- } else {\r
- //\r
- // Have the browser pull out all the data in the HII Database and display it.\r
- //\r
- // Status = FormConfig->SendForm (FormConfig, TRUE, 0, NULL, NULL, NULL, NULL, NULL);\r
- //\r
+ Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[1]);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ return SavedStatus;\r
+}\r
+\r
+/**\r
+ Unloads the application and its installed protocol.\r
+\r
+ @param[in] ImageHandle Handle that identifies the image to be unloaded.\r
+\r
+ @retval EFI_SUCCESS The image has been unloaded.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+DriverSampleUnload (\r
+ IN EFI_HANDLE ImageHandle\r
+ )\r
+{\r
+ if (DriverHandle[0] != NULL) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverHandle[0],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath0,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &PrivateData->ConfigAccess,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ if (DriverHandle[1] != NULL) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverHandle[1],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath1,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ if (PrivateData != NULL) {\r
+ FreePool (PrivateData);\r
}\r
\r
return EFI_SUCCESS;\r