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