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