]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/TcpDxe/TcpDriver.c
NetworkPkg: Apply uncrustify changes
[mirror_edk2.git] / NetworkPkg / TcpDxe / TcpDriver.c
index f6cbcfee52364725808f9e95676f5894166c669c..98a90e02109b2b021c2c6e2e7f978c22b2d92d5d 100644 (file)
@@ -1,29 +1,23 @@
 /** @file\r
   The driver binding and service binding protocol for the TCP driver.\r
 \r
-  Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
 \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
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include "TcpMain.h"\r
 \r
-UINT16                        mTcp4RandomPort;\r
-UINT16                        mTcp6RandomPort;\r
+UINT16  mTcp4RandomPort;\r
+UINT16  mTcp6RandomPort;\r
 \r
-TCP_HEARTBEAT_TIMER           mTcpTimer = {\r
+TCP_HEARTBEAT_TIMER  mTcpTimer = {\r
   NULL,\r
   0\r
 };\r
 \r
-EFI_TCP4_PROTOCOL             gTcp4ProtocolTemplate = {\r
+EFI_TCP4_PROTOCOL  gTcp4ProtocolTemplate = {\r
   Tcp4GetModeData,\r
   Tcp4Configure,\r
   Tcp4Routes,\r
@@ -36,7 +30,7 @@ EFI_TCP4_PROTOCOL             gTcp4ProtocolTemplate = {
   Tcp4Poll\r
 };\r
 \r
-EFI_TCP6_PROTOCOL             gTcp6ProtocolTemplate = {\r
+EFI_TCP6_PROTOCOL  gTcp6ProtocolTemplate = {\r
   Tcp6GetModeData,\r
   Tcp6Configure,\r
   Tcp6Connect,\r
@@ -48,7 +42,7 @@ EFI_TCP6_PROTOCOL             gTcp6ProtocolTemplate = {
   Tcp6Poll\r
 };\r
 \r
-SOCK_INIT_DATA                mTcpDefaultSockData = {\r
+SOCK_INIT_DATA  mTcpDefaultSockData = {\r
   SockStream,\r
   SO_CLOSED,\r
   NULL,\r
@@ -66,10 +60,19 @@ SOCK_INIT_DATA                mTcpDefaultSockData = {
   NULL,\r
 };\r
 \r
-EFI_DRIVER_BINDING_PROTOCOL   gTcpDriverBinding = {\r
-  TcpDriverBindingSupported,\r
-  TcpDriverBindingStart,\r
-  TcpDriverBindingStop,\r
+EFI_DRIVER_BINDING_PROTOCOL  gTcp4DriverBinding = {\r
+  Tcp4DriverBindingSupported,\r
+  Tcp4DriverBindingStart,\r
+  Tcp4DriverBindingStop,\r
+  0xa,\r
+  NULL,\r
+  NULL\r
+};\r
+\r
+EFI_DRIVER_BINDING_PROTOCOL  gTcp6DriverBinding = {\r
+  Tcp6DriverBindingSupported,\r
+  Tcp6DriverBindingStart,\r
+  Tcp6DriverBindingStop,\r
   0xa,\r
   NULL,\r
   NULL\r
@@ -80,7 +83,6 @@ EFI_SERVICE_BINDING_PROTOCOL  gTcpServiceBinding = {
   TcpServiceBindingDestroyChild\r
 };\r
 \r
-\r
 /**\r
   Create and start the heartbeat timer for the TCP driver.\r
 \r
@@ -98,7 +100,6 @@ TcpCreateTimer (
   Status = EFI_SUCCESS;\r
 \r
   if (mTcpTimer.RefCnt == 0) {\r
-\r
     Status = gBS->CreateEvent (\r
                     EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
                     TPL_NOTIFY,\r
@@ -107,17 +108,15 @@ TcpCreateTimer (
                     &mTcpTimer.TimerEvent\r
                     );\r
     if (!EFI_ERROR (Status)) {\r
-\r
       Status = gBS->SetTimer (\r
                       mTcpTimer.TimerEvent,\r
                       TimerPeriodic,\r
-                      (UINT64) (TICKS_PER_SECOND / TCP_TICK_HZ)\r
+                      (UINT64)(TICKS_PER_SECOND / TCP_TICK_HZ)\r
                       );\r
     }\r
   }\r
 \r
   if (!EFI_ERROR (Status)) {\r
-\r
     mTcpTimer.RefCnt++;\r
   }\r
 \r
@@ -172,7 +171,7 @@ TcpDriverEntryPoint (
   Status = EfiLibInstallDriverBindingComponentName2 (\r
              ImageHandle,\r
              SystemTable,\r
-             &gTcpDriverBinding,\r
+             &gTcp4DriverBinding,\r
              ImageHandle,\r
              &gTcpComponentName,\r
              &gTcpComponentName2\r
@@ -181,12 +180,32 @@ TcpDriverEntryPoint (
     return Status;\r
   }\r
 \r
+  //\r
+  // Install the TCP Driver Binding Protocol\r
+  //\r
+  Status = EfiLibInstallDriverBindingComponentName2 (\r
+             ImageHandle,\r
+             SystemTable,\r
+             &gTcp6DriverBinding,\r
+             NULL,\r
+             &gTcpComponentName,\r
+             &gTcpComponentName2\r
+             );\r
+  if (EFI_ERROR (Status)) {\r
+    EfiLibUninstallDriverBindingComponentName2 (\r
+      &gTcp4DriverBinding,\r
+      &gTcpComponentName,\r
+      &gTcpComponentName2\r
+      );\r
+    return Status;\r
+  }\r
+\r
   //\r
   // Initialize ISS and random port.\r
   //\r
   Seed            = NetRandomInitSeed ();\r
   mTcpGlobalIss   = NET_RANDOM (Seed) % mTcpGlobalIss;\r
-  mTcp4RandomPort = (UINT16) (TCP_PORT_KNOWN + (NET_RANDOM (Seed) % TCP_PORT_KNOWN));\r
+  mTcp4RandomPort = (UINT16)(TCP_PORT_KNOWN + (NET_RANDOM (Seed) % TCP_PORT_KNOWN));\r
   mTcp6RandomPort = mTcp4RandomPort;\r
 \r
   return EFI_SUCCESS;\r
@@ -210,11 +229,11 @@ TcpCreateService (
   IN UINT8       IpVersion\r
   )\r
 {\r
-  EFI_STATUS         Status;\r
-  EFI_GUID           *IpServiceBindingGuid;\r
-  EFI_GUID           *TcpServiceBindingGuid;\r
-  TCP_SERVICE_DATA   *TcpServiceData;\r
-  IP_IO_OPEN_DATA    OpenData;\r
+  EFI_STATUS        Status;\r
+  EFI_GUID          *IpServiceBindingGuid;\r
+  EFI_GUID          *TcpServiceBindingGuid;\r
+  TCP_SERVICE_DATA  *TcpServiceData;\r
+  IP_IO_OPEN_DATA   OpenData;\r
 \r
   if (IpVersion == IP_VERSION_4) {\r
     IpServiceBindingGuid  = &gEfiIp4ServiceBindingProtocolGuid;\r
@@ -256,10 +275,10 @@ TcpCreateService (
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  TcpServiceData->Signature            = TCP_DRIVER_SIGNATURE;\r
-  TcpServiceData->ControllerHandle     = Controller;\r
-  TcpServiceData->DriverBindingHandle  = Image;\r
-  TcpServiceData->IpVersion            = IpVersion;\r
+  TcpServiceData->Signature           = TCP_DRIVER_SIGNATURE;\r
+  TcpServiceData->ControllerHandle    = Controller;\r
+  TcpServiceData->DriverBindingHandle = Image;\r
+  TcpServiceData->IpVersion           = IpVersion;\r
   CopyMem (\r
     &TcpServiceData->ServiceBinding,\r
     &gTcpServiceBinding,\r
@@ -272,7 +291,6 @@ TcpCreateService (
     goto ON_ERROR;\r
   }\r
 \r
-\r
   InitializeListHead (&TcpServiceData->SocketList);\r
   ZeroMem (&OpenData, sizeof (IP_IO_OPEN_DATA));\r
 \r
@@ -292,8 +310,8 @@ TcpCreateService (
     OpenData.IpConfigData.Ip6CfgData.DefaultProtocol = EFI_IP_PROTO_TCP;\r
   }\r
 \r
-  OpenData.PktRcvdNotify  = TcpRxCallback;\r
-  Status                  = IpIoOpen (TcpServiceData->IpIo, &OpenData);\r
+  OpenData.PktRcvdNotify = TcpRxCallback;\r
+  Status                 = IpIoOpen (TcpServiceData->IpIo, &OpenData);\r
   if (EFI_ERROR (Status)) {\r
     goto ON_ERROR;\r
   }\r
@@ -315,8 +333,6 @@ TcpCreateService (
     goto ON_ERROR;\r
   }\r
 \r
-  TcpSetVariableData (TcpServiceData);\r
-\r
   return EFI_SUCCESS;\r
 \r
 ON_ERROR:\r
@@ -333,7 +349,7 @@ ON_ERROR:
 \r
 /**\r
   Callback function which provided by user to remove one node in NetDestroyLinkList process.\r
-  \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
@@ -344,8 +360,8 @@ ON_ERROR:
 EFI_STATUS\r
 EFIAPI\r
 TcpDestroyChildEntryInHandleBuffer (\r
-  IN LIST_ENTRY         *Entry,\r
-  IN VOID               *Context\r
+  IN LIST_ENTRY  *Entry,\r
+  IN VOID        *Context\r
   )\r
 {\r
   SOCKET                        *Sock;\r
@@ -353,14 +369,14 @@ TcpDestroyChildEntryInHandleBuffer (
   UINTN                         NumberOfChildren;\r
   EFI_HANDLE                    *ChildHandleBuffer;\r
 \r
-  if (Entry == NULL || Context == NULL) {\r
+  if ((Entry == NULL) || (Context == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Sock = NET_LIST_USER_STRUCT_S (Entry, SOCKET, Link, SOCK_SIGNATURE);\r
-  ServiceBinding    = ((TCP_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *) Context)->ServiceBinding;\r
-  NumberOfChildren  = ((TCP_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *) Context)->NumberOfChildren;\r
-  ChildHandleBuffer = ((TCP_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *) Context)->ChildHandleBuffer;\r
+  Sock              = NET_LIST_USER_STRUCT_S (Entry, SOCKET, Link, SOCK_SIGNATURE);\r
+  ServiceBinding    = ((TCP_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *)Context)->ServiceBinding;\r
+  NumberOfChildren  = ((TCP_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *)Context)->NumberOfChildren;\r
+  ChildHandleBuffer = ((TCP_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT *)Context)->ChildHandleBuffer;\r
 \r
   if (!NetIsInHandleBuffer (Sock->SockHandle, NumberOfChildren, ChildHandleBuffer)) {\r
     return EFI_SUCCESS;\r
@@ -378,7 +394,7 @@ TcpDestroyChildEntryInHandleBuffer (
   @param[in]  NumberOfChildren   Number of Handles in ChildHandleBuffer. If number\r
                                  of children is zero stop the entire bus driver.\r
   @param[in]  ChildHandleBuffer  An array of child handles to be freed. May be NULL\r
-                                 if NumberOfChildren is 0.  \r
+                                 if NumberOfChildren is 0.\r
   @param[in]  IpVersion          IP_VERSION_4 or IP_VERSION_6\r
 \r
   @retval EFI_SUCCESS            The resources used by the instance were cleaned up.\r
@@ -390,17 +406,17 @@ TcpDestroyService (
   IN EFI_HANDLE  Controller,\r
   IN EFI_HANDLE  ImageHandle,\r
   IN UINTN       NumberOfChildren,\r
-  IN EFI_HANDLE  *ChildHandleBuffer, OPTIONAL\r
+  IN EFI_HANDLE  *ChildHandleBuffer  OPTIONAL,\r
   IN UINT8       IpVersion\r
   )\r
 {\r
-  EFI_HANDLE                    NicHandle;\r
-  EFI_GUID                      *IpProtocolGuid;\r
-  EFI_GUID                      *ServiceBindingGuid;\r
-  EFI_SERVICE_BINDING_PROTOCOL  *ServiceBinding;\r
-  TCP_SERVICE_DATA              *TcpServiceData;\r
-  EFI_STATUS                    Status;\r
-  LIST_ENTRY                    *List;\r
+  EFI_HANDLE                               NicHandle;\r
+  EFI_GUID                                 *IpProtocolGuid;\r
+  EFI_GUID                                 *ServiceBindingGuid;\r
+  EFI_SERVICE_BINDING_PROTOCOL             *ServiceBinding;\r
+  TCP_SERVICE_DATA                         *TcpServiceData;\r
+  EFI_STATUS                               Status;\r
+  LIST_ENTRY                               *List;\r
   TCP_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT  Context;\r
 \r
   ASSERT ((IpVersion == IP_VERSION_4) || (IpVersion == IP_VERSION_6));\r
@@ -421,7 +437,7 @@ TcpDestroyService (
   Status = gBS->OpenProtocol (\r
                   NicHandle,\r
                   ServiceBindingGuid,\r
-                  (VOID **) &ServiceBinding,\r
+                  (VOID **)&ServiceBinding,\r
                   ImageHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -433,16 +449,16 @@ TcpDestroyService (
   TcpServiceData = TCP_SERVICE_FROM_THIS (ServiceBinding);\r
 \r
   if (NumberOfChildren != 0) {\r
-    List = &TcpServiceData->SocketList;\r
-    Context.ServiceBinding = ServiceBinding;\r
-    Context.NumberOfChildren = NumberOfChildren;\r
+    List                      = &TcpServiceData->SocketList;\r
+    Context.ServiceBinding    = ServiceBinding;\r
+    Context.NumberOfChildren  = NumberOfChildren;\r
     Context.ChildHandleBuffer = ChildHandleBuffer;\r
-    Status = NetDestroyLinkList (\r
-               List,\r
-               TcpDestroyChildEntryInHandleBuffer,\r
-               &Context,\r
-               NULL\r
-               );\r
+    Status                    = NetDestroyLinkList (\r
+                                  List,\r
+                                  TcpDestroyChildEntryInHandleBuffer,\r
+                                  &Context,\r
+                                  NULL\r
+                                  );\r
   } else if (IsListEmpty (&TcpServiceData->SocketList)) {\r
     //\r
     // Uninstall TCP servicebinding protocol\r
@@ -465,11 +481,6 @@ TcpDestroyService (
     //\r
     TcpDestroyTimer ();\r
 \r
-    //\r
-    // Clear the variable.\r
-    //\r
-    TcpClearVariableData (TcpServiceData);\r
-\r
     //\r
     // Release the TCP service data\r
     //\r
@@ -496,14 +507,13 @@ TcpDestroyService (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-TcpDriverBindingSupported (\r
+Tcp4DriverBindingSupported (\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
-  BOOLEAN     IsTcp4Started;\r
 \r
   //\r
   // Test for the Tcp4ServiceBinding Protocol\r
@@ -516,29 +526,114 @@ TcpDriverBindingSupported (
                   ControllerHandle,\r
                   EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
                   );\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // Test for the Ip4ServiceBinding 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
-    if (!EFI_ERROR (Status)) {\r
-      return EFI_SUCCESS;\r
-    }\r
+  if (!EFI_ERROR (Status)) {\r
+    return EFI_ALREADY_STARTED;\r
+  }\r
 \r
-    IsTcp4Started = FALSE;\r
-  } else {\r
-    IsTcp4Started = TRUE;\r
+  //\r
+  // Test for the Ip4ServiceBinding 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
+  return Status;\r
+}\r
+\r
+/**\r
+  Start this driver on ControllerHandle.\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            The driver is added to ControllerHandle.\r
+  @retval EFI_OUT_OF_RESOURCES   There are not enough resources to start the\r
+                                 driver.\r
+  @retval other                  The driver cannot be added to ControllerHandle.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4DriverBindingStart (\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
+  Status = TcpCreateService (ControllerHandle, This->DriverBindingHandle, IP_VERSION_4);\r
+  if ((Status == EFI_ALREADY_STARTED) || (Status == EFI_UNSUPPORTED)) {\r
+    Status = EFI_SUCCESS;\r
   }\r
 \r
+  return Status;\r
+}\r
+\r
+/**\r
+  Stop this driver on ControllerHandle.\r
+\r
+  @param[in]  This              A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+  @param[in]  ControllerHandle  A handle to the device being stopped. The handle must\r
+                                support a bus specific I/O protocol for the driver\r
+                                to use to stop the device.\r
+  @param[in]  NumberOfChildren  The number of child device handles in ChildHandleBuffer.\r
+  @param[in]  ChildHandleBuffer An array of child handles to be freed. May be NULL\r
+                                if NumberOfChildren is 0.\r
+\r
+  @retval EFI_SUCCESS           The device was stopped.\r
+  @retval EFI_DEVICE_ERROR      The device could not be stopped due to a device error.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4DriverBindingStop (\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN  EFI_HANDLE                   ControllerHandle,\r
+  IN  UINTN                        NumberOfChildren,\r
+  IN  EFI_HANDLE                   *ChildHandleBuffer OPTIONAL\r
+  )\r
+{\r
+  return TcpDestroyService (\r
+           ControllerHandle,\r
+           This->DriverBindingHandle,\r
+           NumberOfChildren,\r
+           ChildHandleBuffer,\r
+           IP_VERSION_4\r
+           );\r
+}\r
+\r
+/**\r
+  Test to see if this driver supports ControllerHandle.\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\r
+                                  child 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
+Tcp6DriverBindingSupported (\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
-  // Check the Tcp6ServiceBinding Protocol\r
+  // Test for the Tcp6ServiceBinding Protocol\r
   //\r
   Status = gBS->OpenProtocol (\r
                   ControllerHandle,\r
@@ -548,26 +643,22 @@ TcpDriverBindingSupported (
                   ControllerHandle,\r
                   EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
                   );\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // Test for the Ip6ServiceBinding Protocol\r
-    //\r
-    Status = gBS->OpenProtocol (\r
-                    ControllerHandle,\r
-                    &gEfiIp6ServiceBindingProtocolGuid,\r
-                    NULL,\r
-                    This->DriverBindingHandle,\r
-                    ControllerHandle,\r
-                    EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
-                    );\r
-    if (!EFI_ERROR (Status)) {\r
-      return EFI_SUCCESS;\r
-    }\r
-  } else if (IsTcp4Started) {\r
+  if (!EFI_ERROR (Status)) {\r
     return EFI_ALREADY_STARTED;\r
   }\r
 \r
-  return EFI_UNSUPPORTED;\r
+  //\r
+  // Test for the Ip6ServiceBinding Protocol\r
+  //\r
+  Status = gBS->OpenProtocol (\r
+                  ControllerHandle,\r
+                  &gEfiIp6ServiceBindingProtocolGuid,\r
+                  NULL,\r
+                  This->DriverBindingHandle,\r
+                  ControllerHandle,\r
+                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
+                  );\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -586,32 +677,20 @@ TcpDriverBindingSupported (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-TcpDriverBindingStart (\r
+Tcp6DriverBindingStart (\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  Tcp4Status;\r
-  EFI_STATUS  Tcp6Status;\r
-\r
-  Tcp4Status = TcpCreateService (ControllerHandle, This->DriverBindingHandle, IP_VERSION_4);\r
-  if ((Tcp4Status == EFI_ALREADY_STARTED) || (Tcp4Status == EFI_UNSUPPORTED)) {\r
-    Tcp4Status = EFI_SUCCESS;\r
-  }\r
+  EFI_STATUS  Status;\r
 \r
-  Tcp6Status = TcpCreateService (ControllerHandle, This->DriverBindingHandle, IP_VERSION_6);\r
-  if ((Tcp6Status == EFI_ALREADY_STARTED) || (Tcp6Status == EFI_UNSUPPORTED)) {\r
-    Tcp6Status = EFI_SUCCESS;\r
+  Status = TcpCreateService (ControllerHandle, This->DriverBindingHandle, IP_VERSION_6);\r
+  if ((Status == EFI_ALREADY_STARTED) || (Status == EFI_UNSUPPORTED)) {\r
+    Status = EFI_SUCCESS;\r
   }\r
 \r
-  if (!EFI_ERROR (Tcp4Status) || !EFI_ERROR (Tcp6Status)) {\r
-    return EFI_SUCCESS;\r
-  } else if (EFI_ERROR (Tcp4Status)) {\r
-    return Tcp4Status;\r
-  } else {\r
-    return Tcp6Status;\r
-  }\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -631,47 +710,30 @@ TcpDriverBindingStart (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-TcpDriverBindingStop (\r
+Tcp6DriverBindingStop (\r
   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
   IN  EFI_HANDLE                   ControllerHandle,\r
   IN  UINTN                        NumberOfChildren,\r
   IN  EFI_HANDLE                   *ChildHandleBuffer OPTIONAL\r
   )\r
 {\r
-  EFI_STATUS  Tcp4Status;\r
-  EFI_STATUS  Tcp6Status;\r
-\r
-  Tcp4Status = TcpDestroyService (\r
-                 ControllerHandle,\r
-                 This->DriverBindingHandle,\r
-                 NumberOfChildren,\r
-                 ChildHandleBuffer,\r
-                 IP_VERSION_4\r
-                 );\r
-\r
-  Tcp6Status = TcpDestroyService (\r
-                 ControllerHandle,\r
-                 This->DriverBindingHandle,\r
-                 NumberOfChildren,\r
-                 ChildHandleBuffer,\r
-                 IP_VERSION_6\r
-                 );\r
-\r
-  if (EFI_ERROR (Tcp4Status) && EFI_ERROR (Tcp6Status)) {\r
-    return EFI_DEVICE_ERROR;\r
-  } else {\r
-    return EFI_SUCCESS;\r
-  }\r
+  return TcpDestroyService (\r
+           ControllerHandle,\r
+           This->DriverBindingHandle,\r
+           NumberOfChildren,\r
+           ChildHandleBuffer,\r
+           IP_VERSION_6\r
+           );\r
 }\r
 \r
 /**\r
-  The Callback funtion called after the TCP socket was created.\r
+  The Callback function called after the TCP socket was created.\r
 \r
   @param[in]  This            Pointer to the socket just created\r
   @param[in]  Context         Context of the socket\r
 \r
   @retval EFI_SUCCESS         This protocol installed successfully.\r
-  @retval other               An error occured.\r
+  @retval other               An error occurred.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -691,7 +753,7 @@ TcpCreateSocketCallback (
     IpProtocolGuid = &gEfiIp6ProtocolGuid;\r
   }\r
 \r
-  TcpServiceData = ((TCP_PROTO_DATA *) This->ProtoReserved)->TcpService;\r
+  TcpServiceData = ((TCP_PROTO_DATA *)This->ProtoReserved)->TcpService;\r
 \r
   //\r
   // Open the default IP protocol of IP_IO BY_DRIVER.\r
@@ -714,7 +776,7 @@ TcpCreateSocketCallback (
   Status = gBS->OpenProtocol (\r
                   TcpServiceData->ControllerHandle,\r
                   &gEfiDevicePathProtocolGuid,\r
-                  (VOID **) &This->ParentDevicePath,\r
+                  (VOID **)&This->ParentDevicePath,\r
                   TcpServiceData->DriverBindingHandle,\r
                   This->SockHandle,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -758,7 +820,7 @@ TcpDestroySocketCallback (
     IpProtocolGuid = &gEfiIp6ProtocolGuid;\r
   }\r
 \r
-  TcpServiceData = ((TCP_PROTO_DATA *) This->ProtoReserved)->TcpService;\r
+  TcpServiceData = ((TCP_PROTO_DATA *)This->ProtoReserved)->TcpService;\r
 \r
   //\r
   // Remove this node from the list.\r
@@ -789,9 +851,9 @@ TcpDestroySocketCallback (
                                 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_SUCCESS           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 availabe to create\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
@@ -809,7 +871,7 @@ TcpServiceBindingCreateChild (
   EFI_STATUS        Status;\r
   EFI_TPL           OldTpl;\r
 \r
-  if (NULL == This || NULL == ChildHandle) {\r
+  if ((NULL == This) || (NULL == ChildHandle)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -821,7 +883,7 @@ TcpServiceBindingCreateChild (
   TcpProto.TcpPcb     = NULL;\r
 \r
   //\r
-  // Create a tcp instance with defualt Tcp default\r
+  // Create a tcp instance with default Tcp default\r
   // sock init data and TcpProto\r
   //\r
   mTcpDefaultSockData.ProtoData     = &TcpProto;\r
@@ -838,8 +900,8 @@ TcpServiceBindingCreateChild (
   Sock = SockCreateChild (&mTcpDefaultSockData);\r
   if (NULL == Sock) {\r
     DEBUG (\r
-      (EFI_D_ERROR,\r
-      "TcpDriverBindingCreateChild: No resource to create a Tcp Child\n")\r
+      (DEBUG_ERROR,\r
+       "TcpDriverBindingCreateChild: No resource to create a Tcp Child\n")\r
       );\r
 \r
     Status = EFI_OUT_OF_RESOURCES;\r
@@ -847,7 +909,7 @@ TcpServiceBindingCreateChild (
     *ChildHandle = Sock->SockHandle;\r
   }\r
 \r
-  mTcpDefaultSockData.ProtoData  = NULL;\r
+  mTcpDefaultSockData.ProtoData = NULL;\r
 \r
   gBS->RestoreTPL (OldTpl);\r
   return Status;\r
@@ -863,7 +925,7 @@ TcpServiceBindingCreateChild (
   @param  This        Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.\r
   @param  ChildHandle Handle of the child to be destroyed.\r
 \r
-  @retval EFI_SUCCES            The protocol was removed from ChildHandle.\r
+  @retval EFI_SUCCESS           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
@@ -882,7 +944,7 @@ TcpServiceBindingDestroyChild (
   VOID        *Tcp;\r
   SOCKET      *Sock;\r
 \r
-  if (NULL == This || NULL == ChildHandle) {\r
+  if ((NULL == This) || (NULL == ChildHandle)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -893,7 +955,7 @@ TcpServiceBindingDestroyChild (
                   ChildHandle,\r
                   &gEfiTcp4ProtocolGuid,\r
                   &Tcp,\r
-                  gTcpDriverBinding.DriverBindingHandle,\r
+                  gTcp4DriverBinding.DriverBindingHandle,\r
                   ChildHandle,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                   );\r
@@ -905,7 +967,7 @@ TcpServiceBindingDestroyChild (
                     ChildHandle,\r
                     &gEfiTcp6ProtocolGuid,\r
                     &Tcp,\r
-                    gTcpDriverBinding.DriverBindingHandle,\r
+                    gTcp6DriverBinding.DriverBindingHandle,\r
                     ChildHandle,\r
                     EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                     );\r