1/*	$NetBSD$	*/
2
3#ifndef _EFI_UDP_H
4#define _EFI_UDP_H
5
6
7/*++
8Copyright (c) 2013  Intel Corporation
9
10--*/
11
12#define EFI_UDP4_SERVICE_BINDING_PROTOCOL \
13    { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} }
14
15#define EFI_UDP4_PROTOCOL \
16    { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} }
17
18#define EFI_UDP6_SERVICE_BINDING_PROTOCOL \
19    { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} }
20
21#define EFI_UDP6_PROTOCOL \
22    { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} }
23
24INTERFACE_DECL(_EFI_UDP4);
25INTERFACE_DECL(_EFI_UDP6);
26
27typedef struct {
28    BOOLEAN          AcceptBroadcast;
29    BOOLEAN          AcceptPromiscuous;
30    BOOLEAN          AcceptAnyPort;
31    BOOLEAN          AllowDuplicatePort;
32    UINT8            TypeOfService;
33    UINT8            TimeToLive;
34    BOOLEAN          DoNotFragment;
35    UINT32           ReceiveTimeout;
36    UINT32           TransmitTimeout;
37    BOOLEAN          UseDefaultAddress;
38    EFI_IPv4_ADDRESS StationAddress;
39    EFI_IPv4_ADDRESS SubnetMask;
40    UINT16           StationPort;
41    EFI_IPv4_ADDRESS RemoteAddress;
42    UINT16           RemotePort;
43} EFI_UDP4_CONFIG_DATA;
44
45typedef
46EFI_STATUS
47(EFIAPI *EFI_UDP4_GET_MODE_DATA) (
48    IN struct _EFI_UDP4                 *This,
49    OUT EFI_UDP4_CONFIG_DATA            *Udp4ConfigData OPTIONAL,
50    OUT EFI_IP4_MODE_DATA               *Ip4ModeData    OPTIONAL,
51    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
52    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
53    );
54
55typedef
56EFI_STATUS
57(EFIAPI *EFI_UDP4_CONFIGURE) (
58    IN struct _EFI_UDP4     *This,
59    IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
60    );
61
62typedef
63EFI_STATUS
64(EFIAPI *EFI_UDP4_GROUPS) (
65    IN struct _EFI_UDP4 *This,
66    IN BOOLEAN          JoinFlag,
67    IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
68    );
69
70typedef
71EFI_STATUS
72(EFIAPI *EFI_UDP4_ROUTES) (
73    IN struct _EFI_UDP4 *This,
74    IN BOOLEAN          DeleteRoute,
75    IN EFI_IPv4_ADDRESS *SubnetAddress,
76    IN EFI_IPv4_ADDRESS *SubnetMask,
77    IN EFI_IPv4_ADDRESS *GatewayAddress
78    );
79
80#define EFI_NETWORK_UNREACHABLE  EFIERR(100)
81#define EFI_HOST_UNREACHABLE     EFIERR(101)
82#define EFI_PROTOCOL_UNREACHABLE EFIERR(102)
83#define EFI_PORT_UNREACHABLE     EFIERR(103)
84
85typedef struct {
86    EFI_IPv4_ADDRESS SourceAddress;
87    UINT16           SourcePort;
88    EFI_IPv4_ADDRESS DestinationAddress;
89    UINT16           DestinationPort;
90} EFI_UDP4_SESSION_DATA;
91
92typedef struct {
93    UINT32 FragmentLength;
94    VOID   *FragmentBuffer;
95} EFI_UDP4_FRAGMENT_DATA;
96
97typedef struct {
98    EFI_TIME               TimeStamp;
99    EFI_EVENT              RecycleSignal;
100    EFI_UDP4_SESSION_DATA  UdpSession;
101    UINT32                 DataLength;
102    UINT32                 FragmentCount;
103    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
104} EFI_UDP4_RECEIVE_DATA;
105
106typedef struct {
107    EFI_UDP4_SESSION_DATA  *UdpSessionData;
108    EFI_IPv4_ADDRESS       *GatewayAddress;
109    UINT32                 DataLength;
110    UINT32                 FragmentCount;
111    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
112} EFI_UDP4_TRANSMIT_DATA;
113
114typedef struct {
115    EFI_EVENT                  Event;
116    EFI_STATUS                 Status;
117    union {
118        EFI_UDP4_RECEIVE_DATA  *RxData;
119	EFI_UDP4_TRANSMIT_DATA *TxData;
120    }                          Packet;
121} EFI_UDP4_COMPLETION_TOKEN;
122
123typedef
124EFI_STATUS
125(EFIAPI *EFI_UDP4_TRANSMIT) (
126    IN struct _EFI_UDP4          *This,
127    IN EFI_UDP4_COMPLETION_TOKEN *Token
128    );
129
130typedef
131EFI_STATUS
132(EFIAPI *EFI_UDP4_RECEIVE) (
133    IN struct _EFI_UDP4          *This,
134    IN EFI_UDP4_COMPLETION_TOKEN *Token
135    );
136
137typedef
138EFI_STATUS
139(EFIAPI *EFI_UDP4_CANCEL)(
140    IN struct _EFI_UDP4          *This,
141    IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
142    );
143
144typedef
145EFI_STATUS
146(EFIAPI *EFI_UDP4_POLL) (
147    IN struct _EFI_UDP4 *This
148    );
149
150typedef struct _EFI_UDP4 {
151    EFI_UDP4_GET_MODE_DATA GetModeData;
152    EFI_UDP4_CONFIGURE     Configure;
153    EFI_UDP4_GROUPS        Groups;
154    EFI_UDP4_ROUTES        Routes;
155    EFI_UDP4_TRANSMIT      Transmit;
156    EFI_UDP4_RECEIVE       Receive;
157    EFI_UDP4_CANCEL        Cancel;
158    EFI_UDP4_POLL          Poll;
159} EFI_UDP4;
160
161typedef struct {
162    BOOLEAN          AcceptPromiscuous;
163    BOOLEAN          AcceptAnyPort;
164    BOOLEAN          AllowDuplicatePort;
165    UINT8            TrafficClass;
166    UINT8            HopLimit;
167    UINT32           ReceiveTimeout;
168    UINT32           TransmitTimeout;
169    EFI_IPv6_ADDRESS StationAddress;
170    UINT16           StationPort;
171    EFI_IPv6_ADDRESS RemoteAddress;
172    UINT16           RemotePort;
173} EFI_UDP6_CONFIG_DATA;
174
175typedef
176EFI_STATUS
177(EFIAPI *EFI_UDP6_GET_MODE_DATA) (
178    IN struct _EFI_UDP6                 *This,
179    OUT EFI_UDP6_CONFIG_DATA            *Udp6ConfigData OPTIONAL,
180    OUT EFI_IP6_MODE_DATA               *Ip6ModeData    OPTIONAL,
181    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
182    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
183    );
184
185typedef
186EFI_STATUS
187(EFIAPI *EFI_UDP6_CONFIGURE) (
188    IN struct _EFI_UDP6     *This,
189    IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
190    );
191
192typedef
193EFI_STATUS
194(EFIAPI *EFI_UDP6_GROUPS) (
195    IN struct _EFI_UDP6 *This,
196    IN BOOLEAN          JoinFlag,
197    IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
198    );
199
200typedef struct {
201    EFI_IPv6_ADDRESS SourceAddress;
202    UINT16           SourcePort;
203    EFI_IPv6_ADDRESS DestinationAddress;
204    UINT16           DestinationPort;
205} EFI_UDP6_SESSION_DATA;
206
207typedef struct {
208    UINT32 FragmentLength;
209    VOID   *FragmentBuffer;
210} EFI_UDP6_FRAGMENT_DATA;
211
212typedef struct {
213    EFI_TIME               TimeStamp;
214    EFI_EVENT              RecycleSignal;
215    EFI_UDP6_SESSION_DATA  UdpSession;
216    UINT32                 DataLength;
217    UINT32                 FragmentCount;
218    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
219} EFI_UDP6_RECEIVE_DATA;
220
221typedef struct {
222    EFI_UDP6_SESSION_DATA  *UdpSessionData;
223    UINT32                 DataLength;
224    UINT32                 FragmentCount;
225    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
226} EFI_UDP6_TRANSMIT_DATA;
227
228typedef struct {
229    EFI_EVENT                  Event;
230    EFI_STATUS                 Status;
231    union {
232        EFI_UDP6_RECEIVE_DATA  *RxData;
233        EFI_UDP6_TRANSMIT_DATA *TxData;
234    }                          Packet;
235} EFI_UDP6_COMPLETION_TOKEN;
236
237typedef
238EFI_STATUS
239(EFIAPI *EFI_UDP6_TRANSMIT) (
240    IN struct _EFI_UDP6          *This,
241    IN EFI_UDP6_COMPLETION_TOKEN *Token
242    );
243
244typedef
245EFI_STATUS
246(EFIAPI *EFI_UDP6_RECEIVE) (
247    IN struct _EFI_UDP6          *This,
248    IN EFI_UDP6_COMPLETION_TOKEN *Token
249    );
250
251typedef
252EFI_STATUS
253(EFIAPI *EFI_UDP6_CANCEL)(
254    IN struct _EFI_UDP6          *This,
255    IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
256    );
257
258typedef
259EFI_STATUS
260(EFIAPI *EFI_UDP6_POLL) (
261    IN struct _EFI_UDP6 *This
262    );
263
264typedef struct _EFI_UDP6 {
265    EFI_UDP6_GET_MODE_DATA GetModeData;
266    EFI_UDP6_CONFIGURE     Configure;
267    EFI_UDP6_GROUPS        Groups;
268    EFI_UDP6_TRANSMIT      Transmit;
269    EFI_UDP6_RECEIVE       Receive;
270    EFI_UDP6_CANCEL        Cancel;
271    EFI_UDP6_POLL          Poll;
272} EFI_UDP6;
273
274#endif /* _EFI_UDP_H */
275