Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / atm / he.h
diff --git a/kernel/drivers/atm/he.h b/kernel/drivers/atm/he.h
new file mode 100644 (file)
index 0000000..f3f5367
--- /dev/null
@@ -0,0 +1,845 @@
+/*
+
+  he.h
+
+  ForeRunnerHE ATM Adapter driver for ATM on Linux
+  Copyright (C) 1999-2001  Naval Research Laboratory
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+/*
+
+  he.h
+
+  ForeRunnerHE ATM Adapter driver for ATM on Linux
+  Copyright (C) 1999-2000  Naval Research Laboratory
+
+  Permission to use, copy, modify and distribute this software and its
+  documentation is hereby granted, provided that both the copyright
+  notice and this permission notice appear in all copies of the software,
+  derivative works or modified versions, and any portions thereof, and
+  that both notices appear in supporting documentation.
+
+  NRL ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
+  DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER
+  RESULTING FROM THE USE OF THIS SOFTWARE.
+
+ */
+
+#ifndef _HE_H_
+#define _HE_H_
+
+#define DEV_LABEL       "he"
+
+#define CONFIG_DEFAULT_VCIBITS 12
+#define CONFIG_DEFAULT_VPIBITS 0
+
+#define CONFIG_IRQ_SIZE                128
+#define CONFIG_IRQ_THRESH      (CONFIG_IRQ_SIZE/2)
+
+#define CONFIG_TPDRQ_SIZE      512
+#define TPDRQ_MASK(x)          (((unsigned long)(x))&((CONFIG_TPDRQ_SIZE<<3)-1))
+
+#define CONFIG_RBRQ_SIZE       512
+#define CONFIG_RBRQ_THRESH     400
+#define RBRQ_MASK(x)           (((unsigned long)(x))&((CONFIG_RBRQ_SIZE<<3)-1))
+
+#define CONFIG_TBRQ_SIZE       512
+#define CONFIG_TBRQ_THRESH     400
+#define TBRQ_MASK(x)           (((unsigned long)(x))&((CONFIG_TBRQ_SIZE<<2)-1))
+
+#define CONFIG_RBPL_SIZE       512
+#define CONFIG_RBPL_THRESH     64
+#define CONFIG_RBPL_BUFSIZE    4096
+#define RBPL_MASK(x)           (((unsigned long)(x))&((CONFIG_RBPL_SIZE<<3)-1))
+
+/* 5.1.3 initialize connection memory */
+
+#define CONFIG_RSRA            0x00000
+#define CONFIG_RCMLBM          0x08000
+#define CONFIG_RCMABR          0x0d800
+#define CONFIG_RSRB            0x0e000
+
+#define CONFIG_TSRA            0x00000
+#define CONFIG_TSRB            0x08000
+#define CONFIG_TSRC            0x0c000
+#define CONFIG_TSRD            0x0e000
+#define CONFIG_TMABR           0x0f000
+#define CONFIG_TPDBA           0x10000
+
+#define HE_MAXCIDBITS          12
+
+/* 2.9.3.3 interrupt encodings */
+
+struct he_irq {
+       volatile u32 isw;
+};
+
+#define IRQ_ALIGNMENT          0x1000
+
+#define NEXT_ENTRY(base, tail, mask) \
+                               (((unsigned long)base)|(((unsigned long)(tail+1))&mask))
+
+#define ITYPE_INVALID          0xffffffff
+#define ITYPE_TBRQ_THRESH      (0<<3)
+#define ITYPE_TPD_COMPLETE     (1<<3)
+#define ITYPE_RBPS_THRESH      (2<<3)
+#define ITYPE_RBPL_THRESH      (3<<3)
+#define ITYPE_RBRQ_THRESH      (4<<3)
+#define ITYPE_RBRQ_TIMER       (5<<3)
+#define ITYPE_PHY              (6<<3)
+#define ITYPE_OTHER            0x80
+#define ITYPE_PARITY           0x81
+#define ITYPE_ABORT            0x82
+
+#define ITYPE_GROUP(x)         (x & 0x7)
+#define ITYPE_TYPE(x)          (x & 0xf8)
+
+#define HE_NUM_GROUPS 8
+
+/* 2.1.4 transmit packet descriptor */
+
+struct he_tpd {
+
+       /* read by the adapter */
+
+       volatile u32 status;
+       volatile u32 reserved;
+
+#define TPD_MAXIOV     3
+       struct {
+               u32 addr, len;
+       } iovec[TPD_MAXIOV];
+
+#define address0 iovec[0].addr
+#define length0 iovec[0].len
+
+       /* linux-atm extensions */
+
+       struct sk_buff *skb;
+       struct atm_vcc *vcc;
+
+       struct list_head entry;
+};
+
+#define TPD_ALIGNMENT  64
+#define TPD_LEN_MASK   0xffff
+
+#define TPD_ADDR_SHIFT  6
+#define TPD_MASK       0xffffffc0
+#define TPD_ADDR(x)    ((x) & TPD_MASK)
+#define TPD_INDEX(x)   (TPD_ADDR(x) >> TPD_ADDR_SHIFT)
+
+
+/* table 2.3 transmit buffer return elements */
+
+struct he_tbrq {
+       volatile u32 tbre;
+};
+
+#define TBRQ_ALIGNMENT CONFIG_TBRQ_SIZE
+
+#define TBRQ_TPD(tbrq)         ((tbrq)->tbre & 0xffffffc0)
+#define TBRQ_EOS(tbrq)         ((tbrq)->tbre & (1<<3))
+#define TBRQ_MULTIPLE(tbrq)    ((tbrq)->tbre & (1))
+
+/* table 2.21 receive buffer return queue element field organization */
+
+struct he_rbrq {
+       volatile u32 addr;
+       volatile u32 cidlen;
+};
+
+#define RBRQ_ALIGNMENT CONFIG_RBRQ_SIZE
+
+#define RBRQ_ADDR(rbrq)                ((rbrq)->addr & 0xffffffc0)
+#define RBRQ_CRC_ERR(rbrq)     ((rbrq)->addr & (1<<5))
+#define RBRQ_LEN_ERR(rbrq)     ((rbrq)->addr & (1<<4))
+#define RBRQ_END_PDU(rbrq)     ((rbrq)->addr & (1<<3))
+#define RBRQ_AAL5_PROT(rbrq)   ((rbrq)->addr & (1<<2))
+#define RBRQ_CON_CLOSED(rbrq)  ((rbrq)->addr & (1<<1))
+#define RBRQ_HBUF_ERR(rbrq)    ((rbrq)->addr & 1)
+#define RBRQ_CID(rbrq)         (((rbrq)->cidlen >> 16) & 0x1fff)
+#define RBRQ_BUFLEN(rbrq)      ((rbrq)->cidlen & 0xffff)
+
+/* figure 2.3 transmit packet descriptor ready queue */
+
+struct he_tpdrq {
+       volatile u32 tpd;
+       volatile u32 cid;
+};
+
+#define TPDRQ_ALIGNMENT CONFIG_TPDRQ_SIZE
+
+/* table 2.30 host status page detail */
+
+#define HSP_ALIGNMENT  0x400           /* must align on 1k boundary */
+
+struct he_hsp {
+       struct he_hsp_entry {
+               volatile u32 tbrq_tail; 
+               volatile u32 reserved1[15];
+               volatile u32 rbrq_tail; 
+               volatile u32 reserved2[15];
+       } group[HE_NUM_GROUPS];
+};
+
+/*
+ * figure 2.9 receive buffer pools
+ *
+ * since a virtual address might be more than 32 bits, we store an index
+ * in the virt member of he_rbp.  NOTE: the lower six bits in the  rbrq
+ * addr member are used for buffer status further limiting us to 26 bits.
+ */
+
+struct he_rbp {
+       volatile u32 phys;
+       volatile u32 idx;       /* virt */
+};
+
+#define RBP_IDX_OFFSET 6
+
+/*
+ * the he dma engine will try to hold an extra 16 buffers in its local
+ * caches.  and add a couple buffers for safety.
+ */
+
+#define RBPL_TABLE_SIZE (CONFIG_RBPL_SIZE + 16 + 2)
+
+struct he_buff {
+       struct list_head entry;
+       dma_addr_t mapping;
+       unsigned long len;
+       u8 data[];
+};
+
+#ifdef notyet
+struct he_group {
+       u32 rpbl_size, rpbl_qsize;
+       struct he_rpb_entry *rbpl_ba;
+};
+#endif
+
+#define HE_LOOKUP_VCC(dev, cid) ((dev)->he_vcc_table[(cid)].vcc)
+
+struct he_vcc_table 
+{
+       struct atm_vcc *vcc;
+};
+
+struct he_cs_stper
+{
+       long pcr;
+       int inuse;
+};
+
+#define HE_NUM_CS_STPER                16
+
+struct he_dev {
+       unsigned int number;
+       unsigned int irq;
+       void __iomem *membase;
+
+       char prod_id[30];
+       char mac_addr[6];
+       int media;
+
+       unsigned int vcibits, vpibits;
+       unsigned int cells_per_row;
+       unsigned int bytes_per_row;
+       unsigned int cells_per_lbuf;
+       unsigned int r0_numrows, r0_startrow, r0_numbuffs;
+       unsigned int r1_numrows, r1_startrow, r1_numbuffs;
+       unsigned int tx_numrows, tx_startrow, tx_numbuffs;
+       unsigned int buffer_limit;
+
+       struct he_vcc_table *he_vcc_table;
+
+#ifdef notyet
+       struct he_group group[HE_NUM_GROUPS];
+#endif
+       struct he_cs_stper cs_stper[HE_NUM_CS_STPER];
+       unsigned total_bw;
+
+       dma_addr_t irq_phys;
+       struct he_irq *irq_base, *irq_head, *irq_tail;
+       volatile unsigned *irq_tailoffset;
+       int irq_peak;
+
+       struct tasklet_struct tasklet;
+       struct dma_pool *tpd_pool;
+       struct list_head outstanding_tpds;
+
+       dma_addr_t tpdrq_phys;
+       struct he_tpdrq *tpdrq_base, *tpdrq_tail, *tpdrq_head;
+
+       spinlock_t global_lock;         /* 8.1.5 pci transaction ordering
+                                         error problem */
+       dma_addr_t rbrq_phys;
+       struct he_rbrq *rbrq_base, *rbrq_head;
+       int rbrq_peak;
+
+       struct he_buff **rbpl_virt;
+       unsigned long *rbpl_table;
+       unsigned long rbpl_hint;
+       struct dma_pool *rbpl_pool;
+       dma_addr_t rbpl_phys;
+       struct he_rbp *rbpl_base, *rbpl_tail;
+       struct list_head rbpl_outstanding;
+       int rbpl_peak;
+
+       dma_addr_t tbrq_phys;
+       struct he_tbrq *tbrq_base, *tbrq_head;
+       int tbrq_peak;
+
+       dma_addr_t hsp_phys;
+       struct he_hsp *hsp;
+
+       struct pci_dev *pci_dev;
+       struct atm_dev *atm_dev;
+       struct he_dev *next;
+};
+
+#define HE_MAXIOV 20
+
+struct he_vcc
+{
+       struct list_head buffers;
+       int pdu_len;
+       int rc_index;
+
+       wait_queue_head_t rx_waitq;
+       wait_queue_head_t tx_waitq;
+};
+
+#define HE_VCC(vcc)    ((struct he_vcc *)(vcc->dev_data))
+
+#define PCI_VENDOR_ID_FORE     0x1127
+#define PCI_DEVICE_ID_FORE_HE  0x400
+
+#define GEN_CNTL_0                             0x40
+#define  INT_PROC_ENBL         (1<<25)
+#define  SLAVE_ENDIAN_MODE     (1<<16)
+#define  MRL_ENB               (1<<5)
+#define  MRM_ENB               (1<<4)
+#define  INIT_ENB              (1<<2)
+#define  IGNORE_TIMEOUT                (1<<1)
+#define  ENBL_64               (1<<0)
+
+#define MIN_PCI_LATENCY                32      /* errata 8.1.3 */
+
+#define HE_DEV(dev) ((struct he_dev *) (dev)->dev_data)
+
+#define he_is622(dev)  ((dev)->media & 0x1)
+#define he_isMM(dev)   ((dev)->media & 0x20)
+
+#define HE_REGMAP_SIZE 0x100000
+
+#define RESET_CNTL     0x80000
+#define  BOARD_RST_STATUS      (1<<6)
+
+#define HOST_CNTL      0x80004
+#define  PCI_BUS_SIZE64                        (1<<27)
+#define  DESC_RD_STATIC_64             (1<<26)
+#define  DATA_RD_STATIC_64             (1<<25)
+#define  DATA_WR_STATIC_64             (1<<24)
+#define  ID_CS                         (1<<12)
+#define  ID_WREN                       (1<<11)
+#define  ID_DOUT                       (1<<10)
+#define   ID_DOFFSET                   10
+#define  ID_DIN                                (1<<9)
+#define  ID_CLOCK                      (1<<8)
+#define  QUICK_RD_RETRY                        (1<<7)
+#define  QUICK_WR_RETRY                        (1<<6)
+#define  OUTFF_ENB                     (1<<5)
+#define  CMDFF_ENB                     (1<<4)
+#define  PERR_INT_ENB                  (1<<2)
+#define  IGNORE_INTR                   (1<<0)
+
+#define LB_SWAP                0x80008
+#define  SWAP_RNUM_MAX(x)      (x<<27)
+#define  DATA_WR_SWAP          (1<<20)
+#define  DESC_RD_SWAP          (1<<19)
+#define  DATA_RD_SWAP          (1<<18)
+#define  INTR_SWAP             (1<<17)
+#define  DESC_WR_SWAP          (1<<16)
+#define  SDRAM_INIT            (1<<15)
+#define  BIG_ENDIAN_HOST       (1<<14)
+#define  XFER_SIZE             (1<<7)
+
+#define LB_MEM_ADDR    0x8000c
+#define LB_MEM_DATA    0x80010
+
+#define LB_MEM_ACCESS  0x80014
+#define  LB_MEM_HNDSHK         (1<<30)
+#define  LM_MEM_WRITE          (0x7)
+#define  LM_MEM_READ           (0x3)
+
+#define SDRAM_CTL      0x80018
+#define  LB_64_ENB             (1<<3)
+#define  LB_TWR                        (1<<2)
+#define  LB_TRP                        (1<<1)
+#define  LB_TRAS               (1<<0)
+
+#define INT_FIFO       0x8001c
+#define  INT_MASK_D            (1<<15)
+#define  INT_MASK_C            (1<<14)
+#define  INT_MASK_B            (1<<13)
+#define  INT_MASK_A            (1<<12)
+#define  INT_CLEAR_D           (1<<11)
+#define  INT_CLEAR_C           (1<<10)
+#define  INT_CLEAR_B           (1<<9)
+#define  INT_CLEAR_A           (1<<8)
+
+#define ABORT_ADDR     0x80020
+
+#define IRQ0_BASE      0x80080
+#define  IRQ_BASE(x)           (x<<12)
+#define  IRQ_MASK              ((CONFIG_IRQ_SIZE<<2)-1)        /* was 0x3ff */
+#define  IRQ_TAIL(x)           (((unsigned long)(x)) & IRQ_MASK)
+#define IRQ0_HEAD      0x80084
+#define  IRQ_SIZE(x)           (x<<22)
+#define  IRQ_THRESH(x)         (x<<12)
+#define  IRQ_HEAD(x)           (x<<2)
+/* #define  IRQ_PENDING                (1)             conflict with linux/irq.h */
+#define IRQ0_CNTL      0x80088
+#define  IRQ_ADDRSEL(x)                (x<<2)
+#define  IRQ_INT_A             (0<<2)
+#define  IRQ_INT_B             (1<<2)
+#define  IRQ_INT_C             (2<<2)
+#define  IRQ_INT_D             (3<<2)
+#define  IRQ_TYPE_ADDR         0x1
+#define  IRQ_TYPE_LINE         0x0
+#define IRQ0_DATA      0x8008c
+
+#define IRQ1_BASE      0x80090
+#define IRQ1_HEAD      0x80094
+#define IRQ1_CNTL      0x80098
+#define IRQ1_DATA      0x8009c
+
+#define IRQ2_BASE      0x800a0
+#define IRQ2_HEAD      0x800a4
+#define IRQ2_CNTL      0x800a8
+#define IRQ2_DATA      0x800ac
+
+#define IRQ3_BASE      0x800b0
+#define IRQ3_HEAD      0x800b4
+#define IRQ3_CNTL      0x800b8
+#define IRQ3_DATA      0x800bc
+
+#define GRP_10_MAP     0x800c0
+#define GRP_32_MAP     0x800c4
+#define GRP_54_MAP     0x800c8
+#define GRP_76_MAP     0x800cc
+
+#define        G0_RBPS_S       0x80400
+#define G0_RBPS_T      0x80404
+#define  RBP_TAIL(x)           ((x)<<3)
+#define  RBP_MASK(x)           ((x)|0x1fff)
+#define G0_RBPS_QI     0x80408
+#define  RBP_QSIZE(x)          ((x)<<14)
+#define  RBP_INT_ENB           (1<<13)
+#define  RBP_THRESH(x)         (x)
+#define G0_RBPS_BS     0x8040c
+#define G0_RBPL_S      0x80410
+#define G0_RBPL_T      0x80414
+#define G0_RBPL_QI     0x80418 
+#define G0_RBPL_BS     0x8041c
+
+#define        G1_RBPS_S       0x80420
+#define G1_RBPS_T      0x80424
+#define G1_RBPS_QI     0x80428
+#define G1_RBPS_BS     0x8042c
+#define G1_RBPL_S      0x80430
+#define G1_RBPL_T      0x80434
+#define G1_RBPL_QI     0x80438
+#define G1_RBPL_BS     0x8043c
+
+#define        G2_RBPS_S       0x80440
+#define G2_RBPS_T      0x80444
+#define G2_RBPS_QI     0x80448
+#define G2_RBPS_BS     0x8044c
+#define G2_RBPL_S      0x80450
+#define G2_RBPL_T      0x80454
+#define G2_RBPL_QI     0x80458
+#define G2_RBPL_BS     0x8045c
+
+#define        G3_RBPS_S       0x80460
+#define G3_RBPS_T      0x80464
+#define G3_RBPS_QI     0x80468
+#define G3_RBPS_BS     0x8046c
+#define G3_RBPL_S      0x80470
+#define G3_RBPL_T      0x80474
+#define G3_RBPL_QI     0x80478
+#define G3_RBPL_BS     0x8047c
+
+#define        G4_RBPS_S       0x80480
+#define G4_RBPS_T      0x80484
+#define G4_RBPS_QI     0x80488
+#define G4_RBPS_BS     0x8048c
+#define G4_RBPL_S      0x80490
+#define G4_RBPL_T      0x80494
+#define G4_RBPL_QI     0x80498
+#define G4_RBPL_BS     0x8049c
+
+#define        G5_RBPS_S       0x804a0
+#define G5_RBPS_T      0x804a4
+#define G5_RBPS_QI     0x804a8
+#define G5_RBPS_BS     0x804ac
+#define G5_RBPL_S      0x804b0
+#define G5_RBPL_T      0x804b4
+#define G5_RBPL_QI     0x804b8
+#define G5_RBPL_BS     0x804bc
+
+#define        G6_RBPS_S       0x804c0
+#define G6_RBPS_T      0x804c4
+#define G6_RBPS_QI     0x804c8
+#define G6_RBPS_BS     0x804cc
+#define G6_RBPL_S      0x804d0
+#define G6_RBPL_T      0x804d4
+#define G6_RBPL_QI     0x804d8
+#define G6_RBPL_BS     0x804dc
+
+#define        G7_RBPS_S       0x804e0
+#define G7_RBPS_T      0x804e4
+#define G7_RBPS_QI     0x804e8
+#define G7_RBPS_BS     0x804ec
+
+#define G7_RBPL_S      0x804f0
+#define G7_RBPL_T      0x804f4
+#define G7_RBPL_QI     0x804f8
+#define G7_RBPL_BS     0x804fc
+
+#define G0_RBRQ_ST     0x80500
+#define G0_RBRQ_H      0x80504
+#define G0_RBRQ_Q      0x80508
+#define  RBRQ_THRESH(x)                ((x)<<13)
+#define  RBRQ_SIZE(x)          (x)
+#define G0_RBRQ_I      0x8050c
+#define  RBRQ_TIME(x)          ((x)<<8)
+#define  RBRQ_COUNT(x)         (x)
+
+/* fill in 1 ... 7 later */
+
+#define G0_TBRQ_B_T    0x80600
+#define G0_TBRQ_H      0x80604
+#define G0_TBRQ_S      0x80608
+#define G0_TBRQ_THRESH 0x8060c
+#define  TBRQ_THRESH(x)                (x)
+
+/* fill in 1 ... 7 later */
+
+#define RH_CONFIG      0x805c0
+#define  PHY_INT_ENB   (1<<10)
+#define  OAM_GID(x)    (x<<7)
+#define  PTMR_PRE(x)   (x)
+
+#define G0_INMQ_S      0x80580
+#define G0_INMQ_L      0x80584
+#define G1_INMQ_S      0x80588
+#define G1_INMQ_L      0x8058c
+#define G2_INMQ_S      0x80590
+#define G2_INMQ_L      0x80594
+#define G3_INMQ_S      0x80598
+#define G3_INMQ_L      0x8059c
+#define G4_INMQ_S      0x805a0
+#define G4_INMQ_L      0x805a4
+#define G5_INMQ_S      0x805a8
+#define G5_INMQ_L      0x805ac
+#define G6_INMQ_S      0x805b0
+#define G6_INMQ_L      0x805b4
+#define G7_INMQ_S      0x805b8
+#define G7_INMQ_L      0x805bc
+
+#define TPDRQ_B_H      0x80680
+#define TPDRQ_T                0x80684
+#define TPDRQ_S                0x80688
+
+#define UBUFF_BA       0x8068c
+
+#define RLBF0_H                0x806c0
+#define RLBF0_T                0x806c4
+#define RLBF1_H                0x806c8
+#define RLBF1_T                0x806cc
+#define RLBC_H         0x806d0
+#define RLBC_T         0x806d4
+#define RLBC_H2                0x806d8
+#define TLBF_H         0x806e0
+#define TLBF_T         0x806e4
+#define RLBF0_C                0x806e8
+#define RLBF1_C                0x806ec
+#define RXTHRSH                0x806f0
+#define LITHRSH                0x806f4
+
+#define LBARB          0x80700
+#define  SLICE_X(x)             (x<<28)
+#define  ARB_RNUM_MAX(x)        (x<<23)
+#define  TH_PRTY(x)             (x<<21)
+#define  RH_PRTY(x)             (x<<19)
+#define  TL_PRTY(x)             (x<<17)
+#define  RL_PRTY(x)             (x<<15)
+#define  BUS_MULTI(x)           (x<<8)
+#define  NET_PREF(x)            (x)
+
+#define SDRAMCON       0x80704
+#define         BANK_ON                (1<<14)
+#define         WIDE_DATA              (1<<13)
+#define         TWR_WAIT               (1<<12)
+#define         TRP_WAIT               (1<<11)
+#define         TRAS_WAIT              (1<<10)
+#define         REF_RATE(x)            (x)
+
+#define LBSTAT         0x80708
+
+#define RCC_STAT       0x8070c
+#define  RCC_BUSY              (1)
+
+#define TCMCONFIG      0x80740
+#define  TM_DESL2              (1<<10)
+#define         TM_BANK_WAIT(x)        (x<<6)
+#define         TM_ADD_BANK4(x)        (x<<4)
+#define  TM_PAR_CHECK(x)       (x<<3)
+#define  TM_RW_WAIT(x)         (x<<2)
+#define  TM_SRAM_TYPE(x)       (x)
+
+#define TSRB_BA                0x80744 
+#define TSRC_BA                0x80748 
+#define TMABR_BA       0x8074c 
+#define TPD_BA         0x80750 
+#define TSRD_BA                0x80758 
+
+#define TX_CONFIG      0x80760
+#define  DRF_THRESH(x)         (x<<22)
+#define  TX_UT_MODE(x)         (x<<21)
+#define  TX_VCI_MASK(x)                (x<<17)
+#define  LBFREE_CNT(x)         (x)
+
+#define TXAAL5_PROTO   0x80764
+#define  CPCS_UU(x)            (x<<8)
+#define  CPI(x)                        (x)
+
+#define RCMCONFIG      0x80780
+#define  RM_DESL2(x)           (x<<10)
+#define  RM_BANK_WAIT(x)       (x<<6)
+#define  RM_ADD_BANK(x)                (x<<4)
+#define  RM_PAR_CHECK(x)       (x<<3)
+#define  RM_RW_WAIT(x)         (x<<2)
+#define  RM_SRAM_TYPE(x)       (x)
+
+#define RCMRSRB_BA     0x80784
+#define RCMLBM_BA      0x80788
+#define RCMABR_BA      0x8078c
+
+#define RC_CONFIG      0x807c0
+#define  UT_RD_DELAY(x)                (x<<11)
+#define  WRAP_MODE(x)          (x<<10)
+#define  RC_UT_MODE(x)         (x<<9)
+#define  RX_ENABLE             (1<<8)
+#define  RX_VALVP(x)           (x<<4)
+#define  RX_VALVC(x)           (x)
+
+#define MCC            0x807c4
+#define OEC            0x807c8
+#define DCC            0x807cc
+#define CEC            0x807d0
+
+#define HSP_BA         0x807f0
+
+#define LB_CONFIG      0x807f4
+#define  LB_SIZE(x)            (x)
+
+#define CON_DAT                0x807f8
+#define CON_CTL                0x807fc
+#define  CON_CTL_MBOX          (2<<30)
+#define  CON_CTL_TCM           (1<<30)
+#define  CON_CTL_RCM           (0<<30)
+#define  CON_CTL_WRITE         (1<<29)
+#define  CON_CTL_READ          (0<<29)
+#define  CON_CTL_BUSY          (1<<28)
+#define  CON_BYTE_DISABLE_3    (1<<22)         /* 24..31 */
+#define  CON_BYTE_DISABLE_2    (1<<21)         /* 16..23 */
+#define  CON_BYTE_DISABLE_1    (1<<20)         /* 8..15 */
+#define  CON_BYTE_DISABLE_0    (1<<19)         /* 0..7 */
+#define  CON_CTL_ADDR(x)       (x)
+
+#define FRAMER         0x80800         /* to 0x80bfc */
+
+/* 3.3 network controller (internal) mailbox registers */
+
+#define CS_STPER0      0x0
+       /* ... */
+#define CS_STPER31     0x01f
+
+#define CS_STTIM0      0x020
+       /* ... */
+#define CS_STTIM31     0x03f
+
+#define CS_TGRLD0      0x040
+       /* ... */
+#define CS_TGRLD15     0x04f
+
+#define CS_ERTHR0      0x050
+#define CS_ERTHR1      0x051
+#define CS_ERTHR2      0x052
+#define CS_ERTHR3      0x053
+#define CS_ERTHR4      0x054
+#define CS_ERCTL0      0x055
+#define  TX_ENABLE             (1<<28)
+#define  ER_ENABLE             (1<<27)
+#define CS_ERCTL1      0x056
+#define CS_ERCTL2      0x057
+#define CS_ERSTAT0     0x058
+#define CS_ERSTAT1     0x059
+
+#define CS_RTCCT       0x060
+#define CS_RTFWC       0x061
+#define CS_RTFWR       0x062
+#define CS_RTFTC       0x063
+#define CS_RTATR       0x064
+
+#define CS_TFBSET      0x070
+#define CS_TFBADD      0x071
+#define CS_TFBSUB      0x072
+#define CS_WCRMAX      0x073
+#define CS_WCRMIN      0x074
+#define CS_WCRINC      0x075
+#define CS_WCRDEC      0x076
+#define CS_WCRCEIL     0x077
+#define CS_BWDCNT      0x078
+
+#define CS_OTPPER      0x080
+#define CS_OTWPER      0x081
+#define CS_OTTLIM      0x082
+#define CS_OTTCNT      0x083
+
+#define CS_HGRRT0      0x090
+       /* ... */
+#define CS_HGRRT7      0x097
+
+#define CS_ORPTRS      0x0a0
+
+#define RXCON_CLOSE    0x100
+
+
+#define RCM_MEM_SIZE   0x10000         /* 1M of 32-bit registers */
+#define TCM_MEM_SIZE   0x20000         /* 2M of 32-bit registers */
+
+/* 2.5 transmit connection memory registers */
+
+#define TSR0_CONN_STATE(x)     ((x>>28) & 0x7)
+#define TSR0_USE_WMIN          (1<<23)
+#define TSR0_GROUP(x)          ((x & 0x7)<<18)
+#define TSR0_ABR               (2<<16)
+#define TSR0_UBR               (1<<16)
+#define TSR0_CBR               (0<<16)
+#define TSR0_PROT              (1<<15)
+#define TSR0_AAL0_SDU          (2<<12)
+#define TSR0_AAL0              (1<<12)
+#define TSR0_AAL5              (0<<12)
+#define TSR0_HALT_ER           (1<<11)
+#define TSR0_MARK_CI           (1<<10)
+#define TSR0_MARK_ER           (1<<9)
+#define TSR0_UPDATE_GER                (1<<8)
+#define TSR0_RC_INDEX(x)       (x & 0x1F)
+
+#define TSR1_PCR(x)            ((x & 0x7FFF)<<16)
+#define TSR1_MCR(x)            (x & 0x7FFF)
+
+#define TSR2_ACR(x)            ((x & 0x7FFF)<<16)
+
+#define TSR3_NRM_CNT(x)                ((x & 0xFF)<<24)
+#define TSR3_CRM_CNT(x)                (x & 0xFFFF)
+
+#define TSR4_FLUSH_CONN                (1<<31)
+#define TSR4_SESSION_ENDED     (1<<30)
+#define TSR4_CRC10             (1<<28)
+#define TSR4_NULL_CRC10                (1<<27)
+#define TSR4_PROT              (1<<26)
+#define TSR4_AAL0_SDU          (2<<23)
+#define TSR4_AAL0              (1<<23)
+#define TSR4_AAL5              (0<<23)
+
+#define TSR9_OPEN_CONN         (1<<20)
+
+#define TSR11_ICR(x)           ((x & 0x7FFF)<<16)
+#define TSR11_TRM(x)           ((x & 0x7)<<13)
+#define TSR11_NRM(x)           ((x & 0x7)<<10)
+#define TSR11_ADTF(x)          (x & 0x3FF)
+
+#define TSR13_RDF(x)           ((x & 0xF)<<23)
+#define TSR13_RIF(x)           ((x & 0xF)<<19)
+#define TSR13_CDF(x)           ((x & 0x7)<<16)
+#define TSR13_CRM(x)           (x & 0xFFFF)
+
+#define TSR14_DELETE           (1<<31)
+#define TSR14_ABR_CLOSE                (1<<16)
+
+/* 2.7.1 per connection receieve state registers */
+
+#define RSR0_START_PDU (1<<10)
+#define RSR0_OPEN_CONN (1<<6)
+#define RSR0_CLOSE_CONN        (0<<6)
+#define RSR0_PPD_ENABLE        (1<<5)
+#define RSR0_EPD_ENABLE        (1<<4)
+#define RSR0_TCP_CKSUM (1<<3)
+#define RSR0_AAL5              (0)
+#define RSR0_AAL0              (1)
+#define RSR0_AAL0_SDU          (2)
+#define RSR0_RAWCELL           (3)
+#define RSR0_RAWCELL_CRC10     (4)
+
+#define RSR1_AQI_ENABLE        (1<<20)
+#define RSR1_RBPL_ONLY (1<<19)
+#define RSR1_GROUP(x)  ((x)<<16)
+
+#define RSR4_AQI_ENABLE (1<<30)
+#define RSR4_GROUP(x)  ((x)<<27)
+#define RSR4_RBPL_ONLY (1<<26)
+
+/* 2.1.4 transmit packet descriptor */
+
+#define        TPD_USERCELL            0x0
+#define        TPD_SEGMENT_OAMF5       0x4
+#define        TPD_END2END_OAMF5       0x5
+#define        TPD_RMCELL              0x6
+#define TPD_CELLTYPE(x)                (x<<3)
+#define TPD_EOS                        (1<<2)
+#define TPD_CLP                        (1<<1)
+#define TPD_INT                        (1<<0)
+#define TPD_LST                (1<<31)
+
+/* table 4.3 serial eeprom information */
+
+#define PROD_ID                0x08    /* char[] */
+#define  PROD_ID_LEN   30
+#define HW_REV         0x26    /* char[] */
+#define M_SN           0x3a    /* integer */
+#define MEDIA          0x3e    /* integer */
+#define  HE155MM       0x26
+#define  HE622MM       0x27
+#define  HE155SM       0x46
+#define  HE622SM       0x47
+#define MAC_ADDR       0x42    /* char[] */
+
+#define CS_LOW         0x0
+#define CS_HIGH                ID_CS /* HOST_CNTL_ID_PROM_SEL */
+#define CLK_LOW                0x0
+#define CLK_HIGH       ID_CLOCK /* HOST_CNTL_ID_PROM_CLOCK */
+#define SI_HIGH                ID_DIN /* HOST_CNTL_ID_PROM_DATA_IN */
+#define EEPROM_DELAY   400 /* microseconds */
+
+#endif /* _HE_H_ */