xref: /illumos-gate/usr/src/uts/common/io/dmfe/dmfe.h (revision 2d6eb4a5e0a47d30189497241345dc5466bb68ab)
1*5c1d0199Sgd78059 /*
2*5c1d0199Sgd78059  * CDDL HEADER START
3*5c1d0199Sgd78059  *
4*5c1d0199Sgd78059  * The contents of this file are subject to the terms of the
5*5c1d0199Sgd78059  * Common Development and Distribution License (the "License").
6*5c1d0199Sgd78059  * You may not use this file except in compliance with the License.
7*5c1d0199Sgd78059  *
8*5c1d0199Sgd78059  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*5c1d0199Sgd78059  * or http://www.opensolaris.org/os/licensing.
10*5c1d0199Sgd78059  * See the License for the specific language governing permissions
11*5c1d0199Sgd78059  * and limitations under the License.
12*5c1d0199Sgd78059  *
13*5c1d0199Sgd78059  * When distributing Covered Code, include this CDDL HEADER in each
14*5c1d0199Sgd78059  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*5c1d0199Sgd78059  * If applicable, add the following below this CDDL HEADER, with the
16*5c1d0199Sgd78059  * fields enclosed by brackets "[]" replaced with your own identifying
17*5c1d0199Sgd78059  * information: Portions Copyright [yyyy] [name of copyright owner]
18*5c1d0199Sgd78059  *
19*5c1d0199Sgd78059  * CDDL HEADER END
20*5c1d0199Sgd78059  */
21*5c1d0199Sgd78059 /*
22*5c1d0199Sgd78059  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23*5c1d0199Sgd78059  * Use is subject to license terms.
24*5c1d0199Sgd78059  */
25*5c1d0199Sgd78059 
26*5c1d0199Sgd78059 #ifndef _SYS_DMFE_H
27*5c1d0199Sgd78059 #define	_SYS_DMFE_H
28*5c1d0199Sgd78059 
29*5c1d0199Sgd78059 #ifdef __cplusplus
30*5c1d0199Sgd78059 extern "C" {
31*5c1d0199Sgd78059 #endif
32*5c1d0199Sgd78059 
33*5c1d0199Sgd78059 /* Chip ID */
34*5c1d0199Sgd78059 #define	DAVICOM_VENDOR_ID	0x1282
35*5c1d0199Sgd78059 #define	DEVICE_ID_9100		0x9100
36*5c1d0199Sgd78059 #define	DEVICE_ID_9132		0x9132
37*5c1d0199Sgd78059 /* The 9102 and 9102A are distinguished by revision ID */
38*5c1d0199Sgd78059 #define	DEVICE_ID_9102		0x9102
39*5c1d0199Sgd78059 #define	DEVICE_ID_9102A		0x9102
40*5c1d0199Sgd78059 
41*5c1d0199Sgd78059 /* Streams */
42*5c1d0199Sgd78059 #define	DMFEHIWAT		32768	/* driver flow control high water */
43*5c1d0199Sgd78059 #define	DMFELOWAT		4096	/* driver flow control low water */
44*5c1d0199Sgd78059 #define	DMFEIDNUM		0	/* DMFE Id; zero works */
45*5c1d0199Sgd78059 
46*5c1d0199Sgd78059 /* Size/count parameters */
47*5c1d0199Sgd78059 #define	SROM_SIZE		128
48*5c1d0199Sgd78059 #define	SETUPBUF_SIZE		192	/* Setup buffer size in bytes */
49*5c1d0199Sgd78059 #define	MCASTBUF_SIZE		512	/* multicast hash table size in bits */
50*5c1d0199Sgd78059 #define	HASH_POLY		0x04C11DB6
51*5c1d0199Sgd78059 #define	HASH_CRC		0xFFFFFFFFU
52*5c1d0199Sgd78059 #define	SETUPBUF_PHYS		39	/* word offset of station physical */
53*5c1d0199Sgd78059 					/* address within setup buffer */
54*5c1d0199Sgd78059 
55*5c1d0199Sgd78059 
56*5c1d0199Sgd78059 /*
57*5c1d0199Sgd78059  * Tx/Rx descriptor ring entry formats
58*5c1d0199Sgd78059  *
59*5c1d0199Sgd78059  * These structures are not actually used; they are just here to show
60*5c1d0199Sgd78059  * the layout of the descriptor entries used by the DMFE chip hardware
61*5c1d0199Sgd78059  * (we do use "sizeof" these structures).  The code uses the #defined
62*5c1d0199Sgd78059  * offsets below to access the various members of the descriptors, via
63*5c1d0199Sgd78059  * the DDI access functions (remember the DMFE h/w is little-endian).
64*5c1d0199Sgd78059  */
65*5c1d0199Sgd78059 
66*5c1d0199Sgd78059 struct rx_desc_type {
67*5c1d0199Sgd78059 	uint32_t	desc0;
68*5c1d0199Sgd78059 	uint32_t	desc1;
69*5c1d0199Sgd78059 	uint32_t	buffer1;
70*5c1d0199Sgd78059 	uint32_t	rd_next;
71*5c1d0199Sgd78059 };
72*5c1d0199Sgd78059 
73*5c1d0199Sgd78059 struct tx_desc_type {
74*5c1d0199Sgd78059 	uint32_t	desc0;
75*5c1d0199Sgd78059 	uint32_t	desc1;
76*5c1d0199Sgd78059 	uint32_t	buffer1;
77*5c1d0199Sgd78059 	uint32_t	td_next;
78*5c1d0199Sgd78059 };
79*5c1d0199Sgd78059 
80*5c1d0199Sgd78059 /*
81*5c1d0199Sgd78059  * Offsets & sizes for tx/rx descriptors, expressed in (d)words
82*5c1d0199Sgd78059  */
83*5c1d0199Sgd78059 #define	DESC0			0
84*5c1d0199Sgd78059 #define	DESC1			1
85*5c1d0199Sgd78059 #define	BUFFER1			2
86*5c1d0199Sgd78059 #define	RD_NEXT			3
87*5c1d0199Sgd78059 #define	TD_NEXT			3
88*5c1d0199Sgd78059 #define	DESC_SIZE		4
89*5c1d0199Sgd78059 
90*5c1d0199Sgd78059 /*
91*5c1d0199Sgd78059  * Receive descriptor description
92*5c1d0199Sgd78059  */
93*5c1d0199Sgd78059 /* desc0 bit definitions */
94*5c1d0199Sgd78059 #define	RX_OVERFLOW		(1UL<<0)
95*5c1d0199Sgd78059 #define	RX_CRC			(1UL<<1)
96*5c1d0199Sgd78059 #define	RX_DRIBBLING		(1UL<<2)
97*5c1d0199Sgd78059 #define	RX_MII_ERR		(1UL<<3)
98*5c1d0199Sgd78059 #define	RX_RCV_WD_TO		(1UL<<4)
99*5c1d0199Sgd78059 #define	RX_FRAME_TYPE		(1UL<<5)
100*5c1d0199Sgd78059 #define	RX_COLLISION		(1UL<<6)
101*5c1d0199Sgd78059 #define	RX_FRAME2LONG		(1UL<<7)
102*5c1d0199Sgd78059 #define	RX_LAST_DESC		(1UL<<8)
103*5c1d0199Sgd78059 #define	RX_FIRST_DESC		(1UL<<9)
104*5c1d0199Sgd78059 #define	RX_MULTI_FRAME		(1UL<<10)
105*5c1d0199Sgd78059 #define	RX_RUNT_FRAME		(1UL<<11)
106*5c1d0199Sgd78059 #define	RX_LOOP_MODE		(3UL<<12)
107*5c1d0199Sgd78059 #define	RX_DESC_ERR		(1UL<<14)
108*5c1d0199Sgd78059 #define	RX_ERR_SUMMARY		(1UL<<15)
109*5c1d0199Sgd78059 #define	RX_FRAME_LEN		(0x3fffUL<<16)
110*5c1d0199Sgd78059 #define	RX_FILTER_FAIL		(1UL<<30)
111*5c1d0199Sgd78059 #define	RX_OWN			(1UL<<31)
112*5c1d0199Sgd78059 
113*5c1d0199Sgd78059 /* desc1 bit definitions */
114*5c1d0199Sgd78059 #define	RX_BUFFER_SIZE		(0x7ff)
115*5c1d0199Sgd78059 #define	RX_CHAINING		(1UL<<24)
116*5c1d0199Sgd78059 #define	RX_END_OF_RING		(1UL<<25)
117*5c1d0199Sgd78059 
118*5c1d0199Sgd78059 /*
119*5c1d0199Sgd78059  * Transmit descriptor description
120*5c1d0199Sgd78059  */
121*5c1d0199Sgd78059 /* desc0 bit definitions */
122*5c1d0199Sgd78059 #define	TX_DEFERRED		(1UL<<0)
123*5c1d0199Sgd78059 #define	TX_UNDERFLOW		(1UL<<1)
124*5c1d0199Sgd78059 #define	TX_LINK_FAIL		(1UL<<2)
125*5c1d0199Sgd78059 #define	TX_COLL_COUNT		(0xfUL<<3)
126*5c1d0199Sgd78059 #define	TX_HEARTBEAT_FAIL	(1UL<<7)
127*5c1d0199Sgd78059 #define	TX_EXCESS_COLL		(1UL<<8)
128*5c1d0199Sgd78059 #define	TX_LATE_COLL		(1UL<<9)
129*5c1d0199Sgd78059 #define	TX_NO_CARRIER		(1UL<<10)
130*5c1d0199Sgd78059 #define	TX_CARRIER_LOSS		(1UL<<11)
131*5c1d0199Sgd78059 #define	TX_JABBER_TO		(1UL<<14)
132*5c1d0199Sgd78059 #define	TX_ERR_SUMMARY		(1UL<<15)
133*5c1d0199Sgd78059 #define	TX_SPARE		(0x7fffUL<<16)
134*5c1d0199Sgd78059 #define	TX_OWN			(1UL<<31)
135*5c1d0199Sgd78059 
136*5c1d0199Sgd78059 /* desc1 bit definitions */
137*5c1d0199Sgd78059 #define	TX_BUFFER_SIZE1		(0x7ffUL<<0)
138*5c1d0199Sgd78059 #define	TX_BUFFER_SIZE2		(0x7ffUL<<11)
139*5c1d0199Sgd78059 #define	TX_FILTER_TYPE0		(1UL<<22)
140*5c1d0199Sgd78059 #define	TX_DISABLE_PAD		(1UL<<23)
141*5c1d0199Sgd78059 #define	TX_CHAINING		(1UL<<24)
142*5c1d0199Sgd78059 #define	TX_END_OF_RING		(1UL<<25)
143*5c1d0199Sgd78059 #define	TX_CRC_DISABLE		(1UL<<26)
144*5c1d0199Sgd78059 #define	TX_SETUP_PACKET		(1UL<<27)
145*5c1d0199Sgd78059 #define	TX_FILTER_TYPE1		(1UL<<28)
146*5c1d0199Sgd78059 #define	TX_FIRST_DESC		(1UL<<29)
147*5c1d0199Sgd78059 #define	TX_LAST_DESC		(1UL<<30)
148*5c1d0199Sgd78059 #define	TX_INT_ON_COMP		(1UL<<31)
149*5c1d0199Sgd78059 
150*5c1d0199Sgd78059 
151*5c1d0199Sgd78059 /* Device-defined PCI config space registers */
152*5c1d0199Sgd78059 #define	PCI_DMFE_CONF_CFDD	0x40
153*5c1d0199Sgd78059 #define	CFDD_SNOOZE		(1UL<<30)
154*5c1d0199Sgd78059 #define	CFDD_SLEEP		(1UL<<31)
155*5c1d0199Sgd78059 
156*5c1d0199Sgd78059 
157*5c1d0199Sgd78059 /* Operating registers in I/O or MEMORY space */
158*5c1d0199Sgd78059 #define	BUS_MODE_REG		0x00
159*5c1d0199Sgd78059 #define	TX_POLL_REG		0x08
160*5c1d0199Sgd78059 #define	RX_POLL_REG		0x10
161*5c1d0199Sgd78059 #define	RX_BASE_ADDR_REG	0x18
162*5c1d0199Sgd78059 #define	TX_BASE_ADDR_REG	0x20
163*5c1d0199Sgd78059 #define	STATUS_REG		0x28
164*5c1d0199Sgd78059 #define	OPN_MODE_REG		0x30
165*5c1d0199Sgd78059 #define	INT_MASK_REG		0x38
166*5c1d0199Sgd78059 #define	MISSED_FRAME_REG	0x40
167*5c1d0199Sgd78059 #define	ETHER_ROM_REG		0x48
168*5c1d0199Sgd78059 #define	BOOT_ROM_REG		0x50
169*5c1d0199Sgd78059 #define	GP_TIMER_REG		0x58
170*5c1d0199Sgd78059 #define	PHY_STATUS_REG		0x60
171*5c1d0199Sgd78059 #define	FRAME_ACCESS_REG	0x68
172*5c1d0199Sgd78059 #define	FRAME_DATA_REG		0x70
173*5c1d0199Sgd78059 #define	W_J_TIMER_REG		0x78
174*5c1d0199Sgd78059 
175*5c1d0199Sgd78059 
176*5c1d0199Sgd78059 /* Bit descriptions of CSR registers */
177*5c1d0199Sgd78059 
178*5c1d0199Sgd78059 /* BUS_MODE_REG, CSR0 */
179*5c1d0199Sgd78059 #define	SW_RESET		0x00000001
180*5c1d0199Sgd78059 #define	BURST_SIZE		0		/* unlimited burst length */
181*5c1d0199Sgd78059 #define	CACHE_ALIGN		(3 << 14)	/* 32 Dwords		*/
182*5c1d0199Sgd78059 #define	TX_POLL_INTVL		(1 << 17)	/* 200us polling	*/
183*5c1d0199Sgd78059 #define	READ_MULTIPLE		(1 << 21) 	/* use Memory Read	*/
184*5c1d0199Sgd78059 						/* Multiple PCI cycles	*/
185*5c1d0199Sgd78059 
186*5c1d0199Sgd78059 /* STATUS_REG, CSR5 */
187*5c1d0199Sgd78059 #define	TX_PKTDONE_INT		0x00000001UL
188*5c1d0199Sgd78059 #define	TX_STOPPED_INT		0x00000002UL
189*5c1d0199Sgd78059 #define	TX_ALLDONE_INT		0x00000004UL
190*5c1d0199Sgd78059 #define	TX_JABBER_INT		0x00000008UL
191*5c1d0199Sgd78059 #define	TX_RESERVED_INT		0x00000010UL
192*5c1d0199Sgd78059 #define	TX_UNDERFLOW_INT	0x00000020UL
193*5c1d0199Sgd78059 
194*5c1d0199Sgd78059 #define	RX_PKTDONE_INT		0x00000040UL
195*5c1d0199Sgd78059 #define	RX_UNAVAIL_INT		0x00000080UL
196*5c1d0199Sgd78059 #define	RX_STOPPED_INT		0x00000100UL
197*5c1d0199Sgd78059 #define	RX_WATCHDOG_INT		0x00000200UL
198*5c1d0199Sgd78059 
199*5c1d0199Sgd78059 #define	TX_EARLY_INT		0x00000400UL
200*5c1d0199Sgd78059 #define	GP_TIMER_INT		0x00000800UL
201*5c1d0199Sgd78059 #define	LINK_STATUS_INT		0x00001000UL
202*5c1d0199Sgd78059 #define	SYSTEM_ERR_INT		0x00002000UL
203*5c1d0199Sgd78059 #define	RX_EARLY_INT		0x00004000UL
204*5c1d0199Sgd78059 
205*5c1d0199Sgd78059 #define	ABNORMAL_SUMMARY_INT	0x00008000UL
206*5c1d0199Sgd78059 #define	NORMAL_SUMMARY_INT	0x00010000UL
207*5c1d0199Sgd78059 #define	INT_STATUS_MASK		0x0001ffffUL
208*5c1d0199Sgd78059 
209*5c1d0199Sgd78059 #define	RX_PROCESS_STOPPED	0x00000000UL
210*5c1d0199Sgd78059 #define	RX_PROCESS_FETCH_DESC	0x00020000UL
211*5c1d0199Sgd78059 #define	RX_PROCESS_WAIT_PKT	0x00040000UL
212*5c1d0199Sgd78059 #define	RX_PROCESS_STORE_DATA	0x00060000UL
213*5c1d0199Sgd78059 #define	RX_PROCESS_CLOSE_OWNER	0x00080000UL
214*5c1d0199Sgd78059 #define	RX_PROCESS_CLOSE_STATUS	0x000a0000UL
215*5c1d0199Sgd78059 #define	RX_PROCESS_SUSPEND	0x000c0000UL
216*5c1d0199Sgd78059 #define	RX_PROCESS_PURGE	0x000e0000UL
217*5c1d0199Sgd78059 #define	RX_PROCESS_STATE_MASK	0x000e0000UL
218*5c1d0199Sgd78059 #define	TX_PROCESS_STOPPED	0x00000000UL
219*5c1d0199Sgd78059 #define	TX_PROCESS_FETCH_DESC	0x00100000UL
220*5c1d0199Sgd78059 #define	TX_PROCESS_FETCH_SETUP	0x00200000UL
221*5c1d0199Sgd78059 #define	TX_PROCESS_FETCH_DATA	0x00300000UL
222*5c1d0199Sgd78059 #define	TX_PROCESS_CLOSE_OWNER	0x00400000UL
223*5c1d0199Sgd78059 #define	TX_PROCESS_WAIT_END	0x00500000UL
224*5c1d0199Sgd78059 #define	TX_PROCESS_CLOSE_STATUS	0x00600000UL
225*5c1d0199Sgd78059 #define	TX_PROCESS_SUSPEND	0x00700000UL
226*5c1d0199Sgd78059 #define	TX_PROCESS_STATE_MASK	0x00700000UL
227*5c1d0199Sgd78059 #define	SYSTEM_ERR_BITS		0x03800000UL
228*5c1d0199Sgd78059 #define	SYSTEM_ERR_PARITY	0x00000000UL
229*5c1d0199Sgd78059 #define	SYSTEM_ERR_M_ABORT	0x00800000UL
230*5c1d0199Sgd78059 #define	SYSTEM_ERR_T_ABORT	0x01000000UL
231*5c1d0199Sgd78059 
232*5c1d0199Sgd78059 #define	RX_PROCESS_STATE(csr5)	(((csr5) & RX_PROCESS_STATE_MASK) >> 17)
233*5c1d0199Sgd78059 #define	RX_PROCESS_MAX_STATE	7
234*5c1d0199Sgd78059 #define	TX_PROCESS_STATE(csr5)	(((csr5) & TX_PROCESS_STATE_MASK) >> 20)
235*5c1d0199Sgd78059 #define	TX_PROCESS_MAX_STATE	7
236*5c1d0199Sgd78059 
237*5c1d0199Sgd78059 /* OPN_REG , CSR6 */
238*5c1d0199Sgd78059 #define	HASH_FILTERING		(1UL<<0)
239*5c1d0199Sgd78059 #define	START_RECEIVE		(1UL<<1)
240*5c1d0199Sgd78059 #define	HASH_ONLY		(1UL<<2)
241*5c1d0199Sgd78059 #define	PASSBAD			(1UL<<3)
242*5c1d0199Sgd78059 #define	INV_FILTER		(1UL<<4)
243*5c1d0199Sgd78059 #define	PROMISC_MODE		(1UL<<6)
244*5c1d0199Sgd78059 #define	PASS_MULTICAST		(1UL<<7)
245*5c1d0199Sgd78059 #define	FULL_DUPLEX		(1UL<<9)
246*5c1d0199Sgd78059 #define	LOOPBACK_OFF		(0UL<<10)
247*5c1d0199Sgd78059 #define	LOOPBACK_INTERNAL	(1UL<<10)
248*5c1d0199Sgd78059 #define	LOOPBACK_PHY_D		(2UL<<10)
249*5c1d0199Sgd78059 #define	LOOPBACK_PHY_A		(3UL<<10)
250*5c1d0199Sgd78059 #define	LOOPBACK_MODE_MASK	(3UL<<10)
251*5c1d0199Sgd78059 #define	FORCE_COLLISION		(1UL<<12)
252*5c1d0199Sgd78059 #define	START_TRANSMIT 		(1UL<<13)
253*5c1d0199Sgd78059 #define	TX_THRESHOLD_LOW	(0UL<<14)
254*5c1d0199Sgd78059 #define	TX_THRESHOLD_MID	(1UL<<14)
255*5c1d0199Sgd78059 #define	TX_THRESHOLD_HI		(2UL<<14)
256*5c1d0199Sgd78059 #define	TX_THRESHOLD_MASK	(3UL<<14)
257*5c1d0199Sgd78059 #define	ONE_PKT_MODE		(1UL<<16)
258*5c1d0199Sgd78059 #define	EXT_MII_IF		(1UL<<18)
259*5c1d0199Sgd78059 #define	START_TX_IMMED		(1UL<<20)
260*5c1d0199Sgd78059 #define	STORE_AND_FORWARD	(1UL<<21)
261*5c1d0199Sgd78059 #define	TX_THRESHOLD_MODE	(1UL<<22)
262*5c1d0199Sgd78059 #define	OPN_25_MB1		(1UL<<25)
263*5c1d0199Sgd78059 #define	NO_RX_PURGE		(1UL<<29)
264*5c1d0199Sgd78059 #define	RECEIVEALL		(1UL<<30)
265*5c1d0199Sgd78059 
266*5c1d0199Sgd78059 /* INT_MASK_REG , CSR7 */
267*5c1d0199Sgd78059 /*
268*5c1d0199Sgd78059  * Use the values defined for the INT_STATUS_MASK bits (0..16)
269*5c1d0199Sgd78059  * of CSR5.  The remaining bits (17..31) are not used.
270*5c1d0199Sgd78059  */
271*5c1d0199Sgd78059 
272*5c1d0199Sgd78059 /* MISSED_FRAME_REG, CSR8 */
273*5c1d0199Sgd78059 #define	MISSED_FRAME_MASK	0x00000ffffUL
274*5c1d0199Sgd78059 #define	MISSED_OVERFLOW		0x000010000UL
275*5c1d0199Sgd78059 #define	PURGED_PACKET_MASK	0x07ffe0000UL
276*5c1d0199Sgd78059 #define	PURGED_OVERFLOW		0x080000000UL
277*5c1d0199Sgd78059 
278*5c1d0199Sgd78059 /* Serial ROM/MII Register CSR9 */
279*5c1d0199Sgd78059 #define	SEL_CHIP		0x00000001UL
280*5c1d0199Sgd78059 #define	SEL_CLK			0x00000002UL
281*5c1d0199Sgd78059 #define	DATA_IN			0x00000004UL
282*5c1d0199Sgd78059 #define	DATA_OUT		0x00000008UL
283*5c1d0199Sgd78059 #define	SER_8_MB1		0x00000300UL
284*5c1d0199Sgd78059 #define	SEL_XRS			0x00000400UL
285*5c1d0199Sgd78059 #define	SEL_EEPROM		0x00000800UL
286*5c1d0199Sgd78059 #define	SEL_BOOTROM		0x00001000UL
287*5c1d0199Sgd78059 #define	WRITE_OP		0x00002000UL
288*5c1d0199Sgd78059 #define	READ_OP			0x00004000UL
289*5c1d0199Sgd78059 #define	SER_15_MB1		0x00008000UL
290*5c1d0199Sgd78059 #define	READ_EEPROM		(READ_OP | SEL_EEPROM)
291*5c1d0199Sgd78059 #define	READ_EEPROM_CS		(READ_OP | SEL_EEPROM | SEL_CHIP)
292*5c1d0199Sgd78059 
293*5c1d0199Sgd78059 #define	MII_CLOCK		0x00010000UL
294*5c1d0199Sgd78059 #define	MII_DATA_OUT		0x00020000UL
295*5c1d0199Sgd78059 #define	MII_DATA_OUT_SHIFT	17
296*5c1d0199Sgd78059 #define	MII_READ		0x00040000UL
297*5c1d0199Sgd78059 #define	MII_TRISTATE		0x00040000UL
298*5c1d0199Sgd78059 #define	MII_WRITE		0x00000000UL
299*5c1d0199Sgd78059 #define	MII_DATA_IN		0x00080000UL
300*5c1d0199Sgd78059 #define	MII_DATA_IN_SHIFT	19
301*5c1d0199Sgd78059 
302*5c1d0199Sgd78059 #define	RELOAD_EEPROM		0x00100000UL
303*5c1d0199Sgd78059 #define	LOADED_EEPROM		0x00200000UL
304*5c1d0199Sgd78059 
305*5c1d0199Sgd78059 /* GPR Timer reg, CSR11 */
306*5c1d0199Sgd78059 #define	GPTIMER_CONT		(1UL<<16)
307*5c1d0199Sgd78059 
308*5c1d0199Sgd78059 /* PHY Status reg, CSR12 */
309*5c1d0199Sgd78059 #define	GPS_LINK_10		0x00000001UL
310*5c1d0199Sgd78059 #define	GPS_LINK_100		0x00000002UL
311*5c1d0199Sgd78059 #define	GPS_FULL_DUPLEX		0x00000004UL
312*5c1d0199Sgd78059 #define	GPS_LINK_STATUS		0x00000008UL
313*5c1d0199Sgd78059 #define	GPS_RX_LOCK		0x00000010UL
314*5c1d0199Sgd78059 #define	GPS_SIGNAL_DETECT	0x00000020UL
315*5c1d0199Sgd78059 #define	GPS_UTP_SIG		0x00000040UL
316*5c1d0199Sgd78059 #define	GPS_PHY_RESET		0x00000080UL
317*5c1d0199Sgd78059 #define	GPS_WRITE_ENABLE	0x00000100UL
318*5c1d0199Sgd78059 
319*5c1d0199Sgd78059 /* Sample Frame Access reg, CSR13 */
320*5c1d0199Sgd78059 #define	TX_FIFO_ACCESS		(0x32<<3)
321*5c1d0199Sgd78059 #define	RX_FIFO_ACCESS		(0x35<<3)
322*5c1d0199Sgd78059 #define	DIAG_RESET		(0x38<<3)
323*5c1d0199Sgd78059 
324*5c1d0199Sgd78059 /* Sample Frame Data reg, CSR14, when CSR13 is set to DIAG_RESET */
325*5c1d0199Sgd78059 #define	DIAG_TX_FIFO_WRITE_0	0x00000001UL
326*5c1d0199Sgd78059 #define	DIAG_TX_FIFO_READ_0	0x00000002UL
327*5c1d0199Sgd78059 #define	DIAG_RX_FIFO_WRITE_0	0x00000004UL
328*5c1d0199Sgd78059 #define	DIAG_RX_FIFO_READ_0	0x00000008UL
329*5c1d0199Sgd78059 #define	DIAG_TX_FIFO_WRITE_100	0x00000020UL
330*5c1d0199Sgd78059 #define	DIAG_RX_FIFO_WRITE_100	0x00000040UL
331*5c1d0199Sgd78059 
332*5c1d0199Sgd78059 /* CSR15 */
333*5c1d0199Sgd78059 #define	TX_JABBER_DISABLE	0x00000001UL
334*5c1d0199Sgd78059 #define	UNJABBER_INTERVAL	0x00000002UL
335*5c1d0199Sgd78059 #define	JABBER_CLOCK		0x00000004UL
336*5c1d0199Sgd78059 #define	WD_TIMER_DISABLE	0x00000010UL
337*5c1d0199Sgd78059 #define	WD_TIMER_RELEASE	0x00000020UL
338*5c1d0199Sgd78059 #define	VLAN_ENABLE		0x00000040UL
339*5c1d0199Sgd78059 #define	PAUSE_STATUS_1		0x00000080UL
340*5c1d0199Sgd78059 #define	PAUSE_STATUS_2		0x00000200UL
341*5c1d0199Sgd78059 #define	FLOW_CONTROL		0x00000400UL
342*5c1d0199Sgd78059 #define	PAUSE_ENABLE_1		0x00000800UL
343*5c1d0199Sgd78059 #define	PAUSE_ENABLE_2		0x00001000UL
344*5c1d0199Sgd78059 #define	PAUSE_TX_FFFF		0x00002000UL
345*5c1d0199Sgd78059 #define	PAUSE_TX_0000		0x00004000UL
346*5c1d0199Sgd78059 #define	PAUSE_CONDITION		0x00008000UL
347*5c1d0199Sgd78059 #define	RX_FIFO_THRES_MASK	0x003f0000UL
348*5c1d0199Sgd78059 #define	RX_EARLY_THRES_MASK	0x01c00000UL
349*5c1d0199Sgd78059 
350*5c1d0199Sgd78059 
351*5c1d0199Sgd78059 /* SROM access definitions */
352*5c1d0199Sgd78059 #define	HIGH_ADDRESS_BIT	0x20			/* 6 bits */
353*5c1d0199Sgd78059 #define	HIGH_CMD_BIT		0x4			/* 3 bits */
354*5c1d0199Sgd78059 #define	HIGH_DATA_BIT		0x8000			/* 16 bits */
355*5c1d0199Sgd78059 #define	SROM_DELAY		5			/* 5 microseconds */
356*5c1d0199Sgd78059 #define	EEPROM_READ_CMD		6
357*5c1d0199Sgd78059 #define	EEPROM_EN_ADDR		20
358*5c1d0199Sgd78059 
359*5c1d0199Sgd78059 /* MII access definitions */
360*5c1d0199Sgd78059 #define	MII_REG_ADDR_SHIFT	18
361*5c1d0199Sgd78059 #define	MII_PHY_ADDR_SHIFT	23
362*5c1d0199Sgd78059 #define	MII_DELAY		1			/* 1 microsecond */
363*5c1d0199Sgd78059 #define	MII_PREAMBLE		0xffffffffUL
364*5c1d0199Sgd78059 #define	MII_READ_FRAME		0x60000000UL
365*5c1d0199Sgd78059 #define	MII_WRITE_FRAME		0x50020000UL
366*5c1d0199Sgd78059 
367*5c1d0199Sgd78059 
368*5c1d0199Sgd78059 /* DMFE IOCTLS */
369*5c1d0199Sgd78059 #define	ND_BASE			('N' << 8)	/* base */
370*5c1d0199Sgd78059 #define	ND_GET			(ND_BASE + 0)	/* Get a value */
371*5c1d0199Sgd78059 #define	ND_SET			(ND_BASE + 1)	/* Set a value */
372*5c1d0199Sgd78059 
373*5c1d0199Sgd78059 #define	DMFE_ND_GET		ND_GET
374*5c1d0199Sgd78059 #define	DMFE_ND_SET		ND_SET
375*5c1d0199Sgd78059 
376*5c1d0199Sgd78059 #define	DMFEIOC			('G' << 8)
377*5c1d0199Sgd78059 #define	DMFE_SET_LOOP_MODE	(DMFEIOC|1)
378*5c1d0199Sgd78059 #define	DMFE_GET_LOOP_MODE	(DMFEIOC|2)
379*5c1d0199Sgd78059 
380*5c1d0199Sgd78059 /* argument structure for above */
381*5c1d0199Sgd78059 typedef struct {
382*5c1d0199Sgd78059 	int loopback;
383*5c1d0199Sgd78059 } loopback_t;
384*5c1d0199Sgd78059 
385*5c1d0199Sgd78059 #define	DMFE_LOOPBACK_OFF	0
386*5c1d0199Sgd78059 #define	DMFE_PHY_A_LOOPBACK_ON	1
387*5c1d0199Sgd78059 #define	DMFE_PHY_D_LOOPBACK_ON	2
388*5c1d0199Sgd78059 #define	DMFE_INT_LOOPBACK_ON	4
389*5c1d0199Sgd78059 #define	DMFE_LOOPBACK_MODES	7	/* Bitwise OR of above	*/
390*5c1d0199Sgd78059 
391*5c1d0199Sgd78059 #ifdef __cplusplus
392*5c1d0199Sgd78059 }
393*5c1d0199Sgd78059 #endif
394*5c1d0199Sgd78059 
395*5c1d0199Sgd78059 #endif	/* _SYS_DMFE_H */
396