]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Driver.c
Use Mde library and definition instead of some native definitions in NetLib, to simpl...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Tcp4Dxe / Tcp4Driver.c
index e2a78b7a9dd25c229e6c1202435caf7c587f7a24..818b4e166203b576453774a2622e6b0f3462c8af 100644 (file)
@@ -51,6 +51,11 @@ SOCK_INIT_DATA mTcp4DefaultSockData = {
   TCP_SND_BUF_SIZE,\r
   TCP_RCV_BUF_SIZE,\r
   &mTcp4ProtocolTemplate,\r
+  Tcp4CreateSocketCallback,\r
+  Tcp4DestroySocketCallback,\r
+  NULL,\r
+  NULL,\r
+  0,\r
   Tcp4Dispatcher,\r
   NULL,\r
 };\r
@@ -93,7 +98,7 @@ Tcp4CreateTimer (
 \r
     Status = gBS->CreateEvent (\r
                     EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
-                    NET_TPL_EVENT,\r
+                    TPL_NOTIFY,\r
                     TcpTicking,\r
                     NULL,\r
                     &mTcp4Timer.TimerEvent\r
@@ -278,10 +283,10 @@ Tcp4DriverBindingStart (
   TCP4_SERVICE_DATA        *TcpServiceData;\r
   IP_IO_OPEN_DATA          OpenData;\r
 \r
-  TcpServiceData = NetAllocateZeroPool (sizeof (TCP4_SERVICE_DATA));\r
+  TcpServiceData = AllocateZeroPool (sizeof (TCP4_SERVICE_DATA));\r
 \r
   if (NULL == TcpServiceData) {\r
-    TCP4_DEBUG_ERROR (("Tcp4DriverBindingStart: Have no enough"\r
+    DEBUG ((EFI_D_ERROR, "Tcp4DriverBindingStart: Have no enough"\r
       " resource to create a Tcp Servcie Data!\n"));\r
 \r
     return EFI_OUT_OF_RESOURCES;\r
@@ -293,7 +298,7 @@ Tcp4DriverBindingStart (
   TcpServiceData->IpIo = IpIoCreate (This->DriverBindingHandle, ControllerHandle);\r
   if (NULL == TcpServiceData->IpIo) {\r
 \r
-    TCP4_DEBUG_ERROR (("Tcp4DriverBindingStart: Have no enough"\r
+    DEBUG ((EFI_D_ERROR, "Tcp4DriverBindingStart: Have no enough"\r
       " resource to create an Ip Io!\n"));\r
 \r
     Status = EFI_OUT_OF_RESOURCES;\r
@@ -303,7 +308,7 @@ Tcp4DriverBindingStart (
   //\r
   // Configure and start IpIo.\r
   //\r
-  NetZeroMem (&OpenData, sizeof (IP_IO_OPEN_DATA));\r
+  ZeroMem (&OpenData, sizeof (IP_IO_OPEN_DATA));\r
 \r
   CopyMem (&OpenData.IpConfigData, &mIpIoDefaultIpConfigData, sizeof (OpenData.IpConfigData));\r
   OpenData.IpConfigData.DefaultProtocol = EFI_IP_PROTO_TCP;\r
@@ -321,7 +326,7 @@ Tcp4DriverBindingStart (
   Status = Tcp4CreateTimer ();\r
   if (EFI_ERROR (Status)) {\r
 \r
-    TCP4_DEBUG_ERROR (("Tcp4DriverBindingStart: Create TcpTimer"\r
+    DEBUG ((EFI_D_ERROR, "Tcp4DriverBindingStart: Create TcpTimer"\r
       " Event failed with %r\n", Status));\r
 \r
     goto ON_ERROR;\r
@@ -341,7 +346,7 @@ Tcp4DriverBindingStart (
                   );\r
   if (EFI_ERROR (Status)) {\r
 \r
-    TCP4_DEBUG_ERROR (("Tcp4DriverBindingStart: Install Tcp4 Service Binding"\r
+    DEBUG ((EFI_D_ERROR, "Tcp4DriverBindingStart: Install Tcp4 Service Binding"\r
       " Protocol failed for %r\n", Status));\r
 \r
     Tcp4DestroyTimer ();\r
@@ -355,7 +360,7 @@ Tcp4DriverBindingStart (
   TcpServiceData->Signature           = TCP4_DRIVER_SIGNATURE;\r
   TcpServiceData->DriverBindingHandle = This->DriverBindingHandle;\r
 \r
-  NetListInit (&TcpServiceData->SocketList);\r
+  InitializeListHead (&TcpServiceData->SocketList);\r
 \r
   TcpSetVariableData (TcpServiceData);\r
 \r
@@ -367,7 +372,7 @@ ON_ERROR:
     IpIoDestroy (TcpServiceData->IpIo);\r
   }\r
 \r
-  NetFreePool (TcpServiceData);\r
+  gBS->FreePool (TcpServiceData);\r
 \r
   return Status;\r
 }\r
@@ -421,7 +426,7 @@ Tcp4DriverBindingStop (
                   );\r
   if (EFI_ERROR (Status)) {\r
 \r
-    TCP4_DEBUG_ERROR (("Tcp4DriverBindingStop: Locate Tcp4 Service "\r
+    DEBUG ((EFI_D_ERROR, "Tcp4DriverBindingStop: Locate Tcp4 Service "\r
       " Binding Protocol failed with %r\n", Status));\r
 \r
     return EFI_DEVICE_ERROR;\r
@@ -458,10 +463,10 @@ Tcp4DriverBindingStop (
     //\r
     // Release the TCP service data\r
     //\r
-    NetFreePool (TcpServiceData);\r
+    gBS->FreePool (TcpServiceData);\r
   } else {\r
 \r
-    while (!NetListIsEmpty (&TcpServiceData->SocketList)) {\r
+    while (!IsListEmpty (&TcpServiceData->SocketList)) {\r
       Sock = NET_LIST_HEAD (&TcpServiceData->SocketList, SOCKET, Link);\r
 \r
       ServiceBinding->DestroyChild (ServiceBinding, Sock->SockHandle);\r
@@ -471,6 +476,97 @@ Tcp4DriverBindingStop (
   return Status;\r
 }\r
 \r
+EFI_STATUS\r
+Tcp4CreateSocketCallback (\r
+  IN SOCKET  *This,\r
+  IN VOID    *Context\r
+  )\r
+{\r
+  EFI_STATUS         Status;\r
+  TCP4_SERVICE_DATA  *TcpServiceData;\r
+  EFI_IP4_PROTOCOL   *Ip4;\r
+\r
+  TcpServiceData = ((TCP4_PROTO_DATA *) This->ProtoReserved)->TcpService;\r
+\r
+  //\r
+  // Open the default Ip4 protocol of IP_IO BY_DRIVER.\r
+  //\r
+  Status = gBS->OpenProtocol (\r
+                  TcpServiceData->IpIo->ChildHandle,\r
+                  &gEfiIp4ProtocolGuid,\r
+                  (VOID **) &Ip4,\r
+                  TcpServiceData->DriverBindingHandle,\r
+                  This->SockHandle,\r
+                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  //\r
+  // Open the device path on the handle where service binding resides on.\r
+  //\r
+  Status = gBS->OpenProtocol (\r
+                  TcpServiceData->ControllerHandle,\r
+                  &gEfiDevicePathProtocolGuid,\r
+                  (VOID **) &This->ParentDevicePath,\r
+                  TcpServiceData->DriverBindingHandle,\r
+                  This->SockHandle,\r
+                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    gBS->CloseProtocol (\r
+           TcpServiceData->IpIo->ChildHandle,\r
+           &gEfiIp4ProtocolGuid,\r
+           TcpServiceData->DriverBindingHandle,\r
+           This->SockHandle\r
+           );\r
+  } else {\r
+    //\r
+    // Insert this socket into the SocketList.\r
+    //\r
+    InsertTailList (&TcpServiceData->SocketList, &This->Link);\r
+  }\r
+\r
+  return Status;\r
+}\r
+\r
+VOID\r
+Tcp4DestroySocketCallback (\r
+  IN SOCKET  *This,\r
+  IN VOID    *Context\r
+  )\r
+{\r
+  TCP4_SERVICE_DATA  *TcpServiceData;\r
+\r
+  TcpServiceData = ((TCP4_PROTO_DATA *) This->ProtoReserved)->TcpService;\r
+\r
+  //\r
+  // Remove this node from the list.\r
+  //\r
+  RemoveEntryList (&This->Link);\r
+\r
+  //\r
+  // Close the device path protocol\r
+  //\r
+  gBS->CloseProtocol (\r
+         TcpServiceData->ControllerHandle,\r
+         &gEfiDevicePathProtocolGuid,\r
+         TcpServiceData->DriverBindingHandle,\r
+         This->SockHandle\r
+         );\r
+\r
+  //\r
+  // Close the Ip4 protocol.\r
+  //\r
+  gBS->CloseProtocol (\r
+         TcpServiceData->IpIo->ChildHandle,\r
+         &gEfiIp4ProtocolGuid,\r
+         TcpServiceData->DriverBindingHandle,\r
+         This->SockHandle\r
+         );\r
+}\r
+\r
 /**\r
   Creates a child handle with a set of TCP4 services.\r
 \r
@@ -497,14 +593,14 @@ Tcp4ServiceBindingCreateChild (
   TCP4_SERVICE_DATA *TcpServiceData;\r
   TCP4_PROTO_DATA   TcpProto;\r
   EFI_STATUS        Status;\r
-  VOID              *Ip4;\r
   EFI_TPL           OldTpl;\r
 \r
   if (NULL == This || NULL == ChildHandle) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  OldTpl              = NET_RAISE_TPL (NET_TPL_LOCK);\r
+  OldTpl              = gBS->RaiseTPL (TPL_CALLBACK);\r
+  Status              = EFI_SUCCESS;\r
   TcpServiceData      = TCP4_FROM_THIS (This);\r
   TcpProto.TcpService = TcpServiceData;\r
   TcpProto.TcpPcb     = NULL;\r
@@ -513,61 +609,21 @@ Tcp4ServiceBindingCreateChild (
   // Create a tcp instance with defualt Tcp default\r
   // sock init data and TcpProto\r
   //\r
+  mTcp4DefaultSockData.ProtoData     = &TcpProto;\r
+  mTcp4DefaultSockData.DataSize      = sizeof (TCP4_PROTO_DATA);\r
   mTcp4DefaultSockData.DriverBinding = TcpServiceData->DriverBindingHandle;\r
 \r
-  Sock = SockCreateChild (&mTcp4DefaultSockData, &TcpProto, sizeof (TCP4_PROTO_DATA));\r
+  Sock = SockCreateChild (&mTcp4DefaultSockData);\r
   if (NULL == Sock) {\r
-    TCP4_DEBUG_ERROR (("Tcp4DriverBindingCreateChild: "\r
+    DEBUG ((EFI_D_ERROR, "Tcp4DriverBindingCreateChild: "\r
       "No resource to create a Tcp Child\n"));\r
 \r
     Status = EFI_OUT_OF_RESOURCES;\r
-    goto ON_EXIT;\r
-  }\r
-\r
-  *ChildHandle = Sock->SockHandle;\r
-\r
-  //\r
-  // Open the default Ip4 protocol of IP_IO BY_DRIVER.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  TcpServiceData->IpIo->ChildHandle,\r
-                  &gEfiIp4ProtocolGuid,\r
-                  (VOID **) &Ip4,\r
-                  TcpServiceData->DriverBindingHandle,\r
-                  Sock->SockHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    SockDestroyChild (Sock);\r
-    goto ON_EXIT;\r
-  }\r
-\r
-  //\r
-  // Open the device path on the handle where service binding resides on.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  TcpServiceData->ControllerHandle,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  (VOID **) &Sock->ParentDevicePath,\r
-                  TcpServiceData->DriverBindingHandle,\r
-                  Sock->SockHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->CloseProtocol (\r
-           TcpServiceData->IpIo->ChildHandle,\r
-           &gEfiIp4ProtocolGuid,\r
-           TcpServiceData->DriverBindingHandle,\r
-           Sock->SockHandle\r
-           );\r
-    SockDestroyChild (Sock);\r
   } else {\r
-    NetListInsertTail (&TcpServiceData->SocketList, &Sock->Link);\r
+    *ChildHandle = Sock->SockHandle;\r
   }\r
 \r
-ON_EXIT:\r
-\r
-  NET_RESTORE_TPL (OldTpl);\r
+  gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
 \r
@@ -594,15 +650,13 @@ Tcp4ServiceBindingDestroyChild (
   EFI_STATUS         Status;\r
   EFI_TCP4_PROTOCOL  *Tcp4;\r
   SOCKET             *Sock;\r
-  TCP4_PROTO_DATA    *TcpProtoData;\r
-  TCP4_SERVICE_DATA  *TcpServiceData;\r
   EFI_TPL            OldTpl;\r
 \r
   if (NULL == This || NULL == ChildHandle) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  OldTpl = NET_RAISE_TPL (NET_TPL_LOCK);\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // retrieve the Tcp4 protocol from ChildHandle\r
@@ -617,42 +671,17 @@ Tcp4ServiceBindingDestroyChild (
                   );\r
   if (EFI_ERROR (Status)) {\r
     Status = EFI_UNSUPPORTED;\r
-    goto ON_EXIT;\r
-  }\r
-\r
-  //\r
-  // destroy this sock and related Tcp protocol control\r
-  // block\r
-  //\r
-  Sock           = SOCK_FROM_THIS (Tcp4);\r
-  TcpProtoData   = (TCP4_PROTO_DATA *) Sock->ProtoReserved;\r
-  TcpServiceData = TcpProtoData->TcpService;\r
-\r
-  NetListRemoveEntry (&Sock->Link);\r
-\r
-  SockDestroyChild (Sock);\r
-\r
-  //\r
-  // Close the device path protocol\r
-  //\r
-  gBS->CloseProtocol (\r
-         TcpServiceData->ControllerHandle,\r
-         &gEfiDevicePathProtocolGuid,\r
-         TcpServiceData->DriverBindingHandle,\r
-         ChildHandle\r
-         );\r
+  } else {\r
+    //\r
+    // destroy this sock and related Tcp protocol control\r
+    // block\r
+    //\r
+    Sock = SOCK_FROM_THIS (Tcp4);\r
 \r
-  //\r
-  // Close the Ip4 protocol.\r
-  //\r
-  gBS->CloseProtocol (\r
-         TcpServiceData->IpIo->ChildHandle,\r
-         &gEfiIp4ProtocolGuid,\r
-         TcpServiceData->DriverBindingHandle,\r
-         ChildHandle\r
-         );\r
+    SockDestroyChild (Sock);\r
+  }\r
 \r
-ON_EXIT:\r
-  NET_RESTORE_TPL (OldTpl);\r
+  gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
+\r