]> git.proxmox.com Git - mirror_edk2.git/blob - NetworkPkg/UefiPxeBcDxe/PxeBcSupport.h
fc99fadad6ac0e2723e463e6290347bc54c8f613
[mirror_edk2.git] / NetworkPkg / UefiPxeBcDxe / PxeBcSupport.h
1 /** @file
2 Support functions declaration for UefiPxeBc Driver.
3
4 Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
5
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #ifndef __EFI_PXEBC_SUPPORT_H__
17 #define __EFI_PXEBC_SUPPORT_H__
18
19
20 #define ICMP_DEST_UNREACHABLE 3
21 #define ICMP_SOURCE_QUENCH 4
22 #define ICMP_REDIRECT 5
23 #define ICMP_ECHO_REQUEST 8
24 #define ICMP_TIME_EXCEEDED 11
25 #define ICMP_PARAMETER_PROBLEM 12
26
27
28
29 /**
30 Flush the previous configration using the new station Ip address.
31
32 @param[in] Private Pointer to PxeBc private data.
33 @param[in] StationIp Pointer to the station Ip address.
34 @param[in] SubnetMask Pointer to the subnet mask address for v4.
35
36 @retval EFI_SUCCESS Successfully flushed the previous config.
37 @retval Others Failed to flush using the new station Ip.
38
39 **/
40 EFI_STATUS
41 PxeBcFlushStationIp (
42 PXEBC_PRIVATE_DATA *Private,
43 EFI_IP_ADDRESS *StationIp,
44 EFI_IP_ADDRESS *SubnetMask OPTIONAL
45 );
46
47
48 /**
49 Notify callback function when an event is triggered.
50
51 @param[in] Event The triggered event.
52 @param[in] Context The opaque parameter to the function.
53
54 **/
55 VOID
56 EFIAPI
57 PxeBcCommonNotify (
58 IN EFI_EVENT Event,
59 IN VOID *Context
60 );
61
62
63 /**
64 Perform arp resolution from the arp cache in PxeBcMode.
65
66 @param Mode Pointer to EFI_PXE_BASE_CODE_MODE.
67 @param Ip4Addr The Ip4 address for resolution.
68 @param MacAddress The resoluted MAC address if the resolution is successful.
69 The value is undefined if resolution fails.
70
71 @retval TRUE Found a matched entry.
72 @retval FALSE Did not find a matched entry.
73
74 **/
75 BOOLEAN
76 PxeBcCheckArpCache (
77 IN EFI_PXE_BASE_CODE_MODE *Mode,
78 IN EFI_IPv4_ADDRESS *Ip4Addr,
79 OUT EFI_MAC_ADDRESS *MacAddress
80 );
81
82
83 /**
84 Update arp cache periodically.
85
86 @param Event Pointer to EFI_PXE_BC_PROTOCOL.
87 @param Context Context of the timer event.
88
89 **/
90 VOID
91 EFIAPI
92 PxeBcArpCacheUpdate (
93 IN EFI_EVENT Event,
94 IN VOID *Context
95 );
96
97
98 /**
99 xxx
100
101 @param Event The event signaled.
102 @param Context The context passed in by the event notifier.
103
104 **/
105 VOID
106 EFIAPI
107 PxeBcIcmpErrorUpdate (
108 IN EFI_EVENT Event,
109 IN VOID *Context
110 );
111
112
113 /**
114 xxx
115
116 @param Event The event signaled.
117 @param Context The context passed in by the event notifier.
118
119 **/
120 VOID
121 EFIAPI
122 PxeBcIcmp6ErrorUpdate (
123 IN EFI_EVENT Event,
124 IN VOID *Context
125 );
126
127
128 /**
129 This function is to configure a UDPv4 instance for UdpWrite.
130
131 @param[in] Udp4 Pointer to EFI_UDP4_PROTOCOL.
132 @param[in] StationIp Pointer to the station address.
133 @param[in] SubnetMask Pointer to the subnet mask.
134 @param[in] Gateway Pointer to the gateway address.
135 @param[in, out] SrcPort Pointer to the source port.
136 @param[in] DoNotFragment The flag of DoNotFragment bit in the IPv4
137 packet.
138
139 @retval EFI_SUCCESS Successfully configured this instance.
140 @retval Others Failed to configure this instance.
141
142 **/
143 EFI_STATUS
144 PxeBcConfigUdp4Write (
145 IN EFI_UDP4_PROTOCOL *Udp4,
146 IN EFI_IPv4_ADDRESS *StationIp,
147 IN EFI_IPv4_ADDRESS *SubnetMask,
148 IN EFI_IPv4_ADDRESS *Gateway,
149 IN OUT UINT16 *SrcPort,
150 IN BOOLEAN DoNotFragment
151 );
152
153
154 /**
155 This function is to configure a UDPv6 instance for UdpWrite.
156
157 @param[in] Udp6 Pointer to EFI_UDP6_PROTOCOL.
158 @param[in] StationIp Pointer to the station address.
159 @param[in, out] SrcPort Pointer to the source port.
160
161 @retval EFI_SUCCESS Successfuly configured this instance.
162 @retval Others Failed to configure this instance.
163
164 **/
165 EFI_STATUS
166 PxeBcConfigUdp6Write (
167 IN EFI_UDP6_PROTOCOL *Udp6,
168 IN EFI_IPv6_ADDRESS *StationIp,
169 IN OUT UINT16 *SrcPort
170 );
171
172 /**
173 This function is to configure a UDPv4 instance for UdpWrite.
174
175 @param[in] Udp4 Pointer to EFI_UDP4_PROTOCOL.
176 @param[in] Session Pointer to the UDP4 session data.
177 @param[in] TimeoutEvent The event for timeout.
178 @param[in] Gateway Pointer to the gateway address.
179 @param[in] HeaderSize An optional field which may be set to the length of a header
180 at HeaderPtr to be prefixed to the data at BufferPtr.
181 @param[in] HeaderPtr If HeaderSize is not NULL, a pointer to a header to be
182 prefixed to the data at BufferPtr.
183 @param[in] BufferSize A pointer to the size of the data at BufferPtr.
184 @param[in] BufferPtr A pointer to the data to be written.
185
186 @retval EFI_SUCCESS Successfully sent out data with Udp4Write.
187 @retval Others Failed to send out data.
188
189 **/
190 EFI_STATUS
191 PxeBcUdp4Write (
192 IN EFI_UDP4_PROTOCOL *Udp4,
193 IN EFI_UDP4_SESSION_DATA *Session,
194 IN EFI_EVENT TimeoutEvent,
195 IN EFI_IPv4_ADDRESS *Gateway OPTIONAL,
196 IN UINTN *HeaderSize OPTIONAL,
197 IN VOID *HeaderPtr OPTIONAL,
198 IN UINTN *BufferSize,
199 IN VOID *BufferPtr
200 );
201
202
203 /**
204 This function is to configure a UDPv6 instance for UdpWrite.
205
206 @param[in] Udp6 Pointer to EFI_UDP6_PROTOCOL.
207 @param[in] Session Pointer to the UDP6 session data.
208 @param[in] TimeoutEvent The event for timeout.
209 @param[in] HeaderSize An optional field which may be set to the length of a header
210 at HeaderPtr to be prefixed to the data at BufferPtr.
211 @param[in] HeaderPtr If HeaderSize is not NULL, a pointer to a header to be
212 prefixed to the data at BufferPtr.
213 @param[in] BufferSize A pointer to the size of the data at BufferPtr.
214 @param[in] BufferPtr A pointer to the data to be written.
215
216 @retval EFI_SUCCESS Successfully to send out data with Udp6Write.
217 @retval Others Failed to send out data.
218
219 **/
220 EFI_STATUS
221 PxeBcUdp6Write (
222 IN EFI_UDP6_PROTOCOL *Udp6,
223 IN EFI_UDP6_SESSION_DATA *Session,
224 IN EFI_EVENT TimeoutEvent,
225 IN UINTN *HeaderSize OPTIONAL,
226 IN VOID *HeaderPtr OPTIONAL,
227 IN UINTN *BufferSize,
228 IN VOID *BufferPtr
229 );
230
231
232 /**
233 Check the received packet with the Ip filter.
234
235 @param[in] Mode Pointer to mode data of PxeBc.
236 @param[in] Session Pointer to the current UDPv4 session.
237 @param[in] OpFlags Operation flag for UdpRead/UdpWrite.
238
239 @retval TRUE Succesfully passed the Ip filter.
240 @retval FALSE Failed to pass the Ip filter.
241
242 **/
243 BOOLEAN
244 PxeBcCheckByIpFilter (
245 IN EFI_PXE_BASE_CODE_MODE *Mode,
246 IN VOID *Session,
247 IN UINT16 OpFlags
248 );
249
250
251 /**
252 Filter the received packet with the destination Ip.
253
254 @param[in] Mode Pointer to mode data of PxeBc.
255 @param[in] Session Pointer to the current UDPv4 session.
256 @param[in, out] DestIp Pointer to the dest Ip address.
257 @param[in] OpFlags Operation flag for UdpRead/UdpWrite.
258
259 @retval TRUE Succesfully passed the IPv4 filter.
260 @retval FALSE Failed to pass the IPv4 filter.
261
262 **/
263 BOOLEAN
264 PxeBcCheckByDestIp (
265 IN EFI_PXE_BASE_CODE_MODE *Mode,
266 IN VOID *Session,
267 IN OUT EFI_IP_ADDRESS *DestIp,
268 IN UINT16 OpFlags
269 );
270
271
272 /**
273 Check the received packet with the destination port.
274
275 @param[in] Mode Pointer to mode data of PxeBc.
276 @param[in] Session Pointer to the current UDPv4 session.
277 @param[in, out] DestPort Pointer to the destination port.
278 @param[in] OpFlags Operation flag for UdpRead/UdpWrite.
279
280 @retval TRUE Succesfully passed the IPv4 filter.
281 @retval FALSE Failed to pass the IPv4 filter.
282
283 **/
284 BOOLEAN
285 PxeBcCheckByDestPort (
286 IN EFI_PXE_BASE_CODE_MODE *Mode,
287 IN VOID *Session,
288 IN OUT UINT16 *DestPort,
289 IN UINT16 OpFlags
290 );
291
292
293 /**
294 Filter the received packet with the source Ip.
295
296 @param[in] Mode Pointer to mode data of PxeBc.
297 @param[in] Session Pointer to the current UDPv4 session.
298 @param[in, out] SrcIp Pointer to the source Ip address.
299 @param[in] OpFlags Operation flag for UdpRead/UdpWrite.
300
301 @retval TRUE Succesfully passed the IPv4 filter.
302 @retval FALSE Failed to pass the IPv4 filter.
303
304 **/
305 BOOLEAN
306 PxeBcFilterBySrcIp (
307 IN EFI_PXE_BASE_CODE_MODE *Mode,
308 IN VOID *Session,
309 IN OUT EFI_IP_ADDRESS *SrcIp,
310 IN UINT16 OpFlags
311 );
312
313
314 /**
315 Filter the received packet with the source port.
316
317 @param[in] Mode Pointer to mode data of PxeBc.
318 @param[in] Session Pointer to the current UDPv4 session.
319 @param[in, out] SrcPort Pointer to the source port.
320 @param[in] OpFlags Operation flag for UdpRead/UdpWrite.
321
322 @retval TRUE Succesfully passed the IPv4 filter.
323 @retval FALSE Failed to pass the IPv4 filter.
324
325 **/
326 BOOLEAN
327 PxeBcFilterBySrcPort (
328 IN EFI_PXE_BASE_CODE_MODE *Mode,
329 IN VOID *Session,
330 IN OUT UINT16 *SrcPort,
331 IN UINT16 OpFlags
332 );
333
334
335 /**
336 This function is to receive packet with Udp4Read.
337
338 @param[in] Udp4 Pointer to EFI_UDP4_PROTOCOL.
339 @param[in] Token Pointer to EFI_UDP4_COMPLETION_TOKEN.
340 @param[in] Mode Pointer to EFI_PXE_BASE_CODE_MODE.
341 @param[in] TimeoutEvent The event for timeout.
342 @param[in] OpFlags The UDP operation flags.
343 @param[in] IsDone Pointer to IsDone flag.
344 @param[out] IsMatched Pointer to IsMatched flag.
345 @param[in, out] DestIp Pointer to destination address.
346 @param[in, out] DestPort Pointer to destination port.
347 @param[in, out] SrcIp Pointer to source address.
348 @param[in, out] SrcPort Pointer to source port.
349
350 @retval EFI_SUCCESS Successfully read data with Udp4.
351 @retval Others Failed to send out data.
352
353 **/
354 EFI_STATUS
355 PxeBcUdp4Read (
356 IN EFI_UDP4_PROTOCOL *Udp4,
357 IN EFI_UDP4_COMPLETION_TOKEN *Token,
358 IN EFI_PXE_BASE_CODE_MODE *Mode,
359 IN EFI_EVENT TimeoutEvent,
360 IN UINT16 OpFlags,
361 IN BOOLEAN *IsDone,
362 OUT BOOLEAN *IsMatched,
363 IN OUT EFI_IP_ADDRESS *DestIp OPTIONAL,
364 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL,
365 IN OUT EFI_IP_ADDRESS *SrcIp OPTIONAL,
366 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL
367 );
368
369
370 /**
371 This function is to receive packet with Udp6Read.
372
373 @param[in] Udp6 Pointer to EFI_UDP6_PROTOCOL.
374 @param[in] Token Pointer to EFI_UDP6_COMPLETION_TOKEN.
375 @param[in] Mode Pointer to EFI_PXE_BASE_CODE_MODE.
376 @param[in] TimeoutEvent The event for timeout.
377 @param[in] OpFlags The UDP operation flags.
378 @param[in] IsDone Pointer to IsDone flag.
379 @param[out] IsMatched Pointer to IsMatched flag.
380 @param[in, out] DestIp Pointer to destination address.
381 @param[in, out] DestPort Pointer to destination port.
382 @param[in, out] SrcIp Pointer to source address.
383 @param[in, out] SrcPort Pointer to source port.
384
385 @retval EFI_SUCCESS Successfully read data with Udp6.
386 @retval Others Failed to send out data.
387
388 **/
389 EFI_STATUS
390 PxeBcUdp6Read (
391 IN EFI_UDP6_PROTOCOL *Udp6,
392 IN EFI_UDP6_COMPLETION_TOKEN *Token,
393 IN EFI_PXE_BASE_CODE_MODE *Mode,
394 IN EFI_EVENT TimeoutEvent,
395 IN UINT16 OpFlags,
396 IN BOOLEAN *IsDone,
397 OUT BOOLEAN *IsMatched,
398 IN OUT EFI_IP_ADDRESS *DestIp OPTIONAL,
399 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL,
400 IN OUT EFI_IP_ADDRESS *SrcIp OPTIONAL,
401 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL
402 );
403
404
405 /**
406 This function is to display the IPv4 address.
407
408 @param[in] Ip Pointer to the IPv4 address.
409
410 **/
411 VOID
412 PxeBcShowIp4Addr (
413 IN EFI_IPv4_ADDRESS *Ip
414 );
415
416
417 /**
418 This function is to display the IPv6 address.
419
420 @param[in] Ip Pointer to the IPv6 address.
421
422 **/
423 VOID
424 PxeBcShowIp6Addr (
425 IN EFI_IPv6_ADDRESS *Ip
426 );
427
428
429 /**
430 This function is to convert UINTN to ASCII string with required format.
431
432 @param[in] Number Numeric value to be converted.
433 @param[in] Buffer Pointer to the buffer for ASCII string.
434 @param[in] Length Length of the required format.
435
436 **/
437 VOID
438 PxeBcUintnToAscDecWithFormat (
439 IN UINTN Number,
440 IN UINT8 *Buffer,
441 IN INTN Length
442 );
443
444
445 /**
446 This function is to convert a UINTN to a ASCII string, and return the
447 actual length of the buffer.
448
449 @param[in] Number Numeric value to be converted.
450 @param[in] Buffer Pointer to the buffer for ASCII string.
451
452 @return Length The actual length of the ASCII string.
453
454 **/
455 UINTN
456 PxeBcUintnToAscDec (
457 IN UINTN Number,
458 IN UINT8 *Buffer
459 );
460
461 /**
462 This function is to convert unicode hex number to a UINT8.
463
464 @param[out] Digit The converted UINT8 for output.
465 @param[in] Char The unicode hex number to be converted.
466
467 @retval EFI_SUCCESS Successfully converted the unicode hex.
468 @retval EFI_INVALID_PARAMETER Failed to convert the unicode hex.
469
470 **/
471 EFI_STATUS
472 PxeBcUniHexToUint8 (
473 OUT UINT8 *Digit,
474 IN CHAR16 Char
475 );
476
477 /**
478 Calculate the elapsed time.
479
480 @param[in] Private The pointer to PXE private data
481
482 **/
483 VOID
484 CalcElapsedTime (
485 IN PXEBC_PRIVATE_DATA *Private
486 );
487
488 /**
489 Get the Nic handle using any child handle in the IPv4 stack.
490
491 @param[in] ControllerHandle Pointer to child handle over IPv4.
492
493 @return NicHandle The pointer to the Nic handle.
494
495 **/
496 EFI_HANDLE
497 PxeBcGetNicByIp4Children (
498 IN EFI_HANDLE ControllerHandle
499 );
500
501 /**
502 Get the Nic handle using any child handle in the IPv6 stack.
503
504 @param[in] ControllerHandle Pointer to child handle over IPv6.
505
506 @return NicHandle The pointer to the Nic handle.
507
508 **/
509 EFI_HANDLE
510 PxeBcGetNicByIp6Children (
511 IN EFI_HANDLE ControllerHandle
512 );
513 #endif