]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDriver.c
MdeModulePkg: Delete UefiPxeBcDxe in MdeModulePkg.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcDriver.c
diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDriver.c b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDriver.c
deleted file mode 100644 (file)
index 76c140d..0000000
+++ /dev/null
@@ -1,665 +0,0 @@
-/** @file\r
-  The driver binding for UEFI PXEBC protocol.\r
-\r
-Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-\r
-#include "PxeBcImpl.h"\r
-\r
-EFI_DRIVER_BINDING_PROTOCOL gPxeBcDriverBinding = {\r
-  PxeBcDriverBindingSupported,\r
-  PxeBcDriverBindingStart,\r
-  PxeBcDriverBindingStop,\r
-  0xa,\r
-  NULL,\r
-  NULL\r
-};\r
-\r
-/**\r
-  This is the declaration of an EFI image entry point. This entry point is\r
-  the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including\r
-  both device drivers and bus drivers.\r
-\r
-  @param  ImageHandle           The firmware allocated handle for the UEFI image.\r
-  @param  SystemTable           A pointer to the EFI System Table.\r
-\r
-  @retval EFI_SUCCESS           The operation completed successfully.\r
-  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcDriverEntryPoint (\r
-  IN EFI_HANDLE             ImageHandle,\r
-  IN EFI_SYSTEM_TABLE       *SystemTable\r
-  )\r
-{\r
-  return EfiLibInstallDriverBindingComponentName2 (\r
-          ImageHandle,\r
-          SystemTable,\r
-          &gPxeBcDriverBinding,\r
-          ImageHandle,\r
-          &gPxeBcComponentName,\r
-          &gPxeBcComponentName2\r
-          );\r
-}\r
-\r
-\r
-/**\r
-  Test to see if this driver supports ControllerHandle. This service\r
-  is called by the EFI boot service ConnectController(). In\r
-  order to make drivers as small as possible, there are a few calling\r
-  restrictions for this service. ConnectController() must\r
-  follow these calling restrictions. If any other agent wishes to call\r
-  Supported() it must also follow these calling restrictions.\r
-  PxeBc requires DHCP4 and MTFTP4 protocols.\r
-\r
-  @param  This                Protocol instance pointer.\r
-  @param  ControllerHandle    Handle of device to test\r
-  @param  RemainingDevicePath Optional parameter use to pick a specific child\r
-                              device to start.\r
-\r
-  @retval EFI_SUCCESS         This driver supports this device\r
-  @retval EFI_ALREADY_STARTED This driver is already running on this device\r
-  @retval other               This driver does not support this device\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcDriverBindingSupported (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  * This,\r
-  IN EFI_HANDLE                   ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL     * RemainingDevicePath OPTIONAL\r
-  )\r
-{\r
-  EFI_PXE_BASE_CODE_PROTOCOL  *PxeBc;\r
-  EFI_STATUS                  Status;\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiPxeBaseCodeProtocolGuid,\r
-                  (VOID **) &PxeBc,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    return EFI_ALREADY_STARTED;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiDhcp4ServiceBindingProtocolGuid,\r
-                  NULL,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
-                  );\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-\r
-    Status = gBS->OpenProtocol (\r
-                    ControllerHandle,\r
-                    &gEfiMtftp4ServiceBindingProtocolGuid,\r
-                    NULL,\r
-                    This->DriverBindingHandle,\r
-                    ControllerHandle,\r
-                    EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
-                    );\r
-\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Start this driver on ControllerHandle. This service is called by the\r
-  EFI boot service ConnectController(). In order to make\r
-  drivers as small as possible, there are a few calling restrictions for\r
-  this service. ConnectController() must follow these\r
-  calling restrictions. If any other agent wishes to call Start() it\r
-  must also follow these calling restrictions.\r
-\r
-  @param  This                 Protocol instance pointer.\r
-  @param  ControllerHandle     Handle of device to bind driver to\r
-  @param  RemainingDevicePath  Optional parameter use to pick a specific child\r
-                               device to start.\r
-\r
-  @retval EFI_SUCCESS          This driver is added to ControllerHandle\r
-  @retval EFI_ALREADY_STARTED  This driver is already running on ControllerHandle\r
-  @retval other                This driver does not support this device\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcDriverBindingStart (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  * This,\r
-  IN EFI_HANDLE                   ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL     * RemainingDevicePath OPTIONAL\r
-  )\r
-{\r
-  PXEBC_PRIVATE_DATA  *Private;\r
-  UINTN               Index;\r
-  EFI_STATUS          Status;\r
-  EFI_IP4_MODE_DATA   Ip4ModeData;\r
-\r
-  Private = AllocateZeroPool (sizeof (PXEBC_PRIVATE_DATA));\r
-  if (Private == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Private->Signature                    = PXEBC_PRIVATE_DATA_SIGNATURE;\r
-  Private->Controller                   = ControllerHandle;\r
-  Private->Image                        = This->DriverBindingHandle;\r
-  CopyMem (&Private->PxeBc, &mPxeBcProtocolTemplate, sizeof (Private->PxeBc));\r
-  Private->PxeBc.Mode                   = &Private->Mode;\r
-  CopyMem (&Private->LoadFile, &mLoadFileProtocolTemplate, sizeof (Private->LoadFile));\r
-\r
-  Private->ProxyOffer.Packet.Offer.Size = PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE;\r
-  Private->Dhcp4Ack.Packet.Ack.Size     = PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE;\r
-  Private->PxeReply.Packet.Ack.Size     = PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE;\r
-\r
-  for (Index = 0; Index < PXEBC_MAX_OFFER_NUM; Index++) {\r
-    Private->Dhcp4Offers[Index].Packet.Offer.Size = PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE;\r
-  }\r
-\r
-  //\r
-  // Get the NII interface if it exists.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiNetworkInterfaceIdentifierProtocolGuid_31,\r
-                  (VOID **) &Private->Nii,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    Private->Nii = NULL;\r
-  }\r
-\r
-  Status = NetLibCreateServiceChild (\r
-            ControllerHandle,\r
-            This->DriverBindingHandle,\r
-            &gEfiArpServiceBindingProtocolGuid,\r
-            &Private->ArpChild\r
-            );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  Private->ArpChild,\r
-                  &gEfiArpProtocolGuid,\r
-                  (VOID **) &Private->Arp,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = NetLibCreateServiceChild (\r
-            ControllerHandle,\r
-            This->DriverBindingHandle,\r
-            &gEfiDhcp4ServiceBindingProtocolGuid,\r
-            &Private->Dhcp4Child\r
-            );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  Private->Dhcp4Child,\r
-                  &gEfiDhcp4ProtocolGuid,\r
-                  (VOID **) &Private->Dhcp4,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = NetLibCreateServiceChild (\r
-             ControllerHandle,\r
-             This->DriverBindingHandle,\r
-             &gEfiIp4ServiceBindingProtocolGuid,\r
-             &Private->Ip4Child\r
-             );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  Private->Ip4Child,\r
-                  &gEfiIp4ProtocolGuid,\r
-                  (VOID **) &Private->Ip4,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // Get max packet size from Ip4 to calculate block size for Tftp later.\r
-  //\r
-  Status = Private->Ip4->GetModeData (Private->Ip4, &Ip4ModeData, NULL, NULL);\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Private->Ip4MaxPacketSize = Ip4ModeData.MaxPacketSize;\r
-\r
-  Status = NetLibCreateServiceChild (\r
-             ControllerHandle,\r
-             This->DriverBindingHandle,\r
-             &gEfiMtftp4ServiceBindingProtocolGuid,\r
-             &Private->Mtftp4Child\r
-             );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  Private->Mtftp4Child,\r
-                  &gEfiMtftp4ProtocolGuid,\r
-                  (VOID **) &Private->Mtftp4,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = NetLibCreateServiceChild (\r
-             ControllerHandle,\r
-             This->DriverBindingHandle,\r
-             &gEfiUdp4ServiceBindingProtocolGuid,\r
-             &Private->Udp4ReadChild\r
-             );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // The UDP instance for EfiPxeBcUdpRead\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  Private->Udp4ReadChild,\r
-                  &gEfiUdp4ProtocolGuid,\r
-                  (VOID **) &Private->Udp4Read,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // The UDP instance for EfiPxeBcUdpWrite\r
-  //\r
-  Status = NetLibCreateServiceChild (\r
-             ControllerHandle,\r
-             This->DriverBindingHandle,\r
-             &gEfiUdp4ServiceBindingProtocolGuid,\r
-             &Private->Udp4WriteChild\r
-             );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  Private->Udp4WriteChild,\r
-                  &gEfiUdp4ProtocolGuid,\r
-                  (VOID **) &Private->Udp4Write,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-  ZeroMem (&Private->Udp4CfgData, sizeof (EFI_UDP4_CONFIG_DATA));\r
-  Private->Udp4CfgData.AcceptBroadcast    = FALSE;\r
-  Private->Udp4CfgData.AcceptPromiscuous  = FALSE;\r
-  Private->Udp4CfgData.AcceptAnyPort      = TRUE;\r
-  Private->Udp4CfgData.AllowDuplicatePort = TRUE;\r
-  Private->Udp4CfgData.TypeOfService      = DEFAULT_ToS;\r
-  Private->Udp4CfgData.TimeToLive         = DEFAULT_TTL;\r
-  Private->Udp4CfgData.DoNotFragment      = FALSE;\r
-  Private->Udp4CfgData.ReceiveTimeout     = PXEBC_DEFAULT_LIFETIME;\r
-  Private->Udp4CfgData.UseDefaultAddress  = FALSE;\r
-\r
-  PxeBcInitSeedPacket (&Private->SeedPacket, Private->Udp4Read);\r
-  Private->MacLen = Private->SeedPacket.Dhcp4.Header.HwAddrLen;\r
-  CopyMem (&Private->Mac, &Private->SeedPacket.Dhcp4.Header.ClientHwAddr[0], Private->MacLen);\r
-\r
-\r
-  ZeroMem (&Private->Ip4ConfigData, sizeof (EFI_IP4_CONFIG_DATA));\r
-  Private->Ip4ConfigData.DefaultProtocol   = EFI_IP_PROTO_ICMP;\r
-  Private->Ip4ConfigData.AcceptIcmpErrors  = TRUE;\r
-  Private->Ip4ConfigData.TypeOfService     = DEFAULT_ToS;\r
-  Private->Ip4ConfigData.TimeToLive        = DEFAULT_TTL;\r
-  Private->Ip4ConfigData.DoNotFragment     = FALSE;\r
-  Private->Ip4ConfigData.RawData           = FALSE;\r
-\r
-  Status = gBS->InstallMultipleProtocolInterfaces (\r
-                  &ControllerHandle,\r
-                  &gEfiPxeBaseCodeProtocolGuid,\r
-                  &Private->PxeBc,\r
-                  &gEfiLoadFileProtocolGuid,\r
-                  &Private->LoadFile,\r
-                  NULL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-  //\r
-  // Locate Ip4->Ip4Config2 and store it for set IPv4 Policy.\r
-  //\r
-  Status = gBS->HandleProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiIp4Config2ProtocolGuid,\r
-                  (VOID **) &Private->Ip4Config2\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-\r
-ON_ERROR:\r
-\r
-  if (Private->Udp4WriteChild != NULL) {\r
-    gBS->CloseProtocol (\r
-           Private->Udp4WriteChild,\r
-           &gEfiUdp4ProtocolGuid,\r
-           This->DriverBindingHandle,\r
-           ControllerHandle\r
-           );\r
-    NetLibDestroyServiceChild (\r
-      ControllerHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiUdp4ServiceBindingProtocolGuid,\r
-      Private->Udp4WriteChild\r
-      );\r
-  }\r
-\r
-  if (Private->Udp4ReadChild != NULL) {\r
-    gBS->CloseProtocol (\r
-          Private->Udp4ReadChild,\r
-          &gEfiUdp4ProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          ControllerHandle\r
-          );\r
-    NetLibDestroyServiceChild (\r
-      ControllerHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiUdp4ServiceBindingProtocolGuid,\r
-      Private->Udp4ReadChild\r
-      );\r
-  }\r
-\r
-  if (Private->Mtftp4Child != NULL) {\r
-    gBS->CloseProtocol (\r
-          Private->Mtftp4Child,\r
-          &gEfiMtftp4ProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          ControllerHandle\r
-          );\r
-\r
-    NetLibDestroyServiceChild (\r
-      ControllerHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiMtftp4ServiceBindingProtocolGuid,\r
-      Private->Mtftp4Child\r
-      );\r
-  }\r
-\r
-  if (Private->Ip4Child != NULL) {\r
-    gBS->CloseProtocol (\r
-          Private->Ip4Child,\r
-          &gEfiIp4ProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          ControllerHandle\r
-          );\r
-\r
-    NetLibDestroyServiceChild (\r
-      ControllerHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiIp4ServiceBindingProtocolGuid,\r
-      Private->Ip4Child\r
-      );\r
-  }\r
-\r
-  if (Private->Dhcp4Child != NULL) {\r
-    gBS->CloseProtocol (\r
-          Private->Dhcp4Child,\r
-          &gEfiDhcp4ProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          ControllerHandle\r
-          );\r
-\r
-    NetLibDestroyServiceChild (\r
-      ControllerHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiDhcp4ServiceBindingProtocolGuid,\r
-      Private->Dhcp4Child\r
-      );\r
-  }\r
-\r
-  if (Private->ArpChild != NULL) {\r
-    gBS->CloseProtocol (\r
-          Private->ArpChild,\r
-          &gEfiArpProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          ControllerHandle\r
-          );\r
-\r
-    NetLibDestroyServiceChild (\r
-      ControllerHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiArpServiceBindingProtocolGuid,\r
-      Private->ArpChild\r
-      );\r
-  }\r
-\r
-  FreePool (Private);\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Stop this driver on ControllerHandle. This service is called by the\r
-  EFI boot service DisconnectController(). In order to\r
-  make drivers as small as possible, there are a few calling\r
-  restrictions for this service. DisconnectController()\r
-  must follow these calling restrictions. If any other agent wishes\r
-  to call Stop() it must also follow these calling restrictions.\r
-\r
-  @param  This              Protocol instance pointer.\r
-  @param  ControllerHandle  Handle of device to stop driver on\r
-  @param  NumberOfChildren  Number of Handles in ChildHandleBuffer. If number of\r
-                            children is zero stop the entire bus driver.\r
-  @param  ChildHandleBuffer List of Child Handles to Stop.\r
-\r
-  @retval EFI_SUCCESS       This driver is removed ControllerHandle\r
-  @retval other             This driver was not removed from this device\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcDriverBindingStop (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                   ControllerHandle,\r
-  IN UINTN                        NumberOfChildren,\r
-  IN EFI_HANDLE                   *ChildHandleBuffer\r
-  )\r
-{\r
-  PXEBC_PRIVATE_DATA          *Private;\r
-  EFI_PXE_BASE_CODE_PROTOCOL  *PxeBc;\r
-  EFI_HANDLE                  NicHandle;\r
-  EFI_STATUS                  Status;\r
-\r
-  NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiArpProtocolGuid);\r
-  if (NicHandle == NULL) {\r
-    NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiDhcp4ProtocolGuid);\r
-\r
-    if (NicHandle == NULL) {\r
-      NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiIp4ProtocolGuid);\r
-\r
-      if (NicHandle == NULL) {\r
-        NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiUdp4ProtocolGuid);\r
-\r
-        if (NicHandle == NULL) {\r
-          NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiMtftp4ProtocolGuid);\r
-\r
-          if (NicHandle == NULL) {\r
-            return EFI_SUCCESS;\r
-          }\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  NicHandle,\r
-                  &gEfiPxeBaseCodeProtocolGuid,\r
-                  (VOID **) &PxeBc,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Stop functionality of PXE Base Code protocol\r
-  //\r
-  Status = PxeBc->Stop (PxeBc);\r
-  if (Status != EFI_SUCCESS && Status != EFI_NOT_STARTED) {\r
-    return Status;\r
-  }\r
-\r
-  Private = PXEBC_PRIVATE_DATA_FROM_PXEBC (PxeBc);\r
-\r
-  Status = gBS->UninstallMultipleProtocolInterfaces (\r
-                  NicHandle,\r
-                  &gEfiPxeBaseCodeProtocolGuid,\r
-                  &Private->PxeBc,\r
-                  &gEfiLoadFileProtocolGuid,\r
-                  &Private->LoadFile,\r
-                  NULL\r
-                  );\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-\r
-    gBS->CloseProtocol (\r
-           Private->Udp4WriteChild,\r
-           &gEfiUdp4ProtocolGuid,\r
-           This->DriverBindingHandle,\r
-           NicHandle\r
-           );\r
-    NetLibDestroyServiceChild (\r
-      ControllerHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiUdp4ServiceBindingProtocolGuid,\r
-      Private->Udp4WriteChild\r
-      );\r
-\r
-    gBS->CloseProtocol (\r
-          Private->Udp4ReadChild,\r
-          &gEfiUdp4ProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          NicHandle\r
-          );\r
-    NetLibDestroyServiceChild (\r
-      NicHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiUdp4ServiceBindingProtocolGuid,\r
-      Private->Udp4ReadChild\r
-      );\r
-\r
-    gBS->CloseProtocol (\r
-          Private->Dhcp4Child,\r
-          &gEfiDhcp4ProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          NicHandle\r
-          );\r
-    NetLibDestroyServiceChild (\r
-      NicHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiDhcp4ServiceBindingProtocolGuid,\r
-      Private->Dhcp4Child\r
-      );\r
-\r
-    gBS->CloseProtocol (\r
-          Private->Mtftp4Child,\r
-          &gEfiMtftp4ProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          NicHandle\r
-          );\r
-    NetLibDestroyServiceChild (\r
-      NicHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiMtftp4ServiceBindingProtocolGuid,\r
-      Private->Mtftp4Child\r
-      );\r
-\r
-    gBS->CloseProtocol (\r
-          Private->Ip4Child,\r
-          &gEfiIp4ProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          NicHandle\r
-          );\r
-    NetLibDestroyServiceChild (\r
-      NicHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiIp4ServiceBindingProtocolGuid,\r
-      Private->Ip4Child\r
-      );\r
-\r
-    gBS->CloseProtocol (\r
-          Private->ArpChild,\r
-          &gEfiArpProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          NicHandle\r
-          );\r
-    NetLibDestroyServiceChild (\r
-      NicHandle,\r
-      This->DriverBindingHandle,\r
-      &gEfiArpServiceBindingProtocolGuid,\r
-      Private->ArpChild\r
-      );\r
-\r
-    FreePool (Private);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-\r