1#ifndef _EFI_TCP_H 2#define _EFI_TCP_H 3 4/*++ 5Copyright (c) 2013 Intel Corporation 6 7--*/ 8 9#define EFI_TCP4_SERVICE_BINDING_PROTOCOL \ 10 { 0x00720665, 0x67eb, 0x4a99, {0xba, 0xf7, 0xd3, 0xc3, 0x3a, 0x1c,0x7c, 0xc9}} 11 12#define EFI_TCP4_PROTOCOL \ 13 { 0x65530bc7, 0xa359, 0x410f, {0xb0, 0x10, 0x5a, 0xad, 0xc7, 0xec, 0x2b, 0x62}} 14 15#define EFI_TCP6_SERVICE_BINDING_PROTOCOL \ 16 { 0xec20eb79, 0x6c1a, 0x4664, {0x9a, 0xd, 0xd2, 0xe4, 0xcc, 0x16, 0xd6, 0x64}} 17 18#define EFI_TCP6_PROTOCOL \ 19 { 0x46e44855, 0xbd60, 0x4ab7, {0xab, 0xd, 0xa6, 0x79, 0xb9, 0x44, 0x7d, 0x77}} 20 21INTERFACE_DECL(_EFI_TCP4); 22INTERFACE_DECL(_EFI_TCP6); 23 24typedef struct { 25 BOOLEAN UseDefaultAddress; 26 EFI_IPv4_ADDRESS StationAddress; 27 EFI_IPv4_ADDRESS SubnetMask; 28 UINT16 StationPort; 29 EFI_IPv4_ADDRESS RemoteAddress; 30 UINT16 RemotePort; 31 BOOLEAN ActiveFlag; 32} EFI_TCP4_ACCESS_POINT; 33 34typedef struct { 35 UINT32 ReceiveBufferSize; 36 UINT32 SendBufferSize; 37 UINT32 MaxSynBackLog; 38 UINT32 ConnectionTimeout; 39 UINT32 DataRetries; 40 UINT32 FinTimeout; 41 UINT32 TimeWaitTimeout; 42 UINT32 KeepAliveProbes; 43 UINT32 KeepAliveTime; 44 UINT32 KeepAliveInterval; 45 BOOLEAN EnableNagle; 46 BOOLEAN EnableTimeStamp; 47 BOOLEAN EnableWindowScaling; 48 BOOLEAN EnableSelectiveAck; 49 BOOLEAN EnablePAthMtuDiscovery; 50} EFI_TCP4_OPTION; 51 52typedef struct { 53 // Receiving Filters 54 // I/O parameters 55 UINT8 TypeOfService; 56 UINT8 TimeToLive; 57 58 // Access Point 59 EFI_TCP4_ACCESS_POINT AccessPoint; 60 61 // TCP Control Options 62 EFI_TCP4_OPTION *ControlOption; 63} EFI_TCP4_CONFIG_DATA; 64 65typedef enum { 66 Tcp4StateClosed = 0, 67 Tcp4StateListen = 1, 68 Tcp4StateSynSent = 2, 69 Tcp4StateSynReceived = 3, 70 Tcp4StateEstablished = 4, 71 Tcp4StateFinWait1 = 5, 72 Tcp4StateFinWait2 = 6, 73 Tcp4StateClosing = 7, 74 Tcp4StateTimeWait = 8, 75 Tcp4StateCloseWait = 9, 76 Tcp4StateLastAck = 10 77} EFI_TCP4_CONNECTION_STATE; 78 79typedef 80EFI_STATUS 81(EFIAPI *EFI_TCP4_GET_MODE_DATA) ( 82 IN struct _EFI_TCP4 *This, 83 OUT EFI_TCP4_CONNECTION_STATE *Tcp4State OPTIONAL, 84 OUT EFI_TCP4_CONFIG_DATA *Tcp4ConfigData OPTIONAL, 85 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, 86 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 87 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 88 ); 89 90typedef 91EFI_STATUS 92(EFIAPI *EFI_TCP4_CONFIGURE) ( 93 IN struct _EFI_TCP4 *This, 94 IN EFI_TCP4_CONFIG_DATA *TcpConfigData OPTIONAL 95 ); 96 97typedef 98EFI_STATUS 99(EFIAPI *EFI_TCP4_ROUTES) ( 100 IN struct _EFI_TCP4 *This, 101 IN BOOLEAN DeleteRoute, 102 IN EFI_IPv4_ADDRESS *SubnetAddress, 103 IN EFI_IPv4_ADDRESS *SubnetMask, 104 IN EFI_IPv4_ADDRESS *GatewayAddress 105); 106 107typedef struct { 108 EFI_EVENT Event; 109 EFI_STATUS Status; 110} EFI_TCP4_COMPLETION_TOKEN; 111 112typedef struct { 113 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 114} EFI_TCP4_CONNECTION_TOKEN; 115 116typedef 117EFI_STATUS 118(EFIAPI *EFI_TCP4_CONNECT) ( 119 IN struct _EFI_TCP4 *This, 120 IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken 121 ); 122 123typedef struct { 124 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 125 EFI_HANDLE NewChildHandle; 126} EFI_TCP4_LISTEN_TOKEN; 127 128typedef 129EFI_STATUS 130(EFIAPI *EFI_TCP4_ACCEPT) ( 131 IN struct _EFI_TCP4 *This, 132 IN EFI_TCP4_LISTEN_TOKEN *ListenToken 133 ); 134 135#define EFI_CONNECTION_FIN EFIERR(104) 136#define EFI_CONNECTION_RESET EFIERR(105) 137#define EFI_CONNECTION_REFUSED EFIERR(106) 138 139typedef struct { 140 UINT32 FragmentLength; 141 VOID *FragmentBuffer; 142} EFI_TCP4_FRAGMENT_DATA; 143 144typedef struct { 145 BOOLEAN UrgentFlag; 146 UINT32 DataLength; 147 UINT32 FragmentCount; 148 EFI_TCP4_FRAGMENT_DATA FragmentTable[1]; 149} EFI_TCP4_RECEIVE_DATA; 150 151typedef struct { 152 BOOLEAN Push; 153 BOOLEAN Urgent; 154 UINT32 DataLength; 155 UINT32 FragmentCount; 156 EFI_TCP4_FRAGMENT_DATA FragmentTable[1]; 157} EFI_TCP4_TRANSMIT_DATA; 158 159typedef struct { 160 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 161 union { 162 EFI_TCP4_RECEIVE_DATA *RxData; 163 EFI_TCP4_TRANSMIT_DATA *TxData; 164 } Packet; 165} EFI_TCP4_IO_TOKEN; 166 167typedef 168EFI_STATUS 169(EFIAPI *EFI_TCP4_TRANSMIT) ( 170 IN struct _EFI_TCP4 *This, 171 IN EFI_TCP4_IO_TOKEN *Token 172 ); 173 174typedef 175EFI_STATUS 176(EFIAPI *EFI_TCP4_RECEIVE) ( 177 IN struct _EFI_TCP4 *This, 178 IN EFI_TCP4_IO_TOKEN *Token 179 ); 180 181typedef struct { 182 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 183 BOOLEAN AbortOnClose; 184} EFI_TCP4_CLOSE_TOKEN; 185 186typedef 187EFI_STATUS 188(EFIAPI *EFI_TCP4_CLOSE)( 189 IN struct _EFI_TCP4 *This, 190 IN EFI_TCP4_CLOSE_TOKEN *CloseToken 191 ); 192 193typedef 194EFI_STATUS 195(EFIAPI *EFI_TCP4_CANCEL)( 196 IN struct _EFI_TCP4 *This, 197 IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL 198); 199 200typedef 201EFI_STATUS 202(EFIAPI *EFI_TCP4_POLL) ( 203 IN struct _EFI_TCP4 *This 204 ); 205 206typedef struct _EFI_TCP4 { 207 EFI_TCP4_GET_MODE_DATA GetModeData; 208 EFI_TCP4_CONFIGURE Configure; 209 EFI_TCP4_ROUTES Routes; 210 EFI_TCP4_CONNECT Connect; 211 EFI_TCP4_ACCEPT Accept; 212 EFI_TCP4_TRANSMIT Transmit; 213 EFI_TCP4_RECEIVE Receive; 214 EFI_TCP4_CLOSE Close; 215 EFI_TCP4_CANCEL Cancel; 216 EFI_TCP4_POLL Poll; 217} EFI_TCP4; 218 219typedef enum { 220 Tcp6StateClosed = 0, 221 Tcp6StateListen = 1, 222 Tcp6StateSynSent = 2, 223 Tcp6StateSynReceived = 3, 224 Tcp6StateEstablished = 4, 225 Tcp6StateFinWait1 = 5, 226 Tcp6StateFinWait2 = 6, 227 Tcp6StateClosing = 7, 228 Tcp6StateTimeWait = 8, 229 Tcp6StateCloseWait = 9, 230 Tcp6StateLastAck = 10 231} EFI_TCP6_CONNECTION_STATE; 232 233typedef struct { 234 EFI_IPv6_ADDRESS StationAddress; 235 UINT16 StationPort; 236 EFI_IPv6_ADDRESS RemoteAddress; 237 UINT16 RemotePort; 238 BOOLEAN ActiveFlag; 239} EFI_TCP6_ACCESS_POINT; 240 241typedef struct { 242 UINT32 ReceiveBufferSize; 243 UINT32 SendBufferSize; 244 UINT32 MaxSynBackLog; 245 UINT32 ConnectionTimeout; 246 UINT32 DataRetries; 247 UINT32 FinTimeout; 248 UINT32 TimeWaitTimeout; 249 UINT32 KeepAliveProbes; 250 UINT32 KeepAliveTime; 251 UINT32 KeepAliveInterval; 252 BOOLEAN EnableNagle; 253 BOOLEAN EnableTimeStamp; 254 BOOLEAN EnableWindbowScaling; 255 BOOLEAN EnableSelectiveAck; 256 BOOLEAN EnablePathMtuDiscovery; 257} EFI_TCP6_OPTION; 258 259typedef struct { 260 UINT8 TrafficClass; 261 UINT8 HopLimit; 262 EFI_TCP6_ACCESS_POINT AccessPoint; 263 EFI_TCP6_OPTION *ControlOption; 264} EFI_TCP6_CONFIG_DATA; 265 266typedef 267EFI_STATUS 268(EFIAPI *EFI_TCP6_GET_MODE_DATA) ( 269 IN struct _EFI_TCP6 *This, 270 OUT EFI_TCP6_CONNECTION_STATE *Tcp6State OPTIONAL, 271 OUT EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL, 272 OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL, 273 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 274 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 275 ); 276 277typedef 278EFI_STATUS 279(EFIAPI *EFI_TCP6_CONFIGURE) ( 280 IN struct _EFI_TCP6 *This, 281 IN EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL 282 ); 283 284typedef struct { 285 EFI_EVENT Event; 286 EFI_STATUS Status; 287} EFI_TCP6_COMPLETION_TOKEN; 288 289typedef struct { 290 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 291} EFI_TCP6_CONNECTION_TOKEN; 292 293typedef 294EFI_STATUS 295(EFIAPI *EFI_TCP6_CONNECT) ( 296 IN struct _EFI_TCP6 *This, 297 IN EFI_TCP6_CONNECTION_TOKEN *ConnectionToken 298 ); 299 300typedef struct { 301 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 302 EFI_HANDLE NewChildHandle; 303} EFI_TCP6_LISTEN_TOKEN; 304 305typedef 306EFI_STATUS 307(EFIAPI *EFI_TCP6_ACCEPT) ( 308 IN struct _EFI_TCP6 *This, 309 IN EFI_TCP6_LISTEN_TOKEN *ListenToken 310 ); 311 312typedef struct { 313 UINT32 FragmentLength; 314 VOID *FragmentBuffer; 315} EFI_TCP6_FRAGMENT_DATA; 316 317typedef struct { 318 BOOLEAN UrgentFlag; 319 UINT32 DataLength; 320 UINT32 FragmentCount; 321 EFI_TCP6_FRAGMENT_DATA FragmentTable[1]; 322} EFI_TCP6_RECEIVE_DATA; 323 324typedef struct { 325 BOOLEAN Push; 326 BOOLEAN Urgent; 327 UINT32 DataLength; 328 UINT32 FragmentCount; 329 EFI_TCP6_FRAGMENT_DATA FragmentTable[1]; 330} EFI_TCP6_TRANSMIT_DATA; 331 332typedef struct { 333 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 334 union { 335 EFI_TCP6_RECEIVE_DATA *RxData; 336 EFI_TCP6_TRANSMIT_DATA *TxData; 337 } Packet; 338} EFI_TCP6_IO_TOKEN; 339 340typedef 341EFI_STATUS 342(EFIAPI *EFI_TCP6_TRANSMIT) ( 343 IN struct _EFI_TCP6 *This, 344 IN EFI_TCP6_IO_TOKEN *Token 345 ); 346 347typedef 348EFI_STATUS 349(EFIAPI *EFI_TCP6_RECEIVE) ( 350 IN struct _EFI_TCP6 *This, 351 IN EFI_TCP6_IO_TOKEN *Token 352 ); 353 354typedef struct { 355 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 356 BOOLEAN AbortOnClose; 357} EFI_TCP6_CLOSE_TOKEN; 358 359typedef 360EFI_STATUS 361(EFIAPI *EFI_TCP6_CLOSE)( 362 IN struct _EFI_TCP6 *This, 363 IN EFI_TCP6_CLOSE_TOKEN *CloseToken 364 ); 365 366typedef 367EFI_STATUS 368(EFIAPI *EFI_TCP6_CANCEL)( 369 IN struct _EFI_TCP6 *This, 370 IN EFI_TCP6_COMPLETION_TOKEN *Token OPTIONAL 371 ); 372 373typedef 374EFI_STATUS 375(EFIAPI *EFI_TCP6_POLL) ( 376 IN struct _EFI_TCP6 *This 377 ); 378 379typedef struct _EFI_TCP6 { 380 EFI_TCP6_GET_MODE_DATA GetModeData; 381 EFI_TCP6_CONFIGURE Configure; 382 EFI_TCP6_CONNECT Connect; 383 EFI_TCP6_ACCEPT Accept; 384 EFI_TCP6_TRANSMIT Transmit; 385 EFI_TCP6_RECEIVE Receive; 386 EFI_TCP6_CLOSE Close; 387 EFI_TCP6_CANCEL Cancel; 388 EFI_TCP6_POLL Poll; 389} EFI_TCP6; 390 391#endif /* _EFI_TCP_H */ 392