Home | History | Annotate | Download | only in efi
      1 #ifndef _EFIPXEBC_H
      2 #define _EFIPXEBC_H
      3 
      4 /*++
      5 
      6 Copyright (c) 1998  Intel Corporation
      7 
      8 Module Name:
      9 
     10     efipxebc.h
     11 
     12 Abstract:
     13 
     14     EFI PXE Base Code Protocol
     15 
     16 
     17 
     18 Revision 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 
     29 INTERFACE_DECL(_EFI_PXE_BASE_CODE);
     30 
     31 #define DEFAULT_TTL 4
     32 #define DEFAULT_ToS 0
     33 //
     34 // Address definitions
     35 //
     36 
     37 typedef union {
     38     UINT32      Addr[4];
     39     EFI_IPv4_ADDRESS    v4;
     40     EFI_IPv6_ADDRESS    v6;
     41 } EFI_IP_ADDRESS;
     42 
     43 typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT;
     44 
     45 //
     46 // Packet definitions
     47 //
     48 
     49 typedef 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 
     68 typedef struct {
     69     UINT32                          MessageType:8;
     70     UINT32                          TransactionId:24;
     71     UINT8                           DhcpOptions[1024];
     72 } EFI_PXE_BASE_CODE_DHCPV6_PACKET;
     73 
     74 typedef 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 
     80 typedef 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 
     96 typedef 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
    105 typedef 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 
    121 typedef struct {
    122     EFI_IP_ADDRESS       IpAddr;
    123     EFI_MAC_ADDRESS      MacAddr;
    124 } EFI_PXE_BASE_CODE_ARP_ENTRY;
    125 
    126 typedef 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 
    175 typedef struct {
    176     UINT16                      Type;
    177     BOOLEAN                     AcceptAnyResponse;
    178     UINT8                       Reserved;
    179     EFI_IP_ADDRESS              IpAddr;
    180 } EFI_PXE_BASE_CODE_SRVLIST;
    181 
    182 typedef 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 
    196 typedef 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 
    208 typedef 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 
    223 typedef 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 
    264 typedef
    265 EFI_STATUS
    266 (EFIAPI *EFI_PXE_BASE_CODE_START) (
    267     IN struct _EFI_PXE_BASE_CODE    *This,
    268     IN BOOLEAN                      UseIpv6
    269     );
    270 
    271 typedef
    272 EFI_STATUS
    273 (EFIAPI *EFI_PXE_BASE_CODE_STOP) (
    274     IN struct _EFI_PXE_BASE_CODE    *This
    275     );
    276 
    277 typedef
    278 EFI_STATUS
    279 (EFIAPI *EFI_PXE_BASE_CODE_DHCP) (
    280     IN struct _EFI_PXE_BASE_CODE    *This,
    281     IN BOOLEAN                      SortOffers
    282     );
    283 
    284 typedef
    285 EFI_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 
    294 typedef
    295 EFI_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 
    309 typedef
    310 EFI_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 
    325 typedef
    326 EFI_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 
    340 typedef
    341 EFI_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 
    347 typedef
    348 EFI_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 
    355 typedef
    356 EFI_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 
    366 typedef
    367 EFI_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 
    374 typedef
    375 EFI_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 
    398 typedef 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 
    428 INTERFACE_DECL(_EFI_PXE_BASE_CODE_CALLBACK);
    429 
    430 typedef 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 
    442 typedef 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 
    449 typedef
    450 EFI_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 
    459 typedef 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