if_ruereg.h revision 188412
1198092Srdivacky/*- 2198092Srdivacky * Copyright (c) 2001-2003, Shunsuke Akiyama <akiyama@FreeBSD.org>. 3198092Srdivacky * All rights reserved. 4198092Srdivacky * 5198092Srdivacky * Redistribution and use in source and binary forms, with or without 6198092Srdivacky * modification, are permitted provided that the following conditions 7198092Srdivacky * are met: 8198092Srdivacky * 1. Redistributions of source code must retain the above copyright 9198092Srdivacky * notice, this list of conditions and the following disclaimer. 10198092Srdivacky * 2. Redistributions in binary form must reproduce the above copyright 11198092Srdivacky * notice, this list of conditions and the following disclaimer in the 12198092Srdivacky * documentation and/or other materials provided with the distribution. 13198092Srdivacky * 14198092Srdivacky * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15198092Srdivacky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16199482Srdivacky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17198893Srdivacky * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18198893Srdivacky * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19198092Srdivacky * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20198092Srdivacky * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21198092Srdivacky * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22198092Srdivacky * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23198092Srdivacky * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24198092Srdivacky * SUCH DAMAGE. 25198092Srdivacky * 26198092Srdivacky * $FreeBSD: head/sys/dev/usb2/ethernet/if_ruereg.h 188412 2009-02-09 22:02:38Z thompsa $ 27198092Srdivacky */ 28198092Srdivacky 29198092Srdivacky#define RUE_CONFIG_IDX 0 /* config number 1 */ 30198092Srdivacky#define RUE_IFACE_IDX 0 31198092Srdivacky 32198092Srdivacky#define RUE_INTR_PKTLEN 0x8 33198092Srdivacky 34198092Srdivacky#define RUE_TIMEOUT 50 35198092Srdivacky#define RUE_MIN_FRAMELEN 60 36198092Srdivacky 37198092Srdivacky/* Registers. */ 38198092Srdivacky#define RUE_IDR0 0x0120 39198092Srdivacky#define RUE_IDR1 0x0121 40198092Srdivacky#define RUE_IDR2 0x0122 41198092Srdivacky#define RUE_IDR3 0x0123 42198092Srdivacky#define RUE_IDR4 0x0124 43198092Srdivacky#define RUE_IDR5 0x0125 44198092Srdivacky 45198092Srdivacky#define RUE_MAR0 0x0126 46198092Srdivacky#define RUE_MAR1 0x0127 47198092Srdivacky#define RUE_MAR2 0x0128 48200583Srdivacky#define RUE_MAR3 0x0129 49200583Srdivacky#define RUE_MAR4 0x012A 50200583Srdivacky#define RUE_MAR5 0x012B 51200583Srdivacky#define RUE_MAR6 0x012C 52200583Srdivacky#define RUE_MAR7 0x012D 53200583Srdivacky 54200583Srdivacky#define RUE_CR 0x012E /* B, R/W */ 55200583Srdivacky#define RUE_CR_SOFT_RST 0x10 56200583Srdivacky#define RUE_CR_RE 0x08 57200583Srdivacky#define RUE_CR_TE 0x04 58200583Srdivacky#define RUE_CR_EP3CLREN 0x02 59200583Srdivacky 60200583Srdivacky#define RUE_TCR 0x012F /* B, R/W */ 61200583Srdivacky#define RUE_TCR_TXRR1 0x80 62200583Srdivacky#define RUE_TCR_TXRR0 0x40 63200583Srdivacky#define RUE_TCR_IFG1 0x10 64200583Srdivacky#define RUE_TCR_IFG0 0x08 65200583Srdivacky#define RUE_TCR_NOCRC 0x01 66200583Srdivacky#define RUE_TCR_CONFIG (RUE_TCR_TXRR1 | RUE_TCR_TXRR0 | \ 67200583Srdivacky RUE_TCR_IFG1 | RUE_TCR_IFG0) 68200583Srdivacky 69200583Srdivacky#define RUE_RCR 0x0130 /* W, R/W */ 70200583Srdivacky#define RUE_RCR_TAIL 0x80 71200583Srdivacky#define RUE_RCR_AER 0x40 72200583Srdivacky#define RUE_RCR_AR 0x20 73200583Srdivacky#define RUE_RCR_AM 0x10 74200583Srdivacky#define RUE_RCR_AB 0x08 75200583Srdivacky#define RUE_RCR_AD 0x04 76200583Srdivacky#define RUE_RCR_AAM 0x02 77200583Srdivacky#define RUE_RCR_AAP 0x01 78200583Srdivacky#define RUE_RCR_CONFIG (RUE_RCR_TAIL | RUE_RCR_AD) 79200583Srdivacky 80200583Srdivacky#define RUE_TSR 0x0132 81200583Srdivacky#define RUE_RSR 0x0133 82200583Srdivacky#define RUE_CON0 0x0135 83200583Srdivacky#define RUE_CON1 0x0136 84200583Srdivacky#define RUE_MSR 0x0137 85200583Srdivacky#define RUE_PHYADD 0x0138 86200583Srdivacky#define RUE_PHYDAT 0x0139 87200583Srdivacky 88200583Srdivacky#define RUE_PHYCNT 0x013B /* B, R/W */ 89200583Srdivacky#define RUE_PHYCNT_PHYOWN 0x40 90200583Srdivacky#define RUE_PHYCNT_RWCR 0x20 91200583Srdivacky 92200583Srdivacky#define RUE_GPPC 0x013D 93200583Srdivacky#define RUE_WAKECNT 0x013E 94200583Srdivacky 95200583Srdivacky#define RUE_BMCR 0x0140 96200583Srdivacky#define RUE_BMCR_SPD_SET 0x2000 97200583Srdivacky#define RUE_BMCR_DUPLEX 0x0100 98200583Srdivacky 99200583Srdivacky#define RUE_BMSR 0x0142 100200583Srdivacky 101200583Srdivacky#define RUE_ANAR 0x0144 /* W, R/W */ 102198092Srdivacky#define RUE_ANAR_PAUSE 0x0400 103198092Srdivacky 104198092Srdivacky#define RUE_ANLP 0x0146 /* W, R/O */ 105200583Srdivacky#define RUE_ANLP_PAUSE 0x0400 106198092Srdivacky 107198092Srdivacky#define RUE_AER 0x0148 108198092Srdivacky 109198092Srdivacky#define RUE_NWAYT 0x014A 110198092Srdivacky#define RUE_CSCR 0x014C 111198092Srdivacky 112198092Srdivacky#define RUE_CRC0 0x014E 113198092Srdivacky#define RUE_CRC1 0x0150 114198092Srdivacky#define RUE_CRC2 0x0152 115198092Srdivacky#define RUE_CRC3 0x0154 116198092Srdivacky#define RUE_CRC4 0x0156 117198092Srdivacky 118198092Srdivacky#define RUE_BYTEMASK0 0x0158 119198092Srdivacky#define RUE_BYTEMASK1 0x0160 120198092Srdivacky#define RUE_BYTEMASK2 0x0168 121198092Srdivacky#define RUE_BYTEMASK3 0x0170 122198092Srdivacky#define RUE_BYTEMASK4 0x0178 123198092Srdivacky 124198092Srdivacky#define RUE_PHY1 0x0180 125198092Srdivacky#define RUE_PHY2 0x0184 126198092Srdivacky 127198092Srdivacky#define RUE_TW1 0x0186 128198092Srdivacky 129198092Srdivacky#define RUE_REG_MIN 0x0120 130198092Srdivacky#define RUE_REG_MAX 0x0189 131198092Srdivacky 132198092Srdivacky/* EEPROM address declarations. */ 133198092Srdivacky#define RUE_EEPROM_BASE 0x1200 134198092Srdivacky#define RUE_EEPROM_IDR0 (RUE_EEPROM_BASE + 0x02) 135198092Srdivacky#define RUE_EEPROM_IDR1 (RUE_EEPROM_BASE + 0x03) 136198092Srdivacky#define RUE_EEPROM_IDR2 (RUE_EEPROM_BASE + 0x03) 137198092Srdivacky#define RUE_EEPROM_IDR3 (RUE_EEPROM_BASE + 0x03) 138198092Srdivacky#define RUE_EEPROM_IDR4 (RUE_EEPROM_BASE + 0x03) 139198092Srdivacky#define RUE_EEPROM_IDR5 (RUE_EEPROM_BASE + 0x03) 140198092Srdivacky#define RUE_EEPROM_INTERVAL (RUE_EEPROM_BASE + 0x17) 141198092Srdivacky 142198092Srdivacky#define RUE_RXSTAT_VALID (0x01 << 12) 143198092Srdivacky#define RUE_RXSTAT_RUNT (0x02 << 12) 144198092Srdivacky#define RUE_RXSTAT_PMATCH (0x04 << 12) 145198092Srdivacky#define RUE_RXSTAT_MCAST (0x08 << 12) 146198092Srdivacky 147198092Srdivacky#define GET_MII(sc) usb2_ether_getmii(&(sc)->sc_ue) 148198092Srdivacky 149198092Srdivackystruct rue_intrpkt { 150198092Srdivacky uint8_t rue_tsr; 151199482Srdivacky uint8_t rue_rsr; 152199482Srdivacky uint8_t rue_gep_msr; 153199482Srdivacky uint8_t rue_waksr; 154198092Srdivacky uint8_t rue_txok_cnt; 155198092Srdivacky uint8_t rue_rxlost_cnt; 156198092Srdivacky uint8_t rue_crcerr_cnt; 157198092Srdivacky uint8_t rue_col_cnt; 158198092Srdivacky} __packed; 159198092Srdivacky 160198092Srdivackystruct rue_type { 161198092Srdivacky uint16_t rue_vid; 162198092Srdivacky uint16_t rue_did; 163198092Srdivacky}; 164198092Srdivacky 165198092Srdivackyenum { 166198092Srdivacky RUE_BULK_DT_WR, 167198092Srdivacky RUE_BULK_DT_RD, 168198092Srdivacky RUE_INTR_DT_RD, 169198092Srdivacky RUE_N_TRANSFER, 170198092Srdivacky}; 171198092Srdivacky 172198092Srdivackystruct rue_softc { 173200583Srdivacky struct usb2_ether sc_ue; 174200583Srdivacky struct mtx sc_mtx; 175200583Srdivacky struct usb2_xfer *sc_xfer[RUE_N_TRANSFER]; 176200583Srdivacky 177200583Srdivacky int sc_flags; 178200583Srdivacky#define RUE_FLAG_LINK 0x0001 179200583Srdivacky}; 180200583Srdivacky 181200583Srdivacky#define RUE_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx) 182200583Srdivacky#define RUE_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx) 183200583Srdivacky#define RUE_LOCK_ASSERT(_sc, t) mtx_assert(&(_sc)->sc_mtx, t) 184200583Srdivacky