/** @file Support functions declaration for UefiPxeBc Driver. Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __EFI_PXEBC_SUPPORT_H__ #define __EFI_PXEBC_SUPPORT_H__ #define ICMP_DEST_UNREACHABLE 3 #define ICMP_SOURCE_QUENCH 4 #define ICMP_REDIRECT 5 #define ICMP_ECHO_REQUEST 8 #define ICMP_TIME_EXCEEDED 11 #define ICMP_PARAMETER_PROBLEM 12 /** Flush the previous configuration using the new station Ip address. @param[in] Private Pointer to PxeBc private data. @param[in] StationIp Pointer to the station Ip address. @param[in] SubnetMask Pointer to the subnet mask address for v4. @retval EFI_SUCCESS Successfully flushed the previous config. @retval Others Failed to flush using the new station Ip. **/ EFI_STATUS PxeBcFlushStationIp ( PXEBC_PRIVATE_DATA *Private, EFI_IP_ADDRESS *StationIp, OPTIONAL EFI_IP_ADDRESS *SubnetMask OPTIONAL ); /** Notify callback function when an event is triggered. @param[in] Event The triggered event. @param[in] Context The opaque parameter to the function. **/ VOID EFIAPI PxeBcCommonNotify ( IN EFI_EVENT Event, IN VOID *Context ); /** Perform arp resolution from the arp cache in PxeBcMode. @param Mode Pointer to EFI_PXE_BASE_CODE_MODE. @param Ip4Addr The Ip4 address for resolution. @param MacAddress The resolved MAC address if the resolution is successful. The value is undefined if resolution fails. @retval TRUE Found a matched entry. @retval FALSE Did not find a matched entry. **/ BOOLEAN PxeBcCheckArpCache ( IN EFI_PXE_BASE_CODE_MODE *Mode, IN EFI_IPv4_ADDRESS *Ip4Addr, OUT EFI_MAC_ADDRESS *MacAddress ); /** Update arp cache periodically. @param Event Pointer to EFI_PXE_BC_PROTOCOL. @param Context Context of the timer event. **/ VOID EFIAPI PxeBcArpCacheUpdate ( IN EFI_EVENT Event, IN VOID *Context ); /** xxx @param Event The event signaled. @param Context The context passed in by the event notifier. **/ VOID EFIAPI PxeBcIcmpErrorUpdate ( IN EFI_EVENT Event, IN VOID *Context ); /** xxx @param Event The event signaled. @param Context The context passed in by the event notifier. **/ VOID EFIAPI PxeBcIcmp6ErrorUpdate ( IN EFI_EVENT Event, IN VOID *Context ); /** This function is to configure a UDPv4 instance for UdpWrite. @param[in] Udp4 The pointer to EFI_UDP4_PROTOCOL. @param[in] StationIp The pointer to the station address. @param[in] SubnetMask The pointer to the subnet mask. @param[in] Gateway The pointer to the gateway address. @param[in, out] SrcPort The pointer to the source port. @param[in] DoNotFragment If TRUE, fragment is not enabled. Otherwise, fragment is enabled. @param[in] Ttl The time to live field of the IP header. @param[in] ToS The type of service field of the IP header. @retval EFI_SUCCESS Successfully configured this instance. @retval Others Failed to configure this instance. **/ EFI_STATUS PxeBcConfigUdp4Write ( IN EFI_UDP4_PROTOCOL *Udp4, IN EFI_IPv4_ADDRESS *StationIp, IN EFI_IPv4_ADDRESS *SubnetMask, IN EFI_IPv4_ADDRESS *Gateway, IN OUT UINT16 *SrcPort, IN BOOLEAN DoNotFragment, IN UINT8 Ttl, IN UINT8 ToS ); /** This function is to configure a UDPv6 instance for UdpWrite. @param[in] Udp6 Pointer to EFI_UDP6_PROTOCOL. @param[in] StationIp Pointer to the station address. @param[in, out] SrcPort Pointer to the source port. @retval EFI_SUCCESS Successfully configured this instance. @retval Others Failed to configure this instance. **/ EFI_STATUS PxeBcConfigUdp6Write ( IN EFI_UDP6_PROTOCOL *Udp6, IN EFI_IPv6_ADDRESS *StationIp, IN OUT UINT16 *SrcPort ); /** This function is to configure a UDPv4 instance for UdpWrite. @param[in] Udp4 Pointer to EFI_UDP4_PROTOCOL. @param[in] Session Pointer to the UDP4 session data. @param[in] TimeoutEvent The event for timeout. @param[in] Gateway Pointer to the gateway address. @param[in] HeaderSize An optional field which may be set to the length of a header at HeaderPtr to be prefixed to the data at BufferPtr. @param[in] HeaderPtr If HeaderSize is not NULL, a pointer to a header to be prefixed to the data at BufferPtr. @param[in] BufferSize A pointer to the size of the data at BufferPtr. @param[in] BufferPtr A pointer to the data to be written. @retval EFI_SUCCESS Successfully sent out data with Udp4Write. @retval Others Failed to send out data. **/ EFI_STATUS PxeBcUdp4Write ( IN EFI_UDP4_PROTOCOL *Udp4, IN EFI_UDP4_SESSION_DATA *Session, IN EFI_EVENT TimeoutEvent, IN EFI_IPv4_ADDRESS *Gateway OPTIONAL, IN UINTN *HeaderSize OPTIONAL, IN VOID *HeaderPtr OPTIONAL, IN UINTN *BufferSize, IN VOID *BufferPtr ); /** This function is to configure a UDPv6 instance for UdpWrite. @param[in] Udp6 Pointer to EFI_UDP6_PROTOCOL. @param[in] Session Pointer to the UDP6 session data. @param[in] TimeoutEvent The event for timeout. @param[in] HeaderSize An optional field which may be set to the length of a header at HeaderPtr to be prefixed to the data at BufferPtr. @param[in] HeaderPtr If HeaderSize is not NULL, a pointer to a header to be prefixed to the data at BufferPtr. @param[in] BufferSize A pointer to the size of the data at BufferPtr. @param[in] BufferPtr A pointer to the data to be written. @retval EFI_SUCCESS Successfully to send out data with Udp6Write. @retval Others Failed to send out data. **/ EFI_STATUS PxeBcUdp6Write ( IN EFI_UDP6_PROTOCOL *Udp6, IN EFI_UDP6_SESSION_DATA *Session, IN EFI_EVENT TimeoutEvent, IN UINTN *HeaderSize OPTIONAL, IN VOID *HeaderPtr OPTIONAL, IN UINTN *BufferSize, IN VOID *BufferPtr ); /** Check the received packet with the Ip filter. @param[in] Mode Pointer to mode data of PxeBc. @param[in] Session Pointer to the current UDPv4 session. @param[in] OpFlags Operation flag for UdpRead/UdpWrite. @retval TRUE Successfully passed the Ip filter. @retval FALSE Failed to pass the Ip filter. **/ BOOLEAN PxeBcCheckByIpFilter ( IN EFI_PXE_BASE_CODE_MODE *Mode, IN VOID *Session, IN UINT16 OpFlags ); /** Filter the received packet with the destination Ip. @param[in] Mode Pointer to mode data of PxeBc. @param[in] Session Pointer to the current UDPv4 session. @param[in, out] DestIp Pointer to the dest Ip address. @param[in] OpFlags Operation flag for UdpRead/UdpWrite. @retval TRUE Successfully passed the IPv4 filter. @retval FALSE Failed to pass the IPv4 filter. **/ BOOLEAN PxeBcCheckByDestIp ( IN EFI_PXE_BASE_CODE_MODE *Mode, IN VOID *Session, IN OUT EFI_IP_ADDRESS *DestIp, IN UINT16 OpFlags ); /** Check the received packet with the destination port. @param[in] Mode Pointer to mode data of PxeBc. @param[in] Session Pointer to the current UDPv4 session. @param[in, out] DestPort Pointer to the destination port. @param[in] OpFlags Operation flag for UdpRead/UdpWrite. @retval TRUE Successfully passed the IPv4 filter. @retval FALSE Failed to pass the IPv4 filter. **/ BOOLEAN PxeBcCheckByDestPort ( IN EFI_PXE_BASE_CODE_MODE *Mode, IN VOID *Session, IN OUT UINT16 *DestPort, IN UINT16 OpFlags ); /** Filter the received packet with the source Ip. @param[in] Mode Pointer to mode data of PxeBc. @param[in] Session Pointer to the current UDPv4 session. @param[in, out] SrcIp Pointer to the source Ip address. @param[in] OpFlags Operation flag for UdpRead/UdpWrite. @retval TRUE Successfully passed the IPv4 filter. @retval FALSE Failed to pass the IPv4 filter. **/ BOOLEAN PxeBcFilterBySrcIp ( IN EFI_PXE_BASE_CODE_MODE *Mode, IN VOID *Session, IN OUT EFI_IP_ADDRESS *SrcIp, IN UINT16 OpFlags ); /** Filter the received packet with the source port. @param[in] Mode Pointer to mode data of PxeBc. @param[in] Session Pointer to the current UDPv4 session. @param[in, out] SrcPort Pointer to the source port. @param[in] OpFlags Operation flag for UdpRead/UdpWrite. @retval TRUE Successfully passed the IPv4 filter. @retval FALSE Failed to pass the IPv4 filter. **/ BOOLEAN PxeBcFilterBySrcPort ( IN EFI_PXE_BASE_CODE_MODE *Mode, IN VOID *Session, IN OUT UINT16 *SrcPort, IN UINT16 OpFlags ); /** This function is to receive packet with Udp4Read. @param[in] Udp4 Pointer to EFI_UDP4_PROTOCOL. @param[in] Token Pointer to EFI_UDP4_COMPLETION_TOKEN. @param[in] Mode Pointer to EFI_PXE_BASE_CODE_MODE. @param[in] TimeoutEvent The event for timeout. @param[in] OpFlags The UDP operation flags. @param[in] IsDone Pointer to IsDone flag. @param[out] IsMatched Pointer to IsMatched flag. @param[in, out] DestIp Pointer to destination address. @param[in, out] DestPort Pointer to destination port. @param[in, out] SrcIp Pointer to source address. @param[in, out] SrcPort Pointer to source port. @retval EFI_SUCCESS Successfully read data with Udp4. @retval Others Failed to send out data. **/ EFI_STATUS PxeBcUdp4Read ( IN EFI_UDP4_PROTOCOL *Udp4, IN EFI_UDP4_COMPLETION_TOKEN *Token, IN EFI_PXE_BASE_CODE_MODE *Mode, IN EFI_EVENT TimeoutEvent, IN UINT16 OpFlags, IN BOOLEAN *IsDone, OUT BOOLEAN *IsMatched, IN OUT EFI_IP_ADDRESS *DestIp OPTIONAL, IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL, IN OUT EFI_IP_ADDRESS *SrcIp OPTIONAL, IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL ); /** This function is to receive packet with Udp6Read. @param[in] Udp6 Pointer to EFI_UDP6_PROTOCOL. @param[in] Token Pointer to EFI_UDP6_COMPLETION_TOKEN. @param[in] Mode Pointer to EFI_PXE_BASE_CODE_MODE. @param[in] TimeoutEvent The event for timeout. @param[in] OpFlags The UDP operation flags. @param[in] IsDone Pointer to IsDone flag. @param[out] IsMatched Pointer to IsMatched flag. @param[in, out] DestIp Pointer to destination address. @param[in, out] DestPort Pointer to destination port. @param[in, out] SrcIp Pointer to source address. @param[in, out] SrcPort Pointer to source port. @retval EFI_SUCCESS Successfully read data with Udp6. @retval Others Failed to send out data. **/ EFI_STATUS PxeBcUdp6Read ( IN EFI_UDP6_PROTOCOL *Udp6, IN EFI_UDP6_COMPLETION_TOKEN *Token, IN EFI_PXE_BASE_CODE_MODE *Mode, IN EFI_EVENT TimeoutEvent, IN UINT16 OpFlags, IN BOOLEAN *IsDone, OUT BOOLEAN *IsMatched, IN OUT EFI_IP_ADDRESS *DestIp OPTIONAL, IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL, IN OUT EFI_IP_ADDRESS *SrcIp OPTIONAL, IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL ); /** This function is to display the IPv4 address. @param[in] Ip Pointer to the IPv4 address. **/ VOID PxeBcShowIp4Addr ( IN EFI_IPv4_ADDRESS *Ip ); /** This function is to display the IPv6 address. @param[in] Ip Pointer to the IPv6 address. **/ VOID PxeBcShowIp6Addr ( IN EFI_IPv6_ADDRESS *Ip ); /** This function is to convert UINTN to ASCII string with required format. @param[in] Number Numeric value to be converted. @param[in] Buffer Pointer to the buffer for ASCII string. @param[in] Length Length of the required format. **/ VOID PxeBcUintnToAscDecWithFormat ( IN UINTN Number, IN UINT8 *Buffer, IN INTN Length ); /** This function is to convert a UINTN to a ASCII string, and return the actual length of the buffer. @param[in] Number Numeric value to be converted. @param[in] Buffer Pointer to the buffer for ASCII string. @param[in] BufferSize The maxsize of the buffer. @return Length The actual length of the ASCII string. **/ UINTN PxeBcUintnToAscDec ( IN UINTN Number, IN UINT8 *Buffer, IN UINTN BufferSize ); /** This function is to convert unicode hex number to a UINT8. @param[out] Digit The converted UINT8 for output. @param[in] Char The unicode hex number to be converted. @retval EFI_SUCCESS Successfully converted the unicode hex. @retval EFI_INVALID_PARAMETER Failed to convert the unicode hex. **/ EFI_STATUS PxeBcUniHexToUint8 ( OUT UINT8 *Digit, IN CHAR16 Char ); /** Calculate the elapsed time. @param[in] Private The pointer to PXE private data **/ VOID CalcElapsedTime ( IN PXEBC_PRIVATE_DATA *Private ); /** Get the Nic handle using any child handle in the IPv4 stack. @param[in] ControllerHandle Pointer to child handle over IPv4. @return NicHandle The pointer to the Nic handle. **/ EFI_HANDLE PxeBcGetNicByIp4Children ( IN EFI_HANDLE ControllerHandle ); /** Get the Nic handle using any child handle in the IPv6 stack. @param[in] ControllerHandle Pointer to child handle over IPv6. @return NicHandle The pointer to the Nic handle. **/ EFI_HANDLE PxeBcGetNicByIp6Children ( IN EFI_HANDLE ControllerHandle ); #endif