1*f334afcfSToomas Soome /** @file
2*f334afcfSToomas Soome   This header file contains all of the PXE type definitions,
3*f334afcfSToomas Soome   structure prototypes, global variables and constants that
4*f334afcfSToomas Soome   are needed for porting PXE to EFI.
5*f334afcfSToomas Soome 
6*f334afcfSToomas Soome Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
7*f334afcfSToomas Soome SPDX-License-Identifier: BSD-2-Clause-Patent
8*f334afcfSToomas Soome 
9*f334afcfSToomas Soome   @par Revision Reference:
10*f334afcfSToomas Soome   32/64-bit PXE specification:
11*f334afcfSToomas Soome   alpha-4, 99-Dec-17.
12*f334afcfSToomas Soome 
13*f334afcfSToomas Soome **/
14*f334afcfSToomas Soome 
15*f334afcfSToomas Soome #ifndef __EFI_PXE_H__
16*f334afcfSToomas Soome #define __EFI_PXE_H__
17*f334afcfSToomas Soome 
18*f334afcfSToomas Soome #pragma pack(1)
19*f334afcfSToomas Soome 
20*f334afcfSToomas Soome #define PXE_BUSTYPE(a, b, c, d) \
21*f334afcfSToomas Soome     ( \
22*f334afcfSToomas Soome       (((PXE_UINT32) (d) & 0xFF) << 24) | (((PXE_UINT32) (c) & 0xFF) << 16) | (((PXE_UINT32) (b) & 0xFF) << 8) | \
23*f334afcfSToomas Soome         ((PXE_UINT32) (a) & 0xFF) \
24*f334afcfSToomas Soome     )
25*f334afcfSToomas Soome 
26*f334afcfSToomas Soome ///
27*f334afcfSToomas Soome /// UNDI ROM ID and devive ID signature.
28*f334afcfSToomas Soome ///
29*f334afcfSToomas Soome #define PXE_BUSTYPE_PXE  PXE_BUSTYPE ('!', 'P', 'X', 'E')
30*f334afcfSToomas Soome 
31*f334afcfSToomas Soome ///
32*f334afcfSToomas Soome /// BUS ROM ID signatures.
33*f334afcfSToomas Soome ///
34*f334afcfSToomas Soome #define PXE_BUSTYPE_PCI      PXE_BUSTYPE ('P', 'C', 'I', 'R')
35*f334afcfSToomas Soome #define PXE_BUSTYPE_PC_CARD  PXE_BUSTYPE ('P', 'C', 'C', 'R')
36*f334afcfSToomas Soome #define PXE_BUSTYPE_USB      PXE_BUSTYPE ('U', 'S', 'B', 'R')
37*f334afcfSToomas Soome #define PXE_BUSTYPE_1394     PXE_BUSTYPE ('1', '3', '9', '4')
38*f334afcfSToomas Soome 
39*f334afcfSToomas Soome #define PXE_SWAP_UINT16(n)  ((((PXE_UINT16) (n) & 0x00FF) << 8) | (((PXE_UINT16) (n) & 0xFF00) >> 8))
40*f334afcfSToomas Soome 
41*f334afcfSToomas Soome #define PXE_SWAP_UINT32(n) \
42*f334afcfSToomas Soome   ((((PXE_UINT32)(n) & 0x000000FF) << 24) | \
43*f334afcfSToomas Soome    (((PXE_UINT32)(n) & 0x0000FF00) << 8)  | \
44*f334afcfSToomas Soome    (((PXE_UINT32)(n) & 0x00FF0000) >> 8)  | \
45*f334afcfSToomas Soome    (((PXE_UINT32)(n) & 0xFF000000) >> 24))
46*f334afcfSToomas Soome 
47*f334afcfSToomas Soome #define PXE_SWAP_UINT64(n) \
48*f334afcfSToomas Soome   ((((PXE_UINT64)(n) & 0x00000000000000FFULL) << 56) | \
49*f334afcfSToomas Soome    (((PXE_UINT64)(n) & 0x000000000000FF00ULL) << 40) | \
50*f334afcfSToomas Soome    (((PXE_UINT64)(n) & 0x0000000000FF0000ULL) << 24) | \
51*f334afcfSToomas Soome    (((PXE_UINT64)(n) & 0x00000000FF000000ULL) << 8)  | \
52*f334afcfSToomas Soome    (((PXE_UINT64)(n) & 0x000000FF00000000ULL) >> 8)  | \
53*f334afcfSToomas Soome    (((PXE_UINT64)(n) & 0x0000FF0000000000ULL) >> 24) | \
54*f334afcfSToomas Soome    (((PXE_UINT64)(n) & 0x00FF000000000000ULL) >> 40) | \
55*f334afcfSToomas Soome    (((PXE_UINT64)(n) & 0xFF00000000000000ULL) >> 56))
56*f334afcfSToomas Soome 
57*f334afcfSToomas Soome #define PXE_CPBSIZE_NOT_USED  0               ///< zero
58*f334afcfSToomas Soome #define PXE_DBSIZE_NOT_USED   0               ///< zero
59*f334afcfSToomas Soome #define PXE_CPBADDR_NOT_USED  (PXE_UINT64) 0  ///< zero
60*f334afcfSToomas Soome #define PXE_DBADDR_NOT_USED   (PXE_UINT64) 0  ///< zero
61*f334afcfSToomas Soome #define PXE_CONST             CONST
62*f334afcfSToomas Soome 
63*f334afcfSToomas Soome #define PXE_VOLATILE  volatile
64*f334afcfSToomas Soome 
65*f334afcfSToomas Soome typedef VOID    PXE_VOID;
66*f334afcfSToomas Soome typedef UINT8   PXE_UINT8;
67*f334afcfSToomas Soome typedef UINT16  PXE_UINT16;
68*f334afcfSToomas Soome typedef UINT32  PXE_UINT32;
69*f334afcfSToomas Soome typedef UINTN   PXE_UINTN;
70*f334afcfSToomas Soome 
71*f334afcfSToomas Soome ///
72*f334afcfSToomas Soome /// Typedef unsigned long PXE_UINT64.
73*f334afcfSToomas Soome ///
74*f334afcfSToomas Soome typedef UINT64 PXE_UINT64;
75*f334afcfSToomas Soome 
76*f334afcfSToomas Soome typedef PXE_UINT8 PXE_BOOL;
77*f334afcfSToomas Soome #define PXE_FALSE  0           ///< zero
78*f334afcfSToomas Soome #define PXE_TRUE   (!PXE_FALSE)
79*f334afcfSToomas Soome 
80*f334afcfSToomas Soome typedef PXE_UINT16 PXE_OPCODE;
81*f334afcfSToomas Soome 
82*f334afcfSToomas Soome ///
83*f334afcfSToomas Soome /// Return UNDI operational state.
84*f334afcfSToomas Soome ///
85*f334afcfSToomas Soome #define PXE_OPCODE_GET_STATE  0x0000
86*f334afcfSToomas Soome 
87*f334afcfSToomas Soome ///
88*f334afcfSToomas Soome /// Change UNDI operational state from Stopped to Started.
89*f334afcfSToomas Soome ///
90*f334afcfSToomas Soome #define PXE_OPCODE_START  0x0001
91*f334afcfSToomas Soome 
92*f334afcfSToomas Soome ///
93*f334afcfSToomas Soome /// Change UNDI operational state from Started to Stopped.
94*f334afcfSToomas Soome ///
95*f334afcfSToomas Soome #define PXE_OPCODE_STOP  0x0002
96*f334afcfSToomas Soome 
97*f334afcfSToomas Soome ///
98*f334afcfSToomas Soome /// Get UNDI initialization information.
99*f334afcfSToomas Soome ///
100*f334afcfSToomas Soome #define PXE_OPCODE_GET_INIT_INFO  0x0003
101*f334afcfSToomas Soome 
102*f334afcfSToomas Soome ///
103*f334afcfSToomas Soome /// Get NIC configuration information.
104*f334afcfSToomas Soome ///
105*f334afcfSToomas Soome #define PXE_OPCODE_GET_CONFIG_INFO  0x0004
106*f334afcfSToomas Soome 
107*f334afcfSToomas Soome ///
108*f334afcfSToomas Soome /// Changed UNDI operational state from Started to Initialized.
109*f334afcfSToomas Soome ///
110*f334afcfSToomas Soome #define PXE_OPCODE_INITIALIZE  0x0005
111*f334afcfSToomas Soome 
112*f334afcfSToomas Soome ///
113*f334afcfSToomas Soome /// Re-initialize the NIC H/W.
114*f334afcfSToomas Soome ///
115*f334afcfSToomas Soome #define PXE_OPCODE_RESET  0x0006
116*f334afcfSToomas Soome 
117*f334afcfSToomas Soome ///
118*f334afcfSToomas Soome /// Change the UNDI operational state from Initialized to Started.
119*f334afcfSToomas Soome ///
120*f334afcfSToomas Soome #define PXE_OPCODE_SHUTDOWN  0x0007
121*f334afcfSToomas Soome 
122*f334afcfSToomas Soome ///
123*f334afcfSToomas Soome /// Read & change state of external interrupt enables.
124*f334afcfSToomas Soome ///
125*f334afcfSToomas Soome #define PXE_OPCODE_INTERRUPT_ENABLES  0x0008
126*f334afcfSToomas Soome 
127*f334afcfSToomas Soome ///
128*f334afcfSToomas Soome /// Read & change state of packet receive filters.
129*f334afcfSToomas Soome ///
130*f334afcfSToomas Soome #define PXE_OPCODE_RECEIVE_FILTERS  0x0009
131*f334afcfSToomas Soome 
132*f334afcfSToomas Soome ///
133*f334afcfSToomas Soome /// Read & change station MAC address.
134*f334afcfSToomas Soome ///
135*f334afcfSToomas Soome #define PXE_OPCODE_STATION_ADDRESS  0x000A
136*f334afcfSToomas Soome 
137*f334afcfSToomas Soome ///
138*f334afcfSToomas Soome /// Read traffic statistics.
139*f334afcfSToomas Soome ///
140*f334afcfSToomas Soome #define PXE_OPCODE_STATISTICS  0x000B
141*f334afcfSToomas Soome 
142*f334afcfSToomas Soome ///
143*f334afcfSToomas Soome /// Convert multicast IP address to multicast MAC address.
144*f334afcfSToomas Soome ///
145*f334afcfSToomas Soome #define PXE_OPCODE_MCAST_IP_TO_MAC  0x000C
146*f334afcfSToomas Soome 
147*f334afcfSToomas Soome ///
148*f334afcfSToomas Soome /// Read or change non-volatile storage on the NIC.
149*f334afcfSToomas Soome ///
150*f334afcfSToomas Soome #define PXE_OPCODE_NVDATA  0x000D
151*f334afcfSToomas Soome 
152*f334afcfSToomas Soome ///
153*f334afcfSToomas Soome /// Get & clear interrupt status.
154*f334afcfSToomas Soome ///
155*f334afcfSToomas Soome #define PXE_OPCODE_GET_STATUS  0x000E
156*f334afcfSToomas Soome 
157*f334afcfSToomas Soome ///
158*f334afcfSToomas Soome /// Fill media header in packet for transmit.
159*f334afcfSToomas Soome ///
160*f334afcfSToomas Soome #define PXE_OPCODE_FILL_HEADER  0x000F
161*f334afcfSToomas Soome 
162*f334afcfSToomas Soome ///
163*f334afcfSToomas Soome /// Transmit packet(s).
164*f334afcfSToomas Soome ///
165*f334afcfSToomas Soome #define PXE_OPCODE_TRANSMIT  0x0010
166*f334afcfSToomas Soome 
167*f334afcfSToomas Soome ///
168*f334afcfSToomas Soome /// Receive packet.
169*f334afcfSToomas Soome ///
170*f334afcfSToomas Soome #define PXE_OPCODE_RECEIVE  0x0011
171*f334afcfSToomas Soome 
172*f334afcfSToomas Soome ///
173*f334afcfSToomas Soome /// Last valid PXE UNDI OpCode number.
174*f334afcfSToomas Soome ///
175*f334afcfSToomas Soome #define PXE_OPCODE_LAST_VALID  0x0011
176*f334afcfSToomas Soome 
177*f334afcfSToomas Soome typedef PXE_UINT16 PXE_OPFLAGS;
178*f334afcfSToomas Soome 
179*f334afcfSToomas Soome #define PXE_OPFLAGS_NOT_USED  0x0000
180*f334afcfSToomas Soome 
181*f334afcfSToomas Soome //
182*f334afcfSToomas Soome // //////////////////////////////////////
183*f334afcfSToomas Soome // UNDI Get State
184*f334afcfSToomas Soome //
185*f334afcfSToomas Soome // No OpFlags
186*f334afcfSToomas Soome 
187*f334afcfSToomas Soome ////////////////////////////////////////
188*f334afcfSToomas Soome // UNDI Start
189*f334afcfSToomas Soome //
190*f334afcfSToomas Soome // No OpFlags
191*f334afcfSToomas Soome 
192*f334afcfSToomas Soome ////////////////////////////////////////
193*f334afcfSToomas Soome // UNDI Stop
194*f334afcfSToomas Soome //
195*f334afcfSToomas Soome // No OpFlags
196*f334afcfSToomas Soome 
197*f334afcfSToomas Soome ////////////////////////////////////////
198*f334afcfSToomas Soome // UNDI Get Init Info
199*f334afcfSToomas Soome //
200*f334afcfSToomas Soome // No Opflags
201*f334afcfSToomas Soome 
202*f334afcfSToomas Soome ////////////////////////////////////////
203*f334afcfSToomas Soome // UNDI Get Config Info
204*f334afcfSToomas Soome //
205*f334afcfSToomas Soome // No Opflags
206*f334afcfSToomas Soome 
207*f334afcfSToomas Soome ///
208*f334afcfSToomas Soome /// UNDI Initialize
209*f334afcfSToomas Soome ///
210*f334afcfSToomas Soome #define PXE_OPFLAGS_INITIALIZE_CABLE_DETECT_MASK    0x0001
211*f334afcfSToomas Soome #define PXE_OPFLAGS_INITIALIZE_DETECT_CABLE         0x0000
212*f334afcfSToomas Soome #define PXE_OPFLAGS_INITIALIZE_DO_NOT_DETECT_CABLE  0x0001
213*f334afcfSToomas Soome 
214*f334afcfSToomas Soome ///
215*f334afcfSToomas Soome ///
216*f334afcfSToomas Soome /// UNDI Reset
217*f334afcfSToomas Soome ///
218*f334afcfSToomas Soome #define PXE_OPFLAGS_RESET_DISABLE_INTERRUPTS  0x0001
219*f334afcfSToomas Soome #define PXE_OPFLAGS_RESET_DISABLE_FILTERS     0x0002
220*f334afcfSToomas Soome 
221*f334afcfSToomas Soome ///
222*f334afcfSToomas Soome /// UNDI Shutdown.
223*f334afcfSToomas Soome ///
224*f334afcfSToomas Soome /// No OpFlags.
225*f334afcfSToomas Soome 
226*f334afcfSToomas Soome ///
227*f334afcfSToomas Soome /// UNDI Interrupt Enables.
228*f334afcfSToomas Soome ///
229*f334afcfSToomas Soome ///
230*f334afcfSToomas Soome /// Select whether to enable or disable external interrupt signals.
231*f334afcfSToomas Soome /// Setting both enable and disable will return PXE_STATCODE_INVALID_OPFLAGS.
232*f334afcfSToomas Soome ///
233*f334afcfSToomas Soome #define PXE_OPFLAGS_INTERRUPT_OPMASK   0xC000
234*f334afcfSToomas Soome #define PXE_OPFLAGS_INTERRUPT_ENABLE   0x8000
235*f334afcfSToomas Soome #define PXE_OPFLAGS_INTERRUPT_DISABLE  0x4000
236*f334afcfSToomas Soome #define PXE_OPFLAGS_INTERRUPT_READ     0x0000
237*f334afcfSToomas Soome 
238*f334afcfSToomas Soome ///
239*f334afcfSToomas Soome /// Enable receive interrupts.  An external interrupt will be generated
240*f334afcfSToomas Soome /// after a complete non-error packet has been received.
241*f334afcfSToomas Soome ///
242*f334afcfSToomas Soome #define PXE_OPFLAGS_INTERRUPT_RECEIVE  0x0001
243*f334afcfSToomas Soome 
244*f334afcfSToomas Soome ///
245*f334afcfSToomas Soome /// Enable transmit interrupts.  An external interrupt will be generated
246*f334afcfSToomas Soome /// after a complete non-error packet has been transmitted.
247*f334afcfSToomas Soome ///
248*f334afcfSToomas Soome #define PXE_OPFLAGS_INTERRUPT_TRANSMIT  0x0002
249*f334afcfSToomas Soome 
250*f334afcfSToomas Soome ///
251*f334afcfSToomas Soome /// Enable command interrupts.  An external interrupt will be generated
252*f334afcfSToomas Soome /// when command execution stops.
253*f334afcfSToomas Soome ///
254*f334afcfSToomas Soome #define PXE_OPFLAGS_INTERRUPT_COMMAND  0x0004
255*f334afcfSToomas Soome 
256*f334afcfSToomas Soome ///
257*f334afcfSToomas Soome /// Generate software interrupt.  Setting this bit generates an external
258*f334afcfSToomas Soome /// interrupt, if it is supported by the hardware.
259*f334afcfSToomas Soome ///
260*f334afcfSToomas Soome #define PXE_OPFLAGS_INTERRUPT_SOFTWARE  0x0008
261*f334afcfSToomas Soome 
262*f334afcfSToomas Soome ///
263*f334afcfSToomas Soome /// UNDI Receive Filters.
264*f334afcfSToomas Soome ///
265*f334afcfSToomas Soome ///
266*f334afcfSToomas Soome /// Select whether to enable or disable receive filters.
267*f334afcfSToomas Soome /// Setting both enable and disable will return PXE_STATCODE_INVALID_OPCODE.
268*f334afcfSToomas Soome ///
269*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_OPMASK   0xC000
270*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_ENABLE   0x8000
271*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_DISABLE  0x4000
272*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_READ     0x0000
273*f334afcfSToomas Soome 
274*f334afcfSToomas Soome ///
275*f334afcfSToomas Soome /// To reset the contents of the multicast MAC address filter list,
276*f334afcfSToomas Soome /// set this OpFlag:
277*f334afcfSToomas Soome ///
278*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_RESET_MCAST_LIST  0x2000
279*f334afcfSToomas Soome 
280*f334afcfSToomas Soome ///
281*f334afcfSToomas Soome /// Enable unicast packet receiving.  Packets sent to the current station
282*f334afcfSToomas Soome /// MAC address will be received.
283*f334afcfSToomas Soome ///
284*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_UNICAST  0x0001
285*f334afcfSToomas Soome 
286*f334afcfSToomas Soome ///
287*f334afcfSToomas Soome /// Enable broadcast packet receiving.  Packets sent to the broadcast
288*f334afcfSToomas Soome /// MAC address will be received.
289*f334afcfSToomas Soome ///
290*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_BROADCAST  0x0002
291*f334afcfSToomas Soome 
292*f334afcfSToomas Soome ///
293*f334afcfSToomas Soome /// Enable filtered multicast packet receiving.  Packets sent to any
294*f334afcfSToomas Soome /// of the multicast MAC addresses in the multicast MAC address filter
295*f334afcfSToomas Soome /// list will be received.  If the filter list is empty, no multicast
296*f334afcfSToomas Soome ///
297*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST  0x0004
298*f334afcfSToomas Soome 
299*f334afcfSToomas Soome ///
300*f334afcfSToomas Soome /// Enable promiscuous packet receiving.  All packets will be received.
301*f334afcfSToomas Soome ///
302*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_PROMISCUOUS  0x0008
303*f334afcfSToomas Soome 
304*f334afcfSToomas Soome ///
305*f334afcfSToomas Soome /// Enable promiscuous multicast packet receiving.  All multicast
306*f334afcfSToomas Soome /// packets will be received.
307*f334afcfSToomas Soome ///
308*f334afcfSToomas Soome #define PXE_OPFLAGS_RECEIVE_FILTER_ALL_MULTICAST  0x0010
309*f334afcfSToomas Soome 
310*f334afcfSToomas Soome ///
311*f334afcfSToomas Soome /// UNDI Station Address.
312*f334afcfSToomas Soome ///
313*f334afcfSToomas Soome #define PXE_OPFLAGS_STATION_ADDRESS_READ   0x0000
314*f334afcfSToomas Soome #define PXE_OPFLAGS_STATION_ADDRESS_WRITE  0x0000
315*f334afcfSToomas Soome #define PXE_OPFLAGS_STATION_ADDRESS_RESET  0x0001
316*f334afcfSToomas Soome 
317*f334afcfSToomas Soome ///
318*f334afcfSToomas Soome /// UNDI Statistics.
319*f334afcfSToomas Soome ///
320*f334afcfSToomas Soome #define PXE_OPFLAGS_STATISTICS_READ   0x0000
321*f334afcfSToomas Soome #define PXE_OPFLAGS_STATISTICS_RESET  0x0001
322*f334afcfSToomas Soome 
323*f334afcfSToomas Soome ///
324*f334afcfSToomas Soome /// UNDI MCast IP to MAC.
325*f334afcfSToomas Soome ///
326*f334afcfSToomas Soome ///
327*f334afcfSToomas Soome /// Identify the type of IP address in the CPB.
328*f334afcfSToomas Soome ///
329*f334afcfSToomas Soome #define PXE_OPFLAGS_MCAST_IP_TO_MAC_OPMASK  0x0003
330*f334afcfSToomas Soome #define PXE_OPFLAGS_MCAST_IPV4_TO_MAC       0x0000
331*f334afcfSToomas Soome #define PXE_OPFLAGS_MCAST_IPV6_TO_MAC       0x0001
332*f334afcfSToomas Soome 
333*f334afcfSToomas Soome ///
334*f334afcfSToomas Soome /// UNDI NvData.
335*f334afcfSToomas Soome ///
336*f334afcfSToomas Soome ///
337*f334afcfSToomas Soome /// Select the type of non-volatile data operation.
338*f334afcfSToomas Soome ///
339*f334afcfSToomas Soome #define PXE_OPFLAGS_NVDATA_OPMASK  0x0001
340*f334afcfSToomas Soome #define PXE_OPFLAGS_NVDATA_READ    0x0000
341*f334afcfSToomas Soome #define PXE_OPFLAGS_NVDATA_WRITE   0x0001
342*f334afcfSToomas Soome 
343*f334afcfSToomas Soome ///
344*f334afcfSToomas Soome /// UNDI Get Status.
345*f334afcfSToomas Soome ///
346*f334afcfSToomas Soome ///
347*f334afcfSToomas Soome /// Return current interrupt status.  This will also clear any interrupts
348*f334afcfSToomas Soome /// that are currently set.  This can be used in a polling routine.  The
349*f334afcfSToomas Soome /// interrupt flags are still set and cleared even when the interrupts
350*f334afcfSToomas Soome /// are disabled.
351*f334afcfSToomas Soome ///
352*f334afcfSToomas Soome #define PXE_OPFLAGS_GET_INTERRUPT_STATUS  0x0001
353*f334afcfSToomas Soome 
354*f334afcfSToomas Soome ///
355*f334afcfSToomas Soome /// Return list of transmitted buffers for recycling.  Transmit buffers
356*f334afcfSToomas Soome /// must not be changed or unallocated until they have recycled.  After
357*f334afcfSToomas Soome /// issuing a transmit command, wait for a transmit complete interrupt.
358*f334afcfSToomas Soome /// When a transmit complete interrupt is received, read the transmitted
359*f334afcfSToomas Soome /// buffers.  Do not plan on getting one buffer per interrupt.  Some
360*f334afcfSToomas Soome /// NICs and UNDIs may transmit multiple buffers per interrupt.
361*f334afcfSToomas Soome ///
362*f334afcfSToomas Soome #define PXE_OPFLAGS_GET_TRANSMITTED_BUFFERS  0x0002
363*f334afcfSToomas Soome 
364*f334afcfSToomas Soome ///
365*f334afcfSToomas Soome /// Return current media status.
366*f334afcfSToomas Soome ///
367*f334afcfSToomas Soome #define PXE_OPFLAGS_GET_MEDIA_STATUS  0x0004
368*f334afcfSToomas Soome 
369*f334afcfSToomas Soome ///
370*f334afcfSToomas Soome /// UNDI Fill Header.
371*f334afcfSToomas Soome ///
372*f334afcfSToomas Soome #define PXE_OPFLAGS_FILL_HEADER_OPMASK      0x0001
373*f334afcfSToomas Soome #define PXE_OPFLAGS_FILL_HEADER_FRAGMENTED  0x0001
374*f334afcfSToomas Soome #define PXE_OPFLAGS_FILL_HEADER_WHOLE       0x0000
375*f334afcfSToomas Soome 
376*f334afcfSToomas Soome ///
377*f334afcfSToomas Soome /// UNDI Transmit.
378*f334afcfSToomas Soome ///
379*f334afcfSToomas Soome ///
380*f334afcfSToomas Soome /// S/W UNDI only.  Return after the packet has been transmitted.  A
381*f334afcfSToomas Soome /// transmit complete interrupt will still be generated and the transmit
382*f334afcfSToomas Soome /// buffer will have to be recycled.
383*f334afcfSToomas Soome ///
384*f334afcfSToomas Soome #define PXE_OPFLAGS_SWUNDI_TRANSMIT_OPMASK  0x0001
385*f334afcfSToomas Soome #define PXE_OPFLAGS_TRANSMIT_BLOCK          0x0001
386*f334afcfSToomas Soome #define PXE_OPFLAGS_TRANSMIT_DONT_BLOCK     0x0000
387*f334afcfSToomas Soome 
388*f334afcfSToomas Soome #define PXE_OPFLAGS_TRANSMIT_OPMASK      0x0002
389*f334afcfSToomas Soome #define PXE_OPFLAGS_TRANSMIT_FRAGMENTED  0x0002
390*f334afcfSToomas Soome #define PXE_OPFLAGS_TRANSMIT_WHOLE       0x0000
391*f334afcfSToomas Soome 
392*f334afcfSToomas Soome ///
393*f334afcfSToomas Soome /// UNDI Receive.
394*f334afcfSToomas Soome ///
395*f334afcfSToomas Soome /// No OpFlags.
396*f334afcfSToomas Soome ///
397*f334afcfSToomas Soome 
398*f334afcfSToomas Soome ///
399*f334afcfSToomas Soome /// PXE STATFLAGS.
400*f334afcfSToomas Soome ///
401*f334afcfSToomas Soome typedef PXE_UINT16 PXE_STATFLAGS;
402*f334afcfSToomas Soome 
403*f334afcfSToomas Soome #define PXE_STATFLAGS_INITIALIZE  0x0000
404*f334afcfSToomas Soome 
405*f334afcfSToomas Soome ///
406*f334afcfSToomas Soome /// Common StatFlags that can be returned by all commands.
407*f334afcfSToomas Soome ///
408*f334afcfSToomas Soome ///
409*f334afcfSToomas Soome /// The COMMAND_COMPLETE and COMMAND_FAILED status flags must be
410*f334afcfSToomas Soome /// implemented by all UNDIs.  COMMAND_QUEUED is only needed by UNDIs
411*f334afcfSToomas Soome /// that support command queuing.
412*f334afcfSToomas Soome ///
413*f334afcfSToomas Soome #define PXE_STATFLAGS_STATUS_MASK       0xC000
414*f334afcfSToomas Soome #define PXE_STATFLAGS_COMMAND_COMPLETE  0xC000
415*f334afcfSToomas Soome #define PXE_STATFLAGS_COMMAND_FAILED    0x8000
416*f334afcfSToomas Soome #define PXE_STATFLAGS_COMMAND_QUEUED    0x4000
417*f334afcfSToomas Soome 
418*f334afcfSToomas Soome ///
419*f334afcfSToomas Soome /// UNDI Get State.
420*f334afcfSToomas Soome ///
421*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATE_MASK         0x0003
422*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATE_INITIALIZED  0x0002
423*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATE_STARTED      0x0001
424*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATE_STOPPED      0x0000
425*f334afcfSToomas Soome 
426*f334afcfSToomas Soome ///
427*f334afcfSToomas Soome /// UNDI Start.
428*f334afcfSToomas Soome ///
429*f334afcfSToomas Soome /// No additional StatFlags.
430*f334afcfSToomas Soome ///
431*f334afcfSToomas Soome 
432*f334afcfSToomas Soome ///
433*f334afcfSToomas Soome /// UNDI Get Init Info.
434*f334afcfSToomas Soome ///
435*f334afcfSToomas Soome #define PXE_STATFLAGS_CABLE_DETECT_MASK           0x0001
436*f334afcfSToomas Soome #define PXE_STATFLAGS_CABLE_DETECT_NOT_SUPPORTED  0x0000
437*f334afcfSToomas Soome #define PXE_STATFLAGS_CABLE_DETECT_SUPPORTED      0x0001
438*f334afcfSToomas Soome 
439*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_NO_MEDIA_MASK           0x0002
440*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_NO_MEDIA_NOT_SUPPORTED  0x0000
441*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED      0x0002
442*f334afcfSToomas Soome 
443*f334afcfSToomas Soome ///
444*f334afcfSToomas Soome /// UNDI Initialize.
445*f334afcfSToomas Soome ///
446*f334afcfSToomas Soome #define PXE_STATFLAGS_INITIALIZED_NO_MEDIA  0x0001
447*f334afcfSToomas Soome 
448*f334afcfSToomas Soome ///
449*f334afcfSToomas Soome /// UNDI Reset.
450*f334afcfSToomas Soome ///
451*f334afcfSToomas Soome #define PXE_STATFLAGS_RESET_NO_MEDIA  0x0001
452*f334afcfSToomas Soome 
453*f334afcfSToomas Soome ///
454*f334afcfSToomas Soome /// UNDI Shutdown.
455*f334afcfSToomas Soome ///
456*f334afcfSToomas Soome /// No additional StatFlags.
457*f334afcfSToomas Soome 
458*f334afcfSToomas Soome ///
459*f334afcfSToomas Soome /// UNDI Interrupt Enables.
460*f334afcfSToomas Soome ///
461*f334afcfSToomas Soome ///
462*f334afcfSToomas Soome /// If set, receive interrupts are enabled.
463*f334afcfSToomas Soome ///
464*f334afcfSToomas Soome #define PXE_STATFLAGS_INTERRUPT_RECEIVE  0x0001
465*f334afcfSToomas Soome 
466*f334afcfSToomas Soome ///
467*f334afcfSToomas Soome /// If set, transmit interrupts are enabled.
468*f334afcfSToomas Soome ///
469*f334afcfSToomas Soome #define PXE_STATFLAGS_INTERRUPT_TRANSMIT  0x0002
470*f334afcfSToomas Soome 
471*f334afcfSToomas Soome ///
472*f334afcfSToomas Soome /// If set, command interrupts are enabled.
473*f334afcfSToomas Soome ///
474*f334afcfSToomas Soome #define PXE_STATFLAGS_INTERRUPT_COMMAND  0x0004
475*f334afcfSToomas Soome 
476*f334afcfSToomas Soome ///
477*f334afcfSToomas Soome /// UNDI Receive Filters.
478*f334afcfSToomas Soome ///
479*f334afcfSToomas Soome 
480*f334afcfSToomas Soome ///
481*f334afcfSToomas Soome /// If set, unicast packets will be received.
482*f334afcfSToomas Soome ///
483*f334afcfSToomas Soome #define PXE_STATFLAGS_RECEIVE_FILTER_UNICAST  0x0001
484*f334afcfSToomas Soome 
485*f334afcfSToomas Soome ///
486*f334afcfSToomas Soome /// If set, broadcast packets will be received.
487*f334afcfSToomas Soome ///
488*f334afcfSToomas Soome #define PXE_STATFLAGS_RECEIVE_FILTER_BROADCAST  0x0002
489*f334afcfSToomas Soome 
490*f334afcfSToomas Soome ///
491*f334afcfSToomas Soome /// If set, multicast packets that match up with the multicast address
492*f334afcfSToomas Soome /// filter list will be received.
493*f334afcfSToomas Soome ///
494*f334afcfSToomas Soome #define PXE_STATFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST  0x0004
495*f334afcfSToomas Soome 
496*f334afcfSToomas Soome ///
497*f334afcfSToomas Soome /// If set, all packets will be received.
498*f334afcfSToomas Soome ///
499*f334afcfSToomas Soome #define PXE_STATFLAGS_RECEIVE_FILTER_PROMISCUOUS  0x0008
500*f334afcfSToomas Soome 
501*f334afcfSToomas Soome ///
502*f334afcfSToomas Soome /// If set, all multicast packets will be received.
503*f334afcfSToomas Soome ///
504*f334afcfSToomas Soome #define PXE_STATFLAGS_RECEIVE_FILTER_ALL_MULTICAST  0x0010
505*f334afcfSToomas Soome 
506*f334afcfSToomas Soome ///
507*f334afcfSToomas Soome /// UNDI Station Address.
508*f334afcfSToomas Soome ///
509*f334afcfSToomas Soome /// No additional StatFlags.
510*f334afcfSToomas Soome ///
511*f334afcfSToomas Soome 
512*f334afcfSToomas Soome ///
513*f334afcfSToomas Soome /// UNDI Statistics.
514*f334afcfSToomas Soome ///
515*f334afcfSToomas Soome /// No additional StatFlags.
516*f334afcfSToomas Soome ///
517*f334afcfSToomas Soome 
518*f334afcfSToomas Soome ///
519*f334afcfSToomas Soome //// UNDI MCast IP to MAC.
520*f334afcfSToomas Soome ////
521*f334afcfSToomas Soome //// No additional StatFlags.
522*f334afcfSToomas Soome 
523*f334afcfSToomas Soome ///
524*f334afcfSToomas Soome /// UNDI NvData.
525*f334afcfSToomas Soome ///
526*f334afcfSToomas Soome /// No additional StatFlags.
527*f334afcfSToomas Soome ///
528*f334afcfSToomas Soome 
529*f334afcfSToomas Soome ///
530*f334afcfSToomas Soome /// UNDI Get Status.
531*f334afcfSToomas Soome ///
532*f334afcfSToomas Soome 
533*f334afcfSToomas Soome ///
534*f334afcfSToomas Soome /// Use to determine if an interrupt has occurred.
535*f334afcfSToomas Soome ///
536*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_INTERRUPT_MASK  0x000F
537*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_NO_INTERRUPTS   0x0000
538*f334afcfSToomas Soome 
539*f334afcfSToomas Soome ///
540*f334afcfSToomas Soome /// If set, at least one receive interrupt occurred.
541*f334afcfSToomas Soome ///
542*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_RECEIVE  0x0001
543*f334afcfSToomas Soome 
544*f334afcfSToomas Soome ///
545*f334afcfSToomas Soome /// If set, at least one transmit interrupt occurred.
546*f334afcfSToomas Soome ///
547*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_TRANSMIT  0x0002
548*f334afcfSToomas Soome 
549*f334afcfSToomas Soome ///
550*f334afcfSToomas Soome /// If set, at least one command interrupt occurred.
551*f334afcfSToomas Soome ///
552*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_COMMAND  0x0004
553*f334afcfSToomas Soome 
554*f334afcfSToomas Soome ///
555*f334afcfSToomas Soome /// If set, at least one software interrupt occurred.
556*f334afcfSToomas Soome ///
557*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_SOFTWARE  0x0008
558*f334afcfSToomas Soome 
559*f334afcfSToomas Soome ///
560*f334afcfSToomas Soome /// This flag is set if the transmitted buffer queue is empty.  This flag
561*f334afcfSToomas Soome /// will be set if all transmitted buffer addresses get written into the DB.
562*f334afcfSToomas Soome ///
563*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_TXBUF_QUEUE_EMPTY  0x0010
564*f334afcfSToomas Soome 
565*f334afcfSToomas Soome ///
566*f334afcfSToomas Soome /// This flag is set if no transmitted buffer addresses were written
567*f334afcfSToomas Soome /// into the DB.  (This could be because DBsize was too small.)
568*f334afcfSToomas Soome ///
569*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_NO_TXBUFS_WRITTEN  0x0020
570*f334afcfSToomas Soome 
571*f334afcfSToomas Soome ///
572*f334afcfSToomas Soome /// This flag is set if there is no media detected.
573*f334afcfSToomas Soome ///
574*f334afcfSToomas Soome #define PXE_STATFLAGS_GET_STATUS_NO_MEDIA  0x0040
575*f334afcfSToomas Soome 
576*f334afcfSToomas Soome ///
577*f334afcfSToomas Soome /// UNDI Fill Header.
578*f334afcfSToomas Soome ///
579*f334afcfSToomas Soome /// No additional StatFlags.
580*f334afcfSToomas Soome ///
581*f334afcfSToomas Soome 
582*f334afcfSToomas Soome ///
583*f334afcfSToomas Soome /// UNDI Transmit.
584*f334afcfSToomas Soome ///
585*f334afcfSToomas Soome /// No additional StatFlags.
586*f334afcfSToomas Soome 
587*f334afcfSToomas Soome ///
588*f334afcfSToomas Soome /// UNDI Receive
589*f334afcfSToomas Soome /// .
590*f334afcfSToomas Soome 
591*f334afcfSToomas Soome ///
592*f334afcfSToomas Soome /// No additional StatFlags.
593*f334afcfSToomas Soome ///
594*f334afcfSToomas Soome typedef PXE_UINT16 PXE_STATCODE;
595*f334afcfSToomas Soome 
596*f334afcfSToomas Soome #define PXE_STATCODE_INITIALIZE  0x0000
597*f334afcfSToomas Soome 
598*f334afcfSToomas Soome ///
599*f334afcfSToomas Soome /// Common StatCodes returned by all UNDI commands, UNDI protocol functions
600*f334afcfSToomas Soome /// and BC protocol functions.
601*f334afcfSToomas Soome ///
602*f334afcfSToomas Soome #define PXE_STATCODE_SUCCESS  0x0000
603*f334afcfSToomas Soome 
604*f334afcfSToomas Soome #define PXE_STATCODE_INVALID_CDB          0x0001
605*f334afcfSToomas Soome #define PXE_STATCODE_INVALID_CPB          0x0002
606*f334afcfSToomas Soome #define PXE_STATCODE_BUSY                 0x0003
607*f334afcfSToomas Soome #define PXE_STATCODE_QUEUE_FULL           0x0004
608*f334afcfSToomas Soome #define PXE_STATCODE_ALREADY_STARTED      0x0005
609*f334afcfSToomas Soome #define PXE_STATCODE_NOT_STARTED          0x0006
610*f334afcfSToomas Soome #define PXE_STATCODE_NOT_SHUTDOWN         0x0007
611*f334afcfSToomas Soome #define PXE_STATCODE_ALREADY_INITIALIZED  0x0008
612*f334afcfSToomas Soome #define PXE_STATCODE_NOT_INITIALIZED      0x0009
613*f334afcfSToomas Soome #define PXE_STATCODE_DEVICE_FAILURE       0x000A
614*f334afcfSToomas Soome #define PXE_STATCODE_NVDATA_FAILURE       0x000B
615*f334afcfSToomas Soome #define PXE_STATCODE_UNSUPPORTED          0x000C
616*f334afcfSToomas Soome #define PXE_STATCODE_BUFFER_FULL          0x000D
617*f334afcfSToomas Soome #define PXE_STATCODE_INVALID_PARAMETER    0x000E
618*f334afcfSToomas Soome #define PXE_STATCODE_INVALID_UNDI         0x000F
619*f334afcfSToomas Soome #define PXE_STATCODE_IPV4_NOT_SUPPORTED   0x0010
620*f334afcfSToomas Soome #define PXE_STATCODE_IPV6_NOT_SUPPORTED   0x0011
621*f334afcfSToomas Soome #define PXE_STATCODE_NOT_ENOUGH_MEMORY    0x0012
622*f334afcfSToomas Soome #define PXE_STATCODE_NO_DATA              0x0013
623*f334afcfSToomas Soome 
624*f334afcfSToomas Soome typedef PXE_UINT16 PXE_IFNUM;
625*f334afcfSToomas Soome 
626*f334afcfSToomas Soome ///
627*f334afcfSToomas Soome /// This interface number must be passed to the S/W UNDI Start command.
628*f334afcfSToomas Soome ///
629*f334afcfSToomas Soome #define PXE_IFNUM_START  0x0000
630*f334afcfSToomas Soome 
631*f334afcfSToomas Soome ///
632*f334afcfSToomas Soome /// This interface number is returned by the S/W UNDI Get State and
633*f334afcfSToomas Soome /// Start commands if information in the CDB, CPB or DB is invalid.
634*f334afcfSToomas Soome ///
635*f334afcfSToomas Soome #define PXE_IFNUM_INVALID  0x0000
636*f334afcfSToomas Soome 
637*f334afcfSToomas Soome typedef PXE_UINT16 PXE_CONTROL;
638*f334afcfSToomas Soome 
639*f334afcfSToomas Soome ///
640*f334afcfSToomas Soome /// Setting this flag directs the UNDI to queue this command for later
641*f334afcfSToomas Soome /// execution if the UNDI is busy and it supports command queuing.
642*f334afcfSToomas Soome /// If queuing is not supported, a PXE_STATCODE_INVALID_CONTROL error
643*f334afcfSToomas Soome /// is returned.  If the queue is full, a PXE_STATCODE_CDB_QUEUE_FULL
644*f334afcfSToomas Soome /// error is returned.
645*f334afcfSToomas Soome ///
646*f334afcfSToomas Soome #define PXE_CONTROL_QUEUE_IF_BUSY  0x0002
647*f334afcfSToomas Soome 
648*f334afcfSToomas Soome ///
649*f334afcfSToomas Soome /// These two bit values are used to determine if there are more UNDI
650*f334afcfSToomas Soome /// CDB structures following this one.  If the link bit is set, there
651*f334afcfSToomas Soome /// must be a CDB structure following this one.  Execution will start
652*f334afcfSToomas Soome /// on the next CDB structure as soon as this one completes successfully.
653*f334afcfSToomas Soome /// If an error is generated by this command, execution will stop.
654*f334afcfSToomas Soome ///
655*f334afcfSToomas Soome #define PXE_CONTROL_LINK              0x0001
656*f334afcfSToomas Soome #define PXE_CONTROL_LAST_CDB_IN_LIST  0x0000
657*f334afcfSToomas Soome 
658*f334afcfSToomas Soome typedef PXE_UINT8 PXE_FRAME_TYPE;
659*f334afcfSToomas Soome 
660*f334afcfSToomas Soome #define PXE_FRAME_TYPE_NONE                   0x00
661*f334afcfSToomas Soome #define PXE_FRAME_TYPE_UNICAST                0x01
662*f334afcfSToomas Soome #define PXE_FRAME_TYPE_BROADCAST              0x02
663*f334afcfSToomas Soome #define PXE_FRAME_TYPE_FILTERED_MULTICAST     0x03
664*f334afcfSToomas Soome #define PXE_FRAME_TYPE_PROMISCUOUS            0x04
665*f334afcfSToomas Soome #define PXE_FRAME_TYPE_PROMISCUOUS_MULTICAST  0x05
666*f334afcfSToomas Soome 
667*f334afcfSToomas Soome #define PXE_FRAME_TYPE_MULTICAST  PXE_FRAME_TYPE_FILTERED_MULTICAST
668*f334afcfSToomas Soome 
669*f334afcfSToomas Soome typedef PXE_UINT32 PXE_IPV4;
670*f334afcfSToomas Soome 
671*f334afcfSToomas Soome typedef PXE_UINT32 PXE_IPV6[4];
672*f334afcfSToomas Soome #define PXE_MAC_LENGTH  32
673*f334afcfSToomas Soome 
674*f334afcfSToomas Soome typedef PXE_UINT8 PXE_MAC_ADDR[PXE_MAC_LENGTH];
675*f334afcfSToomas Soome 
676*f334afcfSToomas Soome typedef PXE_UINT8 PXE_IFTYPE;
677*f334afcfSToomas Soome typedef UINT16    PXE_MEDIA_PROTOCOL;
678*f334afcfSToomas Soome 
679*f334afcfSToomas Soome ///
680*f334afcfSToomas Soome /// This information is from the ARP section of RFC 1700.
681*f334afcfSToomas Soome ///
682*f334afcfSToomas Soome ///     1 Ethernet (10Mb)                                    [JBP]
683*f334afcfSToomas Soome ///     2 Experimental Ethernet (3Mb)                        [JBP]
684*f334afcfSToomas Soome ///     3 Amateur Radio AX.25                                [PXK]
685*f334afcfSToomas Soome ///     4 Proteon ProNET Token Ring                          [JBP]
686*f334afcfSToomas Soome ///     5 Chaos                                              [GXP]
687*f334afcfSToomas Soome ///     6 IEEE 802 Networks                                  [JBP]
688*f334afcfSToomas Soome ///     7 ARCNET                                             [JBP]
689*f334afcfSToomas Soome ///     8 Hyperchannel                                       [JBP]
690*f334afcfSToomas Soome ///     9 Lanstar                                             [TU]
691*f334afcfSToomas Soome ///    10 Autonet Short Address                             [MXB1]
692*f334afcfSToomas Soome ///    11 LocalTalk                                         [JKR1]
693*f334afcfSToomas Soome ///    12 LocalNet (IBM* PCNet or SYTEK* LocalNET)           [JXM]
694*f334afcfSToomas Soome ///    13 Ultra link                                        [RXD2]
695*f334afcfSToomas Soome ///    14 SMDS                                              [GXC1]
696*f334afcfSToomas Soome ///    15 Frame Relay                                        [AGM]
697*f334afcfSToomas Soome ///    16 Asynchronous Transmission Mode (ATM)              [JXB2]
698*f334afcfSToomas Soome ///    17 HDLC                                               [JBP]
699*f334afcfSToomas Soome ///    18 Fibre Channel                            [Yakov Rekhter]
700*f334afcfSToomas Soome ///    19 Asynchronous Transmission Mode (ATM)      [Mark Laubach]
701*f334afcfSToomas Soome ///    20 Serial Line                                        [JBP]
702*f334afcfSToomas Soome ///    21 Asynchronous Transmission Mode (ATM)              [MXB1]
703*f334afcfSToomas Soome ///
704*f334afcfSToomas Soome /// * Other names and brands may be claimed as the property of others.
705*f334afcfSToomas Soome ///
706*f334afcfSToomas Soome #define PXE_IFTYPE_ETHERNET       0x01
707*f334afcfSToomas Soome #define PXE_IFTYPE_TOKENRING      0x04
708*f334afcfSToomas Soome #define PXE_IFTYPE_FIBRE_CHANNEL  0x12
709*f334afcfSToomas Soome 
710*f334afcfSToomas Soome typedef struct s_pxe_hw_undi {
711*f334afcfSToomas Soome   PXE_UINT32    Signature;      ///< PXE_ROMID_SIGNATURE.
712*f334afcfSToomas Soome   PXE_UINT8     Len;            ///< sizeof(PXE_HW_UNDI).
713*f334afcfSToomas Soome   PXE_UINT8     Fudge;          ///< makes 8-bit cksum equal zero.
714*f334afcfSToomas Soome   PXE_UINT8     Rev;            ///< PXE_ROMID_REV.
715*f334afcfSToomas Soome   PXE_UINT8     IFcnt;          ///< physical connector count lower byte.
716*f334afcfSToomas Soome   PXE_UINT8     MajorVer;       ///< PXE_ROMID_MAJORVER.
717*f334afcfSToomas Soome   PXE_UINT8     MinorVer;       ///< PXE_ROMID_MINORVER.
718*f334afcfSToomas Soome   PXE_UINT8     IFcntExt;       ///< physical connector count upper byte.
719*f334afcfSToomas Soome   PXE_UINT8     reserved;       ///< zero, not used.
720*f334afcfSToomas Soome   PXE_UINT32    Implementation; ///< implementation flags.
721*f334afcfSToomas Soome   ///< reserved             ///< vendor use.
722*f334afcfSToomas Soome   ///< UINT32 Status;       ///< status port.
723*f334afcfSToomas Soome   ///< UINT32 Command;      ///< command port.
724*f334afcfSToomas Soome   ///< UINT64 CDBaddr;      ///< CDB address port.
725*f334afcfSToomas Soome   ///<
726*f334afcfSToomas Soome } PXE_HW_UNDI;
727*f334afcfSToomas Soome 
728*f334afcfSToomas Soome ///
729*f334afcfSToomas Soome /// Status port bit definitions.
730*f334afcfSToomas Soome ///
731*f334afcfSToomas Soome 
732*f334afcfSToomas Soome ///
733*f334afcfSToomas Soome /// UNDI operation state.
734*f334afcfSToomas Soome ///
735*f334afcfSToomas Soome #define PXE_HWSTAT_STATE_MASK   0xC0000000
736*f334afcfSToomas Soome #define PXE_HWSTAT_BUSY         0xC0000000
737*f334afcfSToomas Soome #define PXE_HWSTAT_INITIALIZED  0x80000000
738*f334afcfSToomas Soome #define PXE_HWSTAT_STARTED      0x40000000
739*f334afcfSToomas Soome #define PXE_HWSTAT_STOPPED      0x00000000
740*f334afcfSToomas Soome 
741*f334afcfSToomas Soome ///
742*f334afcfSToomas Soome /// If set, last command failed.
743*f334afcfSToomas Soome ///
744*f334afcfSToomas Soome #define PXE_HWSTAT_COMMAND_FAILED  0x20000000
745*f334afcfSToomas Soome 
746*f334afcfSToomas Soome ///
747*f334afcfSToomas Soome /// If set, identifies enabled receive filters.
748*f334afcfSToomas Soome ///
749*f334afcfSToomas Soome #define PXE_HWSTAT_PROMISCUOUS_MULTICAST_RX_ENABLED  0x00001000
750*f334afcfSToomas Soome #define PXE_HWSTAT_PROMISCUOUS_RX_ENABLED            0x00000800
751*f334afcfSToomas Soome #define PXE_HWSTAT_BROADCAST_RX_ENABLED              0x00000400
752*f334afcfSToomas Soome #define PXE_HWSTAT_MULTICAST_RX_ENABLED              0x00000200
753*f334afcfSToomas Soome #define PXE_HWSTAT_UNICAST_RX_ENABLED                0x00000100
754*f334afcfSToomas Soome 
755*f334afcfSToomas Soome ///
756*f334afcfSToomas Soome /// If set, identifies enabled external interrupts.
757*f334afcfSToomas Soome ///
758*f334afcfSToomas Soome #define PXE_HWSTAT_SOFTWARE_INT_ENABLED      0x00000080
759*f334afcfSToomas Soome #define PXE_HWSTAT_TX_COMPLETE_INT_ENABLED   0x00000040
760*f334afcfSToomas Soome #define PXE_HWSTAT_PACKET_RX_INT_ENABLED     0x00000020
761*f334afcfSToomas Soome #define PXE_HWSTAT_CMD_COMPLETE_INT_ENABLED  0x00000010
762*f334afcfSToomas Soome 
763*f334afcfSToomas Soome ///
764*f334afcfSToomas Soome /// If set, identifies pending interrupts.
765*f334afcfSToomas Soome ///
766*f334afcfSToomas Soome #define PXE_HWSTAT_SOFTWARE_INT_PENDING      0x00000008
767*f334afcfSToomas Soome #define PXE_HWSTAT_TX_COMPLETE_INT_PENDING   0x00000004
768*f334afcfSToomas Soome #define PXE_HWSTAT_PACKET_RX_INT_PENDING     0x00000002
769*f334afcfSToomas Soome #define PXE_HWSTAT_CMD_COMPLETE_INT_PENDING  0x00000001
770*f334afcfSToomas Soome 
771*f334afcfSToomas Soome ///
772*f334afcfSToomas Soome /// Command port definitions.
773*f334afcfSToomas Soome ///
774*f334afcfSToomas Soome 
775*f334afcfSToomas Soome ///
776*f334afcfSToomas Soome /// If set, CDB identified in CDBaddr port is given to UNDI.
777*f334afcfSToomas Soome /// If not set, other bits in this word will be processed.
778*f334afcfSToomas Soome ///
779*f334afcfSToomas Soome #define PXE_HWCMD_ISSUE_COMMAND   0x80000000
780*f334afcfSToomas Soome #define PXE_HWCMD_INTS_AND_FILTS  0x00000000
781*f334afcfSToomas Soome 
782*f334afcfSToomas Soome ///
783*f334afcfSToomas Soome /// Use these to enable/disable receive filters.
784*f334afcfSToomas Soome ///
785*f334afcfSToomas Soome #define PXE_HWCMD_PROMISCUOUS_MULTICAST_RX_ENABLE  0x00001000
786*f334afcfSToomas Soome #define PXE_HWCMD_PROMISCUOUS_RX_ENABLE            0x00000800
787*f334afcfSToomas Soome #define PXE_HWCMD_BROADCAST_RX_ENABLE              0x00000400
788*f334afcfSToomas Soome #define PXE_HWCMD_MULTICAST_RX_ENABLE              0x00000200
789*f334afcfSToomas Soome #define PXE_HWCMD_UNICAST_RX_ENABLE                0x00000100
790*f334afcfSToomas Soome 
791*f334afcfSToomas Soome ///
792*f334afcfSToomas Soome /// Use these to enable/disable external interrupts.
793*f334afcfSToomas Soome ///
794*f334afcfSToomas Soome #define PXE_HWCMD_SOFTWARE_INT_ENABLE      0x00000080
795*f334afcfSToomas Soome #define PXE_HWCMD_TX_COMPLETE_INT_ENABLE   0x00000040
796*f334afcfSToomas Soome #define PXE_HWCMD_PACKET_RX_INT_ENABLE     0x00000020
797*f334afcfSToomas Soome #define PXE_HWCMD_CMD_COMPLETE_INT_ENABLE  0x00000010
798*f334afcfSToomas Soome 
799*f334afcfSToomas Soome ///
800*f334afcfSToomas Soome /// Use these to clear pending external interrupts.
801*f334afcfSToomas Soome ///
802*f334afcfSToomas Soome #define PXE_HWCMD_CLEAR_SOFTWARE_INT      0x00000008
803*f334afcfSToomas Soome #define PXE_HWCMD_CLEAR_TX_COMPLETE_INT   0x00000004
804*f334afcfSToomas Soome #define PXE_HWCMD_CLEAR_PACKET_RX_INT     0x00000002
805*f334afcfSToomas Soome #define PXE_HWCMD_CLEAR_CMD_COMPLETE_INT  0x00000001
806*f334afcfSToomas Soome 
807*f334afcfSToomas Soome typedef struct s_pxe_sw_undi {
808*f334afcfSToomas Soome   PXE_UINT32    Signature;      ///< PXE_ROMID_SIGNATURE.
809*f334afcfSToomas Soome   PXE_UINT8     Len;            ///< sizeof(PXE_SW_UNDI).
810*f334afcfSToomas Soome   PXE_UINT8     Fudge;          ///< makes 8-bit cksum zero.
811*f334afcfSToomas Soome   PXE_UINT8     Rev;            ///< PXE_ROMID_REV.
812*f334afcfSToomas Soome   PXE_UINT8     IFcnt;          ///< physical connector count lower byte.
813*f334afcfSToomas Soome   PXE_UINT8     MajorVer;       ///< PXE_ROMID_MAJORVER.
814*f334afcfSToomas Soome   PXE_UINT8     MinorVer;       ///< PXE_ROMID_MINORVER.
815*f334afcfSToomas Soome   PXE_UINT8     IFcntExt;       ///< physical connector count upper byte.
816*f334afcfSToomas Soome   PXE_UINT8     reserved1;      ///< zero, not used.
817*f334afcfSToomas Soome   PXE_UINT32    Implementation; ///< Implementation flags.
818*f334afcfSToomas Soome   PXE_UINT64    EntryPoint;     ///< API entry point.
819*f334afcfSToomas Soome   PXE_UINT8     reserved2[3];   ///< zero, not used.
820*f334afcfSToomas Soome   PXE_UINT8     BusCnt;         ///< number of bustypes supported.
821*f334afcfSToomas Soome   PXE_UINT32    BusType[1];     ///< list of supported bustypes.
822*f334afcfSToomas Soome } PXE_SW_UNDI;
823*f334afcfSToomas Soome 
824*f334afcfSToomas Soome typedef union u_pxe_undi {
825*f334afcfSToomas Soome   PXE_HW_UNDI    hw;
826*f334afcfSToomas Soome   PXE_SW_UNDI    sw;
827*f334afcfSToomas Soome } PXE_UNDI;
828*f334afcfSToomas Soome 
829*f334afcfSToomas Soome ///
830*f334afcfSToomas Soome /// Signature of !PXE structure.
831*f334afcfSToomas Soome ///
832*f334afcfSToomas Soome #define PXE_ROMID_SIGNATURE  PXE_BUSTYPE ('!', 'P', 'X', 'E')
833*f334afcfSToomas Soome 
834*f334afcfSToomas Soome ///
835*f334afcfSToomas Soome /// !PXE structure format revision
836*f334afcfSToomas Soome /// .
837*f334afcfSToomas Soome #define PXE_ROMID_REV  0x02
838*f334afcfSToomas Soome 
839*f334afcfSToomas Soome ///
840*f334afcfSToomas Soome /// UNDI command interface revision.  These are the values that get sent
841*f334afcfSToomas Soome /// in option 94 (Client Network Interface Identifier) in the DHCP Discover
842*f334afcfSToomas Soome /// and PXE Boot Server Request packets.
843*f334afcfSToomas Soome ///
844*f334afcfSToomas Soome #define PXE_ROMID_MAJORVER  0x03
845*f334afcfSToomas Soome #define PXE_ROMID_MINORVER  0x01
846*f334afcfSToomas Soome 
847*f334afcfSToomas Soome ///
848*f334afcfSToomas Soome /// Implementation flags.
849*f334afcfSToomas Soome ///
850*f334afcfSToomas Soome #define PXE_ROMID_IMP_HW_UNDI                             0x80000000
851*f334afcfSToomas Soome #define PXE_ROMID_IMP_SW_VIRT_ADDR                        0x40000000
852*f334afcfSToomas Soome #define PXE_ROMID_IMP_64BIT_DEVICE                        0x00010000
853*f334afcfSToomas Soome #define PXE_ROMID_IMP_FRAG_SUPPORTED                      0x00008000
854*f334afcfSToomas Soome #define PXE_ROMID_IMP_CMD_LINK_SUPPORTED                  0x00004000
855*f334afcfSToomas Soome #define PXE_ROMID_IMP_CMD_QUEUE_SUPPORTED                 0x00002000
856*f334afcfSToomas Soome #define PXE_ROMID_IMP_MULTI_FRAME_SUPPORTED               0x00001000
857*f334afcfSToomas Soome #define PXE_ROMID_IMP_NVDATA_SUPPORT_MASK                 0x00000C00
858*f334afcfSToomas Soome #define PXE_ROMID_IMP_NVDATA_BULK_WRITABLE                0x00000C00
859*f334afcfSToomas Soome #define PXE_ROMID_IMP_NVDATA_SPARSE_WRITABLE              0x00000800
860*f334afcfSToomas Soome #define PXE_ROMID_IMP_NVDATA_READ_ONLY                    0x00000400
861*f334afcfSToomas Soome #define PXE_ROMID_IMP_NVDATA_NOT_AVAILABLE                0x00000000
862*f334afcfSToomas Soome #define PXE_ROMID_IMP_STATISTICS_SUPPORTED                0x00000200
863*f334afcfSToomas Soome #define PXE_ROMID_IMP_STATION_ADDR_SETTABLE               0x00000100
864*f334afcfSToomas Soome #define PXE_ROMID_IMP_PROMISCUOUS_MULTICAST_RX_SUPPORTED  0x00000080
865*f334afcfSToomas Soome #define PXE_ROMID_IMP_PROMISCUOUS_RX_SUPPORTED            0x00000040
866*f334afcfSToomas Soome #define PXE_ROMID_IMP_BROADCAST_RX_SUPPORTED              0x00000020
867*f334afcfSToomas Soome #define PXE_ROMID_IMP_FILTERED_MULTICAST_RX_SUPPORTED     0x00000010
868*f334afcfSToomas Soome #define PXE_ROMID_IMP_SOFTWARE_INT_SUPPORTED              0x00000008
869*f334afcfSToomas Soome #define PXE_ROMID_IMP_TX_COMPLETE_INT_SUPPORTED           0x00000004
870*f334afcfSToomas Soome #define PXE_ROMID_IMP_PACKET_RX_INT_SUPPORTED             0x00000002
871*f334afcfSToomas Soome #define PXE_ROMID_IMP_CMD_COMPLETE_INT_SUPPORTED          0x00000001
872*f334afcfSToomas Soome 
873*f334afcfSToomas Soome typedef struct s_pxe_cdb {
874*f334afcfSToomas Soome   PXE_OPCODE       OpCode;
875*f334afcfSToomas Soome   PXE_OPFLAGS      OpFlags;
876*f334afcfSToomas Soome   PXE_UINT16       CPBsize;
877*f334afcfSToomas Soome   PXE_UINT16       DBsize;
878*f334afcfSToomas Soome   PXE_UINT64       CPBaddr;
879*f334afcfSToomas Soome   PXE_UINT64       DBaddr;
880*f334afcfSToomas Soome   PXE_STATCODE     StatCode;
881*f334afcfSToomas Soome   PXE_STATFLAGS    StatFlags;
882*f334afcfSToomas Soome   PXE_UINT16       IFnum;
883*f334afcfSToomas Soome   PXE_CONTROL      Control;
884*f334afcfSToomas Soome } PXE_CDB;
885*f334afcfSToomas Soome 
886*f334afcfSToomas Soome typedef union u_pxe_ip_addr {
887*f334afcfSToomas Soome   PXE_IPV6    IPv6;
888*f334afcfSToomas Soome   PXE_IPV4    IPv4;
889*f334afcfSToomas Soome } PXE_IP_ADDR;
890*f334afcfSToomas Soome 
891*f334afcfSToomas Soome typedef union pxe_device {
892*f334afcfSToomas Soome   ///
893*f334afcfSToomas Soome   /// PCI and PC Card NICs are both identified using bus, device
894*f334afcfSToomas Soome   /// and function numbers.  For PC Card, this may require PC
895*f334afcfSToomas Soome   /// Card services to be loaded in the BIOS or preboot
896*f334afcfSToomas Soome   /// environment.
897*f334afcfSToomas Soome   ///
898*f334afcfSToomas Soome   struct {
899*f334afcfSToomas Soome     ///
900*f334afcfSToomas Soome     /// See S/W UNDI ROMID structure definition for PCI and
901*f334afcfSToomas Soome     /// PCC BusType definitions.
902*f334afcfSToomas Soome     ///
903*f334afcfSToomas Soome     PXE_UINT32    BusType;
904*f334afcfSToomas Soome 
905*f334afcfSToomas Soome     ///
906*f334afcfSToomas Soome     /// Bus, device & function numbers that locate this device.
907*f334afcfSToomas Soome     ///
908*f334afcfSToomas Soome     PXE_UINT16    Bus;
909*f334afcfSToomas Soome     PXE_UINT8     Device;
910*f334afcfSToomas Soome     PXE_UINT8     Function;
911*f334afcfSToomas Soome   } PCI, PCC;
912*f334afcfSToomas Soome } PXE_DEVICE;
913*f334afcfSToomas Soome 
914*f334afcfSToomas Soome ///
915*f334afcfSToomas Soome /// cpb and db definitions
916*f334afcfSToomas Soome ///
917*f334afcfSToomas Soome #define MAX_PCI_CONFIG_LEN     64  ///< # of dwords.
918*f334afcfSToomas Soome #define MAX_EEPROM_LEN         128 ///< # of dwords.
919*f334afcfSToomas Soome #define MAX_XMIT_BUFFERS       32  ///< recycling Q length for xmit_done.
920*f334afcfSToomas Soome #define MAX_MCAST_ADDRESS_CNT  8
921*f334afcfSToomas Soome 
922*f334afcfSToomas Soome typedef struct s_pxe_cpb_start_30 {
923*f334afcfSToomas Soome   ///
924*f334afcfSToomas Soome   /// PXE_VOID Delay(UINTN microseconds);
925*f334afcfSToomas Soome   ///
926*f334afcfSToomas Soome   /// UNDI will never request a delay smaller than 10 microseconds
927*f334afcfSToomas Soome   /// and will always request delays in increments of 10 microseconds.
928*f334afcfSToomas Soome   /// The Delay() CallBack routine must delay between n and n + 10
929*f334afcfSToomas Soome   /// microseconds before returning control to the UNDI.
930*f334afcfSToomas Soome   ///
931*f334afcfSToomas Soome   /// This field cannot be set to zero.
932*f334afcfSToomas Soome   ///
933*f334afcfSToomas Soome   UINT64    Delay;
934*f334afcfSToomas Soome 
935*f334afcfSToomas Soome   ///
936*f334afcfSToomas Soome   /// PXE_VOID Block(UINT32 enable);
937*f334afcfSToomas Soome   ///
938*f334afcfSToomas Soome   /// UNDI may need to block multi-threaded/multi-processor access to
939*f334afcfSToomas Soome   /// critical code sections when programming or accessing the network
940*f334afcfSToomas Soome   /// device.  To this end, a blocking service is needed by the UNDI.
941*f334afcfSToomas Soome   /// When UNDI needs a block, it will call Block() passing a non-zero
942*f334afcfSToomas Soome   /// value.  When UNDI no longer needs a block, it will call Block()
943*f334afcfSToomas Soome   /// with a zero value.  When called, if the Block() is already enabled,
944*f334afcfSToomas Soome   /// do not return control to the UNDI until the previous Block() is
945*f334afcfSToomas Soome   /// disabled.
946*f334afcfSToomas Soome   ///
947*f334afcfSToomas Soome   /// This field cannot be set to zero.
948*f334afcfSToomas Soome   ///
949*f334afcfSToomas Soome   UINT64    Block;
950*f334afcfSToomas Soome 
951*f334afcfSToomas Soome   ///
952*f334afcfSToomas Soome   /// PXE_VOID Virt2Phys(UINT64 virtual, UINT64 physical_ptr);
953*f334afcfSToomas Soome   ///
954*f334afcfSToomas Soome   /// UNDI will pass the virtual address of a buffer and the virtual
955*f334afcfSToomas Soome   /// address of a 64-bit physical buffer.  Convert the virtual address
956*f334afcfSToomas Soome   /// to a physical address and write the result to the physical address
957*f334afcfSToomas Soome   /// buffer.  If virtual and physical addresses are the same, just
958*f334afcfSToomas Soome   /// copy the virtual address to the physical address buffer.
959*f334afcfSToomas Soome   ///
960*f334afcfSToomas Soome   /// This field can be set to zero if virtual and physical addresses
961*f334afcfSToomas Soome   /// are equal.
962*f334afcfSToomas Soome   ///
963*f334afcfSToomas Soome   UINT64    Virt2Phys;
964*f334afcfSToomas Soome   ///
965*f334afcfSToomas Soome   /// PXE_VOID Mem_IO(UINT8 read_write, UINT8 len, UINT64 port,
966*f334afcfSToomas Soome   ///              UINT64 buf_addr);
967*f334afcfSToomas Soome   ///
968*f334afcfSToomas Soome   /// UNDI will read or write the device io space using this call back
969*f334afcfSToomas Soome   /// function. It passes the number of bytes as the len parameter and it
970*f334afcfSToomas Soome   /// will be either 1,2,4 or 8.
971*f334afcfSToomas Soome   ///
972*f334afcfSToomas Soome   /// This field can not be set to zero.
973*f334afcfSToomas Soome   ///
974*f334afcfSToomas Soome   UINT64    Mem_IO;
975*f334afcfSToomas Soome } PXE_CPB_START_30;
976*f334afcfSToomas Soome 
977*f334afcfSToomas Soome typedef struct s_pxe_cpb_start_31 {
978*f334afcfSToomas Soome   ///
979*f334afcfSToomas Soome   /// PXE_VOID Delay(UINT64 UnqId, UINTN microseconds);
980*f334afcfSToomas Soome   ///
981*f334afcfSToomas Soome   /// UNDI will never request a delay smaller than 10 microseconds
982*f334afcfSToomas Soome   /// and will always request delays in increments of 10 microseconds.
983*f334afcfSToomas Soome   /// The Delay() CallBack routine must delay between n and n + 10
984*f334afcfSToomas Soome   /// microseconds before returning control to the UNDI.
985*f334afcfSToomas Soome   ///
986*f334afcfSToomas Soome   /// This field cannot be set to zero.
987*f334afcfSToomas Soome   ///
988*f334afcfSToomas Soome   UINT64    Delay;
989*f334afcfSToomas Soome 
990*f334afcfSToomas Soome   ///
991*f334afcfSToomas Soome   /// PXE_VOID Block(UINT64 unq_id, UINT32 enable);
992*f334afcfSToomas Soome   ///
993*f334afcfSToomas Soome   /// UNDI may need to block multi-threaded/multi-processor access to
994*f334afcfSToomas Soome   /// critical code sections when programming or accessing the network
995*f334afcfSToomas Soome   /// device.  To this end, a blocking service is needed by the UNDI.
996*f334afcfSToomas Soome   /// When UNDI needs a block, it will call Block() passing a non-zero
997*f334afcfSToomas Soome   /// value.  When UNDI no longer needs a block, it will call Block()
998*f334afcfSToomas Soome   /// with a zero value.  When called, if the Block() is already enabled,
999*f334afcfSToomas Soome   /// do not return control to the UNDI until the previous Block() is
1000*f334afcfSToomas Soome   /// disabled.
1001*f334afcfSToomas Soome   ///
1002*f334afcfSToomas Soome   /// This field cannot be set to zero.
1003*f334afcfSToomas Soome   ///
1004*f334afcfSToomas Soome   UINT64    Block;
1005*f334afcfSToomas Soome 
1006*f334afcfSToomas Soome   ///
1007*f334afcfSToomas Soome   /// PXE_VOID Virt2Phys(UINT64 UnqId, UINT64 virtual, UINT64 physical_ptr);
1008*f334afcfSToomas Soome   ///
1009*f334afcfSToomas Soome   /// UNDI will pass the virtual address of a buffer and the virtual
1010*f334afcfSToomas Soome   /// address of a 64-bit physical buffer.  Convert the virtual address
1011*f334afcfSToomas Soome   /// to a physical address and write the result to the physical address
1012*f334afcfSToomas Soome   /// buffer.  If virtual and physical addresses are the same, just
1013*f334afcfSToomas Soome   /// copy the virtual address to the physical address buffer.
1014*f334afcfSToomas Soome   ///
1015*f334afcfSToomas Soome   /// This field can be set to zero if virtual and physical addresses
1016*f334afcfSToomas Soome   /// are equal.
1017*f334afcfSToomas Soome   ///
1018*f334afcfSToomas Soome   UINT64    Virt2Phys;
1019*f334afcfSToomas Soome   ///
1020*f334afcfSToomas Soome   /// PXE_VOID Mem_IO(UINT64 UnqId, UINT8 read_write, UINT8 len, UINT64 port,
1021*f334afcfSToomas Soome   ///              UINT64 buf_addr);
1022*f334afcfSToomas Soome   ///
1023*f334afcfSToomas Soome   /// UNDI will read or write the device io space using this call back
1024*f334afcfSToomas Soome   /// function. It passes the number of bytes as the len parameter and it
1025*f334afcfSToomas Soome   /// will be either 1,2,4 or 8.
1026*f334afcfSToomas Soome   ///
1027*f334afcfSToomas Soome   /// This field can not be set to zero.
1028*f334afcfSToomas Soome   ///
1029*f334afcfSToomas Soome   UINT64    Mem_IO;
1030*f334afcfSToomas Soome   ///
1031*f334afcfSToomas Soome   /// PXE_VOID Map_Mem(UINT64 unq_id, UINT64 virtual_addr, UINT32 size,
1032*f334afcfSToomas Soome   ///                 UINT32 Direction, UINT64 mapped_addr);
1033*f334afcfSToomas Soome   ///
1034*f334afcfSToomas Soome   /// UNDI will pass the virtual address of a buffer, direction of the data
1035*f334afcfSToomas Soome   /// flow from/to the mapped buffer (the constants are defined below)
1036*f334afcfSToomas Soome   /// and a place holder (pointer) for the mapped address.
1037*f334afcfSToomas Soome   /// This call will Map the given address to a physical DMA address and write
1038*f334afcfSToomas Soome   /// the result to the mapped_addr pointer.  If there is no need to
1039*f334afcfSToomas Soome   /// map the given address to a lower address (i.e. the given address is
1040*f334afcfSToomas Soome   /// associated with a physical address that is already compatible to be
1041*f334afcfSToomas Soome   /// used with the DMA, it converts the given virtual address to it's
1042*f334afcfSToomas Soome   /// physical address and write that in the mapped address pointer.
1043*f334afcfSToomas Soome   ///
1044*f334afcfSToomas Soome   /// This field can be set to zero if there is no mapping service available.
1045*f334afcfSToomas Soome   ///
1046*f334afcfSToomas Soome   UINT64    Map_Mem;
1047*f334afcfSToomas Soome 
1048*f334afcfSToomas Soome   ///
1049*f334afcfSToomas Soome   /// PXE_VOID UnMap_Mem(UINT64 unq_id, UINT64 virtual_addr, UINT32 size,
1050*f334afcfSToomas Soome   ///            UINT32 Direction, UINT64 mapped_addr);
1051*f334afcfSToomas Soome   ///
1052*f334afcfSToomas Soome   /// UNDI will pass the virtual and mapped addresses of a buffer.
1053*f334afcfSToomas Soome   /// This call will un map the given address.
1054*f334afcfSToomas Soome   ///
1055*f334afcfSToomas Soome   /// This field can be set to zero if there is no unmapping service available.
1056*f334afcfSToomas Soome   ///
1057*f334afcfSToomas Soome   UINT64    UnMap_Mem;
1058*f334afcfSToomas Soome 
1059*f334afcfSToomas Soome   ///
1060*f334afcfSToomas Soome   /// PXE_VOID Sync_Mem(UINT64 unq_id, UINT64 virtual,
1061*f334afcfSToomas Soome   ///            UINT32 size, UINT32 Direction, UINT64 mapped_addr);
1062*f334afcfSToomas Soome   ///
1063*f334afcfSToomas Soome   /// UNDI will pass the virtual and mapped addresses of a buffer.
1064*f334afcfSToomas Soome   /// This call will synchronize the contents of both the virtual and mapped.
1065*f334afcfSToomas Soome   /// buffers for the given Direction.
1066*f334afcfSToomas Soome   ///
1067*f334afcfSToomas Soome   /// This field can be set to zero if there is no service available.
1068*f334afcfSToomas Soome   ///
1069*f334afcfSToomas Soome   UINT64    Sync_Mem;
1070*f334afcfSToomas Soome 
1071*f334afcfSToomas Soome   ///
1072*f334afcfSToomas Soome   /// protocol driver can provide anything for this Unique_ID, UNDI remembers
1073*f334afcfSToomas Soome   /// that as just a 64bit value associated to the interface specified by
1074*f334afcfSToomas Soome   /// the ifnum and gives it back as a parameter to all the call-back routines
1075*f334afcfSToomas Soome   /// when calling for that interface!
1076*f334afcfSToomas Soome   ///
1077*f334afcfSToomas Soome   UINT64    Unique_ID;
1078*f334afcfSToomas Soome } PXE_CPB_START_31;
1079*f334afcfSToomas Soome 
1080*f334afcfSToomas Soome #define TO_AND_FROM_DEVICE  0
1081*f334afcfSToomas Soome #define FROM_DEVICE         1
1082*f334afcfSToomas Soome #define TO_DEVICE           2
1083*f334afcfSToomas Soome 
1084*f334afcfSToomas Soome #define PXE_DELAY_MILLISECOND  1000
1085*f334afcfSToomas Soome #define PXE_DELAY_SECOND       1000000
1086*f334afcfSToomas Soome #define PXE_IO_READ            0
1087*f334afcfSToomas Soome #define PXE_IO_WRITE           1
1088*f334afcfSToomas Soome #define PXE_MEM_READ           2
1089*f334afcfSToomas Soome #define PXE_MEM_WRITE          4
1090*f334afcfSToomas Soome 
1091*f334afcfSToomas Soome typedef struct s_pxe_db_get_init_info {
1092*f334afcfSToomas Soome   ///
1093*f334afcfSToomas Soome   /// Minimum length of locked memory buffer that must be given to
1094*f334afcfSToomas Soome   /// the Initialize command. Giving UNDI more memory will generally
1095*f334afcfSToomas Soome   /// give better performance.
1096*f334afcfSToomas Soome   ///
1097*f334afcfSToomas Soome   /// If MemoryRequired is zero, the UNDI does not need and will not
1098*f334afcfSToomas Soome   /// use system memory to receive and transmit packets.
1099*f334afcfSToomas Soome   ///
1100*f334afcfSToomas Soome   PXE_UINT32    MemoryRequired;
1101*f334afcfSToomas Soome 
1102*f334afcfSToomas Soome   ///
1103*f334afcfSToomas Soome   /// Maximum frame data length for Tx/Rx excluding the media header.
1104*f334afcfSToomas Soome   ///
1105*f334afcfSToomas Soome   PXE_UINT32    FrameDataLen;
1106*f334afcfSToomas Soome 
1107*f334afcfSToomas Soome   ///
1108*f334afcfSToomas Soome   /// Supported link speeds are in units of mega bits.  Common ethernet
1109*f334afcfSToomas Soome   /// values are 10, 100 and 1000.  Unused LinkSpeeds[] entries are zero
1110*f334afcfSToomas Soome   /// filled.
1111*f334afcfSToomas Soome   ///
1112*f334afcfSToomas Soome   PXE_UINT32    LinkSpeeds[4];
1113*f334afcfSToomas Soome 
1114*f334afcfSToomas Soome   ///
1115*f334afcfSToomas Soome   /// Number of non-volatile storage items.
1116*f334afcfSToomas Soome   ///
1117*f334afcfSToomas Soome   PXE_UINT32    NvCount;
1118*f334afcfSToomas Soome 
1119*f334afcfSToomas Soome   ///
1120*f334afcfSToomas Soome   /// Width of non-volatile storage item in bytes.  0, 1, 2 or 4
1121*f334afcfSToomas Soome   ///
1122*f334afcfSToomas Soome   PXE_UINT16    NvWidth;
1123*f334afcfSToomas Soome 
1124*f334afcfSToomas Soome   ///
1125*f334afcfSToomas Soome   /// Media header length.  This is the typical media header length for
1126*f334afcfSToomas Soome   /// this UNDI.  This information is needed when allocating receive
1127*f334afcfSToomas Soome   /// and transmit buffers.
1128*f334afcfSToomas Soome   ///
1129*f334afcfSToomas Soome   PXE_UINT16    MediaHeaderLen;
1130*f334afcfSToomas Soome 
1131*f334afcfSToomas Soome   ///
1132*f334afcfSToomas Soome   /// Number of bytes in the NIC hardware (MAC) address.
1133*f334afcfSToomas Soome   ///
1134*f334afcfSToomas Soome   PXE_UINT16    HWaddrLen;
1135*f334afcfSToomas Soome 
1136*f334afcfSToomas Soome   ///
1137*f334afcfSToomas Soome   /// Maximum number of multicast MAC addresses in the multicast
1138*f334afcfSToomas Soome   /// MAC address filter list.
1139*f334afcfSToomas Soome   ///
1140*f334afcfSToomas Soome   PXE_UINT16    MCastFilterCnt;
1141*f334afcfSToomas Soome 
1142*f334afcfSToomas Soome   ///
1143*f334afcfSToomas Soome   /// Default number and size of transmit and receive buffers that will
1144*f334afcfSToomas Soome   /// be allocated by the UNDI.  If MemoryRequired is non-zero, this
1145*f334afcfSToomas Soome   /// allocation will come out of the memory buffer given to the Initialize
1146*f334afcfSToomas Soome   /// command.  If MemoryRequired is zero, this allocation will come out of
1147*f334afcfSToomas Soome   /// memory on the NIC.
1148*f334afcfSToomas Soome   ///
1149*f334afcfSToomas Soome   PXE_UINT16    TxBufCnt;
1150*f334afcfSToomas Soome   PXE_UINT16    TxBufSize;
1151*f334afcfSToomas Soome   PXE_UINT16    RxBufCnt;
1152*f334afcfSToomas Soome   PXE_UINT16    RxBufSize;
1153*f334afcfSToomas Soome 
1154*f334afcfSToomas Soome   ///
1155*f334afcfSToomas Soome   /// Hardware interface types defined in the Assigned Numbers RFC
1156*f334afcfSToomas Soome   /// and used in DHCP and ARP packets.
1157*f334afcfSToomas Soome   /// See the PXE_IFTYPE typedef and PXE_IFTYPE_xxx macros.
1158*f334afcfSToomas Soome   ///
1159*f334afcfSToomas Soome   PXE_UINT8     IFtype;
1160*f334afcfSToomas Soome 
1161*f334afcfSToomas Soome   ///
1162*f334afcfSToomas Soome   /// Supported duplex.  See PXE_DUPLEX_xxxxx #defines below.
1163*f334afcfSToomas Soome   ///
1164*f334afcfSToomas Soome   PXE_UINT8     SupportedDuplexModes;
1165*f334afcfSToomas Soome 
1166*f334afcfSToomas Soome   ///
1167*f334afcfSToomas Soome   /// Supported loopback options.  See PXE_LOOPBACK_xxxxx #defines below.
1168*f334afcfSToomas Soome   ///
1169*f334afcfSToomas Soome   PXE_UINT8     SupportedLoopBackModes;
1170*f334afcfSToomas Soome } PXE_DB_GET_INIT_INFO;
1171*f334afcfSToomas Soome 
1172*f334afcfSToomas Soome #define PXE_MAX_TXRX_UNIT_ETHER  1500
1173*f334afcfSToomas Soome 
1174*f334afcfSToomas Soome #define PXE_HWADDR_LEN_ETHER      0x0006
1175*f334afcfSToomas Soome #define PXE_MAC_HEADER_LEN_ETHER  0x000E
1176*f334afcfSToomas Soome 
1177*f334afcfSToomas Soome #define PXE_DUPLEX_ENABLE_FULL_SUPPORTED  1
1178*f334afcfSToomas Soome #define PXE_DUPLEX_FORCE_FULL_SUPPORTED   2
1179*f334afcfSToomas Soome 
1180*f334afcfSToomas Soome #define PXE_LOOPBACK_INTERNAL_SUPPORTED  1
1181*f334afcfSToomas Soome #define PXE_LOOPBACK_EXTERNAL_SUPPORTED  2
1182*f334afcfSToomas Soome 
1183*f334afcfSToomas Soome typedef struct s_pxe_pci_config_info {
1184*f334afcfSToomas Soome   ///
1185*f334afcfSToomas Soome   /// This is the flag field for the PXE_DB_GET_CONFIG_INFO union.
1186*f334afcfSToomas Soome   /// For PCI bus devices, this field is set to PXE_BUSTYPE_PCI.
1187*f334afcfSToomas Soome   ///
1188*f334afcfSToomas Soome   UINT32    BusType;
1189*f334afcfSToomas Soome 
1190*f334afcfSToomas Soome   ///
1191*f334afcfSToomas Soome   /// This identifies the PCI network device that this UNDI interface.
1192*f334afcfSToomas Soome   /// is bound to.
1193*f334afcfSToomas Soome   ///
1194*f334afcfSToomas Soome   UINT16    Bus;
1195*f334afcfSToomas Soome   UINT8     Device;
1196*f334afcfSToomas Soome   UINT8     Function;
1197*f334afcfSToomas Soome 
1198*f334afcfSToomas Soome   ///
1199*f334afcfSToomas Soome   /// This is a copy of the PCI configuration space for this
1200*f334afcfSToomas Soome   /// network device.
1201*f334afcfSToomas Soome   ///
1202*f334afcfSToomas Soome   union {
1203*f334afcfSToomas Soome     UINT8     Byte[256];
1204*f334afcfSToomas Soome     UINT16    Word[128];
1205*f334afcfSToomas Soome     UINT32    Dword[64];
1206*f334afcfSToomas Soome   } Config;
1207*f334afcfSToomas Soome } PXE_PCI_CONFIG_INFO;
1208*f334afcfSToomas Soome 
1209*f334afcfSToomas Soome typedef struct s_pxe_pcc_config_info {
1210*f334afcfSToomas Soome   ///
1211*f334afcfSToomas Soome   /// This is the flag field for the PXE_DB_GET_CONFIG_INFO union.
1212*f334afcfSToomas Soome   /// For PCC bus devices, this field is set to PXE_BUSTYPE_PCC.
1213*f334afcfSToomas Soome   ///
1214*f334afcfSToomas Soome   PXE_UINT32    BusType;
1215*f334afcfSToomas Soome 
1216*f334afcfSToomas Soome   ///
1217*f334afcfSToomas Soome   /// This identifies the PCC network device that this UNDI interface
1218*f334afcfSToomas Soome   /// is bound to.
1219*f334afcfSToomas Soome   ///
1220*f334afcfSToomas Soome   PXE_UINT16    Bus;
1221*f334afcfSToomas Soome   PXE_UINT8     Device;
1222*f334afcfSToomas Soome   PXE_UINT8     Function;
1223*f334afcfSToomas Soome 
1224*f334afcfSToomas Soome   ///
1225*f334afcfSToomas Soome   /// This is a copy of the PCC configuration space for this
1226*f334afcfSToomas Soome   /// network device.
1227*f334afcfSToomas Soome   ///
1228*f334afcfSToomas Soome   union {
1229*f334afcfSToomas Soome     PXE_UINT8     Byte[256];
1230*f334afcfSToomas Soome     PXE_UINT16    Word[128];
1231*f334afcfSToomas Soome     PXE_UINT32    Dword[64];
1232*f334afcfSToomas Soome   } Config;
1233*f334afcfSToomas Soome } PXE_PCC_CONFIG_INFO;
1234*f334afcfSToomas Soome 
1235*f334afcfSToomas Soome typedef union u_pxe_db_get_config_info {
1236*f334afcfSToomas Soome   PXE_PCI_CONFIG_INFO    pci;
1237*f334afcfSToomas Soome   PXE_PCC_CONFIG_INFO    pcc;
1238*f334afcfSToomas Soome } PXE_DB_GET_CONFIG_INFO;
1239*f334afcfSToomas Soome 
1240*f334afcfSToomas Soome typedef struct s_pxe_cpb_initialize {
1241*f334afcfSToomas Soome   ///
1242*f334afcfSToomas Soome   /// Address of first (lowest) byte of the memory buffer.  This buffer must
1243*f334afcfSToomas Soome   /// be in contiguous physical memory and cannot be swapped out.  The UNDI
1244*f334afcfSToomas Soome   /// will be using this for transmit and receive buffering.
1245*f334afcfSToomas Soome   ///
1246*f334afcfSToomas Soome   PXE_UINT64    MemoryAddr;
1247*f334afcfSToomas Soome 
1248*f334afcfSToomas Soome   ///
1249*f334afcfSToomas Soome   /// MemoryLength must be greater than or equal to MemoryRequired
1250*f334afcfSToomas Soome   /// returned by the Get Init Info command.
1251*f334afcfSToomas Soome   ///
1252*f334afcfSToomas Soome   PXE_UINT32    MemoryLength;
1253*f334afcfSToomas Soome 
1254*f334afcfSToomas Soome   ///
1255*f334afcfSToomas Soome   /// Desired link speed in Mbit/sec.  Common ethernet values are 10, 100
1256*f334afcfSToomas Soome   /// and 1000.  Setting a value of zero will auto-detect and/or use the
1257*f334afcfSToomas Soome   /// default link speed (operation depends on UNDI/NIC functionality).
1258*f334afcfSToomas Soome   ///
1259*f334afcfSToomas Soome   PXE_UINT32    LinkSpeed;
1260*f334afcfSToomas Soome 
1261*f334afcfSToomas Soome   ///
1262*f334afcfSToomas Soome   /// Suggested number and size of receive and transmit buffers to
1263*f334afcfSToomas Soome   /// allocate.  If MemoryAddr and MemoryLength are non-zero, this
1264*f334afcfSToomas Soome   /// allocation comes out of the supplied memory buffer.  If MemoryAddr
1265*f334afcfSToomas Soome   /// and MemoryLength are zero, this allocation comes out of memory
1266*f334afcfSToomas Soome   /// on the NIC.
1267*f334afcfSToomas Soome   ///
1268*f334afcfSToomas Soome   /// If these fields are set to zero, the UNDI will allocate buffer
1269*f334afcfSToomas Soome   /// counts and sizes as it sees fit.
1270*f334afcfSToomas Soome   ///
1271*f334afcfSToomas Soome   PXE_UINT16    TxBufCnt;
1272*f334afcfSToomas Soome   PXE_UINT16    TxBufSize;
1273*f334afcfSToomas Soome   PXE_UINT16    RxBufCnt;
1274*f334afcfSToomas Soome   PXE_UINT16    RxBufSize;
1275*f334afcfSToomas Soome 
1276*f334afcfSToomas Soome   ///
1277*f334afcfSToomas Soome   /// The following configuration parameters are optional and must be zero
1278*f334afcfSToomas Soome   /// to use the default values.
1279*f334afcfSToomas Soome   ///
1280*f334afcfSToomas Soome   PXE_UINT8     DuplexMode;
1281*f334afcfSToomas Soome 
1282*f334afcfSToomas Soome   PXE_UINT8     LoopBackMode;
1283*f334afcfSToomas Soome } PXE_CPB_INITIALIZE;
1284*f334afcfSToomas Soome 
1285*f334afcfSToomas Soome #define PXE_DUPLEX_DEFAULT       0x00
1286*f334afcfSToomas Soome #define PXE_FORCE_FULL_DUPLEX    0x01
1287*f334afcfSToomas Soome #define PXE_ENABLE_FULL_DUPLEX   0x02
1288*f334afcfSToomas Soome #define PXE_FORCE_HALF_DUPLEX    0x04
1289*f334afcfSToomas Soome #define PXE_DISABLE_FULL_DUPLEX  0x08
1290*f334afcfSToomas Soome 
1291*f334afcfSToomas Soome #define LOOPBACK_NORMAL    0
1292*f334afcfSToomas Soome #define LOOPBACK_INTERNAL  1
1293*f334afcfSToomas Soome #define LOOPBACK_EXTERNAL  2
1294*f334afcfSToomas Soome 
1295*f334afcfSToomas Soome typedef struct s_pxe_db_initialize {
1296*f334afcfSToomas Soome   ///
1297*f334afcfSToomas Soome   /// Actual amount of memory used from the supplied memory buffer.  This
1298*f334afcfSToomas Soome   /// may be less that the amount of memory suppllied and may be zero if
1299*f334afcfSToomas Soome   /// the UNDI and network device do not use external memory buffers.
1300*f334afcfSToomas Soome   ///
1301*f334afcfSToomas Soome   /// Memory used by the UNDI and network device is allocated from the
1302*f334afcfSToomas Soome   /// lowest memory buffer address.
1303*f334afcfSToomas Soome   ///
1304*f334afcfSToomas Soome   PXE_UINT32    MemoryUsed;
1305*f334afcfSToomas Soome 
1306*f334afcfSToomas Soome   ///
1307*f334afcfSToomas Soome   /// Actual number and size of receive and transmit buffers that were
1308*f334afcfSToomas Soome   /// allocated.
1309*f334afcfSToomas Soome   ///
1310*f334afcfSToomas Soome   PXE_UINT16    TxBufCnt;
1311*f334afcfSToomas Soome   PXE_UINT16    TxBufSize;
1312*f334afcfSToomas Soome   PXE_UINT16    RxBufCnt;
1313*f334afcfSToomas Soome   PXE_UINT16    RxBufSize;
1314*f334afcfSToomas Soome } PXE_DB_INITIALIZE;
1315*f334afcfSToomas Soome 
1316*f334afcfSToomas Soome typedef struct s_pxe_cpb_receive_filters {
1317*f334afcfSToomas Soome   ///
1318*f334afcfSToomas Soome   /// List of multicast MAC addresses.  This list, if present, will
1319*f334afcfSToomas Soome   /// replace the existing multicast MAC address filter list.
1320*f334afcfSToomas Soome   ///
1321*f334afcfSToomas Soome   PXE_MAC_ADDR    MCastList[MAX_MCAST_ADDRESS_CNT];
1322*f334afcfSToomas Soome } PXE_CPB_RECEIVE_FILTERS;
1323*f334afcfSToomas Soome 
1324*f334afcfSToomas Soome typedef struct s_pxe_db_receive_filters {
1325*f334afcfSToomas Soome   ///
1326*f334afcfSToomas Soome   /// Filtered multicast MAC address list.
1327*f334afcfSToomas Soome   ///
1328*f334afcfSToomas Soome   PXE_MAC_ADDR    MCastList[MAX_MCAST_ADDRESS_CNT];
1329*f334afcfSToomas Soome } PXE_DB_RECEIVE_FILTERS;
1330*f334afcfSToomas Soome 
1331*f334afcfSToomas Soome typedef struct s_pxe_cpb_station_address {
1332*f334afcfSToomas Soome   ///
1333*f334afcfSToomas Soome   /// If supplied and supported, the current station MAC address
1334*f334afcfSToomas Soome   /// will be changed.
1335*f334afcfSToomas Soome   ///
1336*f334afcfSToomas Soome   PXE_MAC_ADDR    StationAddr;
1337*f334afcfSToomas Soome } PXE_CPB_STATION_ADDRESS;
1338*f334afcfSToomas Soome 
1339*f334afcfSToomas Soome typedef struct s_pxe_dpb_station_address {
1340*f334afcfSToomas Soome   ///
1341*f334afcfSToomas Soome   /// Current station MAC address.
1342*f334afcfSToomas Soome   ///
1343*f334afcfSToomas Soome   PXE_MAC_ADDR    StationAddr;
1344*f334afcfSToomas Soome 
1345*f334afcfSToomas Soome   ///
1346*f334afcfSToomas Soome   /// Station broadcast MAC address.
1347*f334afcfSToomas Soome   ///
1348*f334afcfSToomas Soome   PXE_MAC_ADDR    BroadcastAddr;
1349*f334afcfSToomas Soome 
1350*f334afcfSToomas Soome   ///
1351*f334afcfSToomas Soome   /// Permanent station MAC address.
1352*f334afcfSToomas Soome   ///
1353*f334afcfSToomas Soome   PXE_MAC_ADDR    PermanentAddr;
1354*f334afcfSToomas Soome } PXE_DB_STATION_ADDRESS;
1355*f334afcfSToomas Soome 
1356*f334afcfSToomas Soome typedef struct s_pxe_db_statistics {
1357*f334afcfSToomas Soome   ///
1358*f334afcfSToomas Soome   /// Bit field identifying what statistic data is collected by the
1359*f334afcfSToomas Soome   /// UNDI/NIC.
1360*f334afcfSToomas Soome   /// If bit 0x00 is set, Data[0x00] is collected.
1361*f334afcfSToomas Soome   /// If bit 0x01 is set, Data[0x01] is collected.
1362*f334afcfSToomas Soome   /// If bit 0x20 is set, Data[0x20] is collected.
1363*f334afcfSToomas Soome   /// If bit 0x21 is set, Data[0x21] is collected.
1364*f334afcfSToomas Soome   /// Etc.
1365*f334afcfSToomas Soome   ///
1366*f334afcfSToomas Soome   PXE_UINT64    Supported;
1367*f334afcfSToomas Soome 
1368*f334afcfSToomas Soome   ///
1369*f334afcfSToomas Soome   /// Statistic data.
1370*f334afcfSToomas Soome   ///
1371*f334afcfSToomas Soome   PXE_UINT64    Data[64];
1372*f334afcfSToomas Soome } PXE_DB_STATISTICS;
1373*f334afcfSToomas Soome 
1374*f334afcfSToomas Soome ///
1375*f334afcfSToomas Soome /// Total number of frames received.  Includes frames with errors and
1376*f334afcfSToomas Soome /// dropped frames.
1377*f334afcfSToomas Soome ///
1378*f334afcfSToomas Soome #define PXE_STATISTICS_RX_TOTAL_FRAMES  0x00
1379*f334afcfSToomas Soome 
1380*f334afcfSToomas Soome ///
1381*f334afcfSToomas Soome /// Number of valid frames received and copied into receive buffers.
1382*f334afcfSToomas Soome ///
1383*f334afcfSToomas Soome #define PXE_STATISTICS_RX_GOOD_FRAMES  0x01
1384*f334afcfSToomas Soome 
1385*f334afcfSToomas Soome ///
1386*f334afcfSToomas Soome /// Number of frames below the minimum length for the media.
1387*f334afcfSToomas Soome /// This would be <64 for ethernet.
1388*f334afcfSToomas Soome ///
1389*f334afcfSToomas Soome #define PXE_STATISTICS_RX_UNDERSIZE_FRAMES  0x02
1390*f334afcfSToomas Soome 
1391*f334afcfSToomas Soome ///
1392*f334afcfSToomas Soome /// Number of frames longer than the maxminum length for the
1393*f334afcfSToomas Soome /// media.  This would be >1500 for ethernet.
1394*f334afcfSToomas Soome ///
1395*f334afcfSToomas Soome #define PXE_STATISTICS_RX_OVERSIZE_FRAMES  0x03
1396*f334afcfSToomas Soome 
1397*f334afcfSToomas Soome ///
1398*f334afcfSToomas Soome /// Valid frames that were dropped because receive buffers were full.
1399*f334afcfSToomas Soome ///
1400*f334afcfSToomas Soome #define PXE_STATISTICS_RX_DROPPED_FRAMES  0x04
1401*f334afcfSToomas Soome 
1402*f334afcfSToomas Soome ///
1403*f334afcfSToomas Soome /// Number of valid unicast frames received and not dropped.
1404*f334afcfSToomas Soome ///
1405*f334afcfSToomas Soome #define PXE_STATISTICS_RX_UNICAST_FRAMES  0x05
1406*f334afcfSToomas Soome 
1407*f334afcfSToomas Soome ///
1408*f334afcfSToomas Soome /// Number of valid broadcast frames received and not dropped.
1409*f334afcfSToomas Soome ///
1410*f334afcfSToomas Soome #define PXE_STATISTICS_RX_BROADCAST_FRAMES  0x06
1411*f334afcfSToomas Soome 
1412*f334afcfSToomas Soome ///
1413*f334afcfSToomas Soome /// Number of valid mutlicast frames received and not dropped.
1414*f334afcfSToomas Soome ///
1415*f334afcfSToomas Soome #define PXE_STATISTICS_RX_MULTICAST_FRAMES  0x07
1416*f334afcfSToomas Soome 
1417*f334afcfSToomas Soome ///
1418*f334afcfSToomas Soome /// Number of frames w/ CRC or alignment errors.
1419*f334afcfSToomas Soome ///
1420*f334afcfSToomas Soome #define PXE_STATISTICS_RX_CRC_ERROR_FRAMES  0x08
1421*f334afcfSToomas Soome 
1422*f334afcfSToomas Soome ///
1423*f334afcfSToomas Soome /// Total number of bytes received.  Includes frames with errors
1424*f334afcfSToomas Soome /// and dropped frames.
1425*f334afcfSToomas Soome ///
1426*f334afcfSToomas Soome #define PXE_STATISTICS_RX_TOTAL_BYTES  0x09
1427*f334afcfSToomas Soome 
1428*f334afcfSToomas Soome ///
1429*f334afcfSToomas Soome /// Transmit statistics.
1430*f334afcfSToomas Soome ///
1431*f334afcfSToomas Soome #define PXE_STATISTICS_TX_TOTAL_FRAMES      0x0A
1432*f334afcfSToomas Soome #define PXE_STATISTICS_TX_GOOD_FRAMES       0x0B
1433*f334afcfSToomas Soome #define PXE_STATISTICS_TX_UNDERSIZE_FRAMES  0x0C
1434*f334afcfSToomas Soome #define PXE_STATISTICS_TX_OVERSIZE_FRAMES   0x0D
1435*f334afcfSToomas Soome #define PXE_STATISTICS_TX_DROPPED_FRAMES    0x0E
1436*f334afcfSToomas Soome #define PXE_STATISTICS_TX_UNICAST_FRAMES    0x0F
1437*f334afcfSToomas Soome #define PXE_STATISTICS_TX_BROADCAST_FRAMES  0x10
1438*f334afcfSToomas Soome #define PXE_STATISTICS_TX_MULTICAST_FRAMES  0x11
1439*f334afcfSToomas Soome #define PXE_STATISTICS_TX_CRC_ERROR_FRAMES  0x12
1440*f334afcfSToomas Soome #define PXE_STATISTICS_TX_TOTAL_BYTES       0x13
1441*f334afcfSToomas Soome 
1442*f334afcfSToomas Soome ///
1443*f334afcfSToomas Soome /// Number of collisions detection on this subnet.
1444*f334afcfSToomas Soome ///
1445*f334afcfSToomas Soome #define PXE_STATISTICS_COLLISIONS  0x14
1446*f334afcfSToomas Soome 
1447*f334afcfSToomas Soome ///
1448*f334afcfSToomas Soome /// Number of frames destined for unsupported protocol.
1449*f334afcfSToomas Soome ///
1450*f334afcfSToomas Soome #define PXE_STATISTICS_UNSUPPORTED_PROTOCOL  0x15
1451*f334afcfSToomas Soome 
1452*f334afcfSToomas Soome ///
1453*f334afcfSToomas Soome /// Number of valid frames received that were duplicated.
1454*f334afcfSToomas Soome ///
1455*f334afcfSToomas Soome #define PXE_STATISTICS_RX_DUPLICATED_FRAMES  0x16
1456*f334afcfSToomas Soome 
1457*f334afcfSToomas Soome ///
1458*f334afcfSToomas Soome /// Number of encrypted frames received that failed to decrypt.
1459*f334afcfSToomas Soome ///
1460*f334afcfSToomas Soome #define PXE_STATISTICS_RX_DECRYPT_ERROR_FRAMES  0x17
1461*f334afcfSToomas Soome 
1462*f334afcfSToomas Soome ///
1463*f334afcfSToomas Soome /// Number of frames that failed to transmit after exceeding the retry limit.
1464*f334afcfSToomas Soome ///
1465*f334afcfSToomas Soome #define PXE_STATISTICS_TX_ERROR_FRAMES  0x18
1466*f334afcfSToomas Soome 
1467*f334afcfSToomas Soome ///
1468*f334afcfSToomas Soome /// Number of frames transmitted successfully after more than one attempt.
1469*f334afcfSToomas Soome ///
1470*f334afcfSToomas Soome #define PXE_STATISTICS_TX_RETRY_FRAMES  0x19
1471*f334afcfSToomas Soome 
1472*f334afcfSToomas Soome typedef struct s_pxe_cpb_mcast_ip_to_mac {
1473*f334afcfSToomas Soome   ///
1474*f334afcfSToomas Soome   /// Multicast IP address to be converted to multicast MAC address.
1475*f334afcfSToomas Soome   ///
1476*f334afcfSToomas Soome   PXE_IP_ADDR    IP;
1477*f334afcfSToomas Soome } PXE_CPB_MCAST_IP_TO_MAC;
1478*f334afcfSToomas Soome 
1479*f334afcfSToomas Soome typedef struct s_pxe_db_mcast_ip_to_mac {
1480*f334afcfSToomas Soome   ///
1481*f334afcfSToomas Soome   /// Multicast MAC address.
1482*f334afcfSToomas Soome   ///
1483*f334afcfSToomas Soome   PXE_MAC_ADDR    MAC;
1484*f334afcfSToomas Soome } PXE_DB_MCAST_IP_TO_MAC;
1485*f334afcfSToomas Soome 
1486*f334afcfSToomas Soome typedef struct s_pxe_cpb_nvdata_sparse {
1487*f334afcfSToomas Soome   ///
1488*f334afcfSToomas Soome   /// NvData item list.  Only items in this list will be updated.
1489*f334afcfSToomas Soome   ///
1490*f334afcfSToomas Soome   struct {
1491*f334afcfSToomas Soome     ///
1492*f334afcfSToomas Soome     ///  Non-volatile storage address to be changed.
1493*f334afcfSToomas Soome     ///
1494*f334afcfSToomas Soome     PXE_UINT32    Addr;
1495*f334afcfSToomas Soome 
1496*f334afcfSToomas Soome     ///
1497*f334afcfSToomas Soome     /// Data item to write into above storage address.
1498*f334afcfSToomas Soome     ///
1499*f334afcfSToomas Soome     union {
1500*f334afcfSToomas Soome       PXE_UINT8     Byte;
1501*f334afcfSToomas Soome       PXE_UINT16    Word;
1502*f334afcfSToomas Soome       PXE_UINT32    Dword;
1503*f334afcfSToomas Soome     } Data;
1504*f334afcfSToomas Soome   } Item[MAX_EEPROM_LEN];
1505*f334afcfSToomas Soome } PXE_CPB_NVDATA_SPARSE;
1506*f334afcfSToomas Soome 
1507*f334afcfSToomas Soome ///
1508*f334afcfSToomas Soome /// When using bulk update, the size of the CPB structure must be
1509*f334afcfSToomas Soome /// the same size as the non-volatile NIC storage.
1510*f334afcfSToomas Soome ///
1511*f334afcfSToomas Soome typedef union u_pxe_cpb_nvdata_bulk {
1512*f334afcfSToomas Soome   ///
1513*f334afcfSToomas Soome   /// Array of byte-wide data items.
1514*f334afcfSToomas Soome   ///
1515*f334afcfSToomas Soome   PXE_UINT8     Byte[MAX_EEPROM_LEN << 2];
1516*f334afcfSToomas Soome 
1517*f334afcfSToomas Soome   ///
1518*f334afcfSToomas Soome   /// Array of word-wide data items.
1519*f334afcfSToomas Soome   ///
1520*f334afcfSToomas Soome   PXE_UINT16    Word[MAX_EEPROM_LEN << 1];
1521*f334afcfSToomas Soome 
1522*f334afcfSToomas Soome   ///
1523*f334afcfSToomas Soome   /// Array of dword-wide data items.
1524*f334afcfSToomas Soome   ///
1525*f334afcfSToomas Soome   PXE_UINT32    Dword[MAX_EEPROM_LEN];
1526*f334afcfSToomas Soome } PXE_CPB_NVDATA_BULK;
1527*f334afcfSToomas Soome 
1528*f334afcfSToomas Soome typedef struct s_pxe_db_nvdata {
1529*f334afcfSToomas Soome   ///
1530*f334afcfSToomas Soome   /// Arrays of data items from non-volatile storage.
1531*f334afcfSToomas Soome   ///
1532*f334afcfSToomas Soome   union {
1533*f334afcfSToomas Soome     ///
1534*f334afcfSToomas Soome     /// Array of byte-wide data items.
1535*f334afcfSToomas Soome     ///
1536*f334afcfSToomas Soome     PXE_UINT8     Byte[MAX_EEPROM_LEN << 2];
1537*f334afcfSToomas Soome 
1538*f334afcfSToomas Soome     ///
1539*f334afcfSToomas Soome     /// Array of word-wide data items.
1540*f334afcfSToomas Soome     ///
1541*f334afcfSToomas Soome     PXE_UINT16    Word[MAX_EEPROM_LEN << 1];
1542*f334afcfSToomas Soome 
1543*f334afcfSToomas Soome     ///
1544*f334afcfSToomas Soome     /// Array of dword-wide data items.
1545*f334afcfSToomas Soome     ///
1546*f334afcfSToomas Soome     PXE_UINT32    Dword[MAX_EEPROM_LEN];
1547*f334afcfSToomas Soome   } Data;
1548*f334afcfSToomas Soome } PXE_DB_NVDATA;
1549*f334afcfSToomas Soome 
1550*f334afcfSToomas Soome typedef struct s_pxe_db_get_status {
1551*f334afcfSToomas Soome   ///
1552*f334afcfSToomas Soome   /// Length of next receive frame (header + data).  If this is zero,
1553*f334afcfSToomas Soome   /// there is no next receive frame available.
1554*f334afcfSToomas Soome   ///
1555*f334afcfSToomas Soome   PXE_UINT32    RxFrameLen;
1556*f334afcfSToomas Soome 
1557*f334afcfSToomas Soome   ///
1558*f334afcfSToomas Soome   /// Reserved, set to zero.
1559*f334afcfSToomas Soome   ///
1560*f334afcfSToomas Soome   PXE_UINT32    reserved;
1561*f334afcfSToomas Soome 
1562*f334afcfSToomas Soome   ///
1563*f334afcfSToomas Soome   ///  Addresses of transmitted buffers that need to be recycled.
1564*f334afcfSToomas Soome   ///
1565*f334afcfSToomas Soome   PXE_UINT64    TxBuffer[MAX_XMIT_BUFFERS];
1566*f334afcfSToomas Soome } PXE_DB_GET_STATUS;
1567*f334afcfSToomas Soome 
1568*f334afcfSToomas Soome typedef struct s_pxe_cpb_fill_header {
1569*f334afcfSToomas Soome   ///
1570*f334afcfSToomas Soome   /// Source and destination MAC addresses.  These will be copied into
1571*f334afcfSToomas Soome   /// the media header without doing byte swapping.
1572*f334afcfSToomas Soome   ///
1573*f334afcfSToomas Soome   PXE_MAC_ADDR    SrcAddr;
1574*f334afcfSToomas Soome   PXE_MAC_ADDR    DestAddr;
1575*f334afcfSToomas Soome 
1576*f334afcfSToomas Soome   ///
1577*f334afcfSToomas Soome   /// Address of first byte of media header.  The first byte of packet data
1578*f334afcfSToomas Soome   /// follows the last byte of the media header.
1579*f334afcfSToomas Soome   ///
1580*f334afcfSToomas Soome   PXE_UINT64      MediaHeader;
1581*f334afcfSToomas Soome 
1582*f334afcfSToomas Soome   ///
1583*f334afcfSToomas Soome   /// Length of packet data in bytes (not including the media header).
1584*f334afcfSToomas Soome   ///
1585*f334afcfSToomas Soome   PXE_UINT32      PacketLen;
1586*f334afcfSToomas Soome 
1587*f334afcfSToomas Soome   ///
1588*f334afcfSToomas Soome   /// Protocol type.  This will be copied into the media header without
1589*f334afcfSToomas Soome   /// doing byte swapping.  Protocol type numbers can be obtained from
1590*f334afcfSToomas Soome   /// the Assigned Numbers RFC 1700.
1591*f334afcfSToomas Soome   ///
1592*f334afcfSToomas Soome   PXE_UINT16      Protocol;
1593*f334afcfSToomas Soome 
1594*f334afcfSToomas Soome   ///
1595*f334afcfSToomas Soome   /// Length of the media header in bytes.
1596*f334afcfSToomas Soome   ///
1597*f334afcfSToomas Soome   PXE_UINT16      MediaHeaderLen;
1598*f334afcfSToomas Soome } PXE_CPB_FILL_HEADER;
1599*f334afcfSToomas Soome 
1600*f334afcfSToomas Soome #define PXE_PROTOCOL_ETHERNET_IP   0x0800
1601*f334afcfSToomas Soome #define PXE_PROTOCOL_ETHERNET_ARP  0x0806
1602*f334afcfSToomas Soome #define MAX_XMIT_FRAGMENTS         16
1603*f334afcfSToomas Soome 
1604*f334afcfSToomas Soome typedef struct s_pxe_cpb_fill_header_fragmented {
1605*f334afcfSToomas Soome   ///
1606*f334afcfSToomas Soome   /// Source and destination MAC addresses.  These will be copied into
1607*f334afcfSToomas Soome   /// the media header without doing byte swapping.
1608*f334afcfSToomas Soome   ///
1609*f334afcfSToomas Soome   PXE_MAC_ADDR          SrcAddr;
1610*f334afcfSToomas Soome   PXE_MAC_ADDR          DestAddr;
1611*f334afcfSToomas Soome 
1612*f334afcfSToomas Soome   ///
1613*f334afcfSToomas Soome   /// Length of packet data in bytes (not including the media header).
1614*f334afcfSToomas Soome   ///
1615*f334afcfSToomas Soome   PXE_UINT32            PacketLen;
1616*f334afcfSToomas Soome 
1617*f334afcfSToomas Soome   ///
1618*f334afcfSToomas Soome   /// Protocol type.  This will be copied into the media header without
1619*f334afcfSToomas Soome   /// doing byte swapping.  Protocol type numbers can be obtained from
1620*f334afcfSToomas Soome   /// the Assigned Numbers RFC 1700.
1621*f334afcfSToomas Soome   ///
1622*f334afcfSToomas Soome   PXE_MEDIA_PROTOCOL    Protocol;
1623*f334afcfSToomas Soome 
1624*f334afcfSToomas Soome   ///
1625*f334afcfSToomas Soome   /// Length of the media header in bytes.
1626*f334afcfSToomas Soome   ///
1627*f334afcfSToomas Soome   PXE_UINT16            MediaHeaderLen;
1628*f334afcfSToomas Soome 
1629*f334afcfSToomas Soome   ///
1630*f334afcfSToomas Soome   /// Number of packet fragment descriptors.
1631*f334afcfSToomas Soome   ///
1632*f334afcfSToomas Soome   PXE_UINT16            FragCnt;
1633*f334afcfSToomas Soome 
1634*f334afcfSToomas Soome   ///
1635*f334afcfSToomas Soome   /// Reserved, must be set to zero.
1636*f334afcfSToomas Soome   ///
1637*f334afcfSToomas Soome   PXE_UINT16            reserved;
1638*f334afcfSToomas Soome 
1639*f334afcfSToomas Soome   ///
1640*f334afcfSToomas Soome   /// Array of packet fragment descriptors.  The first byte of the media
1641*f334afcfSToomas Soome   /// header is the first byte of the first fragment.
1642*f334afcfSToomas Soome   ///
1643*f334afcfSToomas Soome   struct {
1644*f334afcfSToomas Soome     ///
1645*f334afcfSToomas Soome     /// Address of this packet fragment.
1646*f334afcfSToomas Soome     ///
1647*f334afcfSToomas Soome     PXE_UINT64    FragAddr;
1648*f334afcfSToomas Soome 
1649*f334afcfSToomas Soome     ///
1650*f334afcfSToomas Soome     /// Length of this packet fragment.
1651*f334afcfSToomas Soome     ///
1652*f334afcfSToomas Soome     PXE_UINT32    FragLen;
1653*f334afcfSToomas Soome 
1654*f334afcfSToomas Soome     ///
1655*f334afcfSToomas Soome     /// Reserved, must be set to zero.
1656*f334afcfSToomas Soome     ///
1657*f334afcfSToomas Soome     PXE_UINT32    reserved;
1658*f334afcfSToomas Soome   } FragDesc[MAX_XMIT_FRAGMENTS];
1659*f334afcfSToomas Soome } PXE_CPB_FILL_HEADER_FRAGMENTED;
1660*f334afcfSToomas Soome 
1661*f334afcfSToomas Soome typedef struct s_pxe_cpb_transmit {
1662*f334afcfSToomas Soome   ///
1663*f334afcfSToomas Soome   /// Address of first byte of frame buffer.  This is also the first byte
1664*f334afcfSToomas Soome   /// of the media header.
1665*f334afcfSToomas Soome   ///
1666*f334afcfSToomas Soome   PXE_UINT64    FrameAddr;
1667*f334afcfSToomas Soome 
1668*f334afcfSToomas Soome   ///
1669*f334afcfSToomas Soome   /// Length of the data portion of the frame buffer in bytes.  Do not
1670*f334afcfSToomas Soome   /// include the length of the media header.
1671*f334afcfSToomas Soome   ///
1672*f334afcfSToomas Soome   PXE_UINT32    DataLen;
1673*f334afcfSToomas Soome 
1674*f334afcfSToomas Soome   ///
1675*f334afcfSToomas Soome   /// Length of the media header in bytes.
1676*f334afcfSToomas Soome   ///
1677*f334afcfSToomas Soome   PXE_UINT16    MediaheaderLen;
1678*f334afcfSToomas Soome 
1679*f334afcfSToomas Soome   ///
1680*f334afcfSToomas Soome   /// Reserved, must be zero.
1681*f334afcfSToomas Soome   ///
1682*f334afcfSToomas Soome   PXE_UINT16    reserved;
1683*f334afcfSToomas Soome } PXE_CPB_TRANSMIT;
1684*f334afcfSToomas Soome 
1685*f334afcfSToomas Soome typedef struct s_pxe_cpb_transmit_fragments {
1686*f334afcfSToomas Soome   ///
1687*f334afcfSToomas Soome   /// Length of packet data in bytes (not including the media header).
1688*f334afcfSToomas Soome   ///
1689*f334afcfSToomas Soome   PXE_UINT32    FrameLen;
1690*f334afcfSToomas Soome 
1691*f334afcfSToomas Soome   ///
1692*f334afcfSToomas Soome   /// Length of the media header in bytes.
1693*f334afcfSToomas Soome   ///
1694*f334afcfSToomas Soome   PXE_UINT16    MediaheaderLen;
1695*f334afcfSToomas Soome 
1696*f334afcfSToomas Soome   ///
1697*f334afcfSToomas Soome   /// Number of packet fragment descriptors.
1698*f334afcfSToomas Soome   ///
1699*f334afcfSToomas Soome   PXE_UINT16    FragCnt;
1700*f334afcfSToomas Soome 
1701*f334afcfSToomas Soome   ///
1702*f334afcfSToomas Soome   /// Array of frame fragment descriptors.  The first byte of the first
1703*f334afcfSToomas Soome   /// fragment is also the first byte of the media header.
1704*f334afcfSToomas Soome   ///
1705*f334afcfSToomas Soome   struct {
1706*f334afcfSToomas Soome     ///
1707*f334afcfSToomas Soome     /// Address of this frame fragment.
1708*f334afcfSToomas Soome     ///
1709*f334afcfSToomas Soome     PXE_UINT64    FragAddr;
1710*f334afcfSToomas Soome 
1711*f334afcfSToomas Soome     ///
1712*f334afcfSToomas Soome     /// Length of this frame fragment.
1713*f334afcfSToomas Soome     ///
1714*f334afcfSToomas Soome     PXE_UINT32    FragLen;
1715*f334afcfSToomas Soome 
1716*f334afcfSToomas Soome     ///
1717*f334afcfSToomas Soome     /// Reserved, must be set to zero.
1718*f334afcfSToomas Soome     ///
1719*f334afcfSToomas Soome     PXE_UINT32    reserved;
1720*f334afcfSToomas Soome   } FragDesc[MAX_XMIT_FRAGMENTS];
1721*f334afcfSToomas Soome } PXE_CPB_TRANSMIT_FRAGMENTS;
1722*f334afcfSToomas Soome 
1723*f334afcfSToomas Soome typedef struct s_pxe_cpb_receive {
1724*f334afcfSToomas Soome   ///
1725*f334afcfSToomas Soome   /// Address of first byte of receive buffer.  This is also the first byte
1726*f334afcfSToomas Soome   /// of the frame header.
1727*f334afcfSToomas Soome   ///
1728*f334afcfSToomas Soome   PXE_UINT64    BufferAddr;
1729*f334afcfSToomas Soome 
1730*f334afcfSToomas Soome   ///
1731*f334afcfSToomas Soome   /// Length of receive buffer.  This must be large enough to hold the
1732*f334afcfSToomas Soome   /// received frame (media header + data).  If the length of smaller than
1733*f334afcfSToomas Soome   /// the received frame, data will be lost.
1734*f334afcfSToomas Soome   ///
1735*f334afcfSToomas Soome   PXE_UINT32    BufferLen;
1736*f334afcfSToomas Soome 
1737*f334afcfSToomas Soome   ///
1738*f334afcfSToomas Soome   /// Reserved, must be set to zero.
1739*f334afcfSToomas Soome   ///
1740*f334afcfSToomas Soome   PXE_UINT32    reserved;
1741*f334afcfSToomas Soome } PXE_CPB_RECEIVE;
1742*f334afcfSToomas Soome 
1743*f334afcfSToomas Soome typedef struct s_pxe_db_receive {
1744*f334afcfSToomas Soome   ///
1745*f334afcfSToomas Soome   /// Source and destination MAC addresses from media header.
1746*f334afcfSToomas Soome   ///
1747*f334afcfSToomas Soome   PXE_MAC_ADDR          SrcAddr;
1748*f334afcfSToomas Soome   PXE_MAC_ADDR          DestAddr;
1749*f334afcfSToomas Soome 
1750*f334afcfSToomas Soome   ///
1751*f334afcfSToomas Soome   /// Length of received frame.  May be larger than receive buffer size.
1752*f334afcfSToomas Soome   /// The receive buffer will not be overwritten.  This is how to tell
1753*f334afcfSToomas Soome   /// if data was lost because the receive buffer was too small.
1754*f334afcfSToomas Soome   ///
1755*f334afcfSToomas Soome   PXE_UINT32            FrameLen;
1756*f334afcfSToomas Soome 
1757*f334afcfSToomas Soome   ///
1758*f334afcfSToomas Soome   /// Protocol type from media header.
1759*f334afcfSToomas Soome   ///
1760*f334afcfSToomas Soome   PXE_MEDIA_PROTOCOL    Protocol;
1761*f334afcfSToomas Soome 
1762*f334afcfSToomas Soome   ///
1763*f334afcfSToomas Soome   /// Length of media header in received frame.
1764*f334afcfSToomas Soome   ///
1765*f334afcfSToomas Soome   PXE_UINT16            MediaHeaderLen;
1766*f334afcfSToomas Soome 
1767*f334afcfSToomas Soome   ///
1768*f334afcfSToomas Soome   /// Type of receive frame.
1769*f334afcfSToomas Soome   ///
1770*f334afcfSToomas Soome   PXE_FRAME_TYPE        Type;
1771*f334afcfSToomas Soome 
1772*f334afcfSToomas Soome   ///
1773*f334afcfSToomas Soome   /// Reserved, must be zero.
1774*f334afcfSToomas Soome   ///
1775*f334afcfSToomas Soome   PXE_UINT8             reserved[7];
1776*f334afcfSToomas Soome } PXE_DB_RECEIVE;
1777*f334afcfSToomas Soome 
1778*f334afcfSToomas Soome #pragma pack()
1779*f334afcfSToomas Soome 
1780*f334afcfSToomas Soome #endif
1781