Home | History | Annotate | Download | only in syslinux
      1 /* ----------------------------------------------------------------------- *
      2  *
      3  *   Copyright 2007-2008 H. Peter Anvin - All Rights Reserved
      4  *
      5  *   Permission is hereby granted, free of charge, to any person
      6  *   obtaining a copy of this software and associated documentation
      7  *   files (the "Software"), to deal in the Software without
      8  *   restriction, including without limitation the rights to use,
      9  *   copy, modify, merge, publish, distribute, sublicense, and/or
     10  *   sell copies of the Software, and to permit persons to whom
     11  *   the Software is furnished to do so, subject to the following
     12  *   conditions:
     13  *
     14  *   The above copyright notice and this permission notice shall
     15  *   be included in all copies or substantial portions of the Software.
     16  *
     17  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     18  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
     19  *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     20  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
     21  *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
     22  *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     23  *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     24  *   OTHER DEALINGS IN THE SOFTWARE.
     25  *
     26  * ----------------------------------------------------------------------- */
     27 
     28 /*
     29  * syslinux/pxe_api.h
     30  *
     31  * PXE type and constant definitions for SYSLINUX
     32  */
     33 
     34 #ifndef _SYSLINUX_PXE_API_H
     35 #define _SYSLINUX_PXE_API_H
     36 
     37 #include <stdint.h>
     38 #include <netinet/in.h>
     39 #include <klibc/compiler.h>
     40 #include <com32.h>
     41 
     42 /* PXE spec structures and definitions.  These mostly follow the PXE
     43    spec, except when the PXE spec is unnecessarily stupid.  Of course,
     44    that is most of the time. */
     45 
     46 /* Basic types; use Unix-like _t convention instead of SCREAMING; also
     47    re-use types we already have, like in_addr_t. */
     48 
     49 typedef uint16_t pxenv_status_t;
     50 
     51 #define MAC_ADDR_LEN	16
     52 typedef uint8_t mac_addr_t[MAC_ADDR_LEN];
     53 
     54 /* "Protected mode segment descriptor" according to PXE... */
     55 typedef struct {
     56     uint16_t sel;
     57     uint32_t base;
     58     uint16_t size;
     59 } __packed pxe_segdesc_t;
     60 
     61 typedef far_ptr_t segoff16_t;
     62 
     63 typedef struct {
     64     uint8_t opcode;
     65 #define BOOTP_REQ 1
     66 #define BOOTP_REP 2
     67     uint8_t Hardware;
     68     uint8_t Hardlen;
     69     uint8_t Gatehops;
     70     uint32_t ident;
     71     uint16_t seconds;
     72     uint16_t Flags;
     73 #define BOOTP_BCAST 0x8000
     74     in_addr_t cip;		/* Client IP address */
     75     in_addr_t yip;		/* You IP address */
     76     in_addr_t sip;		/* next server IP address */
     77     in_addr_t gip;		/*relay agent IP address */
     78     mac_addr_t CAddr;
     79     uint8_t Sname[64];
     80     uint8_t bootfile[128];
     81     union {
     82 #define BOOTP_DHCPVEND 1024
     83 	uint8_t d[BOOTP_DHCPVEND];
     84 	struct {
     85 	    uint8_t magic[4];
     86 #define VM_RFC1048 0x63825363L
     87 	    uint32_t flags;
     88 	    uint8_t pad[56];
     89 	} v;
     90     } vendor;
     91 } __packed pxe_bootp_t;
     92 
     93 /* Function calling structures and constants */
     94 
     95 typedef struct s_PXENV_GET_CACHED_INFO {
     96     pxenv_status_t Status;
     97     uint16_t PacketType;
     98 #define PXENV_PACKET_TYPE_DHCP_DISCOVER 1
     99 #define PXENV_PACKET_TYPE_DHCP_ACK 2
    100 #define PXENV_PACKET_TYPE_CACHED_REPLY 3
    101     uint16_t BufferSize;
    102     segoff16_t Buffer;
    103     uint16_t BufferLimit;
    104 } __packed t_PXENV_GET_CACHED_INFO;
    105 
    106 typedef struct s_PXENV_START_UNDI {
    107     pxenv_status_t Status;
    108     uint16_t AX;
    109     uint16_t BX;
    110     uint16_t DX;
    111     uint16_t DI;
    112     uint16_t ES;
    113 } __packed t_PXENV_START_UNDI;
    114 
    115 typedef struct s_PXENV_STOP_UNDI {
    116     pxenv_status_t Status;
    117 } __packed t_PXENV_STOP_UNDI;
    118 
    119 typedef struct s_PXENV_START_BASE {
    120     pxenv_status_t Status;
    121 } __packed t_PXENV_START_BASE;
    122 
    123 typedef struct s_PXENV_STOP_BASE {
    124     pxenv_status_t Status;
    125 } __packed t_PXENV_STOP_BASE;
    126 
    127 typedef struct s_PXENV_TFTP_OPEN {
    128     pxenv_status_t Status;
    129     in_addr_t ServerIPAddress;
    130     in_addr_t GatewayIPAddress;
    131     uint8_t FileName[128];
    132     in_port_t TFTPPort;
    133     uint16_t PacketSize;
    134 } __packed t_PXENV_TFTP_OPEN;
    135 
    136 typedef struct s_PXENV_TFTP_CLOSE {
    137     pxenv_status_t Status;
    138 } __packed t_PXENV_TFTP_CLOSE;
    139 
    140 typedef struct s_PXENV_TFTP_READ {
    141     pxenv_status_t Status;
    142     uint16_t PacketNumber;
    143     uint16_t BufferSize;
    144     segoff16_t Buffer;
    145 } __packed t_PXENV_TFTP_READ;
    146 
    147 typedef struct s_PXENV_TFTP_READ_FILE {
    148     pxenv_status_t Status;
    149     uint8_t FileName[128];
    150     uint32_t BufferSize;
    151     void *Buffer;
    152     in_addr_t ServerIPAddress;
    153     in_addr_t GatewayIPAddress;
    154     in_addr_t McastIPAddress;
    155     in_port_t TFTPClntPort;
    156     in_port_t TFTPSrvPort;
    157     uint16_t TFTPOpenTimeOut;
    158     uint16_t TFTPReopenDelay;
    159 } __packed t_PXENV_TFTP_READ_FILE;
    160 
    161 typedef struct s_PXENV_TFTP_GET_FSIZE {
    162     pxenv_status_t Status;
    163     in_addr_t ServerIPAddress;
    164     in_addr_t GatewayIPAddress;
    165     uint8_t FileName[128];
    166     uint32_t FileSize;
    167 } __packed t_PXENV_TFTP_GET_FSIZE;
    168 
    169 typedef struct s_PXENV_UDP_OPEN {
    170     pxenv_status_t status;
    171     in_addr_t src_ip;
    172 } __packed t_PXENV_UDP_OPEN;
    173 
    174 typedef struct s_PXENV_UDP_CLOSE {
    175     pxenv_status_t status;
    176 } __packed t_PXENV_UDP_CLOSE;
    177 
    178 typedef struct s_PXENV_UDP_WRITE {
    179     pxenv_status_t status;
    180     in_addr_t ip;
    181     in_addr_t gw;
    182     in_port_t src_port;
    183     in_port_t dst_port;
    184     uint16_t buffer_size;
    185     segoff16_t buffer;
    186 } __packed t_PXENV_UDP_WRITE;
    187 
    188 typedef struct s_PXENV_UDP_READ {
    189     pxenv_status_t status;
    190     in_addr_t src_ip;
    191     in_addr_t dest_ip;
    192     in_port_t s_port;
    193     in_port_t d_port;
    194     uint16_t buffer_size;
    195     segoff16_t buffer;
    196 } __packed t_PXENV_UDP_READ;
    197 
    198 typedef struct s_PXENV_UNDI_STARTUP {
    199     pxenv_status_t Status;
    200 } __packed t_PXENV_UNDI_STARTUP;
    201 
    202 typedef struct s_PXENV_UNDI_CLEANUP {
    203     pxenv_status_t Status;
    204 } __packed t_PXENV_UNDI_CLEANUP;
    205 
    206 typedef struct s_PXENV_UNDI_INITIALIZE {
    207     pxenv_status_t Status;
    208     void *ProtocolIni;
    209     uint8_t reserved[8];
    210 } __packed t_PXENV_UNDI_INITIALIZE;
    211 
    212 #define MAXNUM_MCADDR 8
    213 typedef struct s_PXENV_UNDI_MCAST_ADDRESS {
    214     uint16_t MCastAddrCount;
    215     mac_addr_t McastAddr[MAXNUM_MCADDR];
    216 } __packed t_PXENV_UNDI_MCAST_ADDRESS;
    217 
    218 typedef struct s_PXENV_UNDI_RESET {
    219     pxenv_status_t Status;
    220     t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
    221 } __packed t_PXENV_UNDI_RESET;
    222 
    223 typedef struct s_PXENV_UNDI_SHUTDOWN {
    224     pxenv_status_t Status;
    225 } __packed t_PXENV_UNDI_SHUTDOWN;
    226 
    227 typedef struct s_PXENV_UNDI_OPEN {
    228     pxenv_status_t Status;
    229     uint16_t OpenFlag;
    230     uint16_t PktFilter;
    231 #define FLTR_DIRECTED 0x0001
    232 #define FLTR_BRDCST 0x0002
    233 #define FLTR_PRMSCS 0x0004
    234 #define FLTR_SRC_RTG 0x0008
    235      t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
    236 } __packed t_PXENV_UNDI_OPEN;
    237 
    238 typedef struct s_PXENV_UNDI_CLOSE {
    239     pxenv_status_t Status;
    240 } __packed t_PXENV_UNDI_CLOSE;
    241 
    242 typedef struct s_PXENV_UNDI_TRANSMIT {
    243     pxenv_status_t Status;
    244     uint8_t Protocol;
    245 #define P_UNKNOWN 0
    246 #define P_IP 1
    247 #define P_ARP 2
    248 #define P_RARP 3
    249     uint8_t XmitFlag;
    250 #define XMT_DESTADDR 0x0000
    251 #define XMT_BROADCAST 0x0001
    252     segoff16_t DestAddr;
    253     segoff16_t TBD;
    254     uint32_t Reserved[2];
    255 } __packed t_PXENV_UNDI_TRANSMIT;
    256 #define MAX_DATA_BLKS 8
    257 typedef struct s_PXENV_UNDI_TBD {
    258     uint16_t ImmedLength;
    259     segoff16_t Xmit;
    260     uint16_t DataBlkCount;
    261     struct DataBlk {
    262 	uint8_t TDPtrType;
    263 	uint8_t TDRsvdByte;
    264 	uint16_t TDDataLen;
    265 	segoff16_t TDDataPtr;
    266     } DataBlock[MAX_DATA_BLKS];
    267 } __packed t_PXENV_UNDI_TBD;
    268 
    269 typedef struct s_PXENV_UNDI_SET_MCAST_ADDRESS {
    270     pxenv_status_t Status;
    271      t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
    272 } __packed t_PXENV_UNDI_SET_MCAST_ADDR;
    273 
    274 typedef struct s_PXENV_UNDI_SET_STATION_ADDRESS {
    275     pxenv_status_t Status;
    276     mac_addr_t StationAddress;
    277 } __packed t_PXENV_UNDI_SET_STATION_ADDR;
    278 
    279 typedef struct s_PXENV_UNDI_SET_PACKET_FILTER {
    280     pxenv_status_t Status;
    281     uint8_t filter;
    282 } __packed t_PXENV_UNDI_SET_PACKET_FILTER;
    283 
    284 typedef struct s_PXENV_UNDI_GET_INFORMATION {
    285     pxenv_status_t Status;
    286     uint16_t BaseIo;
    287     uint16_t IntNumber;
    288     uint16_t MaxTranUnit;
    289     uint16_t HwType;
    290 #define ETHER_TYPE 1
    291 #define EXP_ETHER_TYPE 2
    292 #define IEEE_TYPE 6
    293 #define ARCNET_TYPE 7
    294     uint16_t HwAddrLen;
    295     mac_addr_t CurrentNodeAddress;
    296     mac_addr_t PermNodeAddress;
    297     uint16_t ROMAddress;
    298     uint16_t RxBufCt;
    299     uint16_t TxBufCt;
    300 } __packed t_PXENV_UNDI_GET_INFORMATION;
    301 
    302 typedef struct s_PXENV_UNDI_GET_STATISTICS {
    303     pxenv_status_t Status;
    304     uint32_t XmtGoodFrames;
    305     uint32_t RcvGoodFrames;
    306     uint32_t RcvCRCErrors;
    307     uint32_t RcvResourceErrors;
    308 } __packed t_PXENV_UNDI_GET_STATISTICS;
    309 
    310 typedef struct s_PXENV_UNDI_CLEAR_STATISTICS {
    311     pxenv_status_t Status;
    312 } __packed t_PXENV_UNDI_CLEAR_STATISTICS;
    313 
    314 typedef struct s_PXENV_UNDI_INITIATE_DIAGS {
    315     pxenv_status_t Status;
    316 } __packed t_PXENV_UNDI_INITIATE_DIAGS;
    317 
    318 typedef struct s_PXENV_UNDI_FORCE_INTERRUPT {
    319     pxenv_status_t Status;
    320 } __packed t_PXENV_UNDI_FORCE_INTERRUPT;
    321 
    322 typedef struct s_PXENV_UNDI_GET_MCAST_ADDRESS {
    323     pxenv_status_t Status;
    324     in_addr_t InetAddr;
    325     mac_addr_t MediaAddr;
    326 } __packed t_PXENV_UNDI_GET_MCAST_ADDR;
    327 
    328 typedef struct s_PXENV_UNDI_GET_NIC_TYPE {
    329     pxenv_status_t Status;
    330     uint8_t NicType;
    331 #define PCI_NIC 2
    332 #define PnP_NIC 3
    333 #define CardBus_NIC 4
    334     union {
    335 	struct {
    336 	    uint16_t Vendor_ID;
    337 	    uint16_t Dev_ID;
    338 	    uint8_t Base_Class;
    339 	    uint8_t Sub_Class;
    340 	    uint8_t Prog_Intf;
    341 	    uint8_t Rev;
    342 	    uint16_t BusDevFunc;
    343 	    uint16_t SubVendor_ID;
    344 	    uint16_t SubDevice_ID;
    345 	} pci, cardbus;
    346 	struct {
    347 	    uint32_t EISA_Dev_ID;
    348 	    uint8_t Base_Class;
    349 	    uint8_t Sub_Class;
    350 	    uint8_t Prog_Intf;
    351 	    uint16_t CardSelNum;
    352 	} __packed pnp;
    353     } __packed info;
    354 } __packed t_PXENV_UNDI_GET_NIC_TYPE;
    355 
    356 typedef struct s_PXENV_UNDI_GET_IFACE_INFO {
    357     pxenv_status_t Status;
    358     uint8_t IfaceType[16];
    359     uint32_t LinkSpeed;
    360     uint32_t ServiceFlags;
    361     uint32_t Reserved[4];
    362 } __packed t_PXENV_UNDI_GET_IFACE_INFO;
    363 #define PXE_UNDI_IFACE_FLAG_BCAST	0x00000001
    364 #define PXE_UNDI_IFACE_FLAG_MCAST	0x00000002
    365 #define PXE_UNDI_IFACE_FLAG_GROUP	0x00000004
    366 #define PXE_UNDI_IFACE_FLAG_PROMISC	0x00000008
    367 #define PXE_UNDI_IFACE_FLAG_SOFTMAC	0x00000010
    368 #define PXE_UNDI_IFACE_FLAG_STATS	0x00000020
    369 #define PXE_UNDI_IFACE_FLAG_DIAGS	0x00000040
    370 #define PXE_UNDI_IFACE_FLAG_LOOPBACK	0x00000080
    371 #define PXE_UNDI_IFACE_FLAG_RCVCHAIN	0x00000100
    372 #define PXE_UNDI_IFACE_FLAG_IBMSRCRT	0x00000200
    373 #define PXE_UNDI_IFACE_FLAG_RESET	0x00000400
    374 #define PXE_UNDI_IFACE_FLAG_OPEN	0x00000800
    375 #define PXE_UNDI_IFACE_FLAG_IRQ		0x00001000
    376 #define PXE_UNDI_IFACE_FLAG_SRCRT	0x00002000
    377 #define PXE_UNDI_IFACE_FLAG_GDTVIRT	0x00004000
    378 #define PXE_UNDI_IFACE_FLAG_MULTI	0x00008000
    379 #define PXE_UNDI_IFACE_FLAG_LKFISZ	0x00010000
    380 
    381 typedef struct s_PXENV_UNDI_GET_STATE {
    382 #define PXE_UNDI_GET_STATE_STARTED 1
    383 #define PXE_UNDI_GET_STATE_INITIALIZED 2
    384 #define PXE_UNDI_GET_STATE_OPENED 3
    385     pxenv_status_t Status;
    386     uint8_t UNDIstate;
    387 } __packed t_PXENV_UNDI_GET_STATE;
    388 
    389 typedef struct s_PXENV_UNDI_ISR {
    390     pxenv_status_t Status;
    391     uint16_t FuncFlag;
    392     uint16_t BufferLength;
    393     uint16_t FrameLength;
    394     uint16_t FrameHeaderLength;
    395     segoff16_t Frame;
    396     uint8_t ProtType;
    397     uint8_t PktType;
    398 } __packed t_PXENV_UNDI_ISR;
    399 
    400 typedef struct s_PXENV_FILE_API_CHECK {
    401     pxenv_status_t Status;
    402     uint16_t Size;
    403     uint32_t Magic;
    404     uint32_t Provider;
    405     uint32_t APIMask;
    406     uint32_t Flags;
    407 } __packed t_PXENV_FILE_API_CHECK;
    408 
    409 typedef struct s_PXENV_FILE_READ {
    410     pxenv_status_t Status;
    411     uint16_t FileHandle;
    412     uint16_t BufferSize;
    413     segoff16_t Buffer;
    414 } __packed t_PXENV_FILE_READ;
    415 
    416 typedef struct s_PXENV_FILE_OPEN {
    417     pxenv_status_t Status;
    418     uint16_t FileHandle;
    419     segoff16_t FileName;
    420     uint32_t Reserved;
    421 } __packed t_PXENV_FILE_OPEN;
    422 
    423 typedef struct s_PXENV_FILE_CLOSE {
    424     pxenv_status_t Status;
    425     uint16_t FileHandle;
    426 } __packed t_PXENV_FILE_CLOSE;
    427 
    428 typedef struct s_PXENV_GET_FILE_SIZE {
    429     pxenv_status_t Status;
    430     uint16_t FileHandle;
    431     uint32_t FileSize;
    432 } __packed t_PXENV_GET_FILE_SIZE;
    433 
    434 typedef struct s_PXENV_UNLOAD_STACK {
    435     pxenv_status_t Status;
    436     uint8_t reserved[10];
    437 } __packed t_PXENV_UNLOAD_STACK;
    438 
    439 #define PXENV_UNDI_ISR_IN_START 1
    440 #define PXENV_UNDI_ISR_IN_PROCESS 2
    441 #define PXENV_UNDI_ISR_IN_GET_NEXT 3
    442 /* One of these will be returned for
    443    PXENV_UNDI_ISR_IN_START */
    444 #define PXENV_UNDI_ISR_OUT_OURS 0
    445 #define PXENV_UNDI_USR_OUT_NOT_OURS 1
    446 /* One of these will be returned for
    447    PXENV_UNDI_ISR_IN_PROCESS and
    448    PXENV_UNDI_ISR_IN_GET_NEXT */
    449 #define PXENV_UNDI_ISR_OUT_DONE 0
    450 #define PXENV_UNDI_ISR_OUT_TRANSMIT 2
    451 #define PXENV_UNDI_ISR_OUT_RECEIVE 3
    452 #define PXENV_UNDI_ISR_OUT_BUSY 4
    453 
    454 /* Function numbers and error codes */
    455 
    456 #define PXENV_TFTP_OPEN			0x0020
    457 #define PXENV_TFTP_CLOSE		0x0021
    458 #define PXENV_TFTP_READ			0x0022
    459 #define PXENV_TFTP_READ_FILE		0x0023
    460 #define PXENV_TFTP_READ_FILE_PMODE	0x0024
    461 #define PXENV_TFTP_GET_FSIZE		0x0025
    462 
    463 #define PXENV_UDP_OPEN			0x0030
    464 #define PXENV_UDP_CLOSE			0x0031
    465 #define PXENV_UDP_READ			0x0032
    466 #define PXENV_UDP_WRITE			0x0033
    467 
    468 #define PXENV_START_UNDI		0x0000
    469 #define PXENV_UNDI_STARTUP		0x0001
    470 #define PXENV_UNDI_CLEANUP		0x0002
    471 #define PXENV_UNDI_INITIALIZE		0x0003
    472 #define PXENV_UNDI_RESET_NIC		0x0004
    473 #define PXENV_UNDI_SHUTDOWN		0x0005
    474 #define PXENV_UNDI_OPEN			0x0006
    475 #define PXENV_UNDI_CLOSE		0x0007
    476 #define PXENV_UNDI_TRANSMIT		0x0008
    477 #define PXENV_UNDI_SET_MCAST_ADDR	0x0009
    478 #define PXENV_UNDI_SET_STATION_ADDR	0x000A
    479 #define PXENV_UNDI_SET_PACKET_FILTER	0x000B
    480 #define PXENV_UNDI_GET_INFORMATION	0x000C
    481 #define PXENV_UNDI_GET_STATISTICS	0x000D
    482 #define PXENV_UNDI_CLEAR_STATISTICS	0x000E
    483 #define PXENV_UNDI_INITIATE_DIAGS	0x000F
    484 #define PXENV_UNDI_FORCE_INTERRUPT	0x0010
    485 #define PXENV_UNDI_GET_MCAST_ADDR	0x0011
    486 #define PXENV_UNDI_GET_NIC_TYPE		0x0012
    487 #define PXENV_UNDI_GET_IFACE_INFO	0x0013
    488 #define PXENV_UNDI_ISR			0x0014
    489 #define	PXENV_STOP_UNDI			0x0015	/* Overlap...? */
    490 #define PXENV_UNDI_GET_STATE		0x0015	/* Overlap...? */
    491 
    492 #define PXENV_UNLOAD_STACK		0x0070
    493 #define PXENV_GET_CACHED_INFO		0x0071
    494 #define PXENV_RESTART_DHCP		0x0072
    495 #define PXENV_RESTART_TFTP		0x0073
    496 #define PXENV_MODE_SWITCH		0x0074
    497 #define PXENV_START_BASE		0x0075
    498 #define PXENV_STOP_BASE			0x0076
    499 
    500 /* gPXE extensions... */
    501 #define PXENV_FILE_OPEN			0x00e0
    502 #define PXENV_FILE_CLOSE		0x00e1
    503 #define PXENV_FILE_SELECT		0x00e2
    504 #define PXENV_FILE_READ			0x00e3
    505 #define PXENV_GET_FILE_SIZE		0x00e4
    506 #define PXENV_FILE_EXEC			0x00e5
    507 #define PXENV_FILE_API_CHECK		0x00e6
    508 
    509 /* Exit codes */
    510 #define PXENV_EXIT_SUCCESS				 0x0000
    511 #define PXENV_EXIT_FAILURE				 0x0001
    512 
    513 /* Status codes */
    514 #define PXENV_STATUS_SUCCESS				 0x00
    515 #define PXENV_STATUS_FAILURE				 0x01
    516 #define PXENV_STATUS_BAD_FUNC				 0x02
    517 #define PXENV_STATUS_UNSUPPORTED			 0x03
    518 #define PXENV_STATUS_KEEP_UNDI				 0x04
    519 #define PXENV_STATUS_KEEP_ALL				 0x05
    520 #define PXENV_STATUS_OUT_OF_RESOURCES			 0x06
    521 #define PXENV_STATUS_ARP_TIMEOUT			 0x11
    522 #define PXENV_STATUS_UDP_CLOSED				 0x18
    523 #define PXENV_STATUS_UDP_OPEN				 0x19
    524 #define PXENV_STATUS_TFTP_CLOSED			 0x1a
    525 #define PXENV_STATUS_TFTP_OPEN				 0x1b
    526 #define PXENV_STATUS_MCOPY_PROBLEM			 0x20
    527 #define PXENV_STATUS_BIS_INTEGRITY_FAILURE		 0x21
    528 #define PXENV_STATUS_BIS_VALIDATE_FAILURE		 0x22
    529 #define PXENV_STATUS_BIS_INIT_FAILURE			 0x23
    530 #define PXENV_STATUS_BIS_SHUTDOWN_FAILURE		 0x24
    531 #define PXENV_STATUS_BIS_GBOA_FAILURE			 0x25
    532 #define PXENV_STATUS_BIS_FREE_FAILURE			 0x26
    533 #define PXENV_STATUS_BIS_GSI_FAILURE			 0x27
    534 #define PXENV_STATUS_BIS_BAD_CKSUM			 0x28
    535 #define PXENV_STATUS_TFTP_CANNOT_ARP_ADDRESS		 0x30
    536 #define PXENV_STATUS_TFTP_OPEN_TIMEOUT			 0x32
    537 
    538 #define PXENV_STATUS_TFTP_UNKNOWN_OPCODE		 0x33
    539 #define PXENV_STATUS_TFTP_READ_TIMEOUT			 0x35
    540 #define PXENV_STATUS_TFTP_ERROR_OPCODE			 0x36
    541 #define PXENV_STATUS_TFTP_CANNOT_OPEN_CONNECTION	 0x38
    542 #define PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION	 0x39
    543 #define PXENV_STATUS_TFTP_TOO_MANY_PACKAGES		 0x3a
    544 #define PXENV_STATUS_TFTP_FILE_NOT_FOUND		 0x3b
    545 #define PXENV_STATUS_TFTP_ACCESS_VIOLATION		 0x3c
    546 #define PXENV_STATUS_TFTP_NO_MCAST_ADDRESS		 0x3d
    547 #define PXENV_STATUS_TFTP_NO_FILESIZE			 0x3e
    548 #define PXENV_STATUS_TFTP_INVALID_PACKET_SIZE		 0x3f
    549 #define PXENV_STATUS_DHCP_TIMEOUT			 0x51
    550 #define PXENV_STATUS_DHCP_NO_IP_ADDRESS			 0x52
    551 #define PXENV_STATUS_DHCP_NO_BOOTFILE_NAME		 0x53
    552 #define PXENV_STATUS_DHCP_BAD_IP_ADDRESS		 0x54
    553 #define PXENV_STATUS_UNDI_INVALID_FUNCTION		 0x60
    554 #define PXENV_STATUS_UNDI_MEDIATEST_FAILED		 0x61
    555 #define PXENV_STATUS_UNDI_CANNOT_INIT_NIC_FOR_MCAST	 0x62
    556 #define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_NIC		 0x63
    557 #define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_PHY		 0x64
    558 #define PXENV_STATUS_UNDI_CANNOT_READ_CONFIG_DATA	 0x65
    559 #define PXENV_STATUS_UNDI_CANNOT_READ_INIT_DATA		 0x66
    560 #define PXENV_STATUS_UNDI_BAD_MAC_ADDRESS		 0x67
    561 #define PXENV_STATUS_UNDI_BAD_EEPROM_CHECKSUM		 0x68
    562 #define PXENV_STATUS_UNDI_ERROR_SETTING_ISR		 0x69
    563 #define PXENV_STATUS_UNDI_INVALID_STATE			 0x6a
    564 #define PXENV_STATUS_UNDI_TRANSMIT_ERROR		 0x6b
    565 #define PXENV_STATUS_UNDI_INVALID_PARAMETER		 0x6c
    566 #define PXENV_STATUS_BSTRAP_PROMPT_MENU			 0x74
    567 #define PXENV_STATUS_BSTRAP_MCAST_ADDR			 0x76
    568 #define PXENV_STATUS_BSTRAP_MISSING_LIST		 0x77
    569 #define PXENV_STATUS_BSTRAP_NO_RESPONSE			 0x78
    570 #define PXENV_STATUS_BSTRAP_FILE_TOO_BIG		 0x79
    571 #define PXENV_STATUS_BINL_CANCELED_BY_KEYSTROKE		 0xa0
    572 #define PXENV_STATUS_BINL_NO_PXE_SERVER			 0xa1
    573 #define PXENV_STATUS_NOT_AVAILABLE_IN_PMODE		 0xa2
    574 #define PXENV_STATUS_NOT_AVAILABLE_IN_RMODE		 0xa3
    575 #define PXENV_STATUS_BUSD_DEVICE_NOT_SUPPORTED		 0xb0
    576 #define PXENV_STATUS_LOADER_NO_FREE_BASE_MEMORY		 0xc0
    577 #define PXENV_STATUS_LOADER_NO_BC_ROMID			 0xc1
    578 #define PXENV_STATUS_LOADER_BAD_BC_ROMID		 0xc2
    579 #define PXENV_STATUS_LOADER_BAD_BC_RUNTIME_IMAGE	 0xc3
    580 #define PXENV_STATUS_LOADER_NO_UNDI_ROMID		 0xc4
    581 #define PXENV_STATUS_LOADER_BAD_UNDI_ROMID		 0xc5
    582 #define PXENV_STATUS_LOADER_BAD_UNDI_DRIVER_IMAGE	 0xc6
    583 #define PXENV_STATUS_LOADER_NO_PXE_STRUCT		 0xc8
    584 #define PXENV_STATUS_LOADER_NO_PXENV_STRUCT		 0xc9
    585 #define PXENV_STATUS_LOADER_UNDI_START			 0xca
    586 #define PXENV_STATUS_LOADER_BC_START			 0xcb
    587 
    588 int __weak pxe_call(int, void *);
    589 void __weak unload_pxe(uint16_t flags);
    590 uint32_t __weak dns_resolv(const char *);
    591 
    592 extern uint32_t __weak SendCookies;
    593 void __weak http_bake_cookies(void);
    594 
    595 #endif /* _SYSLINUX_PXE_API_H */
    596