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