19f55f5f5SRafal Jaworowski /*- 29f55f5f5SRafal Jaworowski * Copyright (C) 2008 MARVELL INTERNATIONAL LTD. 39f55f5f5SRafal Jaworowski * All rights reserved. 49f55f5f5SRafal Jaworowski * 59f55f5f5SRafal Jaworowski * Developed by Semihalf. 69f55f5f5SRafal Jaworowski * 79f55f5f5SRafal Jaworowski * Redistribution and use in source and binary forms, with or without 89f55f5f5SRafal Jaworowski * modification, are permitted provided that the following conditions 99f55f5f5SRafal Jaworowski * are met: 109f55f5f5SRafal Jaworowski * 1. Redistributions of source code must retain the above copyright 119f55f5f5SRafal Jaworowski * notice, this list of conditions and the following disclaimer. 129f55f5f5SRafal Jaworowski * 2. Redistributions in binary form must reproduce the above copyright 139f55f5f5SRafal Jaworowski * notice, this list of conditions and the following disclaimer in the 149f55f5f5SRafal Jaworowski * documentation and/or other materials provided with the distribution. 159f55f5f5SRafal Jaworowski * 3. Neither the name of MARVELL nor the names of contributors 169f55f5f5SRafal Jaworowski * may be used to endorse or promote products derived from this software 179f55f5f5SRafal Jaworowski * without specific prior written permission. 189f55f5f5SRafal Jaworowski * 199f55f5f5SRafal Jaworowski * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 209f55f5f5SRafal Jaworowski * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 219f55f5f5SRafal Jaworowski * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 229f55f5f5SRafal Jaworowski * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 239f55f5f5SRafal Jaworowski * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 249f55f5f5SRafal Jaworowski * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 259f55f5f5SRafal Jaworowski * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 269f55f5f5SRafal Jaworowski * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 279f55f5f5SRafal Jaworowski * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 289f55f5f5SRafal Jaworowski * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 299f55f5f5SRafal Jaworowski * SUCH DAMAGE. 309f55f5f5SRafal Jaworowski * 319f55f5f5SRafal Jaworowski * $FreeBSD$ 329f55f5f5SRafal Jaworowski */ 339f55f5f5SRafal Jaworowski 349f55f5f5SRafal Jaworowski #ifndef __IF_MGE_H__ 359f55f5f5SRafal Jaworowski #define __IF_MGE_H__ 369f55f5f5SRafal Jaworowski 379f55f5f5SRafal Jaworowski #define MGE_INTR_COUNT 5 /* ETH controller occupies 5 IRQ lines */ 389f55f5f5SRafal Jaworowski #define MGE_TX_DESC_NUM 256 399f55f5f5SRafal Jaworowski #define MGE_RX_DESC_NUM 256 409f55f5f5SRafal Jaworowski #define MGE_RX_QUEUE_NUM 8 419f55f5f5SRafal Jaworowski #define MGE_RX_DEFAULT_QUEUE 0 429f55f5f5SRafal Jaworowski 439f55f5f5SRafal Jaworowski #define MGE_CHECKSUM_FEATURES (CSUM_IP | CSUM_TCP | CSUM_UDP) 449f55f5f5SRafal Jaworowski 459f55f5f5SRafal Jaworowski /* Interrupt Coalescing types */ 469f55f5f5SRafal Jaworowski #define MGE_IC_RX 0 479f55f5f5SRafal Jaworowski #define MGE_IC_TX 1 489f55f5f5SRafal Jaworowski 499f55f5f5SRafal Jaworowski struct mge_desc { 509f55f5f5SRafal Jaworowski uint32_t cmd_status; 519f55f5f5SRafal Jaworowski uint16_t buff_size; 529f55f5f5SRafal Jaworowski uint16_t byte_count; 539f55f5f5SRafal Jaworowski bus_addr_t buffer; 549f55f5f5SRafal Jaworowski bus_addr_t next_desc; 559f55f5f5SRafal Jaworowski }; 569f55f5f5SRafal Jaworowski 579f55f5f5SRafal Jaworowski struct mge_desc_wrapper { 589f55f5f5SRafal Jaworowski bus_dmamap_t desc_dmap; 599f55f5f5SRafal Jaworowski struct mge_desc* mge_desc; 609f55f5f5SRafal Jaworowski bus_addr_t mge_desc_paddr; 619f55f5f5SRafal Jaworowski bus_dmamap_t buffer_dmap; 629f55f5f5SRafal Jaworowski struct mbuf* buffer; 639f55f5f5SRafal Jaworowski }; 649f55f5f5SRafal Jaworowski 659f55f5f5SRafal Jaworowski struct mge_softc { 669f55f5f5SRafal Jaworowski struct ifnet *ifp; /* per-interface network data */ 67*db5ef4fcSRafal Jaworowski 68*db5ef4fcSRafal Jaworowski phandle_t node; 69*db5ef4fcSRafal Jaworowski 709f55f5f5SRafal Jaworowski device_t dev; 719f55f5f5SRafal Jaworowski device_t miibus; 72*db5ef4fcSRafal Jaworowski 739f55f5f5SRafal Jaworowski struct mii_data *mii; 749f55f5f5SRafal Jaworowski struct resource *res[1 + MGE_INTR_COUNT]; /* resources */ 759f55f5f5SRafal Jaworowski void *ih_cookie[MGE_INTR_COUNT]; /* interrupt handlers cookies */ 769f55f5f5SRafal Jaworowski struct mtx transmit_lock; /* transmitter lock */ 779f55f5f5SRafal Jaworowski struct mtx receive_lock; /* receiver lock */ 789f55f5f5SRafal Jaworowski 799f55f5f5SRafal Jaworowski uint32_t mge_if_flags; 809f55f5f5SRafal Jaworowski uint32_t mge_media_status; 819f55f5f5SRafal Jaworowski 829f55f5f5SRafal Jaworowski struct callout wd_callout; 839f55f5f5SRafal Jaworowski int wd_timer; 849f55f5f5SRafal Jaworowski 859f55f5f5SRafal Jaworowski bus_dma_tag_t mge_desc_dtag; 869f55f5f5SRafal Jaworowski bus_dma_tag_t mge_tx_dtag; 879f55f5f5SRafal Jaworowski bus_dma_tag_t mge_rx_dtag; 889f55f5f5SRafal Jaworowski bus_addr_t tx_desc_start; 899f55f5f5SRafal Jaworowski bus_addr_t rx_desc_start; 909f55f5f5SRafal Jaworowski uint32_t tx_desc_curr; 919f55f5f5SRafal Jaworowski uint32_t rx_desc_curr; 929f55f5f5SRafal Jaworowski uint32_t tx_desc_used_idx; 939f55f5f5SRafal Jaworowski uint32_t tx_desc_used_count; 949f55f5f5SRafal Jaworowski uint32_t rx_ic_time; 959f55f5f5SRafal Jaworowski uint32_t tx_ic_time; 969f55f5f5SRafal Jaworowski struct mge_desc_wrapper mge_tx_desc[MGE_TX_DESC_NUM]; 979f55f5f5SRafal Jaworowski struct mge_desc_wrapper mge_rx_desc[MGE_RX_DESC_NUM]; 988e1dc58eSRafal Jaworowski 998e1dc58eSRafal Jaworowski uint32_t mge_tfut_ipg_max; /* TX FIFO Urgent Threshold */ 1008e1dc58eSRafal Jaworowski uint32_t mge_rx_ipg_max; 1018e1dc58eSRafal Jaworowski uint32_t mge_tx_arb_cfg; 1028e1dc58eSRafal Jaworowski uint32_t mge_tx_tok_cfg; 1038e1dc58eSRafal Jaworowski uint32_t mge_tx_tok_cnt; 1048e1dc58eSRafal Jaworowski uint16_t mge_mtu; 1058e1dc58eSRafal Jaworowski int mge_ver; 106*db5ef4fcSRafal Jaworowski 107*db5ef4fcSRafal Jaworowski int phyaddr; 1089f55f5f5SRafal Jaworowski }; 1099f55f5f5SRafal Jaworowski 1109f55f5f5SRafal Jaworowski 1119f55f5f5SRafal Jaworowski /* bus access macros */ 1129f55f5f5SRafal Jaworowski #define MGE_READ(sc,reg) bus_read_4((sc)->res[0], (reg)) 1139f55f5f5SRafal Jaworowski #define MGE_WRITE(sc,reg,val) bus_write_4((sc)->res[0], (reg), (val)) 1149f55f5f5SRafal Jaworowski 1159f55f5f5SRafal Jaworowski /* Locking macros */ 1169f55f5f5SRafal Jaworowski #define MGE_TRANSMIT_LOCK(sc) do { \ 1179f55f5f5SRafal Jaworowski mtx_assert(&(sc)->receive_lock, MA_NOTOWNED); \ 1189f55f5f5SRafal Jaworowski mtx_lock(&(sc)->transmit_lock); \ 1199f55f5f5SRafal Jaworowski } while (0) 1209f55f5f5SRafal Jaworowski 1219f55f5f5SRafal Jaworowski #define MGE_TRANSMIT_UNLOCK(sc) mtx_unlock(&(sc)->transmit_lock) 1229f55f5f5SRafal Jaworowski #define MGE_TRANSMIT_LOCK_ASSERT(sc) mtx_assert(&(sc)->transmit_lock, MA_OWNED) 1239f55f5f5SRafal Jaworowski 1249f55f5f5SRafal Jaworowski #define MGE_RECEIVE_LOCK(sc) do { \ 1259f55f5f5SRafal Jaworowski mtx_assert(&(sc)->transmit_lock, MA_NOTOWNED); \ 1269f55f5f5SRafal Jaworowski mtx_lock(&(sc)->receive_lock); \ 1279f55f5f5SRafal Jaworowski } while (0) 1289f55f5f5SRafal Jaworowski 1299f55f5f5SRafal Jaworowski #define MGE_RECEIVE_UNLOCK(sc) mtx_unlock(&(sc)->receive_lock) 1309f55f5f5SRafal Jaworowski #define MGE_RECEIVE_LOCK_ASSERT(sc) mtx_assert(&(sc)->receive_lock, MA_OWNED) 1319f55f5f5SRafal Jaworowski 1329f55f5f5SRafal Jaworowski #define MGE_GLOBAL_LOCK(sc) do { \ 1339f55f5f5SRafal Jaworowski if ((mtx_owned(&(sc)->transmit_lock) ? 1 : 0) != \ 1349f55f5f5SRafal Jaworowski (mtx_owned(&(sc)->receive_lock) ? 1 : 0)) { \ 1359f55f5f5SRafal Jaworowski panic("mge deadlock possibility detection!"); \ 1369f55f5f5SRafal Jaworowski } \ 1379f55f5f5SRafal Jaworowski mtx_lock(&(sc)->transmit_lock); \ 1389f55f5f5SRafal Jaworowski mtx_lock(&(sc)->receive_lock); \ 1399f55f5f5SRafal Jaworowski } while (0) 1409f55f5f5SRafal Jaworowski 1419f55f5f5SRafal Jaworowski #define MGE_GLOBAL_UNLOCK(sc) do { \ 1429f55f5f5SRafal Jaworowski MGE_RECEIVE_UNLOCK(sc); \ 1439f55f5f5SRafal Jaworowski MGE_TRANSMIT_UNLOCK(sc); \ 1449f55f5f5SRafal Jaworowski } while (0) 1459f55f5f5SRafal Jaworowski 1469f55f5f5SRafal Jaworowski #define MGE_GLOBAL_LOCK_ASSERT(sc) do { \ 1479f55f5f5SRafal Jaworowski MGE_TRANSMIT_LOCK_ASSERT(sc); \ 1489f55f5f5SRafal Jaworowski MGE_RECEIVE_LOCK_ASSERT(sc); \ 1499f55f5f5SRafal Jaworowski } while (0) 1509f55f5f5SRafal Jaworowski 1519f55f5f5SRafal Jaworowski /* SMI-related macros */ 1529f55f5f5SRafal Jaworowski #define MGE_REG_PHYDEV 0x000 1539f55f5f5SRafal Jaworowski #define MGE_REG_SMI 0x004 1549f55f5f5SRafal Jaworowski #define MGE_SMI_READ (1 << 26) 1559f55f5f5SRafal Jaworowski #define MGE_SMI_WRITE (0 << 26) 1569f55f5f5SRafal Jaworowski #define MGE_SMI_READVALID (1 << 27) 1579f55f5f5SRafal Jaworowski #define MGE_SMI_BUSY (1 << 28) 1589f55f5f5SRafal Jaworowski 1599f55f5f5SRafal Jaworowski /* TODO verify the timings and retries count w/specs */ 1609f55f5f5SRafal Jaworowski #define MGE_SMI_READ_RETRIES 1000 1619f55f5f5SRafal Jaworowski #define MGE_SMI_READ_DELAY 100 1629f55f5f5SRafal Jaworowski #define MGE_SMI_WRITE_RETRIES 1000 1639f55f5f5SRafal Jaworowski #define MGE_SMI_WRITE_DELAY 100 1649f55f5f5SRafal Jaworowski 1659f55f5f5SRafal Jaworowski /* MGE registers */ 1669f55f5f5SRafal Jaworowski #define MGE_INT_CAUSE 0x080 1679f55f5f5SRafal Jaworowski #define MGE_INT_MASK 0x084 1689f55f5f5SRafal Jaworowski 1699f55f5f5SRafal Jaworowski #define MGE_PORT_CONFIG 0x400 1709f55f5f5SRafal Jaworowski #define PORT_CONFIG_UPM (1 << 0) /* promiscuous */ 1719f55f5f5SRafal Jaworowski #define PORT_CONFIG_DFLT_RXQ(val) (((val) & 7) << 1) /* default RX queue */ 1729f55f5f5SRafal Jaworowski #define PORT_CONFIG_ARO_RXQ(val) (((val) & 7) << 4) /* ARP RX queue */ 1739f55f5f5SRafal Jaworowski #define PORT_CONFIG_REJECT_BCAST (1 << 7) /* reject non-ip and non-arp bcast */ 1749f55f5f5SRafal Jaworowski #define PORT_CONFIG_REJECT_IP_BCAST (1 << 8) /* reject ip bcast */ 1759f55f5f5SRafal Jaworowski #define PORT_CONFIG_REJECT_ARP__BCAST (1 << 9) /* reject arp bcast */ 1769f55f5f5SRafal Jaworowski #define PORT_CONFIG_AMNoTxES (1 << 12) /* Automatic mode not updating Error Summary in Tx descriptor */ 1779f55f5f5SRafal Jaworowski #define PORT_CONFIG_TCP_CAP (1 << 14) /* capture tcp to a different queue */ 1789f55f5f5SRafal Jaworowski #define PORT_CONFIG_UDP_CAP (1 << 15) /* capture udp to a different queue */ 1799f55f5f5SRafal Jaworowski #define PORT_CONFIG_TCPQ (7 << 16) /* queue to capture tcp */ 1809f55f5f5SRafal Jaworowski #define PORT_CONFIG_UDPQ (7 << 19) /* queue to capture udp */ 1819f55f5f5SRafal Jaworowski #define PORT_CONFIG_BPDUQ (7 << 22) /* queue to capture bpdu */ 1829f55f5f5SRafal Jaworowski #define PORT_CONFIG_RXCS (1 << 25) /* calculation Rx TCP checksum include pseudo header */ 1839f55f5f5SRafal Jaworowski 1849f55f5f5SRafal Jaworowski #define MGE_PORT_EXT_CONFIG 0x404 1859f55f5f5SRafal Jaworowski #define MGE_MAC_ADDR_L 0x414 1869f55f5f5SRafal Jaworowski #define MGE_MAC_ADDR_H 0x418 1879f55f5f5SRafal Jaworowski 1889f55f5f5SRafal Jaworowski #define MGE_SDMA_CONFIG 0x41c 1899f55f5f5SRafal Jaworowski #define MGE_SDMA_INT_ON_FRAME_BOUND (1 << 0) 1909f55f5f5SRafal Jaworowski #define MGE_SDMA_RX_BURST_SIZE(val) (((val) & 7) << 1) 1919f55f5f5SRafal Jaworowski #define MGE_SDMA_TX_BURST_SIZE(val) (((val) & 7) << 22) 1929f55f5f5SRafal Jaworowski #define MGE_SDMA_BURST_1_WORD 0x0 1939f55f5f5SRafal Jaworowski #define MGE_SDMA_BURST_2_WORD 0x1 1949f55f5f5SRafal Jaworowski #define MGE_SDMA_BURST_4_WORD 0x2 1959f55f5f5SRafal Jaworowski #define MGE_SDMA_BURST_8_WORD 0x3 1969f55f5f5SRafal Jaworowski #define MGE_SDMA_BURST_16_WORD 0x4 1979f55f5f5SRafal Jaworowski #define MGE_SDMA_RX_BYTE_SWAP (1 << 4) 1989f55f5f5SRafal Jaworowski #define MGE_SDMA_TX_BYTE_SWAP (1 << 5) 1999f55f5f5SRafal Jaworowski #define MGE_SDMA_DESC_SWAP_MODE (1 << 6) 2009f55f5f5SRafal Jaworowski 2019f55f5f5SRafal Jaworowski #define MGE_PORT_SERIAL_CTRL 0x43c 2029f55f5f5SRafal Jaworowski #define PORT_SERIAL_ENABLE (1 << 0) /* serial port enable */ 2039f55f5f5SRafal Jaworowski #define PORT_SERIAL_FORCE_LINKUP (1 << 1) /* force link status to up */ 2049f55f5f5SRafal Jaworowski #define PORT_SERIAL_AUTONEG (1 << 2) /* enable autoneg for duplex mode */ 2059f55f5f5SRafal Jaworowski #define PORT_SERIAL_AUTONEG_FC (1 << 3) /* enable autoneg for FC */ 2069f55f5f5SRafal Jaworowski #define PORT_SERIAL_PAUSE_ADV (1 << 4) /* advertise symmetric FC in autoneg */ 2079f55f5f5SRafal Jaworowski #define PORT_SERIAL_FORCE_FC(val) (((val) & 3) << 5) /* pause enable & disable frames conf */ 2089f55f5f5SRafal Jaworowski #define PORT_SERIAL_NO_PAUSE_DIS 0x00 2099f55f5f5SRafal Jaworowski #define PORT_SERIAL_PAUSE_DIS 0x01 2109f55f5f5SRafal Jaworowski #define PORT_SERIAL_FORCE_BP(val) (((val) & 3) << 7) /* transmitting JAM configuration */ 2119f55f5f5SRafal Jaworowski #define PORT_SERIAL_NO_JAM 0x00 2129f55f5f5SRafal Jaworowski #define PORT_SERIAL_JAM 0x01 2139f55f5f5SRafal Jaworowski #define PORT_SERIAL_RES_BIT9 (1 << 9) 2149f55f5f5SRafal Jaworowski #define PORT_SERIAL_FORCE_LINK_FAIL (1 << 10) 2159f55f5f5SRafal Jaworowski #define PORT_SERIAL_SPEED_AUTONEG (1 << 13) 2169f55f5f5SRafal Jaworowski #define PORT_SERIAL_FORCE_DTE_ADV (1 << 14) 2179f55f5f5SRafal Jaworowski #define PORT_SERIAL_MRU(val) (((val) & 7) << 17) 2189f55f5f5SRafal Jaworowski #define PORT_SERIAL_MRU_1518 0x0 2199f55f5f5SRafal Jaworowski #define PORT_SERIAL_MRU_1522 0x1 2209f55f5f5SRafal Jaworowski #define PORT_SERIAL_MRU_1552 0x2 2219f55f5f5SRafal Jaworowski #define PORT_SERIAL_MRU_9022 0x3 2229f55f5f5SRafal Jaworowski #define PORT_SERIAL_MRU_9192 0x4 2239f55f5f5SRafal Jaworowski #define PORT_SERIAL_MRU_9700 0x5 2249f55f5f5SRafal Jaworowski #define PORT_SERIAL_FULL_DUPLEX (1 << 21) 2259f55f5f5SRafal Jaworowski #define PORT_SERIAL_FULL_DUPLEX_FC (1 << 22) 2269f55f5f5SRafal Jaworowski #define PORT_SERIAL_GMII_SPEED_1000 (1 << 23) 2279f55f5f5SRafal Jaworowski #define PORT_SERIAL_MII_SPEED_100 (1 << 24) 2289f55f5f5SRafal Jaworowski 2299f55f5f5SRafal Jaworowski #define MGE_PORT_STATUS 0x444 2309f55f5f5SRafal Jaworowski #define MGE_STATUS_LINKUP (1 << 1) 2319f55f5f5SRafal Jaworowski #define MGE_STATUS_FULL_DUPLEX (1 << 2) 2329f55f5f5SRafal Jaworowski #define MGE_STATUS_FLOW_CONTROL (1 << 3) 2339f55f5f5SRafal Jaworowski #define MGE_STATUS_1000MB (1 << 4) 2349f55f5f5SRafal Jaworowski #define MGE_STATUS_100MB (1 << 5) 2359f55f5f5SRafal Jaworowski #define MGE_STATUS_TX_IN_PROG (1 << 7) 2369f55f5f5SRafal Jaworowski #define MGE_STATUS_TX_FIFO_EMPTY (1 << 10) 2379f55f5f5SRafal Jaworowski 2389f55f5f5SRafal Jaworowski #define MGE_TX_QUEUE_CMD 0x448 2399f55f5f5SRafal Jaworowski #define MGE_ENABLE_TXQ (1 << 0) 2409f55f5f5SRafal Jaworowski #define MGE_DISABLE_TXQ (1 << 8) 2419f55f5f5SRafal Jaworowski 2429f55f5f5SRafal Jaworowski /* 88F6281 only */ 2439f55f5f5SRafal Jaworowski #define MGE_PORT_SERIAL_CTRL1 0x44c 2449f55f5f5SRafal Jaworowski #define MGE_PCS_LOOPBACK (1 << 1) 2459f55f5f5SRafal Jaworowski #define MGE_RGMII_EN (1 << 3) 2469f55f5f5SRafal Jaworowski #define MGE_PORT_RESET (1 << 4) 2479f55f5f5SRafal Jaworowski #define MGE_CLK125_BYPASS (1 << 5) 2489f55f5f5SRafal Jaworowski #define MGE_INBAND_AUTONEG (1 << 6) 2499f55f5f5SRafal Jaworowski #define MGE_INBAND_AUTONEG_BYPASS (1 << 6) 2509f55f5f5SRafal Jaworowski #define MGE_INBAND_AUTONEG_RESTART (1 << 7) 2519f55f5f5SRafal Jaworowski #define MGE_1000BASEX (1 << 11) 2529f55f5f5SRafal Jaworowski #define MGE_BP_COLLISION_COUNT (1 << 15) 2539f55f5f5SRafal Jaworowski #define MGE_COLLISION_LIMIT(val) (((val) & 0x3f) << 16) 2549f55f5f5SRafal Jaworowski #define MGE_DROP_ODD_PREAMBLE (1 << 22) 2559f55f5f5SRafal Jaworowski 2569f55f5f5SRafal Jaworowski #define MGE_PORT_INT_CAUSE 0x460 2579f55f5f5SRafal Jaworowski #define MGE_PORT_INT_MASK 0x468 2589f55f5f5SRafal Jaworowski #define MGE_PORT_INT_RX (1 << 0) 2599f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXTEND (1 << 1) 2609f55f5f5SRafal Jaworowski #define MGE_PORT_INT_RXQ0 (1 << 2) 2619f55f5f5SRafal Jaworowski #define MGE_PORT_INT_RXERR (1 << 10) 2629f55f5f5SRafal Jaworowski #define MGE_PORT_INT_RXERRQ0 (1 << 11) 2639f55f5f5SRafal Jaworowski #define MGE_PORT_INT_SUM (1 << 31) 2649f55f5f5SRafal Jaworowski 2659f55f5f5SRafal Jaworowski #define MGE_PORT_INT_CAUSE_EXT 0x464 2669f55f5f5SRafal Jaworowski #define MGE_PORT_INT_MASK_EXT 0x46C 2679f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXT_TXBUF0 (1 << 0) 2689f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXT_TXERR0 (1 << 8) 2699f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXT_PHYSC (1 << 16) 2709f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXT_RXOR (1 << 18) 2719f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXT_TXUR (1 << 19) 2729f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXT_LC (1 << 20) 2739f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXT_IAR (1 << 23) 2749f55f5f5SRafal Jaworowski #define MGE_PORT_INT_EXT_SUM (1 << 31) 2759f55f5f5SRafal Jaworowski 2769f55f5f5SRafal Jaworowski #define MGE_RX_FIFO_URGENT_TRSH 0x470 2779f55f5f5SRafal Jaworowski #define MGE_TX_FIFO_URGENT_TRSH 0x474 2789f55f5f5SRafal Jaworowski 2799f55f5f5SRafal Jaworowski #define MGE_FIXED_PRIO_CONF 0x4dc 2809f55f5f5SRafal Jaworowski #define MGE_FIXED_PRIO_EN(q) (1 << (q)) 2819f55f5f5SRafal Jaworowski 2829f55f5f5SRafal Jaworowski #define MGE_RX_CUR_DESC_PTR(q) (0x60c + ((q)<<4)) 2839f55f5f5SRafal Jaworowski 2849f55f5f5SRafal Jaworowski #define MGE_RX_QUEUE_CMD 0x680 2859f55f5f5SRafal Jaworowski #define MGE_ENABLE_RXQ(q) (1 << ((q) & 0x7)) 2869f55f5f5SRafal Jaworowski #define MGE_ENABLE_RXQ_ALL (0xff) 2879f55f5f5SRafal Jaworowski #define MGE_DISABLE_RXQ(q) (1 << (((q) & 0x7) + 8)) 2889f55f5f5SRafal Jaworowski #define MGE_DISABLE_RXQ_ALL (0xff00) 2899f55f5f5SRafal Jaworowski 2909f55f5f5SRafal Jaworowski #define MGE_TX_CUR_DESC_PTR 0x6c0 2919f55f5f5SRafal Jaworowski 2929f55f5f5SRafal Jaworowski #define MGE_TX_TOKEN_COUNT(q) (0x700 + ((q)<<4)) 2939f55f5f5SRafal Jaworowski #define MGE_TX_TOKEN_CONF(q) (0x704 + ((q)<<4)) 2949f55f5f5SRafal Jaworowski #define MGE_TX_ARBITER_CONF(q) (0x704 + ((q)<<4)) 2959f55f5f5SRafal Jaworowski 2969f55f5f5SRafal Jaworowski #define MGE_MCAST_REG_NUMBER 64 2979f55f5f5SRafal Jaworowski #define MGE_DA_FILTER_SPEC_MCAST(i) (0x1400 + ((i) << 2)) 2989f55f5f5SRafal Jaworowski #define MGE_DA_FILTER_OTH_MCAST(i) (0x1500 + ((i) << 2)) 2999f55f5f5SRafal Jaworowski 3009f55f5f5SRafal Jaworowski #define MGE_UCAST_REG_NUMBER 4 3019f55f5f5SRafal Jaworowski #define MGE_DA_FILTER_UCAST(i) (0x1600 + ((i) << 2)) 3029f55f5f5SRafal Jaworowski 3039f55f5f5SRafal Jaworowski 3049f55f5f5SRafal Jaworowski /* TX descriptor bits */ 3059f55f5f5SRafal Jaworowski #define MGE_TX_LLC_SNAP (1 << 9) 3069f55f5f5SRafal Jaworowski #define MGE_TX_NOT_FRAGMENT (1 << 10) 3079f55f5f5SRafal Jaworowski #define MGE_TX_VLAN_TAGGED (1 << 15) 3089f55f5f5SRafal Jaworowski #define MGE_TX_UDP (1 << 16) 3099f55f5f5SRafal Jaworowski #define MGE_TX_GEN_L4_CSUM (1 << 17) 3109f55f5f5SRafal Jaworowski #define MGE_TX_GEN_IP_CSUM (1 << 18) 3119f55f5f5SRafal Jaworowski #define MGE_TX_PADDING (1 << 19) 3129f55f5f5SRafal Jaworowski #define MGE_TX_LAST (1 << 20) 3139f55f5f5SRafal Jaworowski #define MGE_TX_FIRST (1 << 21) 3149f55f5f5SRafal Jaworowski #define MGE_TX_ETH_CRC (1 << 22) 3159f55f5f5SRafal Jaworowski #define MGE_TX_EN_INT (1 << 23) 3169f55f5f5SRafal Jaworowski 3179f55f5f5SRafal Jaworowski #define MGE_TX_IP_HDR_SIZE(size) ((size << 11) & 0xFFFF) 3189f55f5f5SRafal Jaworowski 3199f55f5f5SRafal Jaworowski /* RX descriptor bits */ 3209f55f5f5SRafal Jaworowski #define MGE_ERR_SUMMARY (1 << 0) 3219f55f5f5SRafal Jaworowski #define MGE_ERR_MASK (3 << 1) 3229f55f5f5SRafal Jaworowski #define MGE_RX_L4_PROTO_MASK (3 << 21) 3239f55f5f5SRafal Jaworowski #define MGE_RX_L4_PROTO_TCP (0 << 21) 3249f55f5f5SRafal Jaworowski #define MGE_RX_L4_PROTO_UDP (1 << 21) 3259f55f5f5SRafal Jaworowski #define MGE_RX_L3_IS_IP (1 << 24) 3269f55f5f5SRafal Jaworowski #define MGE_RX_IP_OK (1 << 25) 3279f55f5f5SRafal Jaworowski #define MGE_RX_DESC_LAST (1 << 26) 3289f55f5f5SRafal Jaworowski #define MGE_RX_DESC_FIRST (1 << 27) 3299f55f5f5SRafal Jaworowski #define MGE_RX_ENABLE_INT (1 << 29) 3309f55f5f5SRafal Jaworowski #define MGE_RX_L4_CSUM_OK (1 << 30) 3319f55f5f5SRafal Jaworowski #define MGE_DMA_OWNED (1 << 31) 3329f55f5f5SRafal Jaworowski 3339f55f5f5SRafal Jaworowski #define MGE_RX_IP_FRAGMENT (1 << 2) 3349f55f5f5SRafal Jaworowski 3359f55f5f5SRafal Jaworowski #define MGE_RX_L4_IS_TCP(status) ((status & MGE_RX_L4_PROTO_MASK) \ 3369f55f5f5SRafal Jaworowski == MGE_RX_L4_PROTO_TCP) 3379f55f5f5SRafal Jaworowski 3389f55f5f5SRafal Jaworowski #define MGE_RX_L4_IS_UDP(status) ((status & MGE_RX_L4_PROTO_MASK) \ 3399f55f5f5SRafal Jaworowski == MGE_RX_L4_PROTO_UDP) 3409f55f5f5SRafal Jaworowski 3419f55f5f5SRafal Jaworowski /* TX error codes */ 3429f55f5f5SRafal Jaworowski #define MGE_TX_ERROR_LC (0 << 1) /* Late collision */ 3439f55f5f5SRafal Jaworowski #define MGE_TX_ERROR_UR (1 << 1) /* Underrun error */ 3449f55f5f5SRafal Jaworowski #define MGE_TX_ERROR_RL (2 << 1) /* Excessive collision */ 3459f55f5f5SRafal Jaworowski 3469f55f5f5SRafal Jaworowski /* RX error codes */ 3479f55f5f5SRafal Jaworowski #define MGE_RX_ERROR_CE (0 << 1) /* CRC error */ 3489f55f5f5SRafal Jaworowski #define MGE_RX_ERROR_OR (1 << 1) /* Overrun error */ 3499f55f5f5SRafal Jaworowski #define MGE_RX_ERROR_MF (2 << 1) /* Max frame lenght error */ 3509f55f5f5SRafal Jaworowski #define MGE_RX_ERROR_RE (3 << 1) /* Resource error */ 3519f55f5f5SRafal Jaworowski 3529f55f5f5SRafal Jaworowski #endif /* __IF_MGE_H__ */ 353