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