diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/net/wireless/i82586.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'drivers/net/wireless/i82586.h')
-rw-r--r-- | drivers/net/wireless/i82586.h | 413 |
1 files changed, 413 insertions, 0 deletions
diff --git a/drivers/net/wireless/i82586.h b/drivers/net/wireless/i82586.h new file mode 100644 index 000000000000..5f65b250646f --- /dev/null +++ b/drivers/net/wireless/i82586.h | |||
@@ -0,0 +1,413 @@ | |||
1 | /* | ||
2 | * Intel 82586 IEEE 802.3 Ethernet LAN Coprocessor. | ||
3 | * | ||
4 | * See: | ||
5 | * Intel Microcommunications 1991 | ||
6 | * p1-1 to p1-37 | ||
7 | * Intel order No. 231658 | ||
8 | * ISBN 1-55512-119-5 | ||
9 | * | ||
10 | * Unfortunately, the above chapter mentions neither | ||
11 | * the System Configuration Pointer (SCP) nor the | ||
12 | * Intermediate System Configuration Pointer (ISCP), | ||
13 | * so we probably need to look elsewhere for the | ||
14 | * whole story -- some recommend the "Intel LAN | ||
15 | * Components manual" but I have neither a copy | ||
16 | * nor a full reference. But "elsewhere" may be | ||
17 | * in the same publication... | ||
18 | * The description of a later device, the | ||
19 | * "82596CA High-Performance 32-Bit Local Area Network | ||
20 | * Coprocessor", (ibid. p1-38 to p1-109) does mention | ||
21 | * the SCP and ISCP and also has an i82586 compatibility | ||
22 | * mode. Even more useful is "AP-235 An 82586 Data Link | ||
23 | * Driver" (ibid. p1-337 to p1-417). | ||
24 | */ | ||
25 | |||
26 | #define I82586_MEMZ (64 * 1024) | ||
27 | |||
28 | #define I82586_SCP_ADDR (I82586_MEMZ - sizeof(scp_t)) | ||
29 | |||
30 | #define ADDR_LEN 6 | ||
31 | #define I82586NULL 0xFFFF | ||
32 | |||
33 | #define toff(t,p,f) (unsigned short)((void *)(&((t *)((void *)0 + (p)))->f) - (void *)0) | ||
34 | |||
35 | /* | ||
36 | * System Configuration Pointer (SCP). | ||
37 | */ | ||
38 | typedef struct scp_t scp_t; | ||
39 | struct scp_t | ||
40 | { | ||
41 | unsigned short scp_sysbus; /* 82586 bus width: */ | ||
42 | #define SCP_SY_16BBUS (0x0 << 0) /* 16 bits */ | ||
43 | #define SCP_SY_8BBUS (0x1 << 0) /* 8 bits. */ | ||
44 | unsigned short scp_junk[2]; /* Unused */ | ||
45 | unsigned short scp_iscpl; /* lower 16 bits of ISCP_ADDR */ | ||
46 | unsigned short scp_iscph; /* upper 16 bits of ISCP_ADDR */ | ||
47 | }; | ||
48 | |||
49 | /* | ||
50 | * Intermediate System Configuration Pointer (ISCP). | ||
51 | */ | ||
52 | typedef struct iscp_t iscp_t; | ||
53 | struct iscp_t | ||
54 | { | ||
55 | unsigned short iscp_busy; /* set by CPU before first CA, */ | ||
56 | /* cleared by 82586 after read. */ | ||
57 | unsigned short iscp_offset; /* offset of SCB */ | ||
58 | unsigned short iscp_basel; /* base of SCB */ | ||
59 | unsigned short iscp_baseh; /* " */ | ||
60 | }; | ||
61 | |||
62 | /* | ||
63 | * System Control Block (SCB). | ||
64 | * The 82586 writes its status to scb_status and then | ||
65 | * raises an interrupt to alert the CPU. | ||
66 | * The CPU writes a command to scb_command and | ||
67 | * then issues a Channel Attention (CA) to alert the 82586. | ||
68 | */ | ||
69 | typedef struct scb_t scb_t; | ||
70 | struct scb_t | ||
71 | { | ||
72 | unsigned short scb_status; /* Status of 82586 */ | ||
73 | #define SCB_ST_INT (0xF << 12) /* Some of: */ | ||
74 | #define SCB_ST_CX (0x1 << 15) /* Cmd completed */ | ||
75 | #define SCB_ST_FR (0x1 << 14) /* Frame received */ | ||
76 | #define SCB_ST_CNA (0x1 << 13) /* Cmd unit not active */ | ||
77 | #define SCB_ST_RNR (0x1 << 12) /* Rcv unit not ready */ | ||
78 | #define SCB_ST_JUNK0 (0x1 << 11) /* 0 */ | ||
79 | #define SCB_ST_CUS (0x7 << 8) /* Cmd unit status */ | ||
80 | #define SCB_ST_CUS_IDLE (0 << 8) /* Idle */ | ||
81 | #define SCB_ST_CUS_SUSP (1 << 8) /* Suspended */ | ||
82 | #define SCB_ST_CUS_ACTV (2 << 8) /* Active */ | ||
83 | #define SCB_ST_JUNK1 (0x1 << 7) /* 0 */ | ||
84 | #define SCB_ST_RUS (0x7 << 4) /* Rcv unit status */ | ||
85 | #define SCB_ST_RUS_IDLE (0 << 4) /* Idle */ | ||
86 | #define SCB_ST_RUS_SUSP (1 << 4) /* Suspended */ | ||
87 | #define SCB_ST_RUS_NRES (2 << 4) /* No resources */ | ||
88 | #define SCB_ST_RUS_RDY (4 << 4) /* Ready */ | ||
89 | unsigned short scb_command; /* Next command */ | ||
90 | #define SCB_CMD_ACK_CX (0x1 << 15) /* Ack cmd completion */ | ||
91 | #define SCB_CMD_ACK_FR (0x1 << 14) /* Ack frame received */ | ||
92 | #define SCB_CMD_ACK_CNA (0x1 << 13) /* Ack CU not active */ | ||
93 | #define SCB_CMD_ACK_RNR (0x1 << 12) /* Ack RU not ready */ | ||
94 | #define SCB_CMD_JUNKX (0x1 << 11) /* Unused */ | ||
95 | #define SCB_CMD_CUC (0x7 << 8) /* Command Unit command */ | ||
96 | #define SCB_CMD_CUC_NOP (0 << 8) /* Nop */ | ||
97 | #define SCB_CMD_CUC_GO (1 << 8) /* Start cbl_offset */ | ||
98 | #define SCB_CMD_CUC_RES (2 << 8) /* Resume execution */ | ||
99 | #define SCB_CMD_CUC_SUS (3 << 8) /* Suspend " */ | ||
100 | #define SCB_CMD_CUC_ABT (4 << 8) /* Abort " */ | ||
101 | #define SCB_CMD_RESET (0x1 << 7) /* Reset chip (hardware) */ | ||
102 | #define SCB_CMD_RUC (0x7 << 4) /* Receive Unit command */ | ||
103 | #define SCB_CMD_RUC_NOP (0 << 4) /* Nop */ | ||
104 | #define SCB_CMD_RUC_GO (1 << 4) /* Start rfa_offset */ | ||
105 | #define SCB_CMD_RUC_RES (2 << 4) /* Resume reception */ | ||
106 | #define SCB_CMD_RUC_SUS (3 << 4) /* Suspend " */ | ||
107 | #define SCB_CMD_RUC_ABT (4 << 4) /* Abort " */ | ||
108 | unsigned short scb_cbl_offset; /* Offset of first command unit */ | ||
109 | /* Action Command */ | ||
110 | unsigned short scb_rfa_offset; /* Offset of first Receive */ | ||
111 | /* Frame Descriptor in the */ | ||
112 | /* Receive Frame Area */ | ||
113 | unsigned short scb_crcerrs; /* Properly aligned frames */ | ||
114 | /* received with a CRC error */ | ||
115 | unsigned short scb_alnerrs; /* Misaligned frames received */ | ||
116 | /* with a CRC error */ | ||
117 | unsigned short scb_rscerrs; /* Frames lost due to no space */ | ||
118 | unsigned short scb_ovrnerrs; /* Frames lost due to slow bus */ | ||
119 | }; | ||
120 | |||
121 | #define scboff(p,f) toff(scb_t, p, f) | ||
122 | |||
123 | /* | ||
124 | * The eight Action Commands. | ||
125 | */ | ||
126 | typedef enum acmd_e acmd_e; | ||
127 | enum acmd_e | ||
128 | { | ||
129 | acmd_nop = 0, /* Do nothing */ | ||
130 | acmd_ia_setup = 1, /* Load an (ethernet) address into the */ | ||
131 | /* 82586 */ | ||
132 | acmd_configure = 2, /* Update the 82586 operating parameters */ | ||
133 | acmd_mc_setup = 3, /* Load a list of (ethernet) multicast */ | ||
134 | /* addresses into the 82586 */ | ||
135 | acmd_transmit = 4, /* Transmit a frame */ | ||
136 | acmd_tdr = 5, /* Perform a Time Domain Reflectometer */ | ||
137 | /* test on the serial link */ | ||
138 | acmd_dump = 6, /* Copy 82586 registers to memory */ | ||
139 | acmd_diagnose = 7, /* Run an internal self test */ | ||
140 | }; | ||
141 | |||
142 | /* | ||
143 | * Generic Action Command header. | ||
144 | */ | ||
145 | typedef struct ach_t ach_t; | ||
146 | struct ach_t | ||
147 | { | ||
148 | unsigned short ac_status; /* Command status: */ | ||
149 | #define AC_SFLD_C (0x1 << 15) /* Command completed */ | ||
150 | #define AC_SFLD_B (0x1 << 14) /* Busy executing */ | ||
151 | #define AC_SFLD_OK (0x1 << 13) /* Completed error free */ | ||
152 | #define AC_SFLD_A (0x1 << 12) /* Command aborted */ | ||
153 | #define AC_SFLD_FAIL (0x1 << 11) /* Selftest failed */ | ||
154 | #define AC_SFLD_S10 (0x1 << 10) /* No carrier sense */ | ||
155 | /* during transmission */ | ||
156 | #define AC_SFLD_S9 (0x1 << 9) /* Tx unsuccessful: */ | ||
157 | /* (stopped) lost CTS */ | ||
158 | #define AC_SFLD_S8 (0x1 << 8) /* Tx unsuccessful: */ | ||
159 | /* (stopped) slow DMA */ | ||
160 | #define AC_SFLD_S7 (0x1 << 7) /* Tx deferred: */ | ||
161 | /* other link traffic */ | ||
162 | #define AC_SFLD_S6 (0x1 << 6) /* Heart Beat: collision */ | ||
163 | /* detect after last tx */ | ||
164 | #define AC_SFLD_S5 (0x1 << 5) /* Tx stopped: */ | ||
165 | /* excessive collisions */ | ||
166 | #define AC_SFLD_MAXCOL (0xF << 0) /* Collision count */ | ||
167 | unsigned short ac_command; /* Command specifier: */ | ||
168 | #define AC_CFLD_EL (0x1 << 15) /* End of command list */ | ||
169 | #define AC_CFLD_S (0x1 << 14) /* Suspend on completion */ | ||
170 | #define AC_CFLD_I (0x1 << 13) /* Interrupt on completion */ | ||
171 | #define AC_CFLD_CMD (0x7 << 0) /* acmd_e */ | ||
172 | unsigned short ac_link; /* Next Action Command */ | ||
173 | }; | ||
174 | |||
175 | #define acoff(p,f) toff(ach_t, p, f) | ||
176 | |||
177 | /* | ||
178 | * The Nop Action Command. | ||
179 | */ | ||
180 | typedef struct ac_nop_t ac_nop_t; | ||
181 | struct ac_nop_t | ||
182 | { | ||
183 | ach_t nop_h; | ||
184 | }; | ||
185 | |||
186 | /* | ||
187 | * The IA-Setup Action Command. | ||
188 | */ | ||
189 | typedef struct ac_ias_t ac_ias_t; | ||
190 | struct ac_ias_t | ||
191 | { | ||
192 | ach_t ias_h; | ||
193 | unsigned char ias_addr[ADDR_LEN]; /* The (ethernet) address */ | ||
194 | }; | ||
195 | |||
196 | /* | ||
197 | * The Configure Action Command. | ||
198 | */ | ||
199 | typedef struct ac_cfg_t ac_cfg_t; | ||
200 | struct ac_cfg_t | ||
201 | { | ||
202 | ach_t cfg_h; | ||
203 | unsigned char cfg_byte_cnt; /* Size foll data: 4-12 */ | ||
204 | #define AC_CFG_BYTE_CNT(v) (((v) & 0xF) << 0) | ||
205 | unsigned char cfg_fifolim; /* FIFO threshold */ | ||
206 | #define AC_CFG_FIFOLIM(v) (((v) & 0xF) << 0) | ||
207 | unsigned char cfg_byte8; | ||
208 | #define AC_CFG_SAV_BF(v) (((v) & 0x1) << 7) /* Save rxd bad frames */ | ||
209 | #define AC_CFG_SRDY(v) (((v) & 0x1) << 6) /* SRDY/ARDY pin means */ | ||
210 | /* external sync. */ | ||
211 | unsigned char cfg_byte9; | ||
212 | #define AC_CFG_ELPBCK(v) (((v) & 0x1) << 7) /* External loopback */ | ||
213 | #define AC_CFG_ILPBCK(v) (((v) & 0x1) << 6) /* Internal loopback */ | ||
214 | #define AC_CFG_PRELEN(v) (((v) & 0x3) << 4) /* Preamble length */ | ||
215 | #define AC_CFG_PLEN_2 0 /* 2 bytes */ | ||
216 | #define AC_CFG_PLEN_4 1 /* 4 bytes */ | ||
217 | #define AC_CFG_PLEN_8 2 /* 8 bytes */ | ||
218 | #define AC_CFG_PLEN_16 3 /* 16 bytes */ | ||
219 | #define AC_CFG_ALOC(v) (((v) & 0x1) << 3) /* Addr/len data is */ | ||
220 | /* explicit in buffers */ | ||
221 | #define AC_CFG_ADDRLEN(v) (((v) & 0x7) << 0) /* Bytes per address */ | ||
222 | unsigned char cfg_byte10; | ||
223 | #define AC_CFG_BOFMET(v) (((v) & 0x1) << 7) /* Use alternate expo. */ | ||
224 | /* backoff method */ | ||
225 | #define AC_CFG_ACR(v) (((v) & 0x7) << 4) /* Accelerated cont. res. */ | ||
226 | #define AC_CFG_LINPRIO(v) (((v) & 0x7) << 0) /* Linear priority */ | ||
227 | unsigned char cfg_ifs; /* Interframe spacing */ | ||
228 | unsigned char cfg_slotl; /* Slot time (low byte) */ | ||
229 | unsigned char cfg_byte13; | ||
230 | #define AC_CFG_RETRYNUM(v) (((v) & 0xF) << 4) /* Max. collision retry */ | ||
231 | #define AC_CFG_SLTTMHI(v) (((v) & 0x7) << 0) /* Slot time (high bits) */ | ||
232 | unsigned char cfg_byte14; | ||
233 | #define AC_CFG_FLGPAD(v) (((v) & 0x1) << 7) /* Pad with HDLC flags */ | ||
234 | #define AC_CFG_BTSTF(v) (((v) & 0x1) << 6) /* Do HDLC bitstuffing */ | ||
235 | #define AC_CFG_CRC16(v) (((v) & 0x1) << 5) /* 16 bit CCITT CRC */ | ||
236 | #define AC_CFG_NCRC(v) (((v) & 0x1) << 4) /* Insert no CRC */ | ||
237 | #define AC_CFG_TNCRS(v) (((v) & 0x1) << 3) /* Tx even if no carrier */ | ||
238 | #define AC_CFG_MANCH(v) (((v) & 0x1) << 2) /* Manchester coding */ | ||
239 | #define AC_CFG_BCDIS(v) (((v) & 0x1) << 1) /* Disable broadcast */ | ||
240 | #define AC_CFG_PRM(v) (((v) & 0x1) << 0) /* Promiscuous mode */ | ||
241 | unsigned char cfg_byte15; | ||
242 | #define AC_CFG_ICDS(v) (((v) & 0x1) << 7) /* Internal collision */ | ||
243 | /* detect source */ | ||
244 | #define AC_CFG_CDTF(v) (((v) & 0x7) << 4) /* Collision detect */ | ||
245 | /* filter in bit times */ | ||
246 | #define AC_CFG_ICSS(v) (((v) & 0x1) << 3) /* Internal carrier */ | ||
247 | /* sense source */ | ||
248 | #define AC_CFG_CSTF(v) (((v) & 0x7) << 0) /* Carrier sense */ | ||
249 | /* filter in bit times */ | ||
250 | unsigned short cfg_min_frm_len; | ||
251 | #define AC_CFG_MNFRM(v) (((v) & 0xFF) << 0) /* Min. bytes/frame (<= 255) */ | ||
252 | }; | ||
253 | |||
254 | /* | ||
255 | * The MC-Setup Action Command. | ||
256 | */ | ||
257 | typedef struct ac_mcs_t ac_mcs_t; | ||
258 | struct ac_mcs_t | ||
259 | { | ||
260 | ach_t mcs_h; | ||
261 | unsigned short mcs_cnt; /* No. of bytes of MC addresses */ | ||
262 | #if 0 | ||
263 | unsigned char mcs_data[ADDR_LEN]; /* The first MC address .. */ | ||
264 | ... | ||
265 | #endif | ||
266 | }; | ||
267 | |||
268 | #define I82586_MAX_MULTICAST_ADDRESSES 128 /* Hardware hashed filter */ | ||
269 | |||
270 | /* | ||
271 | * The Transmit Action Command. | ||
272 | */ | ||
273 | typedef struct ac_tx_t ac_tx_t; | ||
274 | struct ac_tx_t | ||
275 | { | ||
276 | ach_t tx_h; | ||
277 | unsigned short tx_tbd_offset; /* Address of list of buffers. */ | ||
278 | #if 0 | ||
279 | Linux packets are passed down with the destination MAC address | ||
280 | and length/type field already prepended to the data, | ||
281 | so we do not need to insert it. Consistent with this | ||
282 | we must also set the AC_CFG_ALOC(..) flag during the | ||
283 | ac_cfg_t action command. | ||
284 | unsigned char tx_addr[ADDR_LEN]; /* The frame dest. address */ | ||
285 | unsigned short tx_length; /* The frame length */ | ||
286 | #endif /* 0 */ | ||
287 | }; | ||
288 | |||
289 | /* | ||
290 | * The Time Domain Reflectometer Action Command. | ||
291 | */ | ||
292 | typedef struct ac_tdr_t ac_tdr_t; | ||
293 | struct ac_tdr_t | ||
294 | { | ||
295 | ach_t tdr_h; | ||
296 | unsigned short tdr_result; /* Result. */ | ||
297 | #define AC_TDR_LNK_OK (0x1 << 15) /* No link problem */ | ||
298 | #define AC_TDR_XCVR_PRB (0x1 << 14) /* Txcvr cable problem */ | ||
299 | #define AC_TDR_ET_OPN (0x1 << 13) /* Open on the link */ | ||
300 | #define AC_TDR_ET_SRT (0x1 << 12) /* Short on the link */ | ||
301 | #define AC_TDR_TIME (0x7FF << 0) /* Distance to problem */ | ||
302 | /* site in transmit */ | ||
303 | /* clock cycles */ | ||
304 | }; | ||
305 | |||
306 | /* | ||
307 | * The Dump Action Command. | ||
308 | */ | ||
309 | typedef struct ac_dmp_t ac_dmp_t; | ||
310 | struct ac_dmp_t | ||
311 | { | ||
312 | ach_t dmp_h; | ||
313 | unsigned short dmp_offset; /* Result. */ | ||
314 | }; | ||
315 | |||
316 | /* | ||
317 | * Size of the result of the dump command. | ||
318 | */ | ||
319 | #define DUMPBYTES 170 | ||
320 | |||
321 | /* | ||
322 | * The Diagnose Action Command. | ||
323 | */ | ||
324 | typedef struct ac_dgn_t ac_dgn_t; | ||
325 | struct ac_dgn_t | ||
326 | { | ||
327 | ach_t dgn_h; | ||
328 | }; | ||
329 | |||
330 | /* | ||
331 | * Transmit Buffer Descriptor (TBD). | ||
332 | */ | ||
333 | typedef struct tbd_t tbd_t; | ||
334 | struct tbd_t | ||
335 | { | ||
336 | unsigned short tbd_status; /* Written by the CPU */ | ||
337 | #define TBD_STATUS_EOF (0x1 << 15) /* This TBD is the */ | ||
338 | /* last for this frame */ | ||
339 | #define TBD_STATUS_ACNT (0x3FFF << 0) /* Actual count of data */ | ||
340 | /* bytes in this buffer */ | ||
341 | unsigned short tbd_next_bd_offset; /* Next in list */ | ||
342 | unsigned short tbd_bufl; /* Buffer address (low) */ | ||
343 | unsigned short tbd_bufh; /* " " (high) */ | ||
344 | }; | ||
345 | |||
346 | /* | ||
347 | * Receive Buffer Descriptor (RBD). | ||
348 | */ | ||
349 | typedef struct rbd_t rbd_t; | ||
350 | struct rbd_t | ||
351 | { | ||
352 | unsigned short rbd_status; /* Written by the 82586 */ | ||
353 | #define RBD_STATUS_EOF (0x1 << 15) /* This RBD is the */ | ||
354 | /* last for this frame */ | ||
355 | #define RBD_STATUS_F (0x1 << 14) /* ACNT field is valid */ | ||
356 | #define RBD_STATUS_ACNT (0x3FFF << 0) /* Actual no. of data */ | ||
357 | /* bytes in this buffer */ | ||
358 | unsigned short rbd_next_rbd_offset; /* Next rbd in list */ | ||
359 | unsigned short rbd_bufl; /* Data pointer (low) */ | ||
360 | unsigned short rbd_bufh; /* " " (high) */ | ||
361 | unsigned short rbd_el_size; /* EL+Data buf. size */ | ||
362 | #define RBD_EL (0x1 << 15) /* This BD is the */ | ||
363 | /* last in the list */ | ||
364 | #define RBD_SIZE (0x3FFF << 0) /* No. of bytes the */ | ||
365 | /* buffer can hold */ | ||
366 | }; | ||
367 | |||
368 | #define rbdoff(p,f) toff(rbd_t, p, f) | ||
369 | |||
370 | /* | ||
371 | * Frame Descriptor (FD). | ||
372 | */ | ||
373 | typedef struct fd_t fd_t; | ||
374 | struct fd_t | ||
375 | { | ||
376 | unsigned short fd_status; /* Written by the 82586 */ | ||
377 | #define FD_STATUS_C (0x1 << 15) /* Completed storing frame */ | ||
378 | #define FD_STATUS_B (0x1 << 14) /* FD was consumed by RU */ | ||
379 | #define FD_STATUS_OK (0x1 << 13) /* Frame rxd successfully */ | ||
380 | #define FD_STATUS_S11 (0x1 << 11) /* CRC error */ | ||
381 | #define FD_STATUS_S10 (0x1 << 10) /* Alignment error */ | ||
382 | #define FD_STATUS_S9 (0x1 << 9) /* Ran out of resources */ | ||
383 | #define FD_STATUS_S8 (0x1 << 8) /* Rx DMA overrun */ | ||
384 | #define FD_STATUS_S7 (0x1 << 7) /* Frame too short */ | ||
385 | #define FD_STATUS_S6 (0x1 << 6) /* No EOF flag */ | ||
386 | unsigned short fd_command; /* Command */ | ||
387 | #define FD_COMMAND_EL (0x1 << 15) /* Last FD in list */ | ||
388 | #define FD_COMMAND_S (0x1 << 14) /* Suspend RU after rx */ | ||
389 | unsigned short fd_link_offset; /* Next FD */ | ||
390 | unsigned short fd_rbd_offset; /* First RBD (data) */ | ||
391 | /* Prepared by CPU, */ | ||
392 | /* updated by 82586 */ | ||
393 | #if 0 | ||
394 | I think the rest is unused since we | ||
395 | have set AC_CFG_ALOC(..). However, just | ||
396 | in case, we leave the space. | ||
397 | #endif /* 0 */ | ||
398 | unsigned char fd_dest[ADDR_LEN]; /* Destination address */ | ||
399 | /* Written by 82586 */ | ||
400 | unsigned char fd_src[ADDR_LEN]; /* Source address */ | ||
401 | /* Written by 82586 */ | ||
402 | unsigned short fd_length; /* Frame length or type */ | ||
403 | /* Written by 82586 */ | ||
404 | }; | ||
405 | |||
406 | #define fdoff(p,f) toff(fd_t, p, f) | ||
407 | |||
408 | /* | ||
409 | * This software may only be used and distributed | ||
410 | * according to the terms of the GNU General Public License. | ||
411 | * | ||
412 | * For more details, see wavelan.c. | ||
413 | */ | ||