0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef __TSI108_ETH_H
0015 #define __TSI108_ETH_H
0016
0017 #include <linux/types.h>
0018
0019 #define TSI_WRITE(offset, val) \
0020 out_be32((data->regs + (offset)), val)
0021
0022 #define TSI_READ(offset) \
0023 in_be32((data->regs + (offset)))
0024
0025 #define TSI_WRITE_PHY(offset, val) \
0026 out_be32((data->phyregs + (offset)), val)
0027
0028 #define TSI_READ_PHY(offset) \
0029 in_be32((data->phyregs + (offset)))
0030
0031
0032
0033
0034
0035 #define TSI108_ETH_PORT_NUM 2
0036 #define TSI108_PBM_PORT 2
0037 #define TSI108_SDRAM_PORT 4
0038
0039 #define TSI108_MAC_CFG1 (0x000)
0040 #define TSI108_MAC_CFG1_SOFTRST (1 << 31)
0041 #define TSI108_MAC_CFG1_LOOPBACK (1 << 8)
0042 #define TSI108_MAC_CFG1_RXEN (1 << 2)
0043 #define TSI108_MAC_CFG1_TXEN (1 << 0)
0044
0045 #define TSI108_MAC_CFG2 (0x004)
0046 #define TSI108_MAC_CFG2_DFLT_PREAMBLE (7 << 12)
0047 #define TSI108_MAC_CFG2_IFACE_MASK (3 << 8)
0048 #define TSI108_MAC_CFG2_NOGIG (1 << 8)
0049 #define TSI108_MAC_CFG2_GIG (2 << 8)
0050 #define TSI108_MAC_CFG2_PADCRC (1 << 2)
0051 #define TSI108_MAC_CFG2_FULLDUPLEX (1 << 0)
0052
0053 #define TSI108_MAC_MII_MGMT_CFG (0x020)
0054 #define TSI108_MAC_MII_MGMT_CLK (7 << 0)
0055 #define TSI108_MAC_MII_MGMT_RST (1 << 31)
0056
0057 #define TSI108_MAC_MII_CMD (0x024)
0058 #define TSI108_MAC_MII_CMD_READ (1 << 0)
0059
0060 #define TSI108_MAC_MII_ADDR (0x028)
0061 #define TSI108_MAC_MII_ADDR_REG 0
0062 #define TSI108_MAC_MII_ADDR_PHY 8
0063
0064 #define TSI108_MAC_MII_DATAOUT (0x02c)
0065 #define TSI108_MAC_MII_DATAIN (0x030)
0066
0067 #define TSI108_MAC_MII_IND (0x034)
0068 #define TSI108_MAC_MII_IND_NOTVALID (1 << 2)
0069 #define TSI108_MAC_MII_IND_SCANNING (1 << 1)
0070 #define TSI108_MAC_MII_IND_BUSY (1 << 0)
0071
0072 #define TSI108_MAC_IFCTRL (0x038)
0073 #define TSI108_MAC_IFCTRL_PHYMODE (1 << 24)
0074
0075 #define TSI108_MAC_ADDR1 (0x040)
0076 #define TSI108_MAC_ADDR2 (0x044)
0077
0078 #define TSI108_STAT_RXBYTES (0x06c)
0079 #define TSI108_STAT_RXBYTES_CARRY (1 << 24)
0080
0081 #define TSI108_STAT_RXPKTS (0x070)
0082 #define TSI108_STAT_RXPKTS_CARRY (1 << 18)
0083
0084 #define TSI108_STAT_RXFCS (0x074)
0085 #define TSI108_STAT_RXFCS_CARRY (1 << 12)
0086
0087 #define TSI108_STAT_RXMCAST (0x078)
0088 #define TSI108_STAT_RXMCAST_CARRY (1 << 18)
0089
0090 #define TSI108_STAT_RXALIGN (0x08c)
0091 #define TSI108_STAT_RXALIGN_CARRY (1 << 12)
0092
0093 #define TSI108_STAT_RXLENGTH (0x090)
0094 #define TSI108_STAT_RXLENGTH_CARRY (1 << 12)
0095
0096 #define TSI108_STAT_RXRUNT (0x09c)
0097 #define TSI108_STAT_RXRUNT_CARRY (1 << 12)
0098
0099 #define TSI108_STAT_RXJUMBO (0x0a0)
0100 #define TSI108_STAT_RXJUMBO_CARRY (1 << 12)
0101
0102 #define TSI108_STAT_RXFRAG (0x0a4)
0103 #define TSI108_STAT_RXFRAG_CARRY (1 << 12)
0104
0105 #define TSI108_STAT_RXJABBER (0x0a8)
0106 #define TSI108_STAT_RXJABBER_CARRY (1 << 12)
0107
0108 #define TSI108_STAT_RXDROP (0x0ac)
0109 #define TSI108_STAT_RXDROP_CARRY (1 << 12)
0110
0111 #define TSI108_STAT_TXBYTES (0x0b0)
0112 #define TSI108_STAT_TXBYTES_CARRY (1 << 24)
0113
0114 #define TSI108_STAT_TXPKTS (0x0b4)
0115 #define TSI108_STAT_TXPKTS_CARRY (1 << 18)
0116
0117 #define TSI108_STAT_TXEXDEF (0x0c8)
0118 #define TSI108_STAT_TXEXDEF_CARRY (1 << 12)
0119
0120 #define TSI108_STAT_TXEXCOL (0x0d8)
0121 #define TSI108_STAT_TXEXCOL_CARRY (1 << 12)
0122
0123 #define TSI108_STAT_TXTCOL (0x0dc)
0124 #define TSI108_STAT_TXTCOL_CARRY (1 << 13)
0125
0126 #define TSI108_STAT_TXPAUSEDROP (0x0e4)
0127 #define TSI108_STAT_TXPAUSEDROP_CARRY (1 << 12)
0128
0129 #define TSI108_STAT_CARRY1 (0x100)
0130 #define TSI108_STAT_CARRY1_RXBYTES (1 << 16)
0131 #define TSI108_STAT_CARRY1_RXPKTS (1 << 15)
0132 #define TSI108_STAT_CARRY1_RXFCS (1 << 14)
0133 #define TSI108_STAT_CARRY1_RXMCAST (1 << 13)
0134 #define TSI108_STAT_CARRY1_RXALIGN (1 << 8)
0135 #define TSI108_STAT_CARRY1_RXLENGTH (1 << 7)
0136 #define TSI108_STAT_CARRY1_RXRUNT (1 << 4)
0137 #define TSI108_STAT_CARRY1_RXJUMBO (1 << 3)
0138 #define TSI108_STAT_CARRY1_RXFRAG (1 << 2)
0139 #define TSI108_STAT_CARRY1_RXJABBER (1 << 1)
0140 #define TSI108_STAT_CARRY1_RXDROP (1 << 0)
0141
0142 #define TSI108_STAT_CARRY2 (0x104)
0143 #define TSI108_STAT_CARRY2_TXBYTES (1 << 13)
0144 #define TSI108_STAT_CARRY2_TXPKTS (1 << 12)
0145 #define TSI108_STAT_CARRY2_TXEXDEF (1 << 7)
0146 #define TSI108_STAT_CARRY2_TXEXCOL (1 << 3)
0147 #define TSI108_STAT_CARRY2_TXTCOL (1 << 2)
0148 #define TSI108_STAT_CARRY2_TXPAUSE (1 << 0)
0149
0150 #define TSI108_STAT_CARRYMASK1 (0x108)
0151 #define TSI108_STAT_CARRYMASK2 (0x10c)
0152
0153 #define TSI108_EC_PORTCTRL (0x200)
0154 #define TSI108_EC_PORTCTRL_STATRST (1 << 31)
0155 #define TSI108_EC_PORTCTRL_STATEN (1 << 28)
0156 #define TSI108_EC_PORTCTRL_NOGIG (1 << 18)
0157 #define TSI108_EC_PORTCTRL_HALFDUPLEX (1 << 16)
0158
0159 #define TSI108_EC_INTSTAT (0x204)
0160 #define TSI108_EC_INTMASK (0x208)
0161
0162 #define TSI108_INT_ANY (1 << 31)
0163 #define TSI108_INT_SFN (1 << 30)
0164 #define TSI108_INT_RXIDLE (1 << 29)
0165 #define TSI108_INT_RXABORT (1 << 28)
0166 #define TSI108_INT_RXERROR (1 << 27)
0167 #define TSI108_INT_RXOVERRUN (1 << 26)
0168 #define TSI108_INT_RXTHRESH (1 << 25)
0169 #define TSI108_INT_RXWAIT (1 << 24)
0170 #define TSI108_INT_RXQUEUE0 (1 << 16)
0171 #define TSI108_INT_STATCARRY (1 << 15)
0172 #define TSI108_INT_TXIDLE (1 << 13)
0173 #define TSI108_INT_TXABORT (1 << 12)
0174 #define TSI108_INT_TXERROR (1 << 11)
0175 #define TSI108_INT_TXUNDERRUN (1 << 10)
0176 #define TSI108_INT_TXTHRESH (1 << 9)
0177 #define TSI108_INT_TXWAIT (1 << 8)
0178 #define TSI108_INT_TXQUEUE0 (1 << 0)
0179
0180 #define TSI108_EC_TXCFG (0x220)
0181 #define TSI108_EC_TXCFG_RST (1 << 31)
0182
0183 #define TSI108_EC_TXCTRL (0x224)
0184 #define TSI108_EC_TXCTRL_IDLEINT (1 << 31)
0185 #define TSI108_EC_TXCTRL_ABORT (1 << 30)
0186 #define TSI108_EC_TXCTRL_GO (1 << 15)
0187 #define TSI108_EC_TXCTRL_QUEUE0 (1 << 0)
0188
0189 #define TSI108_EC_TXSTAT (0x228)
0190 #define TSI108_EC_TXSTAT_ACTIVE (1 << 15)
0191 #define TSI108_EC_TXSTAT_QUEUE0 (1 << 0)
0192
0193 #define TSI108_EC_TXESTAT (0x22c)
0194 #define TSI108_EC_TXESTAT_Q0_ERR (1 << 24)
0195 #define TSI108_EC_TXESTAT_Q0_DESCINT (1 << 16)
0196 #define TSI108_EC_TXESTAT_Q0_EOF (1 << 8)
0197 #define TSI108_EC_TXESTAT_Q0_EOQ (1 << 0)
0198
0199 #define TSI108_EC_TXERR (0x278)
0200
0201 #define TSI108_EC_TXQ_CFG (0x280)
0202 #define TSI108_EC_TXQ_CFG_DESC_INT (1 << 20)
0203 #define TSI108_EC_TXQ_CFG_EOQ_OWN_INT (1 << 19)
0204 #define TSI108_EC_TXQ_CFG_WSWP (1 << 11)
0205 #define TSI108_EC_TXQ_CFG_BSWP (1 << 10)
0206 #define TSI108_EC_TXQ_CFG_SFNPORT 0
0207
0208 #define TSI108_EC_TXQ_BUFCFG (0x284)
0209 #define TSI108_EC_TXQ_BUFCFG_BURST8 (0 << 8)
0210 #define TSI108_EC_TXQ_BUFCFG_BURST32 (1 << 8)
0211 #define TSI108_EC_TXQ_BUFCFG_BURST128 (2 << 8)
0212 #define TSI108_EC_TXQ_BUFCFG_BURST256 (3 << 8)
0213 #define TSI108_EC_TXQ_BUFCFG_WSWP (1 << 11)
0214 #define TSI108_EC_TXQ_BUFCFG_BSWP (1 << 10)
0215 #define TSI108_EC_TXQ_BUFCFG_SFNPORT 0
0216
0217 #define TSI108_EC_TXQ_PTRLOW (0x288)
0218
0219 #define TSI108_EC_TXQ_PTRHIGH (0x28c)
0220 #define TSI108_EC_TXQ_PTRHIGH_VALID (1 << 31)
0221
0222 #define TSI108_EC_TXTHRESH (0x230)
0223 #define TSI108_EC_TXTHRESH_STARTFILL 0
0224 #define TSI108_EC_TXTHRESH_STOPFILL 16
0225
0226 #define TSI108_EC_RXCFG (0x320)
0227 #define TSI108_EC_RXCFG_RST (1 << 31)
0228
0229 #define TSI108_EC_RXSTAT (0x328)
0230 #define TSI108_EC_RXSTAT_ACTIVE (1 << 15)
0231 #define TSI108_EC_RXSTAT_QUEUE0 (1 << 0)
0232
0233 #define TSI108_EC_RXESTAT (0x32c)
0234 #define TSI108_EC_RXESTAT_Q0_ERR (1 << 24)
0235 #define TSI108_EC_RXESTAT_Q0_DESCINT (1 << 16)
0236 #define TSI108_EC_RXESTAT_Q0_EOF (1 << 8)
0237 #define TSI108_EC_RXESTAT_Q0_EOQ (1 << 0)
0238
0239 #define TSI108_EC_HASHADDR (0x360)
0240 #define TSI108_EC_HASHADDR_AUTOINC (1 << 31)
0241 #define TSI108_EC_HASHADDR_DO1STREAD (1 << 30)
0242 #define TSI108_EC_HASHADDR_UNICAST (0 << 4)
0243 #define TSI108_EC_HASHADDR_MCAST (1 << 4)
0244
0245 #define TSI108_EC_HASHDATA (0x364)
0246
0247 #define TSI108_EC_RXQ_PTRLOW (0x388)
0248
0249 #define TSI108_EC_RXQ_PTRHIGH (0x38c)
0250 #define TSI108_EC_RXQ_PTRHIGH_VALID (1 << 31)
0251
0252
0253 #define TSI108_EC_RXCFG_SE (1 << 13)
0254
0255 #define TSI108_EC_RXCFG_UFE (1 << 12)
0256
0257 #define TSI108_EC_RXCFG_MFE (1 << 11)
0258
0259 #define TSI108_EC_RXCFG_BFE (1 << 10)
0260 #define TSI108_EC_RXCFG_UC_HASH (1 << 9)
0261 #define TSI108_EC_RXCFG_MC_HASH (1 << 8)
0262
0263 #define TSI108_EC_RXQ_CFG (0x380)
0264 #define TSI108_EC_RXQ_CFG_DESC_INT (1 << 20)
0265 #define TSI108_EC_RXQ_CFG_EOQ_OWN_INT (1 << 19)
0266 #define TSI108_EC_RXQ_CFG_WSWP (1 << 11)
0267 #define TSI108_EC_RXQ_CFG_BSWP (1 << 10)
0268 #define TSI108_EC_RXQ_CFG_SFNPORT 0
0269
0270 #define TSI108_EC_RXQ_BUFCFG (0x384)
0271 #define TSI108_EC_RXQ_BUFCFG_BURST8 (0 << 8)
0272 #define TSI108_EC_RXQ_BUFCFG_BURST32 (1 << 8)
0273 #define TSI108_EC_RXQ_BUFCFG_BURST128 (2 << 8)
0274 #define TSI108_EC_RXQ_BUFCFG_BURST256 (3 << 8)
0275 #define TSI108_EC_RXQ_BUFCFG_WSWP (1 << 11)
0276 #define TSI108_EC_RXQ_BUFCFG_BSWP (1 << 10)
0277 #define TSI108_EC_RXQ_BUFCFG_SFNPORT 0
0278
0279 #define TSI108_EC_RXCTRL (0x324)
0280 #define TSI108_EC_RXCTRL_ABORT (1 << 30)
0281 #define TSI108_EC_RXCTRL_GO (1 << 15)
0282 #define TSI108_EC_RXCTRL_QUEUE0 (1 << 0)
0283
0284 #define TSI108_EC_RXERR (0x378)
0285
0286 #define TSI108_TX_EOF (1 << 0)
0287 #define TSI108_TX_SOF (1 << 1)
0288 #define TSI108_TX_VLAN (1 << 2)
0289 #define TSI108_TX_HUGE (1 << 3)
0290 #define TSI108_TX_PAD (1 << 4)
0291 #define TSI108_TX_CRC (1 << 5)
0292 #define TSI108_TX_INT (1 << 14)
0293 #define TSI108_TX_RETRY (0xf << 16)
0294 #define TSI108_TX_COL (1 << 20)
0295 #define TSI108_TX_LCOL (1 << 24)
0296 #define TSI108_TX_UNDER (1 << 25)
0297 #define TSI108_TX_RLIM (1 << 26)
0298 #define TSI108_TX_OK (1 << 30)
0299 #define TSI108_TX_OWN (1 << 31)
0300
0301
0302 typedef struct {
0303 u32 buf0;
0304 u32 buf1;
0305 u32 next0;
0306 u32 next1;
0307 u16 vlan;
0308 u16 len;
0309 u32 misc;
0310 u32 reserved0;
0311 u32 reserved1;
0312 } __attribute__ ((aligned(32))) tx_desc;
0313
0314 #define TSI108_RX_EOF (1 << 0)
0315 #define TSI108_RX_SOF (1 << 1)
0316 #define TSI108_RX_VLAN (1 << 2)
0317 #define TSI108_RX_FTYPE (1 << 3)
0318 #define TSI108_RX_RUNT (1 << 4)
0319 #define TSI108_RX_HASH (1 << 7)
0320 #define TSI108_RX_BAD (1 << 8)
0321 #define TSI108_RX_OVER (1 << 9)
0322 #define TSI108_RX_TRUNC (1 << 11)
0323 #define TSI108_RX_CRC (1 << 12)
0324 #define TSI108_RX_INT (1 << 13)
0325 #define TSI108_RX_OWN (1 << 15)
0326
0327 #define TSI108_RX_SKB_SIZE 1536
0328
0329 typedef struct {
0330 u32 buf0;
0331 u32 buf1;
0332 u32 next0;
0333 u32 next1;
0334 u16 vlan;
0335 u16 len;
0336 u16 blen;
0337 u16 misc;
0338 u32 reserved0;
0339 u32 reserved1;
0340 } __attribute__ ((aligned(32))) rx_desc;
0341
0342 #endif