1*ab0b1be7Smglocker /* $OpenBSD: if_mosreg.h,v 1.7 2013/04/15 09:23:01 mglocker Exp $ */ 27087e331Sjsg 3aa608ff9Sderaadt /* 4aa608ff9Sderaadt * Copyright (c) 2008 Johann Christian Rode <jcrode@gmx.net> 5aa608ff9Sderaadt * 6aa608ff9Sderaadt * Permission to use, copy, modify, and distribute this software for any 7aa608ff9Sderaadt * purpose with or without fee is hereby granted, provided that the above 8aa608ff9Sderaadt * copyright notice and this permission notice appear in all copies. 9aa608ff9Sderaadt * 10aa608ff9Sderaadt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11aa608ff9Sderaadt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12aa608ff9Sderaadt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13aa608ff9Sderaadt * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14aa608ff9Sderaadt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15aa608ff9Sderaadt * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16aa608ff9Sderaadt * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17aa608ff9Sderaadt */ 18aa608ff9Sderaadt 19aa608ff9Sderaadt /* 20aa608ff9Sderaadt * Copyright (c) 1997, 1998, 1999, 2000-2003 21aa608ff9Sderaadt * Bill Paul <wpaul@windriver.com>. All rights reserved. 22aa608ff9Sderaadt * 23aa608ff9Sderaadt * Redistribution and use in source and binary forms, with or without 24aa608ff9Sderaadt * modification, are permitted provided that the following conditions 25aa608ff9Sderaadt * are met: 26aa608ff9Sderaadt * 1. Redistributions of source code must retain the above copyright 27aa608ff9Sderaadt * notice, this list of conditions and the following disclaimer. 28aa608ff9Sderaadt * 2. Redistributions in binary form must reproduce the above copyright 29aa608ff9Sderaadt * notice, this list of conditions and the following disclaimer in the 30aa608ff9Sderaadt * documentation and/or other materials provided with the distribution. 31aa608ff9Sderaadt * 3. All advertising materials mentioning features or use of this software 32aa608ff9Sderaadt * must display the following acknowledgement: 33aa608ff9Sderaadt * This product includes software developed by Ravikanth. 34aa608ff9Sderaadt * 4. Neither the name of the author nor the names of any co-contributors 35aa608ff9Sderaadt * may be used to endorse or promote products derived from this software 36aa608ff9Sderaadt * without specific prior written permission. 37aa608ff9Sderaadt * 38aa608ff9Sderaadt * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND 39aa608ff9Sderaadt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 40aa608ff9Sderaadt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 41aa608ff9Sderaadt * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul, THE VOICES IN HIS HEAD OR 42aa608ff9Sderaadt * THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 43aa608ff9Sderaadt * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 44aa608ff9Sderaadt * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 45aa608ff9Sderaadt * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 46aa608ff9Sderaadt * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 47aa608ff9Sderaadt * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 48aa608ff9Sderaadt * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 49aa608ff9Sderaadt * 50aa608ff9Sderaadt */ 51aa608ff9Sderaadt 52aa608ff9Sderaadt /* 53aa608ff9Sderaadt * Register definitions for the Moschip MCS7x30 ethernet controller. 54aa608ff9Sderaadt */ 55aa608ff9Sderaadt #define MOS_MCAST_TABLE 0x00 56aa608ff9Sderaadt #define MOS_IPG0 0x08 57aa608ff9Sderaadt #define MOS_IPG1 0x09 58aa608ff9Sderaadt #define MOS_PHY_DATA0 0x0a 59aa608ff9Sderaadt #define MOS_PHY_DATA1 0x0b 60aa608ff9Sderaadt #define MOS_PHY_CTL 0x0c 61aa608ff9Sderaadt #define MOS_PHY_STS 0x0d 62aa608ff9Sderaadt #define MOS_PHY_DATA MOS_PHY_DATA0 63aa608ff9Sderaadt #define MOS_CTL 0x0e 64aa608ff9Sderaadt #define MOS_MAC0 0x0f 65aa608ff9Sderaadt #define MOS_MAC1 0x10 66aa608ff9Sderaadt #define MOS_MAC2 0x11 67aa608ff9Sderaadt #define MOS_MAC3 0x12 68aa608ff9Sderaadt #define MOS_MAC4 0x13 69aa608ff9Sderaadt #define MOS_MAC5 0x14 70aa608ff9Sderaadt #define MOS_MAC MOS_MAC0 71aa608ff9Sderaadt /* apparently only available on hardware rev. C */ 72cbaf842eSderaadt #define MOS_FRAME_DROP_CNT 0x15 73aa608ff9Sderaadt #define MOS_PAUSE_TRHD 0x16 74aa608ff9Sderaadt 75aa608ff9Sderaadt #define MOS_PHYCTL_PHYADDR 0x1f 76aa608ff9Sderaadt #define MOS_PHYCTL_WRITE 0x20 77aa608ff9Sderaadt #define MOS_PHYCTL_READ 0x40 78aa608ff9Sderaadt 79aa608ff9Sderaadt #define MOS_PHYSTS_PHYREG 0x1f 80aa608ff9Sderaadt #define MOS_PHYSTS_READY 0x40 81aa608ff9Sderaadt #define MOS_PHYSTS_PENDING 0x80 82aa608ff9Sderaadt 83aa608ff9Sderaadt #define MOS_CTL_RX_PROMISC 0x01 84aa608ff9Sderaadt #define MOS_CTL_ALLMULTI 0x02 85aa608ff9Sderaadt #define MOS_CTL_SLEEP 0x04 86aa608ff9Sderaadt #define MOS_CTL_TX_ENB 0x08 87aa608ff9Sderaadt /* 88aa608ff9Sderaadt * The documentation calls this bit 'reserved', but in the FreeBSD driver 89aa608ff9Sderaadt * provided by the vendor, this enables the receiver. 90aa608ff9Sderaadt */ 91aa608ff9Sderaadt #define MOS_CTL_RX_ENB 0x10 92aa608ff9Sderaadt #define MOS_CTL_FDX_ENB 0x20 93aa608ff9Sderaadt /* 0 = 10 Mbps, 1 = 100 Mbps */ 94aa608ff9Sderaadt #define MOS_CTL_SPEEDSEL 0x40 95aa608ff9Sderaadt /* 0 = PHY controls speed/duplex mode, 1 = bridge controls speed/duplex mode */ 96aa608ff9Sderaadt #define MOS_CTL_BS_ENB 0x80 97aa608ff9Sderaadt 98cbaf842eSderaadt #define MOS_RXSTS_SHORT_FRAME 0x01 99cbaf842eSderaadt #define MOS_RXSTS_LENGTH_ERROR 0x02 100cbaf842eSderaadt #define MOS_RXSTS_ALIGN_ERROR 0x04 101cbaf842eSderaadt #define MOS_RXSTS_CRC_ERROR 0x08 102cbaf842eSderaadt #define MOS_RXSTS_LARGE_FRAME 0x10 103cbaf842eSderaadt #define MOS_RXSTS_VALID 0x20 104cbaf842eSderaadt /* 105cbaf842eSderaadt * The EtherType field of an Ethernet frame can contain values other than 106cbaf842eSderaadt * the frame length, hence length errors are ignored. 107cbaf842eSderaadt */ 108cbaf842eSderaadt #define MOS_RXSTS_MASK 0x3d 109cbaf842eSderaadt 110aa608ff9Sderaadt #define MOS_PAUSE_TRHD_DEFAULT 0 111aa608ff9Sderaadt #define MOS_PAUSE_REWRITES 3 112aa608ff9Sderaadt 113aa608ff9Sderaadt #define MOS_TIMEOUT 1000 114aa608ff9Sderaadt 115aa608ff9Sderaadt #define MOS_RX_LIST_CNT 1 116aa608ff9Sderaadt #define MOS_TX_LIST_CNT 1 117aa608ff9Sderaadt 118cbaf842eSderaadt /* Maximum size of a fast ethernet frame plus one byte for the status */ 119cbaf842eSderaadt #define MOS_BUFSZ (ETHER_MAX_LEN+1) 120aa608ff9Sderaadt 121aa608ff9Sderaadt /* 122aa608ff9Sderaadt * USB endpoints. 123aa608ff9Sderaadt */ 124aa608ff9Sderaadt #define MOS_ENDPT_RX 0 125aa608ff9Sderaadt #define MOS_ENDPT_TX 1 126aa608ff9Sderaadt #define MOS_ENDPT_INTR 2 127aa608ff9Sderaadt #define MOS_ENDPT_MAX 3 128aa608ff9Sderaadt 129aa608ff9Sderaadt /* 130aa608ff9Sderaadt * USB vendor requests. 131aa608ff9Sderaadt */ 132aa608ff9Sderaadt #define MOS_UR_READREG 0x0e 133aa608ff9Sderaadt #define MOS_UR_WRITEREG 0x0d 134aa608ff9Sderaadt 135aa608ff9Sderaadt #define MOS_CONFIG_NO 1 136aa608ff9Sderaadt #define MOS_IFACE_IDX 0 137aa608ff9Sderaadt 138aa608ff9Sderaadt struct mos_type { 139aa608ff9Sderaadt struct usb_devno mos_dev; 140aa608ff9Sderaadt u_int16_t mos_flags; 141aa608ff9Sderaadt #define MCS7730 0x0001 /* MCS7730 */ 142aa608ff9Sderaadt #define MCS7830 0x0002 /* MCS7830 */ 1437d0d904eSjsg #define MCS7832 0x0004 /* MCS7832 */ 144aa608ff9Sderaadt }; 145aa608ff9Sderaadt 146aa608ff9Sderaadt #define MOS_INC(x, y) (x) = (x + 1) % y 147aa608ff9Sderaadt 148aa608ff9Sderaadt struct mos_softc; 149aa608ff9Sderaadt 150aa608ff9Sderaadt struct mos_chain { 151aa608ff9Sderaadt struct mos_softc *mos_sc; 152*ab0b1be7Smglocker struct usbd_xfer *mos_xfer; 153aa608ff9Sderaadt char *mos_buf; 154aa608ff9Sderaadt struct mbuf *mos_mbuf; 155aa608ff9Sderaadt int mos_accum; 156aa608ff9Sderaadt int mos_idx; 157aa608ff9Sderaadt }; 158aa608ff9Sderaadt 159aa608ff9Sderaadt struct mos_cdata { 160aa608ff9Sderaadt struct mos_chain mos_tx_chain[MOS_TX_LIST_CNT]; 161aa608ff9Sderaadt struct mos_chain mos_rx_chain[MOS_RX_LIST_CNT]; 162aa608ff9Sderaadt int mos_tx_prod; 163aa608ff9Sderaadt int mos_tx_cons; 164aa608ff9Sderaadt int mos_tx_cnt; 165aa608ff9Sderaadt int mos_rx_prod; 166aa608ff9Sderaadt }; 167aa608ff9Sderaadt 168aa608ff9Sderaadt struct mos_softc { 169aa608ff9Sderaadt struct device mos_dev; 170aa608ff9Sderaadt #define GET_MII(sc) (&(sc)->mos_mii) 171aa608ff9Sderaadt struct arpcom arpcom; 172aa608ff9Sderaadt #define GET_IFP(sc) (&(sc)->arpcom.ac_if) 173aa608ff9Sderaadt struct mii_data mos_mii; 174*ab0b1be7Smglocker struct usbd_device *mos_udev; 175*ab0b1be7Smglocker struct usbd_interface *mos_iface; 176aa608ff9Sderaadt 177aa608ff9Sderaadt u_int16_t mos_flags; 178aa608ff9Sderaadt 179aa608ff9Sderaadt int mos_ed[MOS_ENDPT_MAX]; 180*ab0b1be7Smglocker struct usbd_pipe *mos_ep[MOS_ENDPT_MAX]; 181aa608ff9Sderaadt int mos_unit; 182aa608ff9Sderaadt struct mos_cdata mos_cdata; 183aa608ff9Sderaadt struct timeout mos_stat_ch; 184aa608ff9Sderaadt 185aa608ff9Sderaadt int mos_refcnt; 186aa608ff9Sderaadt 187aa608ff9Sderaadt int mos_link; 188aa608ff9Sderaadt unsigned char mos_ipgs[2]; 189aa608ff9Sderaadt unsigned char mos_phyaddrs[2]; 190aa608ff9Sderaadt struct timeval mos_rx_notice; 191aa608ff9Sderaadt 192aa608ff9Sderaadt u_int16_t mos_tspeed; 193aa608ff9Sderaadt u_int16_t mos_maxpacket; 194aa608ff9Sderaadt 195aa608ff9Sderaadt struct ifmedia mos_ifmedia; 196aa608ff9Sderaadt 197aa608ff9Sderaadt struct usb_task mos_tick_task; 198aa608ff9Sderaadt struct usb_task mos_stop_task; 199aa608ff9Sderaadt 200aa608ff9Sderaadt struct rwlock mos_mii_lock; 201aa608ff9Sderaadt 202aa608ff9Sderaadt u_int mos_bufsz; 203aa608ff9Sderaadt }; 204aa608ff9Sderaadt 205