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