xref: /dflybsd-src/sys/bus/u4b/net/if_cuereg.h (revision 79be21c50ccfda571219a61d1430ee7a533344d7)
112bd3c8bSSascha Wildner /*-
212bd3c8bSSascha Wildner  * Copyright (c) 1997, 1998, 1999, 2000
312bd3c8bSSascha Wildner  *	Bill Paul <wpaul@ee.columbia.edu>.  All rights reserved.
412bd3c8bSSascha Wildner  *
512bd3c8bSSascha Wildner  * Redistribution and use in source and binary forms, with or without
612bd3c8bSSascha Wildner  * modification, are permitted provided that the following conditions
712bd3c8bSSascha Wildner  * are met:
812bd3c8bSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
912bd3c8bSSascha Wildner  *    notice, this list of conditions and the following disclaimer.
1012bd3c8bSSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
1112bd3c8bSSascha Wildner  *    notice, this list of conditions and the following disclaimer in the
1212bd3c8bSSascha Wildner  *    documentation and/or other materials provided with the distribution.
1312bd3c8bSSascha Wildner  * 3. All advertising materials mentioning features or use of this software
1412bd3c8bSSascha Wildner  *    must display the following acknowledgement:
1512bd3c8bSSascha Wildner  *	This product includes software developed by Bill Paul.
1612bd3c8bSSascha Wildner  * 4. Neither the name of the author nor the names of any co-contributors
1712bd3c8bSSascha Wildner  *    may be used to endorse or promote products derived from this software
1812bd3c8bSSascha Wildner  *    without specific prior written permission.
1912bd3c8bSSascha Wildner  *
2012bd3c8bSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
2112bd3c8bSSascha Wildner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2212bd3c8bSSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2312bd3c8bSSascha Wildner  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
2412bd3c8bSSascha Wildner  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2512bd3c8bSSascha Wildner  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2612bd3c8bSSascha Wildner  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2712bd3c8bSSascha Wildner  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2812bd3c8bSSascha Wildner  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2912bd3c8bSSascha Wildner  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
3012bd3c8bSSascha Wildner  * THE POSSIBILITY OF SUCH DAMAGE.
3112bd3c8bSSascha Wildner  *
32*79be21c5SSascha Wildner  * $FreeBSD: head/sys/dev/usb/net/if_cuereg.h 251674 2013-06-13 01:33:01Z kevlo $
3312bd3c8bSSascha Wildner  */
3412bd3c8bSSascha Wildner 
3512bd3c8bSSascha Wildner /*
3612bd3c8bSSascha Wildner  * Definitions for the CATC Netmate II USB to ethernet controller.
3712bd3c8bSSascha Wildner  */
3812bd3c8bSSascha Wildner 
3912bd3c8bSSascha Wildner /* Vendor specific control commands. */
4012bd3c8bSSascha Wildner #define	CUE_CMD_RESET			0xF4
4112bd3c8bSSascha Wildner #define	CUE_CMD_GET_MACADDR		0xF2
4212bd3c8bSSascha Wildner #define	CUE_CMD_WRITEREG		0xFA
4312bd3c8bSSascha Wildner #define	CUE_CMD_READREG			0xFB
4412bd3c8bSSascha Wildner #define	CUE_CMD_READSRAM		0xF1
4512bd3c8bSSascha Wildner #define	CUE_CMD_WRITESRAM		0xFC
4612bd3c8bSSascha Wildner /* Internal registers. */
4712bd3c8bSSascha Wildner #define	CUE_TX_BUFCNT			0x20
4812bd3c8bSSascha Wildner #define	CUE_RX_BUFCNT			0x21
4912bd3c8bSSascha Wildner #define	CUE_ADVANCED_OPMODES		0x22
5012bd3c8bSSascha Wildner #define	CUE_TX_BUFPKTS			0x23
5112bd3c8bSSascha Wildner #define	CUE_RX_BUFPKTS			0x24
5212bd3c8bSSascha Wildner #define	CUE_RX_MAXCHAIN			0x25
5312bd3c8bSSascha Wildner #define	CUE_ETHCTL			0x60
5412bd3c8bSSascha Wildner #define	CUE_ETHSTS			0x61
5512bd3c8bSSascha Wildner #define	CUE_PAR5			0x62
5612bd3c8bSSascha Wildner #define	CUE_PAR4			0x63
5712bd3c8bSSascha Wildner #define	CUE_PAR3			0x64
5812bd3c8bSSascha Wildner #define	CUE_PAR2			0x65
5912bd3c8bSSascha Wildner #define	CUE_PAR1			0x66
6012bd3c8bSSascha Wildner #define	CUE_PAR0			0x67
6112bd3c8bSSascha Wildner /* Error counters, all 16 bits wide. */
6212bd3c8bSSascha Wildner #define	CUE_TX_SINGLECOLL		0x69
6312bd3c8bSSascha Wildner #define	CUE_TX_MULTICOLL		0x6B
6412bd3c8bSSascha Wildner #define	CUE_TX_EXCESSCOLL		0x6D
6512bd3c8bSSascha Wildner #define	CUE_RX_FRAMEERR			0x6F
6612bd3c8bSSascha Wildner #define	CUE_LEDCTL			0x81
6712bd3c8bSSascha Wildner /* Advenced operating mode register. */
6812bd3c8bSSascha Wildner #define	CUE_AOP_SRAMWAITS		0x03
6912bd3c8bSSascha Wildner #define	CUE_AOP_EMBED_RXLEN		0x08
7012bd3c8bSSascha Wildner #define	CUE_AOP_RXCOMBINE		0x10
7112bd3c8bSSascha Wildner #define	CUE_AOP_TXCOMBINE		0x20
7212bd3c8bSSascha Wildner #define	CUE_AOP_EVEN_PKT_READS		0x40
7312bd3c8bSSascha Wildner #define	CUE_AOP_LOOPBK			0x80
7412bd3c8bSSascha Wildner /* Ethernet control register. */
7512bd3c8bSSascha Wildner #define	CUE_ETHCTL_RX_ON		0x01
7612bd3c8bSSascha Wildner #define	CUE_ETHCTL_LINK_POLARITY	0x02
7712bd3c8bSSascha Wildner #define	CUE_ETHCTL_LINK_FORCE_OK	0x04
7812bd3c8bSSascha Wildner #define	CUE_ETHCTL_MCAST_ON		0x08
7912bd3c8bSSascha Wildner #define	CUE_ETHCTL_PROMISC		0x10
8012bd3c8bSSascha Wildner /* Ethernet status register. */
8112bd3c8bSSascha Wildner #define	CUE_ETHSTS_NO_CARRIER		0x01
8212bd3c8bSSascha Wildner #define	CUE_ETHSTS_LATECOLL		0x02
8312bd3c8bSSascha Wildner #define	CUE_ETHSTS_EXCESSCOLL		0x04
8412bd3c8bSSascha Wildner #define	CUE_ETHSTS_TXBUF_AVAIL		0x08
8512bd3c8bSSascha Wildner #define	CUE_ETHSTS_BAD_POLARITY		0x10
8612bd3c8bSSascha Wildner #define	CUE_ETHSTS_LINK_OK		0x20
8712bd3c8bSSascha Wildner /* LED control register. */
8812bd3c8bSSascha Wildner #define	CUE_LEDCTL_BLINK_1X		0x00
8912bd3c8bSSascha Wildner #define	CUE_LEDCTL_BLINK_2X		0x01
9012bd3c8bSSascha Wildner #define	CUE_LEDCTL_BLINK_QUARTER_ON	0x02
9112bd3c8bSSascha Wildner #define	CUE_LEDCTL_BLINK_QUARTER_OFF	0x03
9212bd3c8bSSascha Wildner #define	CUE_LEDCTL_OFF			0x04
9312bd3c8bSSascha Wildner #define	CUE_LEDCTL_FOLLOW_LINK		0x08
9412bd3c8bSSascha Wildner 
9512bd3c8bSSascha Wildner /*
9612bd3c8bSSascha Wildner  * Address in ASIC's internal SRAM where the multicast hash table lives.
9712bd3c8bSSascha Wildner  * The table is 64 bytes long, giving us a 512-bit table.  We have to set
9812bd3c8bSSascha Wildner  * the bit that corresponds to the broadcast address in order to enable
9912bd3c8bSSascha Wildner  * reception of broadcast frames.
10012bd3c8bSSascha Wildner  */
10112bd3c8bSSascha Wildner #define	CUE_MCAST_TABLE_ADDR	0xFA80
10212bd3c8bSSascha Wildner 
10312bd3c8bSSascha Wildner #define	CUE_TIMEOUT		1000
10412bd3c8bSSascha Wildner #define	CUE_MIN_FRAMELEN	60
10512bd3c8bSSascha Wildner #define	CUE_RX_FRAMES		1
10612bd3c8bSSascha Wildner #define	CUE_TX_FRAMES		1
10712bd3c8bSSascha Wildner 
10812bd3c8bSSascha Wildner #define	CUE_CTL_READ		0x01
10912bd3c8bSSascha Wildner #define	CUE_CTL_WRITE		0x02
11012bd3c8bSSascha Wildner 
11112bd3c8bSSascha Wildner #define	CUE_CONFIG_IDX		0	/* config number 1 */
11212bd3c8bSSascha Wildner #define	CUE_IFACE_IDX		0
11312bd3c8bSSascha Wildner 
114*79be21c5SSascha Wildner /* The interrupt endpoint is currently unused by the CATC part. */
11512bd3c8bSSascha Wildner enum {
11612bd3c8bSSascha Wildner 	CUE_BULK_DT_WR,
11712bd3c8bSSascha Wildner 	CUE_BULK_DT_RD,
11812bd3c8bSSascha Wildner 	CUE_N_TRANSFER,
11912bd3c8bSSascha Wildner };
12012bd3c8bSSascha Wildner 
12112bd3c8bSSascha Wildner struct cue_softc {
12212bd3c8bSSascha Wildner 	struct usb_ether	sc_ue;
123*79be21c5SSascha Wildner 	struct lock		sc_lock;
12412bd3c8bSSascha Wildner 	struct usb_xfer	*sc_xfer[CUE_N_TRANSFER];
12512bd3c8bSSascha Wildner 
12612bd3c8bSSascha Wildner 	int			sc_flags;
12712bd3c8bSSascha Wildner #define	CUE_FLAG_LINK		0x0001	/* got a link */
12812bd3c8bSSascha Wildner };
12912bd3c8bSSascha Wildner 
130*79be21c5SSascha Wildner #define	CUE_LOCK(_sc)		lockmgr(&(_sc)->sc_lock, LK_EXCLUSIVE)
131*79be21c5SSascha Wildner #define	CUE_UNLOCK(_sc)		lockmgr(&(_sc)->sc_lock, LK_RELEASE)
132*79be21c5SSascha Wildner #define	CUE_LOCK_ASSERT(_sc)	KKASSERT(lockowned(&(_sc)->sc_lock))
133