1*62cbc408SIlya Yanok /* 2*62cbc408SIlya Yanok * Dave Ethernet Controller driver 3*62cbc408SIlya Yanok * 4*62cbc408SIlya Yanok * Copyright (C) 2008 Dave S.r.l. <www.dave.eu> 5*62cbc408SIlya Yanok * 6*62cbc408SIlya Yanok * This program is free software; you can redistribute it and/or modify 7*62cbc408SIlya Yanok * it under the terms of the GNU General Public License version 2 as 8*62cbc408SIlya Yanok * published by the Free Software Foundation. 9*62cbc408SIlya Yanok */ 10*62cbc408SIlya Yanok 11*62cbc408SIlya Yanok #ifndef __DRIVERS_DNET_H__ 12*62cbc408SIlya Yanok #define __DRIVERS_DNET_H__ 13*62cbc408SIlya Yanok 14*62cbc408SIlya Yanok #define DRIVERNAME "dnet" 15*62cbc408SIlya Yanok 16*62cbc408SIlya Yanok struct dnet_registers { 17*62cbc408SIlya Yanok /* ALL DNET FIFO REGISTERS */ 18*62cbc408SIlya Yanok u32 RX_LEN_FIFO; 19*62cbc408SIlya Yanok u32 RX_DATA_FIFO; 20*62cbc408SIlya Yanok u32 TX_LEN_FIFO; 21*62cbc408SIlya Yanok u32 TX_DATA_FIFO; 22*62cbc408SIlya Yanok u32 pad1[0x3c]; 23*62cbc408SIlya Yanok /* ALL DNET CONTROL/STATUS REGISTERS */ 24*62cbc408SIlya Yanok u32 VERCAPS; 25*62cbc408SIlya Yanok u32 INTR_SRC; 26*62cbc408SIlya Yanok u32 INTR_ENB; 27*62cbc408SIlya Yanok u32 RX_STATUS; 28*62cbc408SIlya Yanok u32 TX_STATUS; 29*62cbc408SIlya Yanok u32 RX_FRAMES_CNT; 30*62cbc408SIlya Yanok u32 TX_FRAMES_CNT; 31*62cbc408SIlya Yanok u32 RX_FIFO_TH; 32*62cbc408SIlya Yanok u32 TX_FIFO_TH; 33*62cbc408SIlya Yanok u32 SYS_CTL; 34*62cbc408SIlya Yanok u32 PAUSE_TMR; 35*62cbc408SIlya Yanok u32 RX_FIFO_WCNT; 36*62cbc408SIlya Yanok u32 TX_FIFO_WCNT; 37*62cbc408SIlya Yanok u32 pad2[0x33]; 38*62cbc408SIlya Yanok /* ALL DNET MAC REGISTERS */ 39*62cbc408SIlya Yanok u32 MACREG_DATA; /* Mac-Reg Data */ 40*62cbc408SIlya Yanok u32 MACREG_ADDR; /* Mac-Reg Addr */ 41*62cbc408SIlya Yanok u32 pad3[0x3e]; 42*62cbc408SIlya Yanok /* ALL DNET RX STATISTICS COUNTERS */ 43*62cbc408SIlya Yanok u32 RX_PKT_IGNR_CNT; 44*62cbc408SIlya Yanok u32 RX_LEN_CHK_ERR_CNT; 45*62cbc408SIlya Yanok u32 RX_LNG_FRM_CNT; 46*62cbc408SIlya Yanok u32 RX_SHRT_FRM_CNT; 47*62cbc408SIlya Yanok u32 RX_IPG_VIOL_CNT; 48*62cbc408SIlya Yanok u32 RX_CRC_ERR_CNT; 49*62cbc408SIlya Yanok u32 RX_OK_PKT_CNT; 50*62cbc408SIlya Yanok u32 RX_CTL_FRM_CNT; 51*62cbc408SIlya Yanok u32 RX_PAUSE_FRM_CNT; 52*62cbc408SIlya Yanok u32 RX_MULTICAST_CNT; 53*62cbc408SIlya Yanok u32 RX_BROADCAST_CNT; 54*62cbc408SIlya Yanok u32 RX_VLAN_TAG_CNT; 55*62cbc408SIlya Yanok u32 RX_PRE_SHRINK_CNT; 56*62cbc408SIlya Yanok u32 RX_DRIB_NIB_CNT; 57*62cbc408SIlya Yanok u32 RX_UNSUP_OPCD_CNT; 58*62cbc408SIlya Yanok u32 RX_BYTE_CNT; 59*62cbc408SIlya Yanok u32 pad4[0x30]; 60*62cbc408SIlya Yanok /* DNET TX STATISTICS COUNTERS */ 61*62cbc408SIlya Yanok u32 TX_UNICAST_CNT; 62*62cbc408SIlya Yanok u32 TX_PAUSE_FRM_CNT; 63*62cbc408SIlya Yanok u32 TX_MULTICAST_CNT; 64*62cbc408SIlya Yanok u32 TX_BRDCAST_CNT; 65*62cbc408SIlya Yanok u32 TX_VLAN_TAG_CNT; 66*62cbc408SIlya Yanok u32 TX_BAD_FCS_CNT; 67*62cbc408SIlya Yanok u32 TX_JUMBO_CNT; 68*62cbc408SIlya Yanok u32 TX_BYTE_CNT; 69*62cbc408SIlya Yanok }; 70*62cbc408SIlya Yanok 71*62cbc408SIlya Yanok /* SOME INTERNAL MAC-CORE REGISTER */ 72*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_REG 0x0 73*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_REG 0x2 74*62cbc408SIlya Yanok #define DNET_INTERNAL_MAX_PKT_SIZE_REG 0x4 75*62cbc408SIlya Yanok #define DNET_INTERNAL_IGP_REG 0x8 76*62cbc408SIlya Yanok #define DNET_INTERNAL_MAC_ADDR_0_REG 0xa 77*62cbc408SIlya Yanok #define DNET_INTERNAL_MAC_ADDR_1_REG 0xc 78*62cbc408SIlya Yanok #define DNET_INTERNAL_MAC_ADDR_2_REG 0xe 79*62cbc408SIlya Yanok #define DNET_INTERNAL_TX_RX_STS_REG 0x12 80*62cbc408SIlya Yanok #define DNET_INTERNAL_GMII_MNG_CTL_REG 0x14 81*62cbc408SIlya Yanok #define DNET_INTERNAL_GMII_MNG_DAT_REG 0x16 82*62cbc408SIlya Yanok 83*62cbc408SIlya Yanok #define DNET_INTERNAL_GMII_MNG_CMD_FIN (1 << 14) 84*62cbc408SIlya Yanok 85*62cbc408SIlya Yanok #define DNET_INTERNAL_WRITE (1 << 31) 86*62cbc408SIlya Yanok 87*62cbc408SIlya Yanok /* MAC-CORE REGISTER FIELDS */ 88*62cbc408SIlya Yanok 89*62cbc408SIlya Yanok /* MAC-CORE MODE REGISTER FIELDS */ 90*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_GBITEN (1 << 0) 91*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_FCEN (1 << 1) 92*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_RXEN (1 << 2) 93*62cbc408SIlya Yanok #define DNET_INTERNAL_MODE_TXEN (1 << 3) 94*62cbc408SIlya Yanok 95*62cbc408SIlya Yanok /* MAC-CORE RXTX CONTROL REGISTER FIELDS */ 96*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_RXSHORTFRAME (1 << 8) 97*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_RXBROADCAST (1 << 7) 98*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_RXMULTICAST (1 << 4) 99*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_RXPAUSE (1 << 3) 100*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_DISTXFCS (1 << 2) 101*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_DISCFXFCS (1 << 1) 102*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_ENPROMISC (1 << 0) 103*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_DROPCONTROL (1 << 6) 104*62cbc408SIlya Yanok #define DNET_INTERNAL_RXTX_CONTROL_ENABLEHALFDUP (1 << 5) 105*62cbc408SIlya Yanok 106*62cbc408SIlya Yanok /* SYSTEM CONTROL REGISTER FIELDS */ 107*62cbc408SIlya Yanok #define DNET_SYS_CTL_IGNORENEXTPKT (1 << 0) 108*62cbc408SIlya Yanok #define DNET_SYS_CTL_SENDPAUSE (1 << 2) 109*62cbc408SIlya Yanok #define DNET_SYS_CTL_RXFIFOFLUSH (1 << 3) 110*62cbc408SIlya Yanok #define DNET_SYS_CTL_TXFIFOFLUSH (1 << 4) 111*62cbc408SIlya Yanok 112*62cbc408SIlya Yanok /* TX STATUS REGISTER FIELDS */ 113*62cbc408SIlya Yanok #define DNET_TX_STATUS_FIFO_ALMOST_EMPTY (1 << 2) 114*62cbc408SIlya Yanok #define DNET_TX_STATUS_FIFO_ALMOST_FULL (1 << 1) 115*62cbc408SIlya Yanok 116*62cbc408SIlya Yanok /* INTERRUPT SOURCE REGISTER FIELDS */ 117*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_PKTSENT (1 << 0) 118*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_FIFOAF (1 << 1) 119*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_FIFOAE (1 << 2) 120*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_DISCFRM (1 << 3) 121*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_FIFOFULL (1 << 4) 122*62cbc408SIlya Yanok #define DNET_INTR_SRC_RX_CMDFIFOAF (1 << 8) 123*62cbc408SIlya Yanok #define DNET_INTR_SRC_RX_CMDFIFOFF (1 << 9) 124*62cbc408SIlya Yanok #define DNET_INTR_SRC_RX_DATAFIFOFF (1 << 10) 125*62cbc408SIlya Yanok #define DNET_INTR_SRC_TX_SUMMARY (1 << 16) 126*62cbc408SIlya Yanok #define DNET_INTR_SRC_RX_SUMMARY (1 << 17) 127*62cbc408SIlya Yanok #define DNET_INTR_SRC_PHY (1 << 19) 128*62cbc408SIlya Yanok 129*62cbc408SIlya Yanok /* INTERRUPT ENABLE REGISTER FIELDS */ 130*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_PKTSENT (1 << 0) 131*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_FIFOAF (1 << 1) 132*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_FIFOAE (1 << 2) 133*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_DISCFRM (1 << 3) 134*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_FIFOFULL (1 << 4) 135*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_PKTRDY (1 << 8) 136*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_FIFOAF (1 << 9) 137*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_FIFOERR (1 << 10) 138*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_ERROR (1 << 11) 139*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_FIFOFULL (1 << 12) 140*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_FIFOAE (1 << 13) 141*62cbc408SIlya Yanok #define DNET_INTR_ENB_TX_SUMMARY (1 << 16) 142*62cbc408SIlya Yanok #define DNET_INTR_ENB_RX_SUMMARY (1 << 17) 143*62cbc408SIlya Yanok #define DNET_INTR_ENB_GLOBAL_ENABLE (1 << 18) 144*62cbc408SIlya Yanok 145*62cbc408SIlya Yanok /* 146*62cbc408SIlya Yanok * Capabilities. Used by the driver to know the capabilities that 147*62cbc408SIlya Yanok * the ethernet controller inside the FPGA have. 148*62cbc408SIlya Yanok */ 149*62cbc408SIlya Yanok 150*62cbc408SIlya Yanok #define DNET_HAS_MDIO (1 << 0) 151*62cbc408SIlya Yanok #define DNET_HAS_IRQ (1 << 1) 152*62cbc408SIlya Yanok #define DNET_HAS_GIGABIT (1 << 2) 153*62cbc408SIlya Yanok #define DNET_HAS_DMA (1 << 3) 154*62cbc408SIlya Yanok 155*62cbc408SIlya Yanok #define DNET_HAS_MII (1 << 4) /* or GMII */ 156*62cbc408SIlya Yanok #define DNET_HAS_RMII (1 << 5) /* or RGMII */ 157*62cbc408SIlya Yanok 158*62cbc408SIlya Yanok #define DNET_CAPS_MASK 0xFFFF 159*62cbc408SIlya Yanok 160*62cbc408SIlya Yanok #define DNET_FIFO_SIZE 2048 /* 2K x 32 bit */ 161*62cbc408SIlya Yanok #define DNET_FIFO_TX_DATA_AF_TH (DNET_FIFO_SIZE - 384) /* 384 = 1536 / 4 */ 162*62cbc408SIlya Yanok #define DNET_FIFO_TX_DATA_AE_TH (384) 163*62cbc408SIlya Yanok 164*62cbc408SIlya Yanok #define DNET_FIFO_RX_CMD_AF_TH (1 << 16) /* just one frame inside the FIFO */ 165*62cbc408SIlya Yanok 166*62cbc408SIlya Yanok #endif 167