xref: /dflybsd-src/sys/bus/u4b/net/if_mosreg.h (revision 3b9646997c6d4b91cc665f5f2eb7f8c78341249e)
112bd3c8bSSascha Wildner /* $FreeBSD$ */
212bd3c8bSSascha Wildner /*-
312bd3c8bSSascha Wildner  * Copyright (c) 2010, 2011 Rick van der Zwet <info@rickvanderzwet.nl>
412bd3c8bSSascha Wildner  *
512bd3c8bSSascha Wildner  * Permission to use, copy, modify, and distribute this software for any
612bd3c8bSSascha Wildner  * purpose with or without fee is hereby granted, provided that the above
712bd3c8bSSascha Wildner  * copyright notice and this permission notice appear in all copies.
812bd3c8bSSascha Wildner  *
912bd3c8bSSascha Wildner  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1012bd3c8bSSascha Wildner  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1112bd3c8bSSascha Wildner  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1212bd3c8bSSascha Wildner  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1312bd3c8bSSascha Wildner  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1412bd3c8bSSascha Wildner  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1512bd3c8bSSascha Wildner  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1612bd3c8bSSascha Wildner  */
1712bd3c8bSSascha Wildner 
1812bd3c8bSSascha Wildner /*-
1912bd3c8bSSascha Wildner  * Copyright (c) 2008 Johann Christian Rode <jcrode@gmx.net>
2012bd3c8bSSascha Wildner  *
2112bd3c8bSSascha Wildner  * Permission to use, copy, modify, and distribute this software for any
2212bd3c8bSSascha Wildner  * purpose with or without fee is hereby granted, provided that the above
2312bd3c8bSSascha Wildner  * copyright notice and this permission notice appear in all copies.
2412bd3c8bSSascha Wildner  *
2512bd3c8bSSascha Wildner  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
2612bd3c8bSSascha Wildner  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
2712bd3c8bSSascha Wildner  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
2812bd3c8bSSascha Wildner  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
2912bd3c8bSSascha Wildner  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3012bd3c8bSSascha Wildner  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3112bd3c8bSSascha Wildner  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3212bd3c8bSSascha Wildner  */
3312bd3c8bSSascha Wildner 
3412bd3c8bSSascha Wildner /*-
3512bd3c8bSSascha Wildner  * Copyright (c) 1997, 1998, 1999, 2000-2003
3612bd3c8bSSascha Wildner  *	Bill Paul <wpaul@windriver.com>.  All rights reserved.
3712bd3c8bSSascha Wildner  *
3812bd3c8bSSascha Wildner  * Redistribution and use in source and binary forms, with or without
3912bd3c8bSSascha Wildner  * modification, are permitted provided that the following conditions
4012bd3c8bSSascha Wildner  * are met:
4112bd3c8bSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
4212bd3c8bSSascha Wildner  *    notice, this list of conditions and the following disclaimer.
4312bd3c8bSSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
4412bd3c8bSSascha Wildner  *    notice, this list of conditions and the following disclaimer in the
4512bd3c8bSSascha Wildner  *    documentation and/or other materials provided with the distribution.
4612bd3c8bSSascha Wildner  * 3. All advertising materials mentioning features or use of this software
4712bd3c8bSSascha Wildner  *    must display the following acknowledgement:
4812bd3c8bSSascha Wildner  *	This product includes software developed by Ravikanth.
4912bd3c8bSSascha Wildner  * 4. Neither the name of the author nor the names of any co-contributors
5012bd3c8bSSascha Wildner  *    may be used to endorse or promote products derived from this software
5112bd3c8bSSascha Wildner  *    without specific prior written permission.
5212bd3c8bSSascha Wildner  *
5312bd3c8bSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
5412bd3c8bSSascha Wildner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
5512bd3c8bSSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
5612bd3c8bSSascha Wildner  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul, THE VOICES IN HIS HEAD OR
5712bd3c8bSSascha Wildner  * THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
5812bd3c8bSSascha Wildner  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
5912bd3c8bSSascha Wildner  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
6012bd3c8bSSascha Wildner  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
6112bd3c8bSSascha Wildner  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
6212bd3c8bSSascha Wildner  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
6312bd3c8bSSascha Wildner  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6412bd3c8bSSascha Wildner  *
6512bd3c8bSSascha Wildner  */
6612bd3c8bSSascha Wildner 
6712bd3c8bSSascha Wildner /*
6812bd3c8bSSascha Wildner  * Register definitions for the Moschip MCS7x30 ethernet controller.
6912bd3c8bSSascha Wildner  */
7012bd3c8bSSascha Wildner #define	MOS_MCAST_TABLE 	0x00
7112bd3c8bSSascha Wildner #define	MOS_IPG0		0x08
7212bd3c8bSSascha Wildner #define	MOS_IPG1		0x09
7312bd3c8bSSascha Wildner #define	MOS_PHY_DATA0		0x0a
7412bd3c8bSSascha Wildner #define	MOS_PHY_DATA1		0x0b
7512bd3c8bSSascha Wildner #define	MOS_PHY_CTL		0x0c
7612bd3c8bSSascha Wildner #define	MOS_PHY_STS		0x0d
7712bd3c8bSSascha Wildner #define	MOS_PHY_DATA		MOS_PHY_DATA0
7812bd3c8bSSascha Wildner #define	MOS_CTL			0x0e
7912bd3c8bSSascha Wildner #define	MOS_MAC0		0x0f
8012bd3c8bSSascha Wildner #define	MOS_MAC1		0x10
8112bd3c8bSSascha Wildner #define	MOS_MAC2		0x11
8212bd3c8bSSascha Wildner #define	MOS_MAC3		0x12
8312bd3c8bSSascha Wildner #define	MOS_MAC4		0x13
8412bd3c8bSSascha Wildner #define	MOS_MAC5		0x14
8512bd3c8bSSascha Wildner #define	MOS_MAC			MOS_MAC0
8612bd3c8bSSascha Wildner /* apparently only available on hardware rev. C */
8712bd3c8bSSascha Wildner #define	MOS_FRAME_DROP_CNT	0x15
8812bd3c8bSSascha Wildner #define	MOS_PAUSE_TRHD		0x16
8912bd3c8bSSascha Wildner 
9012bd3c8bSSascha Wildner #define	MOS_PHYCTL_PHYADDR	0x1f
9112bd3c8bSSascha Wildner #define	MOS_PHYCTL_WRITE	0x20
9212bd3c8bSSascha Wildner #define	MOS_PHYCTL_READ		0x40
9312bd3c8bSSascha Wildner 
9412bd3c8bSSascha Wildner #define	MOS_PHYSTS_PHYREG	0x1f
9512bd3c8bSSascha Wildner #define	MOS_PHYSTS_READY	0x40
9612bd3c8bSSascha Wildner #define	MOS_PHYSTS_PENDING	0x80
9712bd3c8bSSascha Wildner 
9812bd3c8bSSascha Wildner #define	MOS_CTL_RX_PROMISC	0x01
9912bd3c8bSSascha Wildner #define	MOS_CTL_ALLMULTI	0x02
10012bd3c8bSSascha Wildner #define	MOS_CTL_SLEEP		0x04
10112bd3c8bSSascha Wildner #define	MOS_CTL_TX_ENB		0x08
10212bd3c8bSSascha Wildner /*
10312bd3c8bSSascha Wildner  * The documentation calls this bit 'reserved', but in the FreeBSD driver
10412bd3c8bSSascha Wildner  * provided by the vendor, this enables the receiver.
10512bd3c8bSSascha Wildner  */
10612bd3c8bSSascha Wildner #define	MOS_CTL_RX_ENB		0x10
10712bd3c8bSSascha Wildner #define	MOS_CTL_FDX_ENB		0x20
10812bd3c8bSSascha Wildner /* 0 = 10 Mbps, 1 = 100 Mbps */
10912bd3c8bSSascha Wildner #define	MOS_CTL_SPEEDSEL	0x40
11012bd3c8bSSascha Wildner /* 0 = PHY controls speed/duplex mode, 1 = bridge controls speed/duplex mode */
11112bd3c8bSSascha Wildner #define	MOS_CTL_BS_ENB		0x80
11212bd3c8bSSascha Wildner 
11312bd3c8bSSascha Wildner #define	MOS_RXSTS_SHORT_FRAME	0x01
11412bd3c8bSSascha Wildner #define	MOS_RXSTS_LENGTH_ERROR	0x02
11512bd3c8bSSascha Wildner #define	MOS_RXSTS_ALIGN_ERROR	0x04
11612bd3c8bSSascha Wildner #define	MOS_RXSTS_CRC_ERROR	0x08
11712bd3c8bSSascha Wildner #define	MOS_RXSTS_LARGE_FRAME	0x10
11812bd3c8bSSascha Wildner #define	MOS_RXSTS_VALID		0x20
11912bd3c8bSSascha Wildner /*
12012bd3c8bSSascha Wildner  * The EtherType field of an Ethernet frame can contain values other than
12112bd3c8bSSascha Wildner  * the frame length, hence length errors are ignored.
12212bd3c8bSSascha Wildner  */
12312bd3c8bSSascha Wildner #define	MOS_RXSTS_MASK		0x3d
12412bd3c8bSSascha Wildner 
12512bd3c8bSSascha Wildner #define	MOS_PAUSE_TRHD_DEFAULT	0
12612bd3c8bSSascha Wildner #define	MOS_PAUSE_REWRITES	3
12712bd3c8bSSascha Wildner 
12812bd3c8bSSascha Wildner #define	MOS_TIMEOUT		1000
12912bd3c8bSSascha Wildner 
13012bd3c8bSSascha Wildner #define	MOS_RX_LIST_CNT		1
13112bd3c8bSSascha Wildner #define	MOS_TX_LIST_CNT		1
13212bd3c8bSSascha Wildner 
13312bd3c8bSSascha Wildner /* Maximum size of a fast ethernet frame plus one byte for the status */
13412bd3c8bSSascha Wildner #define	MOS_BUFSZ		(ETHER_MAX_LEN+1)
13512bd3c8bSSascha Wildner 
13612bd3c8bSSascha Wildner /*
13712bd3c8bSSascha Wildner  * USB endpoints.
13812bd3c8bSSascha Wildner  */
13912bd3c8bSSascha Wildner #define	MOS_ENDPT_RX		0
14012bd3c8bSSascha Wildner #define	MOS_ENDPT_TX		1
14112bd3c8bSSascha Wildner #define	MOS_ENDPT_INTR		2
14212bd3c8bSSascha Wildner #define	MOS_ENDPT_MAX		3
14312bd3c8bSSascha Wildner 
14412bd3c8bSSascha Wildner /*
14512bd3c8bSSascha Wildner  * USB vendor requests.
14612bd3c8bSSascha Wildner  */
14712bd3c8bSSascha Wildner #define	MOS_UR_READREG		0x0e
14812bd3c8bSSascha Wildner #define	MOS_UR_WRITEREG		0x0d
14912bd3c8bSSascha Wildner 
15012bd3c8bSSascha Wildner #define	MOS_CONFIG_IDX		0
15112bd3c8bSSascha Wildner #define	MOS_IFACE_IDX		0
15212bd3c8bSSascha Wildner 
15312bd3c8bSSascha Wildner #define	MCS7730	0x0001
15412bd3c8bSSascha Wildner #define	MCS7830	0x0002
155*f8577199SSascha Wildner #define	MCS7832	0x0004
15612bd3c8bSSascha Wildner 
15712bd3c8bSSascha Wildner #define	MOS_INC(x, y)           (x) = (x + 1) % y
15812bd3c8bSSascha Wildner 
15912bd3c8bSSascha Wildner struct mos_softc {
16012bd3c8bSSascha Wildner 	struct usb_ether sc_ue;
16112bd3c8bSSascha Wildner 	struct ifnet ifp;
16212bd3c8bSSascha Wildner 
163559d4eaeSSascha Wildner 	struct lock sc_lock;
16412bd3c8bSSascha Wildner 	struct usb_xfer *sc_xfer[MOS_ENDPT_MAX];
16512bd3c8bSSascha Wildner 
16612bd3c8bSSascha Wildner 	uint16_t mos_flags;
16712bd3c8bSSascha Wildner 
16812bd3c8bSSascha Wildner 	int mos_link;
16912bd3c8bSSascha Wildner 	unsigned char mos_ipgs[2];
17012bd3c8bSSascha Wildner 	unsigned char mos_phyaddrs[2];
17112bd3c8bSSascha Wildner };
17212bd3c8bSSascha Wildner 
17312bd3c8bSSascha Wildner #define	GET_MII(sc)		uether_getmii(&(sc)->sc_ue)
174559d4eaeSSascha Wildner #define	MOS_LOCK(_sc)		lockmgr(&(_sc)->sc_lock, LK_EXCLUSIVE)
175559d4eaeSSascha Wildner #define	MOS_UNLOCK(_sc)		lockmgr(&(_sc)->sc_lock, LK_RELEASE)
176*f8577199SSascha Wildner #define	MOS_LOCK_ASSERT(_sc)	KKASSERT(lockowned(&(_sc)->sc_lock))
177