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