Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * (C) Copyright 2005 Tundra Semiconductor Corp.
0004  * Kong Lai, <kong.lai@tundra.com).
0005  *
0006  * See file CREDITS for list of people who contributed to this
0007  * project.
0008  */
0009 
0010 /*
0011  * net/tsi108_eth.h - definitions for Tsi108 GIGE network controller.
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  * TSI108 GIGE port registers
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 /* Station Enable -- accept packets destined for us */
0253 #define TSI108_EC_RXCFG_SE      (1 << 13)
0254 /* Unicast Frame Enable -- for packets not destined for us */
0255 #define TSI108_EC_RXCFG_UFE     (1 << 12)
0256 /* Multicast Frame Enable */
0257 #define TSI108_EC_RXCFG_MFE     (1 << 11)
0258 /* Broadcast Frame Enable */
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)    /* End of frame; last fragment of packet */
0287 #define TSI108_TX_SOF   (1 << 1)    /* Start of frame; first frag. of packet */
0288 #define TSI108_TX_VLAN  (1 << 2)    /* Per-frame VLAN: enables VLAN override */
0289 #define TSI108_TX_HUGE  (1 << 3)    /* Huge frame enable */
0290 #define TSI108_TX_PAD   (1 << 4)    /* Pad the packet if too short */
0291 #define TSI108_TX_CRC   (1 << 5)    /* Generate CRC for this packet */
0292 #define TSI108_TX_INT   (1 << 14)   /* Generate an IRQ after frag. processed */
0293 #define TSI108_TX_RETRY (0xf << 16) /* 4 bit field indicating num. of retries */
0294 #define TSI108_TX_COL   (1 << 20)   /* Set if a collision occurred */
0295 #define TSI108_TX_LCOL  (1 << 24)   /* Set if a late collision occurred */
0296 #define TSI108_TX_UNDER (1 << 25)   /* Set if a FIFO underrun occurred */
0297 #define TSI108_TX_RLIM  (1 << 26)   /* Set if the retry limit was reached */
0298 #define TSI108_TX_OK    (1 << 30)   /* Set if the frame TX was successful */
0299 #define TSI108_TX_OWN   (1 << 31)   /* Set if the device owns the descriptor */
0300 
0301 /* Note: the descriptor layouts assume big-endian byte order. */
0302 typedef struct {
0303     u32 buf0;
0304     u32 buf1;       /* Base address of buffer */
0305     u32 next0;      /* Address of next descriptor, if any */
0306     u32 next1;
0307     u16 vlan;       /* VLAN, if override enabled for this packet */
0308     u16 len;        /* Length of buffer in bytes */
0309     u32 misc;       /* See TSI108_TX_* above */
0310     u32 reserved0;      /*reserved0 and reserved1 are added to make the desc */
0311     u32 reserved1;      /* 32-byte aligned */
0312 } __attribute__ ((aligned(32))) tx_desc;
0313 
0314 #define TSI108_RX_EOF   (1 << 0)    /* End of frame; last fragment of packet */
0315 #define TSI108_RX_SOF   (1 << 1)    /* Start of frame; first frag. of packet */
0316 #define TSI108_RX_VLAN  (1 << 2)    /* Set on SOF if packet has a VLAN */
0317 #define TSI108_RX_FTYPE (1 << 3)    /* Length/Type field is type, not length */
0318 #define TSI108_RX_RUNT  (1 << 4)/* Packet is less than minimum size */
0319 #define TSI108_RX_HASH  (1 << 7)/* Hash table match */
0320 #define TSI108_RX_BAD   (1 << 8)    /* Bad frame */
0321 #define TSI108_RX_OVER  (1 << 9)    /* FIFO overrun occurred */
0322 #define TSI108_RX_TRUNC (1 << 11)   /* Packet truncated due to excess length */
0323 #define TSI108_RX_CRC   (1 << 12)   /* Packet had a CRC error */
0324 #define TSI108_RX_INT   (1 << 13)   /* Generate an IRQ after frag. processed */
0325 #define TSI108_RX_OWN   (1 << 15)   /* Set if the device owns the descriptor */
0326 
0327 #define TSI108_RX_SKB_SIZE 1536     /* The RX skb length */
0328 
0329 typedef struct {
0330     u32 buf0;       /* Base address of buffer */
0331     u32 buf1;       /* Base address of buffer */
0332     u32 next0;      /* Address of next descriptor, if any */
0333     u32 next1;      /* Address of next descriptor, if any */
0334     u16 vlan;       /* VLAN of received packet, first frag only */
0335     u16 len;        /* Length of received fragment in bytes */
0336     u16 blen;       /* Length of buffer in bytes */
0337     u16 misc;       /* See TSI108_RX_* above */
0338     u32 reserved0;      /* reserved0 and reserved1 are added to make the desc */
0339     u32 reserved1;      /* 32-byte aligned */
0340 } __attribute__ ((aligned(32))) rx_desc;
0341 
0342 #endif              /* __TSI108_ETH_H */