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