if_mosreg.h revision 285830
1132718Skan/* $FreeBSD: releng/10.2/sys/dev/usb/net/if_mosreg.h 232257 2012-02-28 15:45:42Z kevlo $ */
2169689Skan/*-
390075Sobrien * Copyright (c) 2010, 2011 Rick van der Zwet <info@rickvanderzwet.nl>
4132718Skan *
590075Sobrien * Permission to use, copy, modify, and distribute this software for any
690075Sobrien * purpose with or without fee is hereby granted, provided that the above
7132718Skan * copyright notice and this permission notice appear in all copies.
8132718Skan *
990075Sobrien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10132718Skan * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11132718Skan * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12132718Skan * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13132718Skan * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14132718Skan * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15132718Skan * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16132718Skan */
17132718Skan
1890075Sobrien/*-
19132718Skan * Copyright (c) 2008 Johann Christian Rode <jcrode@gmx.net>
20132718Skan *
21132718Skan * Permission to use, copy, modify, and distribute this software for any
22132718Skan * purpose with or without fee is hereby granted, provided that the above
2390075Sobrien * copyright notice and this permission notice appear in all copies.
24132718Skan *
25132718Skan * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
26132718Skan * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
27132718Skan * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
28132718Skan * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
2990075Sobrien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
30132718Skan * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
31132718Skan * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32132718Skan */
33132718Skan
3490075Sobrien/*-
35132718Skan * Copyright (c) 1997, 1998, 1999, 2000-2003
36132718Skan *	Bill Paul <wpaul@windriver.com>.  All rights reserved.
37132718Skan *
38132718Skan * Redistribution and use in source and binary forms, with or without
3990075Sobrien * modification, are permitted provided that the following conditions
40132718Skan * are met:
41132718Skan * 1. Redistributions of source code must retain the above copyright
42132718Skan *    notice, this list of conditions and the following disclaimer.
43132718Skan * 2. Redistributions in binary form must reproduce the above copyright
4490075Sobrien *    notice, this list of conditions and the following disclaimer in the
45161651Skan *    documentation and/or other materials provided with the distribution.
46161651Skan * 3. All advertising materials mentioning features or use of this software
47161651Skan *    must display the following acknowledgement:
48161651Skan *	This product includes software developed by Ravikanth.
49161651Skan * 4. Neither the name of the author nor the names of any co-contributors
50161651Skan *    may be used to endorse or promote products derived from this software
51161651Skan *    without specific prior written permission.
52132718Skan *
53132718Skan * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
54161651Skan * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
55161651Skan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
56161651Skan * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul, THE VOICES IN HIS HEAD OR
57161651Skan * THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
58161651Skan * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
59161651Skan * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
60161651Skan * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
61161651Skan * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
62132718Skan * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
63161651Skan * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
64161651Skan *
65161651Skan */
66161651Skan
67132718Skan/*
68132718Skan * Register definitions for the Moschip MCS7x30 ethernet controller.
69161651Skan */
70132718Skan#define	MOS_MCAST_TABLE 	0x00
71132718Skan#define	MOS_IPG0		0x08
72132718Skan#define	MOS_IPG1		0x09
73132718Skan#define	MOS_PHY_DATA0		0x0a
74169689Skan#define	MOS_PHY_DATA1		0x0b
75169689Skan#define	MOS_PHY_CTL		0x0c
76169689Skan#define	MOS_PHY_STS		0x0d
77169689Skan#define	MOS_PHY_DATA		MOS_PHY_DATA0
78169689Skan#define	MOS_CTL			0x0e
79169689Skan#define	MOS_MAC0		0x0f
80169689Skan#define	MOS_MAC1		0x10
81132718Skan#define	MOS_MAC2		0x11
82132718Skan#define	MOS_MAC3		0x12
83132718Skan#define	MOS_MAC4		0x13
84132718Skan#define	MOS_MAC5		0x14
85132718Skan#define	MOS_MAC			MOS_MAC0
86132718Skan/* apparently only available on hardware rev. C */
87132718Skan#define	MOS_FRAME_DROP_CNT	0x15
88132718Skan#define	MOS_PAUSE_TRHD		0x16
89132718Skan
90132718Skan#define	MOS_PHYCTL_PHYADDR	0x1f
91132718Skan#define	MOS_PHYCTL_WRITE	0x20
9290075Sobrien#define	MOS_PHYCTL_READ		0x40
93132718Skan
94132718Skan#define	MOS_PHYSTS_PHYREG	0x1f
95132718Skan#define	MOS_PHYSTS_READY	0x40
96132718Skan#define	MOS_PHYSTS_PENDING	0x80
97132718Skan
9890075Sobrien#define	MOS_CTL_RX_PROMISC	0x01
9990075Sobrien#define	MOS_CTL_ALLMULTI	0x02
10090075Sobrien#define	MOS_CTL_SLEEP		0x04
10190075Sobrien#define	MOS_CTL_TX_ENB		0x08
102132718Skan/*
103132718Skan * The documentation calls this bit 'reserved', but in the FreeBSD driver
104132718Skan * provided by the vendor, this enables the receiver.
105132718Skan */
10690075Sobrien#define	MOS_CTL_RX_ENB		0x10
107132718Skan#define	MOS_CTL_FDX_ENB		0x20
108132718Skan/* 0 = 10 Mbps, 1 = 100 Mbps */
109132718Skan#define	MOS_CTL_SPEEDSEL	0x40
110132718Skan/* 0 = PHY controls speed/duplex mode, 1 = bridge controls speed/duplex mode */
111132718Skan#define	MOS_CTL_BS_ENB		0x80
112132718Skan
113132718Skan#define	MOS_RXSTS_SHORT_FRAME	0x01
114132718Skan#define	MOS_RXSTS_LENGTH_ERROR	0x02
115132718Skan#define	MOS_RXSTS_ALIGN_ERROR	0x04
116132718Skan#define	MOS_RXSTS_CRC_ERROR	0x08
117132718Skan#define	MOS_RXSTS_LARGE_FRAME	0x10
118132718Skan#define	MOS_RXSTS_VALID		0x20
119132718Skan/*
120132718Skan * The EtherType field of an Ethernet frame can contain values other than
12190075Sobrien * the frame length, hence length errors are ignored.
12290075Sobrien */
12390075Sobrien#define	MOS_RXSTS_MASK		0x3d
12490075Sobrien
12590075Sobrien#define	MOS_PAUSE_TRHD_DEFAULT	0
12690075Sobrien#define	MOS_PAUSE_REWRITES	3
12790075Sobrien
12890075Sobrien#define	MOS_TIMEOUT		1000
12990075Sobrien
13090075Sobrien#define	MOS_RX_LIST_CNT		1
13190075Sobrien#define	MOS_TX_LIST_CNT		1
13290075Sobrien
13390075Sobrien/* Maximum size of a fast ethernet frame plus one byte for the status */
13490075Sobrien#define	MOS_BUFSZ	 	(ETHER_MAX_LEN+1)
13590075Sobrien
13690075Sobrien/*
13790075Sobrien * USB endpoints.
13890075Sobrien */
13990075Sobrien#define	MOS_ENDPT_RX		0
14090075Sobrien#define	MOS_ENDPT_TX		1
14190075Sobrien#define	MOS_ENDPT_INTR		2
14290075Sobrien#define	MOS_ENDPT_MAX		3
14390075Sobrien
14490075Sobrien/*
14590075Sobrien * USB vendor requests.
14690075Sobrien */
14790075Sobrien#define	MOS_UR_READREG		0x0e
14890075Sobrien#define	MOS_UR_WRITEREG		0x0d
14990075Sobrien
15090075Sobrien#define	MOS_CONFIG_IDX		0
15190075Sobrien#define	MOS_IFACE_IDX		0
15290075Sobrien
153169689Skan#define	MCS7730	0x0001
15490075Sobrien#define	MCS7830	0x0002
15590075Sobrien#define	MCS7832	0x0004
15690075Sobrien
157169689Skan#define	MOS_INC(x, y)           (x) = (x + 1) % y
158169689Skan
159169689Skanstruct mos_softc {
160169689Skan	struct usb_ether sc_ue;
161169689Skan	struct ifnet ifp;
162169689Skan
163169689Skan	struct mtx sc_mtx;
164169689Skan	struct usb_xfer *sc_xfer[MOS_ENDPT_MAX];
165169689Skan
166169689Skan	uint16_t mos_flags;
167169689Skan
168169689Skan	int mos_link;
169169689Skan	unsigned char mos_ipgs[2];
170132718Skan	unsigned char mos_phyaddrs[2];
17190075Sobrien};
172132718Skan
173132718Skan#define	GET_MII(sc)		uether_getmii(&(sc)->sc_ue)
174132718Skan#define	MOS_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
175132718Skan#define	MOS_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
176132718Skan#define	MOS_LOCK_ASSERT(_sc, t)	mtx_assert(&(_sc)->sc_mtx, t)
177132718Skan