15df53927SLuiz Otavio O Souza /*- 25df53927SLuiz Otavio O Souza * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com> 35df53927SLuiz Otavio O Souza * 45df53927SLuiz Otavio O Souza * This software was developed by SRI International and the University of 55df53927SLuiz Otavio O Souza * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) 65df53927SLuiz Otavio O Souza * ("CTSRD"), as part of the DARPA CRASH research programme. 75df53927SLuiz Otavio O Souza * 85df53927SLuiz Otavio O Souza * Redistribution and use in source and binary forms, with or without 95df53927SLuiz Otavio O Souza * modification, are permitted provided that the following conditions 105df53927SLuiz Otavio O Souza * are met: 115df53927SLuiz Otavio O Souza * 1. Redistributions of source code must retain the above copyright 125df53927SLuiz Otavio O Souza * notice, this list of conditions and the following disclaimer. 135df53927SLuiz Otavio O Souza * 2. Redistributions in binary form must reproduce the above copyright 145df53927SLuiz Otavio O Souza * notice, this list of conditions and the following disclaimer in the 155df53927SLuiz Otavio O Souza * documentation and/or other materials provided with the distribution. 165df53927SLuiz Otavio O Souza * 175df53927SLuiz Otavio O Souza * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 185df53927SLuiz Otavio O Souza * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 195df53927SLuiz Otavio O Souza * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 205df53927SLuiz Otavio O Souza * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 215df53927SLuiz Otavio O Souza * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 225df53927SLuiz Otavio O Souza * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 235df53927SLuiz Otavio O Souza * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 245df53927SLuiz Otavio O Souza * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 255df53927SLuiz Otavio O Souza * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 265df53927SLuiz Otavio O Souza * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 275df53927SLuiz Otavio O Souza * SUCH DAMAGE. 285df53927SLuiz Otavio O Souza */ 295df53927SLuiz Otavio O Souza 305df53927SLuiz Otavio O Souza /* 315df53927SLuiz Otavio O Souza * Ethernet media access controller (EMAC) 325df53927SLuiz Otavio O Souza * Chapter 17, Altera Cyclone V Device Handbook (CV-5V2 2014.07.22) 335df53927SLuiz Otavio O Souza * 345df53927SLuiz Otavio O Souza * EMAC is an instance of the Synopsys DesignWare 3504-0 355df53927SLuiz Otavio O Souza * Universal 10/100/1000 Ethernet MAC (DWC_gmac). 365df53927SLuiz Otavio O Souza */ 375df53927SLuiz Otavio O Souza 385df53927SLuiz Otavio O Souza #ifndef __IF_DWCVAR_H__ 395df53927SLuiz Otavio O Souza #define __IF_DWCVAR_H__ 405df53927SLuiz Otavio O Souza 415df53927SLuiz Otavio O Souza /* 425df53927SLuiz Otavio O Souza * Driver data and defines. 435df53927SLuiz Otavio O Souza */ 445df53927SLuiz Otavio O Souza #define RX_DESC_COUNT 1024 455df53927SLuiz Otavio O Souza #define RX_DESC_SIZE (sizeof(struct dwc_hwdesc) * RX_DESC_COUNT) 465df53927SLuiz Otavio O Souza #define TX_DESC_COUNT 1024 47e5232621SOleksandr Tymoshenko #define TX_MAP_COUNT TX_DESC_COUNT 485df53927SLuiz Otavio O Souza #define TX_DESC_SIZE (sizeof(struct dwc_hwdesc) * TX_DESC_COUNT) 49e5232621SOleksandr Tymoshenko #define TX_MAP_MAX_SEGS 32 505df53927SLuiz Otavio O Souza 51cef444d0SEmmanuel Vadot #define DMA_DEFAULT_PBL 8 52cef444d0SEmmanuel Vadot 535df53927SLuiz Otavio O Souza struct dwc_bufmap { 545df53927SLuiz Otavio O Souza bus_dmamap_t map; 555df53927SLuiz Otavio O Souza struct mbuf *mbuf; 56e5232621SOleksandr Tymoshenko /* Only used for TX descirptors */ 57e5232621SOleksandr Tymoshenko int last_desc_idx; 585df53927SLuiz Otavio O Souza }; 595df53927SLuiz Otavio O Souza 605df53927SLuiz Otavio O Souza struct dwc_softc { 615df53927SLuiz Otavio O Souza struct resource *res[2]; 625df53927SLuiz Otavio O Souza device_t dev; 63f114aaddSEmmanuel Vadot phandle_t node; 645df53927SLuiz Otavio O Souza int mii_clk; 655df53927SLuiz Otavio O Souza device_t miibus; 665df53927SLuiz Otavio O Souza struct mii_data * mii_softc; 67068f2c0eSJustin Hibbits if_t ifp; 685df53927SLuiz Otavio O Souza int if_flags; 695df53927SLuiz Otavio O Souza struct mtx mtx; 705df53927SLuiz Otavio O Souza void * intr_cookie; 715df53927SLuiz Otavio O Souza struct callout dwc_callout; 722fd90327SJohn Baldwin bool link_is_up; 732fd90327SJohn Baldwin bool is_attached; 742fd90327SJohn Baldwin bool is_detaching; 755df53927SLuiz Otavio O Souza int tx_watchdog_count; 765df53927SLuiz Otavio O Souza int stats_harvest_count; 77824cfb47SOleksandr Tymoshenko int phy_mode; 785df53927SLuiz Otavio O Souza 7950059a60SEmmanuel Vadot /* clocks and reset */ 8050059a60SEmmanuel Vadot clk_t clk_stmmaceth; 8150059a60SEmmanuel Vadot clk_t clk_pclk; 8250059a60SEmmanuel Vadot hwreset_t rst_stmmaceth; 8350059a60SEmmanuel Vadot hwreset_t rst_ahb; 8450059a60SEmmanuel Vadot 855d88a52bSEmmanuel Vadot /* DMA config */ 865d88a52bSEmmanuel Vadot uint32_t txpbl; /* TX Burst lenght */ 875d88a52bSEmmanuel Vadot uint32_t rxpbl; /* RX Burst lenght */ 885d88a52bSEmmanuel Vadot bool nopblx8; 895d88a52bSEmmanuel Vadot bool fixed_burst; 905d88a52bSEmmanuel Vadot bool mixed_burst; 915d88a52bSEmmanuel Vadot bool aal; 92*4b7975ecSEmmanuel Vadot bool dma_ext_desc; 935d88a52bSEmmanuel Vadot 945df53927SLuiz Otavio O Souza /* RX */ 955df53927SLuiz Otavio O Souza bus_dma_tag_t rxdesc_tag; 965df53927SLuiz Otavio O Souza bus_dmamap_t rxdesc_map; 975df53927SLuiz Otavio O Souza struct dwc_hwdesc *rxdesc_ring; 985df53927SLuiz Otavio O Souza bus_addr_t rxdesc_ring_paddr; 995df53927SLuiz Otavio O Souza bus_dma_tag_t rxbuf_tag; 1005df53927SLuiz Otavio O Souza struct dwc_bufmap rxbuf_map[RX_DESC_COUNT]; 1015df53927SLuiz Otavio O Souza uint32_t rx_idx; 1025df53927SLuiz Otavio O Souza 1035df53927SLuiz Otavio O Souza /* TX */ 1045df53927SLuiz Otavio O Souza bus_dma_tag_t txdesc_tag; 1055df53927SLuiz Otavio O Souza bus_dmamap_t txdesc_map; 1065df53927SLuiz Otavio O Souza struct dwc_hwdesc *txdesc_ring; 1075df53927SLuiz Otavio O Souza bus_addr_t txdesc_ring_paddr; 1085df53927SLuiz Otavio O Souza bus_dma_tag_t txbuf_tag; 109e7502187SJared McNeill struct dwc_bufmap txbuf_map[TX_DESC_COUNT]; 110e5232621SOleksandr Tymoshenko uint32_t tx_desc_head; 111e5232621SOleksandr Tymoshenko uint32_t tx_desc_tail; 112e5232621SOleksandr Tymoshenko uint32_t tx_map_head; 113e5232621SOleksandr Tymoshenko uint32_t tx_map_tail; 114e5232621SOleksandr Tymoshenko int tx_desccount; 115e5232621SOleksandr Tymoshenko int tx_mapcount; 1165df53927SLuiz Otavio O Souza }; 1175df53927SLuiz Otavio O Souza 118972adf0fSEmmanuel Vadot #define READ4(_sc, _reg) \ 119972adf0fSEmmanuel Vadot bus_read_4((_sc)->res[0], _reg) 120972adf0fSEmmanuel Vadot #define WRITE4(_sc, _reg, _val) \ 121972adf0fSEmmanuel Vadot bus_write_4((_sc)->res[0], _reg, _val) 122972adf0fSEmmanuel Vadot 123972adf0fSEmmanuel Vadot #define DWC_LOCK(sc) mtx_lock(&(sc)->mtx) 124972adf0fSEmmanuel Vadot #define DWC_UNLOCK(sc) mtx_unlock(&(sc)->mtx) 125972adf0fSEmmanuel Vadot #define DWC_ASSERT_LOCKED(sc) mtx_assert(&(sc)->mtx, MA_OWNED) 126972adf0fSEmmanuel Vadot #define DWC_ASSERT_UNLOCKED(sc) mtx_assert(&(sc)->mtx, MA_NOTOWNED) 127972adf0fSEmmanuel Vadot 1285df53927SLuiz Otavio O Souza #endif /* __IF_DWCVAR_H__ */ 129