1*b9b17debSTimur Tabi /* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved. 2*b9b17debSTimur Tabi * 3*b9b17debSTimur Tabi * This program is free software; you can redistribute it and/or modify 4*b9b17debSTimur Tabi * it under the terms of the GNU General Public License version 2 and 5*b9b17debSTimur Tabi * only version 2 as published by the Free Software Foundation. 6*b9b17debSTimur Tabi * 7*b9b17debSTimur Tabi * This program is distributed in the hope that it will be useful, 8*b9b17debSTimur Tabi * but WITHOUT ANY WARRANTY; without even the implied warranty of 9*b9b17debSTimur Tabi * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10*b9b17debSTimur Tabi * GNU General Public License for more details. 11*b9b17debSTimur Tabi */ 12*b9b17debSTimur Tabi 13*b9b17debSTimur Tabi #ifndef _EMAC_H_ 14*b9b17debSTimur Tabi #define _EMAC_H_ 15*b9b17debSTimur Tabi 16*b9b17debSTimur Tabi #include <linux/irqreturn.h> 17*b9b17debSTimur Tabi #include <linux/netdevice.h> 18*b9b17debSTimur Tabi #include <linux/clk.h> 19*b9b17debSTimur Tabi #include <linux/platform_device.h> 20*b9b17debSTimur Tabi #include "emac-mac.h" 21*b9b17debSTimur Tabi #include "emac-phy.h" 22*b9b17debSTimur Tabi 23*b9b17debSTimur Tabi /* EMAC base register offsets */ 24*b9b17debSTimur Tabi #define EMAC_DMA_MAS_CTRL 0x001400 25*b9b17debSTimur Tabi #define EMAC_IRQ_MOD_TIM_INIT 0x001408 26*b9b17debSTimur Tabi #define EMAC_BLK_IDLE_STS 0x00140c 27*b9b17debSTimur Tabi #define EMAC_PHY_LINK_DELAY 0x00141c 28*b9b17debSTimur Tabi #define EMAC_SYS_ALIV_CTRL 0x001434 29*b9b17debSTimur Tabi #define EMAC_MAC_IPGIFG_CTRL 0x001484 30*b9b17debSTimur Tabi #define EMAC_MAC_STA_ADDR0 0x001488 31*b9b17debSTimur Tabi #define EMAC_MAC_STA_ADDR1 0x00148c 32*b9b17debSTimur Tabi #define EMAC_HASH_TAB_REG0 0x001490 33*b9b17debSTimur Tabi #define EMAC_HASH_TAB_REG1 0x001494 34*b9b17debSTimur Tabi #define EMAC_MAC_HALF_DPLX_CTRL 0x001498 35*b9b17debSTimur Tabi #define EMAC_MAX_FRAM_LEN_CTRL 0x00149c 36*b9b17debSTimur Tabi #define EMAC_INT_STATUS 0x001600 37*b9b17debSTimur Tabi #define EMAC_INT_MASK 0x001604 38*b9b17debSTimur Tabi #define EMAC_RXMAC_STATC_REG0 0x001700 39*b9b17debSTimur Tabi #define EMAC_RXMAC_STATC_REG22 0x001758 40*b9b17debSTimur Tabi #define EMAC_TXMAC_STATC_REG0 0x001760 41*b9b17debSTimur Tabi #define EMAC_TXMAC_STATC_REG24 0x0017c0 42*b9b17debSTimur Tabi #define EMAC_CORE_HW_VERSION 0x001974 43*b9b17debSTimur Tabi #define EMAC_IDT_TABLE0 0x001b00 44*b9b17debSTimur Tabi #define EMAC_RXMAC_STATC_REG23 0x001bc8 45*b9b17debSTimur Tabi #define EMAC_RXMAC_STATC_REG24 0x001bcc 46*b9b17debSTimur Tabi #define EMAC_TXMAC_STATC_REG25 0x001bd0 47*b9b17debSTimur Tabi #define EMAC_INT1_MASK 0x001bf0 48*b9b17debSTimur Tabi #define EMAC_INT1_STATUS 0x001bf4 49*b9b17debSTimur Tabi #define EMAC_INT2_MASK 0x001bf8 50*b9b17debSTimur Tabi #define EMAC_INT2_STATUS 0x001bfc 51*b9b17debSTimur Tabi #define EMAC_INT3_MASK 0x001c00 52*b9b17debSTimur Tabi #define EMAC_INT3_STATUS 0x001c04 53*b9b17debSTimur Tabi 54*b9b17debSTimur Tabi /* EMAC_DMA_MAS_CTRL */ 55*b9b17debSTimur Tabi #define DEV_ID_NUM_BMSK 0x7f000000 56*b9b17debSTimur Tabi #define DEV_ID_NUM_SHFT 24 57*b9b17debSTimur Tabi #define DEV_REV_NUM_BMSK 0xff0000 58*b9b17debSTimur Tabi #define DEV_REV_NUM_SHFT 16 59*b9b17debSTimur Tabi #define INT_RD_CLR_EN 0x4000 60*b9b17debSTimur Tabi #define IRQ_MODERATOR2_EN 0x800 61*b9b17debSTimur Tabi #define IRQ_MODERATOR_EN 0x400 62*b9b17debSTimur Tabi #define LPW_CLK_SEL 0x80 63*b9b17debSTimur Tabi #define LPW_STATE 0x20 64*b9b17debSTimur Tabi #define LPW_MODE 0x10 65*b9b17debSTimur Tabi #define SOFT_RST 0x1 66*b9b17debSTimur Tabi 67*b9b17debSTimur Tabi /* EMAC_IRQ_MOD_TIM_INIT */ 68*b9b17debSTimur Tabi #define IRQ_MODERATOR2_INIT_BMSK 0xffff0000 69*b9b17debSTimur Tabi #define IRQ_MODERATOR2_INIT_SHFT 16 70*b9b17debSTimur Tabi #define IRQ_MODERATOR_INIT_BMSK 0xffff 71*b9b17debSTimur Tabi #define IRQ_MODERATOR_INIT_SHFT 0 72*b9b17debSTimur Tabi 73*b9b17debSTimur Tabi /* EMAC_INT_STATUS */ 74*b9b17debSTimur Tabi #define DIS_INT BIT(31) 75*b9b17debSTimur Tabi #define PTP_INT BIT(30) 76*b9b17debSTimur Tabi #define RFD4_UR_INT BIT(29) 77*b9b17debSTimur Tabi #define TX_PKT_INT3 BIT(26) 78*b9b17debSTimur Tabi #define TX_PKT_INT2 BIT(25) 79*b9b17debSTimur Tabi #define TX_PKT_INT1 BIT(24) 80*b9b17debSTimur Tabi #define RX_PKT_INT3 BIT(19) 81*b9b17debSTimur Tabi #define RX_PKT_INT2 BIT(18) 82*b9b17debSTimur Tabi #define RX_PKT_INT1 BIT(17) 83*b9b17debSTimur Tabi #define RX_PKT_INT0 BIT(16) 84*b9b17debSTimur Tabi #define TX_PKT_INT BIT(15) 85*b9b17debSTimur Tabi #define TXQ_TO_INT BIT(14) 86*b9b17debSTimur Tabi #define GPHY_WAKEUP_INT BIT(13) 87*b9b17debSTimur Tabi #define GPHY_LINK_DOWN_INT BIT(12) 88*b9b17debSTimur Tabi #define GPHY_LINK_UP_INT BIT(11) 89*b9b17debSTimur Tabi #define DMAW_TO_INT BIT(10) 90*b9b17debSTimur Tabi #define DMAR_TO_INT BIT(9) 91*b9b17debSTimur Tabi #define TXF_UR_INT BIT(8) 92*b9b17debSTimur Tabi #define RFD3_UR_INT BIT(7) 93*b9b17debSTimur Tabi #define RFD2_UR_INT BIT(6) 94*b9b17debSTimur Tabi #define RFD1_UR_INT BIT(5) 95*b9b17debSTimur Tabi #define RFD0_UR_INT BIT(4) 96*b9b17debSTimur Tabi #define RXF_OF_INT BIT(3) 97*b9b17debSTimur Tabi #define SW_MAN_INT BIT(2) 98*b9b17debSTimur Tabi 99*b9b17debSTimur Tabi /* EMAC_MAILBOX_6 */ 100*b9b17debSTimur Tabi #define RFD2_PROC_IDX_BMSK 0xfff0000 101*b9b17debSTimur Tabi #define RFD2_PROC_IDX_SHFT 16 102*b9b17debSTimur Tabi #define RFD2_PROD_IDX_BMSK 0xfff 103*b9b17debSTimur Tabi #define RFD2_PROD_IDX_SHFT 0 104*b9b17debSTimur Tabi 105*b9b17debSTimur Tabi /* EMAC_CORE_HW_VERSION */ 106*b9b17debSTimur Tabi #define MAJOR_BMSK 0xf0000000 107*b9b17debSTimur Tabi #define MAJOR_SHFT 28 108*b9b17debSTimur Tabi #define MINOR_BMSK 0xfff0000 109*b9b17debSTimur Tabi #define MINOR_SHFT 16 110*b9b17debSTimur Tabi #define STEP_BMSK 0xffff 111*b9b17debSTimur Tabi #define STEP_SHFT 0 112*b9b17debSTimur Tabi 113*b9b17debSTimur Tabi /* EMAC_EMAC_WRAPPER_CSR1 */ 114*b9b17debSTimur Tabi #define TX_INDX_FIFO_SYNC_RST BIT(23) 115*b9b17debSTimur Tabi #define TX_TS_FIFO_SYNC_RST BIT(22) 116*b9b17debSTimur Tabi #define RX_TS_FIFO2_SYNC_RST BIT(21) 117*b9b17debSTimur Tabi #define RX_TS_FIFO1_SYNC_RST BIT(20) 118*b9b17debSTimur Tabi #define TX_TS_ENABLE BIT(16) 119*b9b17debSTimur Tabi #define DIS_1588_CLKS BIT(11) 120*b9b17debSTimur Tabi #define FREQ_MODE BIT(9) 121*b9b17debSTimur Tabi #define ENABLE_RRD_TIMESTAMP BIT(3) 122*b9b17debSTimur Tabi 123*b9b17debSTimur Tabi /* EMAC_EMAC_WRAPPER_CSR2 */ 124*b9b17debSTimur Tabi #define HDRIVE_BMSK 0x3000 125*b9b17debSTimur Tabi #define HDRIVE_SHFT 12 126*b9b17debSTimur Tabi #define SLB_EN BIT(9) 127*b9b17debSTimur Tabi #define PLB_EN BIT(8) 128*b9b17debSTimur Tabi #define WOL_EN BIT(3) 129*b9b17debSTimur Tabi #define PHY_RESET BIT(0) 130*b9b17debSTimur Tabi 131*b9b17debSTimur Tabi #define EMAC_DEV_ID 0x0040 132*b9b17debSTimur Tabi 133*b9b17debSTimur Tabi /* SGMII v2 per lane registers */ 134*b9b17debSTimur Tabi #define SGMII_LN_RSM_START 0x029C 135*b9b17debSTimur Tabi 136*b9b17debSTimur Tabi /* SGMII v2 PHY common registers */ 137*b9b17debSTimur Tabi #define SGMII_PHY_CMN_CTRL 0x0408 138*b9b17debSTimur Tabi #define SGMII_PHY_CMN_RESET_CTRL 0x0410 139*b9b17debSTimur Tabi 140*b9b17debSTimur Tabi /* SGMII v2 PHY registers per lane */ 141*b9b17debSTimur Tabi #define SGMII_PHY_LN_OFFSET 0x0400 142*b9b17debSTimur Tabi #define SGMII_PHY_LN_LANE_STATUS 0x00DC 143*b9b17debSTimur Tabi #define SGMII_PHY_LN_BIST_GEN0 0x008C 144*b9b17debSTimur Tabi #define SGMII_PHY_LN_BIST_GEN1 0x0090 145*b9b17debSTimur Tabi #define SGMII_PHY_LN_BIST_GEN2 0x0094 146*b9b17debSTimur Tabi #define SGMII_PHY_LN_BIST_GEN3 0x0098 147*b9b17debSTimur Tabi #define SGMII_PHY_LN_CDR_CTRL1 0x005C 148*b9b17debSTimur Tabi 149*b9b17debSTimur Tabi enum emac_clk_id { 150*b9b17debSTimur Tabi EMAC_CLK_AXI, 151*b9b17debSTimur Tabi EMAC_CLK_CFG_AHB, 152*b9b17debSTimur Tabi EMAC_CLK_HIGH_SPEED, 153*b9b17debSTimur Tabi EMAC_CLK_MDIO, 154*b9b17debSTimur Tabi EMAC_CLK_TX, 155*b9b17debSTimur Tabi EMAC_CLK_RX, 156*b9b17debSTimur Tabi EMAC_CLK_SYS, 157*b9b17debSTimur Tabi EMAC_CLK_CNT 158*b9b17debSTimur Tabi }; 159*b9b17debSTimur Tabi 160*b9b17debSTimur Tabi #define EMAC_LINK_SPEED_UNKNOWN 0x0 161*b9b17debSTimur Tabi #define EMAC_LINK_SPEED_10_HALF BIT(0) 162*b9b17debSTimur Tabi #define EMAC_LINK_SPEED_10_FULL BIT(1) 163*b9b17debSTimur Tabi #define EMAC_LINK_SPEED_100_HALF BIT(2) 164*b9b17debSTimur Tabi #define EMAC_LINK_SPEED_100_FULL BIT(3) 165*b9b17debSTimur Tabi #define EMAC_LINK_SPEED_1GB_FULL BIT(5) 166*b9b17debSTimur Tabi 167*b9b17debSTimur Tabi #define EMAC_MAX_SETUP_LNK_CYCLE 100 168*b9b17debSTimur Tabi 169*b9b17debSTimur Tabi /* Wake On Lan */ 170*b9b17debSTimur Tabi #define EMAC_WOL_PHY 0x00000001 /* PHY Status Change */ 171*b9b17debSTimur Tabi #define EMAC_WOL_MAGIC 0x00000002 /* Magic Packet */ 172*b9b17debSTimur Tabi 173*b9b17debSTimur Tabi struct emac_stats { 174*b9b17debSTimur Tabi /* rx */ 175*b9b17debSTimur Tabi u64 rx_ok; /* good packets */ 176*b9b17debSTimur Tabi u64 rx_bcast; /* good broadcast packets */ 177*b9b17debSTimur Tabi u64 rx_mcast; /* good multicast packets */ 178*b9b17debSTimur Tabi u64 rx_pause; /* pause packet */ 179*b9b17debSTimur Tabi u64 rx_ctrl; /* control packets other than pause frame. */ 180*b9b17debSTimur Tabi u64 rx_fcs_err; /* packets with bad FCS. */ 181*b9b17debSTimur Tabi u64 rx_len_err; /* packets with length mismatch */ 182*b9b17debSTimur Tabi u64 rx_byte_cnt; /* good bytes count (without FCS) */ 183*b9b17debSTimur Tabi u64 rx_runt; /* runt packets */ 184*b9b17debSTimur Tabi u64 rx_frag; /* fragment count */ 185*b9b17debSTimur Tabi u64 rx_sz_64; /* packets that are 64 bytes */ 186*b9b17debSTimur Tabi u64 rx_sz_65_127; /* packets that are 65-127 bytes */ 187*b9b17debSTimur Tabi u64 rx_sz_128_255; /* packets that are 128-255 bytes */ 188*b9b17debSTimur Tabi u64 rx_sz_256_511; /* packets that are 256-511 bytes */ 189*b9b17debSTimur Tabi u64 rx_sz_512_1023; /* packets that are 512-1023 bytes */ 190*b9b17debSTimur Tabi u64 rx_sz_1024_1518; /* packets that are 1024-1518 bytes */ 191*b9b17debSTimur Tabi u64 rx_sz_1519_max; /* packets that are 1519-MTU bytes*/ 192*b9b17debSTimur Tabi u64 rx_sz_ov; /* packets that are >MTU bytes (truncated) */ 193*b9b17debSTimur Tabi u64 rx_rxf_ov; /* packets dropped due to RX FIFO overflow */ 194*b9b17debSTimur Tabi u64 rx_align_err; /* alignment errors */ 195*b9b17debSTimur Tabi u64 rx_bcast_byte_cnt; /* broadcast packets byte count (without FCS) */ 196*b9b17debSTimur Tabi u64 rx_mcast_byte_cnt; /* multicast packets byte count (without FCS) */ 197*b9b17debSTimur Tabi u64 rx_err_addr; /* packets dropped due to address filtering */ 198*b9b17debSTimur Tabi u64 rx_crc_align; /* CRC align errors */ 199*b9b17debSTimur Tabi u64 rx_jabbers; /* jabbers */ 200*b9b17debSTimur Tabi 201*b9b17debSTimur Tabi /* tx */ 202*b9b17debSTimur Tabi u64 tx_ok; /* good packets */ 203*b9b17debSTimur Tabi u64 tx_bcast; /* good broadcast packets */ 204*b9b17debSTimur Tabi u64 tx_mcast; /* good multicast packets */ 205*b9b17debSTimur Tabi u64 tx_pause; /* pause packets */ 206*b9b17debSTimur Tabi u64 tx_exc_defer; /* packets with excessive deferral */ 207*b9b17debSTimur Tabi u64 tx_ctrl; /* control packets other than pause frame */ 208*b9b17debSTimur Tabi u64 tx_defer; /* packets that are deferred. */ 209*b9b17debSTimur Tabi u64 tx_byte_cnt; /* good bytes count (without FCS) */ 210*b9b17debSTimur Tabi u64 tx_sz_64; /* packets that are 64 bytes */ 211*b9b17debSTimur Tabi u64 tx_sz_65_127; /* packets that are 65-127 bytes */ 212*b9b17debSTimur Tabi u64 tx_sz_128_255; /* packets that are 128-255 bytes */ 213*b9b17debSTimur Tabi u64 tx_sz_256_511; /* packets that are 256-511 bytes */ 214*b9b17debSTimur Tabi u64 tx_sz_512_1023; /* packets that are 512-1023 bytes */ 215*b9b17debSTimur Tabi u64 tx_sz_1024_1518; /* packets that are 1024-1518 bytes */ 216*b9b17debSTimur Tabi u64 tx_sz_1519_max; /* packets that are 1519-MTU bytes */ 217*b9b17debSTimur Tabi u64 tx_1_col; /* packets single prior collision */ 218*b9b17debSTimur Tabi u64 tx_2_col; /* packets with multiple prior collisions */ 219*b9b17debSTimur Tabi u64 tx_late_col; /* packets with late collisions */ 220*b9b17debSTimur Tabi u64 tx_abort_col; /* packets aborted due to excess collisions */ 221*b9b17debSTimur Tabi u64 tx_underrun; /* packets aborted due to FIFO underrun */ 222*b9b17debSTimur Tabi u64 tx_rd_eop; /* count of reads beyond EOP */ 223*b9b17debSTimur Tabi u64 tx_len_err; /* packets with length mismatch */ 224*b9b17debSTimur Tabi u64 tx_trunc; /* packets truncated due to size >MTU */ 225*b9b17debSTimur Tabi u64 tx_bcast_byte; /* broadcast packets byte count (without FCS) */ 226*b9b17debSTimur Tabi u64 tx_mcast_byte; /* multicast packets byte count (without FCS) */ 227*b9b17debSTimur Tabi u64 tx_col; /* collisions */ 228*b9b17debSTimur Tabi 229*b9b17debSTimur Tabi spinlock_t lock; /* prevent multiple simultaneous readers */ 230*b9b17debSTimur Tabi }; 231*b9b17debSTimur Tabi 232*b9b17debSTimur Tabi /* RSS hstype Definitions */ 233*b9b17debSTimur Tabi #define EMAC_RSS_HSTYP_IPV4_EN 0x00000001 234*b9b17debSTimur Tabi #define EMAC_RSS_HSTYP_TCP4_EN 0x00000002 235*b9b17debSTimur Tabi #define EMAC_RSS_HSTYP_IPV6_EN 0x00000004 236*b9b17debSTimur Tabi #define EMAC_RSS_HSTYP_TCP6_EN 0x00000008 237*b9b17debSTimur Tabi #define EMAC_RSS_HSTYP_ALL_EN (\ 238*b9b17debSTimur Tabi EMAC_RSS_HSTYP_IPV4_EN |\ 239*b9b17debSTimur Tabi EMAC_RSS_HSTYP_TCP4_EN |\ 240*b9b17debSTimur Tabi EMAC_RSS_HSTYP_IPV6_EN |\ 241*b9b17debSTimur Tabi EMAC_RSS_HSTYP_TCP6_EN) 242*b9b17debSTimur Tabi 243*b9b17debSTimur Tabi #define EMAC_VLAN_TO_TAG(_vlan, _tag) \ 244*b9b17debSTimur Tabi (_tag = ((((_vlan) >> 8) & 0xFF) | (((_vlan) & 0xFF) << 8))) 245*b9b17debSTimur Tabi 246*b9b17debSTimur Tabi #define EMAC_TAG_TO_VLAN(_tag, _vlan) \ 247*b9b17debSTimur Tabi (_vlan = ((((_tag) >> 8) & 0xFF) | (((_tag) & 0xFF) << 8))) 248*b9b17debSTimur Tabi 249*b9b17debSTimur Tabi #define EMAC_DEF_RX_BUF_SIZE 1536 250*b9b17debSTimur Tabi #define EMAC_MAX_JUMBO_PKT_SIZE (9 * 1024) 251*b9b17debSTimur Tabi #define EMAC_MAX_TX_OFFLOAD_THRESH (9 * 1024) 252*b9b17debSTimur Tabi 253*b9b17debSTimur Tabi #define EMAC_MAX_ETH_FRAME_SIZE EMAC_MAX_JUMBO_PKT_SIZE 254*b9b17debSTimur Tabi #define EMAC_MIN_ETH_FRAME_SIZE 68 255*b9b17debSTimur Tabi 256*b9b17debSTimur Tabi #define EMAC_DEF_TX_QUEUES 1 257*b9b17debSTimur Tabi #define EMAC_DEF_RX_QUEUES 1 258*b9b17debSTimur Tabi 259*b9b17debSTimur Tabi #define EMAC_MIN_TX_DESCS 128 260*b9b17debSTimur Tabi #define EMAC_MIN_RX_DESCS 128 261*b9b17debSTimur Tabi 262*b9b17debSTimur Tabi #define EMAC_MAX_TX_DESCS 16383 263*b9b17debSTimur Tabi #define EMAC_MAX_RX_DESCS 2047 264*b9b17debSTimur Tabi 265*b9b17debSTimur Tabi #define EMAC_DEF_TX_DESCS 512 266*b9b17debSTimur Tabi #define EMAC_DEF_RX_DESCS 256 267*b9b17debSTimur Tabi 268*b9b17debSTimur Tabi #define EMAC_DEF_RX_IRQ_MOD 250 269*b9b17debSTimur Tabi #define EMAC_DEF_TX_IRQ_MOD 250 270*b9b17debSTimur Tabi 271*b9b17debSTimur Tabi #define EMAC_WATCHDOG_TIME (5 * HZ) 272*b9b17debSTimur Tabi 273*b9b17debSTimur Tabi /* by default check link every 4 seconds */ 274*b9b17debSTimur Tabi #define EMAC_TRY_LINK_TIMEOUT (4 * HZ) 275*b9b17debSTimur Tabi 276*b9b17debSTimur Tabi /* emac_irq per-device (per-adapter) irq properties. 277*b9b17debSTimur Tabi * @irq: irq number. 278*b9b17debSTimur Tabi * @mask mask to use over status register. 279*b9b17debSTimur Tabi */ 280*b9b17debSTimur Tabi struct emac_irq { 281*b9b17debSTimur Tabi unsigned int irq; 282*b9b17debSTimur Tabi u32 mask; 283*b9b17debSTimur Tabi }; 284*b9b17debSTimur Tabi 285*b9b17debSTimur Tabi /* The device's main data structure */ 286*b9b17debSTimur Tabi struct emac_adapter { 287*b9b17debSTimur Tabi struct net_device *netdev; 288*b9b17debSTimur Tabi struct mii_bus *mii_bus; 289*b9b17debSTimur Tabi struct phy_device *phydev; 290*b9b17debSTimur Tabi 291*b9b17debSTimur Tabi void __iomem *base; 292*b9b17debSTimur Tabi void __iomem *csr; 293*b9b17debSTimur Tabi 294*b9b17debSTimur Tabi struct emac_phy phy; 295*b9b17debSTimur Tabi struct emac_stats stats; 296*b9b17debSTimur Tabi 297*b9b17debSTimur Tabi struct emac_irq irq; 298*b9b17debSTimur Tabi struct clk *clk[EMAC_CLK_CNT]; 299*b9b17debSTimur Tabi 300*b9b17debSTimur Tabi /* All Descriptor memory */ 301*b9b17debSTimur Tabi struct emac_ring_header ring_header; 302*b9b17debSTimur Tabi struct emac_tx_queue tx_q; 303*b9b17debSTimur Tabi struct emac_rx_queue rx_q; 304*b9b17debSTimur Tabi unsigned int tx_desc_cnt; 305*b9b17debSTimur Tabi unsigned int rx_desc_cnt; 306*b9b17debSTimur Tabi unsigned int rrd_size; /* in quad words */ 307*b9b17debSTimur Tabi unsigned int rfd_size; /* in quad words */ 308*b9b17debSTimur Tabi unsigned int tpd_size; /* in quad words */ 309*b9b17debSTimur Tabi 310*b9b17debSTimur Tabi unsigned int rxbuf_size; 311*b9b17debSTimur Tabi 312*b9b17debSTimur Tabi /* Ring parameter */ 313*b9b17debSTimur Tabi u8 tpd_burst; 314*b9b17debSTimur Tabi u8 rfd_burst; 315*b9b17debSTimur Tabi unsigned int dmaw_dly_cnt; 316*b9b17debSTimur Tabi unsigned int dmar_dly_cnt; 317*b9b17debSTimur Tabi enum emac_dma_req_block dmar_block; 318*b9b17debSTimur Tabi enum emac_dma_req_block dmaw_block; 319*b9b17debSTimur Tabi enum emac_dma_order dma_order; 320*b9b17debSTimur Tabi 321*b9b17debSTimur Tabi u32 irq_mod; 322*b9b17debSTimur Tabi u32 preamble; 323*b9b17debSTimur Tabi 324*b9b17debSTimur Tabi struct work_struct work_thread; 325*b9b17debSTimur Tabi 326*b9b17debSTimur Tabi u16 msg_enable; 327*b9b17debSTimur Tabi 328*b9b17debSTimur Tabi struct mutex reset_lock; 329*b9b17debSTimur Tabi }; 330*b9b17debSTimur Tabi 331*b9b17debSTimur Tabi int emac_reinit_locked(struct emac_adapter *adpt); 332*b9b17debSTimur Tabi void emac_reg_update32(void __iomem *addr, u32 mask, u32 val); 333*b9b17debSTimur Tabi irqreturn_t emac_isr(int irq, void *data); 334*b9b17debSTimur Tabi 335*b9b17debSTimur Tabi #endif /* _EMAC_H_ */ 336