]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Add unload function for DriverSample
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 9 Apr 2009 15:22:27 +0000 (15:22 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 9 Apr 2009 15:22:27 +0000 (15:22 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8052 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c
MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf

index 8fcce40327bf6dbf68dcf20e602bcf7c34f4d053..8351a3279c19e5e79d41a921be6dc21593a8dc8e 100644 (file)
@@ -16,14 +16,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \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
-HII_VENDOR_DEVICE_PATH  mHiiVendorDevicePath1 = {\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
@@ -48,7 +51,7 @@ HII_VENDOR_DEVICE_PATH  mHiiVendorDevicePath1 = {
   }\r
 };\r
 \r
-HII_VENDOR_DEVICE_PATH  mHiiVendorDevicePath2 = {\r
+HII_VENDOR_DEVICE_PATH  mHiiVendorDevicePath1 = {\r
   {\r
     {\r
       HARDWARE_DEVICE_PATH,\r
@@ -739,8 +742,6 @@ DriverSampleInit (
   EFI_STATUS                      SavedStatus;\r
   EFI_HII_PACKAGE_LIST_HEADER     *PackageList;\r
   EFI_HII_HANDLE                  HiiHandle[2];\r
-  EFI_HANDLE                      DriverHandle[2] = {NULL, NULL};\r
-  DRIVER_SAMPLE_PRIVATE_DATA      *PrivateData;\r
   EFI_SCREEN_DESCRIPTOR           Screen;\r
   EFI_HII_DATABASE_PROTOCOL       *HiiDatabase;\r
   EFI_HII_STRING_PROTOCOL         *HiiString;\r
@@ -819,7 +820,7 @@ DriverSampleInit (
   Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &DriverHandle[0],\r
                   &gEfiDevicePathProtocolGuid,\r
-                  &mHiiVendorDevicePath1,\r
+                  &mHiiVendorDevicePath0,\r
                   &gEfiHiiConfigAccessProtocolGuid,\r
                   &PrivateData->ConfigAccess,\r
                   NULL\r
@@ -859,7 +860,7 @@ DriverSampleInit (
   Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &DriverHandle[1],\r
                   &gEfiDevicePathProtocolGuid,\r
-                  &mHiiVendorDevicePath2,\r
+                  &mHiiVendorDevicePath1,\r
                   NULL\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
@@ -937,40 +938,68 @@ DriverSampleInit (
   //\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
index bba6ab0abfc12670e9ad55f96f64ccc2901c5124..9e5ff999998dea5957de500135d75bcb066e98e8 100644 (file)
@@ -22,6 +22,7 @@
   MODULE_TYPE                    = DXE_DRIVER\r
   VERSION_STRING                 = 1.0\r
   ENTRY_POINT                    = DriverSampleInit\r
+  UNLOAD_IMAGE                   = DriverSampleUnload\r
 \r
 #\r
 # The following information is for reference only and not required by the build tools.\r