0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _SUNQE_H
0009 #define _SUNQE_H
0010
0011
0012 #define GLOB_CTRL 0x00UL
0013 #define GLOB_STAT 0x04UL
0014 #define GLOB_PSIZE 0x08UL
0015 #define GLOB_MSIZE 0x0cUL
0016 #define GLOB_RSIZE 0x10UL
0017 #define GLOB_TSIZE 0x14UL
0018 #define GLOB_REG_SIZE 0x18UL
0019
0020 #define GLOB_CTRL_MMODE 0x40000000
0021 #define GLOB_CTRL_BMODE 0x10000000
0022 #define GLOB_CTRL_EPAR 0x00000020
0023 #define GLOB_CTRL_ACNTRL 0x00000018
0024 #define GLOB_CTRL_B64 0x00000004
0025 #define GLOB_CTRL_B32 0x00000002
0026 #define GLOB_CTRL_B16 0x00000000
0027 #define GLOB_CTRL_RESET 0x00000001
0028
0029 #define GLOB_STAT_TX 0x00000008
0030 #define GLOB_STAT_RX 0x00000004
0031 #define GLOB_STAT_BM 0x00000002
0032 #define GLOB_STAT_ER 0x00000001
0033
0034 #define GLOB_PSIZE_2048 0x00
0035 #define GLOB_PSIZE_4096 0x01
0036 #define GLOB_PSIZE_6144 0x10
0037 #define GLOB_PSIZE_8192 0x11
0038
0039
0040
0041
0042
0043 #define GLOB_STAT_PER_QE(status, channel) (((status) >> ((channel) * 4)) & 0xf)
0044
0045
0046 #define CREG_CTRL 0x00UL
0047 #define CREG_STAT 0x04UL
0048 #define CREG_RXDS 0x08UL
0049 #define CREG_TXDS 0x0cUL
0050 #define CREG_RIMASK 0x10UL
0051 #define CREG_TIMASK 0x14UL
0052 #define CREG_QMASK 0x18UL
0053 #define CREG_MMASK 0x1cUL
0054 #define CREG_RXWBUFPTR 0x20UL
0055 #define CREG_RXRBUFPTR 0x24UL
0056 #define CREG_TXWBUFPTR 0x28UL
0057 #define CREG_TXRBUFPTR 0x2cUL
0058 #define CREG_CCNT 0x30UL
0059 #define CREG_PIPG 0x34UL
0060 #define CREG_REG_SIZE 0x38UL
0061
0062 #define CREG_CTRL_RXOFF 0x00000004
0063 #define CREG_CTRL_RESET 0x00000002
0064 #define CREG_CTRL_TWAKEUP 0x00000001
0065
0066 #define CREG_STAT_EDEFER 0x10000000
0067 #define CREG_STAT_CLOSS 0x08000000
0068 #define CREG_STAT_ERETRIES 0x04000000
0069 #define CREG_STAT_LCOLL 0x02000000
0070 #define CREG_STAT_FUFLOW 0x01000000
0071 #define CREG_STAT_JERROR 0x00800000
0072 #define CREG_STAT_BERROR 0x00400000
0073 #define CREG_STAT_TXIRQ 0x00200000
0074 #define CREG_STAT_CCOFLOW 0x00100000
0075 #define CREG_STAT_TXDERROR 0x00080000
0076 #define CREG_STAT_TXLERR 0x00040000
0077 #define CREG_STAT_TXPERR 0x00020000
0078 #define CREG_STAT_TXSERR 0x00010000
0079 #define CREG_STAT_RCCOFLOW 0x00001000
0080 #define CREG_STAT_RUOFLOW 0x00000800
0081 #define CREG_STAT_MCOFLOW 0x00000400
0082 #define CREG_STAT_RXFOFLOW 0x00000200
0083 #define CREG_STAT_RLCOLL 0x00000100
0084 #define CREG_STAT_FCOFLOW 0x00000080
0085 #define CREG_STAT_CECOFLOW 0x00000040
0086 #define CREG_STAT_RXIRQ 0x00000020
0087 #define CREG_STAT_RXDROP 0x00000010
0088 #define CREG_STAT_RXSMALL 0x00000008
0089 #define CREG_STAT_RXLERR 0x00000004
0090 #define CREG_STAT_RXPERR 0x00000002
0091 #define CREG_STAT_RXSERR 0x00000001
0092
0093 #define CREG_STAT_ERRORS (CREG_STAT_EDEFER|CREG_STAT_CLOSS|CREG_STAT_ERETRIES| \
0094 CREG_STAT_LCOLL|CREG_STAT_FUFLOW|CREG_STAT_JERROR| \
0095 CREG_STAT_BERROR|CREG_STAT_CCOFLOW|CREG_STAT_TXDERROR| \
0096 CREG_STAT_TXLERR|CREG_STAT_TXPERR|CREG_STAT_TXSERR| \
0097 CREG_STAT_RCCOFLOW|CREG_STAT_RUOFLOW|CREG_STAT_MCOFLOW| \
0098 CREG_STAT_RXFOFLOW|CREG_STAT_RLCOLL|CREG_STAT_FCOFLOW| \
0099 CREG_STAT_CECOFLOW|CREG_STAT_RXDROP|CREG_STAT_RXSMALL| \
0100 CREG_STAT_RXLERR|CREG_STAT_RXPERR|CREG_STAT_RXSERR)
0101
0102 #define CREG_QMASK_COFLOW 0x00100000
0103 #define CREG_QMASK_TXDERROR 0x00080000
0104 #define CREG_QMASK_TXLERR 0x00040000
0105 #define CREG_QMASK_TXPERR 0x00020000
0106 #define CREG_QMASK_TXSERR 0x00010000
0107 #define CREG_QMASK_RXDROP 0x00000010
0108 #define CREG_QMASK_RXBERROR 0x00000008
0109 #define CREG_QMASK_RXLEERR 0x00000004
0110 #define CREG_QMASK_RXPERR 0x00000002
0111 #define CREG_QMASK_RXSERR 0x00000001
0112
0113 #define CREG_MMASK_EDEFER 0x10000000
0114 #define CREG_MMASK_CLOSS 0x08000000
0115 #define CREG_MMASK_ERETRY 0x04000000
0116 #define CREG_MMASK_LCOLL 0x02000000
0117 #define CREG_MMASK_UFLOW 0x01000000
0118 #define CREG_MMASK_JABBER 0x00800000
0119 #define CREG_MMASK_BABBLE 0x00400000
0120 #define CREG_MMASK_OFLOW 0x00000800
0121 #define CREG_MMASK_RXCOLL 0x00000400
0122 #define CREG_MMASK_RPKT 0x00000200
0123 #define CREG_MMASK_MPKT 0x00000100
0124
0125 #define CREG_PIPG_TENAB 0x00000020
0126 #define CREG_PIPG_MMODE 0x00000010
0127 #define CREG_PIPG_WMASK 0x0000000f
0128
0129
0130 #define MREGS_RXFIFO 0x00UL
0131 #define MREGS_TXFIFO 0x01UL
0132 #define MREGS_TXFCNTL 0x02UL
0133 #define MREGS_TXFSTAT 0x03UL
0134 #define MREGS_TXRCNT 0x04UL
0135 #define MREGS_RXFCNTL 0x05UL
0136 #define MREGS_RXFSTAT 0x06UL
0137 #define MREGS_FFCNT 0x07UL
0138 #define MREGS_IREG 0x08UL
0139 #define MREGS_IMASK 0x09UL
0140 #define MREGS_POLL 0x0aUL
0141 #define MREGS_BCONFIG 0x0bUL
0142 #define MREGS_FCONFIG 0x0cUL
0143 #define MREGS_MCONFIG 0x0dUL
0144 #define MREGS_PLSCONFIG 0x0eUL
0145 #define MREGS_PHYCONFIG 0x0fUL
0146 #define MREGS_CHIPID1 0x10UL
0147 #define MREGS_CHIPID2 0x11UL
0148 #define MREGS_IACONFIG 0x12UL
0149
0150 #define MREGS_FILTER 0x14UL
0151 #define MREGS_ETHADDR 0x15UL
0152
0153
0154 #define MREGS_MPCNT 0x18UL
0155
0156 #define MREGS_RPCNT 0x1aUL
0157 #define MREGS_RCCNT 0x1bUL
0158
0159 #define MREGS_UTEST 0x1dUL
0160 #define MREGS_RTEST1 0x1eUL
0161 #define MREGS_RTEST2 0x1fUL
0162 #define MREGS_REG_SIZE 0x20UL
0163
0164 #define MREGS_TXFCNTL_DRETRY 0x80
0165 #define MREGS_TXFCNTL_DFCS 0x08
0166 #define MREGS_TXFCNTL_AUTOPAD 0x01
0167
0168 #define MREGS_TXFSTAT_VALID 0x80
0169 #define MREGS_TXFSTAT_UNDERFLOW 0x40
0170 #define MREGS_TXFSTAT_LCOLL 0x20
0171 #define MREGS_TXFSTAT_MRETRY 0x10
0172 #define MREGS_TXFSTAT_ORETRY 0x08
0173 #define MREGS_TXFSTAT_PDEFER 0x04
0174 #define MREGS_TXFSTAT_CLOSS 0x02
0175 #define MREGS_TXFSTAT_RERROR 0x01
0176
0177 #define MREGS_TXRCNT_EDEFER 0x80
0178 #define MREGS_TXRCNT_CMASK 0x0f
0179
0180 #define MREGS_RXFCNTL_LOWLAT 0x08
0181 #define MREGS_RXFCNTL_AREJECT 0x04
0182 #define MREGS_RXFCNTL_AUTOSTRIP 0x01
0183
0184 #define MREGS_RXFSTAT_OVERFLOW 0x80
0185 #define MREGS_RXFSTAT_LCOLL 0x40
0186 #define MREGS_RXFSTAT_FERROR 0x20
0187 #define MREGS_RXFSTAT_FCSERROR 0x10
0188 #define MREGS_RXFSTAT_RBCNT 0x0f
0189
0190 #define MREGS_FFCNT_RX 0xf0
0191 #define MREGS_FFCNT_TX 0x0f
0192
0193 #define MREGS_IREG_JABBER 0x80
0194 #define MREGS_IREG_BABBLE 0x40
0195 #define MREGS_IREG_COLL 0x20
0196 #define MREGS_IREG_RCCO 0x10
0197 #define MREGS_IREG_RPKTCO 0x08
0198 #define MREGS_IREG_MPKTCO 0x04
0199 #define MREGS_IREG_RXIRQ 0x02
0200 #define MREGS_IREG_TXIRQ 0x01
0201
0202 #define MREGS_IMASK_BABBLE 0x40
0203 #define MREGS_IMASK_COLL 0x20
0204 #define MREGS_IMASK_MPKTCO 0x04
0205 #define MREGS_IMASK_RXIRQ 0x02
0206 #define MREGS_IMASK_TXIRQ 0x01
0207
0208 #define MREGS_POLL_TXVALID 0x80
0209 #define MREGS_POLL_TDTR 0x40
0210 #define MREGS_POLL_RDTR 0x20
0211
0212 #define MREGS_BCONFIG_BSWAP 0x40
0213 #define MREGS_BCONFIG_4TS 0x00
0214 #define MREGS_BCONFIG_16TS 0x10
0215 #define MREGS_BCONFIG_64TS 0x20
0216 #define MREGS_BCONFIG_112TS 0x30
0217 #define MREGS_BCONFIG_RESET 0x01
0218
0219 #define MREGS_FCONFIG_TXF8 0x00
0220 #define MREGS_FCONFIG_TXF32 0x80
0221 #define MREGS_FCONFIG_TXF16 0x40
0222 #define MREGS_FCONFIG_RXF64 0x20
0223 #define MREGS_FCONFIG_RXF32 0x10
0224 #define MREGS_FCONFIG_RXF16 0x00
0225 #define MREGS_FCONFIG_TFWU 0x08
0226 #define MREGS_FCONFIG_RFWU 0x04
0227 #define MREGS_FCONFIG_TBENAB 0x02
0228 #define MREGS_FCONFIG_RBENAB 0x01
0229
0230 #define MREGS_MCONFIG_PROMISC 0x80
0231 #define MREGS_MCONFIG_TPDDISAB 0x40
0232 #define MREGS_MCONFIG_MBAENAB 0x20
0233 #define MREGS_MCONFIG_RPADISAB 0x08
0234 #define MREGS_MCONFIG_RBDISAB 0x04
0235 #define MREGS_MCONFIG_TXENAB 0x02
0236 #define MREGS_MCONFIG_RXENAB 0x01
0237
0238 #define MREGS_PLSCONFIG_TXMS 0x08
0239 #define MREGS_PLSCONFIG_GPSI 0x06
0240 #define MREGS_PLSCONFIG_DAI 0x04
0241 #define MREGS_PLSCONFIG_TP 0x02
0242 #define MREGS_PLSCONFIG_AUI 0x00
0243 #define MREGS_PLSCONFIG_IOENAB 0x01
0244
0245 #define MREGS_PHYCONFIG_LSTAT 0x80
0246 #define MREGS_PHYCONFIG_LTESTDIS 0x40
0247 #define MREGS_PHYCONFIG_RXPOLARITY 0x20
0248 #define MREGS_PHYCONFIG_APCDISAB 0x10
0249 #define MREGS_PHYCONFIG_LTENAB 0x08
0250 #define MREGS_PHYCONFIG_AUTO 0x04
0251 #define MREGS_PHYCONFIG_RWU 0x02
0252 #define MREGS_PHYCONFIG_AW 0x01
0253
0254 #define MREGS_IACONFIG_ACHNGE 0x80
0255 #define MREGS_IACONFIG_PARESET 0x04
0256 #define MREGS_IACONFIG_LARESET 0x02
0257
0258 #define MREGS_UTEST_RTRENAB 0x80
0259 #define MREGS_UTEST_RTRDISAB 0x40
0260 #define MREGS_UTEST_RPACCEPT 0x20
0261 #define MREGS_UTEST_FCOLL 0x10
0262 #define MREGS_UTEST_FCSENAB 0x08
0263 #define MREGS_UTEST_INTLOOPM 0x06
0264 #define MREGS_UTEST_INTLOOP 0x04
0265 #define MREGS_UTEST_EXTLOOP 0x02
0266 #define MREGS_UTEST_NOLOOP 0x00
0267
0268 struct qe_rxd {
0269 u32 rx_flags;
0270 u32 rx_addr;
0271 };
0272
0273 #define RXD_OWN 0x80000000
0274 #define RXD_UPDATE 0x10000000
0275 #define RXD_LENGTH 0x000007ff
0276
0277 struct qe_txd {
0278 u32 tx_flags;
0279 u32 tx_addr;
0280 };
0281
0282 #define TXD_OWN 0x80000000
0283 #define TXD_SOP 0x40000000
0284 #define TXD_EOP 0x20000000
0285 #define TXD_UPDATE 0x10000000
0286 #define TXD_LENGTH 0x000007ff
0287
0288 #define TX_RING_MAXSIZE 256
0289 #define RX_RING_MAXSIZE 256
0290
0291 #define TX_RING_SIZE 16
0292 #define RX_RING_SIZE 16
0293
0294 #define NEXT_RX(num) (((num) + 1) & (RX_RING_MAXSIZE - 1))
0295 #define NEXT_TX(num) (((num) + 1) & (TX_RING_MAXSIZE - 1))
0296 #define PREV_RX(num) (((num) - 1) & (RX_RING_MAXSIZE - 1))
0297 #define PREV_TX(num) (((num) - 1) & (TX_RING_MAXSIZE - 1))
0298
0299 #define TX_BUFFS_AVAIL(qp) \
0300 (((qp)->tx_old <= (qp)->tx_new) ? \
0301 (qp)->tx_old + (TX_RING_SIZE - 1) - (qp)->tx_new : \
0302 (qp)->tx_old - (qp)->tx_new - 1)
0303
0304 struct qe_init_block {
0305 struct qe_rxd qe_rxd[RX_RING_MAXSIZE];
0306 struct qe_txd qe_txd[TX_RING_MAXSIZE];
0307 };
0308
0309 #define qib_offset(mem, elem) \
0310 ((__u32)((unsigned long)(&(((struct qe_init_block *)0)->mem[elem]))))
0311
0312 struct sunqe;
0313
0314 struct sunqec {
0315 void __iomem *gregs;
0316 struct sunqe *qes[4];
0317 unsigned int qec_bursts;
0318 struct platform_device *op;
0319 struct sunqec *next_module;
0320 };
0321
0322 #define PKT_BUF_SZ 1664
0323 #define RXD_PKT_SZ 1664
0324
0325 struct sunqe_buffers {
0326 u8 tx_buf[TX_RING_SIZE][PKT_BUF_SZ];
0327 u8 __pad[2];
0328 u8 rx_buf[RX_RING_SIZE][PKT_BUF_SZ];
0329 };
0330
0331 #define qebuf_offset(mem, elem) \
0332 ((__u32)((unsigned long)(&(((struct sunqe_buffers *)0)->mem[elem][0]))))
0333
0334 struct sunqe {
0335 void __iomem *qcregs;
0336 void __iomem *mregs;
0337 struct qe_init_block *qe_block;
0338 dma_addr_t qblock_dvma;
0339 spinlock_t lock;
0340 int rx_new, rx_old;
0341 int tx_new, tx_old;
0342 struct sunqe_buffers *buffers;
0343 dma_addr_t buffers_dvma;
0344 struct sunqec *parent;
0345 u8 mconfig;
0346 struct platform_device *op;
0347 struct net_device *dev;
0348 int channel;
0349 };
0350
0351 #endif