]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/Pxe.h
IntelFrameworkModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / BiosThunk / Snp16Dxe / Pxe.h
CommitLineData
bcecde14 1/** @file\r
2 These are PXE Specification 2.1-compliant data structures and defines.\r
3\r
4 This file relies upon the existence of a PXE-compliant ROM\r
0a6f4824 5 in memory, as defined by the Preboot Execution Environment\r
bcecde14 6 Specification (PXE), Version 2.1, located at\r
7\r
8 http://developer.intel.com/ial/wfm/wfmspecs.htm\r
9\r
0a6f4824 10Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>\r
bcecde14 11\r
c0a00b14 12SPDX-License-Identifier: BSD-2-Clause-Patent\r
bcecde14 13\r
14**/\r
15\r
16#ifndef _PXEDEF_H_\r
17#define _PXEDEF_H_\r
18\r
19#pragma pack(1)\r
20\r
21//\r
22// PXE structure signatures\r
23//\r
24#define BC_ROMID_SIG "$BC$"\r
25#define UNDI_ROMID_SIG "UNDI"\r
26#define BUSD_ROMID_SIG "BUSD"\r
27\r
28#define PXE_SIG "!PXE"\r
29#define PXENV_SIG "PXENV+"\r
30\r
31#define BC_ROMID_REV 0x00\r
32#define UNDI_ROMID_REV 0x00\r
33#define BUSD_ROMID_REV 0x00\r
34\r
35#define PXE_REV 0x00\r
36#define PXENV_REV 0x0201\r
37\r
38#define PXENV_PTR SIGNATURE_32 ('P', 'X', 'E', 'N')\r
39#define PXE_PTR SIGNATURE_32 ('!', 'P', 'X', 'E')\r
40#define UNDI_ROMID_SIG_PTR SIGNATURE_32 ('U', 'N', 'D', 'I')\r
41\r
42typedef UINT16 SEGSEL; // Real mode segment or protected mode selector.\r
43typedef UINT16 OFF16; // Unsigned 16bit offset.\r
44typedef UINT32 ADDR32;\r
45\r
46//\r
47// Bus types\r
48//\r
49#define PXENV_BUS_ISA 0\r
50#define PXENV_BUS_EISA 1\r
51#define PXENV_BUS_MCA 2\r
52#define PXENV_BUS_PCI 3\r
53#define PXENV_BUS_VESA 4\r
54#define PXENV_BUS_PCMCIA 5\r
55\r
56//\r
57//\r
58// Result codes returned in AX by a PXENV API service.\r
59//\r
60#define PXENV_EXIT_SUCCESS 0x0000\r
61#define PXENV_EXIT_FAILURE 0x0001\r
62\r
63//\r
64// Status codes returned in the status word of PXENV API parameter structures.\r
0a6f4824 65//\r
bcecde14 66// Generic API errors - these do not match up with the M0x or E0x messages\r
67// that are reported by the loader.\r
68//\r
69#define PXENV_STATUS_SUCCESS 0x00\r
70#define PXENV_STATUS_FAILURE 0x01\r
71#define PXENV_STATUS_BAD_FUNC 0x02\r
72#define PXENV_STATUS_UNSUPPORTED 0x03\r
73#define PXENV_STATUS_KEEP_UNDI 0x04\r
74#define PXENV_STATUS_KEEP_ALL 0x05\r
75#define PXENV_STATUS_OUT_OF_RESOURCES 0x06\r
76\r
77typedef enum {\r
78 PxeEnvStatus_Success,\r
79 PxeEnvStatus_Failure,\r
80 PxeEnvStatus_BadFunc,\r
81 PxeEnvStatus_Unsupported,\r
82 PxeEnvStatus_KeepUndi,\r
83 PxeEnvStatus_KeepAll\r
84} EFI_PXE_STATUS;\r
85\r
86/* Driver errors (0x60 to 0x6F) */\r
87\r
0a6f4824 88// These errors are for UNDI compatible NIC drivers.\r
bcecde14 89#define PXENV_STATUS_UNDI_INVALID_FUNCTION 0x60\r
90#define PXENV_STATUS_UNDI_MEDIATEST_FAILED 0x61\r
91#define PXENV_STATUS_UNDI_CANNOT_INIT_NIC_FOR_MCAST 0x62\r
92#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_NIC 0x63\r
93#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_PHY 0x64\r
94#define PXENV_STATUS_UNDI_CANNOT_READ_CONFIG_DATA 0x65\r
95#define PXENV_STATUS_UNDI_CANNOT_READ_INIT_DATA 0x66\r
96#define PXENV_STATUS_UNDI_BAD_MAC_ADDR 0x67\r
97#define PXENV_STATUS_UNDI_BAD_EEPROM_CKSUM 0x68\r
98#define PXENV_STATUS_UNDI_ERROR_SETTING_ISR 0x69\r
99#define PXENV_STATUS_UNDI_INVALID_STATE 0x6A\r
100#define PXENV_STATUS_UNDI_TRANSMIT_ERROR 0x6B\r
101#define PXENV_STATUS_UNDI_INVALID_PARAMETER 0x6C\r
102\r
103typedef struct {\r
104 UINT16 Seg_Addr;\r
105 UINT32 Phy_Addr;\r
106 UINT16 Seg_Size;\r
107} NEWSEGDESC_T;\r
108\r
109typedef struct {\r
110 OFF16 Offset;\r
111 SEGSEL Segment;\r
112} SEGOFF16;\r
113\r
114typedef struct {\r
115 UINT8 Signature[4]; ///< Structure signature is not NULL terminated.\r
116 UINT8 StructLength; ///< Length of this structure in bytes.\r
117 UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero.\r
118 UINT8 StructRev; ///< Structure format revision number.\r
119 UINT8 UNDI_Rev[3]; ///< API revision number stored in Intel order.\r
120 //\r
121 // Revision 2.1.0 == 0x00, 0x01, 0x02\r
122 //\r
123 UINT16 UNDI_Loader; ///< Offset of UNDI loader routine in the option ROM image.\r
124 UINT16 StackSize; ///< Minimum stack segment size, in bytes, needed to load and run the UNDI.\r
125 UINT16 DataSize; ///< UNDI runtime code and data\r
126 UINT16 CodeSize; ///< segment sizes.\r
127 UINT8 BusType[4]; ///< 'ISAR', 'EISA', 'PCIR', 'PCCR'\r
128} UNDI_ROMID_T;\r
129\r
130typedef struct {\r
131 UINT8 Signature[4]; ///< Structure signature is not NULL terminated.\r
132 UINT8 StructLength; ///< Length of this structure in bytes.\r
133 UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero.\r
134 UINT8 StructRev; ///< Structure format revision number.\r
135 UINT8 BC_Rev[3]; ///< API revision number stored in Intel order.\r
136 //\r
137 // Revision 2.1.0 == 0x00, 0x01, 0x02\r
138 //\r
139 UINT16 BC_Loader; ///< Offset of base-code loader routine in the option ROM image.\r
140 UINT16 StackSize; ///< Minimum stack segment size (bytes) needed to load/run base-code.\r
141 UINT16 DataSize; ///< Base-code runtime code and data\r
142 UINT16 CodeSize; ///< segment sizes.\r
143} BC_ROMID_T;\r
144\r
145typedef struct {\r
146 UINT8 Signature[4]; ///< Structure signature is not NULL terminated.\r
147 UINT8 StructLength; ///< Length of this structure in bytes.\r
148 UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero.\r
149 UINT8 StructRev; ///< Structure format revision number.\r
150 UINT8 Reserved1; ///< must be zero\r
151 ///\r
152 /// UNDI_ROMID_T __FAR *UNDI;// Far pointer to UNDI ROMID\r
153 ///\r
154 SEGOFF16 Undi;\r
155\r
156 ///\r
157 /// BC_ROMID_T __FAR *Base; // Far pointer to base-code ROMID\r
158 ///\r
159 SEGOFF16 Base;\r
160\r
161 ///\r
162 /// UINT16 (__FAR __CDECL *EntryPointSP)(UINT16 func, VOID __FAR *param);\r
163 /// 16bit stack segment API entry point. This will be seg:off in\r
164 /// real mode and sel:off in 16:16 protected mode.\r
165 ///\r
166 SEGOFF16 EntryPointSP;\r
167\r
168 ///\r
169 /// UINT16 (__FAR __CDECL *EntryPointESP)(UINT16 func, VOID __FAR *param);\r
170 /// 32bit stack segment API entry point. This will be sel:off.\r
171 /// In real mode, sel == 0\r
172 ///\r
173 SEGOFF16 EntryPointESP;\r
174 ///\r
175 /// UINT16 (__FAR __CDECL *StatusCallout)(UINT16 param);\r
176 /// Address of DHCP/TFTP status callout routine.\r
177 ///\r
178 SEGOFF16 StatusCallout;\r
179 UINT8 Reserved2; ///< must be zero\r
180 UINT8 SegDescCnt; ///< Number of segment descriptors in this structure.\r
181 UINT16 FirstSelector; ///< First segment descriptor in GDT assigned to PXE.\r
182 NEWSEGDESC_T Stack;\r
183 NEWSEGDESC_T UNDIData;\r
184 NEWSEGDESC_T UNDICode;\r
185 NEWSEGDESC_T UNDICodeWrite;\r
186 NEWSEGDESC_T BC_Data;\r
187 NEWSEGDESC_T BC_Code;\r
188 NEWSEGDESC_T BC_CodeWrite;\r
189} PXE_T;\r
190\r
191typedef struct {\r
192 CHAR8 Signature[6]; ///< "PXENV+"\r
193 UINT16 Version; ///< PXE version number. LSB is minor version. MSB is major version.\r
194 UINT8 StructLength; ///< Length of PXE-2.0 Entry Point structure in bytes.\r
195 UINT8 StructCksum; ///< Used to make structure checksum equal zero.\r
196 UINT32 RMEntry; ///< Real mode API entry point segment:offset.\r
197 UINT32 PMEntryOff; ///< Protected mode API entry point\r
198 UINT16 PMEntrySeg; ///< segment:offset. This will always be zero. Protected mode API calls\r
199 ///< must be made through the API entry points in the PXE Runtime ID structure.\r
200\r
201 UINT16 StackSeg; ///< Real mode stack segment.\r
202 UINT16 StackSize; ///< Stack segment size in bytes.\r
203 UINT16 BaseCodeSeg; ///< Real mode base-code code segment.\r
204 UINT16 BaseCodeSize; ///< Base-code code segment size\r
205 UINT16 BaseDataSeg; ///< Real mode base-code data segment.\r
206 UINT16 BaseDataSize; ///< Base-code data segment size\r
207 UINT16 UNDIDataSeg; ///< Real mode UNDI data segment.\r
208 UINT16 UNDIDataSize; ///< UNDI data segment size in bytes.\r
209 UINT16 UNDICodeSeg; ///< Real mode UNDI code segment.\r
210 UINT16 UNDICodeSize; ///< UNDI code segment size in bytes.\r
211 PXE_T *RuntimePtr; ///< Real mode segment:offset pointer to PXE Runtime ID structure.\r
212} PXENV_T;\r
213\r
214typedef struct {\r
215 OUT UINT16 Status;\r
216 IN OUT UINT16 Ax;\r
217 IN OUT UINT16 Bx;\r
218 IN OUT UINT16 Dx;\r
219 IN OUT UINT16 Di;\r
220 IN OUT UINT16 Es;\r
221 IN OUT UINT16 Undi_Ds;\r
222 IN OUT UINT16 Undi_Cs;\r
223 OUT SEGOFF16 PXEptr;\r
224 OUT SEGOFF16 PXENVptr;\r
225} UNDI_LOADER_T;\r
226\r
227//\r
228// Put in some UNDI-specific arguments\r
229//\r
230#define PXENV_START_UNDI 0x0000\r
231#define PXENV_UNDI_STARTUP 0x0001\r
232#define PXENV_UNDI_CLEANUP 0x0002\r
233#define PXENV_UNDI_INITIALIZE 0x0003\r
234#define PXENV_UNDI_RESET_NIC 0x0004\r
235#define PXENV_UNDI_SHUTDOWN 0x0005\r
236#define PXENV_UNDI_OPEN 0x0006\r
237#define PXENV_UNDI_CLOSE 0x0007\r
238#define PXENV_UNDI_TRANSMIT 0x0008\r
239#define PXENV_UNDI_SET_MCAST_ADDR 0x0009\r
240#define PXENV_UNDI_SET_STATION_ADDR 0x000A\r
241#define PXENV_UNDI_SET_PACKET_FILTER 0x000B\r
242#define PXENV_UNDI_GET_INFORMATION 0x000C\r
243#define PXENV_UNDI_GET_STATISTICS 0x000D\r
244#define PXENV_UNDI_CLEAR_STATISTICS 0x000E\r
245#define PXENV_UNDI_INITIATE_DIAGS 0x000F\r
246#define PXENV_UNDI_FORCE_INTERRUPT 0x0010\r
247#define PXENV_UNDI_GET_MCAST_ADDR 0x0011\r
248#define PXENV_UNDI_GET_NIC_TYPE 0x0012\r
249#define PXENV_UNDI_GET_NDIS_INFO 0x0013\r
250#define PXENV_UNDI_ISR 0x0014\r
251#define PXENV_STOP_UNDI 0x0015\r
252#define PXENV_UNDI_GET_STATE 0x0016\r
253\r
254#define ADDR_LEN 16\r
255#define MAXNUM_MCADDR 8\r
0a6f4824 256#define IPLEN 4 ///< length of an IP address\r
bcecde14 257#define XMT_DESTADDR 0x0000 ///< destination address given\r
258#define XMT_BROADCAST 0x0001 ///< use broadcast address\r
259\r
260typedef struct {\r
261 UINT16 MCastAddrCount; ///< In: Number of multi-cast\r
262\r
263 /* addresses. */\r
264 UINT8 MCastAddr[MAXNUM_MCADDR][ADDR_LEN]; /* In: */\r
265\r
266 /* list of multi-cast addresses. */\r
267\r
268 /* Each address can take up to */\r
269\r
270 /* ADDR_LEN bytes and a maximum */\r
271\r
272 /* of MAXNUM_MCADDR address can */\r
273\r
274 /* be provided*/\r
275} PXENV_UNDI_MCAST_ADDR_T;\r
276\r
277/* Definitions of TFTP API parameter structures.\r
278 */\r
279typedef struct {\r
280 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
281 IN UINT16 Ax; ///< In: These register fields must be\r
282 IN UINT16 Bx; ///< filled in with the same data\r
283 IN UINT16 Dx; ///< that was passed to the MLID\r
0a6f4824 284 IN UINT16 Di; ///< option ROM boot code by the\r
bcecde14 285 IN UINT16 Es; ///< system BIOS.\r
286} PXENV_START_UNDI_T;\r
287\r
288typedef struct {\r
289 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
290} PXENV_UNDI_STARTUP_T;\r
291\r
292typedef struct {\r
293 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
294} PXENV_UNDI_CLEANUP_T;\r
295\r
296typedef struct {\r
297 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
0a6f4824 298\r
bcecde14 299 ///\r
300 /// This is an input parameter and is a 32-bit physical address of\r
301 /// a memory copy of the driver module in the protocol.ini file\r
302 /// obtained from the Protocol Manager driver(refer to NDIS 2.0\r
303 /// specifications). This parameter is basically supported for\r
304 /// the universal NDIS driver to pass the information contained in\r
305 /// protocol.ini file to the NIC driver for any specific\r
306 /// configuration of the NIC. (Note that the module\r
307 /// identification in the protocol.ini file was done by NDIS\r
308 /// itself.) This value can be NULL for for any other application\r
309 /// interfacing to the Universal NIC Driver.\r
310 ///\r
0a6f4824 311 IN UINT32 ProtocolIni;\r
bcecde14 312 UINT8 Reserved[8];\r
313} PXENV_UNDI_INITIALIZE_T;\r
314\r
315typedef struct {\r
316 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
317 IN PXENV_UNDI_MCAST_ADDR_T R_Mcast_Buf; ///< multicast address list\r
318 /* see note below */\r
319} PXENV_UNDI_RESET_T;\r
320\r
321/*++\r
322 Note: The NIC driver does not remember the multicast\r
323 addresses provided in any call. So the application must\r
324 provide the multicast address list with all the calls that\r
0a6f4824 325 reset the receive unit of the adapter.\r
bcecde14 326 --*/\r
327typedef struct {\r
0a6f4824 328 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
bcecde14 329} PXENV_UNDI_SHUTDOWN_T;\r
330\r
331typedef struct {\r
332 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
0a6f4824 333\r
bcecde14 334 ///\r
335 /// This is an input parameter and is adapter specific. This is\r
336 /// supported for Universal NDIS 2.0 driver to pass down the Open\r
337 /// flags provided by the protocol driver (See NDIS 2.0\r
0a6f4824
LG
338 /// specifications). This can be zero.\r
339 ///\r
340 IN UINT16 OpenFlag; ///< In: See description below\r
341 IN UINT16 PktFilter; ///< In: Filter for receiving\r
bcecde14 342\r
343 /* packet. It takes the following */\r
344\r
345 /* values, multiple values can be */\r
346\r
347 /* ORed together. */\r
348#define FLTR_DIRECTED 0x0001 ///< directed/multicast\r
349#define FLTR_BRDCST 0x0002 ///< broadcast packets\r
350#define FLTR_PRMSCS 0x0004 ///< any packet on LAN\r
0a6f4824 351#define FLTR_SRC_RTG 0x0008 ///< source routing packet\r
bcecde14 352 IN PXENV_UNDI_MCAST_ADDR_T McastBuffer; /* In: */\r
353 /* See t_PXENV_UNDI_MCAST_ADDR. */\r
354} PXENV_UNDI_OPEN_T;\r
355\r
356typedef struct {\r
357 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
358} PXENV_UNDI_CLOSE_T;\r
359\r
360#define MAX_DATA_BLKS 8\r
361\r
362typedef struct {\r
363 IN UINT16 ImmedLength; ///< In: Data buffer length in\r
364\r
365 /* bytes. */\r
0a6f4824
LG
366 UINT16 XmitOffset; ///< 16-bit segment & offset of the\r
367 UINT16 XmitSegment; ///< immediate data buffer.\r
368 UINT16 DataBlkCount; ///< In: Number of data blocks.\r
bcecde14 369 struct DataBlk {\r
0a6f4824 370 UINT8 TDPtrType; ///< 0 => 32 bit Phys pointer in TDDataPtr, not supported in this version of LSA\r
bcecde14 371 ///< 1 => seg:offser in TDDataPtr which can be a real mode or 16-bit protected mode pointer\r
0a6f4824
LG
372 UINT8 TDRsvdByte; ///< Reserved, must be zero.\r
373 UINT16 TDDataLen; ///< Data block length in bytes.\r
374 UINT16 TDDataPtrOffset; ///< Far pointer to data buffer.\r
375 UINT16 TDDataPtrSegment; ///< Far pointer to data buffer.\r
bcecde14 376 } DataBlock[MAX_DATA_BLKS];\r
377}\r
378PXENV_UNDI_TBD_T;\r
379\r
380typedef struct {\r
0a6f4824 381 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
bcecde14 382\r
383 ///\r
384 /// This is the protocol of the upper layer that is calling\r
385 /// NICTransmit call. If the upper layer has filled the media\r
386 /// header this field must be 0.\r
387 ///\r
388 IN UINT8 Protocol;\r
389#define P_UNKNOWN 0\r
390#define P_IP 1\r
391#define P_ARP 2\r
392#define P_RARP 3\r
393\r
394 ///\r
395 /// If this flag is 0, the NIC driver expects a pointer to the\r
396 /// destination media address in the field DestMediaAddr. If 1,\r
397 /// the NIC driver fills the broadcast address for the\r
398 /// destination.\r
0a6f4824
LG
399 ///\r
400 IN UINT8 XmitFlag;\r
401#define XMT_DESTADDR 0x0000 ///< destination address given\r
bcecde14 402#define XMT_BROADCAST 0x0001 ///< use broadcast address\r
403\r
404 ///\r
405 /// This is a pointer to the hardware address of the destination\r
406 /// media. It can be null if the destination is not known in\r
407 /// which case the XmitFlag contains 1 for broadcast. Destination\r
408 /// media address must be obtained by the upper level protocol\r
409 /// (with Address Resolution Protocol) and NIC driver does not do\r
410 /// any address resolution.\r
0a6f4824 411 ///\r
bcecde14 412 IN UINT16 DestAddrOffset; ///< 16-bit segment & offset of the\r
413 IN UINT16 DestAddrSegment; ///< destination media address\r
414\r
bcecde14 415\r
0a6f4824
LG
416 IN UINT16 TBDOffset; ///< 16-bit segment & offset of the\r
417 IN UINT16 TBDSegment; ///< transmit buffer descriptor of type\r
418\r
419 /// XmitBufferDesc\r
bcecde14 420 IN UINT32 Reserved[2];\r
421} PXENV_UNDI_TRANSMIT_T;\r
422\r
423\r
424typedef struct {\r
0a6f4824
LG
425 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
426 IN PXENV_UNDI_MCAST_ADDR_T McastBuffer; ///< In:\r
bcecde14 427} PXENV_UNDI_SET_MCAST_ADDR_T;\r
428\r
429typedef struct {\r
0a6f4824
LG
430 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
431 IN UINT8 StationAddress[ADDR_LEN]; ///< new address to be set\r
bcecde14 432} PXENV_UNDI_SET_STATION_ADDR_T;\r
433\r
434typedef struct s_PXENV_UNDI_SET_PACKET_FILTER {\r
0a6f4824
LG
435 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
436 IN UINT8 Filter; ///< In: Receive filter value.\r
bcecde14 437} PXENV_UNDI_SET_PACKET_FILTER_T;\r
438\r
439typedef struct {\r
0a6f4824
LG
440 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
441 OUT UINT16 BaseIo; ///< Out: Adapter's Base IO\r
442 OUT UINT16 IntNumber; ///< Out: IRQ number\r
443 OUT UINT16 MaxTranUnit; ///< Out: MTU\r
444 OUT UINT16 HwType; ///< Out: type of protocol at hardware level\r
bcecde14 445\r
446#define ETHER_TYPE 1\r
447#define EXP_ETHER_TYPE 2\r
448#define IEEE_TYPE 6\r
449#define ARCNET_TYPE 7\r
0a6f4824 450 /*++\r
bcecde14 451 other numbers can be obtained from rfc1010 for "Assigned\r
452 Numbers". This number may not be validated by the application\r
453 and hence adding new numbers to the list should be fine at any\r
0a6f4824 454 time.\r
bcecde14 455 --*/\r
0a6f4824 456 OUT UINT16 HwAddrLen; ///< Out: actual length of hardware address\r
bcecde14 457 OUT UINT8 CurrentNodeAddress[ADDR_LEN]; ///< Out: Current hardware address\r
458 OUT UINT8 PermNodeAddress[ADDR_LEN]; ///< Out: Permanent hardware address\r
0a6f4824
LG
459 OUT UINT16 ROMAddress; ///< Out: ROM address\r
460 OUT UINT16 RxBufCt; ///< Out: receive Queue length\r
461 OUT UINT16 TxBufCt; ///< Out: Transmit Queue length\r
bcecde14 462} PXENV_UNDI_GET_INFORMATION_T;\r
463\r
464typedef struct {\r
0a6f4824
LG
465 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
466 OUT UINT32 XmtGoodFrames; ///< Out: No. of good transmissions\r
467 OUT UINT32 RcvGoodFrames; ///< Out: No. of good frames received\r
468 OUT UINT32 RcvCRCErrors; ///< Out: No. of frames with CRC error\r
469 OUT UINT32 RcvResourceErrors; ///< Out: no. of frames discarded\r
bcecde14 470 /* Out: receive Queue full */\r
471} PXENV_UNDI_GET_STATISTICS_T;\r
472\r
473typedef struct {\r
0a6f4824 474 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
bcecde14 475} PXENV_UNDI_CLEAR_STATISTICS_T;\r
476\r
477typedef struct {\r
478 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
479} PXENV_UNDI_INITIATE_DIAGS_T;\r
480\r
481typedef struct {\r
482 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
483} PXENV_UNDI_FORCE_INTERRUPT_T;\r
484\r
485typedef struct {\r
0a6f4824
LG
486 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
487 IN UINT32 InetAddr; ///< In: IP Multicast Address\r
488 OUT UINT8 MediaAddr[ADDR_LEN]; ///< Out: corresponding hardware\r
bcecde14 489 /* multicast address */\r
490} PXENV_UNDI_GET_MCAST_ADDR_T;\r
491\r
492typedef struct {\r
0a6f4824
LG
493 OUT UINT16 Vendor_ID; ///< OUT:\r
494 OUT UINT16 Dev_ID; ///< OUT:\r
495 OUT UINT8 Base_Class; ///< OUT:\r
496 OUT UINT8 Sub_Class; ///< OUT:\r
497 OUT UINT8 Prog_Intf; ///< OUT: program interface\r
498 OUT UINT8 Rev; ///< OUT: Revision number\r
499 OUT UINT16 BusDevFunc; ///< OUT: Bus, Device & Function numbers\r
500 OUT UINT16 SubVendor_ID; ///< OUT:\r
501 OUT UINT16 SubDevice_ID; ///< OUT:\r
bcecde14 502} PCI_INFO_T;\r
503\r
504typedef struct {\r
0a6f4824
LG
505 OUT UINT32 EISA_Dev_ID; ///< Out:\r
506 OUT UINT8 Base_Class; ///< OUT:\r
507 OUT UINT8 Sub_Class; ///< OUT:\r
508 OUT UINT8 Prog_Intf; ///< OUT: program interface\r
509 OUT UINT16 CardSelNum; ///< OUT: Card Selector Number\r
510 OUT UINT8 Reserved; ///< to make it 10 bytes\r
bcecde14 511} PNP_INFO_T;\r
512\r
513\r
514typedef union {\r
515 PCI_INFO_T Pci;\r
516 PNP_INFO_T Pnp;\r
517} PCI_PNP_INFO_T;\r
518\r
519typedef struct {\r
0a6f4824
LG
520 OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx\r
521 OUT UINT8 NicType; ///< OUT: 2=PCI, 3=PnP\r
bcecde14 522 PCI_PNP_INFO_T PciPnpInfo;\r
523} PXENV_UNDI_GET_NIC_TYPE_T;\r
524\r
525typedef struct {\r
0a6f4824
LG
526 OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx\r
527 OUT UINT8 IfaceType[16]; ///< OUT: Type name of MAC, AsciiZ\r
bcecde14 528\r
529 /* format. This is used by the */\r
530\r
531 /* Universal NDIS Driver to fill */\r
532\r
533 /* the driver type in it's MAC */\r
534\r
535 /* Service specific */\r
536\r
537 /* characteristic table */\r
0a6f4824
LG
538 OUT UINT32 LinkSpeed; ///< OUT:\r
539 OUT UINT32 ServiceFlags; ///< OUT: as defined in NDIS Spec 2.0X\r
bcecde14 540 OUT UINT32 Reserved[4]; ///< OUT: will be filled with 0s till defined\r
541} PXENV_UNDI_GET_NDIS_INFO_T;\r
542\r
543typedef struct {\r
0a6f4824
LG
544 OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx\r
545 IN OUT UINT16 FuncFlag; ///< In: PXENV_UNDI_ISR_IN_xxx\r
bcecde14 546\r
547 /* Out: PXENV_UNDI_ISR_OUT_xxx */\r
548 OUT UINT16 BufferLength;\r
549 OUT UINT16 FrameLength;\r
550 OUT UINT16 FrameHeaderLength;\r
551 OUT UINT16 FrameOffset;\r
552 OUT UINT16 FrameSegSel;\r
553 OUT UINT8 ProtType;\r
554 OUT UINT8 PktType;\r
555} PXENV_UNDI_ISR_T;\r
556\r
557#define PXENV_UNDI_ISR_IN_START 1 /* This function must be first */\r
558\r
559/* when an interrupt is received. */\r
560\r
561/* It will tell us if the intr */\r
562\r
563/* was generated by our device. */\r
564#define PXENV_UNDI_ISR_IN_PROCESS 2 /* Call to start processing one of */\r
565\r
566/* our interrupts. */\r
567#define PXENV_UNDI_ISR_IN_GET_NEXT 3 /* Call to start/continue receiving */\r
568\r
569/* data from receive buffer(s). */\r
570\r
571/*++\r
572\r
573 Possible responses from PXENV_UNDI_ISR_IN_START\r
574\r
575 --*/\r
0a6f4824 576#define PXENV_UNDI_ISR_OUT_OURS 0 ///< This is our interrupt. Deal with it.\r
bcecde14 577#define PXENV_UNDI_ISR_OUT_NOT_OURS 1 ///< This is not our interrupt.\r
578\r
579/*++\r
580\r
581 Possible responses from PXENV_UNDI_ISR_IN_PROCESS and\r
582 PXENV_UNDI_ISR_IN_PROCESS\r
583\r
584--*/\r
0a6f4824
LG
585#define PXENV_UNDI_ISR_OUT_DONE 0 ///< We are done processing this interrupt.\r
586#define PXENV_UNDI_ISR_OUT_TRANSMIT 2 ///< We completed a transmit interrupt.\r
587#define PXENV_UNDI_ISR_OUT_RECEIVE 3 ///< Get data from receive buffer.\r
bcecde14 588\r
589#define PXENV_UNDI_ISR_OUT_BUSY 4 /* ? */\r
590\r
591typedef struct {\r
0a6f4824 592 UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
bcecde14 593} PXENV_STOP_UNDI_T;\r
594\r
0a6f4824
LG
595#define PXENV_UNDI_STARTED 1 ///< not even initialized\r
596#define PXENV_UNDI_INITIALIZED 2 ///< initialized and closed (not opened)\r
597#define PXENV_UNDI_OPENED 3 ///< initialized & opened\r
bcecde14 598\r
599typedef struct {\r
0a6f4824 600 OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx\r
bcecde14 601 UINT16 UNDI_State;\r
602} PXENV_UNDI_GET_STATE_T;\r
603\r
604#pragma pack()\r
605\r
606#endif\r