• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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