if_argevar.h revision 201906
11849Swollman/*- 21849Swollman * Copyright (c) 2009, Oleksandr Tymoshenko 31849Swollman * All rights reserved. 41849Swollman * 51849Swollman * Redistribution and use in source and binary forms, with or without 61849Swollman * modification, are permitted provided that the following conditions 71849Swollman * are met: 81849Swollman * 1. Redistributions of source code must retain the above copyright 91849Swollman * notice unmodified, this list of conditions, and the following 101849Swollman * disclaimer. 111849Swollman * 2. Redistributions in binary form must reproduce the above copyright 121849Swollman * notice, this list of conditions and the following disclaimer in the 131849Swollman * documentation and/or other materials provided with the distribution. 141849Swollman * 151849Swollman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 161849Swollman * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 171849Swollman * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 181849Swollman * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 191849Swollman * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 201849Swollman * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 211849Swollman * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 221849Swollman * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 231849Swollman * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 241849Swollman * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 251849Swollman * SUCH DAMAGE. 261849Swollman */ 271849Swollman 281849Swollman#ifndef __IF_ARGEVAR_H__ 291849Swollman#define __IF_ARGEVAR_H__ 301849Swollman 3192999Sobrien#define ARGE_NPHY 32 3292999Sobrien#define ARGE_TX_RING_COUNT 128 331849Swollman#define ARGE_RX_RING_COUNT 128 341849Swollman#define ARGE_RX_DMA_SIZE ARGE_RX_RING_COUNT * sizeof(struct arge_desc) 3592999Sobrien#define ARGE_TX_DMA_SIZE ARGE_TX_RING_COUNT * sizeof(struct arge_desc) 365790Sdg#define ARGE_MAXFRAGS 8 3792999Sobrien#define ARGE_RING_ALIGN sizeof(struct arge_desc) 3892999Sobrien#define ARGE_RX_ALIGN sizeof(uint32_t) 3992999Sobrien#define ARGE_MAXFRAGS 8 4092999Sobrien#define ARGE_TX_RING_ADDR(sc, i) \ 411849Swollman ((sc)->arge_rdata.arge_tx_ring_paddr + sizeof(struct arge_desc) * (i)) 421849Swollman#define ARGE_RX_RING_ADDR(sc, i) \ 431849Swollman ((sc)->arge_rdata.arge_rx_ring_paddr + sizeof(struct arge_desc) * (i)) 443851Sbde#define ARGE_INC(x,y) (x) = (((x) + 1) % y) 453851Sbde 463851Sbde 473851Sbde#define ARGE_MII_TIMEOUT 1000 483851Sbde 493851Sbde#define ARGE_LOCK(_sc) mtx_lock(&(_sc)->arge_mtx) 503851Sbde#define ARGE_UNLOCK(_sc) mtx_unlock(&(_sc)->arge_mtx) 513851Sbde#define ARGE_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->arge_mtx, MA_OWNED) 523851Sbde 533851Sbde/* 543851Sbde * register space access macros 553851Sbde */ 5656345Sjasone#define ARGE_WRITE(sc, reg, val) do { \ 571849Swollman bus_write_4(sc->arge_res, (reg), (val)); \ 5851794Smarcel } while (0) 5951794Smarcel 601849Swollman#define ARGE_READ(sc, reg) bus_read_4(sc->arge_res, (reg)) 6115731Sjdp 6251794Smarcel#define ARGE_SET_BITS(sc, reg, bits) \ 6351794Smarcel ARGE_WRITE(sc, reg, ARGE_READ(sc, (reg)) | (bits)) 6451794Smarcel 6551794Smarcel#define ARGE_CLEAR_BITS(sc, reg, bits) \ 66287872Sdelphij ARGE_WRITE(sc, reg, ARGE_READ(sc, (reg)) & ~(bits)) 6751794Smarcel 6851794Smarcel/* 6915731Sjdp * MII registers access macros 701849Swollman */ 711849Swollman#define ARGE_MII_READ(reg) \ 721849Swollman *((volatile uint32_t *)MIPS_PHYS_TO_KSEG1((AR71XX_MII_BASE + reg))) 731849Swollman 741849Swollman#define ARGE_MII_WRITE(reg, val) \ 751849Swollman *((volatile uint32_t *)MIPS_PHYS_TO_KSEG1((AR71XX_MII_BASE + reg))) = (val) 7651794Smarcel 771849Swollman 781849Swollman#define ARGE_DESC_EMPTY (1 << 31) 79184548Speter#define ARGE_DESC_MORE (1 << 24) 801849Swollman#define ARGE_DESC_SIZE_MASK ((1 << 12) - 1) 8171579Sdeischen#define ARGE_DMASIZE(len) ((len) & ARGE_DESC_SIZE_MASK) 82184548Speterstruct arge_desc { 83184548Speter uint32_t packet_addr; 841849Swollman uint32_t packet_ctrl; 8551794Smarcel uint32_t next_desc; 8615731Sjdp uint32_t padding; 8751794Smarcel}; 8851794Smarcel 8951794Smarcelstruct arge_txdesc { 9051794Smarcel struct mbuf *tx_m; 91287872Sdelphij bus_dmamap_t tx_dmamap; 9251794Smarcel}; 9351794Smarcel 9451794Smarcelstruct arge_rxdesc { 951849Swollman struct mbuf *rx_m; 961849Swollman bus_dmamap_t rx_dmamap; 971849Swollman struct arge_desc *desc; 981849Swollman}; 991849Swollman 1001849Swollmanstruct arge_chain_data { 1013851Sbde bus_dma_tag_t arge_parent_tag; 10251794Smarcel bus_dma_tag_t arge_tx_tag; 1031849Swollman struct arge_txdesc arge_txdesc[ARGE_TX_RING_COUNT]; 10415731Sjdp bus_dma_tag_t arge_rx_tag; 1051849Swollman struct arge_rxdesc arge_rxdesc[ARGE_RX_RING_COUNT]; 10615731Sjdp bus_dma_tag_t arge_tx_ring_tag; 1071849Swollman bus_dma_tag_t arge_rx_ring_tag; 108184548Speter bus_dmamap_t arge_tx_ring_map; 109217106Skib bus_dmamap_t arge_rx_ring_map; 110217106Skib bus_dmamap_t arge_rx_sparemap; 111 int arge_tx_pkts; 112 int arge_tx_prod; 113 int arge_tx_cons; 114 int arge_tx_cnt; 115 int arge_rx_cons; 116}; 117 118struct arge_ring_data { 119 struct arge_desc *arge_rx_ring; 120 struct arge_desc *arge_tx_ring; 121 bus_addr_t arge_rx_ring_paddr; 122 bus_addr_t arge_tx_ring_paddr; 123}; 124 125struct arge_softc { 126 struct ifnet *arge_ifp; /* interface info */ 127 device_t arge_dev; 128 struct ifmedia arge_ifmedia; 129 /* 130 * Media & duples settings for multiPHY MAC 131 */ 132 uint32_t arge_media_type; 133 uint32_t arge_duplex_mode; 134 struct resource *arge_res; 135 int arge_rid; 136 struct resource *arge_irq; 137 void *arge_intrhand; 138 device_t arge_miibus; 139 bus_dma_tag_t arge_parent_tag; 140 bus_dma_tag_t arge_tag; 141 struct mtx arge_mtx; 142 struct callout arge_stat_callout; 143 struct task arge_link_task; 144 struct arge_chain_data arge_cdata; 145 struct arge_ring_data arge_rdata; 146 int arge_link_status; 147 int arge_detach; 148 uint32_t arge_intr_status; 149 int arge_mac_unit; 150 int arge_phymask; 151 uint32_t arge_ddr_flush_reg; 152 uint32_t arge_pll_reg; 153 uint32_t arge_pll_reg_shift; 154 int arge_if_flags; 155}; 156 157#endif /* __IF_ARGEVAR_H__ */ 158