1#ifndef _EFIPXEBC_H 2#define _EFIPXEBC_H 3 4/*++ 5 6Copyright (c) 1998 Intel Corporation 7 8Module Name: 9 10 efipxebc.h 11 12Abstract: 13 14 EFI PXE Base Code Protocol 15 16 17 18Revision History 19 20--*/ 21 22// 23// PXE Base Code protocol 24// 25 26#define EFI_PXE_BASE_CODE_PROTOCOL \ 27 { 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 28 29INTERFACE_DECL(_EFI_PXE_BASE_CODE); 30 31#define DEFAULT_TTL 4 32#define DEFAULT_ToS 0 33// 34// Address definitions 35// 36 37typedef union { 38 UINT32 Addr[4]; 39 EFI_IPv4_ADDRESS v4; 40 EFI_IPv6_ADDRESS v6; 41} EFI_IP_ADDRESS; 42 43typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT; 44 45// 46// Packet definitions 47// 48 49typedef struct { 50 UINT8 BootpOpcode; 51 UINT8 BootpHwType; 52 UINT8 BootpHwAddrLen; 53 UINT8 BootpGateHops; 54 UINT32 BootpIdent; 55 UINT16 BootpSeconds; 56 UINT16 BootpFlags; 57 UINT8 BootpCiAddr[4]; 58 UINT8 BootpYiAddr[4]; 59 UINT8 BootpSiAddr[4]; 60 UINT8 BootpGiAddr[4]; 61 UINT8 BootpHwAddr[16]; 62 UINT8 BootpSrvName[64]; 63 UINT8 BootpBootFile[128]; 64 UINT32 DhcpMagik; 65 UINT8 DhcpOptions[56]; 66} EFI_PXE_BASE_CODE_DHCPV4_PACKET; 67 68typedef struct { 69 UINT32 MessageType:8; 70 UINT32 TransactionId:24; 71 UINT8 DhcpOptions[1024]; 72} EFI_PXE_BASE_CODE_DHCPV6_PACKET; 73 74typedef union { 75 UINT8 Raw[1472]; 76 EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4; 77 EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6; 78} EFI_PXE_BASE_CODE_PACKET; 79 80typedef struct { 81 UINT8 Type; 82 UINT8 Code; 83 UINT16 Checksum; 84 union { 85 UINT32 reserved; 86 UINT32 Mtu; 87 UINT32 Pointer; 88 struct { 89 UINT16 Identifier; 90 UINT16 Sequence; 91 } Echo; 92 } u; 93 UINT8 Data[494]; 94} EFI_PXE_BASE_CODE_ICMP_ERROR; 95 96typedef struct { 97 UINT8 ErrorCode; 98 CHAR8 ErrorString[127]; 99} EFI_PXE_BASE_CODE_TFTP_ERROR; 100 101// 102// IP Receive Filter definitions 103// 104#define EFI_PXE_BASE_CODE_MAX_IPCNT 8 105typedef struct { 106 UINT8 Filters; 107 UINT8 IpCnt; 108 UINT16 reserved; 109 EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT]; 110} EFI_PXE_BASE_CODE_IP_FILTER; 111 112#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001 113#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002 114#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004 115#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008 116 117// 118// ARP Cache definitions 119// 120 121typedef struct { 122 EFI_IP_ADDRESS IpAddr; 123 EFI_MAC_ADDRESS MacAddr; 124} EFI_PXE_BASE_CODE_ARP_ENTRY; 125 126typedef struct { 127 EFI_IP_ADDRESS IpAddr; 128 EFI_IP_ADDRESS SubnetMask; 129 EFI_IP_ADDRESS GwAddr; 130} EFI_PXE_BASE_CODE_ROUTE_ENTRY; 131 132// 133// UDP definitions 134// 135 136#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP 0x0001 137#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT 0x0002 138#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP 0x0004 139#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008 140#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER 0x0010 141#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT 0x0020 142 143// 144// Discover() definitions 145// 146 147#define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP 0 148#define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS 1 149#define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM 2 150#define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI 3 151#define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO 4 152#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD 5 153#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM 6 154#define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG 7 155#define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW 8 156#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9 9 157#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10 10 158#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11 11 159#define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12 12 160#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL 13 161#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT 14 162#define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO 15 163#define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT 16 164// 165// 17 through 32767 are reserved 166// 32768 through 65279 are for vendor use 167// 65280 through 65534 are reserved 168// 169#define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST 65535 170 171#define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK 0x7FFF 172#define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL 0x0000 173 174 175typedef struct { 176 UINT16 Type; 177 BOOLEAN AcceptAnyResponse; 178 UINT8 Reserved; 179 EFI_IP_ADDRESS IpAddr; 180} EFI_PXE_BASE_CODE_SRVLIST; 181 182typedef struct { 183 BOOLEAN UseMCast; 184 BOOLEAN UseBCast; 185 BOOLEAN UseUCast; 186 BOOLEAN MustUseList; 187 EFI_IP_ADDRESS ServerMCastIp; 188 UINT16 IpCnt; 189 EFI_PXE_BASE_CODE_SRVLIST SrvList[1]; 190} EFI_PXE_BASE_CODE_DISCOVER_INFO; 191 192// 193// Mtftp() definitions 194// 195 196typedef enum { 197 EFI_PXE_BASE_CODE_TFTP_FIRST, 198 EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE, 199 EFI_PXE_BASE_CODE_TFTP_READ_FILE, 200 EFI_PXE_BASE_CODE_TFTP_WRITE_FILE, 201 EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY, 202 EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE, 203 EFI_PXE_BASE_CODE_MTFTP_READ_FILE, 204 EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY, 205 EFI_PXE_BASE_CODE_MTFTP_LAST 206} EFI_PXE_BASE_CODE_TFTP_OPCODE; 207 208typedef struct { 209 EFI_IP_ADDRESS MCastIp; 210 EFI_PXE_BASE_CODE_UDP_PORT CPort; 211 EFI_PXE_BASE_CODE_UDP_PORT SPort; 212 UINT16 ListenTimeout; 213 UINT16 TransmitTimeout; 214} EFI_PXE_BASE_CODE_MTFTP_INFO; 215 216// 217// PXE Base Code Mode structure 218// 219 220#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8 221#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8 222 223typedef struct { 224 BOOLEAN Started; 225 BOOLEAN Ipv6Available; 226 BOOLEAN Ipv6Supported; 227 BOOLEAN UsingIpv6; 228 BOOLEAN BisSupported; 229 BOOLEAN BisDetected; 230 BOOLEAN AutoArp; 231 BOOLEAN SendGUID; 232 BOOLEAN DhcpDiscoverValid; 233 BOOLEAN DhcpAckReceived; 234 BOOLEAN ProxyOfferReceived; 235 BOOLEAN PxeDiscoverValid; 236 BOOLEAN PxeReplyReceived; 237 BOOLEAN PxeBisReplyReceived; 238 BOOLEAN IcmpErrorReceived; 239 BOOLEAN TftpErrorReceived; 240 BOOLEAN MakeCallbacks; 241 UINT8 TTL; 242 UINT8 ToS; 243 EFI_IP_ADDRESS StationIp; 244 EFI_IP_ADDRESS SubnetMask; 245 EFI_PXE_BASE_CODE_PACKET DhcpDiscover; 246 EFI_PXE_BASE_CODE_PACKET DhcpAck; 247 EFI_PXE_BASE_CODE_PACKET ProxyOffer; 248 EFI_PXE_BASE_CODE_PACKET PxeDiscover; 249 EFI_PXE_BASE_CODE_PACKET PxeReply; 250 EFI_PXE_BASE_CODE_PACKET PxeBisReply; 251 EFI_PXE_BASE_CODE_IP_FILTER IpFilter; 252 UINT32 ArpCacheEntries; 253 EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES]; 254 UINT32 RouteTableEntries; 255 EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES]; 256 EFI_PXE_BASE_CODE_ICMP_ERROR IcmpError; 257 EFI_PXE_BASE_CODE_TFTP_ERROR TftpError; 258} EFI_PXE_BASE_CODE_MODE; 259 260// 261// PXE Base Code Interface Function definitions 262// 263 264typedef 265EFI_STATUS 266(EFIAPI *EFI_PXE_BASE_CODE_START) ( 267 IN struct _EFI_PXE_BASE_CODE *This, 268 IN BOOLEAN UseIpv6 269 ); 270 271typedef 272EFI_STATUS 273(EFIAPI *EFI_PXE_BASE_CODE_STOP) ( 274 IN struct _EFI_PXE_BASE_CODE *This 275 ); 276 277typedef 278EFI_STATUS 279(EFIAPI *EFI_PXE_BASE_CODE_DHCP) ( 280 IN struct _EFI_PXE_BASE_CODE *This, 281 IN BOOLEAN SortOffers 282 ); 283 284typedef 285EFI_STATUS 286(EFIAPI *EFI_PXE_BASE_CODE_DISCOVER) ( 287 IN struct _EFI_PXE_BASE_CODE *This, 288 IN UINT16 Type, 289 IN UINT16 *Layer, 290 IN BOOLEAN UseBis, 291 IN OUT EFI_PXE_BASE_CODE_DISCOVER_INFO *Info OPTIONAL 292 ); 293 294typedef 295EFI_STATUS 296(EFIAPI *EFI_PXE_BASE_CODE_MTFTP) ( 297 IN struct _EFI_PXE_BASE_CODE *This, 298 IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation, 299 IN OUT VOID *BufferPtr OPTIONAL, 300 IN BOOLEAN Overwrite, 301 IN OUT UINT64 *BufferSize, 302 IN UINTN *BlockSize OPTIONAL, 303 IN EFI_IP_ADDRESS *ServerIp, 304 IN UINT8 *Filename, 305 IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL, 306 IN BOOLEAN DontUseBuffer 307 ); 308 309typedef 310EFI_STATUS 311(EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE) ( 312 IN struct _EFI_PXE_BASE_CODE *This, 313 IN UINT16 OpFlags, 314 IN EFI_IP_ADDRESS *DestIp, 315 IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort, 316 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL 317 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL 318 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL 319 IN UINTN *HeaderSize, OPTIONAL 320 IN VOID *HeaderPtr, OPTIONAL 321 IN UINTN *BufferSize, 322 IN VOID *BufferPtr 323 ); 324 325typedef 326EFI_STATUS 327(EFIAPI *EFI_PXE_BASE_CODE_UDP_READ) ( 328 IN struct _EFI_PXE_BASE_CODE *This, 329 IN UINT16 OpFlags, 330 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL 331 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL 332 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL 333 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL 334 IN UINTN *HeaderSize, OPTIONAL 335 IN VOID *HeaderPtr, OPTIONAL 336 IN OUT UINTN *BufferSize, 337 IN VOID *BufferPtr 338 ); 339 340typedef 341EFI_STATUS 342(EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER) ( 343 IN struct _EFI_PXE_BASE_CODE *This, 344 IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter 345 ); 346 347typedef 348EFI_STATUS 349(EFIAPI *EFI_PXE_BASE_CODE_ARP) ( 350 IN struct _EFI_PXE_BASE_CODE *This, 351 IN EFI_IP_ADDRESS *IpAddr, 352 IN EFI_MAC_ADDRESS *MacAddr OPTIONAL 353 ); 354 355typedef 356EFI_STATUS 357(EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS) ( 358 IN struct _EFI_PXE_BASE_CODE *This, 359 IN BOOLEAN *NewAutoArp, OPTIONAL 360 IN BOOLEAN *NewSendGUID, OPTIONAL 361 IN UINT8 *NewTTL, OPTIONAL 362 IN UINT8 *NewToS, OPTIONAL 363 IN BOOLEAN *NewMakeCallback OPTIONAL 364 ); 365 366typedef 367EFI_STATUS 368(EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP) ( 369 IN struct _EFI_PXE_BASE_CODE *This, 370 IN EFI_IP_ADDRESS *NewStationIp, OPTIONAL 371 IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL 372 ); 373 374typedef 375EFI_STATUS 376(EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS) ( 377 IN struct _EFI_PXE_BASE_CODE *This, 378 BOOLEAN *NewDhcpDiscoverValid, OPTIONAL 379 BOOLEAN *NewDhcpAckReceived, OPTIONAL 380 BOOLEAN *NewProxyOfferReceived, OPTIONAL 381 BOOLEAN *NewPxeDiscoverValid, OPTIONAL 382 BOOLEAN *NewPxeReplyReceived, OPTIONAL 383 BOOLEAN *NewPxeBisReplyReceived,OPTIONAL 384 IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover, OPTIONAL 385 IN EFI_PXE_BASE_CODE_PACKET *NewDhcpAck, OPTIONAL 386 IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer, OPTIONAL 387 IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover, OPTIONAL 388 IN EFI_PXE_BASE_CODE_PACKET *NewPxeReply, OPTIONAL 389 IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL 390 ); 391 392// 393// PXE Base Code Protocol structure 394// 395 396#define EFI_PXE_BASE_CODE_INTERFACE_REVISION 0x00010000 397 398typedef struct _EFI_PXE_BASE_CODE { 399 UINT64 Revision; 400 EFI_PXE_BASE_CODE_START Start; 401 EFI_PXE_BASE_CODE_STOP Stop; 402 EFI_PXE_BASE_CODE_DHCP Dhcp; 403 EFI_PXE_BASE_CODE_DISCOVER Discover; 404 EFI_PXE_BASE_CODE_MTFTP Mtftp; 405 EFI_PXE_BASE_CODE_UDP_WRITE UdpWrite; 406 EFI_PXE_BASE_CODE_UDP_READ UdpRead; 407 EFI_PXE_BASE_CODE_SET_IP_FILTER SetIpFilter; 408 EFI_PXE_BASE_CODE_ARP Arp; 409 EFI_PXE_BASE_CODE_SET_PARAMETERS SetParameters; 410 EFI_PXE_BASE_CODE_SET_STATION_IP SetStationIp; 411 EFI_PXE_BASE_CODE_SET_PACKETS SetPackets; 412 EFI_PXE_BASE_CODE_MODE *Mode; 413} EFI_PXE_BASE_CODE; 414 415// 416// Call Back Definitions 417// 418 419#define EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL \ 420 { 0x245dca21, 0xfb7b, 0x11d3, {0x8f, 0x01, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 421 422// 423// Revision Number 424// 425 426#define EFI_PXE_BASE_CODE_CALLBACK_INTERFACE_REVISION 0x00010000 427 428INTERFACE_DECL(_EFI_PXE_BASE_CODE_CALLBACK); 429 430typedef enum { 431 EFI_PXE_BASE_CODE_FUNCTION_FIRST, 432 EFI_PXE_BASE_CODE_FUNCTION_DHCP, 433 EFI_PXE_BASE_CODE_FUNCTION_DISCOVER, 434 EFI_PXE_BASE_CODE_FUNCTION_MTFTP, 435 EFI_PXE_BASE_CODE_FUNCTION_UDP_WRITE, 436 EFI_PXE_BASE_CODE_FUNCTION_UDP_READ, 437 EFI_PXE_BASE_CODE_FUNCTION_ARP, 438 EFI_PXE_BASE_CODE_FUNCTION_IGMP, 439 EFI_PXE_BASE_CODE_PXE_FUNCTION_LAST 440} EFI_PXE_BASE_CODE_FUNCTION; 441 442typedef enum { 443 EFI_PXE_BASE_CODE_CALLBACK_STATUS_FIRST, 444 EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE, 445 EFI_PXE_BASE_CODE_CALLBACK_STATUS_ABORT, 446 EFI_PXE_BASE_CODE_CALLBACK_STATUS_LAST 447} EFI_PXE_BASE_CODE_CALLBACK_STATUS; 448 449typedef 450EFI_PXE_BASE_CODE_CALLBACK_STATUS 451(EFIAPI *EFI_PXE_CALLBACK) ( 452 IN struct _EFI_PXE_BASE_CODE_CALLBACK *This, 453 IN EFI_PXE_BASE_CODE_FUNCTION Function, 454 IN BOOLEAN Received, 455 IN UINT32 PacketLen, 456 IN EFI_PXE_BASE_CODE_PACKET *Packet OPTIONAL 457 ); 458 459typedef struct _EFI_PXE_BASE_CODE_CALLBACK { 460 UINT64 Revision; 461 EFI_PXE_CALLBACK Callback; 462} EFI_PXE_BASE_CODE_CALLBACK; 463 464#endif /* _EFIPXEBC_H */ 465