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