forked from mirrors/linux
		
	 ede58ef28e
			
		
	
	
		ede58ef28e
		
	
	
	
	
		
			
			Signed-off-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			845 lines
		
	
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			845 lines
		
	
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| 
 | |
|   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_ */
 |