xref: /onnv-gate/usr/src/uts/common/io/vr/vr_impl.h (revision 9540:5e546a100242)
1*9540SJoost.Mulders@Sun.COM /*
2*9540SJoost.Mulders@Sun.COM  * CDDL HEADER START
3*9540SJoost.Mulders@Sun.COM  *
4*9540SJoost.Mulders@Sun.COM  * The contents of this file are subject to the terms of the
5*9540SJoost.Mulders@Sun.COM  * Common Development and Distribution License (the "License").
6*9540SJoost.Mulders@Sun.COM  * You may not use this file except in compliance with the License.
7*9540SJoost.Mulders@Sun.COM  *
8*9540SJoost.Mulders@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9540SJoost.Mulders@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9540SJoost.Mulders@Sun.COM  * See the License for the specific language governing permissions
11*9540SJoost.Mulders@Sun.COM  * and limitations under the License.
12*9540SJoost.Mulders@Sun.COM  *
13*9540SJoost.Mulders@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9540SJoost.Mulders@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9540SJoost.Mulders@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9540SJoost.Mulders@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9540SJoost.Mulders@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9540SJoost.Mulders@Sun.COM  *
19*9540SJoost.Mulders@Sun.COM  * CDDL HEADER END
20*9540SJoost.Mulders@Sun.COM  */
21*9540SJoost.Mulders@Sun.COM 
22*9540SJoost.Mulders@Sun.COM /*
23*9540SJoost.Mulders@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*9540SJoost.Mulders@Sun.COM  * Use is subject to license terms.
25*9540SJoost.Mulders@Sun.COM  */
26*9540SJoost.Mulders@Sun.COM 
27*9540SJoost.Mulders@Sun.COM /*
28*9540SJoost.Mulders@Sun.COM  * Register definitions for the VIA Rhine ethernet adapters
29*9540SJoost.Mulders@Sun.COM  */
30*9540SJoost.Mulders@Sun.COM #ifndef _VRREG_H
31*9540SJoost.Mulders@Sun.COM #define	_VRREG_H
32*9540SJoost.Mulders@Sun.COM 
33*9540SJoost.Mulders@Sun.COM #ifdef __cplusplus
34*9540SJoost.Mulders@Sun.COM 	extern "C" {
35*9540SJoost.Mulders@Sun.COM #endif
36*9540SJoost.Mulders@Sun.COM 
37*9540SJoost.Mulders@Sun.COM /*
38*9540SJoost.Mulders@Sun.COM  * Some definitions for the MII because miiregs doesn't have them
39*9540SJoost.Mulders@Sun.COM  */
40*9540SJoost.Mulders@Sun.COM #define	MII_STATUS_100_BASE_T2_FD	(1 << 10)
41*9540SJoost.Mulders@Sun.COM #define	MII_STATUS_100_BASE_T2		(1 << 9)
42*9540SJoost.Mulders@Sun.COM #define	MII_STATUS_CAPEXT		(1 << 8)
43*9540SJoost.Mulders@Sun.COM #define	MII_ABILITY_ASMDIR		(1 << 6)
44*9540SJoost.Mulders@Sun.COM #define	MII_EXTSTATUS			0x9
45*9540SJoost.Mulders@Sun.COM #define	MII_EXTSTATUS_1000BASE_X_FD	0x8000
46*9540SJoost.Mulders@Sun.COM #define	MII_EXTSTATUS_1000BASE_X	0x4000
47*9540SJoost.Mulders@Sun.COM #define	MII_EXTSTATUS_1000BASE_T_FD	0x2000
48*9540SJoost.Mulders@Sun.COM #define	MII_EXTSTATUS_1000BASE_T	0x1000
49*9540SJoost.Mulders@Sun.COM 
50*9540SJoost.Mulders@Sun.COM /*
51*9540SJoost.Mulders@Sun.COM  * MAC address
52*9540SJoost.Mulders@Sun.COM  */
53*9540SJoost.Mulders@Sun.COM #define	VR_ETHERADDR	0x00
54*9540SJoost.Mulders@Sun.COM 
55*9540SJoost.Mulders@Sun.COM /*
56*9540SJoost.Mulders@Sun.COM  * Receive Configuration
57*9540SJoost.Mulders@Sun.COM  * The thresholds denote the level in the FIFO before transmission
58*9540SJoost.Mulders@Sun.COM  * to host memory starts.
59*9540SJoost.Mulders@Sun.COM  */
60*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG			0x06
61*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_ACCEPTERROR		(1 << 0)
62*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_ACCEPTRUNT		(1 << 1)
63*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_ACCEPTMULTI		(1 << 2)
64*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_ACCEPTBROAD		(1 << 3)
65*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_PROMISC		(1 << 4)
66*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_0	(1 << 5)
67*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_1	(1 << 6)
68*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_2	(1 << 7)
69*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_BITS	(VR_RXCFG_FIFO_THRESHOLD_0 | \
70*9540SJoost.Mulders@Sun.COM 					    VR_RXCFG_FIFO_THRESHOLD_1 | \
71*9540SJoost.Mulders@Sun.COM 					    VR_RXCFG_FIFO_THRESHOLD_2)
72*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_64	(0)
73*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_32	(VR_RXCFG_FIFO_THRESHOLD_0)
74*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_128	(VR_RXCFG_FIFO_THRESHOLD_1)
75*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_256	(VR_RXCFG_FIFO_THRESHOLD_0 | \
76*9540SJoost.Mulders@Sun.COM 					    VR_RXCFG_FIFO_THRESHOLD_1)
77*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_512	(VR_RXCFG_FIFO_THRESHOLD_2)
78*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_768	(VR_RXCFG_FIFO_THRESHOLD_0 | \
79*9540SJoost.Mulders@Sun.COM 					    VR_RXCFG_FIFO_THRESHOLD_2)
80*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_1024	(VR_RXCFG_FIFO_THRESHOLD_2 | \
81*9540SJoost.Mulders@Sun.COM 					    VR_RXCFG_FIFO_THRESHOLD_1)
82*9540SJoost.Mulders@Sun.COM #define	VR_RXCFG_FIFO_THRESHOLD_STFW	(VR_RXCFG_FIFO_THRESHOLD_BITS)
83*9540SJoost.Mulders@Sun.COM 
84*9540SJoost.Mulders@Sun.COM /*
85*9540SJoost.Mulders@Sun.COM  * Transmit Configuration
86*9540SJoost.Mulders@Sun.COM  * The transmission starts when the data in the FIFO reaches the threshold.
87*9540SJoost.Mulders@Sun.COM  * Store and Forward means that a transmission starts when a complete frame
88*9540SJoost.Mulders@Sun.COM  * is in the FIFO.
89*9540SJoost.Mulders@Sun.COM  */
90*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG			0x07
91*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_8021PQ_EN		(1 << 0)	/* VT6105M */
92*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_LOOPBACK_0		(1 << 1)
93*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_LOOPBACK_1		(2 << 2)
94*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_BACKOFF_NATIONAL	(1 << 3)	/* < VT6105M */
95*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_0	(1 << 5)
96*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_1	(1 << 6)
97*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_2	(1 << 7)
98*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_BITS	(VR_TXCFG_FIFO_THRESHOLD_0 | \
99*9540SJoost.Mulders@Sun.COM 					    VR_TXCFG_FIFO_THRESHOLD_1 | \
100*9540SJoost.Mulders@Sun.COM 					    VR_TXCFG_FIFO_THRESHOLD_2)
101*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_128	(0)
102*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_256	(VR_TXCFG_FIFO_THRESHOLD_0)
103*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_512	(VR_TXCFG_FIFO_THRESHOLD_1)
104*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_1024	(VR_TXCFG_FIFO_THRESHOLD_0 | \
105*9540SJoost.Mulders@Sun.COM 					    VR_TXCFG_FIFO_THRESHOLD_1)
106*9540SJoost.Mulders@Sun.COM #define	VR_TXCFG_FIFO_THRESHOLD_STFW	(VR_TXCFG_FIFO_THRESHOLD_BITS)
107*9540SJoost.Mulders@Sun.COM 
108*9540SJoost.Mulders@Sun.COM /*
109*9540SJoost.Mulders@Sun.COM  * Chip control
110*9540SJoost.Mulders@Sun.COM  */
111*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0			0x08
112*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0_RESERVED		(1 << 0)
113*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0_DMA_ENABLE		(1 << 1)
114*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0_DMA_STOP		(1 << 2)
115*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0_RX_DMA_ENABLE		(1 << 3)
116*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0_TX_DMA_ENABLE		(1 << 4)
117*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0_TXPOLL			(1 << 5)	/* < 6105M */
118*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0_RXPOLL			(1 << 6)	/* < 6105M */
119*9540SJoost.Mulders@Sun.COM 
120*9540SJoost.Mulders@Sun.COM #define	VR_CTRL0_DMA_GO			(VR_CTRL0_DMA_ENABLE | \
121*9540SJoost.Mulders@Sun.COM 					    VR_CTRL0_RX_DMA_ENABLE | \
122*9540SJoost.Mulders@Sun.COM 					    VR_CTRL0_TX_DMA_ENABLE | \
123*9540SJoost.Mulders@Sun.COM 					    VR_CTRL0_TXPOLL)
124*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1			0x09
125*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1_RESERVED		(1 << 0)
126*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1_UNICAST_EN		(1 << 1)
127*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1_MACFULLDUPLEX		(1 << 2)
128*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1_NOAUTOPOLL		(1 << 3)
129*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1_RESERVED2		(1 << 4)
130*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1_TXPOLL			(1 << 5)	/* VT6105M */
131*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1_RXPOLL			(1 << 6)	/* VT6105M */
132*9540SJoost.Mulders@Sun.COM #define	VR_CTRL1_RESET			(1 << 7)
133*9540SJoost.Mulders@Sun.COM 
134*9540SJoost.Mulders@Sun.COM #define	VR_T_XQNWAKE			0x0a		/* VT6105M */
135*9540SJoost.Mulders@Sun.COM 
136*9540SJoost.Mulders@Sun.COM /*
137*9540SJoost.Mulders@Sun.COM  * Interrupt Status
138*9540SJoost.Mulders@Sun.COM  * This register reflects NIC status
139*9540SJoost.Mulders@Sun.COM  * The host reads it to determine the cause of the interrupt
140*9540SJoost.Mulders@Sun.COM  * This register must be cleared after power-up
141*9540SJoost.Mulders@Sun.COM  */
142*9540SJoost.Mulders@Sun.COM #define	VR_ISR0			0x0C
143*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_RX_DONE		(1 << 0)
144*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_TX_DONE		(1 << 1)
145*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_RX_ERR		(1 << 2)
146*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_TX_ERR		(1 << 3)
147*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_TX_BUF_UFLOW	(1 << 4)
148*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_RX_LINKERR	(1 << 5)
149*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_BUSERR		(1 << 6)
150*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_STATSMAX	(1 << 7)
151*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_RX_EARLY	(1 << 8)
152*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_TX_FIFO_UFLOW	(1 << 9)
153*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_RX_FIFO_OFLOW	(1 << 10)
154*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_RX_DROPPED	(1 << 11)
155*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_RX_NOBUF	(1 << 12)
156*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_TX_ABORT	(1 << 13)
157*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_LINKSTATUS	(1 << 14)
158*9540SJoost.Mulders@Sun.COM #define	VR_ISR0_GENERAL		(1 << 15)
159*9540SJoost.Mulders@Sun.COM 
160*9540SJoost.Mulders@Sun.COM /*
161*9540SJoost.Mulders@Sun.COM  * Interrupt Configuration
162*9540SJoost.Mulders@Sun.COM  * All bits in this register correspond to the bits in the Interrupt Status
163*9540SJoost.Mulders@Sun.COM  * register Setting individual bits will enable the corresponding interrupt
164*9540SJoost.Mulders@Sun.COM  * This register defaults to all zeros on power up
165*9540SJoost.Mulders@Sun.COM  */
166*9540SJoost.Mulders@Sun.COM #define	VR_ICR0			0x0E
167*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_RX_DONE		VR_ISR0_RX_DONE
168*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_TX_DONE		VR_ISR0_TX_DONE
169*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_RX_ERR		VR_ISR0_RX_ERR
170*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_TX_ERR		VR_ISR0_TX_ERR
171*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_TX_BUF_UFLOW	VR_ISR0_TX_BUF_UFLOW
172*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_RX_LINKERR	VR_ISR0_RX_LINKERR
173*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_BUSERR		VR_ISR0_BUSERR
174*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_STATSMAX	VR_ISR0_STATSMAX
175*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_RX_EARLY	VR_ISR0_RX_EARLY
176*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_TX_FIFO_UFLOW	VR_ISR0_TX_FIFO_UFLOW
177*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_RX_FIFO_OFLOW	VR_ISR0_RX_FIFO_OFLOW
178*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_RX_DROPPED	VR_ISR0_RX_DROPPED
179*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_RX_NOBUF	VR_ISR0_RX_NOBUF
180*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_TX_ABORT	VR_ISR0_TX_ABORT
181*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_LINKSTATUS	VR_ISR0_LINKSTATUS
182*9540SJoost.Mulders@Sun.COM #define	VR_ICR0_GENERAL		VR_ISR0_GENERAL
183*9540SJoost.Mulders@Sun.COM 
184*9540SJoost.Mulders@Sun.COM /*
185*9540SJoost.Mulders@Sun.COM  * Mulicast address registers (MAR), 8 bytes
186*9540SJoost.Mulders@Sun.COM  */
187*9540SJoost.Mulders@Sun.COM #define	VR_MAR0				0x10	/* - 0x13 */
188*9540SJoost.Mulders@Sun.COM #define	VR_MAR1				0x14	/* - 0x17 */
189*9540SJoost.Mulders@Sun.COM 
190*9540SJoost.Mulders@Sun.COM /*
191*9540SJoost.Mulders@Sun.COM  * VT6105M has a multicast/vlan filter and the hash bits are also used as
192*9540SJoost.Mulders@Sun.COM  * CAM data port
193*9540SJoost.Mulders@Sun.COM  */
194*9540SJoost.Mulders@Sun.COM #define	VR_MCAM0			0x10	/* VT6105M */
195*9540SJoost.Mulders@Sun.COM #define	VR_MCAM1			0x11
196*9540SJoost.Mulders@Sun.COM #define	VR_MCAM2			0x12
197*9540SJoost.Mulders@Sun.COM #define	VR_MCAM3			0x13
198*9540SJoost.Mulders@Sun.COM #define	VR_MCAM4			0x14
199*9540SJoost.Mulders@Sun.COM #define	VR_MCAM5			0x15
200*9540SJoost.Mulders@Sun.COM #define	VR_VCAM0			0x16
201*9540SJoost.Mulders@Sun.COM #define	VR_VCAM1			0x17
202*9540SJoost.Mulders@Sun.COM 
203*9540SJoost.Mulders@Sun.COM /*
204*9540SJoost.Mulders@Sun.COM  * Start addresses of receive and transmit ring
205*9540SJoost.Mulders@Sun.COM  */
206*9540SJoost.Mulders@Sun.COM #define	VR_RXADDR			0x18	/* - 0x1B */
207*9540SJoost.Mulders@Sun.COM #define	VR_TXADDR			0x1C	/* - 0x1F */
208*9540SJoost.Mulders@Sun.COM 
209*9540SJoost.Mulders@Sun.COM /*
210*9540SJoost.Mulders@Sun.COM  * VT6105M has 8 TX queues
211*9540SJoost.Mulders@Sun.COM  */
212*9540SJoost.Mulders@Sun.COM #define	VR_TX7_ADDR			0x1C
213*9540SJoost.Mulders@Sun.COM #define	VR_TX6_ADDR			0x20
214*9540SJoost.Mulders@Sun.COM #define	VR_TX5_ADDR			0x24
215*9540SJoost.Mulders@Sun.COM #define	VR_TX4_ADDR			0x28
216*9540SJoost.Mulders@Sun.COM #define	VR_TX3_ADDR			0x2C
217*9540SJoost.Mulders@Sun.COM #define	VR_TX2_ADDR			0x30
218*9540SJoost.Mulders@Sun.COM #define	VR_TX1_ADDR			0x34
219*9540SJoost.Mulders@Sun.COM #define	VR_TX0_ADDR			0x38
220*9540SJoost.Mulders@Sun.COM 
221*9540SJoost.Mulders@Sun.COM /*
222*9540SJoost.Mulders@Sun.COM  * Current and receive- and transmit descriptors.
223*9540SJoost.Mulders@Sun.COM  * These are listed in the VT6102 manual but not in the VT6105.
224*9540SJoost.Mulders@Sun.COM  */
225*9540SJoost.Mulders@Sun.COM #define	VR_RXCUR_DES0			0x20	/* - 0x23 */
226*9540SJoost.Mulders@Sun.COM #define	VR_RXCUR_DES1			0x24	/* - 0x27 */
227*9540SJoost.Mulders@Sun.COM #define	VR_RXCUR_DES2			0x28	/* - 0x2B */
228*9540SJoost.Mulders@Sun.COM #define	VR_RXCUR_DES3			0x2C	/* - 0x2F */
229*9540SJoost.Mulders@Sun.COM 
230*9540SJoost.Mulders@Sun.COM /* VIA secrets here */
231*9540SJoost.Mulders@Sun.COM 
232*9540SJoost.Mulders@Sun.COM #define	VR_INTRLINE			0x3c
233*9540SJoost.Mulders@Sun.COM #define	VR_INTRPIN			0x3d
234*9540SJoost.Mulders@Sun.COM 
235*9540SJoost.Mulders@Sun.COM /* VIA secrets here */
236*9540SJoost.Mulders@Sun.COM 
237*9540SJoost.Mulders@Sun.COM #define	VR_TXCUR_DES0			0x40	/* - 0x43 */
238*9540SJoost.Mulders@Sun.COM #define	VR_TXCUR_DES1			0x44	/* - 0x47 */
239*9540SJoost.Mulders@Sun.COM #define	VR_TXCUR_DES2			0x48	/* - 0x4B */
240*9540SJoost.Mulders@Sun.COM #define	VR_TXCUR_DES3			0x4C	/* - 0x4F */
241*9540SJoost.Mulders@Sun.COM 
242*9540SJoost.Mulders@Sun.COM #define	VR_MODE0			0x50
243*9540SJoost.Mulders@Sun.COM #define	VR_MODE0_QPKTDS			0x80
244*9540SJoost.Mulders@Sun.COM 
245*9540SJoost.Mulders@Sun.COM #define	VR_MODE1			0x51
246*9540SJoost.Mulders@Sun.COM #define	VR_FIFOTST			0x51
247*9540SJoost.Mulders@Sun.COM 
248*9540SJoost.Mulders@Sun.COM /*
249*9540SJoost.Mulders@Sun.COM  * These are not in the datasheet but used in the 'fet' driver
250*9540SJoost.Mulders@Sun.COM  */
251*9540SJoost.Mulders@Sun.COM #define	VR_MODE2			0x52
252*9540SJoost.Mulders@Sun.COM #define	VR_MODE2_PCEROPT		0x80	/* VT6102 only */
253*9540SJoost.Mulders@Sun.COM #define	VR_MODE2_DISABT			0x40
254*9540SJoost.Mulders@Sun.COM #define	VR_MODE2_MRDPL			0x08	/* VT6107A1 and above */
255*9540SJoost.Mulders@Sun.COM #define	VR_MODE2_MODE10T		0x02
256*9540SJoost.Mulders@Sun.COM 
257*9540SJoost.Mulders@Sun.COM #define	VR_MODE3			0x53
258*9540SJoost.Mulders@Sun.COM #define	VR_MODE3_XONOPT			0x80
259*9540SJoost.Mulders@Sun.COM #define	VR_MODE3_TPACEN			0x40
260*9540SJoost.Mulders@Sun.COM #define	VR_MODE3_BACKOPT		0x20
261*9540SJoost.Mulders@Sun.COM #define	VR_MODE3_DLTSEL			0x10
262*9540SJoost.Mulders@Sun.COM #define	VR_MODE3_MIIDMY			0x08
263*9540SJoost.Mulders@Sun.COM #define	VR_MODE3_MIION			0x04
264*9540SJoost.Mulders@Sun.COM 
265*9540SJoost.Mulders@Sun.COM #define	VR_PCI_DELAY_TIMER		0x54
266*9540SJoost.Mulders@Sun.COM #define	VR_FIFOCMD			0x56
267*9540SJoost.Mulders@Sun.COM #define	VR_FIFOSTA			0x57
268*9540SJoost.Mulders@Sun.COM 
269*9540SJoost.Mulders@Sun.COM /* VIA secrets here */
270*9540SJoost.Mulders@Sun.COM 
271*9540SJoost.Mulders@Sun.COM /*
272*9540SJoost.Mulders@Sun.COM  * MII Configuration
273*9540SJoost.Mulders@Sun.COM  */
274*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR			0x6C
275*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_ADDR0		(1 << 0)
276*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_ADDR1		(1 << 1)
277*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_ADDR2		(1 << 2)
278*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_ADDR3		(1 << 3)
279*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_ADDR4		(1 << 4)
280*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_ADDRBITS		(VR_MIIPHYADDR_ADDR0 | \
281*9540SJoost.Mulders@Sun.COM 					    VR_MIIPHYADDR_ADDR1 | \
282*9540SJoost.Mulders@Sun.COM 					    VR_MIIPHYADDR_ADDR2 | \
283*9540SJoost.Mulders@Sun.COM 					    VR_MIIPHYADDR_ADDR3 | \
284*9540SJoost.Mulders@Sun.COM 					    VR_MIIPHYADDR_ADDR4)
285*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_MD_CLOCK_FAST	(1 << 5)
286*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_POLLBITS		((1 << 7) | (1 << 6))
287*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_POLL1024		((0 << 7) | (0 << 6))
288*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_POLL512		((0 << 7) | (1 << 6))
289*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_POLL128		((1 << 7) | (0 << 6))
290*9540SJoost.Mulders@Sun.COM #define	VR_MIIPHYADDR_POLL64		((1 << 7) | (1 << 6))
291*9540SJoost.Mulders@Sun.COM 
292*9540SJoost.Mulders@Sun.COM /*
293*9540SJoost.Mulders@Sun.COM  * MII status
294*9540SJoost.Mulders@Sun.COM  */
295*9540SJoost.Mulders@Sun.COM #define	VR_MIISR			0x6D
296*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_SPEED			(1 << 0) /* VT6102 and VT6105 */
297*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_LINKFAIL		(1 << 1) /* VT6102 and VT6105 */
298*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_DUPLEX			(1 << 2) /* VT6105 only */
299*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_PHYERR			(1 << 3) /* VT6102 and VT6105 */
300*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_PHYOPT			(1 << 4) /* VT6102 only */
301*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_NWAYLINKOK		(1 << 4) /* VT6105 only */
302*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_NWAYPAUSE		(1 << 5) /* VT6105M */
303*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_NWAYASMPAUSE		(1 << 6) /* VT6105M */
304*9540SJoost.Mulders@Sun.COM #define	VR_MIISR_PHYRST			(1 << 7)
305*9540SJoost.Mulders@Sun.COM 
306*9540SJoost.Mulders@Sun.COM /*
307*9540SJoost.Mulders@Sun.COM  * Bus control
308*9540SJoost.Mulders@Sun.COM  */
309*9540SJoost.Mulders@Sun.COM #define	VR_BCR0				0x6E		/* receive */
310*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA0			(1 << 0)
311*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA1			(1 << 1)
312*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA2			(1 << 2)
313*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMABITS			(VR_BCR0_DMA0|VR_BCR0_DMA1 | \
314*9540SJoost.Mulders@Sun.COM 					    VR_BCR0_DMA2)
315*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA32			(0)
316*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA64			(VR_BCR0_DMA0)
317*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA128			(VR_BCR0_DMA1)
318*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA256			(VR_BCR0_DMA0|VR_BCR0_DMA1)
319*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA512			(VR_BCR0_DMA2)
320*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMA1024			(VR_BCR0_DMA0|VR_BCR0_DMA2)
321*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_DMASTFW			(VR_BCR0_DMABITS)
322*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_0	(1 << 3)
323*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_1	(1 << 4)
324*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_2	(1 << 5)
325*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_BITS	(VR_BCR0_RX_FIFO_THRESHOLD_0 | \
326*9540SJoost.Mulders@Sun.COM 					    VR_BCR0_RX_FIFO_THRESHOLD_1 | \
327*9540SJoost.Mulders@Sun.COM 					    VR_BCR0_RX_FIFO_THRESHOLD_2)
328*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_64	(0)
329*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_32	(VR_BCR0_RX_FIFO_THRESHOLD_0)
330*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_128	(VR_BCR0_RX_FIFO_THRESHOLD_1)
331*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_256	(VR_BCR0_RX_FIFO_THRESHOLD_0 | \
332*9540SJoost.Mulders@Sun.COM 					    VR_BCR0_RX_FIFO_THRESHOLD_1)
333*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_512	(VR_BCR0_RX_FIFO_THRESHOLD_2)
334*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_768	(VR_BCR0_RX_FIFO_THRESHOLD_0 | \
335*9540SJoost.Mulders@Sun.COM 					    VR_BCR0_RX_FIFO_THRESHOLD_2)
336*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_1024	(VR_BCR0_RX_FIFO_THRESHOLD_1 | \
337*9540SJoost.Mulders@Sun.COM 					    VR_BCR0_RX_FIFO_THRESHOLD_2)
338*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_RX_FIFO_THRESHOLD_STFW	(VR_BCR0_RX_FIFO_THRESHOLD_BITS)
339*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_LEDCR			(1 << 6)
340*9540SJoost.Mulders@Sun.COM #define	VR_BCR0_MSEL			(1 << 7)
341*9540SJoost.Mulders@Sun.COM 
342*9540SJoost.Mulders@Sun.COM #define	VR_BCR1				0x6F		/* transmit */
343*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_POLLT_0			(1 << 0)
344*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_POLLT_1			(1 << 1)
345*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_POLLT_2			(1 << 2)
346*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_0	(1 << 3)
347*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_1	(1 << 4)
348*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_2	(1 << 5)
349*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_BITS	(VR_BCR1_TX_FIFO_THRESHOLD_0 | \
350*9540SJoost.Mulders@Sun.COM 					    VR_BCR1_TX_FIFO_THRESHOLD_1 | \
351*9540SJoost.Mulders@Sun.COM 					    VR_BCR1_TX_FIFO_THRESHOLD_2)
352*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_128	(0)
353*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_256	(VR_BCR1_TX_FIFO_THRESHOLD_0)
354*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_512	(VR_BCR1_TX_FIFO_THRESHOLD_1)
355*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_1024	(VR_BCR1_TX_FIFO_THRESHOLD_0 | \
356*9540SJoost.Mulders@Sun.COM 					    VR_BCR1_FIFO_THRESHOLD_1)
357*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TX_FIFO_THRESHOLD_STFW	(VR_BCR1_FIFO_THRESHOLD_BITS)
358*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_TXQPRIO			(1 << 6)	/* VT6105M */
359*9540SJoost.Mulders@Sun.COM #define	VR_BCR1_VLANFILTER		(1 << 7)	/* VT6105M */
360*9540SJoost.Mulders@Sun.COM 
361*9540SJoost.Mulders@Sun.COM /*
362*9540SJoost.Mulders@Sun.COM  * MII Configuration
363*9540SJoost.Mulders@Sun.COM  */
364*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD			0x70
365*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD_MD_CLOCK		(1 << 0)
366*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD_MD_CLOCK_READ		(1 << 1)
367*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD_MD_CLOCK_WRITE	(1 << 2)
368*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD_MD_OUT		(1 << 3)
369*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD_MD_MODE_AUTO		(1 << 4)
370*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD_MD_WRITE		(1 << 5)
371*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD_MD_READ		(1 << 6)
372*9540SJoost.Mulders@Sun.COM #define	VR_MIICMD_MD_AUTO		(1 << 7)
373*9540SJoost.Mulders@Sun.COM 
374*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR			0x71
375*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_MAD0			(1 << 0)
376*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_MAD1			(1 << 1)
377*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_MAD2			(1 << 2)
378*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_MAD3			(1 << 3)
379*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_MAD4			(1 << 4)
380*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_BITS			(VR_MIIADDR_MAD0 | \
381*9540SJoost.Mulders@Sun.COM 					    VR_MIIADDR_MAD1 | \
382*9540SJoost.Mulders@Sun.COM 					    VR_MIIADDR_MAD2 | \
383*9540SJoost.Mulders@Sun.COM 					    VR_MIIADDR_MAD3 | \
384*9540SJoost.Mulders@Sun.COM 					    VR_MIIADDR_MAD4)
385*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_MDONE		(1 << 5)
386*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_MAUTO		(1 << 6)
387*9540SJoost.Mulders@Sun.COM #define	VR_MIIADDR_MIDLE		(1 << 7)
388*9540SJoost.Mulders@Sun.COM 
389*9540SJoost.Mulders@Sun.COM #define	VR_MIIDATA			0x72
390*9540SJoost.Mulders@Sun.COM #define	VR_MIIDATA_1			0x72
391*9540SJoost.Mulders@Sun.COM #define	VR_MIIDATA_2			0x73
392*9540SJoost.Mulders@Sun.COM 
393*9540SJoost.Mulders@Sun.COM /*
394*9540SJoost.Mulders@Sun.COM  * EEPROM Config / Status
395*9540SJoost.Mulders@Sun.COM  */
396*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL			0x74
397*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL_DATAOUT		(1 << 0)
398*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL_DATAIN		(1 << 1)
399*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL_CLOCK		(1 << 2)
400*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL_CHIPSELECT		(1 << 3)
401*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL_DIRPROG		(1 << 4)
402*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL_RELOAD		(1 << 5)
403*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL_PROGRAM		(1 << 6)
404*9540SJoost.Mulders@Sun.COM #define	VR_PROMCTL_PRGSTATUS		(1 << 7)
405*9540SJoost.Mulders@Sun.COM 
406*9540SJoost.Mulders@Sun.COM /*
407*9540SJoost.Mulders@Sun.COM  * Chip Configuration A
408*9540SJoost.Mulders@Sun.COM  */
409*9540SJoost.Mulders@Sun.COM #define	VR_CFGA				0x78
410*9540SJoost.Mulders@Sun.COM #define	VR_CFGA_PRE_ACPI_WAKEUP		(1 << 0)	/* VT6105M */
411*9540SJoost.Mulders@Sun.COM #define	VR_CFGA_WAKEUP_PANIC		(1 << 1)	/* VT6105M */
412*9540SJoost.Mulders@Sun.COM #define	VR_CFGA_VLANTAG_INCRC		(1 << 5)	/* VT6105M */
413*9540SJoost.Mulders@Sun.COM #define	VR_CFGA_MIIOPT			(1 << 6)
414*9540SJoost.Mulders@Sun.COM #define	VR_CFGA_EELOAD			(1 << 7)
415*9540SJoost.Mulders@Sun.COM 
416*9540SJoost.Mulders@Sun.COM /*
417*9540SJoost.Mulders@Sun.COM  * Chip Configuration B
418*9540SJoost.Mulders@Sun.COM  */
419*9540SJoost.Mulders@Sun.COM #define	VR_CFGB				0x79
420*9540SJoost.Mulders@Sun.COM #define	VR_CFGB_LATENCYTIMER		(1 << 0)
421*9540SJoost.Mulders@Sun.COM #define	VR_CFGB_WWAIT			(1 << 1)
422*9540SJoost.Mulders@Sun.COM #define	VR_CFGB_RWAIT			(1 << 2)
423*9540SJoost.Mulders@Sun.COM #define	VR_CFGB_RXARBIT			(1 << 3)
424*9540SJoost.Mulders@Sun.COM #define	VR_CFGB_TXARBIT			(1 << 4)
425*9540SJoost.Mulders@Sun.COM #define	VR_CFGB_MRLDIS			(1 << 5)
426*9540SJoost.Mulders@Sun.COM #define	VR_CFGB_PERRDIS			(1 << 6)
427*9540SJoost.Mulders@Sun.COM #define	VR_CFGB_QPKTDIS			(1 << 7)
428*9540SJoost.Mulders@Sun.COM 
429*9540SJoost.Mulders@Sun.COM /*
430*9540SJoost.Mulders@Sun.COM  * Chip Configuration C
431*9540SJoost.Mulders@Sun.COM  */
432*9540SJoost.Mulders@Sun.COM #define	VR_CFGC				0x7A
433*9540SJoost.Mulders@Sun.COM #define	VR_CFGC_BPS0			(1 << 0)
434*9540SJoost.Mulders@Sun.COM #define	VR_CFGC_BPS1			(1 << 1)
435*9540SJoost.Mulders@Sun.COM #define	VR_CFGC_BPS2			(1 << 2)
436*9540SJoost.Mulders@Sun.COM #define	VR_CFGC_BTSEL			(1 << 3)
437*9540SJoost.Mulders@Sun.COM #define	VR_CFGC_DLYEN			(1 << 5)
438*9540SJoost.Mulders@Sun.COM #define	VR_CFGC_BROPT			(1 << 6)
439*9540SJoost.Mulders@Sun.COM #define	VR_CFGC_MED3			(1 << 7) /* VT6102 */
440*9540SJoost.Mulders@Sun.COM 
441*9540SJoost.Mulders@Sun.COM /*
442*9540SJoost.Mulders@Sun.COM  * Chip Configuration D
443*9540SJoost.Mulders@Sun.COM  */
444*9540SJoost.Mulders@Sun.COM #define	VR_CFGD				0x7B
445*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_BAKOPT			(1 << 0)
446*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_MBA			(1 << 1)
447*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_CAP			(1 << 2)
448*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_CRADOM			(1 << 3)
449*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_PMCDIG			(1 << 4)
450*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_MRLEN			(1 << 5)
451*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_TAG_ON_SNAP		(1 << 5)	/* VT6105M */
452*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_DIAG			(1 << 6)
453*9540SJoost.Mulders@Sun.COM #define	VR_CFGD_MMIOEN			(1 << 7)
454*9540SJoost.Mulders@Sun.COM 
455*9540SJoost.Mulders@Sun.COM /*
456*9540SJoost.Mulders@Sun.COM  * Tally counters
457*9540SJoost.Mulders@Sun.COM  */
458*9540SJoost.Mulders@Sun.COM #define	VR_TALLY_MPA			0x7c	/* 16 bits */
459*9540SJoost.Mulders@Sun.COM #define	VR_TALLY_CRC			0x7e	/* 16 bits */
460*9540SJoost.Mulders@Sun.COM 
461*9540SJoost.Mulders@Sun.COM /*
462*9540SJoost.Mulders@Sun.COM  * Misceleneous register 0
463*9540SJoost.Mulders@Sun.COM  */
464*9540SJoost.Mulders@Sun.COM #define	VR_MISC0			0x80
465*9540SJoost.Mulders@Sun.COM #define	VR_MISC0_TIMER0_EN		(1 << 0)
466*9540SJoost.Mulders@Sun.COM #define	VR_MISC0_TIMER0_SUSP		(1 << 1)
467*9540SJoost.Mulders@Sun.COM #define	VR_MISC0_HDXFEN			(1 << 2)
468*9540SJoost.Mulders@Sun.COM #define	VR_MISC0_FDXRFEN		(1 << 3)
469*9540SJoost.Mulders@Sun.COM #define	VR_MISC0_FDXTFEN		(1 << 4)
470*9540SJoost.Mulders@Sun.COM #define	VR_MISC0_TIMER0_USEC_EN		(1 << 5)
471*9540SJoost.Mulders@Sun.COM 
472*9540SJoost.Mulders@Sun.COM /*
473*9540SJoost.Mulders@Sun.COM  * Misceleneous register 1
474*9540SJoost.Mulders@Sun.COM  */
475*9540SJoost.Mulders@Sun.COM #define	VR_MISC1			0x81
476*9540SJoost.Mulders@Sun.COM #define	VR_MISC1_TIMER1_EN		(1 << 0)
477*9540SJoost.Mulders@Sun.COM #define	VR_MISC1_VAXJMP			(1 << 5)
478*9540SJoost.Mulders@Sun.COM #define	VR_MISC1_RESET			(1 << 6)
479*9540SJoost.Mulders@Sun.COM 
480*9540SJoost.Mulders@Sun.COM /*
481*9540SJoost.Mulders@Sun.COM  * Power management
482*9540SJoost.Mulders@Sun.COM  */
483*9540SJoost.Mulders@Sun.COM #define	VR_PWR				0x83
484*9540SJoost.Mulders@Sun.COM #define	VR_PWR_DS0			(1 << 0)
485*9540SJoost.Mulders@Sun.COM #define	VR_PWR_DS1			(1 << 1)
486*9540SJoost.Mulders@Sun.COM #define	VR_PWR_WOLEN			(1 << 2)
487*9540SJoost.Mulders@Sun.COM #define	VR_PWR_WOLSR			(1 << 3)
488*9540SJoost.Mulders@Sun.COM #define	VR_PWR_LGWOL			(1 << 7)
489*9540SJoost.Mulders@Sun.COM 
490*9540SJoost.Mulders@Sun.COM /*
491*9540SJoost.Mulders@Sun.COM  * Second interrupt register status
492*9540SJoost.Mulders@Sun.COM  */
493*9540SJoost.Mulders@Sun.COM #define	VR_ISR1				0x84
494*9540SJoost.Mulders@Sun.COM #define	VR_ISR1_TIMER0			(1 << 0)
495*9540SJoost.Mulders@Sun.COM #define	VR_ISR1_TIMER1			(1 << 1)
496*9540SJoost.Mulders@Sun.COM #define	VR_ISR1_PHYEVENT		(1 << 2)
497*9540SJoost.Mulders@Sun.COM #define	VR_ISR1_TDERR			(1 << 3)
498*9540SJoost.Mulders@Sun.COM #define	VR_ISR1_SSRCI			(1 << 4)
499*9540SJoost.Mulders@Sun.COM #define	VR_ISR1_UINTR_SET		(1 << 5)
500*9540SJoost.Mulders@Sun.COM #define	VR_ISR1_UINTR_CLR		(1 << 6)
501*9540SJoost.Mulders@Sun.COM #define	VR_ISR1_PWEI			(1 << 7)
502*9540SJoost.Mulders@Sun.COM 
503*9540SJoost.Mulders@Sun.COM /*
504*9540SJoost.Mulders@Sun.COM  * Second interrupt register configuration
505*9540SJoost.Mulders@Sun.COM  */
506*9540SJoost.Mulders@Sun.COM #define	VR_ICR1				0x86
507*9540SJoost.Mulders@Sun.COM #define	VR_ICR1_TIMER0			VR_ISR1_TIMER0
508*9540SJoost.Mulders@Sun.COM #define	VR_ICR1_TIMER1			VR_ISR1_TIMER1
509*9540SJoost.Mulders@Sun.COM #define	VR_ICR1_PHYEVENT		VR_ISR1_PHYEVENT
510*9540SJoost.Mulders@Sun.COM #define	VR_ICR1_TDERR			VR_ISR1_TDERR
511*9540SJoost.Mulders@Sun.COM #define	VR_ICR1_SSRCI			VR_ISR1_SSRCI
512*9540SJoost.Mulders@Sun.COM #define	VR_ICR1_UINTR_SET		VR_ISR1_UINTR_SET
513*9540SJoost.Mulders@Sun.COM #define	VR_ICR1_UINTR_CLR		VR_ISR1_UINTR_CLR
514*9540SJoost.Mulders@Sun.COM #define	VR_ICR1_PWEI			VR_ISR1_PWEI
515*9540SJoost.Mulders@Sun.COM 
516*9540SJoost.Mulders@Sun.COM /*
517*9540SJoost.Mulders@Sun.COM  * Content Addressable Memory (CAM) stuff for the VT6105M
518*9540SJoost.Mulders@Sun.COM  */
519*9540SJoost.Mulders@Sun.COM #define	VR_CAM_MASK			0x88
520*9540SJoost.Mulders@Sun.COM 
521*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL			0x92
522*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL_RD			(1 << 3)
523*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL_WR			(1 << 2)
524*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL_SELECT_VLAN		(1 << 1)
525*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL_ENABLE		(1 << 0)
526*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL_WRITE		(VR_CAM_CTRL_ENABLE | VR_CAM_CTRL_WR)
527*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL_READ		(VR_CAM_CTRL_ENABLE | VR_CAM_CTRL_RD)
528*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL_RW			(VR_CAM_CTRL_ENABLE | \
529*9540SJoost.Mulders@Sun.COM 					    VR_CAM_CTRL_RD | VR_CAM_CTRL_WR)
530*9540SJoost.Mulders@Sun.COM #define	VR_CAM_CTRL_DONE		(0)
531*9540SJoost.Mulders@Sun.COM 
532*9540SJoost.Mulders@Sun.COM #define	VR_CAM_ADDR			0x93
533*9540SJoost.Mulders@Sun.COM 
534*9540SJoost.Mulders@Sun.COM /*
535*9540SJoost.Mulders@Sun.COM  * MIB Control register
536*9540SJoost.Mulders@Sun.COM  */
537*9540SJoost.Mulders@Sun.COM #define	VR_MIB_CTRL			0x94
538*9540SJoost.Mulders@Sun.COM #define	VR_MIB_CTRL_ENABLE		(1 << 4)
539*9540SJoost.Mulders@Sun.COM #define	VR_MIB_CTRL_HDUPLEX		(1 << 5)
540*9540SJoost.Mulders@Sun.COM #define	VR_MIB_CTRL_INCR		(1 << 6)
541*9540SJoost.Mulders@Sun.COM #define	VR_MIB_CTRL_RTN			(1 << 7)
542*9540SJoost.Mulders@Sun.COM 
543*9540SJoost.Mulders@Sun.COM /*
544*9540SJoost.Mulders@Sun.COM  * MIB port
545*9540SJoost.Mulders@Sun.COM  */
546*9540SJoost.Mulders@Sun.COM #define	VR_MIB_PORT			0x96
547*9540SJoost.Mulders@Sun.COM 
548*9540SJoost.Mulders@Sun.COM /*
549*9540SJoost.Mulders@Sun.COM  * MIB data
550*9540SJoost.Mulders@Sun.COM  */
551*9540SJoost.Mulders@Sun.COM #define	VR_MIB_DATA			0x97
552*9540SJoost.Mulders@Sun.COM 
553*9540SJoost.Mulders@Sun.COM 
554*9540SJoost.Mulders@Sun.COM /*
555*9540SJoost.Mulders@Sun.COM  * Power configuration
556*9540SJoost.Mulders@Sun.COM  */
557*9540SJoost.Mulders@Sun.COM #define	VR_PWRCFG			0xA1		/* VT6105LOM */
558*9540SJoost.Mulders@Sun.COM #define	VR_PWRCFG_WOLEN			(1 << 0)
559*9540SJoost.Mulders@Sun.COM #define	VR_PWRCFG_WOLSR			(1 << 1)
560*9540SJoost.Mulders@Sun.COM #define	VR_PWRCFG_PHYPOWERDOWN		(7 << 1)
561*9540SJoost.Mulders@Sun.COM 
562*9540SJoost.Mulders@Sun.COM /*
563*9540SJoost.Mulders@Sun.COM  * Flow control, VT6105 and above
564*9540SJoost.Mulders@Sun.COM  */
565*9540SJoost.Mulders@Sun.COM #define	VR_FCR0				0x98
566*9540SJoost.Mulders@Sun.COM #define	VR_FCR0_RXBUFCOUNT		VR_FCR0
567*9540SJoost.Mulders@Sun.COM 
568*9540SJoost.Mulders@Sun.COM #define	VR_FCR1				0x99
569*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_HD_EN			(1 << 0)
570*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_FD_RX_EN		(1 << 1)
571*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_FD_TX_EN		(1 << 2)
572*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_XONXOFF_EN		(1 << 3)
573*9540SJoost.Mulders@Sun.COM 
574*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEOFFBITS		((1 << 5) | (1 << 4))
575*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEOFF_24		((0 << 5) | (0 << 4))
576*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEOFF_32		((0 << 5) | (1 << 4))
577*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEOFF_48		((1 << 5) | (0 << 4))
578*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEOFF_64		((1 << 5) | (1 << 4))
579*9540SJoost.Mulders@Sun.COM 
580*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEONBITS		((1 << 7) | (1 << 6))
581*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEON_04		((0 << 7) | (0 << 6))
582*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEON_08		((0 << 7) | (1 << 6))
583*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEON_16		((1 << 7) | (0 << 6))
584*9540SJoost.Mulders@Sun.COM #define	VR_FCR1_PAUSEON_24		((1 << 7) | (1 << 6))
585*9540SJoost.Mulders@Sun.COM 
586*9540SJoost.Mulders@Sun.COM #define	VR_FCR2				0x9a
587*9540SJoost.Mulders@Sun.COM #define	VR_FCR2_PAUSE			(VR_FCR2)
588*9540SJoost.Mulders@Sun.COM 
589*9540SJoost.Mulders@Sun.COM #define	VR_TIMER0			0x9c
590*9540SJoost.Mulders@Sun.COM #define	VR_TIMER0_TIMEOUT		VR_TIMER0	/* 16 bits */
591*9540SJoost.Mulders@Sun.COM 
592*9540SJoost.Mulders@Sun.COM #define	VR_TIMER1			0x9e
593*9540SJoost.Mulders@Sun.COM #define	VR_TIMER1_TIMEOUT		VR_TIMER1	/* 16 bits */
594*9540SJoost.Mulders@Sun.COM 
595*9540SJoost.Mulders@Sun.COM #define	VR_CRC_PATTERN0			0xb0		/* 32 bits, VT6105M */
596*9540SJoost.Mulders@Sun.COM #define	VR_CRC_PATTERN1			0xb4		/* 32 bits, VT6105M */
597*9540SJoost.Mulders@Sun.COM #define	VR_CRC_PATTERN2			0xb8		/* 32 bits, VT6105M */
598*9540SJoost.Mulders@Sun.COM #define	VR_CRC_PATTERN3			0xbC		/* 32 bits, VT6105M */
599*9540SJoost.Mulders@Sun.COM 
600*9540SJoost.Mulders@Sun.COM /*
601*9540SJoost.Mulders@Sun.COM  * Receive desctriptor
602*9540SJoost.Mulders@Sun.COM  */
603*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_RXERR		(1 << 0)
604*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_CRCERR		(1 << 1)
605*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_FAE		(1 << 2)
606*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_FOV		(1 << 3)
607*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_LONG		(1 << 4)
608*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_RUNT		(1 << 5)
609*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_SERR		(1 << 6)
610*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_BUFF		(1 << 7)
611*9540SJoost.Mulders@Sun.COM 
612*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_EDP		(1 << 8)
613*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_STP		(1 << 9)
614*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_CHN		(1 << 10)
615*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_PHY		(1 << 11)
616*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_BAR		(1 << 12)
617*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_MAR		(1 << 13)
618*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_VIDHIT		(1 << 14)	/* VT6105M or reserved */
619*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_RXOK		(1 << 15)
620*9540SJoost.Mulders@Sun.COM 
621*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_ABN		((1 << 27) | (1 << 28) | (1 << 29) | (1 << 30))
622*9540SJoost.Mulders@Sun.COM #define	VR_RDES0_OWN		(1U << 31)
623*9540SJoost.Mulders@Sun.COM 
624*9540SJoost.Mulders@Sun.COM /*
625*9540SJoost.Mulders@Sun.COM  * Transmit descriptor
626*9540SJoost.Mulders@Sun.COM  */
627*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_NCR		((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3))
628*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_COL		(1 << 4)
629*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_CDH		(1 << 7)
630*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_ABT		(1 << 8)
631*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_OWC		(1 << 9)
632*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_CRS		(1 << 10)
633*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_UDF		(1 << 11)
634*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_TERR		(1 << 15)
635*9540SJoost.Mulders@Sun.COM /* VLAN stuff is for VT6105M only */
636*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_VLANID		((1 << 27) | (1 << 26) | (1 << 25) | (1 << 24) \
637*9540SJoost.Mulders@Sun.COM 				    (1 << 23) | (1 << 22) | (1 << 21) | \
638*9540SJoost.Mulders@Sun.COM 				    (1 << 20) | (1 << 19) | (1 << 18) | \
639*9540SJoost.Mulders@Sun.COM 				    (1 << 17) | (1 << 16))
640*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_VLANPRI	((1 << 30) | (1 << 29) | (1 << 28))
641*9540SJoost.Mulders@Sun.COM #define	VR_TDES0_OWN		(1U << 31)
642*9540SJoost.Mulders@Sun.COM 
643*9540SJoost.Mulders@Sun.COM #define	VR_TDES1_LEN		((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | \
644*9540SJoost.Mulders@Sun.COM 				    (1 << 4) | (1 << 5) | (1 << 6) | \
645*9540SJoost.Mulders@Sun.COM 				    (1 << 7) | (1 << 8) | (1 << 9) | (1 << 10))
646*9540SJoost.Mulders@Sun.COM 
647*9540SJoost.Mulders@Sun.COM #define	VR_TDES1_CHN		(1 << 15)
648*9540SJoost.Mulders@Sun.COM #define	VR_TDES1_CRC		(1 << 16)
649*9540SJoost.Mulders@Sun.COM #define	VR_TDES1_STP		(1 << 21) /* EDP/STP are flipped in DS6105! */
650*9540SJoost.Mulders@Sun.COM #define	VR_TDES1_EDP		(1 << 22)
651*9540SJoost.Mulders@Sun.COM #define	VR_TDES1_INTR		(1 << 23)
652*9540SJoost.Mulders@Sun.COM 
653*9540SJoost.Mulders@Sun.COM #define	VR_TDES3_SUPPRESS_INTR	(1 << 0)
654*9540SJoost.Mulders@Sun.COM 
655*9540SJoost.Mulders@Sun.COM #endif	/* _VRREG_H */
656