1199767fToomas Soome#ifndef _EFI_UDP_H
2199767fToomas Soome#define _EFI_UDP_H
3199767fToomas Soome
4199767fToomas Soome
5199767fToomas Soome/*++
6199767fToomas SoomeCopyright (c) 2013  Intel Corporation
7199767fToomas Soome
8199767fToomas Soome--*/
9199767fToomas Soome
10199767fToomas Soome#define EFI_UDP4_SERVICE_BINDING_PROTOCOL \
11199767fToomas Soome    { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} }
12199767fToomas Soome
13199767fToomas Soome#define EFI_UDP4_PROTOCOL \
14199767fToomas Soome    { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} }
15199767fToomas Soome
16199767fToomas Soome#define EFI_UDP6_SERVICE_BINDING_PROTOCOL \
17199767fToomas Soome    { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} }
18199767fToomas Soome
19199767fToomas Soome#define EFI_UDP6_PROTOCOL \
20199767fToomas Soome    { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} }
21199767fToomas Soome
22199767fToomas SoomeINTERFACE_DECL(_EFI_UDP4);
23199767fToomas SoomeINTERFACE_DECL(_EFI_UDP6);
24199767fToomas Soome
25199767fToomas Soometypedef struct {
26199767fToomas Soome    BOOLEAN          AcceptBroadcast;
27199767fToomas Soome    BOOLEAN          AcceptPromiscuous;
28199767fToomas Soome    BOOLEAN          AcceptAnyPort;
29199767fToomas Soome    BOOLEAN          AllowDuplicatePort;
30199767fToomas Soome    UINT8            TypeOfService;
31199767fToomas Soome    UINT8            TimeToLive;
32199767fToomas Soome    BOOLEAN          DoNotFragment;
33199767fToomas Soome    UINT32           ReceiveTimeout;
34199767fToomas Soome    UINT32           TransmitTimeout;
35199767fToomas Soome    BOOLEAN          UseDefaultAddress;
36199767fToomas Soome    EFI_IPv4_ADDRESS StationAddress;
37199767fToomas Soome    EFI_IPv4_ADDRESS SubnetMask;
38199767fToomas Soome    UINT16           StationPort;
39199767fToomas Soome    EFI_IPv4_ADDRESS RemoteAddress;
40199767fToomas Soome    UINT16           RemotePort;
41199767fToomas Soome} EFI_UDP4_CONFIG_DATA;
42199767fToomas Soome
43199767fToomas Soometypedef
44199767fToomas SoomeEFI_STATUS
45199767fToomas Soome(EFIAPI *EFI_UDP4_GET_MODE_DATA) (
46199767fToomas Soome    IN struct _EFI_UDP4                 *This,
47199767fToomas Soome    OUT EFI_UDP4_CONFIG_DATA            *Udp4ConfigData OPTIONAL,
48199767fToomas Soome    OUT EFI_IP4_MODE_DATA               *Ip4ModeData    OPTIONAL,
49199767fToomas Soome    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
50199767fToomas Soome    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
51199767fToomas Soome    );
52199767fToomas Soome
53199767fToomas Soometypedef
54199767fToomas SoomeEFI_STATUS
55199767fToomas Soome(EFIAPI *EFI_UDP4_CONFIGURE) (
56199767fToomas Soome    IN struct _EFI_UDP4     *This,
57199767fToomas Soome    IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
58199767fToomas Soome    );
59199767fToomas Soome
60199767fToomas Soometypedef
61199767fToomas SoomeEFI_STATUS
62199767fToomas Soome(EFIAPI *EFI_UDP4_GROUPS) (
63199767fToomas Soome    IN struct _EFI_UDP4 *This,
64199767fToomas Soome    IN BOOLEAN          JoinFlag,
65199767fToomas Soome    IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
66199767fToomas Soome    );
67199767fToomas Soome
68199767fToomas Soometypedef
69199767fToomas SoomeEFI_STATUS
70199767fToomas Soome(EFIAPI *EFI_UDP4_ROUTES) (
71199767fToomas Soome    IN struct _EFI_UDP4 *This,
72199767fToomas Soome    IN BOOLEAN          DeleteRoute,
73199767fToomas Soome    IN EFI_IPv4_ADDRESS *SubnetAddress,
74199767fToomas Soome    IN EFI_IPv4_ADDRESS *SubnetMask,
75199767fToomas Soome    IN EFI_IPv4_ADDRESS *GatewayAddress
76199767fToomas Soome    );
77199767fToomas Soome
78199767fToomas Soome#define EFI_NETWORK_UNREACHABLE  EFIERR(100)
79199767fToomas Soome#define EFI_HOST_UNREACHABLE     EFIERR(101)
80199767fToomas Soome#define EFI_PROTOCOL_UNREACHABLE EFIERR(102)
81199767fToomas Soome#define EFI_PORT_UNREACHABLE     EFIERR(103)
82199767fToomas Soome
83199767fToomas Soometypedef struct {
84199767fToomas Soome    EFI_IPv4_ADDRESS SourceAddress;
85199767fToomas Soome    UINT16           SourcePort;
86199767fToomas Soome    EFI_IPv4_ADDRESS DestinationAddress;
87199767fToomas Soome    UINT16           DestinationPort;
88199767fToomas Soome} EFI_UDP4_SESSION_DATA;
89199767fToomas Soome
90199767fToomas Soometypedef struct {
91199767fToomas Soome    UINT32 FragmentLength;
92199767fToomas Soome    VOID   *FragmentBuffer;
93199767fToomas Soome} EFI_UDP4_FRAGMENT_DATA;
94199767fToomas Soome
95199767fToomas Soometypedef struct {
96199767fToomas Soome    EFI_TIME               TimeStamp;
97199767fToomas Soome    EFI_EVENT              RecycleSignal;
98199767fToomas Soome    EFI_UDP4_SESSION_DATA  UdpSession;
99199767fToomas Soome    UINT32                 DataLength;
100199767fToomas Soome    UINT32                 FragmentCount;
101199767fToomas Soome    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
102199767fToomas Soome} EFI_UDP4_RECEIVE_DATA;
103199767fToomas Soome
104199767fToomas Soometypedef struct {
105199767fToomas Soome    EFI_UDP4_SESSION_DATA  *UdpSessionData;
106199767fToomas Soome    EFI_IPv4_ADDRESS       *GatewayAddress;
107199767fToomas Soome    UINT32                 DataLength;
108199767fToomas Soome    UINT32                 FragmentCount;
109199767fToomas Soome    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
110199767fToomas Soome} EFI_UDP4_TRANSMIT_DATA;
111199767fToomas Soome
112199767fToomas Soometypedef struct {
113199767fToomas Soome    EFI_EVENT                  Event;
114199767fToomas Soome    EFI_STATUS                 Status;
115199767fToomas Soome    union {
116199767fToomas Soome        EFI_UDP4_RECEIVE_DATA  *RxData;
117199767fToomas Soome	EFI_UDP4_TRANSMIT_DATA *TxData;
118199767fToomas Soome    }                          Packet;
119199767fToomas Soome} EFI_UDP4_COMPLETION_TOKEN;
120199767fToomas Soome
121199767fToomas Soometypedef
122199767fToomas SoomeEFI_STATUS
123199767fToomas Soome(EFIAPI *EFI_UDP4_TRANSMIT) (
124199767fToomas Soome    IN struct _EFI_UDP4          *This,
125199767fToomas Soome    IN EFI_UDP4_COMPLETION_TOKEN *Token
126199767fToomas Soome    );
127199767fToomas Soome
128199767fToomas Soometypedef
129199767fToomas SoomeEFI_STATUS
130199767fToomas Soome(EFIAPI *EFI_UDP4_RECEIVE) (
131199767fToomas Soome    IN struct _EFI_UDP4          *This,
132199767fToomas Soome    IN EFI_UDP4_COMPLETION_TOKEN *Token
133199767fToomas Soome    );
134199767fToomas Soome
135199767fToomas Soometypedef
136199767fToomas SoomeEFI_STATUS
137199767fToomas Soome(EFIAPI *EFI_UDP4_CANCEL)(
138199767fToomas Soome    IN struct _EFI_UDP4          *This,
139199767fToomas Soome    IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
140199767fToomas Soome    );
141199767fToomas Soome
142199767fToomas Soometypedef
143199767fToomas SoomeEFI_STATUS
144199767fToomas Soome(EFIAPI *EFI_UDP4_POLL) (
145199767fToomas Soome    IN struct _EFI_UDP4 *This
146199767fToomas Soome    );
147199767fToomas Soome
148199767fToomas Soometypedef struct _EFI_UDP4 {
149199767fToomas Soome    EFI_UDP4_GET_MODE_DATA GetModeData;
150199767fToomas Soome    EFI_UDP4_CONFIGURE     Configure;
151199767fToomas Soome    EFI_UDP4_GROUPS        Groups;
152199767fToomas Soome    EFI_UDP4_ROUTES        Routes;
153199767fToomas Soome    EFI_UDP4_TRANSMIT      Transmit;
154199767fToomas Soome    EFI_UDP4_RECEIVE       Receive;
155199767fToomas Soome    EFI_UDP4_CANCEL        Cancel;
156199767fToomas Soome    EFI_UDP4_POLL          Poll;
157199767fToomas Soome} EFI_UDP4;
158199767fToomas Soome
159199767fToomas Soometypedef struct {
160199767fToomas Soome    BOOLEAN          AcceptPromiscuous;
161199767fToomas Soome    BOOLEAN          AcceptAnyPort;
162199767fToomas Soome    BOOLEAN          AllowDuplicatePort;
163199767fToomas Soome    UINT8            TrafficClass;
164199767fToomas Soome    UINT8            HopLimit;
165199767fToomas Soome    UINT32           ReceiveTimeout;
166199767fToomas Soome    UINT32           TransmitTimeout;
167199767fToomas Soome    EFI_IPv6_ADDRESS StationAddress;
168199767fToomas Soome    UINT16           StationPort;
169199767fToomas Soome    EFI_IPv6_ADDRESS RemoteAddress;
170199767fToomas Soome    UINT16           RemotePort;
171199767fToomas Soome} EFI_UDP6_CONFIG_DATA;
172199767fToomas Soome
173199767fToomas Soometypedef
174199767fToomas SoomeEFI_STATUS
175199767fToomas Soome(EFIAPI *EFI_UDP6_GET_MODE_DATA) (
176199767fToomas Soome    IN struct _EFI_UDP6                 *This,
177199767fToomas Soome    OUT EFI_UDP6_CONFIG_DATA            *Udp6ConfigData OPTIONAL,
178199767fToomas Soome    OUT EFI_IP6_MODE_DATA               *Ip6ModeData    OPTIONAL,
179199767fToomas Soome    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
180199767fToomas Soome    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
181199767fToomas Soome    );
182199767fToomas Soome
183199767fToomas Soometypedef
184199767fToomas SoomeEFI_STATUS
185199767fToomas Soome(EFIAPI *EFI_UDP6_CONFIGURE) (
186199767fToomas Soome    IN struct _EFI_UDP6     *This,
187199767fToomas Soome    IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
188199767fToomas Soome    );
189199767fToomas Soome
190199767fToomas Soometypedef
191199767fToomas SoomeEFI_STATUS
192199767fToomas Soome(EFIAPI *EFI_UDP6_GROUPS) (
193199767fToomas Soome    IN struct _EFI_UDP6 *This,
194199767fToomas Soome    IN BOOLEAN          JoinFlag,
195199767fToomas Soome    IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
196199767fToomas Soome    );
197199767fToomas Soome
198199767fToomas Soometypedef struct {
199199767fToomas Soome    EFI_IPv6_ADDRESS SourceAddress;
200199767fToomas Soome    UINT16           SourcePort;
201199767fToomas Soome    EFI_IPv6_ADDRESS DestinationAddress;
202199767fToomas Soome    UINT16           DestinationPort;
203199767fToomas Soome} EFI_UDP6_SESSION_DATA;
204199767fToomas Soome
205199767fToomas Soometypedef struct {
206199767fToomas Soome    UINT32 FragmentLength;
207199767fToomas Soome    VOID   *FragmentBuffer;
208199767fToomas Soome} EFI_UDP6_FRAGMENT_DATA;
209199767fToomas Soome
210199767fToomas Soometypedef struct {
211199767fToomas Soome    EFI_TIME               TimeStamp;
212199767fToomas Soome    EFI_EVENT              RecycleSignal;
213199767fToomas Soome    EFI_UDP6_SESSION_DATA  UdpSession;
214199767fToomas Soome    UINT32                 DataLength;
215199767fToomas Soome    UINT32                 FragmentCount;
216199767fToomas Soome    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
217199767fToomas Soome} EFI_UDP6_RECEIVE_DATA;
218199767fToomas Soome
219199767fToomas Soometypedef struct {
220199767fToomas Soome    EFI_UDP6_SESSION_DATA  *UdpSessionData;
221199767fToomas Soome    UINT32                 DataLength;
222199767fToomas Soome    UINT32                 FragmentCount;
223199767fToomas Soome    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
224199767fToomas Soome} EFI_UDP6_TRANSMIT_DATA;
225199767fToomas Soome
226199767fToomas Soometypedef struct {
227199767fToomas Soome    EFI_EVENT                  Event;
228199767fToomas Soome    EFI_STATUS                 Status;
229199767fToomas Soome    union {
230199767fToomas Soome        EFI_UDP6_RECEIVE_DATA  *RxData;
231199767fToomas Soome        EFI_UDP6_TRANSMIT_DATA *TxData;
232199767fToomas Soome    }                          Packet;
233199767fToomas Soome} EFI_UDP6_COMPLETION_TOKEN;
234199767fToomas Soome
235199767fToomas Soometypedef
236199767fToomas SoomeEFI_STATUS
237199767fToomas Soome(EFIAPI *EFI_UDP6_TRANSMIT) (
238199767fToomas Soome    IN struct _EFI_UDP6          *This,
239199767fToomas Soome    IN EFI_UDP6_COMPLETION_TOKEN *Token
240199767fToomas Soome    );
241199767fToomas Soome
242199767fToomas Soometypedef
243199767fToomas SoomeEFI_STATUS
244199767fToomas Soome(EFIAPI *EFI_UDP6_RECEIVE) (
245199767fToomas Soome    IN struct _EFI_UDP6          *This,
246199767fToomas Soome    IN EFI_UDP6_COMPLETION_TOKEN *Token
247199767fToomas Soome    );
248199767fToomas Soome
249199767fToomas Soometypedef
250199767fToomas SoomeEFI_STATUS
251199767fToomas Soome(EFIAPI *EFI_UDP6_CANCEL)(
252199767fToomas Soome    IN struct _EFI_UDP6          *This,
253199767fToomas Soome    IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
254199767fToomas Soome    );
255199767fToomas Soome
256199767fToomas Soometypedef
257199767fToomas SoomeEFI_STATUS
258199767fToomas Soome(EFIAPI *EFI_UDP6_POLL) (
259199767fToomas Soome    IN struct _EFI_UDP6 *This
260199767fToomas Soome    );
261199767fToomas Soome
262199767fToomas Soometypedef struct _EFI_UDP6 {
263199767fToomas Soome    EFI_UDP6_GET_MODE_DATA GetModeData;
264199767fToomas Soome    EFI_UDP6_CONFIGURE     Configure;
265199767fToomas Soome    EFI_UDP6_GROUPS        Groups;
266199767fToomas Soome    EFI_UDP6_TRANSMIT      Transmit;
267199767fToomas Soome    EFI_UDP6_RECEIVE       Receive;
268199767fToomas Soome    EFI_UDP6_CANCEL        Cancel;
269199767fToomas Soome    EFI_UDP6_POLL          Poll;
270199767fToomas Soome} EFI_UDP6;
271199767fToomas Soome
272199767fToomas Soome#endif /* _EFI_UDP_H */
273