TianoCore EDK2 master
PxeBaseCode.h
Go to the documentation of this file.
1
15#ifndef __PXE_BASE_CODE_PROTOCOL_H__
16#define __PXE_BASE_CODE_PROTOCOL_H__
17
21#define EFI_PXE_BASE_CODE_PROTOCOL_GUID \
22 { \
23 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
24 }
25
27
32
36#define DEFAULT_TTL 16
37#define DEFAULT_ToS 0
38
42typedef struct {
43 UINT8 Type;
44 UINT8 Code;
45 UINT16 Checksum;
46 union {
47 UINT32 reserved;
48 UINT32 Mtu;
49 UINT32 Pointer;
50 struct {
51 UINT16 Identifier;
52 UINT16 Sequence;
53 } Echo;
54 } u;
55 UINT8 Data[494];
57
61typedef struct {
62 UINT8 ErrorCode;
63 CHAR8 ErrorString[127];
65
69#define EFI_PXE_BASE_CODE_MAX_IPCNT 8
70
74typedef struct {
75 UINT8 Filters;
76 UINT8 IpCnt;
77 UINT16 reserved;
80
81#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001
82#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002
83#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004
84#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008
85
89typedef struct {
90 EFI_IP_ADDRESS IpAddr;
91 EFI_MAC_ADDRESS MacAddr;
93
97typedef struct {
98 EFI_IP_ADDRESS IpAddr;
99 EFI_IP_ADDRESS SubnetMask;
100 EFI_IP_ADDRESS GwAddr;
102
103//
104// UDP definitions
105//
106typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT;
107
108#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP 0x0001
109#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT 0x0002
110#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP 0x0004
111#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008
112#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER 0x0010
113#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT 0x0020
114
115//
116// Discover() definitions
117//
118#define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP 0
119#define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS 1
120#define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM 2
121#define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI 3
122#define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO 4
123#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD 5
124#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM 6
125#define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG 7
126#define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW 8
127#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9 9
128#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10 10
129#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11 11
130#define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12 12
131#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL 13
132#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT 14
133#define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO 15
134#define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT 16
135//
136// 17 through 32767 are reserved
137// 32768 through 65279 are for vendor use
138// 65280 through 65534 are reserved
139//
140#define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST 65535
141
142#define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK 0x7FFF
143#define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL 0x0000
144
145//
146// PXE Tag definition that identifies the processor
147// and programming environment of the client system.
148// These identifiers are defined by IETF:
149// http://www.ietf.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml
150//
151#if defined (MDE_CPU_IA32)
152#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x0006
153#elif defined (MDE_CPU_X64)
154#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x0007
155#elif defined (MDE_CPU_ARM)
156#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x000A
157#elif defined (MDE_CPU_AARCH64)
158#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x000B
159#elif defined (MDE_CPU_RISCV64)
160#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x001B
161#endif
162
166typedef struct {
167 UINT16 Type;
168 BOOLEAN AcceptAnyResponse;
169 UINT8 Reserved;
170 EFI_IP_ADDRESS IpAddr;
172
176typedef struct {
177 BOOLEAN UseMCast;
178 BOOLEAN UseBCast;
179 BOOLEAN UseUCast;
180 BOOLEAN MustUseList;
181 EFI_IP_ADDRESS ServerMCastIp;
182 UINT16 IpCnt;
183 EFI_PXE_BASE_CODE_SRVLIST SrvList[1];
185
189typedef enum {
190 EFI_PXE_BASE_CODE_TFTP_FIRST,
191 EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,
192 EFI_PXE_BASE_CODE_TFTP_READ_FILE,
193 EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,
194 EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY,
195 EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE,
196 EFI_PXE_BASE_CODE_MTFTP_READ_FILE,
197 EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY,
198 EFI_PXE_BASE_CODE_MTFTP_LAST
200
206typedef struct {
207 EFI_IP_ADDRESS MCastIp;
208 EFI_PXE_BASE_CODE_UDP_PORT CPort;
209 EFI_PXE_BASE_CODE_UDP_PORT SPort;
210 UINT16 ListenTimeout;
211 UINT16 TransmitTimeout;
213
217typedef struct {
218 UINT8 BootpOpcode;
219 UINT8 BootpHwType;
220 UINT8 BootpHwAddrLen;
221 UINT8 BootpGateHops;
222 UINT32 BootpIdent;
223 UINT16 BootpSeconds;
224 UINT16 BootpFlags;
225 UINT8 BootpCiAddr[4];
226 UINT8 BootpYiAddr[4];
227 UINT8 BootpSiAddr[4];
228 UINT8 BootpGiAddr[4];
229 UINT8 BootpHwAddr[16];
230 UINT8 BootpSrvName[64];
231 UINT8 BootpBootFile[128];
232 UINT32 DhcpMagik;
233 UINT8 DhcpOptions[56];
235
239typedef struct {
240 UINT32 MessageType : 8;
241 UINT32 TransactionId : 24;
242 UINT8 DhcpOptions[1024];
244
248typedef union {
249 UINT8 Raw[1472];
253
254//
255// PXE Base Code Mode structure
256//
257#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8
258#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8
259
266typedef struct {
267 BOOLEAN Started;
268 BOOLEAN Ipv6Available;
269 BOOLEAN Ipv6Supported;
270 BOOLEAN UsingIpv6;
271 BOOLEAN BisSupported;
272 BOOLEAN BisDetected;
273 BOOLEAN AutoArp;
274 BOOLEAN SendGUID;
275 BOOLEAN DhcpDiscoverValid;
276 BOOLEAN DhcpAckReceived;
277 BOOLEAN ProxyOfferReceived;
278 BOOLEAN PxeDiscoverValid;
279 BOOLEAN PxeReplyReceived;
280 BOOLEAN PxeBisReplyReceived;
281 BOOLEAN IcmpErrorReceived;
282 BOOLEAN TftpErrorReceived;
283 BOOLEAN MakeCallbacks;
284 UINT8 TTL;
285 UINT8 ToS;
286 EFI_IP_ADDRESS StationIp;
287 EFI_IP_ADDRESS SubnetMask;
288 EFI_PXE_BASE_CODE_PACKET DhcpDiscover;
290 EFI_PXE_BASE_CODE_PACKET ProxyOffer;
291 EFI_PXE_BASE_CODE_PACKET PxeDiscover;
293 EFI_PXE_BASE_CODE_PACKET PxeBisReply;
295 UINT32 ArpCacheEntries;
296 EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES];
297 UINT32 RouteTableEntries;
298 EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES];
302
303//
304// PXE Base Code Interface Function definitions
305//
306
371typedef
375 IN BOOLEAN UseIpv6
376 );
377
395typedef
397(EFIAPI *EFI_PXE_BASE_CODE_STOP)(
399 );
400
434typedef
436(EFIAPI *EFI_PXE_BASE_CODE_DHCP)(
438 IN BOOLEAN SortOffers
439 );
440
484typedef
488 IN UINT16 Type,
489 IN UINT16 *Layer,
490 IN BOOLEAN UseBis,
492 );
493
565typedef
570 IN OUT VOID *BufferPtr OPTIONAL,
571 IN BOOLEAN Overwrite,
572 IN OUT UINT64 *BufferSize,
573 IN UINTN *BlockSize OPTIONAL,
574 IN EFI_IP_ADDRESS *ServerIp,
575 IN UINT8 *Filename OPTIONAL,
577 IN BOOLEAN DontUseBuffer
578 );
579
617typedef
621 IN UINT16 OpFlags,
622 IN EFI_IP_ADDRESS *DestIp,
623 IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,
624 IN EFI_IP_ADDRESS *GatewayIp OPTIONAL,
626 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL,
627 IN UINTN *HeaderSize OPTIONAL,
628 IN VOID *HeaderPtr OPTIONAL,
629 IN UINTN *BufferSize,
630 IN VOID *BufferPtr
631 );
632
671typedef
675 IN UINT16 OpFlags,
677 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL,
679 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL,
680 IN UINTN *HeaderSize OPTIONAL,
681 IN VOID *HeaderPtr OPTIONAL,
682 IN OUT UINTN *BufferSize,
683 IN VOID *BufferPtr
684 );
685
718typedef
723 );
724
754typedef
756(EFIAPI *EFI_PXE_BASE_CODE_ARP)(
758 IN EFI_IP_ADDRESS *IpAddr,
760 );
761
794typedef
798 IN BOOLEAN *NewAutoArp OPTIONAL,
799 IN BOOLEAN *NewSendGUID OPTIONAL,
800 IN UINT8 *NewTTL OPTIONAL,
801 IN UINT8 *NewToS OPTIONAL,
802 IN BOOLEAN *NewMakeCallback OPTIONAL
803 );
804
828typedef
832 IN EFI_IP_ADDRESS *NewStationIp OPTIONAL,
833 IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
834 );
835
867typedef
871 BOOLEAN *NewDhcpDiscoverValid OPTIONAL,
872 BOOLEAN *NewDhcpAckReceived OPTIONAL,
873 BOOLEAN *NewProxyOfferReceived OPTIONAL,
874 BOOLEAN *NewPxeDiscoverValid OPTIONAL,
875 BOOLEAN *NewPxeReplyReceived OPTIONAL,
876 BOOLEAN *NewPxeBisReplyReceived OPTIONAL,
877 IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover OPTIONAL,
879 IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer OPTIONAL,
880 IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover OPTIONAL,
882 IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL
883 );
884
885//
886// PXE Base Code Protocol structure
887//
888#define EFI_PXE_BASE_CODE_PROTOCOL_REVISION 0x00010000
889
890//
891// Revision defined in EFI1.1
892//
893#define EFI_PXE_BASE_CODE_INTERFACE_REVISION EFI_PXE_BASE_CODE_PROTOCOL_REVISION
894
909 UINT64 Revision;
926};
927
928extern EFI_GUID gEfiPxeBaseCodeProtocolGuid;
929
930#endif
UINT64 UINTN
#define OPTIONAL
Definition: Base.h:290
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_START)(IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN BOOLEAN UseIpv6)
Definition: PxeBaseCode.h:373
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_MTFTP)(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)
Definition: PxeBaseCode.h:567
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_UDP_WRITE)(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)
Definition: PxeBaseCode.h:619
EFI_PXE_BASE_CODE_TFTP_OPCODE
Definition: PxeBaseCode.h:189
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_ARP)(IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_IP_ADDRESS *IpAddr, IN EFI_MAC_ADDRESS *MacAddr OPTIONAL)
Definition: PxeBaseCode.h:756
#define EFI_PXE_BASE_CODE_MAX_IPCNT
Definition: PxeBaseCode.h:69
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_SET_PARAMETERS)(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)
Definition: PxeBaseCode.h:796
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_SET_PACKETS)(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)
Definition: PxeBaseCode.h:869
EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE
Definition: PxeBaseCode.h:31
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_STOP)(IN EFI_PXE_BASE_CODE_PROTOCOL *This)
Definition: PxeBaseCode.h:397
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_SET_IP_FILTER)(IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter)
Definition: PxeBaseCode.h:720
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_UDP_READ)(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)
Definition: PxeBaseCode.h:673
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_DISCOVER)(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)
Definition: PxeBaseCode.h:486
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_DHCP)(IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN BOOLEAN SortOffers)
Definition: PxeBaseCode.h:436
EFI_STATUS(EFIAPI * EFI_PXE_BASE_CODE_SET_STATION_IP)(IN EFI_PXE_BASE_CODE_PROTOCOL *This, IN EFI_IP_ADDRESS *NewStationIp OPTIONAL, IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL)
Definition: PxeBaseCode.h:830
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:28
EFI_PXE_BASE_CODE_MODE * Mode
Definition: PxeBaseCode.h:925
Definition: Base.h:213