1 /* $NetBSD: efitcp.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $ */ 2 3 #ifndef _EFI_TCP_H 4 #define _EFI_TCP_H 5 6 /*++ 7 Copyright (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 23 INTERFACE_DECL(_EFI_TCP4); 24 INTERFACE_DECL(_EFI_TCP6); 25 26 typedef 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 36 typedef 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 54 typedef 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 67 typedef 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 81 typedef 82 EFI_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 92 typedef 93 EFI_STATUS 94 (EFIAPI *EFI_TCP4_CONFIGURE) ( 95 IN struct _EFI_TCP4 *This, 96 IN EFI_TCP4_CONFIG_DATA *TcpConfigData OPTIONAL 97 ); 98 99 typedef 100 EFI_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 109 typedef struct { 110 EFI_EVENT Event; 111 EFI_STATUS Status; 112 } EFI_TCP4_COMPLETION_TOKEN; 113 114 typedef struct { 115 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 116 } EFI_TCP4_CONNECTION_TOKEN; 117 118 typedef 119 EFI_STATUS 120 (EFIAPI *EFI_TCP4_CONNECT) ( 121 IN struct _EFI_TCP4 *This, 122 IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken 123 ); 124 125 typedef struct { 126 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 127 EFI_HANDLE NewChildHandle; 128 } EFI_TCP4_LISTEN_TOKEN; 129 130 typedef 131 EFI_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 141 typedef struct { 142 UINT32 FragmentLength; 143 VOID *FragmentBuffer; 144 } EFI_TCP4_FRAGMENT_DATA; 145 146 typedef struct { 147 BOOLEAN UrgentFlag; 148 UINT32 DataLength; 149 UINT32 FragmentCount; 150 EFI_TCP4_FRAGMENT_DATA FragmentTable[1]; 151 } EFI_TCP4_RECEIVE_DATA; 152 153 typedef 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 161 typedef 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 169 typedef 170 EFI_STATUS 171 (EFIAPI *EFI_TCP4_TRANSMIT) ( 172 IN struct _EFI_TCP4 *This, 173 IN EFI_TCP4_IO_TOKEN *Token 174 ); 175 176 typedef 177 EFI_STATUS 178 (EFIAPI *EFI_TCP4_RECEIVE) ( 179 IN struct _EFI_TCP4 *This, 180 IN EFI_TCP4_IO_TOKEN *Token 181 ); 182 183 typedef struct { 184 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 185 BOOLEAN AbortOnClose; 186 } EFI_TCP4_CLOSE_TOKEN; 187 188 typedef 189 EFI_STATUS 190 (EFIAPI *EFI_TCP4_CLOSE)( 191 IN struct _EFI_TCP4 *This, 192 IN EFI_TCP4_CLOSE_TOKEN *CloseToken 193 ); 194 195 typedef 196 EFI_STATUS 197 (EFIAPI *EFI_TCP4_CANCEL)( 198 IN struct _EFI_TCP4 *This, 199 IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL 200 ); 201 202 typedef 203 EFI_STATUS 204 (EFIAPI *EFI_TCP4_POLL) ( 205 IN struct _EFI_TCP4 *This 206 ); 207 208 typedef 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 221 typedef 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 235 typedef 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 243 typedef 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 261 typedef struct { 262 UINT8 TrafficClass; 263 UINT8 HopLimit; 264 EFI_TCP6_ACCESS_POINT AccessPoint; 265 EFI_TCP6_OPTION *ControlOption; 266 } EFI_TCP6_CONFIG_DATA; 267 268 typedef 269 EFI_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 279 typedef 280 EFI_STATUS 281 (EFIAPI *EFI_TCP6_CONFIGURE) ( 282 IN struct _EFI_TCP6 *This, 283 IN EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL 284 ); 285 286 typedef struct { 287 EFI_EVENT Event; 288 EFI_STATUS Status; 289 } EFI_TCP6_COMPLETION_TOKEN; 290 291 typedef struct { 292 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 293 } EFI_TCP6_CONNECTION_TOKEN; 294 295 typedef 296 EFI_STATUS 297 (EFIAPI *EFI_TCP6_CONNECT) ( 298 IN struct _EFI_TCP6 *This, 299 IN EFI_TCP6_CONNECTION_TOKEN *ConnectionToken 300 ); 301 302 typedef struct { 303 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 304 EFI_HANDLE NewChildHandle; 305 } EFI_TCP6_LISTEN_TOKEN; 306 307 typedef 308 EFI_STATUS 309 (EFIAPI *EFI_TCP6_ACCEPT) ( 310 IN struct _EFI_TCP6 *This, 311 IN EFI_TCP6_LISTEN_TOKEN *ListenToken 312 ); 313 314 typedef struct { 315 UINT32 FragmentLength; 316 VOID *FragmentBuffer; 317 } EFI_TCP6_FRAGMENT_DATA; 318 319 typedef struct { 320 BOOLEAN UrgentFlag; 321 UINT32 DataLength; 322 UINT32 FragmentCount; 323 EFI_TCP6_FRAGMENT_DATA FragmentTable[1]; 324 } EFI_TCP6_RECEIVE_DATA; 325 326 typedef 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 334 typedef 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 342 typedef 343 EFI_STATUS 344 (EFIAPI *EFI_TCP6_TRANSMIT) ( 345 IN struct _EFI_TCP6 *This, 346 IN EFI_TCP6_IO_TOKEN *Token 347 ); 348 349 typedef 350 EFI_STATUS 351 (EFIAPI *EFI_TCP6_RECEIVE) ( 352 IN struct _EFI_TCP6 *This, 353 IN EFI_TCP6_IO_TOKEN *Token 354 ); 355 356 typedef struct { 357 EFI_TCP6_COMPLETION_TOKEN CompletionToken; 358 BOOLEAN AbortOnClose; 359 } EFI_TCP6_CLOSE_TOKEN; 360 361 typedef 362 EFI_STATUS 363 (EFIAPI *EFI_TCP6_CLOSE)( 364 IN struct _EFI_TCP6 *This, 365 IN EFI_TCP6_CLOSE_TOKEN *CloseToken 366 ); 367 368 typedef 369 EFI_STATUS 370 (EFIAPI *EFI_TCP6_CANCEL)( 371 IN struct _EFI_TCP6 *This, 372 IN EFI_TCP6_COMPLETION_TOKEN *Token OPTIONAL 373 ); 374 375 typedef 376 EFI_STATUS 377 (EFIAPI *EFI_TCP6_POLL) ( 378 IN struct _EFI_TCP6 *This 379 ); 380 381 typedef 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