]> 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 0c0eeffcff6afc9d5685bbabe29837b40a45bf5d..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
@@ -1662,7 +1659,7 @@ IpFilter (
       Enable = EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST;\r
 \r
       for (Index = 0; Index < Filter->IpCnt; ++Index) {\r
-        PxebcMode->IpFilter.IpList[Index] = Filter->IpList[Index];\r
+        CopyMem (&PxebcMode->IpFilter.IpList[Index], &Filter->IpList[Index], sizeof (EFI_IP_ADDRESS));\r
 \r
         if (IS_MULTICAST (&Filter->IpList[Index])) {\r
           EFI_IP_ADDRESS  *TmpIp;\r
@@ -1674,7 +1671,7 @@ IpFilter (
           //\r
           if (!Index2)\r
           {\r
-              TmpIp = (EFI_IP_ADDRESS *) &AllSystemsGroup;\r
+            TmpIp = (EFI_IP_ADDRESS *) &AllSystemsGroup;\r
             --Index;\r
           } else {\r
             TmpIp = (EFI_IP_ADDRESS *) &Filter->IpList[Index];\r
@@ -2009,8 +2006,8 @@ BcSetStationIP (
     goto RELEASE_LOCK;\r
   }\r
 \r
-  PxebcMode->StationIp   = *StationIpPtr;\r
-  PxebcMode->SubnetMask  = *SubnetMaskPtr;\r
+  CopyMem (&PxebcMode->StationIp, StationIpPtr, sizeof (EFI_IP_ADDRESS));\r
+  CopyMem (&PxebcMode->SubnetMask, SubnetMaskPtr, sizeof (EFI_IP_ADDRESS));\r
   Private->GoodStationIp = TRUE;\r
 \r
 RELEASE_LOCK:\r
@@ -2172,19 +2169,9 @@ PxeBcDriverStart (
                   );\r
 \r
   if (EFI_ERROR (Status)) {\r
-    Status = gBS->OpenProtocol (\r
-                    Controller,\r
-                    &gEfiNetworkInterfaceIdentifierProtocolGuid,\r
-                    (VOID **) &Private->NiiPtr,\r
-                    This->DriverBindingHandle,\r
-                    Controller,\r
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                    );\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      goto PxeBcError;\r
-    }\r
+    goto PxeBcError;\r
   }\r
+\r
   //\r
   // Get the Snp interface\r
   //\r
@@ -2233,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
@@ -2360,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
@@ -2376,20 +2394,31 @@ 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
   //\r
-  Status = EfiLibInstallAllDriverProtocols (\r
-            ImageHandle,\r
-            SystemTable,\r
-            &mPxeBcDriverBinding,\r
-            NULL,\r
-            &gPxeBcComponentName,\r
-            NULL,\r
-            NULL\r
-            );\r
+  Status = EfiLibInstallDriverBindingComponentName2 (\r
+             ImageHandle,\r
+             SystemTable,\r
+             &mPxeBcDriverBinding,\r
+             NULL,\r
+             &gPxeBcComponentName,\r
+             &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