xref: /OK3568_Linux_fs/kernel/drivers/net/fddi/skfp/h/supern_2.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /******************************************************************************
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  *	(C)Copyright 1998,1999 SysKonnect,
5*4882a593Smuzhiyun  *	a business unit of Schneider & Koch & Co. Datensysteme GmbH.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *	The information in this file is provided "AS IS" without warranty.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  ******************************************************************************/
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /*
12*4882a593Smuzhiyun 	defines for AMD Supernet II chip set
13*4882a593Smuzhiyun 	the chips are referred to as
14*4882a593Smuzhiyun 		FPLUS	Formac Plus
15*4882a593Smuzhiyun 		PLC	Physical Layer
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun 	added defines for AMD Supernet III chip set
18*4882a593Smuzhiyun 	added comments on differences between Supernet II and Supernet III
19*4882a593Smuzhiyun 	added defines for the Motorola ELM (MOT_ELM)
20*4882a593Smuzhiyun */
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #ifndef	_SUPERNET_
23*4882a593Smuzhiyun #define _SUPERNET_
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /*
26*4882a593Smuzhiyun  * Define Supernet 3 when used
27*4882a593Smuzhiyun  */
28*4882a593Smuzhiyun #ifdef	PCI
29*4882a593Smuzhiyun #ifndef	SUPERNET_3
30*4882a593Smuzhiyun #define	SUPERNET_3
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun #define TAG
33*4882a593Smuzhiyun #endif
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define	MB	0xff
36*4882a593Smuzhiyun #define	MW	0xffff
37*4882a593Smuzhiyun #define	MD	0xffffffff
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun /*
40*4882a593Smuzhiyun  * FORMAC frame status (rx_msext)
41*4882a593Smuzhiyun  */
42*4882a593Smuzhiyun #define	FS_EI		(1<<2)
43*4882a593Smuzhiyun #define	FS_AI		(1<<1)
44*4882a593Smuzhiyun #define	FS_CI		(1<<0)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define FS_MSVALID	(1<<15)		/* end of queue */
47*4882a593Smuzhiyun #define FS_MSRABT	(1<<14)		/* frame was aborted during reception*/
48*4882a593Smuzhiyun #define FS_SSRCRTG	(1<<12)		/* if SA has set MSB (source-routing)*/
49*4882a593Smuzhiyun #define FS_SEAC2	(FS_EI<<9)	/* error indicator */
50*4882a593Smuzhiyun #define FS_SEAC1	(FS_AI<<9)	/* address indicator */
51*4882a593Smuzhiyun #define FS_SEAC0	(FS_CI<<9)	/* copy indicator */
52*4882a593Smuzhiyun #define FS_SFRMERR	(1<<8)		/* error detected (CRC or length) */
53*4882a593Smuzhiyun #define FS_SADRRG	(1<<7)		/* address recognized */
54*4882a593Smuzhiyun #define FS_SFRMTY2	(1<<6)		/* frame-class bit */
55*4882a593Smuzhiyun #define FS_SFRMTY1	(1<<5)		/* frame-type bit (impementor) */
56*4882a593Smuzhiyun #define FS_SFRMTY0	(1<<4)		/* frame-type bit (LLC) */
57*4882a593Smuzhiyun #define FS_ERFBB1	(1<<1)		/* byte offset (depends on LSB bit) */
58*4882a593Smuzhiyun #define FS_ERFBB0	(1<<0)		/*  - " - */
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun /*
61*4882a593Smuzhiyun  * status frame type
62*4882a593Smuzhiyun  */
63*4882a593Smuzhiyun #define	FRM_SMT		(0)	/* asynchr. frames */
64*4882a593Smuzhiyun #define	FRM_LLCA	(1)
65*4882a593Smuzhiyun #define	FRM_IMPA	(2)
66*4882a593Smuzhiyun #define	FRM_MAC		(4)	/* synchr. frames */
67*4882a593Smuzhiyun #define	FRM_LLCS	(5)
68*4882a593Smuzhiyun #define	FRM_IMPS	(6)
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun /*
71*4882a593Smuzhiyun  * bits in rx_descr.i	(receive frame status word)
72*4882a593Smuzhiyun  */
73*4882a593Smuzhiyun #define RX_MSVALID	((long)1<<31)	/* memory status valid */
74*4882a593Smuzhiyun #define RX_MSRABT	((long)1<<30)	/* memory status receive abort */
75*4882a593Smuzhiyun #define RX_FS_E		((long)FS_SEAC2<<16)	/* error indicator */
76*4882a593Smuzhiyun #define RX_FS_A		((long)FS_SEAC1<<16)	/* address indicator */
77*4882a593Smuzhiyun #define RX_FS_C		((long)FS_SEAC0<<16)	/* copy indicator */
78*4882a593Smuzhiyun #define RX_FS_CRC	((long)FS_SFRMERR<<16)/* error detected */
79*4882a593Smuzhiyun #define RX_FS_ADDRESS	((long)FS_SADRRG<<16)	/* address recognized */
80*4882a593Smuzhiyun #define RX_FS_MAC	((long)FS_SFRMTY2<<16)/* MAC frame */
81*4882a593Smuzhiyun #define RX_FS_SMT	((long)0<<16)		/* SMT frame */
82*4882a593Smuzhiyun #define RX_FS_IMPL	((long)FS_SFRMTY1<<16)/* implementer frame */
83*4882a593Smuzhiyun #define RX_FS_LLC	((long)FS_SFRMTY0<<16)/* LLC frame */
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /*
86*4882a593Smuzhiyun  * receive frame descriptor
87*4882a593Smuzhiyun  */
88*4882a593Smuzhiyun union rx_descr {
89*4882a593Smuzhiyun 	struct {
90*4882a593Smuzhiyun #ifdef	LITTLE_ENDIAN
91*4882a593Smuzhiyun 	unsigned int	rx_length :16 ;	/* frame length lower/upper byte */
92*4882a593Smuzhiyun 	unsigned int	rx_erfbb  :2 ;	/* received frame byte boundary */
93*4882a593Smuzhiyun 	unsigned int	rx_reserv2:2 ;	/* reserved */
94*4882a593Smuzhiyun 	unsigned int	rx_sfrmty :3 ;	/* frame type bits */
95*4882a593Smuzhiyun 	unsigned int	rx_sadrrg :1 ;	/* DA == MA or broad-/multicast */
96*4882a593Smuzhiyun 	unsigned int	rx_sfrmerr:1 ;	/* received frame not valid */
97*4882a593Smuzhiyun 	unsigned int	rx_seac0  :1 ;	/* frame-copied  C-indicator */
98*4882a593Smuzhiyun 	unsigned int	rx_seac1  :1 ;	/* address-match A-indicator */
99*4882a593Smuzhiyun 	unsigned int	rx_seac2  :1 ;	/* frame-error   E-indicator */
100*4882a593Smuzhiyun 	unsigned int	rx_ssrcrtg:1 ;	/* == 1 SA has MSB set */
101*4882a593Smuzhiyun 	unsigned int	rx_reserv1:1 ;	/* reserved */
102*4882a593Smuzhiyun 	unsigned int	rx_msrabt :1 ;	/* memory status receive abort */
103*4882a593Smuzhiyun 	unsigned int	rx_msvalid:1 ;	/* memory status valid */
104*4882a593Smuzhiyun #else
105*4882a593Smuzhiyun 	unsigned int	rx_msvalid:1 ;	/* memory status valid */
106*4882a593Smuzhiyun 	unsigned int	rx_msrabt :1 ;	/* memory status receive abort */
107*4882a593Smuzhiyun 	unsigned int	rx_reserv1:1 ;	/* reserved */
108*4882a593Smuzhiyun 	unsigned int	rx_ssrcrtg:1 ;	/* == 1 SA has MSB set */
109*4882a593Smuzhiyun 	unsigned int	rx_seac2  :1 ;	/* frame-error   E-indicator */
110*4882a593Smuzhiyun 	unsigned int	rx_seac1  :1 ;	/* address-match A-indicator */
111*4882a593Smuzhiyun 	unsigned int	rx_seac0  :1 ;	/* frame-copied  C-indicator */
112*4882a593Smuzhiyun 	unsigned int	rx_sfrmerr:1 ;	/* received frame not valid */
113*4882a593Smuzhiyun 	unsigned int	rx_sadrrg :1 ;	/* DA == MA or broad-/multicast */
114*4882a593Smuzhiyun 	unsigned int	rx_sfrmty :3 ;	/* frame type bits */
115*4882a593Smuzhiyun 	unsigned int	rx_erfbb  :2 ;	/* received frame byte boundary */
116*4882a593Smuzhiyun 	unsigned int	rx_reserv2:2 ;	/* reserved */
117*4882a593Smuzhiyun 	unsigned int	rx_length :16 ;	/* frame length lower/upper byte */
118*4882a593Smuzhiyun #endif
119*4882a593Smuzhiyun 	} r ;
120*4882a593Smuzhiyun 	long	i ;
121*4882a593Smuzhiyun } ;
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /* defines for Receive Frame Descriptor access */
124*4882a593Smuzhiyun #define RD_S_ERFBB	0x00030000L	/* received frame byte boundary */
125*4882a593Smuzhiyun #define RD_S_RES2	0x000c0000L	/* reserved */
126*4882a593Smuzhiyun #define RD_S_SFRMTY	0x00700000L	/* frame type bits */
127*4882a593Smuzhiyun #define RD_S_SADRRG	0x00800000L	/* DA == MA or broad-/multicast */
128*4882a593Smuzhiyun #define RD_S_SFRMERR	0x01000000L	/* received frame not valid */
129*4882a593Smuzhiyun #define	RD_S_SEAC	0x0e000000L	/* frame status indicators */
130*4882a593Smuzhiyun #define RD_S_SEAC0	0x02000000L	/* frame-copied  case-indicator */
131*4882a593Smuzhiyun #define RD_S_SEAC1	0x04000000L	/* address-match A-indicator */
132*4882a593Smuzhiyun #define RD_S_SEAC2	0x08000000L	/* frame-error   E-indicator */
133*4882a593Smuzhiyun #define RD_S_SSRCRTG	0x10000000L	/* == 1 SA has MSB set */
134*4882a593Smuzhiyun #define RD_S_RES1	0x20000000L	/* reserved */
135*4882a593Smuzhiyun #define RD_S_MSRABT	0x40000000L	/* memory status receive abort */
136*4882a593Smuzhiyun #define RD_S_MSVALID	0x80000000L	/* memory status valid */
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun #define	RD_STATUS	0xffff0000L
139*4882a593Smuzhiyun #define	RD_LENGTH	0x0000ffffL
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun /* defines for Receive Frames Status Word values */
142*4882a593Smuzhiyun /*RD_S_SFRMTY*/
143*4882a593Smuzhiyun #define RD_FRM_SMT	(unsigned long)(0<<20)     /* asynchr. frames */
144*4882a593Smuzhiyun #define RD_FRM_LLCA	(unsigned long)(1<<20)
145*4882a593Smuzhiyun #define RD_FRM_IMPA	(unsigned long)(2<<20)
146*4882a593Smuzhiyun #define RD_FRM_MAC	(unsigned long)(4<<20)     /* synchr. frames */
147*4882a593Smuzhiyun #define RD_FRM_LLCS	(unsigned long)(5<<20)
148*4882a593Smuzhiyun #define RD_FRM_IMPS	(unsigned long)(6<<20)
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #define TX_DESCRIPTOR	0x40000000L
151*4882a593Smuzhiyun #define TX_OFFSET_3	0x18000000L
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun #define TXP1	2
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun /*
156*4882a593Smuzhiyun  * transmit frame descriptor
157*4882a593Smuzhiyun  */
158*4882a593Smuzhiyun union tx_descr {
159*4882a593Smuzhiyun 	struct {
160*4882a593Smuzhiyun #ifdef	LITTLE_ENDIAN
161*4882a593Smuzhiyun 	unsigned int	tx_length:16 ;	/* frame length lower/upper byte */
162*4882a593Smuzhiyun 	unsigned int	tx_res	 :8 ;	/* reserved 	 (bit 16..23) */
163*4882a593Smuzhiyun 	unsigned int	tx_xmtabt:1 ;	/* transmit abort */
164*4882a593Smuzhiyun 	unsigned int	tx_nfcs  :1 ;	/* no frame check sequence */
165*4882a593Smuzhiyun 	unsigned int	tx_xdone :1 ;	/* give up token */
166*4882a593Smuzhiyun 	unsigned int	tx_rpxm  :2 ;	/* byte offset */
167*4882a593Smuzhiyun 	unsigned int	tx_pat1  :2 ;	/* must be TXP1 */
168*4882a593Smuzhiyun 	unsigned int	tx_more	 :1 ;	/* more frame in chain */
169*4882a593Smuzhiyun #else
170*4882a593Smuzhiyun 	unsigned int	tx_more	 :1 ;	/* more frame in chain */
171*4882a593Smuzhiyun 	unsigned int	tx_pat1  :2 ;	/* must be TXP1 */
172*4882a593Smuzhiyun 	unsigned int	tx_rpxm  :2 ;	/* byte offset */
173*4882a593Smuzhiyun 	unsigned int	tx_xdone :1 ;	/* give up token */
174*4882a593Smuzhiyun 	unsigned int	tx_nfcs  :1 ;	/* no frame check sequence */
175*4882a593Smuzhiyun 	unsigned int	tx_xmtabt:1 ;	/* transmit abort */
176*4882a593Smuzhiyun 	unsigned int	tx_res	 :8 ;	/* reserved 	 (bit 16..23) */
177*4882a593Smuzhiyun 	unsigned int	tx_length:16 ;	/* frame length lower/upper byte */
178*4882a593Smuzhiyun #endif
179*4882a593Smuzhiyun 	} t ;
180*4882a593Smuzhiyun 	long	i ;
181*4882a593Smuzhiyun } ;
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun /* defines for Transmit Descriptor access */
184*4882a593Smuzhiyun #define	TD_C_MORE	0x80000000L	/* more frame in chain */
185*4882a593Smuzhiyun #define	TD_C_DESCR	0x60000000L	/* must be TXP1 */
186*4882a593Smuzhiyun #define	TD_C_TXFBB	0x18000000L	/* byte offset */
187*4882a593Smuzhiyun #define	TD_C_XDONE	0x04000000L	/* give up token */
188*4882a593Smuzhiyun #define TD_C_NFCS	0x02000000L	/* no frame check sequence */
189*4882a593Smuzhiyun #define TD_C_XMTABT	0x01000000L	/* transmit abort */
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun #define	TD_C_LNCNU	0x0000ff00L
192*4882a593Smuzhiyun #define TD_C_LNCNL	0x000000ffL
193*4882a593Smuzhiyun #define TD_C_LNCN	0x0000ffffL	/* frame length lower/upper byte */
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun /*
196*4882a593Smuzhiyun  * transmit pointer
197*4882a593Smuzhiyun  */
198*4882a593Smuzhiyun union tx_pointer {
199*4882a593Smuzhiyun 	struct t {
200*4882a593Smuzhiyun #ifdef	LITTLE_ENDIAN
201*4882a593Smuzhiyun 	unsigned int	tp_pointer:16 ;	/* pointer to tx_descr (low/high) */
202*4882a593Smuzhiyun 	unsigned int	tp_res	  :8 ;	/* reserved 	 (bit 16..23) */
203*4882a593Smuzhiyun 	unsigned int	tp_pattern:8 ;	/* fixed pattern (bit 24..31) */
204*4882a593Smuzhiyun #else
205*4882a593Smuzhiyun 	unsigned int	tp_pattern:8 ;	/* fixed pattern (bit 24..31) */
206*4882a593Smuzhiyun 	unsigned int	tp_res	  :8 ;	/* reserved 	 (bit 16..23) */
207*4882a593Smuzhiyun 	unsigned int	tp_pointer:16 ;	/* pointer to tx_descr (low/high) */
208*4882a593Smuzhiyun #endif
209*4882a593Smuzhiyun 	} t ;
210*4882a593Smuzhiyun 	long	i ;
211*4882a593Smuzhiyun } ;
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun /* defines for Nontag Mode Pointer access */
214*4882a593Smuzhiyun #define	TD_P_CNTRL	0xff000000L
215*4882a593Smuzhiyun #define TD_P_RPXU	0x0000ff00L
216*4882a593Smuzhiyun #define TD_P_RPXL	0x000000ffL
217*4882a593Smuzhiyun #define TD_P_RPX	0x0000ffffL
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun #define TX_PATTERN	0xa0
221*4882a593Smuzhiyun #define TX_POINTER_END	0xa0000000L
222*4882a593Smuzhiyun #define TX_INT_PATTERN	0xa0000000L
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun struct tx_queue {
225*4882a593Smuzhiyun 	struct tx_queue *tq_next ;
226*4882a593Smuzhiyun 	u_short tq_pack_offset ;	/* offset buffer memory */
227*4882a593Smuzhiyun 	u_char  tq_pad[2] ;
228*4882a593Smuzhiyun } ;
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun /*
231*4882a593Smuzhiyun 	defines for FORMAC Plus (Am79C830)
232*4882a593Smuzhiyun */
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun /*
235*4882a593Smuzhiyun  *  FORMAC+ read/write (r/w) registers
236*4882a593Smuzhiyun  */
237*4882a593Smuzhiyun #define FM_CMDREG1	0x00		/* write command reg 1 instruction */
238*4882a593Smuzhiyun #define FM_CMDREG2	0x01		/* write command reg 2 instruction */
239*4882a593Smuzhiyun #define FM_ST1U		0x00		/* read upper 16-bit of status reg 1 */
240*4882a593Smuzhiyun #define FM_ST1L		0x01		/* read lower 16-bit of status reg 1 */
241*4882a593Smuzhiyun #define FM_ST2U		0x02		/* read upper 16-bit of status reg 2 */
242*4882a593Smuzhiyun #define FM_ST2L		0x03		/* read lower 16-bit of status reg 2 */
243*4882a593Smuzhiyun #define FM_IMSK1U	0x04		/* r/w upper 16-bit of IMSK 1 */
244*4882a593Smuzhiyun #define FM_IMSK1L	0x05		/* r/w lower 16-bit of IMSK 1 */
245*4882a593Smuzhiyun #define FM_IMSK2U	0x06		/* r/w upper 16-bit of IMSK 2 */
246*4882a593Smuzhiyun #define FM_IMSK2L	0x07		/* r/w lower 16-bit of IMSK 2 */
247*4882a593Smuzhiyun #define FM_SAID		0x08		/* r/w short addr.-individual */
248*4882a593Smuzhiyun #define FM_LAIM		0x09		/* r/w long addr.-ind. (MSW of LAID) */
249*4882a593Smuzhiyun #define FM_LAIC		0x0a		/* r/w long addr.-ind. (middle)*/
250*4882a593Smuzhiyun #define FM_LAIL		0x0b		/* r/w long addr.-ind. (LSW) */
251*4882a593Smuzhiyun #define FM_SAGP		0x0c		/* r/w short address-group */
252*4882a593Smuzhiyun #define FM_LAGM		0x0d		/* r/w long addr.-gr. (MSW of LAGP) */
253*4882a593Smuzhiyun #define FM_LAGC		0x0e		/* r/w long addr.-gr. (middle) */
254*4882a593Smuzhiyun #define FM_LAGL		0x0f		/* r/w long addr.-gr. (LSW) */
255*4882a593Smuzhiyun #define FM_MDREG1	0x10		/* r/w 16-bit mode reg 1 */
256*4882a593Smuzhiyun #define FM_STMCHN	0x11		/* read state-machine reg */
257*4882a593Smuzhiyun #define FM_MIR1		0x12		/* read upper 16-bit of MAC Info Reg */
258*4882a593Smuzhiyun #define FM_MIR0		0x13		/* read lower 16-bit of MAC Info Reg */
259*4882a593Smuzhiyun #define FM_TMAX		0x14		/* r/w 16-bit TMAX reg */
260*4882a593Smuzhiyun #define FM_TVX		0x15		/* write 8-bit TVX reg with NP7-0
261*4882a593Smuzhiyun 					   read TVX on NP7-0, timer on NP15-8*/
262*4882a593Smuzhiyun #define FM_TRT		0x16		/* r/w upper 16-bit of TRT timer */
263*4882a593Smuzhiyun #define FM_THT		0x17		/* r/w upper 16-bit of THT timer */
264*4882a593Smuzhiyun #define FM_TNEG		0x18		/* read upper 16-bit of TNEG (TTRT) */
265*4882a593Smuzhiyun #define FM_TMRS		0x19		/* read lower 5-bit of TNEG,TRT,THT */
266*4882a593Smuzhiyun 			/* F E D C  B A 9 8  7 6 5 4  3 2 1 0
267*4882a593Smuzhiyun 			   x |-TNEG4-0| |-TRT4-0-| |-THT4-0-| (x-late count) */
268*4882a593Smuzhiyun #define FM_TREQ0	0x1a		/* r/w 16-bit TREQ0 reg (LSW of TRT) */
269*4882a593Smuzhiyun #define FM_TREQ1	0x1b		/* r/w 16-bit TREQ1 reg (MSW of TRT) */
270*4882a593Smuzhiyun #define FM_PRI0		0x1c		/* r/w priority r. for asyn.-queue 0 */
271*4882a593Smuzhiyun #define FM_PRI1		0x1d		/* r/w priority r. for asyn.-queue 1 */
272*4882a593Smuzhiyun #define FM_PRI2		0x1e		/* r/w priority r. for asyn.-queue 2 */
273*4882a593Smuzhiyun #define FM_TSYNC	0x1f		/* r/w 16-bit of the TSYNC register */
274*4882a593Smuzhiyun #define FM_MDREG2	0x20		/* r/w 16-bit mode reg 2 */
275*4882a593Smuzhiyun #define FM_FRMTHR	0x21		/* r/w the frame threshold register */
276*4882a593Smuzhiyun #define FM_EACB		0x22		/* r/w end addr of claim/beacon area */
277*4882a593Smuzhiyun #define FM_EARV		0x23		/* r/w end addr of receive queue */
278*4882a593Smuzhiyun /* Supernet 3 */
279*4882a593Smuzhiyun #define	FM_EARV1	FM_EARV
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #define FM_EAS		0x24		/* r/w end addr of synchr. queue */
282*4882a593Smuzhiyun #define FM_EAA0		0x25		/* r/w end addr of asyn. queue 0 */
283*4882a593Smuzhiyun #define FM_EAA1		0x26		/* r/w end addr of asyn. queue 1 */
284*4882a593Smuzhiyun #define FM_EAA2		0x27		/* r/w end addr of asyn. queue 2 */
285*4882a593Smuzhiyun #define FM_SACL		0x28		/* r/w start addr of claim frame */
286*4882a593Smuzhiyun #define FM_SABC		0x29		/* r/w start addr of beacon frame */
287*4882a593Smuzhiyun #define FM_WPXSF	0x2a		/* r/w the write ptr. for special fr.*/
288*4882a593Smuzhiyun #define FM_RPXSF	0x2b		/* r/w the read ptr. for special fr. */
289*4882a593Smuzhiyun #define FM_RPR		0x2d		/* r/w the read ptr. for receive qu. */
290*4882a593Smuzhiyun #define FM_WPR		0x2e		/* r/w the write ptr. for receive qu.*/
291*4882a593Smuzhiyun #define FM_SWPR		0x2f		/* r/w the shadow wr.-ptr. for rec.q.*/
292*4882a593Smuzhiyun /* Supernet 3 */
293*4882a593Smuzhiyun #define FM_RPR1         FM_RPR
294*4882a593Smuzhiyun #define FM_WPR1         FM_WPR
295*4882a593Smuzhiyun #define FM_SWPR1        FM_SWPR
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun #define FM_WPXS		0x30		/* r/w the write ptr. for synchr. qu.*/
298*4882a593Smuzhiyun #define FM_WPXA0	0x31		/* r/w the write ptr. for asyn. qu.0 */
299*4882a593Smuzhiyun #define FM_WPXA1	0x32		/* r/w the write ptr. for asyn. qu.1 */
300*4882a593Smuzhiyun #define FM_WPXA2	0x33		/* r/w the write ptr. for asyn. qu.2 */
301*4882a593Smuzhiyun #define FM_SWPXS	0x34		/* r/w the shadow wr.-ptr. for syn.q.*/
302*4882a593Smuzhiyun #define FM_SWPXA0	0x35		/* r/w the shad. wr.-ptr. for asyn.q0*/
303*4882a593Smuzhiyun #define FM_SWPXA1	0x36		/* r/w the shad. wr.-ptr. for asyn.q1*/
304*4882a593Smuzhiyun #define FM_SWPXA2	0x37		/* r/w the shad. wr.-ptr. for asyn.q2*/
305*4882a593Smuzhiyun #define FM_RPXS		0x38		/* r/w the read ptr. for synchr. qu. */
306*4882a593Smuzhiyun #define FM_RPXA0	0x39		/* r/w the read ptr. for asyn. qu. 0 */
307*4882a593Smuzhiyun #define FM_RPXA1	0x3a		/* r/w the read ptr. for asyn. qu. 1 */
308*4882a593Smuzhiyun #define FM_RPXA2	0x3b		/* r/w the read ptr. for asyn. qu. 2 */
309*4882a593Smuzhiyun #define FM_MARR		0x3c		/* r/w the memory read addr register */
310*4882a593Smuzhiyun #define FM_MARW		0x3d		/* r/w the memory write addr register*/
311*4882a593Smuzhiyun #define FM_MDRU		0x3e		/* r/w upper 16-bit of mem. data reg */
312*4882a593Smuzhiyun #define FM_MDRL		0x3f		/* r/w lower 16-bit of mem. data reg */
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun /* following instructions relate to MAC counters and timer */
315*4882a593Smuzhiyun #define FM_TMSYNC	0x40		/* r/w upper 16 bits of TMSYNC timer */
316*4882a593Smuzhiyun #define FM_FCNTR	0x41		/* r/w the 16-bit frame counter */
317*4882a593Smuzhiyun #define FM_LCNTR	0x42		/* r/w the 16-bit lost counter */
318*4882a593Smuzhiyun #define FM_ECNTR	0x43		/* r/w the 16-bit error counter */
319*4882a593Smuzhiyun 
320*4882a593Smuzhiyun /* Supernet 3:	extensions to old register block */
321*4882a593Smuzhiyun #define	FM_FSCNTR	0x44		/* r/? Frame Strip Counter */
322*4882a593Smuzhiyun #define	FM_FRSELREG	0x45		/* r/w Frame Selection Register */
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun /* Supernet 3:	extensions for 2. receive queue etc. */
325*4882a593Smuzhiyun #define	FM_MDREG3	0x60		/* r/w Mode Register 3 */
326*4882a593Smuzhiyun #define	FM_ST3U		0x61		/* read upper 16-bit of status reg 3 */
327*4882a593Smuzhiyun #define	FM_ST3L		0x62		/* read lower 16-bit of status reg 3 */
328*4882a593Smuzhiyun #define	FM_IMSK3U	0x63		/* r/w upper 16-bit of IMSK reg 3 */
329*4882a593Smuzhiyun #define	FM_IMSK3L	0x64		/* r/w lower 16-bit of IMSK reg 3 */
330*4882a593Smuzhiyun #define	FM_IVR		0x65		/* read Interrupt Vector register */
331*4882a593Smuzhiyun #define	FM_IMR		0x66		/* r/w Interrupt mask register */
332*4882a593Smuzhiyun /* 0x67	Hidden */
333*4882a593Smuzhiyun #define	FM_RPR2		0x68		/* r/w the read ptr. for rec. qu. 2 */
334*4882a593Smuzhiyun #define	FM_WPR2		0x69		/* r/w the write ptr. for rec. qu. 2 */
335*4882a593Smuzhiyun #define	FM_SWPR2	0x6a		/* r/w the shadow wptr. for rec. q. 2 */
336*4882a593Smuzhiyun #define	FM_EARV2	0x6b		/* r/w end addr of rec. qu. 2 */
337*4882a593Smuzhiyun #define	FM_UNLCKDLY	0x6c		/* r/w Auto Unlock Delay register */
338*4882a593Smuzhiyun 					/* Bit 15-8: RECV2 unlock threshold */
339*4882a593Smuzhiyun 					/* Bit  7-0: RECV1 unlock threshold */
340*4882a593Smuzhiyun /* 0x6f-0x73	Hidden */
341*4882a593Smuzhiyun #define	FM_LTDPA1	0x79		/* r/w Last Trans desc ptr for A1 qu. */
342*4882a593Smuzhiyun /* 0x80-0x9a	PLCS registers of built-in PLCS  (Supernet 3 only) */
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun /* Supernet 3: Adderss Filter Registers */
345*4882a593Smuzhiyun #define	FM_AFCMD	0xb0		/* r/w Address Filter Command Reg */
346*4882a593Smuzhiyun #define	FM_AFSTAT	0xb2		/* r/w Address Filter Status Reg */
347*4882a593Smuzhiyun #define	FM_AFBIST	0xb4		/* r/w Address Filter BIST signature */
348*4882a593Smuzhiyun #define	FM_AFCOMP2	0xb6		/* r/w Address Filter Comparand 2 */
349*4882a593Smuzhiyun #define	FM_AFCOMP1	0xb8		/* r/w Address Filter Comparand 1 */
350*4882a593Smuzhiyun #define	FM_AFCOMP0	0xba		/* r/w Address Filter Comparand 0 */
351*4882a593Smuzhiyun #define	FM_AFMASK2	0xbc		/* r/w Address Filter Mask 2 */
352*4882a593Smuzhiyun #define	FM_AFMASK1	0xbe		/* r/w Address Filter Mask 1 */
353*4882a593Smuzhiyun #define	FM_AFMASK0	0xc0		/* r/w Address Filter Mask 0 */
354*4882a593Smuzhiyun #define	FM_AFPERS	0xc2		/* r/w Address Filter Personality Reg */
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun /* Supernet 3: Orion (PDX?) Registers */
357*4882a593Smuzhiyun #define	FM_ORBIST	0xd0		/* r/w Orion BIST signature */
358*4882a593Smuzhiyun #define	FM_ORSTAT	0xd2		/* r/w Orion Status Register */
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun /*
362*4882a593Smuzhiyun  * Mode Register 1 (MDREG1)
363*4882a593Smuzhiyun  */
364*4882a593Smuzhiyun #define FM_RES0		0x0001		/* reserved */
365*4882a593Smuzhiyun 					/* SN3: other definition */
366*4882a593Smuzhiyun #define	FM_XMTINH_HOLD	0x0002		/* transmit-inhibit/hold bit */
367*4882a593Smuzhiyun 					/* SN3: other definition */
368*4882a593Smuzhiyun #define	FM_HOFLXI	0x0003		/* SN3: Hold / Flush / Inhibit */
369*4882a593Smuzhiyun #define	FM_FULL_HALF	0x0004		/* full-duplex/half-duplex bit */
370*4882a593Smuzhiyun #define	FM_LOCKTX	0x0008		/* lock-transmit-asynchr.-queues bit */
371*4882a593Smuzhiyun #define FM_EXGPA0	0x0010		/* extended-group-addressing bit 0 */
372*4882a593Smuzhiyun #define FM_EXGPA1	0x0020		/* extended-group-addressing bit 1 */
373*4882a593Smuzhiyun #define FM_DISCRY	0x0040		/* disable-carry bit */
374*4882a593Smuzhiyun 					/* SN3: reserved */
375*4882a593Smuzhiyun #define FM_SELRA	0x0080		/* select input from PHY (1=RA,0=RB) */
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun #define FM_ADDET	0x0700		/* address detection */
378*4882a593Smuzhiyun #define FM_MDAMA	(0<<8)		/* address detection : DA = MA */
379*4882a593Smuzhiyun #define FM_MDASAMA	(1<<8)		/* address detection : DA=MA||SA=MA */
380*4882a593Smuzhiyun #define	FM_MRNNSAFNMA	(2<<8)		/* rec. non-NSA frames DA=MA&&SA!=MA */
381*4882a593Smuzhiyun #define	FM_MRNNSAF	(3<<8)		/* rec. non-NSA frames DA = MA */
382*4882a593Smuzhiyun #define	FM_MDISRCV	(4<<8)		/* disable receive function */
383*4882a593Smuzhiyun #define	FM_MRES0	(5<<8)		/* reserve */
384*4882a593Smuzhiyun #define	FM_MLIMPROM	(6<<8)		/* limited-promiscuous mode */
385*4882a593Smuzhiyun #define FM_MPROMISCOUS	(7<<8)		/* address detection : promiscuous */
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun #define FM_SELSA	0x0800		/* select-short-address bit */
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun #define FM_MMODE	0x7000		/* mode select */
390*4882a593Smuzhiyun #define FM_MINIT	(0<<12)		/* initialize */
391*4882a593Smuzhiyun #define FM_MMEMACT	(1<<12)		/* memory activate */
392*4882a593Smuzhiyun #define FM_MONLINESP	(2<<12)		/* on-line special */
393*4882a593Smuzhiyun #define FM_MONLINE	(3<<12)		/* on-line (FDDI operational mode) */
394*4882a593Smuzhiyun #define FM_MILOOP	(4<<12)		/* internal loopback */
395*4882a593Smuzhiyun #define FM_MRES1	(5<<12)		/* reserved */
396*4882a593Smuzhiyun #define FM_MRES2	(6<<12)		/* reserved */
397*4882a593Smuzhiyun #define FM_MELOOP	(7<<12)		/* external loopback */
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun #define	FM_SNGLFRM	0x8000		/* single-frame-receive mode */
400*4882a593Smuzhiyun 					/* SN3: reserved */
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun #define	MDR1INIT	(FM_MINIT | FM_MDAMA)
403*4882a593Smuzhiyun 
404*4882a593Smuzhiyun /*
405*4882a593Smuzhiyun  * Mode Register 2 (MDREG2)
406*4882a593Smuzhiyun  */
407*4882a593Smuzhiyun #define	FM_AFULL	0x000f		/* 4-bit value (empty loc.in txqueue)*/
408*4882a593Smuzhiyun #define	FM_RCVERR	0x0010		/* rec.-errored-frames bit */
409*4882a593Smuzhiyun #define	FM_SYMCTL	0x0020		/* sysmbol-control bit */
410*4882a593Smuzhiyun 					/* SN3: reserved */
411*4882a593Smuzhiyun #define	FM_SYNPRQ	0x0040		/* synchron.-NP-DMA-request bit */
412*4882a593Smuzhiyun #define	FM_ENNPRQ	0x0080		/* enable-NP-DMA-request bit */
413*4882a593Smuzhiyun #define	FM_ENHSRQ	0x0100		/* enable-host-request bit */
414*4882a593Smuzhiyun #define	FM_RXFBB01	0x0600		/* rec. frame byte boundary bit0 & 1 */
415*4882a593Smuzhiyun #define	FM_LSB		0x0800		/* determ. ordering of bytes in buffer*/
416*4882a593Smuzhiyun #define	FM_PARITY	0x1000		/* 1 = even, 0 = odd */
417*4882a593Smuzhiyun #define	FM_CHKPAR	0x2000		/* 1 = parity of 32-bit buffer BD-bus*/
418*4882a593Smuzhiyun #define	FM_STRPFCS	0x4000		/* 1 = strips FCS field of rec.frame */
419*4882a593Smuzhiyun #define	FM_BMMODE	0x8000		/* Buffer-Memory-Mode (1 = tag mode) */
420*4882a593Smuzhiyun 					/* SN3: 1 = tag, 0 = modified tag */
421*4882a593Smuzhiyun 
422*4882a593Smuzhiyun /*
423*4882a593Smuzhiyun  * Status Register 1, Upper 16 Bits (ST1U)
424*4882a593Smuzhiyun  */
425*4882a593Smuzhiyun #define FM_STEFRMS	0x0001		/* transmit end of frame: synchr. qu.*/
426*4882a593Smuzhiyun #define FM_STEFRMA0	0x0002		/* transmit end of frame: asyn. qu.0 */
427*4882a593Smuzhiyun #define FM_STEFRMA1	0x0004		/* transmit end of frame: asyn. qu.1 */
428*4882a593Smuzhiyun #define FM_STEFRMA2	0x0008		/* transmit end of frame: asyn. qu.2 */
429*4882a593Smuzhiyun 					/* SN3: reserved */
430*4882a593Smuzhiyun #define FM_STECFRMS	0x0010		/* transmit end of chain of syn. qu. */
431*4882a593Smuzhiyun 					/* SN3: reserved */
432*4882a593Smuzhiyun #define FM_STECFRMA0	0x0020		/* transmit end of chain of asyn. q0 */
433*4882a593Smuzhiyun 					/* SN3: reserved */
434*4882a593Smuzhiyun #define FM_STECFRMA1	0x0040		/* transmit end of chain of asyn. q1 */
435*4882a593Smuzhiyun 					/* SN3: STECMDA1 */
436*4882a593Smuzhiyun #define FM_STECMDA1	0x0040		/* SN3: 'no description' */
437*4882a593Smuzhiyun #define FM_STECFRMA2	0x0080		/* transmit end of chain of asyn. q2 */
438*4882a593Smuzhiyun 					/* SN3: reserved */
439*4882a593Smuzhiyun #define	FM_STEXDONS	0x0100		/* transmit until XDONE in syn. qu. */
440*4882a593Smuzhiyun #define	FM_STBFLA	0x0200		/* asynchr.-queue trans. buffer full */
441*4882a593Smuzhiyun #define	FM_STBFLS	0x0400		/* synchr.-queue transm. buffer full */
442*4882a593Smuzhiyun #define	FM_STXABRS	0x0800		/* synchr. queue transmit-abort */
443*4882a593Smuzhiyun #define	FM_STXABRA0	0x1000		/* asynchr. queue 0 transmit-abort */
444*4882a593Smuzhiyun #define	FM_STXABRA1	0x2000		/* asynchr. queue 1 transmit-abort */
445*4882a593Smuzhiyun #define	FM_STXABRA2	0x4000		/* asynchr. queue 2 transmit-abort */
446*4882a593Smuzhiyun 					/* SN3: reserved */
447*4882a593Smuzhiyun #define	FM_SXMTABT	0x8000		/* transmit abort */
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun /*
450*4882a593Smuzhiyun  * Status Register 1, Lower 16 Bits (ST1L)
451*4882a593Smuzhiyun  */
452*4882a593Smuzhiyun #define FM_SQLCKS	0x0001		/* queue lock for synchr. queue */
453*4882a593Smuzhiyun #define FM_SQLCKA0	0x0002		/* queue lock for asynchr. queue 0 */
454*4882a593Smuzhiyun #define FM_SQLCKA1	0x0004		/* queue lock for asynchr. queue 1 */
455*4882a593Smuzhiyun #define FM_SQLCKA2	0x0008		/* queue lock for asynchr. queue 2 */
456*4882a593Smuzhiyun 					/* SN3: reserved */
457*4882a593Smuzhiyun #define FM_STXINFLS	0x0010		/* transmit instruction full: syn. */
458*4882a593Smuzhiyun 					/* SN3: reserved */
459*4882a593Smuzhiyun #define FM_STXINFLA0	0x0020		/* transmit instruction full: asyn.0 */
460*4882a593Smuzhiyun 					/* SN3: reserved */
461*4882a593Smuzhiyun #define FM_STXINFLA1	0x0040		/* transmit instruction full: asyn.1 */
462*4882a593Smuzhiyun 					/* SN3: reserved */
463*4882a593Smuzhiyun #define FM_STXINFLA2	0x0080		/* transmit instruction full: asyn.2 */
464*4882a593Smuzhiyun 					/* SN3: reserved */
465*4882a593Smuzhiyun #define FM_SPCEPDS	0x0100		/* parity/coding error: syn. queue */
466*4882a593Smuzhiyun #define FM_SPCEPDA0	0x0200		/* parity/coding error: asyn. queue0 */
467*4882a593Smuzhiyun #define FM_SPCEPDA1	0x0400		/* parity/coding error: asyn. queue1 */
468*4882a593Smuzhiyun #define FM_SPCEPDA2	0x0800		/* parity/coding error: asyn. queue2 */
469*4882a593Smuzhiyun 					/* SN3: reserved */
470*4882a593Smuzhiyun #define FM_STBURS	0x1000		/* transmit buffer underrun: syn. q. */
471*4882a593Smuzhiyun #define FM_STBURA0	0x2000		/* transmit buffer underrun: asyn.0 */
472*4882a593Smuzhiyun #define FM_STBURA1	0x4000		/* transmit buffer underrun: asyn.1 */
473*4882a593Smuzhiyun #define FM_STBURA2	0x8000		/* transmit buffer underrun: asyn.2 */
474*4882a593Smuzhiyun 					/* SN3: reserved */
475*4882a593Smuzhiyun 
476*4882a593Smuzhiyun /*
477*4882a593Smuzhiyun  * Status Register 2, Upper 16 Bits (ST2U)
478*4882a593Smuzhiyun  */
479*4882a593Smuzhiyun #define FM_SOTRBEC	0x0001		/* other beacon received */
480*4882a593Smuzhiyun #define FM_SMYBEC	0x0002		/* my beacon received */
481*4882a593Smuzhiyun #define FM_SBEC		0x0004		/* beacon state entered */
482*4882a593Smuzhiyun #define FM_SLOCLM	0x0008		/* low claim received */
483*4882a593Smuzhiyun #define FM_SHICLM	0x0010		/* high claim received */
484*4882a593Smuzhiyun #define FM_SMYCLM	0x0020		/* my claim received */
485*4882a593Smuzhiyun #define FM_SCLM		0x0040		/* claim state entered */
486*4882a593Smuzhiyun #define FM_SERRSF	0x0080		/* error in special frame */
487*4882a593Smuzhiyun #define FM_SNFSLD	0x0100		/* NP and FORMAC+ simultaneous load */
488*4882a593Smuzhiyun #define FM_SRFRCTOV	0x0200		/* receive frame counter overflow */
489*4882a593Smuzhiyun 					/* SN3: reserved */
490*4882a593Smuzhiyun #define FM_SRCVFRM	0x0400		/* receive frame */
491*4882a593Smuzhiyun 					/* SN3: reserved */
492*4882a593Smuzhiyun #define FM_SRCVOVR	0x0800		/* receive FIFO overflow */
493*4882a593Smuzhiyun #define FM_SRBFL	0x1000		/* receive buffer full */
494*4882a593Smuzhiyun #define FM_SRABT	0x2000		/* receive abort */
495*4882a593Smuzhiyun #define FM_SRBMT	0x4000		/* receive buffer empty */
496*4882a593Smuzhiyun #define FM_SRCOMP	0x8000		/* receive complete. Nontag mode */
497*4882a593Smuzhiyun 
498*4882a593Smuzhiyun /*
499*4882a593Smuzhiyun  * Status Register 2, Lower 16 Bits (ST2L)
500*4882a593Smuzhiyun  * Attention: SN3 docu shows these bits the other way around
501*4882a593Smuzhiyun  */
502*4882a593Smuzhiyun #define FM_SRES0	0x0001		/* reserved */
503*4882a593Smuzhiyun #define FM_SESTRIPTK	0x0001		/* SN3: 'no description' */
504*4882a593Smuzhiyun #define FM_STRTEXR	0x0002		/* TRT expired in claim | beacon st. */
505*4882a593Smuzhiyun #define FM_SDUPCLM	0x0004		/* duplicate claim received */
506*4882a593Smuzhiyun #define FM_SSIFG	0x0008		/* short interframe gap */
507*4882a593Smuzhiyun #define FM_SFRMCTR	0x0010		/* frame counter overflow */
508*4882a593Smuzhiyun #define FM_SERRCTR	0x0020		/* error counter overflow */
509*4882a593Smuzhiyun #define FM_SLSTCTR	0x0040		/* lost counter overflow */
510*4882a593Smuzhiyun #define FM_SPHINV	0x0080		/* PHY invalid */
511*4882a593Smuzhiyun #define FM_SADET	0x0100		/* address detect */
512*4882a593Smuzhiyun #define FM_SMISFRM	0x0200		/* missed frame */
513*4882a593Smuzhiyun #define FM_STRTEXP	0x0400		/* TRT expired and late count > 0 */
514*4882a593Smuzhiyun #define FM_STVXEXP	0x0800		/* TVX expired */
515*4882a593Smuzhiyun #define FM_STKISS	0x1000		/* token issued */
516*4882a593Smuzhiyun #define FM_STKERR	0x2000		/* token error */
517*4882a593Smuzhiyun #define FM_SMULTDA	0x4000		/* multiple destination address */
518*4882a593Smuzhiyun #define FM_SRNGOP	0x8000		/* ring operational */
519*4882a593Smuzhiyun 
520*4882a593Smuzhiyun /*
521*4882a593Smuzhiyun  * Supernet 3:
522*4882a593Smuzhiyun  * Status Register 3, Upper 16 Bits (ST3U)
523*4882a593Smuzhiyun  */
524*4882a593Smuzhiyun #define	FM_SRQUNLCK1	0x0001		/* receive queue unlocked queue 1 */
525*4882a593Smuzhiyun #define	FM_SRQUNLCK2	0x0002		/* receive queue unlocked queue 2 */
526*4882a593Smuzhiyun #define	FM_SRPERRQ1	0x0004		/* receive parity error rx queue 1 */
527*4882a593Smuzhiyun #define	FM_SRPERRQ2	0x0008		/* receive parity error rx queue 2 */
528*4882a593Smuzhiyun 					/* Bit 4-10: reserved */
529*4882a593Smuzhiyun #define	FM_SRCVOVR2	0x0800		/* receive FIFO overfull rx queue 2 */
530*4882a593Smuzhiyun #define	FM_SRBFL2	0x1000		/* receive buffer full rx queue 2 */
531*4882a593Smuzhiyun #define	FM_SRABT2	0x2000		/* receive abort rx queue 2 */
532*4882a593Smuzhiyun #define	FM_SRBMT2	0x4000		/* receive buf empty rx queue 2 */
533*4882a593Smuzhiyun #define	FM_SRCOMP2	0x8000		/* receive comp rx queue 2 */
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun /*
536*4882a593Smuzhiyun  * Supernet 3:
537*4882a593Smuzhiyun  * Status Register 3, Lower 16 Bits (ST3L)
538*4882a593Smuzhiyun  */
539*4882a593Smuzhiyun #define	FM_AF_BIST_DONE		0x0001	/* Address Filter BIST is done */
540*4882a593Smuzhiyun #define	FM_PLC_BIST_DONE	0x0002	/* internal PLC Bist is done */
541*4882a593Smuzhiyun #define	FM_PDX_BIST_DONE	0x0004	/* PDX BIST is done */
542*4882a593Smuzhiyun 					/* Bit  3: reserved */
543*4882a593Smuzhiyun #define	FM_SICAMDAMAT		0x0010	/* Status internal CAM DA match */
544*4882a593Smuzhiyun #define	FM_SICAMDAXACT		0x0020	/* Status internal CAM DA exact match */
545*4882a593Smuzhiyun #define	FM_SICAMSAMAT		0x0040	/* Status internal CAM SA match */
546*4882a593Smuzhiyun #define	FM_SICAMSAXACT		0x0080	/* Status internal CAM SA exact match */
547*4882a593Smuzhiyun 
548*4882a593Smuzhiyun /*
549*4882a593Smuzhiyun  * MAC State-Machine Register FM_STMCHN
550*4882a593Smuzhiyun  */
551*4882a593Smuzhiyun #define	FM_MDRTAG	0x0004		/* tag bit of long word read */
552*4882a593Smuzhiyun #define	FM_SNPPND	0x0008		/* r/w from buffer mem. is pending */
553*4882a593Smuzhiyun #define	FM_TXSTAT	0x0070		/* transmitter state machine state */
554*4882a593Smuzhiyun #define	FM_RCSTAT	0x0380		/* receiver state machine state */
555*4882a593Smuzhiyun #define	FM_TM01		0x0c00		/* indicate token mode */
556*4882a593Smuzhiyun #define	FM_SIM		0x1000		/* indicate send immediate-mode */
557*4882a593Smuzhiyun #define	FM_REV		0xe000		/* FORMAC Plus revision number */
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun /*
560*4882a593Smuzhiyun  * Supernet 3
561*4882a593Smuzhiyun  * Mode Register 3
562*4882a593Smuzhiyun  */
563*4882a593Smuzhiyun #define	FM_MENRS	0x0001		/* Ena enhanced rec status encoding */
564*4882a593Smuzhiyun #define	FM_MENXS	0x0002		/* Ena enhanced xmit status encoding */
565*4882a593Smuzhiyun #define	FM_MENXCT	0x0004		/* Ena EXACT/INEXACT matching */
566*4882a593Smuzhiyun #define	FM_MENAFULL	0x0008		/* Ena enh QCTRL encoding for AFULL */
567*4882a593Smuzhiyun #define	FM_MEIND	0x0030		/* Ena enh A,C indicator settings */
568*4882a593Smuzhiyun #define	FM_MENQCTRL	0x0040		/* Ena enh QCTRL encoding */
569*4882a593Smuzhiyun #define	FM_MENRQAUNLCK	0x0080		/* Ena rec q auto unlock */
570*4882a593Smuzhiyun #define	FM_MENDAS	0x0100		/* Ena DAS connections by cntr MUX */
571*4882a593Smuzhiyun #define	FM_MENPLCCST	0x0200		/* Ena Counter Segm test in PLC blck */
572*4882a593Smuzhiyun #define	FM_MENSGLINT	0x0400		/* Ena Vectored Interrupt reading */
573*4882a593Smuzhiyun #define	FM_MENDRCV	0x0800		/* Ena dual receive queue operation */
574*4882a593Smuzhiyun #define	FM_MENFCLOC	0x3000		/* Ena FC location within frm data */
575*4882a593Smuzhiyun #define	FM_MENTRCMD	0x4000		/* Ena ASYNC1 xmit only after command */
576*4882a593Smuzhiyun #define	FM_MENTDLPBK	0x8000		/* Ena TDAT to RDAT lkoopback */
577*4882a593Smuzhiyun 
578*4882a593Smuzhiyun /*
579*4882a593Smuzhiyun  * Supernet 3
580*4882a593Smuzhiyun  * Frame Selection Register
581*4882a593Smuzhiyun  */
582*4882a593Smuzhiyun #define	FM_RECV1	0x000f		/* options for receive queue 1 */
583*4882a593Smuzhiyun #define	FM_RCV1_ALL	(0<<0)		/* receive all frames */
584*4882a593Smuzhiyun #define	FM_RCV1_LLC	(1<<0)		/* rec all LLC frames */
585*4882a593Smuzhiyun #define	FM_RCV1_SMT	(2<<0)		/* rec all SMT frames */
586*4882a593Smuzhiyun #define	FM_RCV1_NSMT	(3<<0)		/* rec non-SMT frames */
587*4882a593Smuzhiyun #define	FM_RCV1_IMP	(4<<0)		/* rec Implementor frames */
588*4882a593Smuzhiyun #define	FM_RCV1_MAC	(5<<0)		/* rec all MAC frames */
589*4882a593Smuzhiyun #define	FM_RCV1_SLLC	(6<<0)		/* rec all sync LLC frames */
590*4882a593Smuzhiyun #define	FM_RCV1_ALLC	(7<<0)		/* rec all async LLC frames */
591*4882a593Smuzhiyun #define	FM_RCV1_VOID	(8<<0)		/* rec all void frames */
592*4882a593Smuzhiyun #define	FM_RCV1_ALSMT	(9<<0)		/* rec all async LLC & SMT frames */
593*4882a593Smuzhiyun #define	FM_RECV2	0x00f0		/* options for receive queue 2 */
594*4882a593Smuzhiyun #define	FM_RCV2_ALL	(0<<4)		/* receive all other frames */
595*4882a593Smuzhiyun #define	FM_RCV2_LLC	(1<<4)		/* rec all LLC frames */
596*4882a593Smuzhiyun #define	FM_RCV2_SMT	(2<<4)		/* rec all SMT frames */
597*4882a593Smuzhiyun #define	FM_RCV2_NSMT	(3<<4)		/* rec non-SMT frames */
598*4882a593Smuzhiyun #define	FM_RCV2_IMP	(4<<4)		/* rec Implementor frames */
599*4882a593Smuzhiyun #define	FM_RCV2_MAC	(5<<4)		/* rec all MAC frames */
600*4882a593Smuzhiyun #define	FM_RCV2_SLLC	(6<<4)		/* rec all sync LLC frames */
601*4882a593Smuzhiyun #define	FM_RCV2_ALLC	(7<<4)		/* rec all async LLC frames */
602*4882a593Smuzhiyun #define	FM_RCV2_VOID	(8<<4)		/* rec all void frames */
603*4882a593Smuzhiyun #define	FM_RCV2_ALSMT	(9<<4)		/* rec all async LLC & SMT frames */
604*4882a593Smuzhiyun #define	FM_ENXMTADSWAP	0x4000		/* enh rec addr swap (phys -> can) */
605*4882a593Smuzhiyun #define	FM_ENRCVADSWAP	0x8000		/* enh tx addr swap (can -> phys) */
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun /*
608*4882a593Smuzhiyun  * Supernet 3:
609*4882a593Smuzhiyun  * Address Filter Command Register (AFCMD)
610*4882a593Smuzhiyun  */
611*4882a593Smuzhiyun #define	FM_INST		0x0007		/* Address Filter Operation */
612*4882a593Smuzhiyun #define FM_IINV_CAM	(0<<0)		/* Invalidate CAM */
613*4882a593Smuzhiyun #define FM_IWRITE_CAM	(1<<0)		/* Write CAM */
614*4882a593Smuzhiyun #define FM_IREAD_CAM	(2<<0)		/* Read CAM */
615*4882a593Smuzhiyun #define FM_IRUN_BIST	(3<<0)		/* Run BIST */
616*4882a593Smuzhiyun #define FM_IFIND	(4<<0)		/* Find */
617*4882a593Smuzhiyun #define FM_IINV		(5<<0)		/* Invalidate */
618*4882a593Smuzhiyun #define FM_ISKIP	(6<<0)		/* Skip */
619*4882a593Smuzhiyun #define FM_ICL_SKIP	(7<<0)		/* Clear all SKIP bits */
620*4882a593Smuzhiyun 
621*4882a593Smuzhiyun /*
622*4882a593Smuzhiyun  * Supernet 3:
623*4882a593Smuzhiyun  * Address Filter Status Register (AFSTAT)
624*4882a593Smuzhiyun  */
625*4882a593Smuzhiyun 					/* Bit  0-4: reserved */
626*4882a593Smuzhiyun #define	FM_REV_NO	0x00e0		/* Revision Number of Address Filter */
627*4882a593Smuzhiyun #define	FM_BIST_DONE	0x0100		/* BIST complete */
628*4882a593Smuzhiyun #define	FM_EMPTY	0x0200		/* CAM empty */
629*4882a593Smuzhiyun #define	FM_ERROR	0x0400		/* Error (improper operation) */
630*4882a593Smuzhiyun #define	FM_MULT		0x0800		/* Multiple Match */
631*4882a593Smuzhiyun #define	FM_EXACT	0x1000		/* Exact Match */
632*4882a593Smuzhiyun #define	FM_FOUND	0x2000		/* Comparand found in CAM */
633*4882a593Smuzhiyun #define	FM_FULL		0x4000		/* CAM full */
634*4882a593Smuzhiyun #define	FM_DONE		0x8000		/* DONE indicator */
635*4882a593Smuzhiyun 
636*4882a593Smuzhiyun /*
637*4882a593Smuzhiyun  * Supernet 3:
638*4882a593Smuzhiyun  * BIST Signature Register (AFBIST)
639*4882a593Smuzhiyun  */
640*4882a593Smuzhiyun #define	AF_BIST_SIGNAT	0x0553		/* Address Filter BIST Signature */
641*4882a593Smuzhiyun 
642*4882a593Smuzhiyun /*
643*4882a593Smuzhiyun  * Supernet 3:
644*4882a593Smuzhiyun  * Personality Register (AFPERS)
645*4882a593Smuzhiyun  */
646*4882a593Smuzhiyun #define	FM_VALID	0x0001		/* CAM Entry Valid */
647*4882a593Smuzhiyun #define	FM_DA		0x0002		/* Destination Address */
648*4882a593Smuzhiyun #define	FM_DAX		0x0004		/* Destination Address Exact */
649*4882a593Smuzhiyun #define	FM_SA		0x0008		/* Source Address */
650*4882a593Smuzhiyun #define	FM_SAX		0x0010		/* Source Address Exact */
651*4882a593Smuzhiyun #define	FM_SKIP		0x0020		/* Skip this entry */
652*4882a593Smuzhiyun 
653*4882a593Smuzhiyun /*
654*4882a593Smuzhiyun  * instruction set for command register 1 (NPADDR6-0 = 0x00)
655*4882a593Smuzhiyun  */
656*4882a593Smuzhiyun #define FM_IRESET	0x01		/* software reset */
657*4882a593Smuzhiyun #define FM_IRMEMWI	0x02		/* load Memory Data Reg., inc MARR */
658*4882a593Smuzhiyun #define FM_IRMEMWO	0x03		/* load MDR from buffer memory, n.i. */
659*4882a593Smuzhiyun #define FM_IIL		0x04		/* idle/listen */
660*4882a593Smuzhiyun #define FM_ICL		0x05		/* claim/listen */
661*4882a593Smuzhiyun #define FM_IBL		0x06		/* beacon/listen */
662*4882a593Smuzhiyun #define FM_ILTVX	0x07		/* load TVX timer from TVX reg */
663*4882a593Smuzhiyun #define FM_INRTM	0x08		/* nonrestricted token mode */
664*4882a593Smuzhiyun #define FM_IENTM	0x09		/* enter nonrestricted token mode */
665*4882a593Smuzhiyun #define FM_IERTM	0x0a		/* enter restricted token mode */
666*4882a593Smuzhiyun #define FM_IRTM		0x0b		/* restricted token mode */
667*4882a593Smuzhiyun #define FM_ISURT	0x0c		/* send unrestricted token */
668*4882a593Smuzhiyun #define FM_ISRT		0x0d		/* send restricted token */
669*4882a593Smuzhiyun #define FM_ISIM		0x0e		/* enter send-immediate mode */
670*4882a593Smuzhiyun #define FM_IESIM	0x0f		/* exit send-immediate mode */
671*4882a593Smuzhiyun #define FM_ICLLS	0x11		/* clear synchronous queue lock */
672*4882a593Smuzhiyun #define FM_ICLLA0	0x12		/* clear asynchronous queue 0 lock */
673*4882a593Smuzhiyun #define FM_ICLLA1	0x14		/* clear asynchronous queue 1 lock */
674*4882a593Smuzhiyun #define FM_ICLLA2	0x18		/* clear asynchronous queue 2 lock */
675*4882a593Smuzhiyun 					/* SN3: reserved */
676*4882a593Smuzhiyun #define FM_ICLLR	0x20		/* clear receive queue (SN3:1) lock */
677*4882a593Smuzhiyun #define FM_ICLLR2	0x21		/* SN3: clear receive queue 2 lock */
678*4882a593Smuzhiyun #define FM_ITRXBUS	0x22		/* SN3: Tristate X-Bus (SAS only) */
679*4882a593Smuzhiyun #define FM_IDRXBUS	0x23		/* SN3: drive X-Bus */
680*4882a593Smuzhiyun #define FM_ICLLAL	0x3f		/* clear all queue locks */
681*4882a593Smuzhiyun 
682*4882a593Smuzhiyun /*
683*4882a593Smuzhiyun  * instruction set for command register 2 (NPADDR6-0 = 0x01)
684*4882a593Smuzhiyun  */
685*4882a593Smuzhiyun #define FM_ITRS		0x01		/* transmit synchronous queue */
686*4882a593Smuzhiyun 					/* SN3: reserved */
687*4882a593Smuzhiyun #define FM_ITRA0	0x02		/* transmit asynchronous queue 0 */
688*4882a593Smuzhiyun 					/* SN3: reserved */
689*4882a593Smuzhiyun #define FM_ITRA1	0x04		/* transmit asynchronous queue 1 */
690*4882a593Smuzhiyun 					/* SN3: reserved */
691*4882a593Smuzhiyun #define FM_ITRA2	0x08		/* transmit asynchronous queue 2 */
692*4882a593Smuzhiyun 					/* SN3: reserved */
693*4882a593Smuzhiyun #define FM_IACTR	0x10		/* abort current transmit activity */
694*4882a593Smuzhiyun #define FM_IRSTQ	0x20		/* reset transmit queues */
695*4882a593Smuzhiyun #define FM_ISTTB	0x30		/* set tag bit */
696*4882a593Smuzhiyun #define FM_IERSF	0x40		/* enable receive single frame */
697*4882a593Smuzhiyun 					/* SN3: reserved */
698*4882a593Smuzhiyun #define	FM_ITR		0x50		/* SN3: Transmit Command */
699*4882a593Smuzhiyun 
700*4882a593Smuzhiyun 
701*4882a593Smuzhiyun /*
702*4882a593Smuzhiyun  *	defines for PLC (Am79C864)
703*4882a593Smuzhiyun  */
704*4882a593Smuzhiyun 
705*4882a593Smuzhiyun /*
706*4882a593Smuzhiyun  *  PLC read/write (r/w) registers
707*4882a593Smuzhiyun  */
708*4882a593Smuzhiyun #define PL_CNTRL_A	0x00		/* control register A (r/w) */
709*4882a593Smuzhiyun #define PL_CNTRL_B	0x01		/* control register B (r/w) */
710*4882a593Smuzhiyun #define PL_INTR_MASK	0x02		/* interrupt mask (r/w) */
711*4882a593Smuzhiyun #define PL_XMIT_VECTOR	0x03		/* transmit vector register (r/w) */
712*4882a593Smuzhiyun #define PL_VECTOR_LEN	0x04		/* transmit vector length (r/w) */
713*4882a593Smuzhiyun #define PL_LE_THRESHOLD	0x05		/* link error event threshold (r/w) */
714*4882a593Smuzhiyun #define PL_C_MIN	0x06		/* minimum connect state time (r/w) */
715*4882a593Smuzhiyun #define PL_TL_MIN	0x07		/* min. line state transmit t. (r/w) */
716*4882a593Smuzhiyun #define PL_TB_MIN	0x08		/* minimum break time (r/w) */
717*4882a593Smuzhiyun #define PL_T_OUT	0x09		/* signal timeout (r/w) */
718*4882a593Smuzhiyun #define PL_CNTRL_C	0x0a		/* control register C (r/w) */
719*4882a593Smuzhiyun #define PL_LC_LENGTH	0x0b		/* link confidence test time (r/w) */
720*4882a593Smuzhiyun #define PL_T_SCRUB	0x0c		/* scrub time = MAC TVX (r/w) */
721*4882a593Smuzhiyun #define PL_NS_MAX	0x0d		/* max. noise time before break (r/w)*/
722*4882a593Smuzhiyun #define PL_TPC_LOAD_V	0x0e		/* TPC timer load value (write only) */
723*4882a593Smuzhiyun #define PL_TNE_LOAD_V	0x0f		/* TNE timer load value (write only) */
724*4882a593Smuzhiyun #define PL_STATUS_A	0x10		/* status register A (read only) */
725*4882a593Smuzhiyun #define PL_STATUS_B	0x11		/* status register B (read only) */
726*4882a593Smuzhiyun #define PL_TPC		0x12		/* timer for PCM (ro) [20.48 us] */
727*4882a593Smuzhiyun #define PL_TNE		0x13		/* time of noise event [0.32 us] */
728*4882a593Smuzhiyun #define PL_CLK_DIV	0x14		/* TNE clock divider (read only) */
729*4882a593Smuzhiyun #define PL_BIST_SIGNAT	0x15		/* built in self test signature (ro)*/
730*4882a593Smuzhiyun #define PL_RCV_VECTOR	0x16		/* receive vector reg. (read only) */
731*4882a593Smuzhiyun #define PL_INTR_EVENT	0x17		/* interrupt event reg. (read only) */
732*4882a593Smuzhiyun #define PL_VIOL_SYM_CTR	0x18		/* violation symbol count. (read o) */
733*4882a593Smuzhiyun #define PL_MIN_IDLE_CTR	0x19		/* minimum idle counter (read only) */
734*4882a593Smuzhiyun #define PL_LINK_ERR_CTR	0x1a		/* link error event ctr.(read only) */
735*4882a593Smuzhiyun #ifdef	MOT_ELM
736*4882a593Smuzhiyun #define	PL_T_FOT_ASS	0x1e		/* FOTOFF Assert Timer */
737*4882a593Smuzhiyun #define	PL_T_FOT_DEASS	0x1f		/* FOTOFF Deassert Timer */
738*4882a593Smuzhiyun #endif	/* MOT_ELM */
739*4882a593Smuzhiyun 
740*4882a593Smuzhiyun #ifdef	MOT_ELM
741*4882a593Smuzhiyun /*
742*4882a593Smuzhiyun  * Special Quad-Elm Registers.
743*4882a593Smuzhiyun  * A Quad-ELM consists of for ELMs and these additional registers.
744*4882a593Smuzhiyun  */
745*4882a593Smuzhiyun #define	QELM_XBAR_W	0x80		/* Crossbar Control ELM W */
746*4882a593Smuzhiyun #define	QELM_XBAR_X	0x81		/* Crossbar Control ELM X */
747*4882a593Smuzhiyun #define	QELM_XBAR_Y	0x82		/* Crossbar Control ELM Y */
748*4882a593Smuzhiyun #define	QELM_XBAR_Z	0x83		/* Crossbar Control ELM Z */
749*4882a593Smuzhiyun #define	QELM_XBAR_P	0x84		/* Crossbar Control Bus P */
750*4882a593Smuzhiyun #define	QELM_XBAR_S	0x85		/* Crossbar Control Bus S */
751*4882a593Smuzhiyun #define	QELM_XBAR_R	0x86		/* Crossbar Control Bus R */
752*4882a593Smuzhiyun #define	QELM_WR_XBAR	0x87		/* Write the Crossbar now (write) */
753*4882a593Smuzhiyun #define	QELM_CTR_W	0x88		/* Counter W */
754*4882a593Smuzhiyun #define	QELM_CTR_X	0x89		/* Counter X */
755*4882a593Smuzhiyun #define	QELM_CTR_Y	0x8a		/* Counter Y */
756*4882a593Smuzhiyun #define	QELM_CTR_Z	0x8b		/* Counter Z */
757*4882a593Smuzhiyun #define	QELM_INT_MASK	0x8c		/* Interrupt mask register */
758*4882a593Smuzhiyun #define	QELM_INT_DATA	0x8d		/* Interrupt data (event) register */
759*4882a593Smuzhiyun #define	QELM_ELMB	0x00		/* Elm base */
760*4882a593Smuzhiyun #define	QELM_ELM_SIZE	0x20		/* ELM size */
761*4882a593Smuzhiyun #endif	/* MOT_ELM */
762*4882a593Smuzhiyun /*
763*4882a593Smuzhiyun  * PLC control register A (PL_CNTRL_A: log. addr. 0x00)
764*4882a593Smuzhiyun  * It is used for timer configuration, specification of PCM MAINT state option,
765*4882a593Smuzhiyun  * counter interrupt frequency, PLC data path config. and Built In Self Test.
766*4882a593Smuzhiyun  */
767*4882a593Smuzhiyun #define	PL_RUN_BIST	0x0001		/* begin running its Built In Self T.*/
768*4882a593Smuzhiyun #define	PL_RF_DISABLE	0x0002		/* disable the Repeat Filter state m.*/
769*4882a593Smuzhiyun #define	PL_SC_REM_LOOP	0x0004		/* remote loopback path */
770*4882a593Smuzhiyun #define	PL_SC_BYPASS	0x0008		/* by providing a physical bypass */
771*4882a593Smuzhiyun #define	PL_LM_LOC_LOOP	0x0010		/* loop path just after elastic buff.*/
772*4882a593Smuzhiyun #define	PL_EB_LOC_LOOP	0x0020		/* loop path just prior to PDT/PDR IF*/
773*4882a593Smuzhiyun #define	PL_FOT_OFF	0x0040		/* assertion of /FOTOFF pin of PLC */
774*4882a593Smuzhiyun #define	PL_LOOPBACK	0x0080		/* it cause the /LPBCK pin ass. low */
775*4882a593Smuzhiyun #define	PL_MINI_CTR_INT 0x0100		/* partially contr. when bit is ass. */
776*4882a593Smuzhiyun #define	PL_VSYM_CTR_INT	0x0200		/* controls when int bit is asserted */
777*4882a593Smuzhiyun #define	PL_ENA_PAR_CHK	0x0400		/* enable parity check */
778*4882a593Smuzhiyun #define	PL_REQ_SCRUB	0x0800		/* limited access to scrub capability*/
779*4882a593Smuzhiyun #define	PL_TPC_16BIT	0x1000		/* causes the TPC as a 16 bit timer */
780*4882a593Smuzhiyun #define	PL_TNE_16BIT	0x2000		/* causes the TNE as a 16 bit timer */
781*4882a593Smuzhiyun #define	PL_NOISE_TIMER	0x4000		/* allows the noise timing function */
782*4882a593Smuzhiyun 
783*4882a593Smuzhiyun /*
784*4882a593Smuzhiyun  * PLC control register B (PL_CNTRL_B: log. addr. 0x01)
785*4882a593Smuzhiyun  * It contains signals and requeste to direct the process of PCM and it is also
786*4882a593Smuzhiyun  * used to control the Line State Match interrupt.
787*4882a593Smuzhiyun  */
788*4882a593Smuzhiyun #define	PL_PCM_CNTRL	0x0003		/* control PCM state machine */
789*4882a593Smuzhiyun #define	PL_PCM_NAF	(0)		/* state is not affected */
790*4882a593Smuzhiyun #define	PL_PCM_START	(1)		/* goes to the BREAK state */
791*4882a593Smuzhiyun #define	PL_PCM_TRACE	(2)		/* goes to the TRACE state */
792*4882a593Smuzhiyun #define	PL_PCM_STOP	(3)		/* goes to the OFF state */
793*4882a593Smuzhiyun 
794*4882a593Smuzhiyun #define	PL_MAINT	0x0004		/* if OFF state --> MAINT state */
795*4882a593Smuzhiyun #define	PL_LONG		0x0008		/* perf. a long Link Confid.Test(LCT)*/
796*4882a593Smuzhiyun #define	PL_PC_JOIN	0x0010		/* if NEXT state --> JOIN state */
797*4882a593Smuzhiyun 
798*4882a593Smuzhiyun #define	PL_PC_LOOP	0x0060		/* loopback used in the LCT */
799*4882a593Smuzhiyun #define	PL_NOLCT	(0<<5)		/* no LCT is performed */
800*4882a593Smuzhiyun #define	PL_TPDR		(1<<5)		/* PCM asserts transmit PDR */
801*4882a593Smuzhiyun #define	PL_TIDLE	(2<<5)		/* PCM asserts transmit idle */
802*4882a593Smuzhiyun #define	PL_RLBP		(3<<5)		/* trans. PDR & remote loopb. path */
803*4882a593Smuzhiyun 
804*4882a593Smuzhiyun #define	PL_CLASS_S	0x0080		/* signif. that single att. station */
805*4882a593Smuzhiyun 
806*4882a593Smuzhiyun #define	PL_MAINT_LS	0x0700		/* line state while in the MAINT st. */
807*4882a593Smuzhiyun #define	PL_M_QUI0	(0<<8)		/* transmit QUIET line state */
808*4882a593Smuzhiyun #define	PL_M_IDLE	(1<<8)		/* transmit IDLE line state */
809*4882a593Smuzhiyun #define	PL_M_HALT	(2<<8)		/* transmit HALT line state */
810*4882a593Smuzhiyun #define	PL_M_MASTR	(3<<8)		/* transmit MASTER line state */
811*4882a593Smuzhiyun #define	PL_M_QUI1	(4<<8)		/* transmit QUIET line state */
812*4882a593Smuzhiyun #define	PL_M_QUI2	(5<<8)		/* transmit QUIET line state */
813*4882a593Smuzhiyun #define	PL_M_TPDR	(6<<8)		/* tr. PHY_DATA requ.-symbol is tr.ed*/
814*4882a593Smuzhiyun #define	PL_M_QUI3	(7<<8)		/* transmit QUIET line state */
815*4882a593Smuzhiyun 
816*4882a593Smuzhiyun #define	PL_MATCH_LS	0x7800		/* line state to be comp. with curr.*/
817*4882a593Smuzhiyun #define	PL_I_ANY	(0<<11)		/* Int. on any change in *_LINE_ST */
818*4882a593Smuzhiyun #define	PL_I_IDLE	(1<<11)		/* Interrupt on IDLE line state */
819*4882a593Smuzhiyun #define	PL_I_HALT	(2<<11)		/* Interrupt on HALT line state */
820*4882a593Smuzhiyun #define	PL_I_MASTR	(4<<11)		/* Interrupt on MASTER line state */
821*4882a593Smuzhiyun #define	PL_I_QUIET	(8<<11)		/* Interrupt on QUIET line state */
822*4882a593Smuzhiyun 
823*4882a593Smuzhiyun #define	PL_CONFIG_CNTRL	0x8000		/* control over scrub, byp. & loopb.*/
824*4882a593Smuzhiyun 
825*4882a593Smuzhiyun /*
826*4882a593Smuzhiyun  * PLC control register C (PL_CNTRL_C: log. addr. 0x0a)
827*4882a593Smuzhiyun  * It contains the scrambling control registers (PLC-S only)
828*4882a593Smuzhiyun  */
829*4882a593Smuzhiyun #define PL_C_CIPHER_ENABLE	(1<<0)	/* enable scrambler */
830*4882a593Smuzhiyun #define PL_C_CIPHER_LPBCK	(1<<1)	/* loopback scrambler */
831*4882a593Smuzhiyun #define PL_C_SDOFF_ENABLE	(1<<6)	/* enable SDOFF timer */
832*4882a593Smuzhiyun #define PL_C_SDON_ENABLE	(1<<7)	/* enable SDON timer */
833*4882a593Smuzhiyun #ifdef	MOT_ELM
834*4882a593Smuzhiyun #define PL_C_FOTOFF_CTRL	(3<<2)	/* FOTOFF timer control */
835*4882a593Smuzhiyun #define PL_C_FOTOFF_TIM		(0<<2)	/* FOTOFF use timer for (de)-assert */
836*4882a593Smuzhiyun #define PL_C_FOTOFF_INA		(2<<2)	/* FOTOFF forced inactive */
837*4882a593Smuzhiyun #define PL_C_FOTOFF_ACT		(3<<2)	/* FOTOFF forced active */
838*4882a593Smuzhiyun #define PL_C_FOTOFF_SRCE	(1<<4)	/* FOTOFF source is PCM state != OFF */
839*4882a593Smuzhiyun #define	PL_C_RXDATA_EN		(1<<5)	/* Rec scr data forced to 0 */
840*4882a593Smuzhiyun #define	PL_C_SDNRZEN		(1<<8)	/* Monitor rec descr. data for act */
841*4882a593Smuzhiyun #else	/* nMOT_ELM */
842*4882a593Smuzhiyun #define PL_C_FOTOFF_CTRL	(3<<8)	/* FOTOFF timer control */
843*4882a593Smuzhiyun #define PL_C_FOTOFF_0		(0<<8)	/* timer off */
844*4882a593Smuzhiyun #define PL_C_FOTOFF_30		(1<<8)	/* 30uS */
845*4882a593Smuzhiyun #define PL_C_FOTOFF_50		(2<<8)	/* 50uS */
846*4882a593Smuzhiyun #define PL_C_FOTOFF_NEVER	(3<<8)	/* never */
847*4882a593Smuzhiyun #define PL_C_SDON_TIMER		(3<<10)	/* SDON timer control */
848*4882a593Smuzhiyun #define PL_C_SDON_084		(0<<10)	/* 0.84 uS */
849*4882a593Smuzhiyun #define PL_C_SDON_132		(1<<10)	/* 1.32 uS */
850*4882a593Smuzhiyun #define PL_C_SDON_252		(2<<10)	/* 2.52 uS */
851*4882a593Smuzhiyun #define PL_C_SDON_512		(3<<10)	/* 5.12 uS */
852*4882a593Smuzhiyun #define PL_C_SOFF_TIMER		(3<<12)	/* SDOFF timer control */
853*4882a593Smuzhiyun #define PL_C_SOFF_076		(0<<12)	/* 0.76 uS */
854*4882a593Smuzhiyun #define PL_C_SOFF_132		(1<<12)	/* 1.32 uS */
855*4882a593Smuzhiyun #define PL_C_SOFF_252		(2<<12)	/* 2.52 uS */
856*4882a593Smuzhiyun #define PL_C_SOFF_512		(3<<12)	/* 5.12 uS */
857*4882a593Smuzhiyun #define PL_C_TSEL		(3<<14)	/* scrambler path select */
858*4882a593Smuzhiyun #endif	/* nMOT_ELM */
859*4882a593Smuzhiyun 
860*4882a593Smuzhiyun /*
861*4882a593Smuzhiyun  * PLC status register A (PL_STATUS_A: log. addr. 0x10)
862*4882a593Smuzhiyun  * It is used to report status information to the Node Processor about the
863*4882a593Smuzhiyun  * Line State Machine (LSM).
864*4882a593Smuzhiyun  */
865*4882a593Smuzhiyun #ifdef	MOT_ELM
866*4882a593Smuzhiyun #define PLC_INT_MASK	0xc000		/* ELM integration bits in status A */
867*4882a593Smuzhiyun #define PLC_INT_C	0x0000		/* ELM Revision Band C */
868*4882a593Smuzhiyun #define PLC_INT_CAMEL	0x4000		/* ELM integrated into CAMEL */
869*4882a593Smuzhiyun #define PLC_INT_QE	0x8000		/* ELM integrated into Quad ELM */
870*4882a593Smuzhiyun #define PLC_REV_MASK	0x3800		/* revision bits in status A */
871*4882a593Smuzhiyun #define PLC_REVISION_B	0x0000		/* rev bits for ELM Rev B */
872*4882a593Smuzhiyun #define PLC_REVISION_QA	0x0800		/* rev bits for ELM core in QELM-A */
873*4882a593Smuzhiyun #else	/* nMOT_ELM */
874*4882a593Smuzhiyun #define PLC_REV_MASK	0xf800		/* revision bits in status A */
875*4882a593Smuzhiyun #define PLC_REVISION_A	0x0000		/* revision bits for PLC */
876*4882a593Smuzhiyun #define PLC_REVISION_S	0xf800		/* revision bits for PLC-S */
877*4882a593Smuzhiyun #define PLC_REV_SN3	0x7800		/* revision bits for PLC-S in IFCP */
878*4882a593Smuzhiyun #endif	/* nMOT_ELM */
879*4882a593Smuzhiyun #define	PL_SYM_PR_CTR	0x0007		/* contains the LSM symbol pair Ctr. */
880*4882a593Smuzhiyun #define	PL_UNKN_LINE_ST	0x0008		/* unknown line state bit from LSM */
881*4882a593Smuzhiyun #define	PL_LSM_STATE	0x0010		/* state bit of LSM */
882*4882a593Smuzhiyun 
883*4882a593Smuzhiyun #define	PL_LINE_ST	0x00e0		/* contains recogn. line state of LSM*/
884*4882a593Smuzhiyun #define	PL_L_NLS	(0<<5)		/* noise line state */
885*4882a593Smuzhiyun #define	PL_L_ALS	(1<<5)		/* activ line state */
886*4882a593Smuzhiyun #define	PL_L_UND	(2<<5)		/* undefined */
887*4882a593Smuzhiyun #define	PL_L_ILS4	(3<<5)		/* idle l. s. (after 4 idle symbols) */
888*4882a593Smuzhiyun #define	PL_L_QLS	(4<<5)		/* quiet line state */
889*4882a593Smuzhiyun #define	PL_L_MLS	(5<<5)		/* master line state */
890*4882a593Smuzhiyun #define	PL_L_HLS	(6<<5)		/* halt line state */
891*4882a593Smuzhiyun #define	PL_L_ILS16	(7<<5)		/* idle line state (after 16 idle s.)*/
892*4882a593Smuzhiyun 
893*4882a593Smuzhiyun #define	PL_PREV_LINE_ST	0x0300		/* value of previous line state */
894*4882a593Smuzhiyun #define	PL_P_QLS	(0<<8)		/* quiet line state */
895*4882a593Smuzhiyun #define	PL_P_MLS	(1<<8)		/* master line state */
896*4882a593Smuzhiyun #define	PL_P_HLS	(2<<8)		/* halt line state */
897*4882a593Smuzhiyun #define	PL_P_ILS16	(3<<8)		/* idle line state (after 16 idle s.)*/
898*4882a593Smuzhiyun 
899*4882a593Smuzhiyun #define	PL_SIGNAL_DET	0x0400		/* 1=that signal detect is deasserted*/
900*4882a593Smuzhiyun 
901*4882a593Smuzhiyun 
902*4882a593Smuzhiyun /*
903*4882a593Smuzhiyun  * PLC status register B (PL_STATUS_B: log. addr. 0x11)
904*4882a593Smuzhiyun  * It contains signals and status from the repeat filter and PCM state machine.
905*4882a593Smuzhiyun  */
906*4882a593Smuzhiyun #define	PL_BREAK_REASON	0x0007		/* reason for PCM state mach.s to br.*/
907*4882a593Smuzhiyun #define	PL_B_NOT	(0)		/* PCM SM has not gone to BREAK state*/
908*4882a593Smuzhiyun #define	PL_B_PCS	(1)		/* PC_Start issued */
909*4882a593Smuzhiyun #define	PL_B_TPC	(2)		/* TPC timer expired after T_OUT */
910*4882a593Smuzhiyun #define	PL_B_TNE	(3)		/* TNE timer expired after NS_MAX */
911*4882a593Smuzhiyun #define	PL_B_QLS	(4)		/* quit line state detected */
912*4882a593Smuzhiyun #define	PL_B_ILS	(5)		/* idle line state detected */
913*4882a593Smuzhiyun #define	PL_B_HLS	(6)		/* halt line state detected */
914*4882a593Smuzhiyun 
915*4882a593Smuzhiyun #define	PL_TCF		0x0008		/* transmit code flag (start exec.) */
916*4882a593Smuzhiyun #define	PL_RCF		0x0010		/* receive code flag (start exec.) */
917*4882a593Smuzhiyun #define	PL_LSF		0x0020		/* line state flag (l.s. has been r.)*/
918*4882a593Smuzhiyun #define	PL_PCM_SIGNAL	0x0040		/* indic. that XMIT_VECTOR hb.written*/
919*4882a593Smuzhiyun 
920*4882a593Smuzhiyun #define	PL_PCM_STATE	0x0780		/* state bits of PCM state machine */
921*4882a593Smuzhiyun #define	PL_PC0		(0<<7)		/* OFF	   - when /RST or PCM_CNTRL */
922*4882a593Smuzhiyun #define	PL_PC1		(1<<7)		/* BREAK   - entry point in start PCM*/
923*4882a593Smuzhiyun #define	PL_PC2		(2<<7)		/* TRACE   - to localize stuck Beacon*/
924*4882a593Smuzhiyun #define	PL_PC3		(3<<7)		/* CONNECT - synchronize ends of conn*/
925*4882a593Smuzhiyun #define	PL_PC4		(4<<7)		/* NEXT	   - to separate the signalng*/
926*4882a593Smuzhiyun #define	PL_PC5		(5<<7)		/* SIGNAL  - PCM trans/rec. bit infos*/
927*4882a593Smuzhiyun #define	PL_PC6		(6<<7)		/* JOIN	   - 1. state to activ conn. */
928*4882a593Smuzhiyun #define	PL_PC7		(7<<7)		/* VERIFY  - 2. - " - (3. ACTIVE) */
929*4882a593Smuzhiyun #define	PL_PC8		(8<<7)		/* ACTIVE  - PHY has been incorporated*/
930*4882a593Smuzhiyun #define	PL_PC9		(9<<7)		/* MAINT   - for test purposes or so
931*4882a593Smuzhiyun 					   that PCM op. completely in softw. */
932*4882a593Smuzhiyun 
933*4882a593Smuzhiyun #define	PL_PCI_SCRUB	0x0800		/* scrubbing function is being exec. */
934*4882a593Smuzhiyun 
935*4882a593Smuzhiyun #define	PL_PCI_STATE	0x3000		/* Physical Connect. Insertion SM */
936*4882a593Smuzhiyun #define	PL_CI_REMV	(0<<12)		/* REMOVED */
937*4882a593Smuzhiyun #define	PL_CI_ISCR	(1<<12)		/* INSERT_SCRUB */
938*4882a593Smuzhiyun #define	PL_CI_RSCR	(2<<12)		/* REMOVE_SCRUB */
939*4882a593Smuzhiyun #define	PL_CI_INS	(3<<12)		/* INSERTED */
940*4882a593Smuzhiyun 
941*4882a593Smuzhiyun #define	PL_RF_STATE	0xc000		/* state bit of repeate filter SM */
942*4882a593Smuzhiyun #define	PL_RF_REPT	(0<<14)		/* REPEAT */
943*4882a593Smuzhiyun #define	PL_RF_IDLE	(1<<14)		/* IDLE */
944*4882a593Smuzhiyun #define	PL_RF_HALT1	(2<<14)		/* HALT1 */
945*4882a593Smuzhiyun #define	PL_RF_HALT2	(3<<14)		/* HALT2 */
946*4882a593Smuzhiyun 
947*4882a593Smuzhiyun 
948*4882a593Smuzhiyun /*
949*4882a593Smuzhiyun  * PLC interrupt event register (PL_INTR_EVENT: log. addr. 0x17)
950*4882a593Smuzhiyun  * It is read only and is clearde whenever it is read!
951*4882a593Smuzhiyun  * It is used by the PLC to report events to the node processor.
952*4882a593Smuzhiyun  */
953*4882a593Smuzhiyun #define	PL_PARITY_ERR	0x0001		/* p. error h.b.detected on TX9-0 inp*/
954*4882a593Smuzhiyun #define	PL_LS_MATCH	0x0002		/* l.s.== l.s. PLC_CNTRL_B's MATCH_LS*/
955*4882a593Smuzhiyun #define	PL_PCM_CODE	0x0004		/* transmit&receive | LCT complete */
956*4882a593Smuzhiyun #define	PL_TRACE_PROP	0x0008		/* master l.s. while PCM ACTIV|TRACE */
957*4882a593Smuzhiyun #define	PL_SELF_TEST	0x0010		/* QUIET|HALT while PCM in TRACE st. */
958*4882a593Smuzhiyun #define	PL_PCM_BREAK	0x0020		/* PCM has entered the BREAK state */
959*4882a593Smuzhiyun #define	PL_PCM_ENABLED	0x0040		/* asserted SC_JOIN, scrub. & ACTIV */
960*4882a593Smuzhiyun #define	PL_TPC_EXPIRED	0x0080		/* TPC timer reached zero */
961*4882a593Smuzhiyun #define	PL_TNE_EXPIRED	0x0100		/* TNE timer reached zero */
962*4882a593Smuzhiyun #define	PL_EBUF_ERR	0x0200		/* elastic buff. det. over-|underflow*/
963*4882a593Smuzhiyun #define	PL_PHYINV	0x0400		/* physical layer invalid signal */
964*4882a593Smuzhiyun #define	PL_VSYM_CTR	0x0800		/* violation symbol counter has incr.*/
965*4882a593Smuzhiyun #define	PL_MINI_CTR	0x1000		/* dep. on PLC_CNTRL_A's MINI_CTR_INT*/
966*4882a593Smuzhiyun #define	PL_LE_CTR	0x2000		/* link error event counter */
967*4882a593Smuzhiyun #define	PL_LSDO		0x4000		/* SDO input pin changed to a 1 */
968*4882a593Smuzhiyun #define	PL_NP_ERR	0x8000		/* NP has requested to r/w an inv. r.*/
969*4882a593Smuzhiyun 
970*4882a593Smuzhiyun /*
971*4882a593Smuzhiyun  * The PLC interrupt mask register (PL_INTR_MASK: log. addr. 0x02) constr. is
972*4882a593Smuzhiyun  * equal PL_INTR_EVENT register.
973*4882a593Smuzhiyun  * For each set bit, the setting of corresponding bit generate an int to NP.
974*4882a593Smuzhiyun  */
975*4882a593Smuzhiyun 
976*4882a593Smuzhiyun #ifdef	MOT_ELM
977*4882a593Smuzhiyun /*
978*4882a593Smuzhiyun  * Quad ELM Crosbar Control register values (QELM_XBAR_?)
979*4882a593Smuzhiyun  */
980*4882a593Smuzhiyun #define	QELM_XOUT_IDLE	0x0000		/* Idles/Passthrough */
981*4882a593Smuzhiyun #define	QELM_XOUT_P	0x0001		/* Output to: Bus P */
982*4882a593Smuzhiyun #define	QELM_XOUT_S	0x0002		/* Output to: Bus S */
983*4882a593Smuzhiyun #define	QELM_XOUT_R	0x0003		/* Output to: Bus R */
984*4882a593Smuzhiyun #define	QELM_XOUT_W	0x0004		/* Output to: ELM W */
985*4882a593Smuzhiyun #define	QELM_XOUT_X	0x0005		/* Output to: ELM X */
986*4882a593Smuzhiyun #define	QELM_XOUT_Y	0x0006		/* Output to: ELM Y */
987*4882a593Smuzhiyun #define	QELM_XOUT_Z	0x0007		/* Output to: ELM Z */
988*4882a593Smuzhiyun 
989*4882a593Smuzhiyun /*
990*4882a593Smuzhiyun  * Quad ELM Interrupt data and event registers.
991*4882a593Smuzhiyun  */
992*4882a593Smuzhiyun #define	QELM_NP_ERR	(1<<15)		/* Node Processor Error */
993*4882a593Smuzhiyun #define	QELM_COUNT_Z	(1<<7)		/* Counter Z Interrupt */
994*4882a593Smuzhiyun #define	QELM_COUNT_Y	(1<<6)		/* Counter Y Interrupt */
995*4882a593Smuzhiyun #define	QELM_COUNT_X	(1<<5)		/* Counter X Interrupt */
996*4882a593Smuzhiyun #define	QELM_COUNT_W	(1<<4)		/* Counter W Interrupt */
997*4882a593Smuzhiyun #define	QELM_ELM_Z	(1<<3)		/* ELM Z Interrupt */
998*4882a593Smuzhiyun #define	QELM_ELM_Y	(1<<2)		/* ELM Y Interrupt */
999*4882a593Smuzhiyun #define	QELM_ELM_X	(1<<1)		/* ELM X Interrupt */
1000*4882a593Smuzhiyun #define	QELM_ELM_W	(1<<0)		/* ELM W Interrupt */
1001*4882a593Smuzhiyun #endif	/* MOT_ELM */
1002*4882a593Smuzhiyun /*
1003*4882a593Smuzhiyun  * PLC Timing Parameters
1004*4882a593Smuzhiyun  */
1005*4882a593Smuzhiyun #define	TP_C_MIN	0xff9c	/*   2    ms */
1006*4882a593Smuzhiyun #define	TP_TL_MIN	0xfff0	/*   0.3  ms */
1007*4882a593Smuzhiyun #define	TP_TB_MIN	0xff10	/*   5    ms */
1008*4882a593Smuzhiyun #define	TP_T_OUT	0xd9db	/* 200    ms */
1009*4882a593Smuzhiyun #define	TP_LC_LENGTH	0xf676	/*  50    ms */
1010*4882a593Smuzhiyun #define	TP_LC_LONGLN	0xa0a2	/* 500    ms */
1011*4882a593Smuzhiyun #define	TP_T_SCRUB	0xff6d	/*   3.5  ms */
1012*4882a593Smuzhiyun #define	TP_NS_MAX	0xf021	/*   1.3   ms */
1013*4882a593Smuzhiyun 
1014*4882a593Smuzhiyun /*
1015*4882a593Smuzhiyun  * BIST values
1016*4882a593Smuzhiyun  */
1017*4882a593Smuzhiyun #define PLC_BIST	0x6ecd		/* BIST signature for PLC */
1018*4882a593Smuzhiyun #define PLCS_BIST	0x5b6b 		/* BIST signature for PLC-S */
1019*4882a593Smuzhiyun #define	PLC_ELM_B_BIST	0x6ecd		/* BIST signature of ELM Rev. B */
1020*4882a593Smuzhiyun #define	PLC_ELM_D_BIST	0x5b6b		/* BIST signature of ELM Rev. D */
1021*4882a593Smuzhiyun #define	PLC_CAM_A_BIST	0x9e75		/* BIST signature of CAMEL Rev. A */
1022*4882a593Smuzhiyun #define	PLC_CAM_B_BIST	0x5b6b		/* BIST signature of CAMEL Rev. B */
1023*4882a593Smuzhiyun #define	PLC_IFD_A_BIST	0x9e75		/* BIST signature of IFDDI Rev. A */
1024*4882a593Smuzhiyun #define	PLC_IFD_B_BIST	0x5b6b		/* BIST signature of IFDDI Rev. B */
1025*4882a593Smuzhiyun #define	PLC_QELM_A_BIST	0x5b6b		/* BIST signature of QELM Rev. A */
1026*4882a593Smuzhiyun 
1027*4882a593Smuzhiyun /*
1028*4882a593Smuzhiyun  	FDDI board recources
1029*4882a593Smuzhiyun  */
1030*4882a593Smuzhiyun 
1031*4882a593Smuzhiyun /*
1032*4882a593Smuzhiyun  * request register array (log. addr: RQA_A + a<<1 {a=0..7}) write only.
1033*4882a593Smuzhiyun  * It specifies to FORMAC+ the type of buffer memory access the host requires.
1034*4882a593Smuzhiyun  */
1035*4882a593Smuzhiyun #define	RQ_NOT		0		/* not request */
1036*4882a593Smuzhiyun #define	RQ_RES		1		/* reserved */
1037*4882a593Smuzhiyun #define	RQ_SFW		2		/* special frame write */
1038*4882a593Smuzhiyun #define	RQ_RRQ		3		/* read request: receive queue */
1039*4882a593Smuzhiyun #define	RQ_WSQ		4		/* write request: synchronous queue */
1040*4882a593Smuzhiyun #define	RQ_WA0		5		/* write requ.: asynchronous queue 0 */
1041*4882a593Smuzhiyun #define	RQ_WA1		6		/* write requ.: asynchronous queue 1 */
1042*4882a593Smuzhiyun #define	RQ_WA2		7		/* write requ.: asynchronous queue 2 */
1043*4882a593Smuzhiyun 
1044*4882a593Smuzhiyun #define	SZ_LONG		(sizeof(long))
1045*4882a593Smuzhiyun 
1046*4882a593Smuzhiyun /*
1047*4882a593Smuzhiyun  * FDDI defaults
1048*4882a593Smuzhiyun  * NOTE : In the ANSI docs, times are specified in units of "symbol time".
1049*4882a593Smuzhiyun  * 	  AMD chips use BCLK as unit. 1 BCKL == 2 symbols
1050*4882a593Smuzhiyun  */
1051*4882a593Smuzhiyun #define	COMPLREF	((u_long)32*256*256)	/* two's complement 21 bit */
1052*4882a593Smuzhiyun #define MSTOBCLK(x)	((u_long)(x)*12500L)
1053*4882a593Smuzhiyun #define MSTOTVX(x)	(((u_long)(x)*1000L)/80/255)
1054*4882a593Smuzhiyun 
1055*4882a593Smuzhiyun #endif	/* _SUPERNET_ */
1056