1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2e689cf4aSJeff Kirsher /* $Id: sunqe.h,v 1.13 2000/02/09 11:15:42 davem Exp $ 3e689cf4aSJeff Kirsher * sunqe.h: Definitions for the Sun QuadEthernet driver. 4e689cf4aSJeff Kirsher * 5e689cf4aSJeff Kirsher * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 6e689cf4aSJeff Kirsher */ 7e689cf4aSJeff Kirsher 8e689cf4aSJeff Kirsher #ifndef _SUNQE_H 9e689cf4aSJeff Kirsher #define _SUNQE_H 10e689cf4aSJeff Kirsher 11e689cf4aSJeff Kirsher /* QEC global registers. */ 12e689cf4aSJeff Kirsher #define GLOB_CTRL 0x00UL /* Control */ 13e689cf4aSJeff Kirsher #define GLOB_STAT 0x04UL /* Status */ 14e689cf4aSJeff Kirsher #define GLOB_PSIZE 0x08UL /* Packet Size */ 15e689cf4aSJeff Kirsher #define GLOB_MSIZE 0x0cUL /* Local-memory Size */ 16e689cf4aSJeff Kirsher #define GLOB_RSIZE 0x10UL /* Receive partition size */ 17e689cf4aSJeff Kirsher #define GLOB_TSIZE 0x14UL /* Transmit partition size */ 18e689cf4aSJeff Kirsher #define GLOB_REG_SIZE 0x18UL 19e689cf4aSJeff Kirsher 20e689cf4aSJeff Kirsher #define GLOB_CTRL_MMODE 0x40000000 /* MACE qec mode */ 21e689cf4aSJeff Kirsher #define GLOB_CTRL_BMODE 0x10000000 /* BigMAC qec mode */ 22e689cf4aSJeff Kirsher #define GLOB_CTRL_EPAR 0x00000020 /* Enable parity */ 23e689cf4aSJeff Kirsher #define GLOB_CTRL_ACNTRL 0x00000018 /* SBUS arbitration control */ 24e689cf4aSJeff Kirsher #define GLOB_CTRL_B64 0x00000004 /* 64 byte dvma bursts */ 25e689cf4aSJeff Kirsher #define GLOB_CTRL_B32 0x00000002 /* 32 byte dvma bursts */ 26e689cf4aSJeff Kirsher #define GLOB_CTRL_B16 0x00000000 /* 16 byte dvma bursts */ 27e689cf4aSJeff Kirsher #define GLOB_CTRL_RESET 0x00000001 /* Reset the QEC */ 28e689cf4aSJeff Kirsher 29e689cf4aSJeff Kirsher #define GLOB_STAT_TX 0x00000008 /* BigMAC Transmit IRQ */ 30e689cf4aSJeff Kirsher #define GLOB_STAT_RX 0x00000004 /* BigMAC Receive IRQ */ 31e689cf4aSJeff Kirsher #define GLOB_STAT_BM 0x00000002 /* BigMAC Global IRQ */ 32e689cf4aSJeff Kirsher #define GLOB_STAT_ER 0x00000001 /* BigMAC Error IRQ */ 33e689cf4aSJeff Kirsher 34e689cf4aSJeff Kirsher #define GLOB_PSIZE_2048 0x00 /* 2k packet size */ 35e689cf4aSJeff Kirsher #define GLOB_PSIZE_4096 0x01 /* 4k packet size */ 36e689cf4aSJeff Kirsher #define GLOB_PSIZE_6144 0x10 /* 6k packet size */ 37e689cf4aSJeff Kirsher #define GLOB_PSIZE_8192 0x11 /* 8k packet size */ 38e689cf4aSJeff Kirsher 39e689cf4aSJeff Kirsher /* In MACE mode, there are four qe channels. Each channel has it's own 40e689cf4aSJeff Kirsher * status bits in the QEC status register. This macro picks out the 41e689cf4aSJeff Kirsher * ones you want. 42e689cf4aSJeff Kirsher */ 43e689cf4aSJeff Kirsher #define GLOB_STAT_PER_QE(status, channel) (((status) >> ((channel) * 4)) & 0xf) 44e689cf4aSJeff Kirsher 45e689cf4aSJeff Kirsher /* The following registers are for per-qe channel information/status. */ 46e689cf4aSJeff Kirsher #define CREG_CTRL 0x00UL /* Control */ 47e689cf4aSJeff Kirsher #define CREG_STAT 0x04UL /* Status */ 48e689cf4aSJeff Kirsher #define CREG_RXDS 0x08UL /* RX descriptor ring ptr */ 49e689cf4aSJeff Kirsher #define CREG_TXDS 0x0cUL /* TX descriptor ring ptr */ 50e689cf4aSJeff Kirsher #define CREG_RIMASK 0x10UL /* RX Interrupt Mask */ 51e689cf4aSJeff Kirsher #define CREG_TIMASK 0x14UL /* TX Interrupt Mask */ 52e689cf4aSJeff Kirsher #define CREG_QMASK 0x18UL /* QEC Error Interrupt Mask */ 53e689cf4aSJeff Kirsher #define CREG_MMASK 0x1cUL /* MACE Error Interrupt Mask */ 54e689cf4aSJeff Kirsher #define CREG_RXWBUFPTR 0x20UL /* Local memory rx write ptr */ 55e689cf4aSJeff Kirsher #define CREG_RXRBUFPTR 0x24UL /* Local memory rx read ptr */ 56e689cf4aSJeff Kirsher #define CREG_TXWBUFPTR 0x28UL /* Local memory tx write ptr */ 57e689cf4aSJeff Kirsher #define CREG_TXRBUFPTR 0x2cUL /* Local memory tx read ptr */ 58e689cf4aSJeff Kirsher #define CREG_CCNT 0x30UL /* Collision Counter */ 59e689cf4aSJeff Kirsher #define CREG_PIPG 0x34UL /* Inter-Frame Gap */ 60e689cf4aSJeff Kirsher #define CREG_REG_SIZE 0x38UL 61e689cf4aSJeff Kirsher 62e689cf4aSJeff Kirsher #define CREG_CTRL_RXOFF 0x00000004 /* Disable this qe's receiver*/ 63e689cf4aSJeff Kirsher #define CREG_CTRL_RESET 0x00000002 /* Reset this qe channel */ 64e689cf4aSJeff Kirsher #define CREG_CTRL_TWAKEUP 0x00000001 /* Transmitter Wakeup, 'go'. */ 65e689cf4aSJeff Kirsher 66e689cf4aSJeff Kirsher #define CREG_STAT_EDEFER 0x10000000 /* Excessive Defers */ 67e689cf4aSJeff Kirsher #define CREG_STAT_CLOSS 0x08000000 /* Carrier Loss */ 68e689cf4aSJeff Kirsher #define CREG_STAT_ERETRIES 0x04000000 /* More than 16 retries */ 69e689cf4aSJeff Kirsher #define CREG_STAT_LCOLL 0x02000000 /* Late TX Collision */ 70e689cf4aSJeff Kirsher #define CREG_STAT_FUFLOW 0x01000000 /* FIFO Underflow */ 71e689cf4aSJeff Kirsher #define CREG_STAT_JERROR 0x00800000 /* Jabber Error */ 72e689cf4aSJeff Kirsher #define CREG_STAT_BERROR 0x00400000 /* Babble Error */ 73e689cf4aSJeff Kirsher #define CREG_STAT_TXIRQ 0x00200000 /* Transmit Interrupt */ 74e689cf4aSJeff Kirsher #define CREG_STAT_CCOFLOW 0x00100000 /* TX Coll-counter Overflow */ 75e689cf4aSJeff Kirsher #define CREG_STAT_TXDERROR 0x00080000 /* TX Descriptor is bogus */ 76e689cf4aSJeff Kirsher #define CREG_STAT_TXLERR 0x00040000 /* Late Transmit Error */ 77e689cf4aSJeff Kirsher #define CREG_STAT_TXPERR 0x00020000 /* Transmit Parity Error */ 78e689cf4aSJeff Kirsher #define CREG_STAT_TXSERR 0x00010000 /* Transmit SBUS error ack */ 79e689cf4aSJeff Kirsher #define CREG_STAT_RCCOFLOW 0x00001000 /* RX Coll-counter Overflow */ 80e689cf4aSJeff Kirsher #define CREG_STAT_RUOFLOW 0x00000800 /* Runt Counter Overflow */ 81e689cf4aSJeff Kirsher #define CREG_STAT_MCOFLOW 0x00000400 /* Missed Counter Overflow */ 82e689cf4aSJeff Kirsher #define CREG_STAT_RXFOFLOW 0x00000200 /* RX FIFO Overflow */ 83e689cf4aSJeff Kirsher #define CREG_STAT_RLCOLL 0x00000100 /* RX Late Collision */ 84e689cf4aSJeff Kirsher #define CREG_STAT_FCOFLOW 0x00000080 /* Frame Counter Overflow */ 85e689cf4aSJeff Kirsher #define CREG_STAT_CECOFLOW 0x00000040 /* CRC Error-counter Overflow*/ 86e689cf4aSJeff Kirsher #define CREG_STAT_RXIRQ 0x00000020 /* Receive Interrupt */ 87e689cf4aSJeff Kirsher #define CREG_STAT_RXDROP 0x00000010 /* Dropped a RX'd packet */ 88e689cf4aSJeff Kirsher #define CREG_STAT_RXSMALL 0x00000008 /* Receive buffer too small */ 89e689cf4aSJeff Kirsher #define CREG_STAT_RXLERR 0x00000004 /* Receive Late Error */ 90e689cf4aSJeff Kirsher #define CREG_STAT_RXPERR 0x00000002 /* Receive Parity Error */ 91e689cf4aSJeff Kirsher #define CREG_STAT_RXSERR 0x00000001 /* Receive SBUS Error ACK */ 92e689cf4aSJeff Kirsher 93e689cf4aSJeff Kirsher #define CREG_STAT_ERRORS (CREG_STAT_EDEFER|CREG_STAT_CLOSS|CREG_STAT_ERETRIES| \ 94e689cf4aSJeff Kirsher CREG_STAT_LCOLL|CREG_STAT_FUFLOW|CREG_STAT_JERROR| \ 95e689cf4aSJeff Kirsher CREG_STAT_BERROR|CREG_STAT_CCOFLOW|CREG_STAT_TXDERROR| \ 96e689cf4aSJeff Kirsher CREG_STAT_TXLERR|CREG_STAT_TXPERR|CREG_STAT_TXSERR| \ 97e689cf4aSJeff Kirsher CREG_STAT_RCCOFLOW|CREG_STAT_RUOFLOW|CREG_STAT_MCOFLOW| \ 98e689cf4aSJeff Kirsher CREG_STAT_RXFOFLOW|CREG_STAT_RLCOLL|CREG_STAT_FCOFLOW| \ 99e689cf4aSJeff Kirsher CREG_STAT_CECOFLOW|CREG_STAT_RXDROP|CREG_STAT_RXSMALL| \ 100e689cf4aSJeff Kirsher CREG_STAT_RXLERR|CREG_STAT_RXPERR|CREG_STAT_RXSERR) 101e689cf4aSJeff Kirsher 102e689cf4aSJeff Kirsher #define CREG_QMASK_COFLOW 0x00100000 /* CollCntr overflow */ 103e689cf4aSJeff Kirsher #define CREG_QMASK_TXDERROR 0x00080000 /* TXD error */ 104e689cf4aSJeff Kirsher #define CREG_QMASK_TXLERR 0x00040000 /* TX late error */ 105e689cf4aSJeff Kirsher #define CREG_QMASK_TXPERR 0x00020000 /* TX parity error */ 106e689cf4aSJeff Kirsher #define CREG_QMASK_TXSERR 0x00010000 /* TX sbus error ack */ 107e689cf4aSJeff Kirsher #define CREG_QMASK_RXDROP 0x00000010 /* RX drop */ 108e689cf4aSJeff Kirsher #define CREG_QMASK_RXBERROR 0x00000008 /* RX buffer error */ 109e689cf4aSJeff Kirsher #define CREG_QMASK_RXLEERR 0x00000004 /* RX late error */ 110e689cf4aSJeff Kirsher #define CREG_QMASK_RXPERR 0x00000002 /* RX parity error */ 111e689cf4aSJeff Kirsher #define CREG_QMASK_RXSERR 0x00000001 /* RX sbus error ack */ 112e689cf4aSJeff Kirsher 113e689cf4aSJeff Kirsher #define CREG_MMASK_EDEFER 0x10000000 /* Excess defer */ 114e689cf4aSJeff Kirsher #define CREG_MMASK_CLOSS 0x08000000 /* Carrier loss */ 115e689cf4aSJeff Kirsher #define CREG_MMASK_ERETRY 0x04000000 /* Excess retry */ 116e689cf4aSJeff Kirsher #define CREG_MMASK_LCOLL 0x02000000 /* Late collision error */ 117e689cf4aSJeff Kirsher #define CREG_MMASK_UFLOW 0x01000000 /* Underflow */ 118e689cf4aSJeff Kirsher #define CREG_MMASK_JABBER 0x00800000 /* Jabber error */ 119e689cf4aSJeff Kirsher #define CREG_MMASK_BABBLE 0x00400000 /* Babble error */ 120e689cf4aSJeff Kirsher #define CREG_MMASK_OFLOW 0x00000800 /* Overflow */ 121e689cf4aSJeff Kirsher #define CREG_MMASK_RXCOLL 0x00000400 /* RX Coll-Cntr overflow */ 122e689cf4aSJeff Kirsher #define CREG_MMASK_RPKT 0x00000200 /* Runt pkt overflow */ 123e689cf4aSJeff Kirsher #define CREG_MMASK_MPKT 0x00000100 /* Missed pkt overflow */ 124e689cf4aSJeff Kirsher 125e689cf4aSJeff Kirsher #define CREG_PIPG_TENAB 0x00000020 /* Enable Throttle */ 126e689cf4aSJeff Kirsher #define CREG_PIPG_MMODE 0x00000010 /* Manual Mode */ 127e689cf4aSJeff Kirsher #define CREG_PIPG_WMASK 0x0000000f /* SBUS Wait Mask */ 128e689cf4aSJeff Kirsher 129e689cf4aSJeff Kirsher /* Per-channel AMD 79C940 MACE registers. */ 130e689cf4aSJeff Kirsher #define MREGS_RXFIFO 0x00UL /* Receive FIFO */ 131e689cf4aSJeff Kirsher #define MREGS_TXFIFO 0x01UL /* Transmit FIFO */ 132e689cf4aSJeff Kirsher #define MREGS_TXFCNTL 0x02UL /* Transmit Frame Control */ 133e689cf4aSJeff Kirsher #define MREGS_TXFSTAT 0x03UL /* Transmit Frame Status */ 134e689cf4aSJeff Kirsher #define MREGS_TXRCNT 0x04UL /* Transmit Retry Count */ 135e689cf4aSJeff Kirsher #define MREGS_RXFCNTL 0x05UL /* Receive Frame Control */ 136e689cf4aSJeff Kirsher #define MREGS_RXFSTAT 0x06UL /* Receive Frame Status */ 137e689cf4aSJeff Kirsher #define MREGS_FFCNT 0x07UL /* FIFO Frame Count */ 138e689cf4aSJeff Kirsher #define MREGS_IREG 0x08UL /* Interrupt Register */ 139e689cf4aSJeff Kirsher #define MREGS_IMASK 0x09UL /* Interrupt Mask */ 140e689cf4aSJeff Kirsher #define MREGS_POLL 0x0aUL /* POLL Register */ 141e689cf4aSJeff Kirsher #define MREGS_BCONFIG 0x0bUL /* BIU Config */ 142e689cf4aSJeff Kirsher #define MREGS_FCONFIG 0x0cUL /* FIFO Config */ 143e689cf4aSJeff Kirsher #define MREGS_MCONFIG 0x0dUL /* MAC Config */ 144e689cf4aSJeff Kirsher #define MREGS_PLSCONFIG 0x0eUL /* PLS Config */ 145e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG 0x0fUL /* PHY Config */ 146e689cf4aSJeff Kirsher #define MREGS_CHIPID1 0x10UL /* Chip-ID, low bits */ 147e689cf4aSJeff Kirsher #define MREGS_CHIPID2 0x11UL /* Chip-ID, high bits */ 148e689cf4aSJeff Kirsher #define MREGS_IACONFIG 0x12UL /* Internal Address Config */ 149e689cf4aSJeff Kirsher /* 0x13UL, reserved */ 150e689cf4aSJeff Kirsher #define MREGS_FILTER 0x14UL /* Logical Address Filter */ 151e689cf4aSJeff Kirsher #define MREGS_ETHADDR 0x15UL /* Our Ethernet Address */ 152e689cf4aSJeff Kirsher /* 0x16UL, reserved */ 153e689cf4aSJeff Kirsher /* 0x17UL, reserved */ 154e689cf4aSJeff Kirsher #define MREGS_MPCNT 0x18UL /* Missed Packet Count */ 155e689cf4aSJeff Kirsher /* 0x19UL, reserved */ 156e689cf4aSJeff Kirsher #define MREGS_RPCNT 0x1aUL /* Runt Packet Count */ 157e689cf4aSJeff Kirsher #define MREGS_RCCNT 0x1bUL /* RX Collision Count */ 158e689cf4aSJeff Kirsher /* 0x1cUL, reserved */ 159e689cf4aSJeff Kirsher #define MREGS_UTEST 0x1dUL /* User Test */ 160e689cf4aSJeff Kirsher #define MREGS_RTEST1 0x1eUL /* Reserved Test 1 */ 161e689cf4aSJeff Kirsher #define MREGS_RTEST2 0x1fUL /* Reserved Test 2 */ 162e689cf4aSJeff Kirsher #define MREGS_REG_SIZE 0x20UL 163e689cf4aSJeff Kirsher 164e689cf4aSJeff Kirsher #define MREGS_TXFCNTL_DRETRY 0x80 /* Retry disable */ 165e689cf4aSJeff Kirsher #define MREGS_TXFCNTL_DFCS 0x08 /* Disable TX FCS */ 166e689cf4aSJeff Kirsher #define MREGS_TXFCNTL_AUTOPAD 0x01 /* TX auto pad */ 167e689cf4aSJeff Kirsher 168e689cf4aSJeff Kirsher #define MREGS_TXFSTAT_VALID 0x80 /* TX valid */ 169e689cf4aSJeff Kirsher #define MREGS_TXFSTAT_UNDERFLOW 0x40 /* TX underflow */ 170e689cf4aSJeff Kirsher #define MREGS_TXFSTAT_LCOLL 0x20 /* TX late collision */ 171e689cf4aSJeff Kirsher #define MREGS_TXFSTAT_MRETRY 0x10 /* TX > 1 retries */ 172e689cf4aSJeff Kirsher #define MREGS_TXFSTAT_ORETRY 0x08 /* TX 1 retry */ 173e689cf4aSJeff Kirsher #define MREGS_TXFSTAT_PDEFER 0x04 /* TX pkt deferred */ 174e689cf4aSJeff Kirsher #define MREGS_TXFSTAT_CLOSS 0x02 /* TX carrier lost */ 175e689cf4aSJeff Kirsher #define MREGS_TXFSTAT_RERROR 0x01 /* TX retry error */ 176e689cf4aSJeff Kirsher 177e689cf4aSJeff Kirsher #define MREGS_TXRCNT_EDEFER 0x80 /* TX Excess defers */ 178e689cf4aSJeff Kirsher #define MREGS_TXRCNT_CMASK 0x0f /* TX retry count */ 179e689cf4aSJeff Kirsher 180e689cf4aSJeff Kirsher #define MREGS_RXFCNTL_LOWLAT 0x08 /* RX low latency */ 181e689cf4aSJeff Kirsher #define MREGS_RXFCNTL_AREJECT 0x04 /* RX addr match rej */ 182e689cf4aSJeff Kirsher #define MREGS_RXFCNTL_AUTOSTRIP 0x01 /* RX auto strip */ 183e689cf4aSJeff Kirsher 184e689cf4aSJeff Kirsher #define MREGS_RXFSTAT_OVERFLOW 0x80 /* RX overflow */ 185e689cf4aSJeff Kirsher #define MREGS_RXFSTAT_LCOLL 0x40 /* RX late collision */ 186e689cf4aSJeff Kirsher #define MREGS_RXFSTAT_FERROR 0x20 /* RX framing error */ 187e689cf4aSJeff Kirsher #define MREGS_RXFSTAT_FCSERROR 0x10 /* RX FCS error */ 188e689cf4aSJeff Kirsher #define MREGS_RXFSTAT_RBCNT 0x0f /* RX msg byte count */ 189e689cf4aSJeff Kirsher 190e689cf4aSJeff Kirsher #define MREGS_FFCNT_RX 0xf0 /* RX FIFO frame cnt */ 191e689cf4aSJeff Kirsher #define MREGS_FFCNT_TX 0x0f /* TX FIFO frame cnt */ 192e689cf4aSJeff Kirsher 193e689cf4aSJeff Kirsher #define MREGS_IREG_JABBER 0x80 /* IRQ Jabber error */ 194e689cf4aSJeff Kirsher #define MREGS_IREG_BABBLE 0x40 /* IRQ Babble error */ 195e689cf4aSJeff Kirsher #define MREGS_IREG_COLL 0x20 /* IRQ Collision error */ 196e689cf4aSJeff Kirsher #define MREGS_IREG_RCCO 0x10 /* IRQ Collision cnt overflow */ 197e689cf4aSJeff Kirsher #define MREGS_IREG_RPKTCO 0x08 /* IRQ Runt packet count overflow */ 198e689cf4aSJeff Kirsher #define MREGS_IREG_MPKTCO 0x04 /* IRQ missed packet cnt overflow */ 199e689cf4aSJeff Kirsher #define MREGS_IREG_RXIRQ 0x02 /* IRQ RX'd a packet */ 200e689cf4aSJeff Kirsher #define MREGS_IREG_TXIRQ 0x01 /* IRQ TX'd a packet */ 201e689cf4aSJeff Kirsher 202e689cf4aSJeff Kirsher #define MREGS_IMASK_BABBLE 0x40 /* IMASK Babble errors */ 203e689cf4aSJeff Kirsher #define MREGS_IMASK_COLL 0x20 /* IMASK Collision errors */ 204e689cf4aSJeff Kirsher #define MREGS_IMASK_MPKTCO 0x04 /* IMASK Missed pkt cnt overflow */ 205e689cf4aSJeff Kirsher #define MREGS_IMASK_RXIRQ 0x02 /* IMASK RX interrupts */ 206e689cf4aSJeff Kirsher #define MREGS_IMASK_TXIRQ 0x01 /* IMASK TX interrupts */ 207e689cf4aSJeff Kirsher 208e689cf4aSJeff Kirsher #define MREGS_POLL_TXVALID 0x80 /* TX is valid */ 209e689cf4aSJeff Kirsher #define MREGS_POLL_TDTR 0x40 /* TX data transfer request */ 210e689cf4aSJeff Kirsher #define MREGS_POLL_RDTR 0x20 /* RX data transfer request */ 211e689cf4aSJeff Kirsher 212e689cf4aSJeff Kirsher #define MREGS_BCONFIG_BSWAP 0x40 /* Byte Swap */ 213e689cf4aSJeff Kirsher #define MREGS_BCONFIG_4TS 0x00 /* 4byte transmit start point */ 214e689cf4aSJeff Kirsher #define MREGS_BCONFIG_16TS 0x10 /* 16byte transmit start point */ 215e689cf4aSJeff Kirsher #define MREGS_BCONFIG_64TS 0x20 /* 64byte transmit start point */ 216e689cf4aSJeff Kirsher #define MREGS_BCONFIG_112TS 0x30 /* 112byte transmit start point */ 217e689cf4aSJeff Kirsher #define MREGS_BCONFIG_RESET 0x01 /* SW-Reset the MACE */ 218e689cf4aSJeff Kirsher 219e689cf4aSJeff Kirsher #define MREGS_FCONFIG_TXF8 0x00 /* TX fifo 8 write cycles */ 220e689cf4aSJeff Kirsher #define MREGS_FCONFIG_TXF32 0x80 /* TX fifo 32 write cycles */ 221e689cf4aSJeff Kirsher #define MREGS_FCONFIG_TXF16 0x40 /* TX fifo 16 write cycles */ 222e689cf4aSJeff Kirsher #define MREGS_FCONFIG_RXF64 0x20 /* RX fifo 64 write cycles */ 223e689cf4aSJeff Kirsher #define MREGS_FCONFIG_RXF32 0x10 /* RX fifo 32 write cycles */ 224e689cf4aSJeff Kirsher #define MREGS_FCONFIG_RXF16 0x00 /* RX fifo 16 write cycles */ 225e689cf4aSJeff Kirsher #define MREGS_FCONFIG_TFWU 0x08 /* TX fifo watermark update */ 226e689cf4aSJeff Kirsher #define MREGS_FCONFIG_RFWU 0x04 /* RX fifo watermark update */ 227e689cf4aSJeff Kirsher #define MREGS_FCONFIG_TBENAB 0x02 /* TX burst enable */ 228e689cf4aSJeff Kirsher #define MREGS_FCONFIG_RBENAB 0x01 /* RX burst enable */ 229e689cf4aSJeff Kirsher 230e689cf4aSJeff Kirsher #define MREGS_MCONFIG_PROMISC 0x80 /* Promiscuous mode enable */ 231e689cf4aSJeff Kirsher #define MREGS_MCONFIG_TPDDISAB 0x40 /* TX 2part deferral enable */ 232e689cf4aSJeff Kirsher #define MREGS_MCONFIG_MBAENAB 0x20 /* Modified backoff enable */ 233e689cf4aSJeff Kirsher #define MREGS_MCONFIG_RPADISAB 0x08 /* RX physical addr disable */ 234e689cf4aSJeff Kirsher #define MREGS_MCONFIG_RBDISAB 0x04 /* RX broadcast disable */ 235e689cf4aSJeff Kirsher #define MREGS_MCONFIG_TXENAB 0x02 /* Enable transmitter */ 236e689cf4aSJeff Kirsher #define MREGS_MCONFIG_RXENAB 0x01 /* Enable receiver */ 237e689cf4aSJeff Kirsher 238e689cf4aSJeff Kirsher #define MREGS_PLSCONFIG_TXMS 0x08 /* TX mode select */ 239e689cf4aSJeff Kirsher #define MREGS_PLSCONFIG_GPSI 0x06 /* Use GPSI connector */ 240e689cf4aSJeff Kirsher #define MREGS_PLSCONFIG_DAI 0x04 /* Use DAI connector */ 241e689cf4aSJeff Kirsher #define MREGS_PLSCONFIG_TP 0x02 /* Use TwistedPair connector */ 242e689cf4aSJeff Kirsher #define MREGS_PLSCONFIG_AUI 0x00 /* Use AUI connector */ 243e689cf4aSJeff Kirsher #define MREGS_PLSCONFIG_IOENAB 0x01 /* PLS I/O enable */ 244e689cf4aSJeff Kirsher 245e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG_LSTAT 0x80 /* Link status */ 246e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG_LTESTDIS 0x40 /* Disable link test logic */ 247e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG_RXPOLARITY 0x20 /* RX polarity */ 248e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG_APCDISAB 0x10 /* AutoPolarityCorrect disab */ 249e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG_LTENAB 0x08 /* Select low threshold */ 250e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG_AUTO 0x04 /* Connector port auto-sel */ 251e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG_RWU 0x02 /* Remote WakeUp */ 252e689cf4aSJeff Kirsher #define MREGS_PHYCONFIG_AW 0x01 /* Auto Wakeup */ 253e689cf4aSJeff Kirsher 254e689cf4aSJeff Kirsher #define MREGS_IACONFIG_ACHNGE 0x80 /* Do address change */ 255e689cf4aSJeff Kirsher #define MREGS_IACONFIG_PARESET 0x04 /* Physical address reset */ 256e689cf4aSJeff Kirsher #define MREGS_IACONFIG_LARESET 0x02 /* Logical address reset */ 257e689cf4aSJeff Kirsher 258e689cf4aSJeff Kirsher #define MREGS_UTEST_RTRENAB 0x80 /* Enable resv test register */ 259e689cf4aSJeff Kirsher #define MREGS_UTEST_RTRDISAB 0x40 /* Disab resv test register */ 260e689cf4aSJeff Kirsher #define MREGS_UTEST_RPACCEPT 0x20 /* Accept runt packets */ 261e689cf4aSJeff Kirsher #define MREGS_UTEST_FCOLL 0x10 /* Force collision status */ 262e689cf4aSJeff Kirsher #define MREGS_UTEST_FCSENAB 0x08 /* Enable FCS on RX */ 263e689cf4aSJeff Kirsher #define MREGS_UTEST_INTLOOPM 0x06 /* Intern lpback w/MENDEC */ 264e689cf4aSJeff Kirsher #define MREGS_UTEST_INTLOOP 0x04 /* Intern lpback */ 265e689cf4aSJeff Kirsher #define MREGS_UTEST_EXTLOOP 0x02 /* Extern lpback */ 266e689cf4aSJeff Kirsher #define MREGS_UTEST_NOLOOP 0x00 /* No loopback */ 267e689cf4aSJeff Kirsher 268e689cf4aSJeff Kirsher struct qe_rxd { 269e689cf4aSJeff Kirsher u32 rx_flags; 270e689cf4aSJeff Kirsher u32 rx_addr; 271e689cf4aSJeff Kirsher }; 272e689cf4aSJeff Kirsher 273e689cf4aSJeff Kirsher #define RXD_OWN 0x80000000 /* Ownership. */ 274e689cf4aSJeff Kirsher #define RXD_UPDATE 0x10000000 /* Being Updated? */ 275e689cf4aSJeff Kirsher #define RXD_LENGTH 0x000007ff /* Packet Length. */ 276e689cf4aSJeff Kirsher 277e689cf4aSJeff Kirsher struct qe_txd { 278e689cf4aSJeff Kirsher u32 tx_flags; 279e689cf4aSJeff Kirsher u32 tx_addr; 280e689cf4aSJeff Kirsher }; 281e689cf4aSJeff Kirsher 282e689cf4aSJeff Kirsher #define TXD_OWN 0x80000000 /* Ownership. */ 283e689cf4aSJeff Kirsher #define TXD_SOP 0x40000000 /* Start Of Packet */ 284e689cf4aSJeff Kirsher #define TXD_EOP 0x20000000 /* End Of Packet */ 285e689cf4aSJeff Kirsher #define TXD_UPDATE 0x10000000 /* Being Updated? */ 286e689cf4aSJeff Kirsher #define TXD_LENGTH 0x000007ff /* Packet Length. */ 287e689cf4aSJeff Kirsher 288e689cf4aSJeff Kirsher #define TX_RING_MAXSIZE 256 289e689cf4aSJeff Kirsher #define RX_RING_MAXSIZE 256 290e689cf4aSJeff Kirsher 291e689cf4aSJeff Kirsher #define TX_RING_SIZE 16 292e689cf4aSJeff Kirsher #define RX_RING_SIZE 16 293e689cf4aSJeff Kirsher 294e689cf4aSJeff Kirsher #define NEXT_RX(num) (((num) + 1) & (RX_RING_MAXSIZE - 1)) 295e689cf4aSJeff Kirsher #define NEXT_TX(num) (((num) + 1) & (TX_RING_MAXSIZE - 1)) 296e689cf4aSJeff Kirsher #define PREV_RX(num) (((num) - 1) & (RX_RING_MAXSIZE - 1)) 297e689cf4aSJeff Kirsher #define PREV_TX(num) (((num) - 1) & (TX_RING_MAXSIZE - 1)) 298e689cf4aSJeff Kirsher 299e689cf4aSJeff Kirsher #define TX_BUFFS_AVAIL(qp) \ 300e689cf4aSJeff Kirsher (((qp)->tx_old <= (qp)->tx_new) ? \ 301e689cf4aSJeff Kirsher (qp)->tx_old + (TX_RING_SIZE - 1) - (qp)->tx_new : \ 302e689cf4aSJeff Kirsher (qp)->tx_old - (qp)->tx_new - 1) 303e689cf4aSJeff Kirsher 304e689cf4aSJeff Kirsher struct qe_init_block { 305e689cf4aSJeff Kirsher struct qe_rxd qe_rxd[RX_RING_MAXSIZE]; 306e689cf4aSJeff Kirsher struct qe_txd qe_txd[TX_RING_MAXSIZE]; 307e689cf4aSJeff Kirsher }; 308e689cf4aSJeff Kirsher 309e689cf4aSJeff Kirsher #define qib_offset(mem, elem) \ 310e689cf4aSJeff Kirsher ((__u32)((unsigned long)(&(((struct qe_init_block *)0)->mem[elem])))) 311e689cf4aSJeff Kirsher 312e689cf4aSJeff Kirsher struct sunqe; 313e689cf4aSJeff Kirsher 314e689cf4aSJeff Kirsher struct sunqec { 315e689cf4aSJeff Kirsher void __iomem *gregs; /* QEC Global Registers */ 316e689cf4aSJeff Kirsher struct sunqe *qes[4]; /* Each child MACE */ 317e689cf4aSJeff Kirsher unsigned int qec_bursts; /* Support burst sizes */ 318e689cf4aSJeff Kirsher struct platform_device *op; /* QEC's OF device */ 319e689cf4aSJeff Kirsher struct sunqec *next_module; /* List of all QECs in system */ 320e689cf4aSJeff Kirsher }; 321e689cf4aSJeff Kirsher 322e689cf4aSJeff Kirsher #define PKT_BUF_SZ 1664 323e689cf4aSJeff Kirsher #define RXD_PKT_SZ 1664 324e689cf4aSJeff Kirsher 325e689cf4aSJeff Kirsher struct sunqe_buffers { 326e689cf4aSJeff Kirsher u8 tx_buf[TX_RING_SIZE][PKT_BUF_SZ]; 327e689cf4aSJeff Kirsher u8 __pad[2]; 328e689cf4aSJeff Kirsher u8 rx_buf[RX_RING_SIZE][PKT_BUF_SZ]; 329e689cf4aSJeff Kirsher }; 330e689cf4aSJeff Kirsher 331e689cf4aSJeff Kirsher #define qebuf_offset(mem, elem) \ 332e689cf4aSJeff Kirsher ((__u32)((unsigned long)(&(((struct sunqe_buffers *)0)->mem[elem][0])))) 333e689cf4aSJeff Kirsher 334e689cf4aSJeff Kirsher struct sunqe { 335e689cf4aSJeff Kirsher void __iomem *qcregs; /* QEC per-channel Registers */ 336e689cf4aSJeff Kirsher void __iomem *mregs; /* Per-channel MACE Registers */ 337e689cf4aSJeff Kirsher struct qe_init_block *qe_block; /* RX and TX descriptors */ 338266439c9STushar Dave dma_addr_t qblock_dvma; /* RX and TX descriptors */ 339e689cf4aSJeff Kirsher spinlock_t lock; /* Protects txfull state */ 340e689cf4aSJeff Kirsher int rx_new, rx_old; /* RX ring extents */ 341e689cf4aSJeff Kirsher int tx_new, tx_old; /* TX ring extents */ 342e689cf4aSJeff Kirsher struct sunqe_buffers *buffers; /* CPU visible address. */ 343266439c9STushar Dave dma_addr_t buffers_dvma; /* DVMA visible address. */ 344e689cf4aSJeff Kirsher struct sunqec *parent; 345e689cf4aSJeff Kirsher u8 mconfig; /* Base MACE mconfig value */ 346e689cf4aSJeff Kirsher struct platform_device *op; /* QE's OF device struct */ 347e689cf4aSJeff Kirsher struct net_device *dev; /* QE's netdevice struct */ 348e689cf4aSJeff Kirsher int channel; /* Who am I? */ 349e689cf4aSJeff Kirsher }; 350e689cf4aSJeff Kirsher 351e689cf4aSJeff Kirsher #endif /* !(_SUNQE_H) */ 352