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