1241675Suqs/*	$NetBSD$	*/
2241675Suqs
3241675Suqs#ifndef _EFI_UDP_H
4241675Suqs#define _EFI_UDP_H
5241675Suqs
6241675Suqs
7241675Suqs/*++
8241675SuqsCopyright (c) 2013  Intel Corporation
9241675Suqs
10241675Suqs--*/
11241675Suqs
12241675Suqs#define EFI_UDP4_SERVICE_BINDING_PROTOCOL \
13241675Suqs    { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} }
14241675Suqs
15241675Suqs#define EFI_UDP4_PROTOCOL \
16241675Suqs    { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} }
17241675Suqs
18241675Suqs#define EFI_UDP6_SERVICE_BINDING_PROTOCOL \
19241675Suqs    { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} }
20241675Suqs
21241675Suqs#define EFI_UDP6_PROTOCOL \
22241675Suqs    { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} }
23241675Suqs
24241675SuqsINTERFACE_DECL(_EFI_UDP4);
25241675SuqsINTERFACE_DECL(_EFI_UDP6);
26241675Suqs
27241675Suqstypedef struct {
28241675Suqs    BOOLEAN          AcceptBroadcast;
29241675Suqs    BOOLEAN          AcceptPromiscuous;
30241675Suqs    BOOLEAN          AcceptAnyPort;
31241675Suqs    BOOLEAN          AllowDuplicatePort;
32241675Suqs    UINT8            TypeOfService;
33241675Suqs    UINT8            TimeToLive;
34241675Suqs    BOOLEAN          DoNotFragment;
35241675Suqs    UINT32           ReceiveTimeout;
36241675Suqs    UINT32           TransmitTimeout;
37241675Suqs    BOOLEAN          UseDefaultAddress;
38241675Suqs    EFI_IPv4_ADDRESS StationAddress;
39241675Suqs    EFI_IPv4_ADDRESS SubnetMask;
40241675Suqs    UINT16           StationPort;
41241675Suqs    EFI_IPv4_ADDRESS RemoteAddress;
42241675Suqs    UINT16           RemotePort;
43241675Suqs} EFI_UDP4_CONFIG_DATA;
44241675Suqs
45241675Suqstypedef
46241675SuqsEFI_STATUS
47241675Suqs(EFIAPI *EFI_UDP4_GET_MODE_DATA) (
48241675Suqs    IN struct _EFI_UDP4                 *This,
49241675Suqs    OUT EFI_UDP4_CONFIG_DATA            *Udp4ConfigData OPTIONAL,
50241675Suqs    OUT EFI_IP4_MODE_DATA               *Ip4ModeData    OPTIONAL,
51241675Suqs    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
52241675Suqs    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
53241675Suqs    );
54241675Suqs
55241675Suqstypedef
56241675SuqsEFI_STATUS
57241675Suqs(EFIAPI *EFI_UDP4_CONFIGURE) (
58241675Suqs    IN struct _EFI_UDP4     *This,
59241675Suqs    IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
60241675Suqs    );
61241675Suqs
62241675Suqstypedef
63241675SuqsEFI_STATUS
64241675Suqs(EFIAPI *EFI_UDP4_GROUPS) (
65241675Suqs    IN struct _EFI_UDP4 *This,
66241675Suqs    IN BOOLEAN          JoinFlag,
67241675Suqs    IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
68241675Suqs    );
69241675Suqs
70241675Suqstypedef
71241675SuqsEFI_STATUS
72241675Suqs(EFIAPI *EFI_UDP4_ROUTES) (
73241675Suqs    IN struct _EFI_UDP4 *This,
74241675Suqs    IN BOOLEAN          DeleteRoute,
75241675Suqs    IN EFI_IPv4_ADDRESS *SubnetAddress,
76241675Suqs    IN EFI_IPv4_ADDRESS *SubnetMask,
77241675Suqs    IN EFI_IPv4_ADDRESS *GatewayAddress
78241675Suqs    );
79241675Suqs
80241675Suqs#define EFI_NETWORK_UNREACHABLE  EFIERR(100)
81241675Suqs#define EFI_HOST_UNREACHABLE     EFIERR(101)
82241675Suqs#define EFI_PROTOCOL_UNREACHABLE EFIERR(102)
83241675Suqs#define EFI_PORT_UNREACHABLE     EFIERR(103)
84241675Suqs
85241675Suqstypedef struct {
86241675Suqs    EFI_IPv4_ADDRESS SourceAddress;
87241675Suqs    UINT16           SourcePort;
88241675Suqs    EFI_IPv4_ADDRESS DestinationAddress;
89241675Suqs    UINT16           DestinationPort;
90241675Suqs} EFI_UDP4_SESSION_DATA;
91241675Suqs
92241675Suqstypedef struct {
93241675Suqs    UINT32 FragmentLength;
94241675Suqs    VOID   *FragmentBuffer;
95241675Suqs} EFI_UDP4_FRAGMENT_DATA;
96241675Suqs
97241675Suqstypedef struct {
98241675Suqs    EFI_TIME               TimeStamp;
99241675Suqs    EFI_EVENT              RecycleSignal;
100241675Suqs    EFI_UDP4_SESSION_DATA  UdpSession;
101241675Suqs    UINT32                 DataLength;
102241675Suqs    UINT32                 FragmentCount;
103241675Suqs    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
104241675Suqs} EFI_UDP4_RECEIVE_DATA;
105241675Suqs
106241675Suqstypedef struct {
107241675Suqs    EFI_UDP4_SESSION_DATA  *UdpSessionData;
108241675Suqs    EFI_IPv4_ADDRESS       *GatewayAddress;
109241675Suqs    UINT32                 DataLength;
110241675Suqs    UINT32                 FragmentCount;
111241675Suqs    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
112241675Suqs} EFI_UDP4_TRANSMIT_DATA;
113241675Suqs
114241675Suqstypedef struct {
115241675Suqs    EFI_EVENT                  Event;
116241675Suqs    EFI_STATUS                 Status;
117241675Suqs    union {
118241675Suqs        EFI_UDP4_RECEIVE_DATA  *RxData;
119241675Suqs	EFI_UDP4_TRANSMIT_DATA *TxData;
120241675Suqs    }                          Packet;
121241675Suqs} EFI_UDP4_COMPLETION_TOKEN;
122241675Suqs
123241675Suqstypedef
124241675SuqsEFI_STATUS
125241675Suqs(EFIAPI *EFI_UDP4_TRANSMIT) (
126241675Suqs    IN struct _EFI_UDP4          *This,
127241675Suqs    IN EFI_UDP4_COMPLETION_TOKEN *Token
128241675Suqs    );
129241675Suqs
130241675Suqstypedef
131241675SuqsEFI_STATUS
132241675Suqs(EFIAPI *EFI_UDP4_RECEIVE) (
133241675Suqs    IN struct _EFI_UDP4          *This,
134241675Suqs    IN EFI_UDP4_COMPLETION_TOKEN *Token
135241675Suqs    );
136241675Suqs
137241675Suqstypedef
138241675SuqsEFI_STATUS
139241675Suqs(EFIAPI *EFI_UDP4_CANCEL)(
140241675Suqs    IN struct _EFI_UDP4          *This,
141241675Suqs    IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
142241675Suqs    );
143241675Suqs
144241675Suqstypedef
145241675SuqsEFI_STATUS
146241675Suqs(EFIAPI *EFI_UDP4_POLL) (
147241675Suqs    IN struct _EFI_UDP4 *This
148241675Suqs    );
149241675Suqs
150241675Suqstypedef struct _EFI_UDP4 {
151241675Suqs    EFI_UDP4_GET_MODE_DATA GetModeData;
152241675Suqs    EFI_UDP4_CONFIGURE     Configure;
153241675Suqs    EFI_UDP4_GROUPS        Groups;
154241675Suqs    EFI_UDP4_ROUTES        Routes;
155241675Suqs    EFI_UDP4_TRANSMIT      Transmit;
156241675Suqs    EFI_UDP4_RECEIVE       Receive;
157241675Suqs    EFI_UDP4_CANCEL        Cancel;
158241675Suqs    EFI_UDP4_POLL          Poll;
159241675Suqs} EFI_UDP4;
160241675Suqs
161241675Suqstypedef struct {
162241675Suqs    BOOLEAN          AcceptPromiscuous;
163241675Suqs    BOOLEAN          AcceptAnyPort;
164241675Suqs    BOOLEAN          AllowDuplicatePort;
165241675Suqs    UINT8            TrafficClass;
166241675Suqs    UINT8            HopLimit;
167241675Suqs    UINT32           ReceiveTimeout;
168241675Suqs    UINT32           TransmitTimeout;
169241675Suqs    EFI_IPv6_ADDRESS StationAddress;
170241675Suqs    UINT16           StationPort;
171241675Suqs    EFI_IPv6_ADDRESS RemoteAddress;
172241675Suqs    UINT16           RemotePort;
173241675Suqs} EFI_UDP6_CONFIG_DATA;
174241675Suqs
175241675Suqstypedef
176241675SuqsEFI_STATUS
177241675Suqs(EFIAPI *EFI_UDP6_GET_MODE_DATA) (
178241675Suqs    IN struct _EFI_UDP6                 *This,
179241675Suqs    OUT EFI_UDP6_CONFIG_DATA            *Udp6ConfigData OPTIONAL,
180241675Suqs    OUT EFI_IP6_MODE_DATA               *Ip6ModeData    OPTIONAL,
181241675Suqs    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
182241675Suqs    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
183241675Suqs    );
184241675Suqs
185241675Suqstypedef
186241675SuqsEFI_STATUS
187241675Suqs(EFIAPI *EFI_UDP6_CONFIGURE) (
188241675Suqs    IN struct _EFI_UDP6     *This,
189241675Suqs    IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
190241675Suqs    );
191241675Suqs
192241675Suqstypedef
193241675SuqsEFI_STATUS
194241675Suqs(EFIAPI *EFI_UDP6_GROUPS) (
195241675Suqs    IN struct _EFI_UDP6 *This,
196241675Suqs    IN BOOLEAN          JoinFlag,
197241675Suqs    IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
198241675Suqs    );
199241675Suqs
200241675Suqstypedef struct {
201241675Suqs    EFI_IPv6_ADDRESS SourceAddress;
202241675Suqs    UINT16           SourcePort;
203241675Suqs    EFI_IPv6_ADDRESS DestinationAddress;
204241675Suqs    UINT16           DestinationPort;
205241675Suqs} EFI_UDP6_SESSION_DATA;
206241675Suqs
207241675Suqstypedef struct {
208241675Suqs    UINT32 FragmentLength;
209241675Suqs    VOID   *FragmentBuffer;
210241675Suqs} EFI_UDP6_FRAGMENT_DATA;
211241675Suqs
212241675Suqstypedef struct {
213241675Suqs    EFI_TIME               TimeStamp;
214241675Suqs    EFI_EVENT              RecycleSignal;
215241675Suqs    EFI_UDP6_SESSION_DATA  UdpSession;
216241675Suqs    UINT32                 DataLength;
217241675Suqs    UINT32                 FragmentCount;
218241675Suqs    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
219241675Suqs} EFI_UDP6_RECEIVE_DATA;
220241675Suqs
221241675Suqstypedef struct {
222241675Suqs    EFI_UDP6_SESSION_DATA  *UdpSessionData;
223241675Suqs    UINT32                 DataLength;
224241675Suqs    UINT32                 FragmentCount;
225241675Suqs    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
226241675Suqs} EFI_UDP6_TRANSMIT_DATA;
227241675Suqs
228241675Suqstypedef struct {
229241675Suqs    EFI_EVENT                  Event;
230241675Suqs    EFI_STATUS                 Status;
231241675Suqs    union {
232241675Suqs        EFI_UDP6_RECEIVE_DATA  *RxData;
233241675Suqs        EFI_UDP6_TRANSMIT_DATA *TxData;
234241675Suqs    }                          Packet;
235241675Suqs} EFI_UDP6_COMPLETION_TOKEN;
236241675Suqs
237241675Suqstypedef
238241675SuqsEFI_STATUS
239241675Suqs(EFIAPI *EFI_UDP6_TRANSMIT) (
240241675Suqs    IN struct _EFI_UDP6          *This,
241241675Suqs    IN EFI_UDP6_COMPLETION_TOKEN *Token
242241675Suqs    );
243241675Suqs
244241675Suqstypedef
245241675SuqsEFI_STATUS
246241675Suqs(EFIAPI *EFI_UDP6_RECEIVE) (
247241675Suqs    IN struct _EFI_UDP6          *This,
248241675Suqs    IN EFI_UDP6_COMPLETION_TOKEN *Token
249241675Suqs    );
250241675Suqs
251241675Suqstypedef
252241675SuqsEFI_STATUS
253241675Suqs(EFIAPI *EFI_UDP6_CANCEL)(
254241675Suqs    IN struct _EFI_UDP6          *This,
255241675Suqs    IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
256241675Suqs    );
257241675Suqs
258241675Suqstypedef
259241675SuqsEFI_STATUS
260241675Suqs(EFIAPI *EFI_UDP6_POLL) (
261241675Suqs    IN struct _EFI_UDP6 *This
262241675Suqs    );
263241675Suqs
264241675Suqstypedef struct _EFI_UDP6 {
265241675Suqs    EFI_UDP6_GET_MODE_DATA GetModeData;
266241675Suqs    EFI_UDP6_CONFIGURE     Configure;
267241675Suqs    EFI_UDP6_GROUPS        Groups;
268241675Suqs    EFI_UDP6_TRANSMIT      Transmit;
269241675Suqs    EFI_UDP6_RECEIVE       Receive;
270241675Suqs    EFI_UDP6_CANCEL        Cancel;
271241675Suqs    EFI_UDP6_POLL          Poll;
272241675Suqs} EFI_UDP6;
273241675Suqs
274241675Suqs#endif /* _EFI_UDP_H */
275241675Suqs