xref: /onnv-gate/usr/src/grub/grub-0.97/netboot/pxe.h (revision 8044:b3af80bbf173)
1*8044SWilliam.Kucharski@Sun.COM /*
2*8044SWilliam.Kucharski@Sun.COM  * Copyright (c) 2000 Alfred Perlstein <alfred@freebsd.org>
3*8044SWilliam.Kucharski@Sun.COM  * All rights reserved.
4*8044SWilliam.Kucharski@Sun.COM  * Copyright (c) 2000 Paul Saab <ps@freebsd.org>
5*8044SWilliam.Kucharski@Sun.COM  * All rights reserved.
6*8044SWilliam.Kucharski@Sun.COM  * Copyright (c) 2000 John Baldwin <jhb@freebsd.org>
7*8044SWilliam.Kucharski@Sun.COM  * All rights reserved.
8*8044SWilliam.Kucharski@Sun.COM  *
9*8044SWilliam.Kucharski@Sun.COM  * Redistribution and use in source and binary forms, with or without
10*8044SWilliam.Kucharski@Sun.COM  * modification, are permitted provided that the following conditions
11*8044SWilliam.Kucharski@Sun.COM  * are met:
12*8044SWilliam.Kucharski@Sun.COM  * 1. Redistributions of source code must retain the above copyright
13*8044SWilliam.Kucharski@Sun.COM  *    notice, this list of conditions and the following disclaimer.
14*8044SWilliam.Kucharski@Sun.COM  * 2. Redistributions in binary form must reproduce the above copyright
15*8044SWilliam.Kucharski@Sun.COM  *    notice, this list of conditions and the following disclaimer in the
16*8044SWilliam.Kucharski@Sun.COM  *    documentation and/or other materials provided with the distribution.
17*8044SWilliam.Kucharski@Sun.COM  *
18*8044SWilliam.Kucharski@Sun.COM  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19*8044SWilliam.Kucharski@Sun.COM  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*8044SWilliam.Kucharski@Sun.COM  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*8044SWilliam.Kucharski@Sun.COM  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22*8044SWilliam.Kucharski@Sun.COM  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*8044SWilliam.Kucharski@Sun.COM  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*8044SWilliam.Kucharski@Sun.COM  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*8044SWilliam.Kucharski@Sun.COM  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*8044SWilliam.Kucharski@Sun.COM  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*8044SWilliam.Kucharski@Sun.COM  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*8044SWilliam.Kucharski@Sun.COM  * SUCH DAMAGE.
29*8044SWilliam.Kucharski@Sun.COM  *
30*8044SWilliam.Kucharski@Sun.COM  * $FreeBSD: src/sys/boot/i386/libi386/pxe.h,v 1.4.2.2 2000/09/10 02:52:18 ps Exp $
31*8044SWilliam.Kucharski@Sun.COM  */
32*8044SWilliam.Kucharski@Sun.COM 
33*8044SWilliam.Kucharski@Sun.COM /*
34*8044SWilliam.Kucharski@Sun.COM  * The typedefs and structures declared in this file
35*8044SWilliam.Kucharski@Sun.COM  * clearly violate style(9), the reason for this is to conform to the
36*8044SWilliam.Kucharski@Sun.COM  * typedefs/structure-names used in the Intel literature to avoid confusion.
37*8044SWilliam.Kucharski@Sun.COM  *
38*8044SWilliam.Kucharski@Sun.COM  * It's for your own good. :)
39*8044SWilliam.Kucharski@Sun.COM  */
40*8044SWilliam.Kucharski@Sun.COM 
41*8044SWilliam.Kucharski@Sun.COM /* SEGOFF16_t defined in separate header for Etherboot
42*8044SWilliam.Kucharski@Sun.COM  */
43*8044SWilliam.Kucharski@Sun.COM #include <segoff.h>
44*8044SWilliam.Kucharski@Sun.COM 
45*8044SWilliam.Kucharski@Sun.COM /* It seems that intel didn't think about ABI,
46*8044SWilliam.Kucharski@Sun.COM  * either that or 16bit ABI != 32bit ABI (which seems reasonable)
47*8044SWilliam.Kucharski@Sun.COM  * I have to thank Intel for the hair loss I incurred trying to figure
48*8044SWilliam.Kucharski@Sun.COM  * out why PXE was mis-reading structures I was passing it (at least
49*8044SWilliam.Kucharski@Sun.COM  * from my point of view)
50*8044SWilliam.Kucharski@Sun.COM  *
51*8044SWilliam.Kucharski@Sun.COM  * Solution: use gcc's '__attribute__ ((packed))' to correctly align
52*8044SWilliam.Kucharski@Sun.COM  * structures passed into PXE
53*8044SWilliam.Kucharski@Sun.COM  * Question: does this really work for PXE's expected ABI?
54*8044SWilliam.Kucharski@Sun.COM  */
55*8044SWilliam.Kucharski@Sun.COM #define	PACKED		__attribute__ ((packed))
56*8044SWilliam.Kucharski@Sun.COM 
57*8044SWilliam.Kucharski@Sun.COM #define	S_SIZE(s)	s, sizeof(s) - 1
58*8044SWilliam.Kucharski@Sun.COM 
59*8044SWilliam.Kucharski@Sun.COM #define	IP_STR		"%d.%d.%d.%d"
60*8044SWilliam.Kucharski@Sun.COM #define	IP_ARGS(ip)					\
61*8044SWilliam.Kucharski@Sun.COM 	(int)(ip >> 24) & 0xff, (int)(ip >> 16) & 0xff, \
62*8044SWilliam.Kucharski@Sun.COM 	(int)(ip >> 8) & 0xff, (int)ip & 0xff
63*8044SWilliam.Kucharski@Sun.COM 
64*8044SWilliam.Kucharski@Sun.COM #define	MAC_STR		"%02x:%02x:%02x:%02x:%02x:%02x"
65*8044SWilliam.Kucharski@Sun.COM #define	MAC_ARGS(mac)					\
66*8044SWilliam.Kucharski@Sun.COM 	mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]
67*8044SWilliam.Kucharski@Sun.COM 
68*8044SWilliam.Kucharski@Sun.COM #define	PXENFSROOTPATH	"/pxeroot"
69*8044SWilliam.Kucharski@Sun.COM 
70*8044SWilliam.Kucharski@Sun.COM typedef struct {
71*8044SWilliam.Kucharski@Sun.COM 	uint16_t		Seg_Addr;
72*8044SWilliam.Kucharski@Sun.COM 	uint32_t		Phy_Addr;
73*8044SWilliam.Kucharski@Sun.COM 	uint16_t		Seg_Size;
74*8044SWilliam.Kucharski@Sun.COM } PACKED SEGDESC_t; /* PACKED is required, otherwise gcc pads this out to 12
75*8044SWilliam.Kucharski@Sun.COM 		       bytes - mbrown@fensystems.co.uk (mcb30) 17/5/03 */
76*8044SWilliam.Kucharski@Sun.COM 
77*8044SWilliam.Kucharski@Sun.COM typedef	uint16_t		SEGSEL_t;
78*8044SWilliam.Kucharski@Sun.COM typedef	uint16_t		PXENV_STATUS_t;
79*8044SWilliam.Kucharski@Sun.COM typedef	uint32_t		IP4_t;
80*8044SWilliam.Kucharski@Sun.COM typedef	uint32_t		ADDR32_t;
81*8044SWilliam.Kucharski@Sun.COM typedef	uint16_t		UDP_PORT_t;
82*8044SWilliam.Kucharski@Sun.COM 
83*8044SWilliam.Kucharski@Sun.COM #define	MAC_ADDR_LEN		16
84*8044SWilliam.Kucharski@Sun.COM typedef	uint8_t			MAC_ADDR[MAC_ADDR_LEN];
85*8044SWilliam.Kucharski@Sun.COM 
86*8044SWilliam.Kucharski@Sun.COM /* PXENV+ */
87*8044SWilliam.Kucharski@Sun.COM typedef struct {
88*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Signature[6];	/* 'PXENV+' */
89*8044SWilliam.Kucharski@Sun.COM 	uint16_t	Version;	/* MSB = major, LSB = minor */
90*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Length;		/* structure length */
91*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Checksum;	/* checksum pad */
92*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	RMEntry;	/* SEG:OFF to PXE entry point */
93*8044SWilliam.Kucharski@Sun.COM 	/* don't use PMOffset and PMSelector (from the 2.1 PXE manual) */
94*8044SWilliam.Kucharski@Sun.COM 	uint32_t	PMOffset;	/* Protected mode entry */
95*8044SWilliam.Kucharski@Sun.COM 	SEGSEL_t	PMSelector;	/* Protected mode selector */
96*8044SWilliam.Kucharski@Sun.COM 	SEGSEL_t	StackSeg;	/* Stack segment address */
97*8044SWilliam.Kucharski@Sun.COM 	uint16_t	StackSize;	/* Stack segment size (bytes) */
98*8044SWilliam.Kucharski@Sun.COM 	SEGSEL_t	BC_CodeSeg;	/* BC Code segment address */
99*8044SWilliam.Kucharski@Sun.COM 	uint16_t	BC_CodeSize;	/* BC Code segment size (bytes) */
100*8044SWilliam.Kucharski@Sun.COM 	SEGSEL_t	BC_DataSeg;	/* BC Data segment address */
101*8044SWilliam.Kucharski@Sun.COM 	uint16_t	BC_DataSize;	/* BC Data segment size (bytes) */
102*8044SWilliam.Kucharski@Sun.COM 	SEGSEL_t	UNDIDataSeg;	/* UNDI Data segment address */
103*8044SWilliam.Kucharski@Sun.COM 	uint16_t	UNDIDataSize;	/* UNDI Data segment size (bytes) */
104*8044SWilliam.Kucharski@Sun.COM 	SEGSEL_t	UNDICodeSeg;	/* UNDI Code segment address */
105*8044SWilliam.Kucharski@Sun.COM 	uint16_t	UNDICodeSize;	/* UNDI Code segment size (bytes) */
106*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	PXEPtr;		/* SEG:OFF to !PXE struct,
107*8044SWilliam.Kucharski@Sun.COM 					   only present when Version > 2.1 */
108*8044SWilliam.Kucharski@Sun.COM } PACKED pxenv_t;
109*8044SWilliam.Kucharski@Sun.COM 
110*8044SWilliam.Kucharski@Sun.COM /* !PXE */
111*8044SWilliam.Kucharski@Sun.COM typedef struct {
112*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Signature[4];
113*8044SWilliam.Kucharski@Sun.COM 	uint8_t		StructLength;
114*8044SWilliam.Kucharski@Sun.COM 	uint8_t		StructCksum;
115*8044SWilliam.Kucharski@Sun.COM 	uint8_t		StructRev;
116*8044SWilliam.Kucharski@Sun.COM 	uint8_t		reserved_1;
117*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	UNDIROMID;
118*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	BaseROMID;
119*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	EntryPointSP;
120*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	EntryPointESP;
121*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	StatusCallout;
122*8044SWilliam.Kucharski@Sun.COM 	uint8_t		reserved_2;
123*8044SWilliam.Kucharski@Sun.COM 	uint8_t		SegDescCn;
124*8044SWilliam.Kucharski@Sun.COM 	SEGSEL_t	FirstSelector;
125*8044SWilliam.Kucharski@Sun.COM 	SEGDESC_t	Stack;
126*8044SWilliam.Kucharski@Sun.COM 	SEGDESC_t	UNDIData;
127*8044SWilliam.Kucharski@Sun.COM 	SEGDESC_t	UNDICode;
128*8044SWilliam.Kucharski@Sun.COM 	SEGDESC_t	UNDICodeWrite;
129*8044SWilliam.Kucharski@Sun.COM 	SEGDESC_t	BC_Data;
130*8044SWilliam.Kucharski@Sun.COM 	SEGDESC_t	BC_Code;
131*8044SWilliam.Kucharski@Sun.COM 	SEGDESC_t	BC_CodeWrite;
132*8044SWilliam.Kucharski@Sun.COM } PACKED pxe_t;
133*8044SWilliam.Kucharski@Sun.COM 
134*8044SWilliam.Kucharski@Sun.COM #define	PXENV_START_UNDI		0x0000
135*8044SWilliam.Kucharski@Sun.COM typedef struct {
136*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
137*8044SWilliam.Kucharski@Sun.COM 	uint16_t	ax;
138*8044SWilliam.Kucharski@Sun.COM 	uint16_t	bx;
139*8044SWilliam.Kucharski@Sun.COM 	uint16_t	dx;
140*8044SWilliam.Kucharski@Sun.COM 	uint16_t	di;
141*8044SWilliam.Kucharski@Sun.COM 	uint16_t	es;
142*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_START_UNDI;
143*8044SWilliam.Kucharski@Sun.COM 
144*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_STARTUP		0x0001
145*8044SWilliam.Kucharski@Sun.COM typedef struct {
146*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
147*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_STARTUP;
148*8044SWilliam.Kucharski@Sun.COM 
149*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_CLEANUP		0x0002
150*8044SWilliam.Kucharski@Sun.COM typedef struct {
151*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
152*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_CLEANUP;
153*8044SWilliam.Kucharski@Sun.COM 
154*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_INITIALIZE		0x0003
155*8044SWilliam.Kucharski@Sun.COM typedef struct {
156*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
157*8044SWilliam.Kucharski@Sun.COM 	ADDR32_t	ProtocolIni;	/* Phys addr of a copy of the driver module */
158*8044SWilliam.Kucharski@Sun.COM 	uint8_t		reserved[8];
159*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_INITIALIZE;
160*8044SWilliam.Kucharski@Sun.COM 
161*8044SWilliam.Kucharski@Sun.COM 
162*8044SWilliam.Kucharski@Sun.COM #define	MAXNUM_MCADDR		8
163*8044SWilliam.Kucharski@Sun.COM typedef struct {
164*8044SWilliam.Kucharski@Sun.COM 	uint16_t	MCastAddrCount;
165*8044SWilliam.Kucharski@Sun.COM 	MAC_ADDR	McastAddr[MAXNUM_MCADDR];
166*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_MCAST_ADDRESS;
167*8044SWilliam.Kucharski@Sun.COM 
168*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_RESET_ADAPTER	0x0004
169*8044SWilliam.Kucharski@Sun.COM typedef struct {
170*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
171*8044SWilliam.Kucharski@Sun.COM 	t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
172*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_RESET;
173*8044SWilliam.Kucharski@Sun.COM 
174*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_SHUTDOWN		0x0005
175*8044SWilliam.Kucharski@Sun.COM typedef struct {
176*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
177*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_SHUTDOWN;
178*8044SWilliam.Kucharski@Sun.COM 
179*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_OPEN			0x0006
180*8044SWilliam.Kucharski@Sun.COM typedef struct {
181*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
182*8044SWilliam.Kucharski@Sun.COM 	uint16_t	OpenFlag;
183*8044SWilliam.Kucharski@Sun.COM 	uint16_t	PktFilter;
184*8044SWilliam.Kucharski@Sun.COM #	define FLTR_DIRECTED	0x0001
185*8044SWilliam.Kucharski@Sun.COM #	define FLTR_BRDCST	0x0002
186*8044SWilliam.Kucharski@Sun.COM #	define FLTR_PRMSCS	0x0003
187*8044SWilliam.Kucharski@Sun.COM #	define FLTR_SRC_RTG	0x0004
188*8044SWilliam.Kucharski@Sun.COM 
189*8044SWilliam.Kucharski@Sun.COM 	t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
190*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_OPEN;
191*8044SWilliam.Kucharski@Sun.COM 
192*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_CLOSE		0x0007
193*8044SWilliam.Kucharski@Sun.COM typedef struct {
194*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
195*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_CLOSE;
196*8044SWilliam.Kucharski@Sun.COM 
197*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_TRANSMIT		0x0008
198*8044SWilliam.Kucharski@Sun.COM typedef struct {
199*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
200*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Protocol;
201*8044SWilliam.Kucharski@Sun.COM #	define P_UNKNOWN	0
202*8044SWilliam.Kucharski@Sun.COM #	define P_IP		1
203*8044SWilliam.Kucharski@Sun.COM #	define P_ARP		2
204*8044SWilliam.Kucharski@Sun.COM #	define P_RARP		3
205*8044SWilliam.Kucharski@Sun.COM 
206*8044SWilliam.Kucharski@Sun.COM 	uint8_t		XmitFlag;
207*8044SWilliam.Kucharski@Sun.COM #	define XMT_DESTADDR	0x0000
208*8044SWilliam.Kucharski@Sun.COM #	define XMT_BROADCAST	0x0001
209*8044SWilliam.Kucharski@Sun.COM 
210*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	DestAddr;
211*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	TBD;
212*8044SWilliam.Kucharski@Sun.COM 	uint32_t	Reserved[2];
213*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_TRANSMIT;
214*8044SWilliam.Kucharski@Sun.COM 
215*8044SWilliam.Kucharski@Sun.COM #define	MAX_DATA_BLKS		8
216*8044SWilliam.Kucharski@Sun.COM typedef struct {
217*8044SWilliam.Kucharski@Sun.COM 	uint16_t	ImmedLength;
218*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	Xmit;
219*8044SWilliam.Kucharski@Sun.COM 	uint16_t	DataBlkCount;
220*8044SWilliam.Kucharski@Sun.COM 	struct	DataBlk {
221*8044SWilliam.Kucharski@Sun.COM 		uint8_t		TDPtrType;
222*8044SWilliam.Kucharski@Sun.COM 		uint8_t		TDRsvdByte;
223*8044SWilliam.Kucharski@Sun.COM 		uint16_t	TDDataLen;
224*8044SWilliam.Kucharski@Sun.COM 		SEGOFF16_t	TDDataPtr;
225*8044SWilliam.Kucharski@Sun.COM 	} DataBlock[MAX_DATA_BLKS];
226*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_TBD;
227*8044SWilliam.Kucharski@Sun.COM 
228*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_SET_MCAST_ADDRESS	0x0009
229*8044SWilliam.Kucharski@Sun.COM typedef struct {
230*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
231*8044SWilliam.Kucharski@Sun.COM 	t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
232*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_SET_MCAST_ADDR;
233*8044SWilliam.Kucharski@Sun.COM 
234*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_SET_STATION_ADDRESS	0x000A
235*8044SWilliam.Kucharski@Sun.COM typedef struct {
236*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
237*8044SWilliam.Kucharski@Sun.COM 	MAC_ADDR	StationAddress;		/* Temp MAC addres to use */
238*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_SET_STATION_ADDRESS;
239*8044SWilliam.Kucharski@Sun.COM 
240*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_SET_PACKET_FILTER	0x000B
241*8044SWilliam.Kucharski@Sun.COM typedef struct {
242*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
243*8044SWilliam.Kucharski@Sun.COM 	uint8_t		filter;			/* see UNDI_OPEN (0x0006) */
244*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_SET_PACKET_FILTER;
245*8044SWilliam.Kucharski@Sun.COM 
246*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_GET_INFORMATION	0x000C
247*8044SWilliam.Kucharski@Sun.COM typedef struct {
248*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
249*8044SWilliam.Kucharski@Sun.COM 	uint16_t	BaseIo;			/* Adapter base I/O address */
250*8044SWilliam.Kucharski@Sun.COM 	uint16_t	IntNumber;		/* Adapter IRQ number */
251*8044SWilliam.Kucharski@Sun.COM 	uint16_t	MaxTranUnit;		/* Adapter maximum transmit unit */
252*8044SWilliam.Kucharski@Sun.COM 	uint16_t	HwType;			/* Type of protocol at the hardware addr */
253*8044SWilliam.Kucharski@Sun.COM #	define ETHER_TYPE	1
254*8044SWilliam.Kucharski@Sun.COM #	define EXP_ETHER_TYPE	2
255*8044SWilliam.Kucharski@Sun.COM #	define IEEE_TYPE	6
256*8044SWilliam.Kucharski@Sun.COM #	define ARCNET_TYPE	7
257*8044SWilliam.Kucharski@Sun.COM 
258*8044SWilliam.Kucharski@Sun.COM 	uint16_t	HwAddrLen;		/* Length of hardware address */
259*8044SWilliam.Kucharski@Sun.COM 	MAC_ADDR	CurrentNodeAddress;	/* Current hardware address */
260*8044SWilliam.Kucharski@Sun.COM 	MAC_ADDR	PermNodeAddress;	/* Permanent hardware address */
261*8044SWilliam.Kucharski@Sun.COM 	SEGSEL_t	ROMAddress;		/* Real mode ROM segment address */
262*8044SWilliam.Kucharski@Sun.COM 	uint16_t	RxBufCt;		/* Receive queue length */
263*8044SWilliam.Kucharski@Sun.COM 	uint16_t	TxBufCt;		/* Transmit queue length */
264*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_GET_INFORMATION;
265*8044SWilliam.Kucharski@Sun.COM 
266*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_GET_STATISTICS	0x000D
267*8044SWilliam.Kucharski@Sun.COM typedef struct {
268*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
269*8044SWilliam.Kucharski@Sun.COM 	uint32_t	XmitGoodFrames;		/* Number of successful transmissions */
270*8044SWilliam.Kucharski@Sun.COM 	uint32_t	RcvGoodFrames;		/* Number of good frames received */
271*8044SWilliam.Kucharski@Sun.COM 	uint32_t	RcvCRCErrors;		/* Number of frames with CRC errors */
272*8044SWilliam.Kucharski@Sun.COM 	uint32_t	RcvResourceErrors;	/* Number of frames dropped */
273*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_GET_STATISTICS;
274*8044SWilliam.Kucharski@Sun.COM 
275*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_CLEAR_STATISTICS	0x000E
276*8044SWilliam.Kucharski@Sun.COM typedef struct {
277*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
278*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_CLEAR_STATISTICS;
279*8044SWilliam.Kucharski@Sun.COM 
280*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_INITIATE_DIAGS	0x000F
281*8044SWilliam.Kucharski@Sun.COM typedef struct {
282*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
283*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_INITIATE_DIAGS;
284*8044SWilliam.Kucharski@Sun.COM 
285*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_FORCE_INTERRUPT	0x0010
286*8044SWilliam.Kucharski@Sun.COM typedef struct {
287*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
288*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_FORCE_INTERRUPT;
289*8044SWilliam.Kucharski@Sun.COM 
290*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_GET_MCAST_ADDRESS	0x0011
291*8044SWilliam.Kucharski@Sun.COM typedef struct {
292*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
293*8044SWilliam.Kucharski@Sun.COM 	IP4_t		InetAddr;		/* IP mulicast address */
294*8044SWilliam.Kucharski@Sun.COM 	MAC_ADDR	MediaAddr;		/* MAC multicast address */
295*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_GET_MCAST_ADDR;
296*8044SWilliam.Kucharski@Sun.COM 
297*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_GET_NIC_TYPE		0x0012
298*8044SWilliam.Kucharski@Sun.COM typedef struct {
299*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
300*8044SWilliam.Kucharski@Sun.COM 	uint8_t		NicType;		/* Type of NIC */
301*8044SWilliam.Kucharski@Sun.COM #	define PCI_NIC		2
302*8044SWilliam.Kucharski@Sun.COM #	define PnP_NIC		3
303*8044SWilliam.Kucharski@Sun.COM #	define CardBus_NIC	4
304*8044SWilliam.Kucharski@Sun.COM 
305*8044SWilliam.Kucharski@Sun.COM 	union {
306*8044SWilliam.Kucharski@Sun.COM 		struct {
307*8044SWilliam.Kucharski@Sun.COM 			uint16_t	Vendor_ID;
308*8044SWilliam.Kucharski@Sun.COM 			uint16_t	Dev_ID;
309*8044SWilliam.Kucharski@Sun.COM 			uint8_t		Base_Class;
310*8044SWilliam.Kucharski@Sun.COM 			uint8_t		Sub_Class;
311*8044SWilliam.Kucharski@Sun.COM 			uint8_t		Prog_Intf;
312*8044SWilliam.Kucharski@Sun.COM 			uint8_t		Rev;
313*8044SWilliam.Kucharski@Sun.COM 			uint16_t	BusDevFunc;
314*8044SWilliam.Kucharski@Sun.COM 			uint16_t	SubVendor_ID;
315*8044SWilliam.Kucharski@Sun.COM 			uint16_t	SubDevice_ID;
316*8044SWilliam.Kucharski@Sun.COM 		} pci, cardbus;
317*8044SWilliam.Kucharski@Sun.COM 		struct {
318*8044SWilliam.Kucharski@Sun.COM 			uint32_t	EISA_Dev_ID;
319*8044SWilliam.Kucharski@Sun.COM 			uint8_t		Base_Class;
320*8044SWilliam.Kucharski@Sun.COM 			uint8_t		Sub_Class;
321*8044SWilliam.Kucharski@Sun.COM 			uint8_t		Prog_Intf;
322*8044SWilliam.Kucharski@Sun.COM 			uint16_t	CardSelNum;
323*8044SWilliam.Kucharski@Sun.COM 		} pnp;
324*8044SWilliam.Kucharski@Sun.COM 	} info;
325*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_GET_NIC_TYPE;
326*8044SWilliam.Kucharski@Sun.COM 
327*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_GET_IFACE_INFO	0x0013
328*8044SWilliam.Kucharski@Sun.COM typedef struct {
329*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
330*8044SWilliam.Kucharski@Sun.COM 	uint8_t		IfaceType[16];		/* Name of MAC type in ASCII. */
331*8044SWilliam.Kucharski@Sun.COM 	uint32_t	LinkSpeed;		/* Defined in NDIS 2.0 spec */
332*8044SWilliam.Kucharski@Sun.COM 	uint32_t	ServiceFlags;		/* Defined in NDIS 2.0 spec */
333*8044SWilliam.Kucharski@Sun.COM 	uint32_t	Reserved[4];		/* must be 0 */
334*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_GET_IFACE_INFO;
335*8044SWilliam.Kucharski@Sun.COM 
336*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNDI_ISR			0x0014
337*8044SWilliam.Kucharski@Sun.COM typedef struct {
338*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
339*8044SWilliam.Kucharski@Sun.COM 	uint16_t	FuncFlag;		/* PXENV_UNDI_ISR_OUT_xxx */
340*8044SWilliam.Kucharski@Sun.COM 	uint16_t	BufferLength;		/* Length of Frame */
341*8044SWilliam.Kucharski@Sun.COM 	uint16_t	FrameLength;		/* Total length of reciever frame */
342*8044SWilliam.Kucharski@Sun.COM 	uint16_t	FrameHeaderLength;	/* Length of the media header in Frame */
343*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	Frame;			/* receive buffer */
344*8044SWilliam.Kucharski@Sun.COM 	uint8_t		ProtType;		/* Protocol type */
345*8044SWilliam.Kucharski@Sun.COM 	uint8_t		PktType;		/* Packet Type */
346*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_IN_START		1
347*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_IN_PROCESS	2
348*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_IN_GET_NEXT	3
349*8044SWilliam.Kucharski@Sun.COM 
350*8044SWilliam.Kucharski@Sun.COM 	/* one of these will be returned for PXENV_UNDI_ISR_IN_START */
351*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_OUT_OURS		0
352*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_OUT_NOT_OURS	1
353*8044SWilliam.Kucharski@Sun.COM 
354*8044SWilliam.Kucharski@Sun.COM 	/*
355*8044SWilliam.Kucharski@Sun.COM 	 * one of these will bre returnd for PXEND_UNDI_ISR_IN_PROCESS
356*8044SWilliam.Kucharski@Sun.COM 	 * and PXENV_UNDI_ISR_IN_GET_NEXT
357*8044SWilliam.Kucharski@Sun.COM 	 */
358*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_OUT_DONE		0
359*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_OUT_TRANSMIT	2
360*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_OUT_RECEIVE	3
361*8044SWilliam.Kucharski@Sun.COM #	define PXENV_UNDI_ISR_OUT_BUSY		4
362*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNDI_ISR;
363*8044SWilliam.Kucharski@Sun.COM 
364*8044SWilliam.Kucharski@Sun.COM #define	PXENV_STOP_UNDI			0x0015
365*8044SWilliam.Kucharski@Sun.COM typedef struct {
366*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
367*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_STOP_UNDI;
368*8044SWilliam.Kucharski@Sun.COM 
369*8044SWilliam.Kucharski@Sun.COM #define	PXENV_TFTP_OPEN			0x0020
370*8044SWilliam.Kucharski@Sun.COM typedef struct {
371*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
372*8044SWilliam.Kucharski@Sun.COM 	IP4_t		ServerIPAddress;
373*8044SWilliam.Kucharski@Sun.COM 	IP4_t		GatewayIPAddress;
374*8044SWilliam.Kucharski@Sun.COM 	uint8_t		FileName[128];
375*8044SWilliam.Kucharski@Sun.COM 	UDP_PORT_t	TFTPPort;
376*8044SWilliam.Kucharski@Sun.COM 	uint16_t	PacketSize;
377*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_TFTP_OPEN;
378*8044SWilliam.Kucharski@Sun.COM 
379*8044SWilliam.Kucharski@Sun.COM #define	PXENV_TFTP_CLOSE		0x0021
380*8044SWilliam.Kucharski@Sun.COM typedef struct {
381*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
382*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_TFTP_CLOSE;
383*8044SWilliam.Kucharski@Sun.COM 
384*8044SWilliam.Kucharski@Sun.COM #define	PXENV_TFTP_READ			0x0022
385*8044SWilliam.Kucharski@Sun.COM typedef struct {
386*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
387*8044SWilliam.Kucharski@Sun.COM 	uint16_t	PacketNumber;
388*8044SWilliam.Kucharski@Sun.COM 	uint16_t	BufferSize;
389*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	Buffer;
390*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_TFTP_READ;
391*8044SWilliam.Kucharski@Sun.COM 
392*8044SWilliam.Kucharski@Sun.COM #define	PXENV_TFTP_READ_FILE		0x0023
393*8044SWilliam.Kucharski@Sun.COM typedef struct {
394*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
395*8044SWilliam.Kucharski@Sun.COM 	uint8_t		FileName[128];
396*8044SWilliam.Kucharski@Sun.COM 	uint32_t	BufferSize;
397*8044SWilliam.Kucharski@Sun.COM 	ADDR32_t	Buffer;
398*8044SWilliam.Kucharski@Sun.COM 	IP4_t		ServerIPAddress;
399*8044SWilliam.Kucharski@Sun.COM 	IP4_t		GatewayIPAdress;
400*8044SWilliam.Kucharski@Sun.COM 	IP4_t		McastIPAdress;
401*8044SWilliam.Kucharski@Sun.COM 	UDP_PORT_t	TFTPClntPort;
402*8044SWilliam.Kucharski@Sun.COM 	UDP_PORT_t	TFTPSrvPort;
403*8044SWilliam.Kucharski@Sun.COM 	uint16_t	TFTPOpenTimeOut;
404*8044SWilliam.Kucharski@Sun.COM 	uint16_t	TFTPReopenDelay;
405*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_TFTP_READ_FILE;
406*8044SWilliam.Kucharski@Sun.COM 
407*8044SWilliam.Kucharski@Sun.COM #define	PXENV_TFTP_GET_FSIZE		0x0025
408*8044SWilliam.Kucharski@Sun.COM typedef struct {
409*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
410*8044SWilliam.Kucharski@Sun.COM 	IP4_t		ServerIPAddress;
411*8044SWilliam.Kucharski@Sun.COM 	IP4_t		GatewayIPAdress;
412*8044SWilliam.Kucharski@Sun.COM 	uint8_t		FileName[128];
413*8044SWilliam.Kucharski@Sun.COM 	uint32_t	FileSize;
414*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_TFTP_GET_FSIZE;
415*8044SWilliam.Kucharski@Sun.COM 
416*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UDP_OPEN			0x0030
417*8044SWilliam.Kucharski@Sun.COM typedef struct {
418*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
419*8044SWilliam.Kucharski@Sun.COM 	IP4_t		src_ip;		/* IP address of this station */
420*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UDP_OPEN;
421*8044SWilliam.Kucharski@Sun.COM 
422*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UDP_CLOSE			0x0031
423*8044SWilliam.Kucharski@Sun.COM typedef struct {
424*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	status;
425*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UDP_CLOSE;
426*8044SWilliam.Kucharski@Sun.COM 
427*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UDP_READ			0x0032
428*8044SWilliam.Kucharski@Sun.COM typedef struct {
429*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	status;
430*8044SWilliam.Kucharski@Sun.COM 	IP4_t		src_ip;		/* IP of sender */
431*8044SWilliam.Kucharski@Sun.COM 	IP4_t		dest_ip;	/* Only accept packets sent to this IP */
432*8044SWilliam.Kucharski@Sun.COM 	UDP_PORT_t	s_port;		/* UDP source port of sender */
433*8044SWilliam.Kucharski@Sun.COM 	UDP_PORT_t	d_port;		/* Only accept packets sent to this port */
434*8044SWilliam.Kucharski@Sun.COM 	uint16_t	buffer_size;	/* Size of the packet buffer */
435*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	buffer;		/* SEG:OFF to the packet buffer */
436*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UDP_READ;
437*8044SWilliam.Kucharski@Sun.COM 
438*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UDP_WRITE			0x0033
439*8044SWilliam.Kucharski@Sun.COM typedef struct {
440*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	status;
441*8044SWilliam.Kucharski@Sun.COM 	IP4_t		ip;		/* dest ip addr */
442*8044SWilliam.Kucharski@Sun.COM 	IP4_t		gw;		/* ip gateway */
443*8044SWilliam.Kucharski@Sun.COM 	UDP_PORT_t	src_port;	/* source udp port */
444*8044SWilliam.Kucharski@Sun.COM 	UDP_PORT_t	dst_port;	/* destination udp port */
445*8044SWilliam.Kucharski@Sun.COM 	uint16_t	buffer_size;	/* Size of the packet buffer */
446*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	buffer;		/* SEG:OFF to the packet buffer */
447*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UDP_WRITE;
448*8044SWilliam.Kucharski@Sun.COM 
449*8044SWilliam.Kucharski@Sun.COM #define	PXENV_UNLOAD_STACK		0x0070
450*8044SWilliam.Kucharski@Sun.COM typedef struct {
451*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
452*8044SWilliam.Kucharski@Sun.COM 	uint8_t		reserved[10];
453*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_UNLOAD_STACK;
454*8044SWilliam.Kucharski@Sun.COM 
455*8044SWilliam.Kucharski@Sun.COM 
456*8044SWilliam.Kucharski@Sun.COM #define	PXENV_GET_CACHED_INFO		0x0071
457*8044SWilliam.Kucharski@Sun.COM typedef struct {
458*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
459*8044SWilliam.Kucharski@Sun.COM 	uint16_t	PacketType;	/* type (defined right here) */
460*8044SWilliam.Kucharski@Sun.COM #	define PXENV_PACKET_TYPE_DHCP_DISCOVER  1
461*8044SWilliam.Kucharski@Sun.COM #	define PXENV_PACKET_TYPE_DHCP_ACK       2
462*8044SWilliam.Kucharski@Sun.COM #	define PXENV_PACKET_TYPE_BINL_REPLY     3
463*8044SWilliam.Kucharski@Sun.COM 	uint16_t	BufferSize;	/* max to copy, leave at 0 for pointer */
464*8044SWilliam.Kucharski@Sun.COM 	SEGOFF16_t	Buffer;		/* copy to, leave at 0 for pointer */
465*8044SWilliam.Kucharski@Sun.COM 	uint16_t	BufferLimit;	/* max size of buffer in BC dataseg ? */
466*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_GET_CACHED_INFO;
467*8044SWilliam.Kucharski@Sun.COM 
468*8044SWilliam.Kucharski@Sun.COM 
469*8044SWilliam.Kucharski@Sun.COM /* structure filled in by PXENV_GET_CACHED_INFO
470*8044SWilliam.Kucharski@Sun.COM  * (how we determine which IP we downloaded the initial bootstrap from)
471*8044SWilliam.Kucharski@Sun.COM  * words can't describe...
472*8044SWilliam.Kucharski@Sun.COM  */
473*8044SWilliam.Kucharski@Sun.COM typedef struct {
474*8044SWilliam.Kucharski@Sun.COM 	uint8_t		opcode;
475*8044SWilliam.Kucharski@Sun.COM #	define BOOTP_REQ	1
476*8044SWilliam.Kucharski@Sun.COM #	define BOOTP_REP	2
477*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Hardware;	/* hardware type */
478*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Hardlen;	/* hardware addr len */
479*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Gatehops;	/* zero it */
480*8044SWilliam.Kucharski@Sun.COM 	uint32_t	ident;		/* random number chosen by client */
481*8044SWilliam.Kucharski@Sun.COM 	uint16_t	seconds;	/* seconds since did initial bootstrap */
482*8044SWilliam.Kucharski@Sun.COM 	uint16_t	Flags;		/* seconds since did initial bootstrap */
483*8044SWilliam.Kucharski@Sun.COM #	define BOOTP_BCAST	0x8000		/* ? */
484*8044SWilliam.Kucharski@Sun.COM 	IP4_t		cip;		/* Client IP */
485*8044SWilliam.Kucharski@Sun.COM 	IP4_t		yip;		/* Your IP */
486*8044SWilliam.Kucharski@Sun.COM 	IP4_t		sip;		/* IP to use for next boot stage */
487*8044SWilliam.Kucharski@Sun.COM 	IP4_t		gip;		/* Relay IP ? */
488*8044SWilliam.Kucharski@Sun.COM 	MAC_ADDR	CAddr;		/* Client hardware address */
489*8044SWilliam.Kucharski@Sun.COM 	uint8_t		Sname[64];	/* Server's hostname (Optional) */
490*8044SWilliam.Kucharski@Sun.COM 	uint8_t		bootfile[128];	/* boot filename */
491*8044SWilliam.Kucharski@Sun.COM 	union {
492*8044SWilliam.Kucharski@Sun.COM #		if 1
493*8044SWilliam.Kucharski@Sun.COM #		define BOOTP_DHCPVEND  1024    /* DHCP extended vendor field size */
494*8044SWilliam.Kucharski@Sun.COM #		else
495*8044SWilliam.Kucharski@Sun.COM #		define BOOTP_DHCPVEND  312	/* DHCP standard vendor field size */
496*8044SWilliam.Kucharski@Sun.COM #		endif
497*8044SWilliam.Kucharski@Sun.COM 		uint8_t		d[BOOTP_DHCPVEND];	/* raw array of vendor/dhcp options */
498*8044SWilliam.Kucharski@Sun.COM 		struct {
499*8044SWilliam.Kucharski@Sun.COM 			uint8_t		magic[4];	/* DHCP magic cookie */
500*8044SWilliam.Kucharski@Sun.COM #			ifndef		VM_RFC1048
501*8044SWilliam.Kucharski@Sun.COM #			define		VM_RFC1048	0x63825363L	/* ? */
502*8044SWilliam.Kucharski@Sun.COM #			endif
503*8044SWilliam.Kucharski@Sun.COM 			uint32_t	flags;		/* bootp flags/opcodes */
504*8044SWilliam.Kucharski@Sun.COM 			uint8_t		pad[56];	/* I don't think intel knows what a
505*8044SWilliam.Kucharski@Sun.COM 							   union does... */
506*8044SWilliam.Kucharski@Sun.COM 		} v;
507*8044SWilliam.Kucharski@Sun.COM 	} vendor;
508*8044SWilliam.Kucharski@Sun.COM } PACKED BOOTPLAYER;
509*8044SWilliam.Kucharski@Sun.COM 
510*8044SWilliam.Kucharski@Sun.COM #define	PXENV_RESTART_TFTP		0x0073
511*8044SWilliam.Kucharski@Sun.COM #define	t_PXENV_RESTART_TFTP		t_PXENV_TFTP_READ_FILE
512*8044SWilliam.Kucharski@Sun.COM 
513*8044SWilliam.Kucharski@Sun.COM #define	PXENV_START_BASE		0x0075
514*8044SWilliam.Kucharski@Sun.COM typedef struct {
515*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
516*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_START_BASE;
517*8044SWilliam.Kucharski@Sun.COM 
518*8044SWilliam.Kucharski@Sun.COM #define	PXENV_STOP_BASE			0x0076
519*8044SWilliam.Kucharski@Sun.COM typedef struct {
520*8044SWilliam.Kucharski@Sun.COM 	PXENV_STATUS_t	Status;
521*8044SWilliam.Kucharski@Sun.COM } PACKED t_PXENV_STOP_BASE;
522