]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OldMdePkg/Include/Protocol/PxeBaseCode.h
Moved the MdePkg to OldMdePkg so that new code in MdePkg does not break existing...
[mirror_edk2.git] / OldMdePkg / Include / Protocol / PxeBaseCode.h
diff --git a/OldMdePkg/Include/Protocol/PxeBaseCode.h b/OldMdePkg/Include/Protocol/PxeBaseCode.h
new file mode 100644 (file)
index 0000000..7fb2a80
--- /dev/null
@@ -0,0 +1,622 @@
+/** @file\r
+  EFI PXE Base Code Protocol definitions.\r
+\r
+  Copyright (c) 2006, Intel Corporation                                                         \r
+  All rights reserved. This program and the accompanying materials                          \r
+  are licensed and made available under the terms and conditions of the BSD License         \r
+  which accompanies this distribution.  The full text of the license may be found at        \r
+  http://opensource.org/licenses/bsd-license.php                                            \r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+\r
+  Module Name:  PxeBaseCode.h\r
+\r
+**/\r
+#ifndef __PXE_BASE_CODE_PROTOCOL_H__\r
+#define __PXE_BASE_CODE_PROTOCOL_H__\r
+\r
+//\r
+// PXE Base Code protocol\r
+//\r
+#define EFI_PXE_BASE_CODE_PROTOCOL_GUID \\r
+  { \\r
+    0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \\r
+  }\r
+\r
+typedef struct _EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE_PROTOCOL;\r
+\r
+//\r
+// Default IP TTL and ToS.\r
+//\r
+#define DEFAULT_TTL 16\r
+#define DEFAULT_ToS 0\r
+\r
+//\r
+// ICMP error format\r
+//\r
+typedef struct {\r
+  UINT8   Type;\r
+  UINT8   Code;\r
+  UINT16  Checksum;\r
+  union {\r
+    UINT32  reserved;\r
+    UINT32  Mtu;\r
+    UINT32  Pointer;\r
+    struct {\r
+      UINT16  Identifier;\r
+      UINT16  Sequence;\r
+    } Echo;\r
+  } u;\r
+  UINT8 Data[494];\r
+} EFI_PXE_BASE_CODE_ICMP_ERROR;\r
+\r
+//\r
+// TFTP error format\r
+//\r
+typedef struct {\r
+  UINT8 ErrorCode;\r
+  CHAR8 ErrorString[127];\r
+} EFI_PXE_BASE_CODE_TFTP_ERROR;\r
+\r
+//\r
+// IP Receive Filter definitions\r
+//\r
+#define EFI_PXE_BASE_CODE_MAX_IPCNT 8\r
+\r
+typedef struct {\r
+  UINT8           Filters;\r
+  UINT8           IpCnt;\r
+  UINT16          reserved;\r
+  EFI_IP_ADDRESS  IpList[EFI_PXE_BASE_CODE_MAX_IPCNT];\r
+} EFI_PXE_BASE_CODE_IP_FILTER;\r
+\r
+#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP            0x0001\r
+#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST             0x0002\r
+#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS           0x0004\r
+#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008\r
+\r
+//\r
+// ARP Cache definitions\r
+//\r
+typedef struct {\r
+  EFI_IP_ADDRESS  IpAddr;\r
+  EFI_MAC_ADDRESS MacAddr;\r
+} EFI_PXE_BASE_CODE_ARP_ENTRY;\r
+\r
+typedef struct {\r
+  EFI_IP_ADDRESS  IpAddr;\r
+  EFI_IP_ADDRESS  SubnetMask;\r
+  EFI_IP_ADDRESS  GwAddr;\r
+} EFI_PXE_BASE_CODE_ROUTE_ENTRY;\r
+\r
+//\r
+// UDP definitions\r
+//\r
+typedef UINT16  EFI_PXE_BASE_CODE_UDP_PORT;\r
+\r
+#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP    0x0001\r
+#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT  0x0002\r
+#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP   0x0004\r
+#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008\r
+#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER    0x0010\r
+#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT  0x0020\r
+\r
+//\r
+// Discover() definitions\r
+//\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP         0\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS      1\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM         2\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI           3\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO        4\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD          5\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM          6\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG  7\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW       8\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9         9\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10        10\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11        11\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12       12\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL    13\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT       14\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO             15\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT           16\r
+//\r
+// 17 through 32767 are reserved\r
+// 32768 through 65279 are for vendor use\r
+// 65280 through 65534 are reserved\r
+//\r
+#define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST   65535\r
+\r
+#define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK     0x7FFF\r
+#define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL  0x0000\r
+\r
+//\r
+// Discover() server list structure.\r
+//\r
+typedef struct {\r
+  UINT16          Type;\r
+  BOOLEAN         AcceptAnyResponse;\r
+  UINT8           Reserved;\r
+  EFI_IP_ADDRESS  IpAddr;\r
+} EFI_PXE_BASE_CODE_SRVLIST;\r
+\r
+//\r
+// Discover() information override structure.\r
+//\r
+typedef struct {\r
+  BOOLEAN                   UseMCast;\r
+  BOOLEAN                   UseBCast;\r
+  BOOLEAN                   UseUCast;\r
+  BOOLEAN                   MustUseList;\r
+  EFI_IP_ADDRESS            ServerMCastIp;\r
+  UINT16                    IpCnt;\r
+  EFI_PXE_BASE_CODE_SRVLIST SrvList[1];\r
+} EFI_PXE_BASE_CODE_DISCOVER_INFO;\r
+\r
+//\r
+// Mtftp() definitions\r
+//\r
+typedef enum {\r
+  EFI_PXE_BASE_CODE_TFTP_FIRST,\r
+  EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,\r
+  EFI_PXE_BASE_CODE_TFTP_READ_FILE,\r
+  EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,\r
+  EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY,\r
+  EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE,\r
+  EFI_PXE_BASE_CODE_MTFTP_READ_FILE,\r
+  EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY,\r
+  EFI_PXE_BASE_CODE_MTFTP_LAST\r
+} EFI_PXE_BASE_CODE_TFTP_OPCODE;\r
+\r
+typedef struct {\r
+  EFI_IP_ADDRESS              MCastIp;\r
+  EFI_PXE_BASE_CODE_UDP_PORT  CPort;\r
+  EFI_PXE_BASE_CODE_UDP_PORT  SPort;\r
+  UINT16                      ListenTimeout;\r
+  UINT16                      TransmitTimeout;\r
+} EFI_PXE_BASE_CODE_MTFTP_INFO;\r
+\r
+//\r
+// PXE Base Code Mode structure\r
+//\r
+#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES   8\r
+#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8\r
+\r
+typedef struct {\r
+  BOOLEAN                       Started;\r
+  BOOLEAN                       Ipv6Available;\r
+  BOOLEAN                       Ipv6Supported;\r
+  BOOLEAN                       UsingIpv6;\r
+  BOOLEAN                       BisSupported;\r
+  BOOLEAN                       BisDetected;\r
+  BOOLEAN                       AutoArp;\r
+  BOOLEAN                       SendGUID;\r
+  BOOLEAN                       DhcpDiscoverValid;\r
+  BOOLEAN                       DhcpAckReceived;\r
+  BOOLEAN                       ProxyOfferReceived;\r
+  BOOLEAN                       PxeDiscoverValid;\r
+  BOOLEAN                       PxeReplyReceived;\r
+  BOOLEAN                       PxeBisReplyReceived;\r
+  BOOLEAN                       IcmpErrorReceived;\r
+  BOOLEAN                       TftpErrorReceived;\r
+  BOOLEAN                       MakeCallbacks;\r
+  UINT8                         TTL;\r
+  UINT8                         ToS;\r
+  EFI_IP_ADDRESS                StationIp;\r
+  EFI_IP_ADDRESS                SubnetMask;\r
+  EFI_PXE_BASE_CODE_PACKET      DhcpDiscover;\r
+  EFI_PXE_BASE_CODE_PACKET      DhcpAck;\r
+  EFI_PXE_BASE_CODE_PACKET      ProxyOffer;\r
+  EFI_PXE_BASE_CODE_PACKET      PxeDiscover;\r
+  EFI_PXE_BASE_CODE_PACKET      PxeReply;\r
+  EFI_PXE_BASE_CODE_PACKET      PxeBisReply;\r
+  EFI_PXE_BASE_CODE_IP_FILTER   IpFilter;\r
+  UINT32                        ArpCacheEntries;\r
+  EFI_PXE_BASE_CODE_ARP_ENTRY   ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES];\r
+  UINT32                        RouteTableEntries;\r
+  EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES];\r
+  EFI_PXE_BASE_CODE_ICMP_ERROR  IcmpError;\r
+  EFI_PXE_BASE_CODE_TFTP_ERROR  TftpError;\r
+} EFI_PXE_BASE_CODE_MODE;\r
+\r
+//\r
+// PXE Base Code Interface Function definitions\r
+//\r
+\r
+/**                                                                 \r
+  Enables the use of the PXE Base Code Protocol functions.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  UseIpv6               Specifies the type of IP addresses that are to be used during the session\r
+                                that is being started. Set to TRUE for IPv6 addresses, and FALSE for     \r
+                                IPv4 addresses.                                                                                                   \r
+                                \r
+  @retval EFI_SUCCESS           The PXE Base Code Protocol was started.\r
+  @retval EFI_DEVICE_ERROR      The network device encountered an error during this oper  \r
+  @retval EFI_UNSUPPORTED       UseIpv6 is TRUE, but the Ipv6Supported field of the\r
+                                EFI_PXE_BASE_CODE_MODE structure is FALSE.  \r
+  @retval EFI_ALREADY_STARTED   The PXE Base Code Protocol is already in the started state.                                   \r
+  @retval EFI_INVALID_PARAMETER The This parameter is NULL or does not point to a valid\r
+                                EFI_PXE_BASE_CODE_PROTOCOL structure.      \r
+  @retval EFI_OUT_OF_RESOURCES  Could not allocate enough memory or other resources to start the                                          \r
+                                PXE Base Code Protocol.                                         \r
+                                     \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_START) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL            *This,\r
+  IN BOOLEAN                               UseIpv6\r
+  );\r
+\r
+/**                                                                 \r
+  Disables the use of the PXE Base Code Protocol functions.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
\r
+  @retval EFI_SUCCESS           The PXE Base Code Protocol was stopped.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is already in the stopped state.  \r
+  @retval EFI_INVALID_PARAMETER The This parameter is NULL or does not point to a valid\r
+                                EFI_PXE_BASE_CODE_PROTOCOL structure.                  \r
+  @retval EFI_DEVICE_ERROR      The network device encountered an error during this operation.                                \r
+                                     \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_STOP) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL    *This\r
+  );\r
+\r
+/**                                                                 \r
+  Attempts to complete a DHCPv4 D.O.R.A. (discover / offer / request / acknowledge) or DHCPv6\r
+  S.A.R.R (solicit / advertise / request / reply) sequence.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  SortOffers            TRUE if the offers received should be sorted. Set to FALSE to try the\r
+                                offers in the order that they are received.                          \r
\r
+  @retval EFI_SUCCESS           Valid DHCP has completed.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER The This parameter is NULL or does not point to a valid\r
+                                EFI_PXE_BASE_CODE_PROTOCOL structure.                  \r
+  @retval EFI_DEVICE_ERROR      The network device encountered an error during this operation.                                \r
+  @retval EFI_OUT_OF_RESOURCES  Could not allocate enough memory to complete the DHCP Protocol.\r
+  @retval EFI_ABORTED           The callback function aborted the DHCP Protocol.\r
+  @retval EFI_TIMEOUT           The DHCP Protocol timed out.\r
+  @retval EFI_ICMP_ERROR        An ICMP error packet was received during the DHCP session.\r
+  @retval EFI_NO_RESPONSE       Valid PXE offer was not received.\r
+                                     \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_DHCP) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL            *This,\r
+  IN BOOLEAN                               SortOffers\r
+  );\r
+\r
+/**                                                                 \r
+  Attempts to complete the PXE Boot Server and/or boot image discovery sequence.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  Type                  The type of bootstrap to perform.\r
+  @param  Layer                 Pointer to the boot server layer number to discover, which must be\r
+                                PXE_BOOT_LAYER_INITIAL when a new server type is being            \r
+                                discovered.                                                       \r
+  @param  UseBis                TRUE if Boot Integrity Services are to be used. FALSE otherwise.                                \r
+  @param  Info                  Pointer to a data structure that contains additional information on the\r
+                                type of discovery operation that is to be performed.                   \r
+                                  \r
+  @retval EFI_SUCCESS           The Discovery sequence has been completed.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.                                \r
+  @retval EFI_DEVICE_ERROR      The network device encountered an error during this operation.                                \r
+  @retval EFI_OUT_OF_RESOURCES  Could not allocate enough memory to complete Discovery.\r
+  @retval EFI_ABORTED           The callback function aborted the Discovery sequence.\r
+  @retval EFI_TIMEOUT           The Discovery sequence timed out.\r
+  @retval EFI_ICMP_ERROR        An ICMP error packet was received during the PXE discovery\r
+                                session.                                                  \r
+                                       \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_DISCOVER) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL           *This,\r
+  IN UINT16                               Type,\r
+  IN UINT16                               *Layer,\r
+  IN BOOLEAN                              UseBis,\r
+  IN EFI_PXE_BASE_CODE_DISCOVER_INFO      *Info   OPTIONAL\r
+  );\r
+\r
+/**                                                                 \r
+  Used to perform TFTP and MTFTP services.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  Operation             The type of operation to perform.\r
+  @param  BufferPtr             A pointer to the data buffer.                                                                     \r
+  @param  Overwrite             Only used on write file operations. TRUE if a file on a remote server can\r
+                                be overwritten.                                                          \r
+  @param  BufferSize            For get-file-size operations, *BufferSize returns the size of the\r
+                                requested file.                                                  \r
+  @param  BlockSize             The requested block size to be used during a TFTP transfer.\r
+  @param  ServerIp              The TFTP / MTFTP server IP address.\r
+  @param  Filename              A Null-terminated ASCII string that specifies a directory name or a file\r
+                                name.                                                                   \r
+  @param  Info                  Pointer to the MTFTP information.\r
+  @param  DontUseBuffer         Set to FALSE for normal TFTP and MTFTP read file operation.                       \r
+                                  \r
+  @retval EFI_SUCCESS           The TFTP/MTFTP operation was completed.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.                                \r
+  @retval EFI_DEVICE_ERROR      The network device encountered an error during this operation.                                \r
+  @retval EFI_BUFFER_TOO_SMALL  The buffer is not large enough to complete the read operation.   \r
+  @retval EFI_ABORTED           The callback function aborted the TFTP/MTFTP operation.\r
+  @retval EFI_TIMEOUT           The TFTP/MTFTP operation timed out.\r
+  @retval EFI_ICMP_ERROR        An ICMP error packet was received during the MTFTP session.\r
+  @retval EFI_TFTP_ERROR        A TFTP error packet was received during the MTFTP session.\r
+                                                                      \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_MTFTP) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL                *This,\r
+  IN EFI_PXE_BASE_CODE_TFTP_OPCODE             Operation,\r
+  IN OUT VOID                                  *BufferPtr OPTIONAL,\r
+  IN BOOLEAN                                   Overwrite,\r
+  IN OUT UINT64                                *BufferSize,\r
+  IN UINTN                                     *BlockSize OPTIONAL,\r
+  IN EFI_IP_ADDRESS                            *ServerIp,\r
+  IN UINT8                                     *Filename  OPTIONAL,\r
+  IN EFI_PXE_BASE_CODE_MTFTP_INFO              *Info      OPTIONAL,\r
+  IN BOOLEAN                                   DontUseBuffer\r
+  );\r
+\r
+/**                                                                 \r
+  Writes a UDP packet to the network interface.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  OpFlags               The UDP operation flags. \r
+  @param  DestIp                The destination IP address.\r
+  @param  DestPort              The destination UDP port number.                                                                         \r
+  @param  GatewayIp             The gateway IP address.                                                 \r
+  @param  SrcIp                 The source IP address.\r
+  @param  SrcPort               The source UDP port number.\r
+  @param  HeaderSize            An optional field which may be set to the length of a header at\r
+                                HeaderPtr to be prefixed to the data at BufferPtr.             \r
+  @param  HeaderPtr             If HeaderSize is not NULL, a pointer to a header to be prefixed to the\r
+                                data at BufferPtr.                                                    \r
+  @param  BufferSize            A pointer to the size of the data at BufferPtr.\r
+  @param  BufferPtr             A pointer to the data to be written.\r
+                                  \r
+  @retval EFI_SUCCESS           The UDP Write operation was completed.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.                                \r
+  @retval EFI_BAD_BUFFER_SIZE   The buffer is too long to be transmitted.  \r
+  @retval EFI_ABORTED           The callback function aborted the UDP Write operation.\r
+  @retval EFI_TIMEOUT           The UDP Write operation timed out.\r
+  @retval EFI_ICMP_ERROR        An ICMP error packet was received during the UDP write session.  \r
+                                                                      \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL                *This,\r
+  IN UINT16                                    OpFlags,\r
+  IN EFI_IP_ADDRESS                            *DestIp,\r
+  IN EFI_PXE_BASE_CODE_UDP_PORT                *DestPort,\r
+  IN EFI_IP_ADDRESS                            *GatewayIp,  OPTIONAL\r
+  IN EFI_IP_ADDRESS                            *SrcIp,      OPTIONAL\r
+  IN OUT EFI_PXE_BASE_CODE_UDP_PORT            *SrcPort,    OPTIONAL\r
+  IN UINTN                                     *HeaderSize, OPTIONAL\r
+  IN VOID                                      *HeaderPtr,  OPTIONAL\r
+  IN UINTN                                     *BufferSize,\r
+  IN VOID                                      *BufferPtr\r
+  );\r
+\r
+/**                                                                 \r
+  Reads a UDP packet from the network interface.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  OpFlags               The UDP operation flags. \r
+  @param  DestIp                The destination IP address.\r
+  @param  DestPort              The destination UDP port number.                                                                         \r
+  @param  GatewayIp             The gateway IP address.                                                 \r
+  @param  SrcIp                 The source IP address.\r
+  @param  SrcPort               The source UDP port number.\r
+  @param  HeaderSize            An optional field which may be set to the length of a header at\r
+                                HeaderPtr to be prefixed to the data at BufferPtr.             \r
+  @param  HeaderPtr             If HeaderSize is not NULL, a pointer to a header to be prefixed to the\r
+                                data at BufferPtr.                                                    \r
+  @param  BufferSize            A pointer to the size of the data at BufferPtr.\r
+  @param  BufferPtr             A pointer to the data to be read.\r
+                                  \r
+  @retval EFI_SUCCESS           The UDP Write operation was completed.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.                                \r
+  @retval EFI_DEVICE_ERROR      The network device encountered an error during this operation.\r
+  @retval EFI_BUFFER_TOO_SMALL  The packet is larger than Buffer can hold.\r
+  @retval EFI_ABORTED           The callback function aborted the UDP Read operation.\r
+  @retval EFI_TIMEOUT           The UDP Read operation timed out.  \r
+                                                                      \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_UDP_READ) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL                *This,\r
+  IN UINT16                                    OpFlags,\r
+  IN OUT EFI_IP_ADDRESS                        *DestIp,     OPTIONAL\r
+  IN OUT EFI_PXE_BASE_CODE_UDP_PORT            *DestPort,   OPTIONAL\r
+  IN OUT EFI_IP_ADDRESS                        *SrcIp,      OPTIONAL\r
+  IN OUT EFI_PXE_BASE_CODE_UDP_PORT            *SrcPort,    OPTIONAL\r
+  IN UINTN                                     *HeaderSize, OPTIONAL\r
+  IN VOID                                      *HeaderPtr,  OPTIONAL\r
+  IN OUT UINTN                                 *BufferSize,\r
+  IN VOID                                      *BufferPtr\r
+  );\r
+\r
+/**                                                                 \r
+  Updates the IP receive filters of a network device and enables software filtering.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  NewFilter             Pointer to the new set of IP receive filters.\r
+  \r
+  @retval EFI_SUCCESS           The IP receive filter settings were updated.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.                                  \r
+                                                                      \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL            *This,\r
+  IN EFI_PXE_BASE_CODE_IP_FILTER           *NewFilter\r
+  );\r
+\r
+/**                                                                 \r
+  Uses the ARP protocol to resolve a MAC address.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  IpAddr                Pointer to the IP address that is used to resolve a MAC address.\r
+  @param  MacAddr               If not NULL, a pointer to the MAC address that was resolved with the\r
+                                ARP protocol.                                                       \r
+                                  \r
+  @retval EFI_SUCCESS           The IP or MAC address was resolved.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.                                \r
+  @retval EFI_DEVICE_ERROR      The network device encountered an error during this operation.  \r
+  @retval EFI_ABORTED           The callback function aborted the ARP Protocol.\r
+  @retval EFI_TIMEOUT           The ARP Protocol encountered a timeout condition.\r
+                                                                      \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_ARP) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL            *This,\r
+  IN EFI_IP_ADDRESS                        *IpAddr,\r
+  IN EFI_MAC_ADDRESS                       *MacAddr OPTIONAL\r
+  );\r
+\r
+/**                                                                 \r
+  Updates the parameters that affect the operation of the PXE Base Code Protocol.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  NewAutoArp            If not NULL, a pointer to a value that specifies whether to replace the\r
+                                current value of AutoARP.                                              \r
+  @param  NewSendGUID           If not NULL, a pointer to a value that specifies whether to replace the\r
+                                current value of SendGUID.                                             \r
+  @param  NewTTL                If not NULL, a pointer to be used in place of the current value of TTL,\r
+                                the "time to live" field of the IP header.                           \r
+  @param  NewToS                If not NULL, a pointer to be used in place of the current value of ToS,\r
+                                the "type of service" field of the IP header.                        \r
+  @param  NewMakeCallback       If not NULL, a pointer to a value that specifies whether to replace the\r
+                                current value of the MakeCallback field of the Mode structure.                                                                \r
+                                  \r
+  @retval EFI_SUCCESS           The new parameters values were updated.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.                                  \r
+                                                                      \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL            *This,\r
+  IN BOOLEAN                               *NewAutoArp,     OPTIONAL\r
+  IN BOOLEAN                               *NewSendGUID,    OPTIONAL\r
+  IN UINT8                                 *NewTTL,         OPTIONAL\r
+  IN UINT8                                 *NewToS,         OPTIONAL\r
+  IN BOOLEAN                               *NewMakeCallback OPTIONAL\r
+  );\r
+\r
+/**                                                                 \r
+  Updates the station IP address and/or subnet mask values of a network device.\r
+    \r
+  @param  This                  Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  NewStationIp          Pointer to the new IP address to be used by the network device.  \r
+  @param  NewSubnetMask         Pointer to the new subnet mask to be used by the network device.                                 \r
+                                  \r
+  @retval EFI_SUCCESS           The new station IP address and/or subnet mask were updated.\r
+  @retval EFI_NOT_STARTED       The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.                                  \r
+                                                                      \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL            *This,\r
+  IN EFI_IP_ADDRESS                        *NewStationIp,   OPTIONAL\r
+  IN EFI_IP_ADDRESS                        *NewSubnetMask   OPTIONAL\r
+  );\r
+\r
+/**                                                                 \r
+  Updates the contents of the cached DHCP and Discover packets.\r
+    \r
+  @param  This                   Pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.\r
+  @param  NewDhcpDiscoverValid   Pointer to a value that will replace the current\r
+                                 DhcpDiscoverValid field.                        \r
+  @param  NewDhcpAckReceived     Pointer to a value that will replace the current\r
+                                 DhcpAckReceived field.                          \r
+  @param  NewProxyOfferReceived  Pointer to a value that will replace the current\r
+                                 ProxyOfferReceived field.                       \r
+  @param  NewPxeDiscoverValid    Pointer to a value that will replace the current     \r
+                                 ProxyOfferReceived field.                       \r
+  @param  NewPxeReplyReceived    Pointer to a value that will replace the current\r
+                                 PxeReplyReceived field.                         \r
+  @param  NewPxeBisReplyReceived Pointer to a value that will replace the current\r
+                                 PxeBisReplyReceived field.                      \r
+  @param  NewDhcpDiscover        Pointer to the new cached DHCP Discover packet contents.   \r
+  @param  NewDhcpAck             Pointer to the new cached DHCP Ack packet contents.\r
+  @param  NewProxyOffer          Pointer to the new cached Proxy Offer packet contents.\r
+  @param  NewPxeDiscover         Pointer to the new cached PXE Discover packet contents.\r
+  @param  NewPxeReply            Pointer to the new cached PXE Reply packet contents.\r
+  @param  NewPxeBisReply         Pointer to the new cached PXE BIS Reply packet contents.\r
+                                   \r
+  @retval EFI_SUCCESS            The cached packet contents were updated.\r
+  @retval EFI_NOT_STARTED        The PXE Base Code Protocol is in the stopped state.\r
+  @retval EFI_INVALID_PARAMETER  This is NULL or not point to a valid EFI_PXE_BASE_CODE_PROTOCOL structure.\r
+                                                                      \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS) (\r
+  IN EFI_PXE_BASE_CODE_PROTOCOL            *This,\r
+  BOOLEAN                                  *NewDhcpDiscoverValid,   OPTIONAL\r
+  BOOLEAN                                  *NewDhcpAckReceived,     OPTIONAL\r
+  BOOLEAN                                  *NewProxyOfferReceived,  OPTIONAL\r
+  BOOLEAN                                  *NewPxeDiscoverValid,    OPTIONAL\r
+  BOOLEAN                                  *NewPxeReplyReceived,    OPTIONAL\r
+  BOOLEAN                                  *NewPxeBisReplyReceived, OPTIONAL\r
+  IN EFI_PXE_BASE_CODE_PACKET              *NewDhcpDiscover,        OPTIONAL\r
+  IN EFI_PXE_BASE_CODE_PACKET              *NewDhcpAck,             OPTIONAL\r
+  IN EFI_PXE_BASE_CODE_PACKET              *NewProxyOffer,          OPTIONAL\r
+  IN EFI_PXE_BASE_CODE_PACKET              *NewPxeDiscover,         OPTIONAL\r
+  IN EFI_PXE_BASE_CODE_PACKET              *NewPxeReply,            OPTIONAL\r
+  IN EFI_PXE_BASE_CODE_PACKET              *NewPxeBisReply          OPTIONAL\r
+  );\r
+\r
+//\r
+// PXE Base Code Protocol structure\r
+//\r
+#define EFI_PXE_BASE_CODE_INTERFACE_REVISION  0x00010000\r
+#define EFI_PXE_BASE_CODE_PROTOCOL_REVISION   EFI_PXE_BASE_CODE_INTERFACE_REVISION\r
+\r
+struct _EFI_PXE_BASE_CODE_PROTOCOL {\r
+  UINT64                            Revision;\r
+  EFI_PXE_BASE_CODE_START           Start;\r
+  EFI_PXE_BASE_CODE_STOP            Stop;\r
+  EFI_PXE_BASE_CODE_DHCP            Dhcp;\r
+  EFI_PXE_BASE_CODE_DISCOVER        Discover;\r
+  EFI_PXE_BASE_CODE_MTFTP           Mtftp;\r
+  EFI_PXE_BASE_CODE_UDP_WRITE       UdpWrite;\r
+  EFI_PXE_BASE_CODE_UDP_READ        UdpRead;\r
+  EFI_PXE_BASE_CODE_SET_IP_FILTER   SetIpFilter;\r
+  EFI_PXE_BASE_CODE_ARP             Arp;\r
+  EFI_PXE_BASE_CODE_SET_PARAMETERS  SetParameters;\r
+  EFI_PXE_BASE_CODE_SET_STATION_IP  SetStationIp;\r
+  EFI_PXE_BASE_CODE_SET_PACKETS     SetPackets;\r
+  EFI_PXE_BASE_CODE_MODE            *Mode;\r
+};\r
+\r
+extern EFI_GUID gEfiPxeBaseCodeProtocolGuid;\r
+\r
+#endif \r