1221828Sgrehan/* $FreeBSD$ */ 2221828Sgrehan#ifndef _EFIPXEBC_H 3221828Sgrehan#define _EFIPXEBC_H 4221828Sgrehan 5221828Sgrehan/*++ 6221828Sgrehan 7221828SgrehanCopyright (c) 1999 - 2002 Intel Corporation. All rights reserved 8221828SgrehanThis software and associated documentation (if any) is furnished 9221828Sgrehanunder a license and may only be used or copied in accordance 10221828Sgrehanwith the terms of the license. Except as permitted by such 11221828Sgrehanlicense, no part of this software or documentation may be 12221828Sgrehanreproduced, stored in a retrieval system, or transmitted in any 13221828Sgrehanform or by any means without the express written consent of 14221828SgrehanIntel Corporation. 15221828Sgrehan 16221828SgrehanModule Name: 17221828Sgrehan 18221828Sgrehan efipxebc.h 19221828Sgrehan 20221828SgrehanAbstract: 21221828Sgrehan 22221828Sgrehan EFI PXE Base Code Protocol 23221828Sgrehan 24221828Sgrehan 25221828Sgrehan 26221828SgrehanRevision History 27221828Sgrehan 28221828Sgrehan--*/ 29221828Sgrehan 30221828Sgrehan// 31221828Sgrehan// PXE Base Code protocol 32221828Sgrehan// 33221828Sgrehan 34221828Sgrehan#define EFI_PXE_BASE_CODE_PROTOCOL \ 35256072Sneel { 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 36256072Sneel 37256072SneelINTERFACE_DECL(_EFI_PXE_BASE_CODE); 38221828Sgrehan 39221828Sgrehan#define DEFAULT_TTL 8 40256072Sneel#define DEFAULT_ToS 0 41221828Sgrehan// 42256072Sneel// Address definitions 43256072Sneel// 44241362Sneel 45256072Sneeltypedef union { 46221828Sgrehan UINT32 Addr[4]; 47221828Sgrehan EFI_IPv4_ADDRESS v4; 48221828Sgrehan EFI_IPv6_ADDRESS v6; 49221828Sgrehan} EFI_IP_ADDRESS; 50221828Sgrehan 51221828Sgrehantypedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT; 52221828Sgrehan 53221828Sgrehan// 54221828Sgrehan// Packet definitions 55221828Sgrehan// 56221828Sgrehan 57221828Sgrehantypedef struct { 58256072Sneel UINT8 BootpOpcode; 59256072Sneel UINT8 BootpHwType; 60256072Sneel UINT8 BootpHwAddrLen; 61221828Sgrehan UINT8 BootpGateHops; 62256072Sneel UINT32 BootpIdent; 63256072Sneel UINT16 BootpSeconds; 64256072Sneel UINT16 BootpFlags; 65221828Sgrehan UINT8 BootpCiAddr[4]; 66256072Sneel UINT8 BootpYiAddr[4]; 67256072Sneel UINT8 BootpSiAddr[4]; 68256072Sneel UINT8 BootpGiAddr[4]; 69221828Sgrehan UINT8 BootpHwAddr[16]; 70256072Sneel UINT8 BootpSrvName[64]; 71256072Sneel UINT8 BootpBootFile[128]; 72241362Sneel UINT32 DhcpMagik; 73256072Sneel UINT8 DhcpOptions[56]; 74256072Sneel} EFI_PXE_BASE_CODE_DHCPV4_PACKET; 75256072Sneel 76256072Sneel// TBD in EFI v1.1 77256072Sneel//typedef struct { 78241362Sneel// UINT8 reserved; 79256072Sneel//} EFI_PXE_BASE_CODE_DHCPV6_PACKET; 80256072Sneel 81256072Sneeltypedef union { 82256072Sneel UINT8 Raw[1472]; 83256072Sneel EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4; 84256072Sneel// EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6; 85256072Sneel} EFI_PXE_BASE_CODE_PACKET; 86256072Sneel 87256072Sneeltypedef struct { 88256072Sneel UINT8 Type; 89256072Sneel UINT8 Code; 90256072Sneel UINT16 Checksum; 91256072Sneel union { 92221828Sgrehan UINT32 reserved; 93221828Sgrehan UINT32 Mtu; 94256072Sneel UINT32 Pointer; 95256072Sneel struct { 96256072Sneel UINT16 Identifier; 97256072Sneel UINT16 Sequence; 98256072Sneel } Echo; 99256072Sneel } u; 100256072Sneel UINT8 Data[494]; 101256072Sneel} EFI_PXE_BASE_CODE_ICMP_ERROR; 102256072Sneel 103256072Sneeltypedef struct { 104256072Sneel UINT8 ErrorCode; 105256072Sneel CHAR8 ErrorString[127]; 106221828Sgrehan} EFI_PXE_BASE_CODE_TFTP_ERROR; 107256072Sneel 108239700Sgrehan// 109239700Sgrehan// IP Receive Filter definitions 110221828Sgrehan// 111256072Sneel#define EFI_PXE_BASE_CODE_MAX_IPCNT 8 112221828Sgrehantypedef struct { 113221828Sgrehan UINT8 Filters; 114256072Sneel UINT8 IpCnt; 115256072Sneel UINT16 reserved; 116256072Sneel EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT]; 117221828Sgrehan} EFI_PXE_BASE_CODE_IP_FILTER; 118221828Sgrehan 119221828Sgrehan#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001 120221828Sgrehan#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002 121241362Sneel#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004 122221828Sgrehan#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008 123 124// 125// ARP Cache definitions 126// 127 128typedef struct { 129 EFI_IP_ADDRESS IpAddr; 130 EFI_MAC_ADDRESS MacAddr; 131} EFI_PXE_BASE_CODE_ARP_ENTRY; 132 133typedef struct { 134 EFI_IP_ADDRESS IpAddr; 135 EFI_IP_ADDRESS SubnetMask; 136 EFI_IP_ADDRESS GwAddr; 137} EFI_PXE_BASE_CODE_ROUTE_ENTRY; 138 139// 140// UDP definitions 141// 142 143#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP 0x0001 144#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT 0x0002 145#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP 0x0004 146#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008 147#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER 0x0010 148#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT 0x0020 149 150// 151// Discover() definitions 152// 153 154#define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP 0 155#define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS 1 156#define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM 2 157#define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI 3 158#define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO 4 159#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD 5 160#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM 6 161#define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG 7 162#define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW 8 163#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9 9 164#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10 10 165#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11 11 166#define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12 12 167#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL 13 168#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT 14 169#define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO 15 170#define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT 16 171// 172// 17 through 32767 are reserved 173// 32768 through 65279 are for vendor use 174// 65280 through 65534 are reserved 175// 176#define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST 65535 177 178#define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK 0x7FFF 179#define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL 0x0000 180#define EFI_PXE_BASE_CODE_BOOT_LAYER_CREDENTIALS 0x8000 181 182 183typedef struct { 184 UINT16 Type; 185 BOOLEAN AcceptAnyResponse; 186 UINT8 Reserved; 187 EFI_IP_ADDRESS IpAddr; 188} EFI_PXE_BASE_CODE_SRVLIST; 189 190typedef struct { 191 BOOLEAN UseMCast; 192 BOOLEAN UseBCast; 193 BOOLEAN UseUCast; 194 BOOLEAN MustUseList; 195 EFI_IP_ADDRESS ServerMCastIp; 196 UINT16 IpCnt; 197 EFI_PXE_BASE_CODE_SRVLIST SrvList[1]; 198} EFI_PXE_BASE_CODE_DISCOVER_INFO; 199 200// 201// Mtftp() definitions 202// 203 204typedef enum { 205 EFI_PXE_BASE_CODE_TFTP_FIRST, 206 EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE, 207 EFI_PXE_BASE_CODE_TFTP_READ_FILE, 208 EFI_PXE_BASE_CODE_TFTP_WRITE_FILE, 209 EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY, 210 EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE, 211 EFI_PXE_BASE_CODE_MTFTP_READ_FILE, 212 EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY, 213 EFI_PXE_BASE_CODE_MTFTP_LAST 214} EFI_PXE_BASE_CODE_TFTP_OPCODE; 215 216typedef struct { 217 EFI_IP_ADDRESS MCastIp; 218 EFI_PXE_BASE_CODE_UDP_PORT CPort; 219 EFI_PXE_BASE_CODE_UDP_PORT SPort; 220 UINT16 ListenTimeout; 221 UINT16 TransmitTimeout; 222} EFI_PXE_BASE_CODE_MTFTP_INFO; 223 224// 225// PXE Base Code Mode structure 226// 227 228#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8 229#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8 230 231typedef struct { 232 BOOLEAN Started; 233 BOOLEAN Ipv6Available; 234 BOOLEAN Ipv6Supported; 235 BOOLEAN UsingIpv6; 236 BOOLEAN BisSupported; 237 BOOLEAN BisDetected; 238 BOOLEAN AutoArp; 239 BOOLEAN SendGUID; 240 BOOLEAN DhcpDiscoverValid; 241 BOOLEAN DhcpAckReceived; 242 BOOLEAN ProxyOfferReceived; 243 BOOLEAN PxeDiscoverValid; 244 BOOLEAN PxeReplyReceived; 245 BOOLEAN PxeBisReplyReceived; 246 BOOLEAN IcmpErrorReceived; 247 BOOLEAN TftpErrorReceived; 248 BOOLEAN MakeCallbacks; 249 UINT8 TTL; 250 UINT8 ToS; 251 EFI_IP_ADDRESS StationIp; 252 EFI_IP_ADDRESS SubnetMask; 253 EFI_PXE_BASE_CODE_PACKET DhcpDiscover; 254 EFI_PXE_BASE_CODE_PACKET DhcpAck; 255 EFI_PXE_BASE_CODE_PACKET ProxyOffer; 256 EFI_PXE_BASE_CODE_PACKET PxeDiscover; 257 EFI_PXE_BASE_CODE_PACKET PxeReply; 258 EFI_PXE_BASE_CODE_PACKET PxeBisReply; 259 EFI_PXE_BASE_CODE_IP_FILTER IpFilter; 260 UINT32 ArpCacheEntries; 261 EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES]; 262 UINT32 RouteTableEntries; 263 EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES]; 264 EFI_PXE_BASE_CODE_ICMP_ERROR IcmpError; 265 EFI_PXE_BASE_CODE_TFTP_ERROR TftpError; 266} EFI_PXE_BASE_CODE_MODE; 267 268// 269// PXE Base Code Interface Function definitions 270// 271 272typedef 273EFI_STATUS 274(EFIAPI *EFI_PXE_BASE_CODE_START) ( 275 IN struct _EFI_PXE_BASE_CODE *This, 276 IN BOOLEAN UseIpv6 277 ); 278 279typedef 280EFI_STATUS 281(EFIAPI *EFI_PXE_BASE_CODE_STOP) ( 282 IN struct _EFI_PXE_BASE_CODE *This 283 ); 284 285typedef 286EFI_STATUS 287(EFIAPI *EFI_PXE_BASE_CODE_DHCP) ( 288 IN struct _EFI_PXE_BASE_CODE *This, 289 IN BOOLEAN SortOffers 290 ); 291 292typedef 293EFI_STATUS 294(EFIAPI *EFI_PXE_BASE_CODE_DISCOVER) ( 295 IN struct _EFI_PXE_BASE_CODE *This, 296 IN UINT16 Type, 297 IN UINT16 *Layer, 298 IN BOOLEAN UseBis, 299 IN OUT EFI_PXE_BASE_CODE_DISCOVER_INFO *Info OPTIONAL 300 ); 301 302typedef 303EFI_STATUS 304(EFIAPI *EFI_PXE_BASE_CODE_MTFTP) ( 305 IN struct _EFI_PXE_BASE_CODE *This, 306 IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation, 307 IN OUT VOID *BufferPtr OPTIONAL, 308 IN BOOLEAN Overwrite, 309 IN OUT UINT64 *BufferSize, 310 IN UINTN *BlockSize OPTIONAL, 311 IN EFI_IP_ADDRESS *ServerIp, 312 IN UINT8 *Filename, 313 IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL, 314 IN BOOLEAN DontUseBuffer 315 ); 316 317typedef 318EFI_STATUS 319(EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE) ( 320 IN struct _EFI_PXE_BASE_CODE *This, 321 IN UINT16 OpFlags, 322 IN EFI_IP_ADDRESS *DestIp, 323 IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort, 324 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL 325 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL 326 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL 327 IN UINTN *HeaderSize, OPTIONAL 328 IN VOID *HeaderPtr, OPTIONAL 329 IN UINTN *BufferSize, 330 IN VOID *BufferPtr 331 ); 332 333typedef 334EFI_STATUS 335(EFIAPI *EFI_PXE_BASE_CODE_UDP_READ) ( 336 IN struct _EFI_PXE_BASE_CODE *This, 337 IN UINT16 OpFlags, 338 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL 339 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL 340 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL 341 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL 342 IN UINTN *HeaderSize, OPTIONAL 343 IN VOID *HeaderPtr, OPTIONAL 344 IN OUT UINTN *BufferSize, 345 IN VOID *BufferPtr 346 ); 347 348typedef 349EFI_STATUS 350(EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER) ( 351 IN struct _EFI_PXE_BASE_CODE *This, 352 IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter 353 ); 354 355typedef 356EFI_STATUS 357(EFIAPI *EFI_PXE_BASE_CODE_ARP) ( 358 IN struct _EFI_PXE_BASE_CODE *This, 359 IN EFI_IP_ADDRESS *IpAddr, 360 IN EFI_MAC_ADDRESS *MacAddr OPTIONAL 361 ); 362 363typedef 364EFI_STATUS 365(EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS) ( 366 IN struct _EFI_PXE_BASE_CODE *This, 367 IN BOOLEAN *NewAutoArp, OPTIONAL 368 IN BOOLEAN *NewSendGUID, OPTIONAL 369 IN UINT8 *NewTTL, OPTIONAL 370 IN UINT8 *NewToS, OPTIONAL 371 IN BOOLEAN *NewMakeCallback OPTIONAL 372 ); 373 374typedef 375EFI_STATUS 376(EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP) ( 377 IN struct _EFI_PXE_BASE_CODE *This, 378 IN EFI_IP_ADDRESS *NewStationIp, OPTIONAL 379 IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL 380 ); 381 382typedef 383EFI_STATUS 384(EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS) ( 385 IN struct _EFI_PXE_BASE_CODE *This, 386 BOOLEAN *NewDhcpDiscoverValid, OPTIONAL 387 BOOLEAN *NewDhcpAckReceived, OPTIONAL 388 BOOLEAN *NewProxyOfferReceived, OPTIONAL 389 BOOLEAN *NewPxeDiscoverValid, OPTIONAL 390 BOOLEAN *NewPxeReplyReceived, OPTIONAL 391 BOOLEAN *NewPxeBisReplyReceived,OPTIONAL 392 IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover, OPTIONAL 393 IN EFI_PXE_BASE_CODE_PACKET *NewDhcpAck, OPTIONAL 394 IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer, OPTIONAL 395 IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover, OPTIONAL 396 IN EFI_PXE_BASE_CODE_PACKET *NewPxeReply, OPTIONAL 397 IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL 398 ); 399 400// 401// PXE Base Code Protocol structure 402// 403 404#define EFI_PXE_BASE_CODE_INTERFACE_REVISION 0x00010000 405 406typedef struct _EFI_PXE_BASE_CODE { 407 UINT64 Revision; 408 EFI_PXE_BASE_CODE_START Start; 409 EFI_PXE_BASE_CODE_STOP Stop; 410 EFI_PXE_BASE_CODE_DHCP Dhcp; 411 EFI_PXE_BASE_CODE_DISCOVER Discover; 412 EFI_PXE_BASE_CODE_MTFTP Mtftp; 413 EFI_PXE_BASE_CODE_UDP_WRITE UdpWrite; 414 EFI_PXE_BASE_CODE_UDP_READ UdpRead; 415 EFI_PXE_BASE_CODE_SET_IP_FILTER SetIpFilter; 416 EFI_PXE_BASE_CODE_ARP Arp; 417 EFI_PXE_BASE_CODE_SET_PARAMETERS SetParameters; 418 EFI_PXE_BASE_CODE_SET_STATION_IP SetStationIp; 419 EFI_PXE_BASE_CODE_SET_PACKETS SetPackets; 420 EFI_PXE_BASE_CODE_MODE *Mode; 421} EFI_PXE_BASE_CODE; 422 423// 424// Call Back Definitions 425// 426 427#define EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL \ 428 { 0x245dca21, 0xfb7b, 0x11d3, {0x8f, 0x01, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 429 430// 431// Revision Number 432// 433 434#define EFI_PXE_BASE_CODE_CALLBACK_INTERFACE_REVISION 0x00010000 435 436INTERFACE_DECL(_EFI_PXE_BASE_CODE_CALLBACK); 437 438typedef enum { 439 EFI_PXE_BASE_CODE_FUNCTION_FIRST, 440 EFI_PXE_BASE_CODE_FUNCTION_DHCP, 441 EFI_PXE_BASE_CODE_FUNCTION_DISCOVER, 442 EFI_PXE_BASE_CODE_FUNCTION_MTFTP, 443 EFI_PXE_BASE_CODE_FUNCTION_UDP_WRITE, 444 EFI_PXE_BASE_CODE_FUNCTION_UDP_READ, 445 EFI_PXE_BASE_CODE_FUNCTION_ARP, 446 EFI_PXE_BASE_CODE_FUNCTION_IGMP, 447 EFI_PXE_BASE_CODE_PXE_FUNCTION_LAST 448} EFI_PXE_BASE_CODE_FUNCTION; 449 450typedef enum { 451 EFI_PXE_BASE_CODE_CALLBACK_STATUS_FIRST, 452 EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE, 453 EFI_PXE_BASE_CODE_CALLBACK_STATUS_ABORT, 454 EFI_PXE_BASE_CODE_CALLBACK_STATUS_LAST 455} EFI_PXE_BASE_CODE_CALLBACK_STATUS; 456 457typedef 458EFI_PXE_BASE_CODE_CALLBACK_STATUS 459(EFIAPI *EFI_PXE_CALLBACK) ( 460 IN struct _EFI_PXE_BASE_CODE_CALLBACK *This, 461 IN EFI_PXE_BASE_CODE_FUNCTION Function, 462 IN BOOLEAN Received, 463 IN UINT32 PacketLen, 464 IN EFI_PXE_BASE_CODE_PACKET *Packet OPTIONAL 465 ); 466 467typedef struct _EFI_PXE_BASE_CODE_CALLBACK { 468 UINT64 Revision; 469 EFI_PXE_CALLBACK Callback; 470} EFI_PXE_BASE_CODE_CALLBACK; 471 472#endif /* _EFIPXEBC_H */ 473