1 1.2 bouyer /* $NetBSD: if_vtereg.h,v 1.2 2011/04/28 17:32:48 bouyer Exp $ */ 2 1.1 bouyer 3 1.1 bouyer /*- 4 1.1 bouyer * Copyright (c) 2010, Pyun YongHyeon <yongari (at) FreeBSD.org> 5 1.1 bouyer * All rights reserved. 6 1.1 bouyer * 7 1.1 bouyer * Redistribution and use in source and binary forms, with or without 8 1.1 bouyer * modification, are permitted provided that the following conditions 9 1.1 bouyer * are met: 10 1.1 bouyer * 1. Redistributions of source code must retain the above copyright 11 1.1 bouyer * notice unmodified, this list of conditions, and the following 12 1.1 bouyer * disclaimer. 13 1.1 bouyer * 2. Redistributions in binary form must reproduce the above copyright 14 1.1 bouyer * notice, this list of conditions and the following disclaimer in the 15 1.1 bouyer * documentation and/or other materials provided with the distribution. 16 1.1 bouyer * 17 1.1 bouyer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 1.1 bouyer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 1.1 bouyer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 1.1 bouyer * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 1.1 bouyer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 1.1 bouyer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 1.1 bouyer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 1.1 bouyer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 1.1 bouyer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 1.1 bouyer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 1.1 bouyer * SUCH DAMAGE. 28 1.1 bouyer * 29 1.1 bouyer * FreeBSD: src/sys/dev/vte/if_vtereg.h,v 1.1 2010/12/31 00:21:41 yongari Exp 30 1.1 bouyer */ 31 1.1 bouyer 32 1.1 bouyer #ifndef _IF_VTEREG_H 33 1.1 bouyer #define _IF_VTEREG_H 34 1.1 bouyer 35 1.1 bouyer /* registers are mapped in i/o or memory space */ 36 1.1 bouyer #define VTE_PCI_BIO 0x10 37 1.1 bouyer #define VTE_PCI_BMEM 0x14 38 1.1 bouyer 39 1.1 bouyer /* MAC control register 0 */ 40 1.1 bouyer #define VTE_MCR0 0x00 41 1.1 bouyer #define MCR0_ACCPT_ERR 0x0001 42 1.1 bouyer #define MCR0_RX_ENB 0x0002 43 1.1 bouyer #define MCR0_ACCPT_RUNT 0x0004 44 1.1 bouyer #define MCR0_ACCPT_LONG_PKT 0x0008 45 1.1 bouyer #define MCR0_ACCPT_DRIBBLE 0x0010 46 1.1 bouyer #define MCR0_PROMISC 0x0020 47 1.2 bouyer #define MCR0_BROADCAST_DIS 0x0040 48 1.1 bouyer #define MCR0_RX_EARLY_INTR 0x0080 49 1.1 bouyer #define MCR0_MULTICAST 0x0100 50 1.1 bouyer #define MCR0_FC_ENB 0x0200 51 1.1 bouyer #define MCR0_TX_ENB 0x1000 52 1.1 bouyer #define MCR0_TX_EARLY_INTR 0x4000 53 1.1 bouyer #define MCR0_FULL_DUPLEX 0x8000 54 1.1 bouyer 55 1.1 bouyer /* MAC control register 1 */ 56 1.1 bouyer #define VTE_MCR1 0x04 57 1.1 bouyer #define MCR1_MAC_RESET 0x0001 58 1.1 bouyer #define MCR1_MAC_LOOPBACK 0x0002 59 1.1 bouyer #define MCR1_EXCESS_COL_RETRANS_DIS 0x0004 60 1.1 bouyer #define MCR1_AUTO_CHG_DUPLEX 0x0008 61 1.1 bouyer #define MCR1_PKT_LENGTH_1518 0x0010 62 1.1 bouyer #define MCR1_PKT_LENGTH_1522 0x0020 63 1.1 bouyer #define MCR1_PKT_LENGTH_1534 0x0030 64 1.1 bouyer #define MCR1_PKT_LENGTH_1537 0x0000 65 1.1 bouyer #define MCR1_EARLY_INTR_THRESH_1129 0x0000 66 1.1 bouyer #define MCR1_EARLY_INTR_THRESH_1257 0x0040 67 1.1 bouyer #define MCR1_EARLY_INTR_THRESH_1385 0x0080 68 1.1 bouyer #define MCR1_EARLY_INTR_THRESH_1513 0x00C0 69 1.1 bouyer #define MCR1_EXCESS_COL_RETRY_16 0x0000 70 1.1 bouyer #define MCR1_EXCESS_COL_RETRY_32 0x0100 71 1.1 bouyer #define MCR1_FC_ACTIVE 0x0200 72 1.1 bouyer #define MCR1_RX_DESC_HASH_IDX 0x4000 73 1.1 bouyer #define MCR1_RX_UNICAST_HASH 0x8000 74 1.1 bouyer 75 1.1 bouyer #define MCR1_PKT_LENGTH_MASK 0x0030 76 1.1 bouyer #define MCR1_EARLY_INTR_THRESH_MASK 0x00C0 77 1.1 bouyer 78 1.1 bouyer /* MAC bus control register */ 79 1.1 bouyer #define VTE_MBCR 0x08 80 1.1 bouyer #define MBCR_FIFO_XFER_LENGTH_4 0x0000 81 1.1 bouyer #define MBCR_FIFO_XFER_LENGTH_8 0x0001 82 1.1 bouyer #define MBCR_FIFO_XFER_LENGTH_16 0x0002 83 1.1 bouyer #define MBCR_FIFO_XFER_LENGTH_32 0x0003 84 1.1 bouyer #define MBCR_TX_FIFO_THRESH_16 0x0000 85 1.1 bouyer #define MBCR_TX_FIFO_THRESH_32 0x0004 86 1.1 bouyer #define MBCR_TX_FIFO_THRESH_64 0x0008 87 1.1 bouyer #define MBCR_TX_FIFO_THRESH_96 0x000C 88 1.1 bouyer #define MBCR_RX_FIFO_THRESH_8 0x0000 89 1.1 bouyer #define MBCR_RX_FIFO_THRESH_16 0x0010 90 1.1 bouyer #define MBCR_RX_FIFO_THRESH_32 0x0020 91 1.1 bouyer #define MBCR_RX_FIFO_THRESH_64 0x0030 92 1.1 bouyer #define MBCR_SDRAM_BUS_REQ_TIMER_MASK 0x1F00 93 1.1 bouyer #define MBCR_SDRAM_BUS_REQ_TIMER_SHIFT 8 94 1.1 bouyer #define MBCR_SDRAM_BUS_REQ_TIMER_DEFAULT 0x1F00 95 1.1 bouyer 96 1.1 bouyer /* MAC TX interrupt control register */ 97 1.1 bouyer #define VTE_MTICR 0x0C 98 1.1 bouyer #define MTICR_TX_TIMER_MASK 0x001F 99 1.1 bouyer #define MTICR_TX_BUNDLE_MASK 0x0F00 100 1.1 bouyer #define VTE_IM_TX_TIMER_DEFAULT 0x7F 101 1.1 bouyer #define VTE_IM_TX_BUNDLE_DEFAULT 15 102 1.1 bouyer 103 1.1 bouyer #define VTE_IM_TIMER_MIN 0 104 1.1 bouyer #define VTE_IM_TIMER_MAX 82 105 1.1 bouyer #define VTE_IM_TIMER_MASK 0x001F 106 1.1 bouyer #define VTE_IM_TIMER_SHIFT 0 107 1.1 bouyer #define VTE_IM_BUNDLE_MIN 0 108 1.1 bouyer #define VTE_IM_BUNDLE_MAX 15 109 1.1 bouyer #define VTE_IM_BUNDLE_SHIFT 8 110 1.1 bouyer 111 1.1 bouyer /* MAC RX interrupt control register */ 112 1.1 bouyer #define VTE_MRICR 0x10 113 1.1 bouyer #define MRICR_RX_TIMER_MASK 0x001F 114 1.1 bouyer #define MRICR_RX_BUNDLE_MASK 0x0F00 115 1.1 bouyer #define VTE_IM_RX_TIMER_DEFAULT 0x7F 116 1.1 bouyer #define VTE_IM_RX_BUNDLE_DEFAULT 15 117 1.1 bouyer 118 1.1 bouyer /* MAC TX poll command register */ 119 1.1 bouyer #define VTE_TX_POLL 0x14 120 1.1 bouyer #define TX_POLL_START 0x0001 121 1.1 bouyer 122 1.1 bouyer /* MAC RX buffer size register */ 123 1.1 bouyer #define VTE_MRBSR 0x18 124 1.1 bouyer #define VTE_MRBSR_SIZE_MASK 0x03FF 125 1.1 bouyer 126 1.1 bouyer /* MAC RX descriptor control register */ 127 1.1 bouyer #define VTE_MRDCR 0x1A 128 1.1 bouyer #define VTE_MRDCR_RESIDUE_MASK 0x00FF 129 1.1 bouyer #define VTE_MRDCR_RX_PAUSE_THRESH_MASK 0xFF00 130 1.1 bouyer #define VTE_MRDCR_RX_PAUSE_THRESH_SHIFT 8 131 1.1 bouyer 132 1.1 bouyer /* MAC Last status register */ 133 1.1 bouyer #define VTE_MLSR 0x1C 134 1.1 bouyer #define MLSR_MULTICAST 0x0001 135 1.1 bouyer #define MLSR_BROADCAST 0x0002 136 1.1 bouyer #define MLSR_CRC_ERR 0x0004 137 1.1 bouyer #define MLSR_RUNT 0x0008 138 1.1 bouyer #define MLSR_LONG_PKT 0x0010 139 1.1 bouyer #define MLSR_TRUNC 0x0020 140 1.1 bouyer #define MLSR_DRIBBLE 0x0040 141 1.1 bouyer #define MLSR_PHY_ERR 0x0080 142 1.1 bouyer #define MLSR_TX_FIFO_UNDERRUN 0x0200 143 1.1 bouyer #define MLSR_RX_DESC_UNAVAIL 0x0400 144 1.1 bouyer #define MLSR_TX_EXCESS_COL 0x2000 145 1.1 bouyer #define MLSR_TX_LATE_COL 0x4000 146 1.1 bouyer #define MLSR_RX_FIFO_OVERRUN 0x8000 147 1.1 bouyer 148 1.1 bouyer /* MAC MDIO control register */ 149 1.1 bouyer #define VTE_MMDIO 0x20 150 1.1 bouyer #define MMDIO_REG_ADDR_MASK 0x001F 151 1.1 bouyer #define MMDIO_PHY_ADDR_MASK 0x1F00 152 1.1 bouyer #define MMDIO_READ 0x2000 153 1.1 bouyer #define MMDIO_WRITE 0x4000 154 1.1 bouyer #define MMDIO_REG_ADDR_SHIFT 0 155 1.1 bouyer #define MMDIO_PHY_ADDR_SHIFT 8 156 1.1 bouyer 157 1.1 bouyer /* MAC MDIO read data register */ 158 1.1 bouyer #define VTE_MMRD 0x24 159 1.1 bouyer #define MMRD_DATA_MASK 0xFFFF 160 1.1 bouyer 161 1.1 bouyer /* MAC MDIO write data register */ 162 1.1 bouyer #define VTE_MMWD 0x28 163 1.1 bouyer #define MMWD_DATA_MASK 0xFFFF 164 1.1 bouyer 165 1.1 bouyer /* MAC TX descriptor start address 0 */ 166 1.1 bouyer #define VTE_MTDSA0 0x2C 167 1.1 bouyer 168 1.1 bouyer /* MAC TX descriptor start address 1 */ 169 1.1 bouyer #define VTE_MTDSA1 0x30 170 1.1 bouyer 171 1.1 bouyer /* MAC RX descriptor start address 0 */ 172 1.1 bouyer #define VTE_MRDSA0 0x34 173 1.1 bouyer 174 1.1 bouyer /* MAC RX descriptor start address 1 */ 175 1.1 bouyer #define VTE_MRDSA1 0x38 176 1.1 bouyer 177 1.1 bouyer /* MAC Interrupt status register */ 178 1.1 bouyer #define VTE_MISR 0x3C 179 1.1 bouyer #define MISR_RX_DONE 0x0001 180 1.1 bouyer #define MISR_RX_DESC_UNAVAIL 0x0002 181 1.1 bouyer #define MISR_RX_FIFO_FULL 0x0004 182 1.1 bouyer #define MISR_RX_EARLY_INTR 0x0008 183 1.1 bouyer #define MISR_TX_DONE 0x0010 184 1.1 bouyer #define MISR_TX_EARLY_INTR 0x0080 185 1.1 bouyer #define MISR_EVENT_CNT_OFLOW 0x0100 186 1.1 bouyer #define MISR_PHY_MEDIA_CHG 0x0200 187 1.1 bouyer 188 1.1 bouyer /* MAC Interrupt enable register */ 189 1.1 bouyer #define VTE_MIER 0x40 190 1.1 bouyer 191 1.1 bouyer #define VTE_INTRS \ 192 1.1 bouyer (MISR_RX_DONE | MISR_RX_DESC_UNAVAIL | MISR_RX_FIFO_FULL | \ 193 1.1 bouyer MISR_TX_DONE | MISR_EVENT_CNT_OFLOW) 194 1.1 bouyer 195 1.1 bouyer /* MAC Event counter interrupt status register */ 196 1.1 bouyer #define VTE_MECISR 0x44 197 1.1 bouyer #define MECISR_EC_RX_DONE 0x0001 198 1.1 bouyer #define MECISR_EC_MULTICAST 0x0002 199 1.1 bouyer #define MECISR_EC_BROADCAST 0x0004 200 1.1 bouyer #define MECISR_EC_CRC_ERR 0x0008 201 1.1 bouyer #define MECISR_EC_RUNT 0x0010 202 1.1 bouyer #define MESCIR_EC_LONG_PKT 0x0020 203 1.1 bouyer #define MESCIR_EC_RX_DESC_UNAVAIL 0x0080 204 1.1 bouyer #define MESCIR_EC_RX_FIFO_FULL 0x0100 205 1.1 bouyer #define MESCIR_EC_TX_DONE 0x0200 206 1.1 bouyer #define MESCIR_EC_LATE_COL 0x0400 207 1.1 bouyer #define MESCIR_EC_TX_UNDERRUN 0x0800 208 1.1 bouyer 209 1.1 bouyer /* MAC Event counter interrupt enable register */ 210 1.1 bouyer #define VTE_MECIER 0x48 211 1.1 bouyer #define VTE_MECIER_INTRS \ 212 1.1 bouyer (MECISR_EC_RX_DONE | MECISR_EC_MULTICAST | MECISR_EC_BROADCAST | \ 213 1.1 bouyer MECISR_EC_CRC_ERR | MECISR_EC_RUNT | MESCIR_EC_LONG_PKT | \ 214 1.1 bouyer MESCIR_EC_RX_DESC_UNAVAIL | MESCIR_EC_RX_FIFO_FULL | \ 215 1.1 bouyer MESCIR_EC_TX_DONE | MESCIR_EC_LATE_COL | MESCIR_EC_TX_UNDERRUN) 216 1.1 bouyer 217 1.1 bouyer #define VTE_CNT_RX_DONE 0x50 218 1.1 bouyer 219 1.1 bouyer #define VTE_CNT_MECNT0 0x52 220 1.1 bouyer 221 1.1 bouyer #define VTE_CNT_MECNT1 0x54 222 1.1 bouyer 223 1.1 bouyer #define VTE_CNT_MECNT2 0x56 224 1.1 bouyer 225 1.1 bouyer #define VTE_CNT_MECNT3 0x58 226 1.1 bouyer 227 1.1 bouyer #define VTE_CNT_TX_DONE 0x5A 228 1.1 bouyer 229 1.1 bouyer #define VTE_CNT_MECNT4 0x5C 230 1.1 bouyer 231 1.1 bouyer #define VTE_CNT_PAUSE 0x5E 232 1.1 bouyer 233 1.1 bouyer /* MAC Hash table register */ 234 1.1 bouyer #define VTE_MAR0 0x60 235 1.1 bouyer #define VTE_MAR1 0x62 236 1.1 bouyer #define VTE_MAR2 0x64 237 1.1 bouyer #define VTE_MAR3 0x66 238 1.1 bouyer 239 1.1 bouyer /* MAC station address and multicast address register */ 240 1.1 bouyer #define VTE_MID0L 0x68 241 1.1 bouyer #define VTE_MID0M 0x6A 242 1.1 bouyer #define VTE_MID0H 0x6C 243 1.1 bouyer #define VTE_MID1L 0x70 244 1.1 bouyer #define VTE_MID1M 0x72 245 1.1 bouyer #define VTE_MID1H 0x74 246 1.1 bouyer #define VTE_MID2L 0x78 247 1.1 bouyer #define VTE_MID2M 0x7A 248 1.1 bouyer #define VTE_MID2H 0x7C 249 1.1 bouyer #define VTE_MID3L 0x80 250 1.1 bouyer #define VTE_MID3M 0x82 251 1.1 bouyer #define VTE_MID3H 0x84 252 1.1 bouyer 253 1.1 bouyer #define VTE_RXFILTER_PEEFECT_BASE VTE_MID1L 254 1.1 bouyer #define VTE_RXFILT_PERFECT_CNT 3 255 1.1 bouyer 256 1.1 bouyer /* MAC PHY status change configuration register */ 257 1.1 bouyer #define VTE_MPSCCR 0x88 258 1.1 bouyer #define MPSCCR_TIMER_DIVIDER_MASK 0x0007 259 1.1 bouyer #define MPSCCR_PHY_ADDR_MASK 0x1F00 260 1.1 bouyer #define MPSCCR_PHY_STS_CHG_ENB 0x8000 261 1.1 bouyer #define MPSCCR_PHY_ADDR_SHIFT 8 262 1.1 bouyer 263 1.1 bouyer /* MAC PHY status register2 */ 264 1.1 bouyer #define VTE_MPSR 0x8A 265 1.1 bouyer #define MPSR_LINK_UP 0x0001 266 1.1 bouyer #define MPSR_SPEED_100 0x0002 267 1.1 bouyer #define MPSR_FULL_DUPLEX 0x0004 268 1.1 bouyer 269 1.1 bouyer /* MAC Status machine(undocumented). */ 270 1.1 bouyer #define VTE_MACSM 0xAC 271 1.1 bouyer 272 1.1 bouyer /* MDC Speed control register */ 273 1.1 bouyer #define VTE_MDCSC 0xB6 274 1.1 bouyer #define MDCSC_DEFAULT 0x0030 275 1.1 bouyer 276 1.1 bouyer /* MAC Identifier and revision register */ 277 1.1 bouyer #define VTE_MACID_REV 0xBC 278 1.1 bouyer #define VTE_MACID_REV_MASK 0x00FF 279 1.1 bouyer #define VTE_MACID_MASK 0xFF00 280 1.1 bouyer #define VTE_MACID_REV_SHIFT 0 281 1.1 bouyer #define VTE_MACID_SHIFT 8 282 1.1 bouyer 283 1.1 bouyer /* MAC Identifier register */ 284 1.1 bouyer #define VTE_MACID 0xBE 285 1.1 bouyer 286 1.1 bouyer /* 287 1.1 bouyer * RX descriptor 288 1.1 bouyer * - Added one more uint16_t member to align it 4 on bytes boundary. 289 1.1 bouyer * This does not affect operation of controller since it includes 290 1.1 bouyer * next pointer address. 291 1.1 bouyer */ 292 1.1 bouyer struct vte_rx_desc { 293 1.1 bouyer uint16_t drst; 294 1.1 bouyer uint16_t drlen; 295 1.1 bouyer uint32_t drbp; 296 1.1 bouyer uint32_t drnp; 297 1.1 bouyer uint16_t hidx; 298 1.1 bouyer uint16_t rsvd2; 299 1.1 bouyer uint16_t rsvd3; 300 1.1 bouyer uint16_t __pad; /* Not actual descriptor member. */ 301 1.1 bouyer }; 302 1.1 bouyer 303 1.1 bouyer #define VTE_DRST_MID_MASK 0x0003 304 1.1 bouyer #define VTE_DRST_MID_HIT 0x0004 305 1.1 bouyer #define VTE_DRST_MULTICAST_HIT 0x0008 306 1.1 bouyer #define VTE_DRST_MULTICAST 0x0010 307 1.1 bouyer #define VTE_DRST_BROADCAST 0x0020 308 1.1 bouyer #define VTE_DRST_CRC_ERR 0x0040 309 1.1 bouyer #define VTE_DRST_RUNT 0x0080 310 1.1 bouyer #define VTE_DRST_LONG 0x0100 311 1.1 bouyer #define VTE_DRST_TRUNC 0x0200 312 1.1 bouyer #define VTE_DRST_DRIBBLE 0x0400 313 1.1 bouyer #define VTE_DRST_PHY_ERR 0x0800 314 1.1 bouyer #define VTE_DRST_RX_OK 0x4000 315 1.1 bouyer #define VTE_DRST_RX_OWN 0x8000 316 1.1 bouyer 317 1.1 bouyer #define VTE_RX_LEN(x) ((x) & 0x7FF) 318 1.1 bouyer 319 1.1 bouyer #define VTE_RX_HIDX(x) ((x) & 0x3F) 320 1.1 bouyer 321 1.1 bouyer /* 322 1.1 bouyer * TX descriptor 323 1.1 bouyer * - Added one more uint32_t member to align it on 16 bytes boundary. 324 1.1 bouyer */ 325 1.1 bouyer struct vte_tx_desc { 326 1.1 bouyer uint16_t dtst; 327 1.1 bouyer uint16_t dtlen; 328 1.1 bouyer uint32_t dtbp; 329 1.1 bouyer uint32_t dtnp; 330 1.1 bouyer uint32_t __pad; /* Not actual descriptor member. */ 331 1.1 bouyer }; 332 1.1 bouyer 333 1.1 bouyer #define VTE_DTST_EXCESS_COL 0x0010 334 1.1 bouyer #define VTE_DTST_LATE_COL 0x0020 335 1.1 bouyer #define VTE_DTST_UNDERRUN 0x0040 336 1.1 bouyer #define VTE_DTST_NO_CRC 0x2000 337 1.1 bouyer #define VTE_DTST_TX_OK 0x4000 338 1.1 bouyer #define VTE_DTST_TX_OWN 0x8000 339 1.1 bouyer 340 1.1 bouyer #define VTE_TX_LEN(x) ((x) & 0x7FF) 341 1.1 bouyer 342 1.1 bouyer #endif /* _IF_VTEREG_H */ 343