Home | History | Annotate | Download | only in TcpDxe
      1 /** @file
      2   The prototype of driver binding and service binding protocol for TCP driver.
      3 
      4   Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
      5 
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this distribution.  The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php.
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef _TCP_DRIVER_H_
     17 #define _TCP_DRIVER_H_
     18 
     19 #define TCP_DRIVER_SIGNATURE   SIGNATURE_32 ('T', 'C', 'P', 'D')
     20 
     21 #define TCP_PORT_KNOWN         1024
     22 #define TCP_PORT_USER_RESERVED 65535
     23 
     24 typedef struct _TCP_HEARTBEAT_TIMER {
     25   EFI_EVENT  TimerEvent;
     26   INTN       RefCnt;
     27 } TCP_HEARTBEAT_TIMER;
     28 
     29 typedef struct _TCP_SERVICE_DATA {
     30   UINT32                        Signature;
     31   EFI_HANDLE                    ControllerHandle;
     32   EFI_HANDLE                    DriverBindingHandle;
     33   UINT8                         IpVersion;
     34   IP_IO                         *IpIo;
     35   EFI_SERVICE_BINDING_PROTOCOL  ServiceBinding;
     36   LIST_ENTRY                    SocketList;
     37 } TCP_SERVICE_DATA;
     38 
     39 typedef struct _TCP_PROTO_DATA {
     40   TCP_SERVICE_DATA  *TcpService;
     41   TCP_CB            *TcpPcb;
     42 } TCP_PROTO_DATA;
     43 
     44 #define TCP_SERVICE_FROM_THIS(a) \
     45   CR ( \
     46   (a), \
     47   TCP_SERVICE_DATA, \
     48   ServiceBinding, \
     49   TCP_DRIVER_SIGNATURE \
     50   )
     51 
     52 //
     53 // Function prototype for the driver's entry point
     54 //
     55 
     56 /**
     57   The entry point for Tcp driver, used to install Tcp driver on the ImageHandle.
     58 
     59   @param[in]  ImageHandle   The firmware allocated handle for this driver image.
     60   @param[in]  SystemTable   Pointer to the EFI system table.
     61 
     62   @retval EFI_SUCCESS   The driver loaded.
     63   @retval other         The driver did not load.
     64 
     65 **/
     66 EFI_STATUS
     67 EFIAPI
     68 TcpDriverEntryPoint (
     69   IN EFI_HANDLE        ImageHandle,
     70   IN EFI_SYSTEM_TABLE  *SystemTable
     71   );
     72 
     73 //
     74 // Function prototypes for the Driver Binding Protocol
     75 //
     76 
     77 /**
     78   Test to see if this driver supports ControllerHandle.
     79 
     80   @param[in]  This                Protocol instance pointer.
     81   @param[in]  ControllerHandle    Handle of the device to test.
     82   @param[in]  RemainingDevicePath Optional parameter use to pick a specific
     83                                   child device to start.
     84 
     85   @retval EFI_SUCCESS             This driver supports this device.
     86   @retval EFI_ALREADY_STARTED     This driver is already running on this device.
     87   @retval other                   This driver does not support this device.
     88 
     89 **/
     90 EFI_STATUS
     91 EFIAPI
     92 Tcp4DriverBindingSupported (
     93   IN EFI_DRIVER_BINDING_PROTOCOL  *This,
     94   IN EFI_HANDLE                   ControllerHandle,
     95   IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL
     96   );
     97 
     98 /**
     99   Start this driver on ControllerHandle.
    100 
    101   @param[in]  This                   Protocol instance pointer.
    102   @param[in]  ControllerHandle       Handle of device to bind driver to.
    103   @param[in]  RemainingDevicePath    Optional parameter use to pick a specific child
    104                                      device to start.
    105 
    106   @retval EFI_SUCCESS            The driver was added to ControllerHandle.
    107   @retval EFI_OUT_OF_RESOURCES   There are not enough resources to start the
    108                                  driver.
    109   @retval other                  The driver cannot be added to ControllerHandle.
    110 
    111 **/
    112 EFI_STATUS
    113 EFIAPI
    114 Tcp4DriverBindingStart (
    115   IN EFI_DRIVER_BINDING_PROTOCOL  *This,
    116   IN EFI_HANDLE                   ControllerHandle,
    117   IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL
    118   );
    119 
    120 /**
    121   Stop this driver on ControllerHandle.
    122 
    123   @param[in]  This              A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
    124   @param[in]  ControllerHandle  A handle to the device being stopped. The handle must
    125                                 support a bus specific I/O protocol for the driver
    126                                 to use to stop the device.
    127   @param[in]  NumberOfChildren  The number of child device handles in ChildHandleBuffer.
    128   @param[in]  ChildHandleBuffer An array of child handles to be freed. May be NULL
    129                                 if NumberOfChildren is 0.
    130 
    131   @retval EFI_SUCCESS           The device was stopped.
    132   @retval EFI_DEVICE_ERROR      The device could not be stopped due to a device error.
    133 
    134 **/
    135 EFI_STATUS
    136 EFIAPI
    137 Tcp4DriverBindingStop (
    138   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
    139   IN  EFI_HANDLE                   ControllerHandle,
    140   IN  UINTN                        NumberOfChildren,
    141   IN  EFI_HANDLE                   *ChildHandleBuffer OPTIONAL
    142   );
    143 
    144 /**
    145   Test to see if this driver supports ControllerHandle.
    146 
    147   @param[in]  This                Protocol instance pointer.
    148   @param[in]  ControllerHandle    Handle of the device to test.
    149   @param[in]  RemainingDevicePath Optional parameter use to pick a specific
    150                                   child device to start.
    151 
    152   @retval EFI_SUCCESS             This driver supports this device.
    153   @retval EFI_ALREADY_STARTED     This driver is already running on this device.
    154   @retval other                   This driver does not support this device.
    155 
    156 **/
    157 EFI_STATUS
    158 EFIAPI
    159 Tcp6DriverBindingSupported (
    160   IN EFI_DRIVER_BINDING_PROTOCOL  *This,
    161   IN EFI_HANDLE                   ControllerHandle,
    162   IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL
    163   );
    164 
    165 /**
    166   Start this driver on ControllerHandle.
    167 
    168   @param[in]  This                   Protocol instance pointer.
    169   @param[in]  ControllerHandle       Handle of device to bind driver to.
    170   @param[in]  RemainingDevicePath    Optional parameter use to pick a specific child
    171                                      device to start.
    172 
    173   @retval EFI_SUCCESS            The driver was added to ControllerHandle.
    174   @retval EFI_OUT_OF_RESOURCES   There are not enough resources to start the
    175                                  driver.
    176   @retval other                  The driver cannot be added to ControllerHandle.
    177 
    178 **/
    179 EFI_STATUS
    180 EFIAPI
    181 Tcp6DriverBindingStart (
    182   IN EFI_DRIVER_BINDING_PROTOCOL  *This,
    183   IN EFI_HANDLE                   ControllerHandle,
    184   IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL
    185   );
    186 
    187 /**
    188   Stop this driver on ControllerHandle.
    189 
    190   @param[in]  This              A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
    191   @param[in]  ControllerHandle  A handle to the device being stopped. The handle must
    192                                 support a bus specific I/O protocol for the driver
    193                                 to use to stop the device.
    194   @param[in]  NumberOfChildren  The number of child device handles in ChildHandleBuffer.
    195   @param[in]  ChildHandleBuffer An array of child handles to be freed. May be NULL
    196                                 if NumberOfChildren is 0.
    197 
    198   @retval EFI_SUCCESS           The device was stopped.
    199   @retval EFI_DEVICE_ERROR      The device could not be stopped due to a device error.
    200 
    201 **/
    202 EFI_STATUS
    203 EFIAPI
    204 Tcp6DriverBindingStop (
    205   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
    206   IN  EFI_HANDLE                   ControllerHandle,
    207   IN  UINTN                        NumberOfChildren,
    208   IN  EFI_HANDLE                   *ChildHandleBuffer OPTIONAL
    209   );
    210 
    211 /**
    212   The Callback funtion called after the TCP socket is created.
    213 
    214   @param[in]  This            Pointer to the socket just created.
    215   @param[in]  Context         The context of the socket.
    216 
    217   @retval EFI_SUCCESS         This protocol is installed successfully.
    218   @retval other               An error occured.
    219 
    220 **/
    221 EFI_STATUS
    222 TcpCreateSocketCallback (
    223   IN SOCKET  *This,
    224   IN VOID    *Context
    225   );
    226 
    227 /**
    228   The callback function called before the TCP socket is to be destroyed.
    229 
    230   @param[in]  This                   The TCP socket to be destroyed.
    231   @param[in]  Context                The context of the socket.
    232 
    233 **/
    234 VOID
    235 TcpDestroySocketCallback (
    236   IN SOCKET  *This,
    237   IN VOID    *Context
    238   );
    239 
    240 //
    241 // Function prototypes for the ServiceBinding Protocol
    242 //
    243 
    244 /**
    245   Creates a child handle with a set of TCP services.
    246 
    247   The CreateChild() function installs a protocol on ChildHandle.
    248   If ChildHandle is a pointer to NULL, then a new handle is created and returned in ChildHandle.
    249   If ChildHandle is not a pointer to NULL, then the protocol installs on the existing ChildHandle.
    250 
    251   @param[in]      This          Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.
    252   @param[in, out] ChildHandle   Pointer to the handle of the child to create.
    253                                 If it is NULL, then a new handle is created.
    254                                 If it is a pointer to an existing UEFI handle,
    255                                 then the protocol is added to the existing UEFI handle.
    256 
    257   @retval EFI_SUCCES            The protocol was added to ChildHandle.
    258   @retval EFI_INVALID_PARAMETER ChildHandle is NULL.
    259   @retval EFI_OUT_OF_RESOURCES  There are not enough resources available to create
    260                                 the child.
    261   @retval other                 The child handle was not created.
    262 
    263 **/
    264 EFI_STATUS
    265 EFIAPI
    266 TcpServiceBindingCreateChild (
    267   IN     EFI_SERVICE_BINDING_PROTOCOL  *This,
    268   IN OUT EFI_HANDLE                    *ChildHandle
    269   );
    270 
    271 /**
    272   Destroys a child handle with a set of TCP services.
    273 
    274   The DestroyChild() function does the opposite of CreateChild(). It removes a protocol
    275   that was installed by CreateChild() from ChildHandle. If the removed protocol is the
    276   last protocol on ChildHandle, then ChildHandle is destroyed.
    277 
    278   @param  This        Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.
    279   @param  ChildHandle Handle of the child to destroy.
    280 
    281   @retval EFI_SUCCES            The protocol was removed from ChildHandle.
    282   @retval EFI_UNSUPPORTED       ChildHandle does not support the protocol that is being removed.
    283   @retval EFI_INVALID_PARAMETER The child handle is NULL.
    284   @retval EFI_ACCESS_DENIED     The protocol could not be removed from the ChildHandle
    285                                 because its services are being used.
    286   @retval other                 The child handle was not destroyed.
    287 
    288 **/
    289 EFI_STATUS
    290 EFIAPI
    291 TcpServiceBindingDestroyChild (
    292   IN EFI_SERVICE_BINDING_PROTOCOL  *This,
    293   IN EFI_HANDLE                    ChildHandle
    294   );
    295 
    296 #endif
    297