]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c
NetworkPkg: Move Network library and drivers from MdeModulePkg to NetworkPkg
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Udp4Dxe / Udp4Driver.c
diff --git a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c
deleted file mode 100644 (file)
index 63b103b..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-/** @file\r
-\r
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-\r
-#include "Udp4Impl.h"\r
-\r
-EFI_DRIVER_BINDING_PROTOCOL gUdp4DriverBinding = {\r
-  Udp4DriverBindingSupported,\r
-  Udp4DriverBindingStart,\r
-  Udp4DriverBindingStop,\r
-  0xa,\r
-  NULL,\r
-  NULL\r
-};\r
-\r
-EFI_SERVICE_BINDING_PROTOCOL mUdp4ServiceBinding = {\r
-  Udp4ServiceBindingCreateChild,\r
-  Udp4ServiceBindingDestroyChild\r
-};\r
-\r
-/**\r
-  Callback function which provided by user to remove one node in NetDestroyLinkList process.\r
-\r
-  @param[in]    Entry           The entry to be removed.\r
-  @param[in]    Context         Pointer to the callback context corresponds to the Context in NetDestroyLinkList.\r
-\r
-  @retval EFI_SUCCESS           The entry has been removed successfully.\r
-  @retval Others                Fail to remove the entry.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-Udp4DestroyChildEntryInHandleBuffer (\r
-  IN LIST_ENTRY         *Entry,\r
-  IN VOID               *Context\r
-  )\r
-{\r
-  UDP4_INSTANCE_DATA            *Instance;\r
-  EFI_SERVICE_BINDING_PROTOCOL  *ServiceBinding;\r
-  UINTN                         NumberOfChildren;\r
-  EFI_HANDLE                    *ChildHandleBuffer;\r
-\r
-  if (Entry == NULL || Context == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  Instance = NET_LIST_USER_STRUCT_S (Entry, UDP4_INSTANCE_DATA, Link, UDP4_INSTANCE_DATA_SIGNATURE);\r
-  ServiceBinding    = ((UDP4_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *) Context)->ServiceBinding;\r
-  NumberOfChildren  = ((UDP4_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *) Context)->NumberOfChildren;\r
-  ChildHandleBuffer = ((UDP4_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *) Context)->ChildHandleBuffer;\r
-\r
-  if (!NetIsInHandleBuffer (Instance->ChildHandle, NumberOfChildren, ChildHandleBuffer)) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  return ServiceBinding->DestroyChild (ServiceBinding, Instance->ChildHandle);\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
-\r
-  @param[in]  This                Protocol instance pointer.\r
-  @param[in]  ControllerHandle    Handle of device to test\r
-  @param[in]  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
-Udp4DriverBindingSupported (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                   ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath  OPTIONAL\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-\r
-  //\r
-  // Test for the Udp4ServiceBinding Protocol\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiUdp4ServiceBindingProtocolGuid,\r
-                  NULL,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
-                  );\r
-  if (!EFI_ERROR (Status)) {\r
-    return EFI_ALREADY_STARTED;\r
-  }\r
-\r
-  //\r
-  // Test for the Ip4 Protocol\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiIp4ServiceBindingProtocolGuid,\r
-                  NULL,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL\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[in]  This                 Protocol instance pointer.\r
-  @param[in]  ControllerHandle     Handle of device to bind driver to\r
-  @param[in]  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
-Udp4DriverBindingStart (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                   ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath  OPTIONAL\r
-  )\r
-{\r
-  EFI_STATUS         Status;\r
-  UDP4_SERVICE_DATA  *Udp4Service;\r
-\r
-  //\r
-  // Allocate Private Context Data Structure.\r
-  //\r
-  Udp4Service = AllocatePool (sizeof (UDP4_SERVICE_DATA));\r
-  if (Udp4Service == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Status = Udp4CreateService (Udp4Service, This->DriverBindingHandle, ControllerHandle);\r
-  if (EFI_ERROR (Status)) {\r
-    FreePool (Udp4Service);\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Install the Udp4ServiceBindingProtocol on the ControllerHandle.\r
-  //\r
-  Status = gBS->InstallMultipleProtocolInterfaces (\r
-                  &ControllerHandle,\r
-                  &gEfiUdp4ServiceBindingProtocolGuid,\r
-                  &Udp4Service->ServiceBinding,\r
-                  NULL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    Udp4CleanService (Udp4Service);\r
-    FreePool (Udp4Service);\r
-  }\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[in]  This              Protocol instance pointer.\r
-  @param[in]  ControllerHandle  Handle of device to stop driver on\r
-  @param[in]  NumberOfChildren  Number of Handles in ChildHandleBuffer. If number of\r
-                                children is zero stop the entire bus driver.\r
-  @param[in]  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
-Udp4DriverBindingStop (\r
-  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN  EFI_HANDLE                   ControllerHandle,\r
-  IN  UINTN                        NumberOfChildren,\r
-  IN  EFI_HANDLE                   *ChildHandleBuffer\r
-  )\r
-{\r
-  EFI_STATUS                                Status;\r
-  EFI_HANDLE                                NicHandle;\r
-  EFI_SERVICE_BINDING_PROTOCOL              *ServiceBinding;\r
-  UDP4_SERVICE_DATA                         *Udp4Service;\r
-  UDP4_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT  Context;\r
-  LIST_ENTRY                                *List;\r
-\r
-  //\r
-  // Find the NicHandle where UDP4 ServiceBinding Protocol is installed.\r
-  //\r
-  NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiIp4ProtocolGuid);\r
-  if (NicHandle == NULL) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  //\r
-  // Retrieve the UDP4 ServiceBinding Protocol.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  NicHandle,\r
-                  &gEfiUdp4ServiceBindingProtocolGuid,\r
-                  (VOID **) &ServiceBinding,\r
-                  This->DriverBindingHandle,\r
-                  NicHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_DEVICE_ERROR;\r
-  }\r
-\r
-  Udp4Service = UDP4_SERVICE_DATA_FROM_THIS (ServiceBinding);\r
-  if (NumberOfChildren != 0) {\r
-    //\r
-    // NumberOfChildren is not zero, destroy the children instances in ChildHandleBuffer.\r
-    //\r
-    List = &Udp4Service->ChildrenList;\r
-    Context.ServiceBinding    = ServiceBinding;\r
-    Context.NumberOfChildren  = NumberOfChildren;\r
-    Context.ChildHandleBuffer = ChildHandleBuffer;\r
-    Status = NetDestroyLinkList (\r
-               List,\r
-               Udp4DestroyChildEntryInHandleBuffer,\r
-               &Context,\r
-               NULL\r
-               );\r
-  } else {\r
-    gBS->UninstallMultipleProtocolInterfaces (\r
-           NicHandle,\r
-           &gEfiUdp4ServiceBindingProtocolGuid,\r
-           &Udp4Service->ServiceBinding,\r
-           NULL\r
-           );\r
-\r
-    Udp4CleanService (Udp4Service);\r
-\r
-    if (gUdpControllerNameTable != NULL) {\r
-      FreeUnicodeStringTable (gUdpControllerNameTable);\r
-      gUdpControllerNameTable = NULL;\r
-    }\r
-    FreePool (Udp4Service);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Creates a child handle and installs a protocol.\r
-\r
-  The CreateChild() function installs a protocol on ChildHandle.\r
-  If ChildHandle is a pointer to NULL, then a new handle is created and returned in ChildHandle.\r
-  If ChildHandle is not a pointer to NULL, then the protocol installs on the existing ChildHandle.\r
-\r
-  @param[in] This        Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.\r
-  @param[in] ChildHandle Pointer to the handle of the child to create. If it is NULL,\r
-                         then a new handle is created. If it is a pointer to an existing UEFI handle,\r
-                         then the protocol is added to the existing UEFI handle.\r
-\r
-  @retval EFI_SUCCES            The protocol was added to ChildHandle.\r
-  @retval EFI_INVALID_PARAMETER ChildHandle is NULL.\r
-  @retval EFI_OUT_OF_RESOURCES  There are not enough resources available to create\r
-                                the child\r
-  @retval other                 The child handle was not created\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-Udp4ServiceBindingCreateChild (\r
-  IN EFI_SERVICE_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                    *ChildHandle\r
-  )\r
-{\r
-  EFI_STATUS          Status;\r
-  UDP4_SERVICE_DATA   *Udp4Service;\r
-  UDP4_INSTANCE_DATA  *Instance;\r
-  EFI_TPL             OldTpl;\r
-  VOID                *Ip4;\r
-\r
-  if ((This == NULL) || (ChildHandle == NULL)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  Udp4Service = UDP4_SERVICE_DATA_FROM_THIS (This);\r
-\r
-  //\r
-  // Allocate the instance private data structure.\r
-  //\r
-  Instance = AllocateZeroPool (sizeof (UDP4_INSTANCE_DATA));\r
-  if (Instance == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  Udp4InitInstance (Udp4Service, Instance);\r
-\r
-  //\r
-  // Add an IpInfo for this instance.\r
-  //\r
-  Instance->IpInfo = IpIoAddIp (Udp4Service->IpIo);\r
-  if (Instance->IpInfo == NULL) {\r
-    Status = EFI_OUT_OF_RESOURCES;\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // Install the Udp4Protocol for this instance.\r
-  //\r
-  Status = gBS->InstallMultipleProtocolInterfaces (\r
-                  ChildHandle,\r
-                  &gEfiUdp4ProtocolGuid,\r
-                  &Instance->Udp4Proto,\r
-                  NULL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Instance->ChildHandle = *ChildHandle;\r
-\r
-  //\r
-  // Open the default Ip4 protocol in the IP_IO BY_CHILD.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  Udp4Service->IpIo->ChildHandle,\r
-                  &gEfiIp4ProtocolGuid,\r
-                  (VOID **) &Ip4,\r
-                  gUdp4DriverBinding.DriverBindingHandle,\r
-                  Instance->ChildHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // Open this instance's Ip4 protocol in the IpInfo BY_CHILD.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  Instance->IpInfo->ChildHandle,\r
-                  &gEfiIp4ProtocolGuid,\r
-                  (VOID **) &Ip4,\r
-                  gUdp4DriverBinding.DriverBindingHandle,\r
-                  Instance->ChildHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
-\r
-  //\r
-  // Link this instance into the service context data and increase the ChildrenNumber.\r
-  //\r
-  InsertTailList (&Udp4Service->ChildrenList, &Instance->Link);\r
-  Udp4Service->ChildrenNumber++;\r
-\r
-  gBS->RestoreTPL (OldTpl);\r
-\r
-  return EFI_SUCCESS;\r
-\r
-ON_ERROR:\r
-\r
-  if (Instance->ChildHandle != NULL) {\r
-    gBS->UninstallMultipleProtocolInterfaces (\r
-           Instance->ChildHandle,\r
-           &gEfiUdp4ProtocolGuid,\r
-           &Instance->Udp4Proto,\r
-           NULL\r
-           );\r
-  }\r
-\r
-  if (Instance->IpInfo != NULL) {\r
-    IpIoRemoveIp (Udp4Service->IpIo, Instance->IpInfo);\r
-  }\r
-\r
-  Udp4CleanInstance (Instance);\r
-\r
-  FreePool (Instance);\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Destroys a child handle with a protocol installed on it.\r
-\r
-  The DestroyChild() function does the opposite of CreateChild(). It removes a protocol\r
-  that was installed by CreateChild() from ChildHandle. If the removed protocol is the\r
-  last protocol on ChildHandle, then ChildHandle is destroyed.\r
-\r
-  @param[in] This        Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.\r
-  @param[in] ChildHandle Handle of the child to destroy\r
-\r
-  @retval EFI_SUCCES            The protocol was removed from ChildHandle.\r
-  @retval EFI_UNSUPPORTED       ChildHandle does not support the protocol that is being removed.\r
-  @retval EFI_INVALID_PARAMETER Child handle is NULL.\r
-  @retval EFI_ACCESS_DENIED     The protocol could not be removed from the ChildHandle\r
-                                because its services are being used.\r
-  @retval other                 The child handle was not destroyed\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-Udp4ServiceBindingDestroyChild (\r
-  IN EFI_SERVICE_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                    ChildHandle\r
-  )\r
-{\r
-  EFI_STATUS          Status;\r
-  UDP4_SERVICE_DATA   *Udp4Service;\r
-  EFI_UDP4_PROTOCOL   *Udp4Proto;\r
-  UDP4_INSTANCE_DATA  *Instance;\r
-  EFI_TPL             OldTpl;\r
-\r
-  if ((This == NULL) || (ChildHandle == NULL)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  Udp4Service = UDP4_SERVICE_DATA_FROM_THIS (This);\r
-\r
-  //\r
-  // Try to get the Udp4 protocol from the ChildHandle.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ChildHandle,\r
-                  &gEfiUdp4ProtocolGuid,\r
-                  (VOID **) &Udp4Proto,\r
-                  gUdp4DriverBinding.DriverBindingHandle,\r
-                  ChildHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  Instance = UDP4_INSTANCE_DATA_FROM_THIS (Udp4Proto);\r
-\r
-  if (Instance->InDestroy) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  //\r
-  // Use the Destroyed flag to avoid the re-entering of the following code.\r
-  //\r
-  Instance->InDestroy = TRUE;\r
-\r
-  //\r
-  // Close the Ip4 protocol.\r
-  //\r
-  gBS->CloseProtocol (\r
-         Udp4Service->IpIo->ChildHandle,\r
-         &gEfiIp4ProtocolGuid,\r
-         gUdp4DriverBinding.DriverBindingHandle,\r
-         Instance->ChildHandle\r
-         );\r
-  //\r
-  // Close the Ip4 protocol on this instance's IpInfo.\r
-  //\r
-  gBS->CloseProtocol (\r
-         Instance->IpInfo->ChildHandle,\r
-         &gEfiIp4ProtocolGuid,\r
-         gUdp4DriverBinding.DriverBindingHandle,\r
-         Instance->ChildHandle\r
-         );\r
-\r
-  //\r
-  // Uninstall the Udp4Protocol previously installed on the ChildHandle.\r
-  //\r
-  Status = gBS->UninstallMultipleProtocolInterfaces (\r
-                  ChildHandle,\r
-                  &gEfiUdp4ProtocolGuid,\r
-                  (VOID *) &Instance->Udp4Proto,\r
-                  NULL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    Instance->InDestroy = FALSE;\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Reset the configuration in case the instance's consumer forgets to do this.\r
-  //\r
-  Udp4Proto->Configure (Udp4Proto, NULL);\r
-\r
-  //\r
-  // Remove the IpInfo this instance consumes.\r
-  //\r
-  IpIoRemoveIp (Udp4Service->IpIo, Instance->IpInfo);\r
-\r
-  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
-\r
-  //\r
-  // Remove this instance from the service context data's ChildrenList.\r
-  //\r
-  RemoveEntryList (&Instance->Link);\r
-  Udp4Service->ChildrenNumber--;\r
-\r
-  //\r
-  // Clean the instance.\r
-  //\r
-  Udp4CleanInstance (Instance);\r
-\r
-  gBS->RestoreTPL (OldTpl);\r
-\r
-  FreePool (Instance);\r
-\r
-  return EFI_SUCCESS;\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
-  The entry point for Udp4 driver which installs the driver binding\r
-  and component name protocol on its ImageHandle.\r
-\r
-  @param[in] ImageHandle           The firmware allocated handle for the UEFI image.\r
-  @param[in] 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
-Udp4DriverEntryPoint (\r
-  IN EFI_HANDLE        ImageHandle,\r
-  IN EFI_SYSTEM_TABLE  *SystemTable\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-\r
-  //\r
-  // Install the Udp4DriverBinding and Udp4ComponentName protocols.\r
-  //\r
-  Status = EfiLibInstallDriverBindingComponentName2 (\r
-             ImageHandle,\r
-             SystemTable,\r
-             &gUdp4DriverBinding,\r
-             ImageHandle,\r
-             &gUdp4ComponentName,\r
-             &gUdp4ComponentName2\r
-             );\r
-  if (!EFI_ERROR (Status)) {\r
-    //\r
-    // Initialize the UDP random port.\r
-    //\r
-    mUdp4RandomPort = (UINT16) (((UINT16) NetRandomInitSeed ()) % UDP4_PORT_KNOWN + UDP4_PORT_KNOWN);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r