1 #ifndef _EFI_TCP_H 2 #define _EFI_TCP_H 3 4 /*++ 5 Copyright (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 21 INTERFACE_DECL(_EFI_TCP4); 22 INTERFACE_DECL(_EFI_TCP6); 23 24 typedef 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 34 typedef 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 52 typedef 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 65 typedef 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 79 typedef 80 EFI_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 90 typedef 91 EFI_STATUS 92 (EFIAPI *EFI_TCP4_CONFIGURE) ( 93 IN struct _EFI_TCP4 *This, 94 IN EFI_TCP4_CONFIG_DATA *TcpConfigData OPTIONAL 95 ); 96 97 typedef 98 EFI_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 107 typedef struct { 108 EFI_EVENT Event; 109 EFI_STATUS Status; 110 } EFI_TCP4_COMPLETION_TOKEN; 111 112 typedef struct { 113 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 114 } EFI_TCP4_CONNECTION_TOKEN; 115 116 typedef 117 EFI_STATUS 118 (EFIAPI *EFI_TCP4_CONNECT) ( 119 IN struct _EFI_TCP4 *This, 120 IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken 121 ); 122 123 typedef struct { 124 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 125 EFI_HANDLE NewChildHandle; 126 } EFI_TCP4_LISTEN_TOKEN; 127 128 typedef 129 EFI_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 139 typedef struct { 140 UINT32 FragmentLength; 141 VOID *FragmentBuffer; 142 } EFI_TCP4_FRAGMENT_DATA; 143 144 typedef struct { 145 BOOLEAN UrgentFlag; 146 UINT32 DataLength; 147 UINT32 FragmentCount; 148 EFI_TCP4_FRAGMENT_DATA FragmentTable[1]; 149 } EFI_TCP4_RECEIVE_DATA; 150 151 typedef 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 159 typedef 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 167 typedef 168 EFI_STATUS 169 (EFIAPI *EFI_TCP4_TRANSMIT) ( 170 IN struct _EFI_TCP4 *This, 171 IN EFI_TCP4_IO_TOKEN *Token 172 ); 173 174 typedef 175 EFI_STATUS 176 (EFIAPI *EFI_TCP4_RECEIVE) ( 177 IN struct _EFI_TCP4 *This, 178 IN EFI_TCP4_IO_TOKEN *Token 179 ); 180 181 typedef struct { 182 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 183 BOOLEAN AbortOnClose; 184 } EFI_TCP4_CLOSE_TOKEN; 185 186 typedef 187 EFI_STATUS 188 (EFIAPI *EFI_TCP4_CLOSE)( 189 IN struct _EFI_TCP4 *This, 190 IN EFI_TCP4_CLOSE_TOKEN *CloseToken 191 ); 192 193 typedef 194 EFI_STATUS 195 (EFIAPI *EFI_TCP4_CANCEL)( 196 IN struct _EFI_TCP4 *This, 197 IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL 198 ); 199 200 typedef 201 EFI_STATUS 202 (EFIAPI *EFI_TCP4_POLL) ( 203 IN struct _EFI_TCP4 *This 204 ); 205 206 typedef 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 219 typedef 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 233 typedef 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 241 typedef 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 259 typedef struct { 260 UINT8 TrafficClass; 261 UINT8 HopLimit; 262 EFI_TCP6_ACCESS_POINT AccessPoint; 263 EFI_TCP6_OPTION *ControlOption; 264 } EFI_TCP6_CONFIG_DATA; 265 266 typedef 267 EFI_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 277 typedef 278 EFI_STATUS 279 (EFIAPI *EFI_TCP6_CONFIGURE) ( 280 IN struct _EFI_TCP6 *This, 281 IN EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL 282 ); 283 284 typedef struct { 285 EFI_EVENT Event; 286 EFI_STATUS Status; 287 } EFI_TCP6_COMPLETION_TOKEN; 288 289 typedef struct { 290 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 291 } EFI_TCP6_CONNECTION_TOKEN; 292 293 typedef 294 EFI_STATUS 295 (EFIAPI *EFI_TCP6_CONNECT) ( 296 IN struct _EFI_TCP6 *This, 297 IN EFI_TCP6_CONNECTION_TOKEN *ConnectionToken 298 ); 299 300 typedef struct { 301 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 302 EFI_HANDLE NewChildHandle; 303 } EFI_TCP6_LISTEN_TOKEN; 304 305 typedef 306 EFI_STATUS 307 (EFIAPI *EFI_TCP6_ACCEPT) ( 308 IN struct _EFI_TCP6 *This, 309 IN EFI_TCP6_LISTEN_TOKEN *ListenToken 310 ); 311 312 typedef struct { 313 UINT32 FragmentLength; 314 VOID *FragmentBuffer; 315 } EFI_TCP6_FRAGMENT_DATA; 316 317 typedef struct { 318 BOOLEAN UrgentFlag; 319 UINT32 DataLength; 320 UINT32 FragmentCount; 321 EFI_TCP6_FRAGMENT_DATA FragmentTable[1]; 322 } EFI_TCP6_RECEIVE_DATA; 323 324 typedef 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 332 typedef 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 340 typedef 341 EFI_STATUS 342 (EFIAPI *EFI_TCP6_TRANSMIT) ( 343 IN struct _EFI_TCP6 *This, 344 IN EFI_TCP6_IO_TOKEN *Token 345 ); 346 347 typedef 348 EFI_STATUS 349 (EFIAPI *EFI_TCP6_RECEIVE) ( 350 IN struct _EFI_TCP6 *This, 351 IN EFI_TCP6_IO_TOKEN *Token 352 ); 353 354 typedef struct { 355 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 356 BOOLEAN AbortOnClose; 357 } EFI_TCP6_CLOSE_TOKEN; 358 359 typedef 360 EFI_STATUS 361 (EFIAPI *EFI_TCP6_CLOSE)( 362 IN struct _EFI_TCP6 *This, 363 IN EFI_TCP6_CLOSE_TOKEN *CloseToken 364 ); 365 366 typedef 367 EFI_STATUS 368 (EFIAPI *EFI_TCP6_CANCEL)( 369 IN struct _EFI_TCP6 *This, 370 IN EFI_TCP6_COMPLETION_TOKEN *Token OPTIONAL 371 ); 372 373 typedef 374 EFI_STATUS 375 (EFIAPI *EFI_TCP6_POLL) ( 376 IN struct _EFI_TCP6 *This 377 ); 378 379 typedef 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