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