]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/PxeBcDxe/Bc.c
Patch to remove STATIC modifier. This is on longer recommended by EFI Framework codin...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / PxeBcDxe / Bc.c
index a59f189f92fe321602b155b5de3bc4d91f1a555c..41d06f6e376dbe9a4fa7abfa2bb8418c6d7cb3c3 100644 (file)
@@ -345,7 +345,6 @@ UpdateChecksum (
   @retval 1                    Callbacks are not active on the handle\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
 SetMakeCallback (\r
   IN PXE_BASECODE_DEVICE *Private\r
@@ -1201,7 +1200,6 @@ BcStart (
     return EFI_ALREADY_STARTED;\r
   }\r
 \r
-#if !SUPPORT_IPV6\r
   //\r
   // Fail if IPv6 is requested and not supported.\r
   //\r
@@ -1210,7 +1208,6 @@ BcStart (
     EfiReleaseLock (&Private->Lock);\r
     return EFI_UNSUPPORTED;\r
   }\r
-#endif\r
   //\r
   // Setup shortcuts to SNP protocol and data structure.\r
   //\r
@@ -2174,7 +2171,7 @@ PxeBcDriverStart (
   if (EFI_ERROR (Status)) {\r
     goto PxeBcError;\r
   }\r
-  \r
+\r
   //\r
   // Get the Snp interface\r
   //\r
@@ -2223,12 +2220,8 @@ PxeBcDriverStart (
   // implementation supports IPv6.\r
   //\r
   Private->EfiBc.Mode->Ipv6Supported = SUPPORT_IPV6;\r
-\r
-#if SUPPORT_IPV6\r
-  Private->EfiBc.Mode->Ipv6Available = Private->NiiPtr->Ipv6Supported;\r
-#else\r
   Private->EfiBc.Mode->Ipv6Available = FALSE;\r
-#endif\r
+\r
   //\r
   // Set to TRUE by the BC constructor if this BC\r
   // implementation supports BIS.\r
@@ -2350,6 +2343,41 @@ PxeBcDriverStop (
   return Status;\r
 }\r
 \r
+EFI_STATUS\r
+EFIAPI\r
+PxeBcUnload (\r
+  IN EFI_HANDLE  ImageHandle\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+  UINTN       DeviceHandleCount;\r
+  EFI_HANDLE  *DeviceHandleBuffer;\r
+  UINTN       Index;\r
+\r
+  Status = gBS->LocateHandleBuffer (\r
+                  AllHandles,\r
+                  NULL,\r
+                  NULL,\r
+                  &DeviceHandleCount,\r
+                  &DeviceHandleBuffer\r
+                  );\r
+  if (!EFI_ERROR (Status)) {\r
+    for (Index = 0; Index < DeviceHandleCount; Index++) {\r
+      Status = gBS->DisconnectController (\r
+                      DeviceHandleBuffer[Index],\r
+                      mPxeBcDriverBinding.DriverBindingHandle,\r
+                      NULL\r
+                      );\r
+    }\r
+\r
+    if (DeviceHandleBuffer != NULL) {\r
+      gBS->FreePool (DeviceHandleBuffer);\r
+    }\r
+  }\r
+\r
+  return Status;\r
+}\r
+\r
 \r
 /**\r
   Initialize the base code drivers and install the driver binding\r
@@ -2366,7 +2394,8 @@ InitializeBCDriver (
   IN EFI_SYSTEM_TABLE *SystemTable\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
+  EFI_STATUS                 Status;\r
+  EFI_LOADED_IMAGE_PROTOCOL  *LoadedImage;\r
 \r
   //\r
   // Initialize EFI library\r
@@ -2380,6 +2409,17 @@ InitializeBCDriver (
              &gPxeBcComponentName2\r
              );\r
 \r
+  Status = gBS->HandleProtocol (\r
+                  ImageHandle,\r
+                  &gEfiLoadedImageProtocolGuid,\r
+                  (VOID **) &LoadedImage\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  } else {\r
+    LoadedImage->Unload = PxeBcUnload;\r
+  }\r
+\r
   InitArpHeader ();\r
   OptionsStrucInit ();\r
 \r