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