• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   @param[in]  BufferSize     The maxsize of the buffer.
452 
453   @return     Length         The actual length of the ASCII string.
454 
455 **/
456 UINTN
457 PxeBcUintnToAscDec (
458   IN UINTN               Number,
459   IN UINT8               *Buffer,
460   IN UINTN               BufferSize
461   );
462 
463 /**
464   This function is to convert unicode hex number to a UINT8.
465 
466   @param[out]  Digit                   The converted UINT8 for output.
467   @param[in]   Char                    The unicode hex number to be converted.
468 
469   @retval      EFI_SUCCESS             Successfully converted the unicode hex.
470   @retval      EFI_INVALID_PARAMETER   Failed to convert the unicode hex.
471 
472 **/
473 EFI_STATUS
474 PxeBcUniHexToUint8 (
475   OUT UINT8                *Digit,
476   IN  CHAR16               Char
477   );
478 
479 /**
480   Calculate the elapsed time.
481 
482   @param[in]      Private      The pointer to PXE private data
483 
484 **/
485 VOID
486 CalcElapsedTime (
487   IN     PXEBC_PRIVATE_DATA     *Private
488   );
489 
490 /**
491   Get the Nic handle using any child handle in the IPv4 stack.
492 
493   @param[in]  ControllerHandle    Pointer to child handle over IPv4.
494 
495   @return NicHandle               The pointer to the Nic handle.
496 
497 **/
498 EFI_HANDLE
499 PxeBcGetNicByIp4Children (
500   IN EFI_HANDLE                 ControllerHandle
501   );
502 
503 /**
504   Get the Nic handle using any child handle in the IPv6 stack.
505 
506   @param[in]  ControllerHandle    Pointer to child handle over IPv6.
507 
508   @return NicHandle               The pointer to the Nic handle.
509 
510 **/
511 EFI_HANDLE
512 PxeBcGetNicByIp6Children (
513   IN EFI_HANDLE                  ControllerHandle
514   );
515 #endif
516