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