Home | History | Annotate | Download | only in UefiPxeBcDxe
      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