1 /* $NetBSD: rtl81x9var.h,v 1.10 2001/07/25 09:57:31 kanaoka Exp $ */ 2 3 /* 4 * Copyright (c) 1997, 1998 5 * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by Bill Paul. 18 * 4. Neither the name of the author nor the names of any co-contributors 19 * may be used to endorse or promote products derived from this software 20 * without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND 23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD 26 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 32 * THE POSSIBILITY OF SUCH DAMAGE. 33 * 34 * FreeBSD Id: if_rlreg.h,v 1.9 1999/06/20 18:56:09 wpaul Exp 35 */ 36 37 #define RTK_ETHER_ALIGN 2 38 #define RTK_RXSTAT_LEN 4 39 40 struct rtk_type { 41 u_int16_t rtk_vid; 42 u_int16_t rtk_did; 43 const char *rtk_name; 44 int rtk_type; 45 }; 46 47 struct rtk_mii_frame { 48 u_int8_t mii_stdelim; 49 u_int8_t mii_opcode; 50 u_int8_t mii_phyaddr; 51 u_int8_t mii_regaddr; 52 u_int8_t mii_turnaround; 53 u_int16_t mii_data; 54 }; 55 56 /* 57 * MII constants 58 */ 59 #define RTK_MII_STARTDELIM 0x01 60 #define RTK_MII_READOP 0x02 61 #define RTK_MII_WRITEOP 0x01 62 #define RTK_MII_TURNAROUND 0x02 63 64 #define RTK_8129 1 65 #define RTK_8139 2 66 67 struct rtk_tx_desc { 68 SIMPLEQ_ENTRY(rtk_tx_desc) txd_q; 69 struct mbuf *txd_mbuf; 70 bus_dmamap_t txd_dmamap; 71 bus_addr_t txd_txaddr; 72 bus_addr_t txd_txstat; 73 }; 74 75 struct rtk_softc { 76 struct device sc_dev; /* generic device structures */ 77 struct ethercom ethercom; /* interface info */ 78 struct mii_data mii; 79 struct callout rtk_tick_ch; /* tick callout */ 80 bus_space_handle_t rtk_bhandle; /* bus space handle */ 81 bus_space_tag_t rtk_btag; /* bus space tag */ 82 int rtk_type; 83 bus_dma_tag_t sc_dmat; 84 bus_dma_segment_t sc_dmaseg; 85 int sc_dmanseg; 86 87 bus_dmamap_t recv_dmamap; 88 caddr_t rtk_rx_buf; 89 90 struct rtk_tx_desc rtk_tx_descs[RTK_TX_LIST_CNT]; 91 SIMPLEQ_HEAD(, rtk_tx_desc) rtk_tx_free; 92 SIMPLEQ_HEAD(, rtk_tx_desc) rtk_tx_dirty; 93 94 int sc_flags; /* misc flags */ 95 int sc_txthresh; /* Early tx threshold */ 96 97 void *sc_sdhook; /* shutdown hook */ 98 void *sc_powerhook; /* power management hook */ 99 100 /* Power management hooks. */ 101 int (*sc_enable) __P((struct rtk_softc *)); 102 void (*sc_disable) __P((struct rtk_softc *)); 103 void (*sc_power) __P((struct rtk_softc *, int)); 104 }; 105 106 #define RTK_ATTACHED 0x00000001 /* attach has succeeded */ 107 #define RTK_ENABLED 0x00000002 /* chip is enabled */ 108 109 #define RTK_IS_ENABLED(sc) ((sc)->sc_flags & RTK_ENABLED) 110 #define RTK_TX_THRESH(sc) (((sc)->sc_txthresh << 16) & 0x003F0000) 111 112 #define TXTH_256 8 113 #define TXTH_MAX 48 114 115 /* 116 * register space access macros 117 */ 118 #define CSR_WRITE_4(sc, reg, val) \ 119 bus_space_write_4(sc->rtk_btag, sc->rtk_bhandle, reg, val) 120 #define CSR_WRITE_2(sc, reg, val) \ 121 bus_space_write_2(sc->rtk_btag, sc->rtk_bhandle, reg, val) 122 #define CSR_WRITE_1(sc, reg, val) \ 123 bus_space_write_1(sc->rtk_btag, sc->rtk_bhandle, reg, val) 124 125 #define CSR_READ_4(sc, reg) \ 126 bus_space_read_4(sc->rtk_btag, sc->rtk_bhandle, reg) 127 #define CSR_READ_2(sc, reg) \ 128 bus_space_read_2(sc->rtk_btag, sc->rtk_bhandle, reg) 129 #define CSR_READ_1(sc, reg) \ 130 bus_space_read_1(sc->rtk_btag, sc->rtk_bhandle, reg) 131 132 #define RTK_TIMEOUT 1000 133 134 /* 135 * PCI low memory base and low I/O base register, and 136 * other PCI registers. 137 */ 138 139 #define RTK_PCI_LOIO 0x10 140 #define RTK_PCI_LOMEM 0x14 141 142 #define RTK_PSTATE_MASK 0x0003 143 #define RTK_PSTATE_D0 0x0000 144 #define RTK_PSTATE_D1 0x0002 145 #define RTK_PSTATE_D2 0x0002 146 #define RTK_PSTATE_D3 0x0003 147 #define RTK_PME_EN 0x0010 148 #define RTK_PME_STATUS 0x8000 149 150 #ifdef _KERNEL 151 void rtk_attach __P((struct rtk_softc *)); 152 int rtk_detach __P((struct rtk_softc *)); 153 int rtk_activate __P((struct device *, enum devact)); 154 int rtk_intr __P((void *)); 155 #endif /* _KERNEL */ 156