^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* drivers/atm/firestream.h - FireStream 155 (MB86697) and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * FireStream 50 (MB86695) device driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) /* Written & (C) 2000 by R.E.Wolff@BitWizard.nl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copied snippets from zatm.c by Werner Almesberger, EPFL LRC/ICA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * and ambassador.c Copyright (C) 1995-1999 Madge Networks Ltd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /***********************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * first the defines for the chip. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) ***********************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /********************* General chip parameters. ************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define FS_NR_FREE_POOLS 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define FS_NR_RX_QUEUES 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /********************* queues and queue access macros ******************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) /* A queue entry. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) struct FS_QENTRY {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) u32 cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) u32 p0, p1, p2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) /* A freepool entry. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) struct FS_BPENTRY {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) u32 next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) u32 bsa;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) u32 aal_bufsize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) /* The hardware doesn't look at this, but we need the SKB somewhere... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) struct sk_buff *skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) struct freepool *fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) struct fs_dev *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define STATUS_CODE(qe) ((qe->cmd >> 22) & 0x3f)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) /* OFFSETS against the base of a QUEUE... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define QSA 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define QEA 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define QRP 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define QWP 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define QCNF 0x10 /* Only for Release queues! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) /* Not for the transmit pending queue. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) /* OFFSETS against the base of a FREE POOL... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define FPCNF 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define FPSA 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define FPEA 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define FPCNT 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define FPCTU 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define Q_SA(b) (b + QSA )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define Q_EA(b) (b + QEA )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define Q_RP(b) (b + QRP )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define Q_WP(b) (b + QWP )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define Q_CNF(b) (b + QCNF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define FP_CNF(b) (b + FPCNF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define FP_SA(b) (b + FPSA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define FP_EA(b) (b + FPEA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define FP_CNT(b) (b + FPCNT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define FP_CTU(b) (b + FPCTU)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) /* bits in a queue register. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define Q_FULL 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define Q_EMPTY 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define Q_INCWRAP 0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define Q_ADDR_MASK 0xfffffff0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) /* bits in a FreePool config register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define RBFP_RBS (0x1 << 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define RBFP_RBSVAL (0x1 << 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define RBFP_CME (0x1 << 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define RBFP_DLP (0x1 << 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define RBFP_BFPWT (0x1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) /* FireStream commands. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define QE_CMD_NULL (0x00 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define QE_CMD_REG_RD (0x01 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define QE_CMD_REG_RDM (0x02 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define QE_CMD_REG_WR (0x03 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define QE_CMD_REG_WRM (0x04 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define QE_CMD_CONFIG_TX (0x05 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define QE_CMD_CONFIG_RX (0x06 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define QE_CMD_PRP_RD (0x07 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define QE_CMD_PRP_RDM (0x2a << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define QE_CMD_PRP_WR (0x09 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define QE_CMD_PRP_WRM (0x2b << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define QE_CMD_RX_EN (0x0a << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define QE_CMD_RX_PURGE (0x0b << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define QE_CMD_RX_PURGE_INH (0x0c << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define QE_CMD_TX_EN (0x0d << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define QE_CMD_TX_PURGE (0x0e << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define QE_CMD_TX_PURGE_INH (0x0f << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define QE_CMD_RST_CG (0x10 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define QE_CMD_SET_CG (0x11 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define QE_CMD_RST_CLP (0x12 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define QE_CMD_SET_CLP (0x13 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define QE_CMD_OVERRIDE (0x14 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define QE_CMD_ADD_BFP (0x15 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define QE_CMD_DUMP_TX (0x16 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define QE_CMD_DUMP_RX (0x17 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define QE_CMD_LRAM_RD (0x18 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define QE_CMD_LRAM_RDM (0x28 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define QE_CMD_LRAM_WR (0x19 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define QE_CMD_LRAM_WRM (0x29 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define QE_CMD_LRAM_BSET (0x1a << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define QE_CMD_LRAM_BCLR (0x1b << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define QE_CMD_CONFIG_SEGM (0x1c << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define QE_CMD_READ_SEGM (0x1d << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define QE_CMD_CONFIG_ROUT (0x1e << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define QE_CMD_READ_ROUT (0x1f << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define QE_CMD_CONFIG_TM (0x20 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define QE_CMD_READ_TM (0x21 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define QE_CMD_CONFIG_TXBM (0x22 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define QE_CMD_READ_TXBM (0x23 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define QE_CMD_CONFIG_RXBM (0x24 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define QE_CMD_READ_RXBM (0x25 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define QE_CMD_CONFIG_REAS (0x26 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define QE_CMD_READ_REAS (0x27 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define QE_TRANSMIT_DE (0x0 << 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define QE_CMD_LINKED (0x1 << 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define QE_CMD_IMM (0x2 << 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define QE_CMD_IMM_INQ (0x3 << 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define TD_EPI (0x1 << 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define TD_COMMAND (0x1 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define TD_DATA (0x0 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define TD_RM_CELL (0x1 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define TD_OAM_CELL (0x2 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define TD_OAM_CELL_SEGMENT (0x3 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define TD_BPI (0x1 << 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define FP_FLAGS_EPI (0x1 << 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define TX_PQ(i) (0x00 + (i) * 0x10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define TXB_RQ (0x20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define ST_Q (0x48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define RXB_FP(i) (0x90 + (i) * 0x14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define RXB_RQ(i) (0x134 + (i) * 0x14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define TXQ_HP 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define TXQ_LP 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) /* Phew. You don't want to know how many revisions these simple queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) * address macros went through before I got them nice and compact as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) * they are now. -- REW
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /* And now for something completely different:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) * The rest of the registers... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #define CMDR0 0x34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define CMDR1 0x38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #define CMDR2 0x3c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define CMDR3 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define SARMODE0 0x5c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define SARMODE0_TXVCS_0 (0x0 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #define SARMODE0_TXVCS_1k (0x1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #define SARMODE0_TXVCS_2k (0x2 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define SARMODE0_TXVCS_4k (0x3 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #define SARMODE0_TXVCS_8k (0x4 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define SARMODE0_TXVCS_16k (0x5 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #define SARMODE0_TXVCS_32k (0x6 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define SARMODE0_TXVCS_64k (0x7 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define SARMODE0_TXVCS_32 (0x8 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define SARMODE0_ABRVCS_0 (0x0 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define SARMODE0_ABRVCS_512 (0x1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define SARMODE0_ABRVCS_1k (0x2 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define SARMODE0_ABRVCS_2k (0x3 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define SARMODE0_ABRVCS_4k (0x4 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define SARMODE0_ABRVCS_8k (0x5 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define SARMODE0_ABRVCS_16k (0x6 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define SARMODE0_ABRVCS_32k (0x7 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define SARMODE0_ABRVCS_32 (0x9 << 4) /* The others are "8", this one really has to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) be 9. Tell me you don't believe me. -- REW */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define SARMODE0_RXVCS_0 (0x0 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #define SARMODE0_RXVCS_1k (0x1 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define SARMODE0_RXVCS_2k (0x2 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define SARMODE0_RXVCS_4k (0x3 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define SARMODE0_RXVCS_8k (0x4 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define SARMODE0_RXVCS_16k (0x5 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) #define SARMODE0_RXVCS_32k (0x6 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #define SARMODE0_RXVCS_64k (0x7 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #define SARMODE0_RXVCS_32 (0x8 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define SARMODE0_CALSUP_1 (0x0 << 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define SARMODE0_CALSUP_2 (0x1 << 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define SARMODE0_CALSUP_3 (0x2 << 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define SARMODE0_CALSUP_4 (0x3 << 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define SARMODE0_PRPWT_FS50_0 (0x0 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #define SARMODE0_PRPWT_FS50_2 (0x1 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #define SARMODE0_PRPWT_FS50_5 (0x2 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) #define SARMODE0_PRPWT_FS50_11 (0x3 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #define SARMODE0_PRPWT_FS155_0 (0x0 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define SARMODE0_PRPWT_FS155_1 (0x1 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define SARMODE0_PRPWT_FS155_2 (0x2 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define SARMODE0_PRPWT_FS155_3 (0x3 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define SARMODE0_SRTS0 (0x1 << 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define SARMODE0_SRTS1 (0x1 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define SARMODE0_RUN (0x1 << 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define SARMODE0_UNLOCK (0x1 << 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define SARMODE0_CWRE (0x1 << 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) #define SARMODE0_INTMODE_READCLEAR (0x0 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #define SARMODE0_INTMODE_READNOCLEAR (0x1 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) #define SARMODE0_INTMODE_READNOCLEARINHIBIT (0x2 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define SARMODE0_INTMODE_READCLEARINHIBIT (0x3 << 28) /* Tell me you don't believe me. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #define SARMODE0_GINT (0x1 << 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #define SARMODE0_SHADEN (0x1 << 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) #define SARMODE1 0x60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #define SARMODE1_TRTL_SHIFT 0 /* Program to 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) #define SARMODE1_RRTL_SHIFT 4 /* Program to 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) #define SARMODE1_TAGM (0x1 << 8) /* Program to 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) #define SARMODE1_HECM0 (0x1 << 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) #define SARMODE1_HECM1 (0x1 << 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #define SARMODE1_HECM2 (0x1 << 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) #define SARMODE1_GFCE (0x1 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) #define SARMODE1_GFCR (0x1 << 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) #define SARMODE1_PMS (0x1 << 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) #define SARMODE1_GPRI (0x1 << 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #define SARMODE1_GPAS (0x1 << 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) #define SARMODE1_GVAS (0x1 << 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #define SARMODE1_GNAM (0x1 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #define SARMODE1_GPLEN (0x1 << 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define SARMODE1_DUMPE (0x1 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) #define SARMODE1_OAMCRC (0x1 << 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) #define SARMODE1_DCOAM (0x1 << 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) #define SARMODE1_DCRM (0x1 << 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) #define SARMODE1_TSTLP (0x1 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) #define SARMODE1_DEFHEC (0x1 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) #define ISR 0x64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #define IUSR 0x68
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) #define IMR 0x6c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) #define ISR_LPCO (0x1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) #define ISR_DPCO (0x1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) #define ISR_RBRQ0_W (0x1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) #define ISR_RBRQ1_W (0x1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) #define ISR_RBRQ2_W (0x1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) #define ISR_RBRQ3_W (0x1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) #define ISR_RBRQ0_NF (0x1 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) #define ISR_RBRQ1_NF (0x1 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) #define ISR_RBRQ2_NF (0x1 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) #define ISR_RBRQ3_NF (0x1 << 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) #define ISR_BFP_SC (0x1 << 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #define ISR_INIT (0x1 << 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) #define ISR_INIT_ERR (0x1 << 12) /* Documented as "reserved" */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) #define ISR_USCEO (0x1 << 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) #define ISR_UPEC0 (0x1 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) #define ISR_VPFCO (0x1 << 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) #define ISR_CRCCO (0x1 << 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) #define ISR_HECO (0x1 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) #define ISR_TBRQ_W (0x1 << 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) #define ISR_TBRQ_NF (0x1 << 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) #define ISR_CTPQ_E (0x1 << 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) #define ISR_GFC_C0 (0x1 << 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) #define ISR_PCI_FTL (0x1 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) #define ISR_CSQ_W (0x1 << 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) #define ISR_CSQ_NF (0x1 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) #define ISR_EXT_INT (0x1 << 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) #define ISR_RXDMA_S (0x1 << 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) #define TMCONF 0x78
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) /* Bits? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) #define CALPRESCALE 0x7c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) /* Bits? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) #define CELLOSCONF 0x84
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) #define CELLOSCONF_COTS (0x1 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) #define CELLOSCONF_CEN (0x1 << 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) #define CELLOSCONF_SC8 (0x3 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) #define CELLOSCONF_SC4 (0x2 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) #define CELLOSCONF_SC2 (0x1 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) #define CELLOSCONF_SC1 (0x0 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) #define CELLOSCONF_COBS (0x1 << 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) #define CELLOSCONF_COPK (0x1 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) #define CELLOSCONF_COST (0x1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) /* Bits? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) #define RAS0 0x1bc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) #define RAS0_DCD_XHLT (0x1 << 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) #define RAS0_VPSEL (0x1 << 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) #define RAS0_VCSEL (0x1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) #define RAS1 0x1c0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) #define RAS1_UTREG (0x1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) #define DMAMR 0x1cc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) #define DMAMR_TX_MODE_FULL (0x0 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) #define DMAMR_TX_MODE_PART (0x1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) #define DMAMR_TX_MODE_NONE (0x2 << 0) /* And 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) #define RAS2 0x280
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) #define RAS2_NNI (0x1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) #define RAS2_USEL (0x1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) #define RAS2_UBS (0x1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) struct fs_transmit_config {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) u32 atm_hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) u32 TMC[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) u32 spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) u32 rtag[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) #define TC_FLAGS_AAL5 (0x0 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) #define TC_FLAGS_TRANSPARENT_PAYLOAD (0x1 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) #define TC_FLAGS_TRANSPARENT_CELL (0x2 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) #define TC_FLAGS_STREAMING (0x1 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) #define TC_FLAGS_PACKET (0x0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) #define TC_FLAGS_TYPE_ABR (0x0 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) #define TC_FLAGS_TYPE_CBR (0x1 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) #define TC_FLAGS_TYPE_VBR (0x2 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) #define TC_FLAGS_TYPE_UBR (0x3 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) #define TC_FLAGS_CAL0 (0x0 << 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) #define TC_FLAGS_CAL1 (0x1 << 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) #define TC_FLAGS_CAL2 (0x2 << 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) #define TC_FLAGS_CAL3 (0x3 << 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) #define RC_FLAGS_NAM (0x1 << 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) #define RC_FLAGS_RXBM_PSB (0x0 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) #define RC_FLAGS_RXBM_CIF (0x1 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) #define RC_FLAGS_RXBM_PMB (0x2 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) #define RC_FLAGS_RXBM_STR (0x4 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) #define RC_FLAGS_RXBM_SAF (0x6 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) #define RC_FLAGS_RXBM_POS (0x6 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) #define RC_FLAGS_BFPS (0x1 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) #define RC_FLAGS_BFPS_BFP (0x1 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) #define RC_FLAGS_BFPS_BFP0 (0x0 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) #define RC_FLAGS_BFPS_BFP1 (0x1 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) #define RC_FLAGS_BFPS_BFP2 (0x2 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) #define RC_FLAGS_BFPS_BFP3 (0x3 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) #define RC_FLAGS_BFPS_BFP4 (0x4 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) #define RC_FLAGS_BFPS_BFP5 (0x5 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) #define RC_FLAGS_BFPS_BFP6 (0x6 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) #define RC_FLAGS_BFPS_BFP7 (0x7 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) #define RC_FLAGS_BFPS_BFP01 (0x8 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) #define RC_FLAGS_BFPS_BFP23 (0x9 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) #define RC_FLAGS_BFPS_BFP45 (0xa << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) #define RC_FLAGS_BFPS_BFP67 (0xb << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) #define RC_FLAGS_BFPS_BFP07 (0xc << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) #define RC_FLAGS_BFPS_BFP27 (0xd << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) #define RC_FLAGS_BFPS_BFP47 (0xe << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) #define RC_FLAGS_BFPP (0x1 << 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) #define RC_FLAGS_TEVC (0x1 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) #define RC_FLAGS_TEP (0x1 << 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) #define RC_FLAGS_AAL5 (0x0 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) #define RC_FLAGS_TRANSP (0x1 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) #define RC_FLAGS_TRANSC (0x2 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) #define RC_FLAGS_ML (0x1 << 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) #define RC_FLAGS_TRBRM (0x1 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) #define RC_FLAGS_PRI (0x1 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) #define RC_FLAGS_HOAM (0x1 << 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) #define RC_FLAGS_CRC10 (0x1 << 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) #define RAC 0x1c8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) #define RAM 0x1c4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) /************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) * Then the datastructures that the DRIVER uses. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) ************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) #define TXQ_NENTRIES 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) #define RXRQ_NENTRIES 1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) struct fs_vcc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) int channo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) wait_queue_head_t close_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) struct sk_buff *last_skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) struct queue {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) struct FS_QENTRY *sa, *ea;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) int offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) struct freepool {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) int offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) int bufsize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) int nr_buffers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) int n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) struct fs_dev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) struct fs_dev *next; /* other FS devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) int flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) unsigned char irq; /* IRQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) struct pci_dev *pci_dev; /* PCI stuff */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) struct atm_dev *atm_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) struct timer_list timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) unsigned long hw_base; /* mem base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) void __iomem *base; /* Mapping of base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) int channo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) unsigned long channel_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) struct queue hp_txq, lp_txq, tx_relq, st_q;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) struct freepool rx_fp[FS_NR_FREE_POOLS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) struct queue rx_rq[FS_NR_RX_QUEUES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) int nchannels;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) struct atm_vcc **atm_vccs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) void *tx_inuse;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) int ntxpckts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) /* Number of channesl that the FS50 supports. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) #define FS50_CHANNEL_BITS 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) #define FS50_NR_CHANNELS (1 << FS50_CHANNEL_BITS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) #define FS_DEV(atm_dev) ((struct fs_dev *) (atm_dev)->dev_data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) #define FS_VCC(atm_vcc) ((struct fs_vcc *) (atm_vcc)->dev_data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) #define FS_IS50 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) #define FS_IS155 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) #define IS_FS50(dev) (dev->flags & FS_IS50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) #define IS_FS155(dev) (dev->flags & FS_IS155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) /* Within limits this is user-configurable. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) /* Note: Currently the sum (10 -> 1k channels) is hardcoded in the driver. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) #define FS155_VPI_BITS 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) #define FS155_VCI_BITS 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) #define FS155_CHANNEL_BITS (FS155_VPI_BITS + FS155_VCI_BITS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) #define FS155_NR_CHANNELS (1 << FS155_CHANNEL_BITS)