11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* drivers/atm/firestream.h - FireStream 155 (MB86697) and
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                            FireStream  50 (MB86695) device driver
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Written & (C) 2000 by R.E.Wolff@BitWizard.nl
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copied snippets from zatm.c by Werner Almesberger, EPFL LRC/ICA
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * and ambassador.c Copyright (C) 1995-1999  Madge Networks Ltd
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  This program is free software; you can redistribute it and/or modify
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  it under the terms of the GNU General Public License as published by
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  the Free Software Foundation; either version 2 of the License, or
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  (at your option) any later version.
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  This program is distributed in the hope that it will be useful,
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  but WITHOUT ANY WARRANTY; without even the implied warranty of
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  GNU General Public License for more details.
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  You should have received a copy of the GNU General Public License
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  along with this program; if not, write to the Free Software
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  The GNU GPL is contained in /usr/doc/copyright/GPL on a Debian
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  system and in the file COPYING in the Linux kernel source.
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/***********************************************************************
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                  first the defines for the chip.                    *
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ***********************************************************************/
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/********************* General chip parameters. ************************/
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS_NR_FREE_POOLS   8
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS_NR_RX_QUEUES    4
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/********************* queues and queue access macros ******************/
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* A queue entry. */
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct FS_QENTRY {
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 cmd;
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 p0, p1, p2;
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* A freepool entry. */
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct FS_BPENTRY {
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 flags;
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 next;
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 bsa;
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 aal_bufsize;
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* The hardware doesn't look at this, but we need the SKB somewhere... */
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff *skb;
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct freepool *fp;
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct fs_dev *dev;
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STATUS_CODE(qe)  ((qe->cmd >> 22) & 0x3f)
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* OFFSETS against the base of a QUEUE... */
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QSA     0x00
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QEA     0x04
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QRP     0x08
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QWP     0x0c
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QCNF    0x10   /* Only for Release queues! */
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Not for the transmit pending queue. */
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* OFFSETS against the base of a FREE POOL... */
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FPCNF   0x00
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FPSA    0x04
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FPEA    0x08
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FPCNT   0x0c
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FPCTU   0x10
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_SA(b)     (b + QSA )
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_EA(b)     (b + QEA )
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_RP(b)     (b + QRP )
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_WP(b)     (b + QWP )
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_CNF(b)    (b + QCNF)
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FP_CNF(b)   (b + FPCNF)
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FP_SA(b)    (b + FPSA)
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FP_EA(b)    (b + FPEA)
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FP_CNT(b)   (b + FPCNT)
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FP_CTU(b)   (b + FPCTU)
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* bits in a queue register. */
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_FULL      0x1
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_EMPTY     0x2
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_INCWRAP   0x4
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define Q_ADDR_MASK 0xfffffff0
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* bits in a FreePool config register */
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBFP_RBS    (0x1 << 16)
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBFP_RBSVAL (0x1 << 15)
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBFP_CME    (0x1 << 12)
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBFP_DLP    (0x1 << 11)
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBFP_BFPWT  (0x1 <<  0)
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* FireStream commands. */
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_NULL             (0x00 << 22)
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_REG_RD           (0x01 << 22)
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_REG_RDM          (0x02 << 22)
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_REG_WR           (0x03 << 22)
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_REG_WRM          (0x04 << 22)
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_CONFIG_TX        (0x05 << 22)
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_CONFIG_RX        (0x06 << 22)
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_PRP_RD           (0x07 << 22)
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_PRP_RDM          (0x2a << 22)
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_PRP_WR           (0x09 << 22)
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_PRP_WRM          (0x2b << 22)
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_RX_EN            (0x0a << 22)
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_RX_PURGE         (0x0b << 22)
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_RX_PURGE_INH     (0x0c << 22)
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_TX_EN            (0x0d << 22)
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_TX_PURGE         (0x0e << 22)
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_TX_PURGE_INH     (0x0f << 22)
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_RST_CG           (0x10 << 22)
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_SET_CG           (0x11 << 22)
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_RST_CLP          (0x12 << 22)
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_SET_CLP          (0x13 << 22)
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_OVERRIDE         (0x14 << 22)
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_ADD_BFP          (0x15 << 22)
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_DUMP_TX          (0x16 << 22)
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_DUMP_RX          (0x17 << 22)
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_LRAM_RD          (0x18 << 22)
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_LRAM_RDM         (0x28 << 22)
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_LRAM_WR          (0x19 << 22)
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_LRAM_WRM         (0x29 << 22)
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_LRAM_BSET        (0x1a << 22)
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_LRAM_BCLR        (0x1b << 22)
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_CONFIG_SEGM      (0x1c << 22)
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_READ_SEGM        (0x1d << 22)
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_CONFIG_ROUT      (0x1e << 22)
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_READ_ROUT        (0x1f << 22)
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_CONFIG_TM        (0x20 << 22)
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_READ_TM          (0x21 << 22)
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_CONFIG_TXBM      (0x22 << 22)
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_READ_TXBM        (0x23 << 22)
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_CONFIG_RXBM      (0x24 << 22)
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_READ_RXBM        (0x25 << 22)
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_CONFIG_REAS      (0x26 << 22)
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_READ_REAS        (0x27 << 22)
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_TRANSMIT_DE          (0x0 << 30)
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_LINKED           (0x1 << 30)
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_IMM              (0x2 << 30)
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QE_CMD_IMM_INQ          (0x3 << 30)
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TD_EPI                  (0x1 << 27)
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TD_COMMAND              (0x1 << 28)
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TD_DATA                 (0x0 << 29)
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TD_RM_CELL              (0x1 << 29)
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TD_OAM_CELL             (0x2 << 29)
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TD_OAM_CELL_SEGMENT     (0x3 << 29)
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TD_BPI                  (0x1 << 20)
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FP_FLAGS_EPI            (0x1 << 27)
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_PQ(i)  (0x00  + (i) * 0x10)
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXB_RQ    (0x20)
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_Q      (0x48)
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RXB_FP(i) (0x90  + (i) * 0x14)
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RXB_RQ(i) (0x134 + (i) * 0x14)
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXQ_HP 0
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXQ_LP 1
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Phew. You don't want to know how many revisions these simple queue
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * address macros went through before I got them nice and compact as
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * they are now. -- REW
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* And now for something completely different:
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The rest of the registers... */
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CMDR0 0x34
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CMDR1 0x38
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CMDR2 0x3c
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CMDR3 0x40
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0     0x5c
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_0    (0x0 << 0)
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_1k   (0x1 << 0)
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_2k   (0x2 << 0)
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_4k   (0x3 << 0)
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_8k   (0x4 << 0)
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_16k  (0x5 << 0)
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_32k  (0x6 << 0)
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_64k  (0x7 << 0)
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_TXVCS_32   (0x8 << 0)
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_0   (0x0 << 4)
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_512 (0x1 << 4)
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_1k  (0x2 << 4)
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_2k  (0x3 << 4)
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_4k  (0x4 << 4)
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_8k  (0x5 << 4)
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_16k (0x6 << 4)
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_32k (0x7 << 4)
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_ABRVCS_32  (0x9 << 4) /* The others are "8", this one really has to
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					  be 9. Tell me you don't believe me. -- REW */
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_0    (0x0 << 8)
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_1k   (0x1 << 8)
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_2k   (0x2 << 8)
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_4k   (0x3 << 8)
2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_8k   (0x4 << 8)
2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_16k  (0x5 << 8)
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_32k  (0x6 << 8)
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_64k  (0x7 << 8)
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RXVCS_32   (0x8 << 8)
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_CALSUP_1  (0x0 << 12)
2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_CALSUP_2  (0x1 << 12)
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_CALSUP_3  (0x2 << 12)
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_CALSUP_4  (0x3 << 12)
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_PRPWT_FS50_0  (0x0 << 14)
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_PRPWT_FS50_2  (0x1 << 14)
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_PRPWT_FS50_5  (0x2 << 14)
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_PRPWT_FS50_11 (0x3 << 14)
2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_PRPWT_FS155_0 (0x0 << 14)
2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_PRPWT_FS155_1 (0x1 << 14)
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_PRPWT_FS155_2 (0x2 << 14)
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_PRPWT_FS155_3 (0x3 << 14)
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_SRTS0     (0x1 << 23)
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_SRTS1     (0x1 << 24)
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_RUN       (0x1 << 25)
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_UNLOCK    (0x1 << 26)
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_CWRE      (0x1 << 27)
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_INTMODE_READCLEAR          (0x0 << 28)
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_INTMODE_READNOCLEAR        (0x1 << 28)
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_INTMODE_READNOCLEARINHIBIT (0x2 << 28)
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_INTMODE_READCLEARINHIBIT   (0x3 << 28)  /* Tell me you don't believe me. */
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_GINT      (0x1 << 30)
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE0_SHADEN    (0x1 << 31)
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1     0x60
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_TRTL_SHIFT 0   /* Program to 0 */
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_RRTL_SHIFT 4   /* Program to 0 */
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_TAGM       (0x1 <<  8)  /* Program to 0 */
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_HECM0      (0x1 <<  9)
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_HECM1      (0x1 << 10)
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_HECM2      (0x1 << 11)
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_GFCE       (0x1 << 14)
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_GFCR       (0x1 << 15)
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_PMS        (0x1 << 18)
2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_GPRI       (0x1 << 19)
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_GPAS       (0x1 << 20)
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_GVAS       (0x1 << 21)
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_GNAM       (0x1 << 22)
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_GPLEN      (0x1 << 23)
2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_DUMPE      (0x1 << 24)
2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_OAMCRC     (0x1 << 25)
2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_DCOAM      (0x1 << 26)
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_DCRM       (0x1 << 27)
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_TSTLP      (0x1 << 28)
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SARMODE1_DEFHEC     (0x1 << 29)
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR      0x64
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IUSR     0x68
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IMR      0x6c
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_LPCO          (0x1 <<  0)
3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_DPCO          (0x1 <<  1)
3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RBRQ0_W       (0x1 <<  2)
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RBRQ1_W       (0x1 <<  3)
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RBRQ2_W       (0x1 <<  4)
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RBRQ3_W       (0x1 <<  5)
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RBRQ0_NF      (0x1 <<  6)
3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RBRQ1_NF      (0x1 <<  7)
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RBRQ2_NF      (0x1 <<  8)
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RBRQ3_NF      (0x1 <<  9)
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_BFP_SC        (0x1 << 10)
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_INIT          (0x1 << 11)
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_INIT_ERR      (0x1 << 12) /* Documented as "reserved" */
3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_USCEO         (0x1 << 13)
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_UPEC0         (0x1 << 14)
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_VPFCO         (0x1 << 15)
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_CRCCO         (0x1 << 16)
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_HECO          (0x1 << 17)
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_TBRQ_W        (0x1 << 18)
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_TBRQ_NF       (0x1 << 19)
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_CTPQ_E        (0x1 << 20)
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_GFC_C0        (0x1 << 21)
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_PCI_FTL       (0x1 << 22)
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_CSQ_W         (0x1 << 23)
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_CSQ_NF        (0x1 << 24)
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_EXT_INT       (0x1 << 25)
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISR_RXDMA_S       (0x1 << 26)
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TMCONF 0x78
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Bits? */
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CALPRESCALE 0x7c
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Bits? */
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF 0x84
3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_COTS   (0x1 << 28)
3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_CEN    (0x1 << 27)
3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_SC8    (0x3 << 24)
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_SC4    (0x2 << 24)
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_SC2    (0x1 << 24)
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_SC1    (0x0 << 24)
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_COBS   (0x1 << 16)
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_COPK   (0x1 <<  8)
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CELLOSCONF_COST   (0x1 <<  0)
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Bits? */
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS0 0x1bc
3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS0_DCD_XHLT (0x1 << 31)
3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS0_VPSEL    (0x1 << 16)
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS0_VCSEL    (0x1 <<  0)
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS1 0x1c0
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS1_UTREG    (0x1 << 5)
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMAMR 0x1cc
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMAMR_TX_MODE_FULL (0x0 << 0)
3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMAMR_TX_MODE_PART (0x1 << 0)
3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMAMR_TX_MODE_NONE (0x2 << 0) /* And 3 */
3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS2 0x280
3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS2_NNI  (0x1 << 0)
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS2_USEL (0x1 << 1)
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAS2_UBS  (0x1 << 2)
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct fs_transmit_config {
3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 flags;
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 atm_hdr;
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 TMC[4];
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 spec;
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 rtag[3];
3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_AAL5      (0x0 << 29)
3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_TRANSPARENT_PAYLOAD (0x1 << 29)
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_TRANSPARENT_CELL    (0x2 << 29)
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_STREAMING (0x1 << 28)
3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_PACKET    (0x0)
3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_TYPE_ABR  (0x0 << 22)
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_TYPE_CBR  (0x1 << 22)
3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_TYPE_VBR  (0x2 << 22)
3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_TYPE_UBR  (0x3 << 22)
3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_CAL0      (0x0 << 20)
3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_CAL1      (0x1 << 20)
3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_CAL2      (0x2 << 20)
3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TC_FLAGS_CAL3      (0x3 << 20)
3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_NAM        (0x1 << 13)
3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_RXBM_PSB   (0x0 << 14)
3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_RXBM_CIF   (0x1 << 14)
3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_RXBM_PMB   (0x2 << 14)
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_RXBM_STR   (0x4 << 14)
4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_RXBM_SAF   (0x6 << 14)
4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_RXBM_POS   (0x6 << 14)
4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS       (0x1 << 17)
4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP   (0x1 << 17)
4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP0  (0x0 << 17)
4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP1  (0x1 << 17)
4091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP2  (0x2 << 17)
4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP3  (0x3 << 17)
4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP4  (0x4 << 17)
4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP5  (0x5 << 17)
4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP6  (0x6 << 17)
4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP7  (0x7 << 17)
4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP01 (0x8 << 17)
4161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP23 (0x9 << 17)
4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP45 (0xa << 17)
4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP67 (0xb << 17)
4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP07 (0xc << 17)
4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP27 (0xd << 17)
4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS_BFP47 (0xe << 17)
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPS       (0x1 << 17)
4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_BFPP       (0x1 << 21)
4251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_TEVC       (0x1 << 22)
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_TEP        (0x1 << 23)
4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_AAL5       (0x0 << 24)
4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_TRANSP     (0x1 << 24)
4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_TRANSC     (0x2 << 24)
4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_ML         (0x1 << 27)
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_TRBRM      (0x1 << 28)
4321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_PRI        (0x1 << 29)
4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_HOAM       (0x1 << 30)
4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RC_FLAGS_CRC10      (0x1 << 31)
4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAC 0x1c8
4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RAM 0x1c4
4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/************************************************************************
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *         Then the datastructures that the DRIVER uses.                *
4441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ************************************************************************/
4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXQ_NENTRIES  32
4471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RXRQ_NENTRIES 1024
4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct fs_vcc {
4511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int channo;
4521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	wait_queue_head_t close_wait;
4531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff *last_skb;
4541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct queue {
4581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FS_QENTRY *sa, *ea;
4591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int offset;
4601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct freepool {
4631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int offset;
4641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int bufsize;
4651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int nr_buffers;
4661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int n;
4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct fs_dev {
4711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct fs_dev *next;		/* other FS devices */
4721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int flags;
4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char irq;		/* IRQ */
4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *pci_dev;	/* PCI stuff */
4761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct atm_dev *atm_dev;
4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list timer;
4781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long hw_base;		/* mem base address */
4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void __iomem *base;             /* Mapping of base address */
4811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int channo;
4821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long channel_mask;
4831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct queue    hp_txq, lp_txq, tx_relq, st_q;
4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct freepool rx_fp[FS_NR_FREE_POOLS];
4861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct queue    rx_rq[FS_NR_RX_QUEUES];
4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int nchannels;
4891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct atm_vcc **atm_vccs;
4901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *tx_inuse;
4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ntxpckts;
4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of channesl that the FS50 supports. */
4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS50_CHANNEL_BITS  5
4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS50_NR_CHANNELS      (1 << FS50_CHANNEL_BITS)
5001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS_DEV(atm_dev) ((struct fs_dev *) (atm_dev)->dev_data)
5031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS_VCC(atm_vcc) ((struct fs_vcc *) (atm_vcc)->dev_data)
5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS_IS50  0x1
5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS_IS155 0x2
5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IS_FS50(dev)  (dev->flags & FS_IS50)
5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IS_FS155(dev) (dev->flags & FS_IS155)
5111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Within limits this is user-configurable. */
5131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Note: Currently the sum (10 -> 1k channels) is hardcoded in the driver. */
5141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS155_VPI_BITS 4
5151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS155_VCI_BITS 6
5161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS155_CHANNEL_BITS  (FS155_VPI_BITS + FS155_VCI_BITS)
5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FS155_NR_CHANNELS   (1 << FS155_CHANNEL_BITS)
519