root/drivers/net/ethernet/moxa/moxart_ether.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* MOXA ART Ethernet (RTL8201CP) driver.
   2  *
   3  * Copyright (C) 2013 Jonas Jensen
   4  *
   5  * Jonas Jensen <jonas.jensen@gmail.com>
   6  *
   7  * Based on code from
   8  * Moxa Technology Co., Ltd. <www.moxa.com>
   9  *
  10  * This file is licensed under the terms of the GNU General Public
  11  * License version 2.  This program is licensed "as is" without any
  12  * warranty of any kind, whether express or implied.
  13  */
  14 
  15 #ifndef _MOXART_ETHERNET_H
  16 #define _MOXART_ETHERNET_H
  17 
  18 #define TX_REG_OFFSET_DESC0     0
  19 #define TX_REG_OFFSET_DESC1     4
  20 #define TX_REG_OFFSET_DESC2     8
  21 #define TX_REG_DESC_SIZE        16
  22 
  23 #define RX_REG_OFFSET_DESC0     0
  24 #define RX_REG_OFFSET_DESC1     4
  25 #define RX_REG_OFFSET_DESC2     8
  26 #define RX_REG_DESC_SIZE        16
  27 
  28 #define TX_DESC0_PKT_LATE_COL   0x1             /* abort, late collision */
  29 #define TX_DESC0_RX_PKT_EXS_COL 0x2             /* abort, >16 collisions */
  30 #define TX_DESC0_DMA_OWN        0x80000000      /* owned by controller */
  31 #define TX_DESC1_BUF_SIZE_MASK  0x7ff
  32 #define TX_DESC1_LTS            0x8000000       /* last TX packet */
  33 #define TX_DESC1_FTS            0x10000000      /* first TX packet */
  34 #define TX_DESC1_FIFO_COMPLETE  0x20000000
  35 #define TX_DESC1_INTR_COMPLETE  0x40000000
  36 #define TX_DESC1_END            0x80000000
  37 #define TX_DESC2_ADDRESS_PHYS   0
  38 #define TX_DESC2_ADDRESS_VIRT   4
  39 
  40 #define RX_DESC0_FRAME_LEN      0
  41 #define RX_DESC0_FRAME_LEN_MASK 0x7FF
  42 #define RX_DESC0_MULTICAST      0x10000
  43 #define RX_DESC0_BROADCAST      0x20000
  44 #define RX_DESC0_ERR            0x40000
  45 #define RX_DESC0_CRC_ERR        0x80000
  46 #define RX_DESC0_FTL            0x100000
  47 #define RX_DESC0_RUNT           0x200000        /* packet less than 64 bytes */
  48 #define RX_DESC0_ODD_NB         0x400000        /* receive odd nibbles */
  49 #define RX_DESC0_LRS            0x10000000      /* last receive segment */
  50 #define RX_DESC0_FRS            0x20000000      /* first receive segment */
  51 #define RX_DESC0_DMA_OWN        0x80000000
  52 #define RX_DESC1_BUF_SIZE_MASK  0x7FF
  53 #define RX_DESC1_END            0x80000000
  54 #define RX_DESC2_ADDRESS_PHYS   0
  55 #define RX_DESC2_ADDRESS_VIRT   4
  56 
  57 #define TX_DESC_NUM             64
  58 #define TX_DESC_NUM_MASK        (TX_DESC_NUM - 1)
  59 #define TX_NEXT(N)              (((N) + 1) & (TX_DESC_NUM_MASK))
  60 #define TX_BUF_SIZE             1600
  61 #define TX_BUF_SIZE_MAX         (TX_DESC1_BUF_SIZE_MASK + 1)
  62 #define TX_WAKE_THRESHOLD       16
  63 
  64 #define RX_DESC_NUM             64
  65 #define RX_DESC_NUM_MASK        (RX_DESC_NUM - 1)
  66 #define RX_NEXT(N)              (((N) + 1) & (RX_DESC_NUM_MASK))
  67 #define RX_BUF_SIZE             1600
  68 #define RX_BUF_SIZE_MAX         (RX_DESC1_BUF_SIZE_MASK + 1)
  69 
  70 #define REG_INTERRUPT_STATUS    0
  71 #define REG_INTERRUPT_MASK      4
  72 #define REG_MAC_MS_ADDRESS      8
  73 #define REG_MAC_LS_ADDRESS      12
  74 #define REG_MCAST_HASH_TABLE0   16
  75 #define REG_MCAST_HASH_TABLE1   20
  76 #define REG_TX_POLL_DEMAND      24
  77 #define REG_RX_POLL_DEMAND      28
  78 #define REG_TXR_BASE_ADDRESS    32
  79 #define REG_RXR_BASE_ADDRESS    36
  80 #define REG_INT_TIMER_CTRL      40
  81 #define REG_APOLL_TIMER_CTRL    44
  82 #define REG_DMA_BLEN_CTRL       48
  83 #define REG_RESERVED1           52
  84 #define REG_MAC_CTRL            136
  85 #define REG_MAC_STATUS          140
  86 #define REG_PHY_CTRL            144
  87 #define REG_PHY_WRITE_DATA      148
  88 #define REG_FLOW_CTRL           152
  89 #define REG_BACK_PRESSURE       156
  90 #define REG_RESERVED2           160
  91 #define REG_TEST_SEED           196
  92 #define REG_DMA_FIFO_STATE      200
  93 #define REG_TEST_MODE           204
  94 #define REG_RESERVED3           208
  95 #define REG_TX_COL_COUNTER      212
  96 #define REG_RPF_AEP_COUNTER     216
  97 #define REG_XM_PG_COUNTER       220
  98 #define REG_RUNT_TLC_COUNTER    224
  99 #define REG_CRC_FTL_COUNTER     228
 100 #define REG_RLC_RCC_COUNTER     232
 101 #define REG_BROC_COUNTER        236
 102 #define REG_MULCA_COUNTER       240
 103 #define REG_RP_COUNTER          244
 104 #define REG_XP_COUNTER          248
 105 
 106 #define REG_PHY_CTRL_OFFSET     0x0
 107 #define REG_PHY_STATUS          0x1
 108 #define REG_PHY_ID1             0x2
 109 #define REG_PHY_ID2             0x3
 110 #define REG_PHY_ANA             0x4
 111 #define REG_PHY_ANLPAR          0x5
 112 #define REG_PHY_ANE             0x6
 113 #define REG_PHY_ECTRL1          0x10
 114 #define REG_PHY_QPDS            0x11
 115 #define REG_PHY_10BOP           0x12
 116 #define REG_PHY_ECTRL2          0x13
 117 #define REG_PHY_FTMAC100_WRITE  0x8000000
 118 #define REG_PHY_FTMAC100_READ   0x4000000
 119 
 120 /* REG_INTERRUPT_STATUS */
 121 #define RPKT_FINISH             BIT(0)  /* DMA data received */
 122 #define NORXBUF                 BIT(1)  /* receive buffer unavailable */
 123 #define XPKT_FINISH             BIT(2)  /* DMA moved data to TX FIFO */
 124 #define NOTXBUF                 BIT(3)  /* transmit buffer unavailable */
 125 #define XPKT_OK_INT_STS         BIT(4)  /* transmit to ethernet success */
 126 #define XPKT_LOST_INT_STS       BIT(5)  /* transmit ethernet lost (collision) */
 127 #define RPKT_SAV                BIT(6)  /* FIFO receive success */
 128 #define RPKT_LOST_INT_STS       BIT(7)  /* FIFO full, receive failed */
 129 #define AHB_ERR                 BIT(8)  /* AHB error */
 130 #define PHYSTS_CHG              BIT(9)  /* PHY link status change */
 131 
 132 /* REG_INTERRUPT_MASK */
 133 #define RPKT_FINISH_M           BIT(0)
 134 #define NORXBUF_M               BIT(1)
 135 #define XPKT_FINISH_M           BIT(2)
 136 #define NOTXBUF_M               BIT(3)
 137 #define XPKT_OK_M               BIT(4)
 138 #define XPKT_LOST_M             BIT(5)
 139 #define RPKT_SAV_M              BIT(6)
 140 #define RPKT_LOST_M             BIT(7)
 141 #define AHB_ERR_M               BIT(8)
 142 #define PHYSTS_CHG_M            BIT(9)
 143 
 144 /* REG_MAC_MS_ADDRESS */
 145 #define MAC_MADR_MASK           0xffff  /* 2 MSB MAC address */
 146 
 147 /* REG_INT_TIMER_CTRL */
 148 #define TXINT_TIME_SEL          BIT(15) /* TX cycle time period */
 149 #define TXINT_THR_MASK          0x7000
 150 #define TXINT_CNT_MASK          0xf00
 151 #define RXINT_TIME_SEL          BIT(7)  /* RX cycle time period */
 152 #define RXINT_THR_MASK          0x70
 153 #define RXINT_CNT_MASK          0xF
 154 
 155 /* REG_APOLL_TIMER_CTRL */
 156 #define TXPOLL_TIME_SEL         BIT(12) /* TX poll time period */
 157 #define TXPOLL_CNT_MASK         0xf00
 158 #define TXPOLL_CNT_SHIFT_BIT    8
 159 #define RXPOLL_TIME_SEL         BIT(4)  /* RX poll time period */
 160 #define RXPOLL_CNT_MASK         0xF
 161 #define RXPOLL_CNT_SHIFT_BIT    0
 162 
 163 /* REG_DMA_BLEN_CTRL */
 164 #define RX_THR_EN               BIT(9)  /* RX FIFO threshold arbitration */
 165 #define RXFIFO_HTHR_MASK        0x1c0
 166 #define RXFIFO_LTHR_MASK        0x38
 167 #define INCR16_EN               BIT(2)  /* AHB bus INCR16 burst command */
 168 #define INCR8_EN                BIT(1)  /* AHB bus INCR8 burst command */
 169 #define INCR4_EN                BIT(0)  /* AHB bus INCR4 burst command */
 170 
 171 /* REG_MAC_CTRL */
 172 #define RX_BROADPKT             BIT(17) /* receive broadcast packets */
 173 #define RX_MULTIPKT             BIT(16) /* receive all multicast packets */
 174 #define FULLDUP                 BIT(15) /* full duplex */
 175 #define CRC_APD                 BIT(14) /* append CRC to transmitted packet */
 176 #define RCV_ALL                 BIT(12) /* ignore incoming packet destination */
 177 #define RX_FTL                  BIT(11) /* accept packets larger than 1518 B */
 178 #define RX_RUNT                 BIT(10) /* accept packets smaller than 64 B */
 179 #define HT_MULTI_EN             BIT(9)  /* accept on hash and mcast pass */
 180 #define RCV_EN                  BIT(8)  /* receiver enable */
 181 #define ENRX_IN_HALFTX          BIT(6)  /* enable receive in half duplex mode */
 182 #define XMT_EN                  BIT(5)  /* transmit enable */
 183 #define CRC_DIS                 BIT(4)  /* disable CRC check when receiving */
 184 #define LOOP_EN                 BIT(3)  /* internal loop-back */
 185 #define SW_RST                  BIT(2)  /* software reset, last 64 AHB clocks */
 186 #define RDMA_EN                 BIT(1)  /* enable receive DMA chan */
 187 #define XDMA_EN                 BIT(0)  /* enable transmit DMA chan */
 188 
 189 /* REG_MAC_STATUS */
 190 #define COL_EXCEED              BIT(11) /* more than 16 collisions */
 191 #define LATE_COL                BIT(10) /* transmit late collision detected */
 192 #define XPKT_LOST               BIT(9)  /* transmit to ethernet lost */
 193 #define XPKT_OK                 BIT(8)  /* transmit to ethernet success */
 194 #define RUNT_MAC_STS            BIT(7)  /* receive runt detected */
 195 #define FTL_MAC_STS             BIT(6)  /* receive frame too long detected */
 196 #define CRC_ERR_MAC_STS         BIT(5)
 197 #define RPKT_LOST               BIT(4)  /* RX FIFO full, receive failed */
 198 #define RPKT_SAVE               BIT(3)  /* RX FIFO receive success */
 199 #define COL                     BIT(2)  /* collision, incoming packet dropped */
 200 #define MCPU_BROADCAST          BIT(1)
 201 #define MCPU_MULTICAST          BIT(0)
 202 
 203 /* REG_PHY_CTRL */
 204 #define MIIWR                   BIT(27) /* init write sequence (auto cleared)*/
 205 #define MIIRD                   BIT(26)
 206 #define REGAD_MASK              0x3e00000
 207 #define PHYAD_MASK              0x1f0000
 208 #define MIIRDATA_MASK           0xffff
 209 
 210 /* REG_PHY_WRITE_DATA */
 211 #define MIIWDATA_MASK           0xffff
 212 
 213 /* REG_FLOW_CTRL */
 214 #define PAUSE_TIME_MASK         0xffff0000
 215 #define FC_HIGH_MASK            0xf000
 216 #define FC_LOW_MASK             0xf00
 217 #define RX_PAUSE                BIT(4)  /* receive pause frame */
 218 #define TX_PAUSED               BIT(3)  /* transmit pause due to receive */
 219 #define FCTHR_EN                BIT(2)  /* enable threshold mode. */
 220 #define TX_PAUSE                BIT(1)  /* transmit pause frame */
 221 #define FC_EN                   BIT(0)  /* flow control mode enable */
 222 
 223 /* REG_BACK_PRESSURE */
 224 #define BACKP_LOW_MASK          0xf00
 225 #define BACKP_JAM_LEN_MASK      0xf0
 226 #define BACKP_MODE              BIT(1)  /* address mode */
 227 #define BACKP_ENABLE            BIT(0)
 228 
 229 /* REG_TEST_SEED */
 230 #define TEST_SEED_MASK          0x3fff
 231 
 232 /* REG_DMA_FIFO_STATE */
 233 #define TX_DMA_REQUEST          BIT(31)
 234 #define RX_DMA_REQUEST          BIT(30)
 235 #define TX_DMA_GRANT            BIT(29)
 236 #define RX_DMA_GRANT            BIT(28)
 237 #define TX_FIFO_EMPTY           BIT(27)
 238 #define RX_FIFO_EMPTY           BIT(26)
 239 #define TX_DMA2_SM_MASK         0x7000
 240 #define TX_DMA1_SM_MASK         0xf00
 241 #define RX_DMA2_SM_MASK         0x70
 242 #define RX_DMA1_SM_MASK         0xF
 243 
 244 /* REG_TEST_MODE */
 245 #define SINGLE_PKT              BIT(26) /* single packet mode */
 246 #define PTIMER_TEST             BIT(25) /* automatic polling timer test mode */
 247 #define ITIMER_TEST             BIT(24) /* interrupt timer test mode */
 248 #define TEST_SEED_SELECT        BIT(22)
 249 #define SEED_SELECT             BIT(21)
 250 #define TEST_MODE               BIT(20)
 251 #define TEST_TIME_MASK          0xffc00
 252 #define TEST_EXCEL_MASK         0x3e0
 253 
 254 /* REG_TX_COL_COUNTER */
 255 #define TX_MCOL_MASK            0xffff0000
 256 #define TX_MCOL_SHIFT_BIT       16
 257 #define TX_SCOL_MASK            0xffff
 258 #define TX_SCOL_SHIFT_BIT       0
 259 
 260 /* REG_RPF_AEP_COUNTER */
 261 #define RPF_MASK                0xffff0000
 262 #define RPF_SHIFT_BIT           16
 263 #define AEP_MASK                0xffff
 264 #define AEP_SHIFT_BIT           0
 265 
 266 /* REG_XM_PG_COUNTER */
 267 #define XM_MASK                 0xffff0000
 268 #define XM_SHIFT_BIT            16
 269 #define PG_MASK                 0xffff
 270 #define PG_SHIFT_BIT            0
 271 
 272 /* REG_RUNT_TLC_COUNTER */
 273 #define RUNT_CNT_MASK           0xffff0000
 274 #define RUNT_CNT_SHIFT_BIT      16
 275 #define TLCC_MASK               0xffff
 276 #define TLCC_SHIFT_BIT          0
 277 
 278 /* REG_CRC_FTL_COUNTER */
 279 #define CRCER_CNT_MASK          0xffff0000
 280 #define CRCER_CNT_SHIFT_BIT     16
 281 #define FTL_CNT_MASK            0xffff
 282 #define FTL_CNT_SHIFT_BIT       0
 283 
 284 /* REG_RLC_RCC_COUNTER */
 285 #define RLC_MASK                0xffff0000
 286 #define RLC_SHIFT_BIT           16
 287 #define RCC_MASK                0xffff
 288 #define RCC_SHIFT_BIT           0
 289 
 290 /* REG_PHY_STATUS */
 291 #define AN_COMPLETE             0x20
 292 #define LINK_STATUS             0x4
 293 
 294 struct moxart_mac_priv_t {
 295         struct platform_device *pdev;
 296         void __iomem *base;
 297         unsigned int reg_maccr;
 298         unsigned int reg_imr;
 299         struct napi_struct napi;
 300         struct net_device *ndev;
 301 
 302         dma_addr_t rx_base;
 303         dma_addr_t rx_mapping[RX_DESC_NUM];
 304         void *rx_desc_base;
 305         unsigned char *rx_buf_base;
 306         unsigned char *rx_buf[RX_DESC_NUM];
 307         unsigned int rx_head;
 308         unsigned int rx_buf_size;
 309 
 310         dma_addr_t tx_base;
 311         dma_addr_t tx_mapping[TX_DESC_NUM];
 312         void *tx_desc_base;
 313         unsigned char *tx_buf_base;
 314         unsigned char *tx_buf[RX_DESC_NUM];
 315         unsigned int tx_head;
 316         unsigned int tx_buf_size;
 317 
 318         spinlock_t txlock;
 319         unsigned int tx_len[TX_DESC_NUM];
 320         struct sk_buff *tx_skb[TX_DESC_NUM];
 321         unsigned int tx_tail;
 322 };
 323 
 324 #if TX_BUF_SIZE >= TX_BUF_SIZE_MAX
 325 #error MOXA ART Ethernet device driver TX buffer is too large!
 326 #endif
 327 #if RX_BUF_SIZE >= RX_BUF_SIZE_MAX
 328 #error MOXA ART Ethernet device driver RX buffer is too large!
 329 #endif
 330 
 331 #endif

/* [<][>][^][v][top][bottom][index][help] */