1 /*        $NetBSD: dp8390reg.h,v 1.9 2012/10/14 13:38:13 phx Exp $    */
2 
3 /*
4  * National Semiconductor DS8390 NIC register definitions.
5  *
6  * Copyright (C) 1993, David Greenman.  This software may be used, modified,
7  * copied, distributed, and sold, in both source and binary form provided that
8  * the above copyright and these terms are retained.  Under no circumstances is
9  * the author responsible for the proper functioning of this software, nor does
10  * the author assume any responsibility for damages incurred with its use.
11  */
12 
13 /*
14  * Page 0 register offsets
15  */
16 #define ED_P0_CR    0x00      /* Command Register */
17 
18 #define ED_P0_CLDA0 0x01      /* Current Local DMA Addr low (read) */
19 #define ED_P0_PSTART          0x01      /* Page Start register (write) */
20 
21 #define ED_P0_CLDA1 0x02      /* Current Local DMA Addr high (read) */
22 #define ED_P0_PSTOP 0x02      /* Page Stop register (write) */
23 
24 #define ED_P0_BNRY  0x03      /* Boundary Pointer */
25 
26 #define ED_P0_TSR   0x04      /* Transmit Status Register (read) */
27 #define ED_P0_TPSR  0x04      /* Transmit Page Start (write) */
28 
29 #define ED_P0_NCR   0x05      /* Number of Collisions Reg (read) */
30 #define ED_P0_TBCR0 0x05      /* Transmit Byte count, low (write) */
31 
32 #define ED_P0_FIFO  0x06      /* FIFO register (read) */
33 #define ED_P0_TBCR1 0x06      /* Transmit Byte count, high (write) */
34 
35 #define ED_P0_ISR   0x07      /* Interrupt Status Register */
36 
37 #define ED_P0_CRDA0 0x08      /* Current Remote DMA Addr low (read) */
38 #define ED_P0_RSAR0 0x08      /* Remote Start Address low (write) */
39 
40 #define ED_P0_CRDA1 0x09      /* Current Remote DMA Addr high (read) */
41 #define ED_P0_RSAR1 0x09      /* Remote Start Address high (write) */
42 
43 #define ED_P0_RBCR0 0x0a      /* Remote Byte Count low (write) */
44 
45 #define ED_P0_RBCR1 0x0b      /* Remote Byte Count high (write) */
46 
47 #define ED_P0_RSR   0x0c      /* Receive Status (read) */
48 #define ED_P0_RCR   0x0c      /* Receive Configuration Reg (write) */
49 
50 #define ED_P0_CNTR0 0x0d      /* frame alignment error counter (read) */
51 #define ED_P0_TCR   0x0d      /* Transmit Configuration Reg (write) */
52 
53 #define ED_P0_CNTR1 0x0e      /* CRC error counter (read) */
54 #define ED_P0_DCR   0x0e      /* Data Configuration Reg (write) */
55 
56 #define ED_P0_CNTR2 0x0f      /* missed packet counter (read) */
57 #define ED_P0_IMR   0x0f      /* Interrupt Mask Register (write) */
58 
59 /*
60  * Page 1 register offsets
61  */
62 #define ED_P1_CR    0x00      /* Command Register */
63 #define ED_P1_PAR0  0x01      /* Physical Address Register 0 */
64 #define ED_P1_PAR1  0x02      /* Physical Address Register 1 */
65 #define ED_P1_PAR2  0x03      /* Physical Address Register 2 */
66 #define ED_P1_PAR3  0x04      /* Physical Address Register 3 */
67 #define ED_P1_PAR4  0x05      /* Physical Address Register 4 */
68 #define ED_P1_PAR5  0x06      /* Physical Address Register 5 */
69 #define ED_P1_CURR  0x07      /* Current RX ring-buffer page */
70 #define ED_P1_MAR0  0x08      /* Multicast Address Register 0 */
71 #define ED_P1_MAR1  0x09      /* Multicast Address Register 1 */
72 #define ED_P1_MAR2  0x0a      /* Multicast Address Register 2 */
73 #define ED_P1_MAR3  0x0b      /* Multicast Address Register 3 */
74 #define ED_P1_MAR4  0x0c      /* Multicast Address Register 4 */
75 #define ED_P1_MAR5  0x0d      /* Multicast Address Register 5 */
76 #define ED_P1_MAR6  0x0e      /* Multicast Address Register 6 */
77 #define ED_P1_MAR7  0x0f      /* Multicast Address Register 7 */
78 
79 /*
80  * Page 2 register offsets
81  */
82 #define ED_P2_CR    0x00      /* Command Register */
83 #define ED_P2_PSTART          0x01      /* Page Start (read) */
84 #define ED_P2_CLDA0 0x01      /* Current Local DMA Addr 0 (write) */
85 #define ED_P2_PSTOP 0x02      /* Page Stop (read) */
86 #define ED_P2_CLDA1 0x02      /* Current Local DMA Addr 1 (write) */
87 #define ED_P2_RNPP  0x03      /* Remote Next Packet Pointer */
88 #define ED_P2_TPSR  0x04      /* Transmit Page Start (read) */
89 #define ED_P2_LNPP  0x05      /* Local Next Packet Pointer */
90 #define ED_P2_ACU   0x06      /* Address Counter Upper */
91 #define ED_P2_ACL   0x07      /* Address Counter Lower */
92 #define ED_P2_RCR   0x0c      /* Receive Configuration Register (read) */
93 #define ED_P2_TCR   0x0d      /* Transmit Configuration Register (read) */
94 #define ED_P2_DCR   0x0e      /* Data Configuration Register (read) */
95 #define ED_P2_IMR   0x0f      /* Interrupt Mask Register (read) */
96 
97 /*
98  *                  Command Register (CR) definitions
99  */
100 
101 /*
102  * STP: SToP.  Software reset command.  Takes the controller offline.  No
103  * packets will be received or transmitted.  Any reception or transmission in
104  * progress will continue to completion before entering reset state.  To exit
105  * this state, the STP bit must reset and the STA bit must be set.  The
106  * software reset has executed only when indicated by the RST bit in the ISR
107  * being set.
108  */
109 #define ED_CR_STP   0x01
110 
111 /*
112  * STA: STArt.  This bit is used to activate the NIC after either power-up, or
113  * when the NIC has been put in reset mode by software command or error.
114  */
115 #define ED_CR_STA   0x02
116 
117 /*
118  * TXP: Transmit Packet.  This bit must be set to indicate transmission of a
119  * packet.  TXP is internally reset either after the transmission is completed
120  * or aborted.  This bit should be set only after the Transmit Byte Count and
121  * Transmit Page Start register have been programmed.
122  */
123 #define ED_CR_TXP   0x04
124 
125 /*
126  * RD0, RD1, RD2: Remote DMA Command.  These three bits control the operation
127  * of the remote DMA channel.  RD2 can be set to abort any remote DMA command
128  * in progress.  The Remote Byte Count registers should be cleared when a
129  * remote DMA has been aborted.  The Remote Start Addresses are not restored
130  * to the starting address if the remote DMA is aborted.
131  *
132  * RD2 RD1 RD0      function
133  *  0   0   0       not allowed
134  *  0   0   1       remote read
135  *  0   1   0       remote write
136  *  0   1   1       send packet
137  *  1   X   X       abort
138  */
139 #define ED_CR_RD0   0x08
140 #define ED_CR_RD1   0x10
141 #define ED_CR_RD2   0x20
142 
143 /*
144  * PS0, PS1: Page Select.  The two bits select which register set or 'page' to
145  * access.
146  *
147  * PS1 PS0  page
148  *  0   0   0
149  *  0   1   1
150  *  1   0   2
151  *  1   1   3 (only on chips which have extensions to the dp8390)
152  */
153 #define ED_CR_PS0   0x40
154 #define ED_CR_PS1   0x80
155 /* bit encoded aliases */
156 #define ED_CR_PAGE_0          0x00 /* (for consistency) */
157 #define ED_CR_PAGE_1          (ED_CR_PS0)
158 #define ED_CR_PAGE_2          (ED_CR_PS1)
159 #define   ED_CR_PAGE_3        (ED_CR_PS1|ED_CR_PS0)
160 
161 /*
162  *                  Interrupt Status Register (ISR) definitions
163  */
164 
165 /*
166  * PRX: Packet Received.  Indicates packet received with no errors.
167  */
168 #define ED_ISR_PRX  0x01
169 
170 /*
171  * PTX: Packet Transmitted.  Indicates packet transmitted with no errors.
172  */
173 #define ED_ISR_PTX  0x02
174 
175 /*
176  * RXE: Receive Error.  Indicates that a packet was received with one or more
177  * the following errors: CRC error, frame alignment error, FIFO overrun,
178  * missed packet.
179  */
180 #define ED_ISR_RXE  0x04
181 
182 /*
183  * TXE: Transmission Error.  Indicates that an attempt to transmit a packet
184  * resulted in one or more of the following errors: excessive collisions, FIFO
185  * underrun.
186  */
187 #define ED_ISR_TXE  0x08
188 
189 /*
190  * OVW: OverWrite.  Indicates a receive ring-buffer overrun.  Incoming network
191  * would exceed (has exceeded?) the boundary pointer, resulting in data that
192  * was previously received and not yet read from the buffer to be overwritten.
193  */
194 #define ED_ISR_OVW  0x10
195 
196 /*
197  * CNT: Counter Overflow.  Set when the MSB of one or more of the Network Tally
198  * Counters has been set.
199  */
200 #define ED_ISR_CNT  0x20
201 
202 /*
203  * RDC: Remote Data Complete.  Indicates that a Remote DMA operation has
204  * completed.
205  */
206 #define ED_ISR_RDC  0x40
207 
208 /*
209  * RST: Reset status.  Set when the NIC enters the reset state and cleared when
210  * a Start Command is issued to the CR.  This bit is also set when a receive
211  * ring-buffer overrun (OverWrite) occurs and is cleared when one or more
212  * packets have been removed from the ring.  This is a read-only bit.
213  */
214 #define ED_ISR_RST  0x80
215 
216 /*
217  *                  Interrupt Mask Register (IMR) definitions
218  */
219 
220 /*
221  * PRXE: Packet Received interrupt Enable.  If set, a received packet will
222  * cause an interrupt.
223  */
224 #define ED_IMR_PRXE 0x01
225 
226 /*
227  * PTXE: Packet Transmit interrupt Enable.  If set, an interrupt is generated
228  * when a packet transmission completes.
229  */
230 #define ED_IMR_PTXE 0x02
231 
232 /*
233  * RXEE: Receive Error interrupt Enable.  If set, an interrupt will occur
234  * whenever a packet is received with an error.
235  */
236 #define ED_IMR_RXEE           0x04
237 
238 /*
239  * TXEE: Transmit Error interrupt Enable.  If set, an interrupt will occur
240  * whenever a transmission results in an error.
241  */
242 #define ED_IMR_TXEE 0x08
243 
244 /*
245  * OVWE: OverWrite error interrupt Enable.  If set, an interrupt is generated
246  * whenever the receive ring-buffer is overrun.  i.e. when the boundary pointer
247  * is exceeded.
248  */
249 #define ED_IMR_OVWE 0x10
250 
251 /*
252  * CNTE: Counter overflow interrupt Enable.  If set, an interrupt is generated
253  * whenever the MSB of one or more of the Network Statistics counters has been
254  * set.
255  */
256 #define ED_IMR_CNTE 0x20
257 
258 /*
259  * RDCE: Remote DMA Complete interrupt Enable.  If set, an interrupt is
260  * generated when a remote DMA transfer has completed.
261  */
262 #define ED_IMR_RDCE 0x40
263 
264 /*
265  * Bit 7 is unused/reserved.
266  */
267 
268 /*
269  *                  Data Configuration Register (DCR) definitions
270  */
271 
272 /*
273  * WTS: Word Transfer Select.  WTS establishes byte or word transfers for both
274  * remote and local DMA transfers
275  */
276 #define ED_DCR_WTS  0x01
277 
278 /*
279  * BOS: Byte Order Select.  BOS sets the byte order for the host.  Should be 0
280  * for 80x86, and 1 for 68000 series processors
281  */
282 #define ED_DCR_BOS  0x02
283 
284 /*
285  * LAS: Long Address Select.  When LAS is 1, the contents of the remote DMA
286  * registers RSAR0 and RSAR1 are used to provide A16-A31.
287  */
288 #define ED_DCR_LAS  0x04
289 
290 /*
291  * LS: Loopback Select.  When 0, loopback mode is selected.  Bits D1 and D2 of
292  * the TCR must also be programmed for loopback operation.  When 1, normal
293  * operation is selected.
294  */
295 #define ED_DCR_LS   0x08
296 
297 /*
298  * AR: Auto-initialize Remote.  When 0, data must be removed from ring-buffer
299  * under program control.  When 1, remote DMA is automatically initiated and
300  * the boundary pointer is automatically updated.
301  */
302 #define ED_DCR_AR   0x10
303 
304 /*
305  * FT0, FT1: Fifo Threshold select.
306  *
307  * FT1 FT0  Word-width  Byte-width
308  *  0   0   1 word      2 bytes
309  *  0   1   2 words     4 bytes
310  *  1   0   4 words     8 bytes
311  *  1   1   8 words     12 bytes
312  *
313  * During transmission, the FIFO threshold indicates the number of bytes or
314  * words that the FIFO has filled from the local DMA before BREQ is asserted.
315  * The transmission threshold is 16 bytes minus the receiver threshold.
316  */
317 #define ED_DCR_FT0  0x20
318 #define ED_DCR_FT1  0x40
319 
320 /*
321  * bit 7 (0x80) is unused/reserved
322  */
323 
324 /*
325  *                  Transmit Configuration Register (TCR) definitions
326  */
327 
328 /*
329  * CRC: Inhibit CRC.  If 0, CRC will be appended by the transmitter, if 0, CRC
330  * is not appended by the transmitter.
331  */
332 #define ED_TCR_CRC  0x01
333 
334 /*
335  * LB0, LB1: Loopback control.  These two bits set the type of loopback that is
336  * to be performed.
337  *
338  * LB1 LB0                    mode
339  *  0   0           0 - normal operation (DCR_LS = 0)
340  *  0   1           1 - internal loopback (DCR_LS = 0)
341  *  1   0           2 - external loopback (DCR_LS = 1)
342  *  1   1           3 - external loopback (DCR_LS = 0)
343  */
344 #define ED_TCR_LB0  0x02
345 #define ED_TCR_LB1  0x04
346 
347 /*
348  * ATD: Auto Transmit Disable.  Clear for normal operation.  When set, allows
349  * another station to disable the NIC's transmitter by transmitting to a
350  * multicast address hashing to bit 62.  Reception of a multicast address
351  * hashing to bit 63 enables the transmitter.
352  */
353 #define ED_TCR_ATD  0x08
354 
355 /*
356  * OFST: Collision Offset enable.  This bit when set modifies the backoff
357  * algorithm to allow prioritization of nodes.
358  */
359 #define ED_TCR_OFST 0x10
360 
361 /*
362  * bits 5, 6, and 7 are unused/reserved
363  */
364 
365 /*
366  *                  Transmit Status Register (TSR) definitions
367  */
368 
369 /*
370  * PTX: Packet Transmitted.  Indicates successful transmission of packet.
371  */
372 #define ED_TSR_PTX  0x01
373 
374 /*
375  * bit 1 (0x02) is unused/reserved
376  */
377 
378 /*
379  * COL: Transmit Collided.  Indicates that the transmission collided at least
380  * once with another station on the network.
381  */
382 #define ED_TSR_COL  0x04
383 
384 /*
385  * ABT: Transmit aborted.  Indicates that the transmission was aborted due to
386  * excessive collisions.
387  */
388 #define ED_TSR_ABT  0x08
389 
390 /*
391  * CRS: Carrier Sense Lost.  Indicates that carrier was lost during the
392  * transmission of the packet.  (Transmission is not aborted because of a loss
393  * of carrier).
394  */
395 #define ED_TSR_CRS  0x10
396 
397 /*
398  * FU: FIFO Underrun.  Indicates that the NIC wasn't able to access bus/
399  * transmission memory before the FIFO emptied.  Transmission of the packet was
400  * aborted.
401  */
402 #define ED_TSR_FU   0x20
403 
404 /*
405  * CDH: CD Heartbeat.  Indicates that the collision detection circuitry isn't
406  * working correctly during a collision heartbeat test.
407  */
408 #define ED_TSR_CDH  0x40
409 
410 /*
411  * OWC: Out of Window Collision: Indicates that a collision occurred after a
412  * slot time (51.2us).  The transmission is rescheduled just as in normal
413  * collisions.
414  */
415 #define ED_TSR_OWC  0x80
416 
417 /*
418  *                  Receiver Configuration Register (RCR) definitions
419  */
420 
421 /*
422  * SEP: Save Errored Packets.  If 0, error packets are discarded.  If set to 1,
423  * packets with CRC and frame errors are not discarded.
424  */
425 #define ED_RCR_SEP  0x01
426 
427 /*
428  * AR: Accept Runt packet.  If 0, packet with less than 64 byte are discarded.
429  * If set to 1, packets with less than 64 byte are not discarded.
430  */
431 #define ED_RCR_AR   0x02
432 
433 /*
434  * AB: Accept Broadcast.  If set, packets sent to the broadcast address will be
435  * accepted.
436  */
437 #define ED_RCR_AB   0x04
438 
439 /*
440  * AM: Accept Multicast.  If set, packets sent to a multicast address are
441  * checked for a match in the hashing array.  If clear, multicast packets are
442  * ignored.
443  */
444 #define ED_RCR_AM   0x08
445 
446 /*
447  * PRO: Promiscuous Physical.  If set, all packets with a physical addresses
448  * are accepted.  If clear, a physical destination address must match this
449  * station's address.  Note: for full promiscuous mode, RCR_AB and RCR_AM must
450  * also be set.  In addition, the multicast hashing array must be set to all
451  * 1's so that all multicast addresses are accepted.
452  */
453 #define ED_RCR_PRO  0x10
454 
455 /*
456  * MON: Monitor Mode.  If set, packets will be checked for good CRC and
457  * framing, but are not stored in the ring-buffer.  If clear, packets are
458  * stored (normal operation).
459  */
460 #define ED_RCR_MON  0x20
461 
462 /*
463  * INTT: Interrupt Trigger Mode.  Must be set if AX88190.
464  */
465 #define ED_RCR_INTT 0x40
466 
467 /*
468  * Bit 7 is unused/reserved.
469  */
470 
471 /*
472  *                  Receiver Status Register (RSR) definitions
473  */
474 
475 /*
476  * PRX: Packet Received without error.
477  */
478 #define ED_RSR_PRX  0x01
479 
480 /*
481  * CRC: CRC error.  Indicates that a packet has a CRC error.  Also set for
482  * frame alignment errors.
483  */
484 #define ED_RSR_CRC  0x02
485 
486 /*
487  * FAE: Frame Alignment Error.  Indicates that the incoming packet did not end
488  * on a byte boundary and the CRC did not match at the last byte boundary.
489  */
490 #define ED_RSR_FAE  0x04
491 
492 /*
493  * FO: FIFO Overrun.  Indicates that the FIFO was not serviced (during local
494  * DMA) causing it to overrun.  Reception of the packet is aborted.
495  */
496 #define ED_RSR_FO   0x08
497 
498 /*
499  * MPA: Missed Packet.  Indicates that the received packet couldn't be stored
500  * in the ring-buffer because of insufficient buffer space (exceeding the
501  * boundary pointer), or because the transfer to the ring-buffer was inhibited
502  * by RCR_MON - monitor mode.
503  */
504 #define ED_RSR_MPA  0x10
505 
506 /*
507  * PHY: Physical address.  If 0, the packet received was sent to a physical
508  * address.  If 1, the packet was accepted because of a multicast/broadcast
509  * address match.
510  */
511 #define ED_RSR_PHY  0x20
512 
513 /*
514  * DIS: Receiver Disabled.  Set to indicate that the receiver has entered
515  * monitor mode.  Cleared when the receiver exits monitor mode.
516  */
517 #define ED_RSR_DIS  0x40
518 
519 /*
520  * DFR: Deferring.  Set to indicate a 'jabber' condition.  The CRS and COL
521  * inputs are active, and the transceiver has set the CD line as a result of
522  * the jabber.
523  */
524 #define ED_RSR_DFR  0x80
525 
526 /*
527  * receive ring descriptor
528  *
529  * The National Semiconductor DS8390 Network interface controller uses the
530  * following receive ring headers.  The way this works is that the memory on
531  * the interface card is chopped up into 256 bytes blocks.  A contiguous
532  * portion of those blocks are marked for receive packets by setting start and
533  * end block #'s in the NIC.  For each packet that is put into the receive
534  * ring, one of these headers (4 bytes each) is tacked onto the front.   The
535  * first byte is a copy of the receiver status register at the time the packet
536  * was received.
537  */
538 struct dp8390_ring  {
539           u_int8_t  rsr;                /* receiver status */
540           u_int8_t  next_packet;        /* pointer to next packet */
541           u_int16_t count;              /* bytes in packet (length + 4) */
542 };
543 
544 /*
545  * Common constants
546  */
547 #define ED_PAGE_SIZE                    256       /* Size of RAM pages in bytes */
548 #define   ED_PAGE_MASK                  255
549 #define   ED_PAGE_SHIFT                 8
550 
551 #define ED_TXBUF_SIZE                   6         /* Size of TX buffer in pages */
552