xref: /OK3568_Linux_fs/kernel/drivers/atm/he.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun 
3*4882a593Smuzhiyun   he.h
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun   ForeRunnerHE ATM Adapter driver for ATM on Linux
6*4882a593Smuzhiyun   Copyright (C) 1999-2001  Naval Research Laboratory
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun   This library is free software; you can redistribute it and/or
9*4882a593Smuzhiyun   modify it under the terms of the GNU Lesser General Public
10*4882a593Smuzhiyun   License as published by the Free Software Foundation; either
11*4882a593Smuzhiyun   version 2.1 of the License, or (at your option) any later version.
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun   This library is distributed in the hope that it will be useful,
14*4882a593Smuzhiyun   but WITHOUT ANY WARRANTY; without even the implied warranty of
15*4882a593Smuzhiyun   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16*4882a593Smuzhiyun   Lesser General Public License for more details.
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun   You should have received a copy of the GNU Lesser General Public
19*4882a593Smuzhiyun   License along with this library; if not, write to the Free Software
20*4882a593Smuzhiyun   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun */
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /*
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun   he.h
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun   ForeRunnerHE ATM Adapter driver for ATM on Linux
29*4882a593Smuzhiyun   Copyright (C) 1999-2000  Naval Research Laboratory
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun   Permission to use, copy, modify and distribute this software and its
32*4882a593Smuzhiyun   documentation is hereby granted, provided that both the copyright
33*4882a593Smuzhiyun   notice and this permission notice appear in all copies of the software,
34*4882a593Smuzhiyun   derivative works or modified versions, and any portions thereof, and
35*4882a593Smuzhiyun   that both notices appear in supporting documentation.
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun   NRL ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
38*4882a593Smuzhiyun   DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER
39*4882a593Smuzhiyun   RESULTING FROM THE USE OF THIS SOFTWARE.
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun  */
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #ifndef _HE_H_
44*4882a593Smuzhiyun #define _HE_H_
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define DEV_LABEL       "he"
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define CONFIG_DEFAULT_VCIBITS	12
49*4882a593Smuzhiyun #define CONFIG_DEFAULT_VPIBITS	0
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #define CONFIG_IRQ_SIZE		128
52*4882a593Smuzhiyun #define CONFIG_IRQ_THRESH	(CONFIG_IRQ_SIZE/2)
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #define CONFIG_TPDRQ_SIZE	512
55*4882a593Smuzhiyun #define TPDRQ_MASK(x)		(((unsigned long)(x))&((CONFIG_TPDRQ_SIZE<<3)-1))
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define CONFIG_RBRQ_SIZE	512
58*4882a593Smuzhiyun #define CONFIG_RBRQ_THRESH	400
59*4882a593Smuzhiyun #define RBRQ_MASK(x)		(((unsigned long)(x))&((CONFIG_RBRQ_SIZE<<3)-1))
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #define CONFIG_TBRQ_SIZE	512
62*4882a593Smuzhiyun #define CONFIG_TBRQ_THRESH	400
63*4882a593Smuzhiyun #define TBRQ_MASK(x)		(((unsigned long)(x))&((CONFIG_TBRQ_SIZE<<2)-1))
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun #define CONFIG_RBPL_SIZE	512
66*4882a593Smuzhiyun #define CONFIG_RBPL_THRESH	64
67*4882a593Smuzhiyun #define CONFIG_RBPL_BUFSIZE	4096
68*4882a593Smuzhiyun #define RBPL_MASK(x)		(((unsigned long)(x))&((CONFIG_RBPL_SIZE<<3)-1))
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun /* 5.1.3 initialize connection memory */
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun #define CONFIG_RSRA		0x00000
73*4882a593Smuzhiyun #define CONFIG_RCMLBM		0x08000
74*4882a593Smuzhiyun #define CONFIG_RCMABR		0x0d800
75*4882a593Smuzhiyun #define CONFIG_RSRB		0x0e000
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #define CONFIG_TSRA		0x00000
78*4882a593Smuzhiyun #define CONFIG_TSRB		0x08000
79*4882a593Smuzhiyun #define CONFIG_TSRC		0x0c000
80*4882a593Smuzhiyun #define CONFIG_TSRD		0x0e000
81*4882a593Smuzhiyun #define CONFIG_TMABR		0x0f000
82*4882a593Smuzhiyun #define CONFIG_TPDBA		0x10000
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #define HE_MAXCIDBITS		12
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* 2.9.3.3 interrupt encodings */
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun struct he_irq {
89*4882a593Smuzhiyun 	volatile u32 isw;
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #define IRQ_ALIGNMENT		0x1000
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun #define NEXT_ENTRY(base, tail, mask) \
95*4882a593Smuzhiyun 				(((unsigned long)base)|(((unsigned long)(tail+1))&mask))
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #define ITYPE_INVALID		0xffffffff
98*4882a593Smuzhiyun #define ITYPE_TBRQ_THRESH	(0<<3)
99*4882a593Smuzhiyun #define ITYPE_TPD_COMPLETE	(1<<3)
100*4882a593Smuzhiyun #define ITYPE_RBPS_THRESH	(2<<3)
101*4882a593Smuzhiyun #define ITYPE_RBPL_THRESH	(3<<3)
102*4882a593Smuzhiyun #define ITYPE_RBRQ_THRESH	(4<<3)
103*4882a593Smuzhiyun #define ITYPE_RBRQ_TIMER	(5<<3)
104*4882a593Smuzhiyun #define ITYPE_PHY		(6<<3)
105*4882a593Smuzhiyun #define ITYPE_OTHER		0x80
106*4882a593Smuzhiyun #define ITYPE_PARITY		0x81
107*4882a593Smuzhiyun #define ITYPE_ABORT		0x82
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun #define ITYPE_GROUP(x)		(x & 0x7)
110*4882a593Smuzhiyun #define ITYPE_TYPE(x)		(x & 0xf8)
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define HE_NUM_GROUPS 8
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun /* 2.1.4 transmit packet descriptor */
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun struct he_tpd {
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun 	/* read by the adapter */
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun 	volatile u32 status;
121*4882a593Smuzhiyun 	volatile u32 reserved;
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun #define TPD_MAXIOV	3
124*4882a593Smuzhiyun 	struct {
125*4882a593Smuzhiyun 		u32 addr, len;
126*4882a593Smuzhiyun 	} iovec[TPD_MAXIOV];
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define address0 iovec[0].addr
129*4882a593Smuzhiyun #define length0 iovec[0].len
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun 	/* linux-atm extensions */
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun 	struct sk_buff *skb;
134*4882a593Smuzhiyun 	struct atm_vcc *vcc;
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun 	struct list_head entry;
137*4882a593Smuzhiyun };
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun #define TPD_ALIGNMENT	64
140*4882a593Smuzhiyun #define TPD_LEN_MASK	0xffff
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun #define TPD_ADDR_SHIFT  6
143*4882a593Smuzhiyun #define TPD_MASK	0xffffffc0
144*4882a593Smuzhiyun #define TPD_ADDR(x)	((x) & TPD_MASK)
145*4882a593Smuzhiyun #define TPD_INDEX(x)	(TPD_ADDR(x) >> TPD_ADDR_SHIFT)
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun /* table 2.3 transmit buffer return elements */
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun struct he_tbrq {
151*4882a593Smuzhiyun 	volatile u32 tbre;
152*4882a593Smuzhiyun };
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun #define TBRQ_ALIGNMENT	CONFIG_TBRQ_SIZE
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #define TBRQ_TPD(tbrq)		((tbrq)->tbre & 0xffffffc0)
157*4882a593Smuzhiyun #define TBRQ_EOS(tbrq)		((tbrq)->tbre & (1<<3))
158*4882a593Smuzhiyun #define TBRQ_MULTIPLE(tbrq)	((tbrq)->tbre & (1))
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun /* table 2.21 receive buffer return queue element field organization */
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun struct he_rbrq {
163*4882a593Smuzhiyun 	volatile u32 addr;
164*4882a593Smuzhiyun 	volatile u32 cidlen;
165*4882a593Smuzhiyun };
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun #define RBRQ_ALIGNMENT	CONFIG_RBRQ_SIZE
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun #define RBRQ_ADDR(rbrq)		((rbrq)->addr & 0xffffffc0)
170*4882a593Smuzhiyun #define RBRQ_CRC_ERR(rbrq)	((rbrq)->addr & (1<<5))
171*4882a593Smuzhiyun #define RBRQ_LEN_ERR(rbrq)	((rbrq)->addr & (1<<4))
172*4882a593Smuzhiyun #define RBRQ_END_PDU(rbrq)	((rbrq)->addr & (1<<3))
173*4882a593Smuzhiyun #define RBRQ_AAL5_PROT(rbrq)	((rbrq)->addr & (1<<2))
174*4882a593Smuzhiyun #define RBRQ_CON_CLOSED(rbrq)	((rbrq)->addr & (1<<1))
175*4882a593Smuzhiyun #define RBRQ_HBUF_ERR(rbrq)	((rbrq)->addr & 1)
176*4882a593Smuzhiyun #define RBRQ_CID(rbrq)		(((rbrq)->cidlen >> 16) & 0x1fff)
177*4882a593Smuzhiyun #define RBRQ_BUFLEN(rbrq)	((rbrq)->cidlen & 0xffff)
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun /* figure 2.3 transmit packet descriptor ready queue */
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun struct he_tpdrq {
182*4882a593Smuzhiyun 	volatile u32 tpd;
183*4882a593Smuzhiyun 	volatile u32 cid;
184*4882a593Smuzhiyun };
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun #define TPDRQ_ALIGNMENT CONFIG_TPDRQ_SIZE
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun /* table 2.30 host status page detail */
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun #define HSP_ALIGNMENT	0x400		/* must align on 1k boundary */
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun struct he_hsp {
193*4882a593Smuzhiyun 	struct he_hsp_entry {
194*4882a593Smuzhiyun 		volatile u32 tbrq_tail;
195*4882a593Smuzhiyun 		volatile u32 reserved1[15];
196*4882a593Smuzhiyun 		volatile u32 rbrq_tail;
197*4882a593Smuzhiyun 		volatile u32 reserved2[15];
198*4882a593Smuzhiyun 	} group[HE_NUM_GROUPS];
199*4882a593Smuzhiyun };
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun /*
202*4882a593Smuzhiyun  * figure 2.9 receive buffer pools
203*4882a593Smuzhiyun  *
204*4882a593Smuzhiyun  * since a virtual address might be more than 32 bits, we store an index
205*4882a593Smuzhiyun  * in the virt member of he_rbp.  NOTE: the lower six bits in the  rbrq
206*4882a593Smuzhiyun  * addr member are used for buffer status further limiting us to 26 bits.
207*4882a593Smuzhiyun  */
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun struct he_rbp {
210*4882a593Smuzhiyun 	volatile u32 phys;
211*4882a593Smuzhiyun 	volatile u32 idx;	/* virt */
212*4882a593Smuzhiyun };
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun #define RBP_IDX_OFFSET 6
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun /*
217*4882a593Smuzhiyun  * the he dma engine will try to hold an extra 16 buffers in its local
218*4882a593Smuzhiyun  * caches.  and add a couple buffers for safety.
219*4882a593Smuzhiyun  */
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun #define RBPL_TABLE_SIZE (CONFIG_RBPL_SIZE + 16 + 2)
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun struct he_buff {
224*4882a593Smuzhiyun 	struct list_head entry;
225*4882a593Smuzhiyun 	dma_addr_t mapping;
226*4882a593Smuzhiyun 	unsigned long len;
227*4882a593Smuzhiyun 	u8 data[];
228*4882a593Smuzhiyun };
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun #ifdef notyet
231*4882a593Smuzhiyun struct he_group {
232*4882a593Smuzhiyun 	u32 rpbl_size, rpbl_qsize;
233*4882a593Smuzhiyun 	struct he_rpb_entry *rbpl_ba;
234*4882a593Smuzhiyun };
235*4882a593Smuzhiyun #endif
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun #define HE_LOOKUP_VCC(dev, cid) ((dev)->he_vcc_table[(cid)].vcc)
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun struct he_vcc_table
240*4882a593Smuzhiyun {
241*4882a593Smuzhiyun 	struct atm_vcc *vcc;
242*4882a593Smuzhiyun };
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun struct he_cs_stper
245*4882a593Smuzhiyun {
246*4882a593Smuzhiyun 	long pcr;
247*4882a593Smuzhiyun 	int inuse;
248*4882a593Smuzhiyun };
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun #define HE_NUM_CS_STPER		16
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun struct he_dev {
253*4882a593Smuzhiyun 	unsigned int number;
254*4882a593Smuzhiyun 	unsigned int irq;
255*4882a593Smuzhiyun 	void __iomem *membase;
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun 	char prod_id[30];
258*4882a593Smuzhiyun 	char mac_addr[6];
259*4882a593Smuzhiyun 	int media;
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun 	unsigned int vcibits, vpibits;
262*4882a593Smuzhiyun 	unsigned int cells_per_row;
263*4882a593Smuzhiyun 	unsigned int bytes_per_row;
264*4882a593Smuzhiyun 	unsigned int cells_per_lbuf;
265*4882a593Smuzhiyun 	unsigned int r0_numrows, r0_startrow, r0_numbuffs;
266*4882a593Smuzhiyun 	unsigned int r1_numrows, r1_startrow, r1_numbuffs;
267*4882a593Smuzhiyun 	unsigned int tx_numrows, tx_startrow, tx_numbuffs;
268*4882a593Smuzhiyun 	unsigned int buffer_limit;
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun 	struct he_vcc_table *he_vcc_table;
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun #ifdef notyet
273*4882a593Smuzhiyun 	struct he_group group[HE_NUM_GROUPS];
274*4882a593Smuzhiyun #endif
275*4882a593Smuzhiyun 	struct he_cs_stper cs_stper[HE_NUM_CS_STPER];
276*4882a593Smuzhiyun 	unsigned total_bw;
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun 	dma_addr_t irq_phys;
279*4882a593Smuzhiyun 	struct he_irq *irq_base, *irq_head, *irq_tail;
280*4882a593Smuzhiyun 	volatile unsigned *irq_tailoffset;
281*4882a593Smuzhiyun 	int irq_peak;
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun 	struct tasklet_struct tasklet;
284*4882a593Smuzhiyun 	struct dma_pool *tpd_pool;
285*4882a593Smuzhiyun 	struct list_head outstanding_tpds;
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun 	dma_addr_t tpdrq_phys;
288*4882a593Smuzhiyun 	struct he_tpdrq *tpdrq_base, *tpdrq_tail, *tpdrq_head;
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun 	spinlock_t global_lock;		/* 8.1.5 pci transaction ordering
291*4882a593Smuzhiyun 					  error problem */
292*4882a593Smuzhiyun 	dma_addr_t rbrq_phys;
293*4882a593Smuzhiyun 	struct he_rbrq *rbrq_base, *rbrq_head;
294*4882a593Smuzhiyun 	int rbrq_peak;
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun 	struct he_buff **rbpl_virt;
297*4882a593Smuzhiyun 	unsigned long *rbpl_table;
298*4882a593Smuzhiyun 	unsigned long rbpl_hint;
299*4882a593Smuzhiyun 	struct dma_pool *rbpl_pool;
300*4882a593Smuzhiyun 	dma_addr_t rbpl_phys;
301*4882a593Smuzhiyun 	struct he_rbp *rbpl_base, *rbpl_tail;
302*4882a593Smuzhiyun 	struct list_head rbpl_outstanding;
303*4882a593Smuzhiyun 	int rbpl_peak;
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun 	dma_addr_t tbrq_phys;
306*4882a593Smuzhiyun 	struct he_tbrq *tbrq_base, *tbrq_head;
307*4882a593Smuzhiyun 	int tbrq_peak;
308*4882a593Smuzhiyun 
309*4882a593Smuzhiyun 	dma_addr_t hsp_phys;
310*4882a593Smuzhiyun 	struct he_hsp *hsp;
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun 	struct pci_dev *pci_dev;
313*4882a593Smuzhiyun 	struct atm_dev *atm_dev;
314*4882a593Smuzhiyun 	struct he_dev *next;
315*4882a593Smuzhiyun };
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun #define HE_MAXIOV 20
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun struct he_vcc
320*4882a593Smuzhiyun {
321*4882a593Smuzhiyun 	struct list_head buffers;
322*4882a593Smuzhiyun 	int pdu_len;
323*4882a593Smuzhiyun 	int rc_index;
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun 	wait_queue_head_t rx_waitq;
326*4882a593Smuzhiyun 	wait_queue_head_t tx_waitq;
327*4882a593Smuzhiyun };
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun #define HE_VCC(vcc)	((struct he_vcc *)(vcc->dev_data))
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun #define PCI_VENDOR_ID_FORE	0x1127
332*4882a593Smuzhiyun #define PCI_DEVICE_ID_FORE_HE	0x400
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun #define GEN_CNTL_0				0x40
335*4882a593Smuzhiyun #define  INT_PROC_ENBL		(1<<25)
336*4882a593Smuzhiyun #define  SLAVE_ENDIAN_MODE	(1<<16)
337*4882a593Smuzhiyun #define  MRL_ENB		(1<<5)
338*4882a593Smuzhiyun #define  MRM_ENB		(1<<4)
339*4882a593Smuzhiyun #define  INIT_ENB		(1<<2)
340*4882a593Smuzhiyun #define  IGNORE_TIMEOUT		(1<<1)
341*4882a593Smuzhiyun #define  ENBL_64		(1<<0)
342*4882a593Smuzhiyun 
343*4882a593Smuzhiyun #define MIN_PCI_LATENCY		32	/* errata 8.1.3 */
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun #define HE_DEV(dev) ((struct he_dev *) (dev)->dev_data)
346*4882a593Smuzhiyun 
347*4882a593Smuzhiyun #define he_is622(dev)	((dev)->media & 0x1)
348*4882a593Smuzhiyun #define he_isMM(dev)	((dev)->media & 0x20)
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun #define HE_REGMAP_SIZE	0x100000
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun #define RESET_CNTL	0x80000
353*4882a593Smuzhiyun #define  BOARD_RST_STATUS	(1<<6)
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun #define HOST_CNTL	0x80004
356*4882a593Smuzhiyun #define  PCI_BUS_SIZE64			(1<<27)
357*4882a593Smuzhiyun #define  DESC_RD_STATIC_64		(1<<26)
358*4882a593Smuzhiyun #define  DATA_RD_STATIC_64		(1<<25)
359*4882a593Smuzhiyun #define  DATA_WR_STATIC_64		(1<<24)
360*4882a593Smuzhiyun #define  ID_CS				(1<<12)
361*4882a593Smuzhiyun #define  ID_WREN			(1<<11)
362*4882a593Smuzhiyun #define  ID_DOUT			(1<<10)
363*4882a593Smuzhiyun #define   ID_DOFFSET			10
364*4882a593Smuzhiyun #define  ID_DIN				(1<<9)
365*4882a593Smuzhiyun #define  ID_CLOCK			(1<<8)
366*4882a593Smuzhiyun #define  QUICK_RD_RETRY			(1<<7)
367*4882a593Smuzhiyun #define  QUICK_WR_RETRY			(1<<6)
368*4882a593Smuzhiyun #define  OUTFF_ENB			(1<<5)
369*4882a593Smuzhiyun #define  CMDFF_ENB			(1<<4)
370*4882a593Smuzhiyun #define  PERR_INT_ENB			(1<<2)
371*4882a593Smuzhiyun #define  IGNORE_INTR			(1<<0)
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun #define LB_SWAP		0x80008
374*4882a593Smuzhiyun #define  SWAP_RNUM_MAX(x)	(x<<27)
375*4882a593Smuzhiyun #define  DATA_WR_SWAP		(1<<20)
376*4882a593Smuzhiyun #define  DESC_RD_SWAP		(1<<19)
377*4882a593Smuzhiyun #define  DATA_RD_SWAP		(1<<18)
378*4882a593Smuzhiyun #define  INTR_SWAP		(1<<17)
379*4882a593Smuzhiyun #define  DESC_WR_SWAP		(1<<16)
380*4882a593Smuzhiyun #define  SDRAM_INIT		(1<<15)
381*4882a593Smuzhiyun #define  BIG_ENDIAN_HOST	(1<<14)
382*4882a593Smuzhiyun #define  XFER_SIZE		(1<<7)
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun #define LB_MEM_ADDR	0x8000c
385*4882a593Smuzhiyun #define LB_MEM_DATA	0x80010
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun #define LB_MEM_ACCESS	0x80014
388*4882a593Smuzhiyun #define  LB_MEM_HNDSHK		(1<<30)
389*4882a593Smuzhiyun #define  LM_MEM_WRITE		(0x7)
390*4882a593Smuzhiyun #define  LM_MEM_READ		(0x3)
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun #define SDRAM_CTL	0x80018
393*4882a593Smuzhiyun #define  LB_64_ENB		(1<<3)
394*4882a593Smuzhiyun #define  LB_TWR			(1<<2)
395*4882a593Smuzhiyun #define  LB_TRP			(1<<1)
396*4882a593Smuzhiyun #define  LB_TRAS		(1<<0)
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun #define INT_FIFO	0x8001c
399*4882a593Smuzhiyun #define  INT_MASK_D		(1<<15)
400*4882a593Smuzhiyun #define  INT_MASK_C		(1<<14)
401*4882a593Smuzhiyun #define  INT_MASK_B		(1<<13)
402*4882a593Smuzhiyun #define  INT_MASK_A		(1<<12)
403*4882a593Smuzhiyun #define  INT_CLEAR_D		(1<<11)
404*4882a593Smuzhiyun #define  INT_CLEAR_C		(1<<10)
405*4882a593Smuzhiyun #define  INT_CLEAR_B		(1<<9)
406*4882a593Smuzhiyun #define  INT_CLEAR_A		(1<<8)
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun #define ABORT_ADDR	0x80020
409*4882a593Smuzhiyun 
410*4882a593Smuzhiyun #define IRQ0_BASE	0x80080
411*4882a593Smuzhiyun #define  IRQ_BASE(x)		(x<<12)
412*4882a593Smuzhiyun #define  IRQ_MASK		((CONFIG_IRQ_SIZE<<2)-1)	/* was 0x3ff */
413*4882a593Smuzhiyun #define  IRQ_TAIL(x)		(((unsigned long)(x)) & IRQ_MASK)
414*4882a593Smuzhiyun #define IRQ0_HEAD	0x80084
415*4882a593Smuzhiyun #define  IRQ_SIZE(x)		(x<<22)
416*4882a593Smuzhiyun #define  IRQ_THRESH(x)		(x<<12)
417*4882a593Smuzhiyun #define  IRQ_HEAD(x)		(x<<2)
418*4882a593Smuzhiyun /* #define  IRQ_PENDING		(1) 		conflict with linux/irq.h */
419*4882a593Smuzhiyun #define IRQ0_CNTL	0x80088
420*4882a593Smuzhiyun #define  IRQ_ADDRSEL(x)		(x<<2)
421*4882a593Smuzhiyun #define  IRQ_INT_A		(0<<2)
422*4882a593Smuzhiyun #define  IRQ_INT_B		(1<<2)
423*4882a593Smuzhiyun #define  IRQ_INT_C		(2<<2)
424*4882a593Smuzhiyun #define  IRQ_INT_D		(3<<2)
425*4882a593Smuzhiyun #define  IRQ_TYPE_ADDR		0x1
426*4882a593Smuzhiyun #define  IRQ_TYPE_LINE		0x0
427*4882a593Smuzhiyun #define IRQ0_DATA	0x8008c
428*4882a593Smuzhiyun 
429*4882a593Smuzhiyun #define IRQ1_BASE	0x80090
430*4882a593Smuzhiyun #define IRQ1_HEAD	0x80094
431*4882a593Smuzhiyun #define IRQ1_CNTL	0x80098
432*4882a593Smuzhiyun #define IRQ1_DATA	0x8009c
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun #define IRQ2_BASE	0x800a0
435*4882a593Smuzhiyun #define IRQ2_HEAD	0x800a4
436*4882a593Smuzhiyun #define IRQ2_CNTL	0x800a8
437*4882a593Smuzhiyun #define IRQ2_DATA	0x800ac
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun #define IRQ3_BASE	0x800b0
440*4882a593Smuzhiyun #define IRQ3_HEAD	0x800b4
441*4882a593Smuzhiyun #define IRQ3_CNTL	0x800b8
442*4882a593Smuzhiyun #define IRQ3_DATA	0x800bc
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun #define GRP_10_MAP	0x800c0
445*4882a593Smuzhiyun #define GRP_32_MAP	0x800c4
446*4882a593Smuzhiyun #define GRP_54_MAP	0x800c8
447*4882a593Smuzhiyun #define GRP_76_MAP	0x800cc
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun #define	G0_RBPS_S	0x80400
450*4882a593Smuzhiyun #define G0_RBPS_T	0x80404
451*4882a593Smuzhiyun #define  RBP_TAIL(x)		((x)<<3)
452*4882a593Smuzhiyun #define  RBP_MASK(x)		((x)|0x1fff)
453*4882a593Smuzhiyun #define G0_RBPS_QI	0x80408
454*4882a593Smuzhiyun #define  RBP_QSIZE(x)		((x)<<14)
455*4882a593Smuzhiyun #define  RBP_INT_ENB		(1<<13)
456*4882a593Smuzhiyun #define  RBP_THRESH(x)		(x)
457*4882a593Smuzhiyun #define G0_RBPS_BS	0x8040c
458*4882a593Smuzhiyun #define G0_RBPL_S	0x80410
459*4882a593Smuzhiyun #define G0_RBPL_T	0x80414
460*4882a593Smuzhiyun #define G0_RBPL_QI	0x80418
461*4882a593Smuzhiyun #define G0_RBPL_BS	0x8041c
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun #define	G1_RBPS_S	0x80420
464*4882a593Smuzhiyun #define G1_RBPS_T	0x80424
465*4882a593Smuzhiyun #define G1_RBPS_QI	0x80428
466*4882a593Smuzhiyun #define G1_RBPS_BS	0x8042c
467*4882a593Smuzhiyun #define G1_RBPL_S	0x80430
468*4882a593Smuzhiyun #define G1_RBPL_T	0x80434
469*4882a593Smuzhiyun #define G1_RBPL_QI	0x80438
470*4882a593Smuzhiyun #define G1_RBPL_BS	0x8043c
471*4882a593Smuzhiyun 
472*4882a593Smuzhiyun #define	G2_RBPS_S	0x80440
473*4882a593Smuzhiyun #define G2_RBPS_T	0x80444
474*4882a593Smuzhiyun #define G2_RBPS_QI	0x80448
475*4882a593Smuzhiyun #define G2_RBPS_BS	0x8044c
476*4882a593Smuzhiyun #define G2_RBPL_S	0x80450
477*4882a593Smuzhiyun #define G2_RBPL_T	0x80454
478*4882a593Smuzhiyun #define G2_RBPL_QI	0x80458
479*4882a593Smuzhiyun #define G2_RBPL_BS	0x8045c
480*4882a593Smuzhiyun 
481*4882a593Smuzhiyun #define	G3_RBPS_S	0x80460
482*4882a593Smuzhiyun #define G3_RBPS_T	0x80464
483*4882a593Smuzhiyun #define G3_RBPS_QI	0x80468
484*4882a593Smuzhiyun #define G3_RBPS_BS	0x8046c
485*4882a593Smuzhiyun #define G3_RBPL_S	0x80470
486*4882a593Smuzhiyun #define G3_RBPL_T	0x80474
487*4882a593Smuzhiyun #define G3_RBPL_QI	0x80478
488*4882a593Smuzhiyun #define G3_RBPL_BS	0x8047c
489*4882a593Smuzhiyun 
490*4882a593Smuzhiyun #define	G4_RBPS_S	0x80480
491*4882a593Smuzhiyun #define G4_RBPS_T	0x80484
492*4882a593Smuzhiyun #define G4_RBPS_QI	0x80488
493*4882a593Smuzhiyun #define G4_RBPS_BS	0x8048c
494*4882a593Smuzhiyun #define G4_RBPL_S	0x80490
495*4882a593Smuzhiyun #define G4_RBPL_T	0x80494
496*4882a593Smuzhiyun #define G4_RBPL_QI	0x80498
497*4882a593Smuzhiyun #define G4_RBPL_BS	0x8049c
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun #define	G5_RBPS_S	0x804a0
500*4882a593Smuzhiyun #define G5_RBPS_T	0x804a4
501*4882a593Smuzhiyun #define G5_RBPS_QI	0x804a8
502*4882a593Smuzhiyun #define G5_RBPS_BS	0x804ac
503*4882a593Smuzhiyun #define G5_RBPL_S	0x804b0
504*4882a593Smuzhiyun #define G5_RBPL_T	0x804b4
505*4882a593Smuzhiyun #define G5_RBPL_QI	0x804b8
506*4882a593Smuzhiyun #define G5_RBPL_BS	0x804bc
507*4882a593Smuzhiyun 
508*4882a593Smuzhiyun #define	G6_RBPS_S	0x804c0
509*4882a593Smuzhiyun #define G6_RBPS_T	0x804c4
510*4882a593Smuzhiyun #define G6_RBPS_QI	0x804c8
511*4882a593Smuzhiyun #define G6_RBPS_BS	0x804cc
512*4882a593Smuzhiyun #define G6_RBPL_S	0x804d0
513*4882a593Smuzhiyun #define G6_RBPL_T	0x804d4
514*4882a593Smuzhiyun #define G6_RBPL_QI	0x804d8
515*4882a593Smuzhiyun #define G6_RBPL_BS	0x804dc
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun #define	G7_RBPS_S	0x804e0
518*4882a593Smuzhiyun #define G7_RBPS_T	0x804e4
519*4882a593Smuzhiyun #define G7_RBPS_QI	0x804e8
520*4882a593Smuzhiyun #define G7_RBPS_BS	0x804ec
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun #define G7_RBPL_S	0x804f0
523*4882a593Smuzhiyun #define G7_RBPL_T	0x804f4
524*4882a593Smuzhiyun #define G7_RBPL_QI	0x804f8
525*4882a593Smuzhiyun #define G7_RBPL_BS	0x804fc
526*4882a593Smuzhiyun 
527*4882a593Smuzhiyun #define G0_RBRQ_ST	0x80500
528*4882a593Smuzhiyun #define G0_RBRQ_H	0x80504
529*4882a593Smuzhiyun #define G0_RBRQ_Q	0x80508
530*4882a593Smuzhiyun #define  RBRQ_THRESH(x)		((x)<<13)
531*4882a593Smuzhiyun #define  RBRQ_SIZE(x)		(x)
532*4882a593Smuzhiyun #define G0_RBRQ_I	0x8050c
533*4882a593Smuzhiyun #define  RBRQ_TIME(x)		((x)<<8)
534*4882a593Smuzhiyun #define  RBRQ_COUNT(x)		(x)
535*4882a593Smuzhiyun 
536*4882a593Smuzhiyun /* fill in 1 ... 7 later */
537*4882a593Smuzhiyun 
538*4882a593Smuzhiyun #define G0_TBRQ_B_T	0x80600
539*4882a593Smuzhiyun #define G0_TBRQ_H	0x80604
540*4882a593Smuzhiyun #define G0_TBRQ_S	0x80608
541*4882a593Smuzhiyun #define G0_TBRQ_THRESH	0x8060c
542*4882a593Smuzhiyun #define  TBRQ_THRESH(x)		(x)
543*4882a593Smuzhiyun 
544*4882a593Smuzhiyun /* fill in 1 ... 7 later */
545*4882a593Smuzhiyun 
546*4882a593Smuzhiyun #define RH_CONFIG	0x805c0
547*4882a593Smuzhiyun #define  PHY_INT_ENB	(1<<10)
548*4882a593Smuzhiyun #define  OAM_GID(x)	(x<<7)
549*4882a593Smuzhiyun #define  PTMR_PRE(x)	(x)
550*4882a593Smuzhiyun 
551*4882a593Smuzhiyun #define G0_INMQ_S	0x80580
552*4882a593Smuzhiyun #define G0_INMQ_L	0x80584
553*4882a593Smuzhiyun #define G1_INMQ_S	0x80588
554*4882a593Smuzhiyun #define G1_INMQ_L	0x8058c
555*4882a593Smuzhiyun #define G2_INMQ_S	0x80590
556*4882a593Smuzhiyun #define G2_INMQ_L	0x80594
557*4882a593Smuzhiyun #define G3_INMQ_S	0x80598
558*4882a593Smuzhiyun #define G3_INMQ_L	0x8059c
559*4882a593Smuzhiyun #define G4_INMQ_S	0x805a0
560*4882a593Smuzhiyun #define G4_INMQ_L	0x805a4
561*4882a593Smuzhiyun #define G5_INMQ_S	0x805a8
562*4882a593Smuzhiyun #define G5_INMQ_L	0x805ac
563*4882a593Smuzhiyun #define G6_INMQ_S	0x805b0
564*4882a593Smuzhiyun #define G6_INMQ_L	0x805b4
565*4882a593Smuzhiyun #define G7_INMQ_S	0x805b8
566*4882a593Smuzhiyun #define G7_INMQ_L	0x805bc
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun #define TPDRQ_B_H	0x80680
569*4882a593Smuzhiyun #define TPDRQ_T		0x80684
570*4882a593Smuzhiyun #define TPDRQ_S		0x80688
571*4882a593Smuzhiyun 
572*4882a593Smuzhiyun #define UBUFF_BA	0x8068c
573*4882a593Smuzhiyun 
574*4882a593Smuzhiyun #define RLBF0_H		0x806c0
575*4882a593Smuzhiyun #define RLBF0_T		0x806c4
576*4882a593Smuzhiyun #define RLBF1_H		0x806c8
577*4882a593Smuzhiyun #define RLBF1_T		0x806cc
578*4882a593Smuzhiyun #define RLBC_H		0x806d0
579*4882a593Smuzhiyun #define RLBC_T		0x806d4
580*4882a593Smuzhiyun #define RLBC_H2		0x806d8
581*4882a593Smuzhiyun #define TLBF_H		0x806e0
582*4882a593Smuzhiyun #define TLBF_T		0x806e4
583*4882a593Smuzhiyun #define RLBF0_C		0x806e8
584*4882a593Smuzhiyun #define RLBF1_C		0x806ec
585*4882a593Smuzhiyun #define RXTHRSH		0x806f0
586*4882a593Smuzhiyun #define LITHRSH		0x806f4
587*4882a593Smuzhiyun 
588*4882a593Smuzhiyun #define LBARB		0x80700
589*4882a593Smuzhiyun #define  SLICE_X(x)		 (x<<28)
590*4882a593Smuzhiyun #define  ARB_RNUM_MAX(x)	 (x<<23)
591*4882a593Smuzhiyun #define  TH_PRTY(x)		 (x<<21)
592*4882a593Smuzhiyun #define  RH_PRTY(x)		 (x<<19)
593*4882a593Smuzhiyun #define  TL_PRTY(x)		 (x<<17)
594*4882a593Smuzhiyun #define  RL_PRTY(x)		 (x<<15)
595*4882a593Smuzhiyun #define  BUS_MULTI(x)		 (x<<8)
596*4882a593Smuzhiyun #define  NET_PREF(x)		 (x)
597*4882a593Smuzhiyun 
598*4882a593Smuzhiyun #define SDRAMCON	0x80704
599*4882a593Smuzhiyun #define	 BANK_ON		(1<<14)
600*4882a593Smuzhiyun #define	 WIDE_DATA		(1<<13)
601*4882a593Smuzhiyun #define	 TWR_WAIT		(1<<12)
602*4882a593Smuzhiyun #define	 TRP_WAIT		(1<<11)
603*4882a593Smuzhiyun #define	 TRAS_WAIT		(1<<10)
604*4882a593Smuzhiyun #define	 REF_RATE(x)		(x)
605*4882a593Smuzhiyun 
606*4882a593Smuzhiyun #define LBSTAT		0x80708
607*4882a593Smuzhiyun 
608*4882a593Smuzhiyun #define RCC_STAT	0x8070c
609*4882a593Smuzhiyun #define  RCC_BUSY		(1)
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun #define TCMCONFIG	0x80740
612*4882a593Smuzhiyun #define  TM_DESL2		(1<<10)
613*4882a593Smuzhiyun #define	 TM_BANK_WAIT(x)	(x<<6)
614*4882a593Smuzhiyun #define	 TM_ADD_BANK4(x)	(x<<4)
615*4882a593Smuzhiyun #define  TM_PAR_CHECK(x)	(x<<3)
616*4882a593Smuzhiyun #define  TM_RW_WAIT(x)		(x<<2)
617*4882a593Smuzhiyun #define  TM_SRAM_TYPE(x)	(x)
618*4882a593Smuzhiyun 
619*4882a593Smuzhiyun #define TSRB_BA		0x80744
620*4882a593Smuzhiyun #define TSRC_BA		0x80748
621*4882a593Smuzhiyun #define TMABR_BA	0x8074c
622*4882a593Smuzhiyun #define TPD_BA		0x80750
623*4882a593Smuzhiyun #define TSRD_BA		0x80758
624*4882a593Smuzhiyun 
625*4882a593Smuzhiyun #define TX_CONFIG	0x80760
626*4882a593Smuzhiyun #define  DRF_THRESH(x)		(x<<22)
627*4882a593Smuzhiyun #define  TX_UT_MODE(x)		(x<<21)
628*4882a593Smuzhiyun #define  TX_VCI_MASK(x)		(x<<17)
629*4882a593Smuzhiyun #define  LBFREE_CNT(x)		(x)
630*4882a593Smuzhiyun 
631*4882a593Smuzhiyun #define TXAAL5_PROTO	0x80764
632*4882a593Smuzhiyun #define  CPCS_UU(x)		(x<<8)
633*4882a593Smuzhiyun #define  CPI(x)			(x)
634*4882a593Smuzhiyun 
635*4882a593Smuzhiyun #define RCMCONFIG	0x80780
636*4882a593Smuzhiyun #define  RM_DESL2(x)		(x<<10)
637*4882a593Smuzhiyun #define  RM_BANK_WAIT(x)	(x<<6)
638*4882a593Smuzhiyun #define  RM_ADD_BANK(x)		(x<<4)
639*4882a593Smuzhiyun #define  RM_PAR_CHECK(x)	(x<<3)
640*4882a593Smuzhiyun #define  RM_RW_WAIT(x)		(x<<2)
641*4882a593Smuzhiyun #define  RM_SRAM_TYPE(x)	(x)
642*4882a593Smuzhiyun 
643*4882a593Smuzhiyun #define RCMRSRB_BA	0x80784
644*4882a593Smuzhiyun #define RCMLBM_BA	0x80788
645*4882a593Smuzhiyun #define RCMABR_BA	0x8078c
646*4882a593Smuzhiyun 
647*4882a593Smuzhiyun #define RC_CONFIG	0x807c0
648*4882a593Smuzhiyun #define  UT_RD_DELAY(x)		(x<<11)
649*4882a593Smuzhiyun #define  WRAP_MODE(x)		(x<<10)
650*4882a593Smuzhiyun #define  RC_UT_MODE(x)		(x<<9)
651*4882a593Smuzhiyun #define  RX_ENABLE		(1<<8)
652*4882a593Smuzhiyun #define  RX_VALVP(x)		(x<<4)
653*4882a593Smuzhiyun #define  RX_VALVC(x)		(x)
654*4882a593Smuzhiyun 
655*4882a593Smuzhiyun #define MCC		0x807c4
656*4882a593Smuzhiyun #define OEC		0x807c8
657*4882a593Smuzhiyun #define DCC		0x807cc
658*4882a593Smuzhiyun #define CEC		0x807d0
659*4882a593Smuzhiyun 
660*4882a593Smuzhiyun #define HSP_BA		0x807f0
661*4882a593Smuzhiyun 
662*4882a593Smuzhiyun #define LB_CONFIG	0x807f4
663*4882a593Smuzhiyun #define  LB_SIZE(x)		(x)
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun #define CON_DAT		0x807f8
666*4882a593Smuzhiyun #define CON_CTL		0x807fc
667*4882a593Smuzhiyun #define  CON_CTL_MBOX		(2<<30)
668*4882a593Smuzhiyun #define  CON_CTL_TCM		(1<<30)
669*4882a593Smuzhiyun #define  CON_CTL_RCM		(0<<30)
670*4882a593Smuzhiyun #define  CON_CTL_WRITE		(1<<29)
671*4882a593Smuzhiyun #define  CON_CTL_READ		(0<<29)
672*4882a593Smuzhiyun #define  CON_CTL_BUSY		(1<<28)
673*4882a593Smuzhiyun #define  CON_BYTE_DISABLE_3	(1<<22)		/* 24..31 */
674*4882a593Smuzhiyun #define  CON_BYTE_DISABLE_2	(1<<21)		/* 16..23 */
675*4882a593Smuzhiyun #define  CON_BYTE_DISABLE_1	(1<<20)		/* 8..15 */
676*4882a593Smuzhiyun #define  CON_BYTE_DISABLE_0	(1<<19)		/* 0..7 */
677*4882a593Smuzhiyun #define  CON_CTL_ADDR(x)	(x)
678*4882a593Smuzhiyun 
679*4882a593Smuzhiyun #define FRAMER		0x80800		/* to 0x80bfc */
680*4882a593Smuzhiyun 
681*4882a593Smuzhiyun /* 3.3 network controller (internal) mailbox registers */
682*4882a593Smuzhiyun 
683*4882a593Smuzhiyun #define CS_STPER0	0x0
684*4882a593Smuzhiyun 	/* ... */
685*4882a593Smuzhiyun #define CS_STPER31	0x01f
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun #define CS_STTIM0	0x020
688*4882a593Smuzhiyun 	/* ... */
689*4882a593Smuzhiyun #define CS_STTIM31	0x03f
690*4882a593Smuzhiyun 
691*4882a593Smuzhiyun #define CS_TGRLD0	0x040
692*4882a593Smuzhiyun 	/* ... */
693*4882a593Smuzhiyun #define CS_TGRLD15	0x04f
694*4882a593Smuzhiyun 
695*4882a593Smuzhiyun #define CS_ERTHR0	0x050
696*4882a593Smuzhiyun #define CS_ERTHR1	0x051
697*4882a593Smuzhiyun #define CS_ERTHR2	0x052
698*4882a593Smuzhiyun #define CS_ERTHR3	0x053
699*4882a593Smuzhiyun #define CS_ERTHR4	0x054
700*4882a593Smuzhiyun #define CS_ERCTL0	0x055
701*4882a593Smuzhiyun #define  TX_ENABLE		(1<<28)
702*4882a593Smuzhiyun #define  ER_ENABLE		(1<<27)
703*4882a593Smuzhiyun #define CS_ERCTL1	0x056
704*4882a593Smuzhiyun #define CS_ERCTL2	0x057
705*4882a593Smuzhiyun #define CS_ERSTAT0	0x058
706*4882a593Smuzhiyun #define CS_ERSTAT1	0x059
707*4882a593Smuzhiyun 
708*4882a593Smuzhiyun #define CS_RTCCT	0x060
709*4882a593Smuzhiyun #define CS_RTFWC	0x061
710*4882a593Smuzhiyun #define CS_RTFWR	0x062
711*4882a593Smuzhiyun #define CS_RTFTC	0x063
712*4882a593Smuzhiyun #define CS_RTATR	0x064
713*4882a593Smuzhiyun 
714*4882a593Smuzhiyun #define CS_TFBSET	0x070
715*4882a593Smuzhiyun #define CS_TFBADD	0x071
716*4882a593Smuzhiyun #define CS_TFBSUB	0x072
717*4882a593Smuzhiyun #define CS_WCRMAX	0x073
718*4882a593Smuzhiyun #define CS_WCRMIN	0x074
719*4882a593Smuzhiyun #define CS_WCRINC	0x075
720*4882a593Smuzhiyun #define CS_WCRDEC	0x076
721*4882a593Smuzhiyun #define CS_WCRCEIL	0x077
722*4882a593Smuzhiyun #define CS_BWDCNT	0x078
723*4882a593Smuzhiyun 
724*4882a593Smuzhiyun #define CS_OTPPER	0x080
725*4882a593Smuzhiyun #define CS_OTWPER	0x081
726*4882a593Smuzhiyun #define CS_OTTLIM	0x082
727*4882a593Smuzhiyun #define CS_OTTCNT	0x083
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun #define CS_HGRRT0	0x090
730*4882a593Smuzhiyun 	/* ... */
731*4882a593Smuzhiyun #define CS_HGRRT7	0x097
732*4882a593Smuzhiyun 
733*4882a593Smuzhiyun #define CS_ORPTRS	0x0a0
734*4882a593Smuzhiyun 
735*4882a593Smuzhiyun #define RXCON_CLOSE	0x100
736*4882a593Smuzhiyun 
737*4882a593Smuzhiyun 
738*4882a593Smuzhiyun #define RCM_MEM_SIZE	0x10000		/* 1M of 32-bit registers */
739*4882a593Smuzhiyun #define TCM_MEM_SIZE	0x20000		/* 2M of 32-bit registers */
740*4882a593Smuzhiyun 
741*4882a593Smuzhiyun /* 2.5 transmit connection memory registers */
742*4882a593Smuzhiyun 
743*4882a593Smuzhiyun #define TSR0_CONN_STATE(x)	((x>>28) & 0x7)
744*4882a593Smuzhiyun #define TSR0_USE_WMIN		(1<<23)
745*4882a593Smuzhiyun #define TSR0_GROUP(x)		((x & 0x7)<<18)
746*4882a593Smuzhiyun #define TSR0_ABR		(2<<16)
747*4882a593Smuzhiyun #define TSR0_UBR		(1<<16)
748*4882a593Smuzhiyun #define TSR0_CBR		(0<<16)
749*4882a593Smuzhiyun #define TSR0_PROT		(1<<15)
750*4882a593Smuzhiyun #define TSR0_AAL0_SDU		(2<<12)
751*4882a593Smuzhiyun #define TSR0_AAL0		(1<<12)
752*4882a593Smuzhiyun #define TSR0_AAL5		(0<<12)
753*4882a593Smuzhiyun #define TSR0_HALT_ER		(1<<11)
754*4882a593Smuzhiyun #define TSR0_MARK_CI		(1<<10)
755*4882a593Smuzhiyun #define TSR0_MARK_ER		(1<<9)
756*4882a593Smuzhiyun #define TSR0_UPDATE_GER		(1<<8)
757*4882a593Smuzhiyun #define TSR0_RC_INDEX(x)	(x & 0x1F)
758*4882a593Smuzhiyun 
759*4882a593Smuzhiyun #define TSR1_PCR(x)		((x & 0x7FFF)<<16)
760*4882a593Smuzhiyun #define TSR1_MCR(x)		(x & 0x7FFF)
761*4882a593Smuzhiyun 
762*4882a593Smuzhiyun #define TSR2_ACR(x)		((x & 0x7FFF)<<16)
763*4882a593Smuzhiyun 
764*4882a593Smuzhiyun #define TSR3_NRM_CNT(x)		((x & 0xFF)<<24)
765*4882a593Smuzhiyun #define TSR3_CRM_CNT(x)		(x & 0xFFFF)
766*4882a593Smuzhiyun 
767*4882a593Smuzhiyun #define TSR4_FLUSH_CONN		(1<<31)
768*4882a593Smuzhiyun #define TSR4_SESSION_ENDED	(1<<30)
769*4882a593Smuzhiyun #define TSR4_CRC10		(1<<28)
770*4882a593Smuzhiyun #define TSR4_NULL_CRC10		(1<<27)
771*4882a593Smuzhiyun #define TSR4_PROT		(1<<26)
772*4882a593Smuzhiyun #define TSR4_AAL0_SDU		(2<<23)
773*4882a593Smuzhiyun #define TSR4_AAL0		(1<<23)
774*4882a593Smuzhiyun #define TSR4_AAL5		(0<<23)
775*4882a593Smuzhiyun 
776*4882a593Smuzhiyun #define TSR9_OPEN_CONN		(1<<20)
777*4882a593Smuzhiyun 
778*4882a593Smuzhiyun #define TSR11_ICR(x)		((x & 0x7FFF)<<16)
779*4882a593Smuzhiyun #define TSR11_TRM(x)		((x & 0x7)<<13)
780*4882a593Smuzhiyun #define TSR11_NRM(x)		((x & 0x7)<<10)
781*4882a593Smuzhiyun #define TSR11_ADTF(x)		(x & 0x3FF)
782*4882a593Smuzhiyun 
783*4882a593Smuzhiyun #define TSR13_RDF(x)		((x & 0xF)<<23)
784*4882a593Smuzhiyun #define TSR13_RIF(x)		((x & 0xF)<<19)
785*4882a593Smuzhiyun #define TSR13_CDF(x)		((x & 0x7)<<16)
786*4882a593Smuzhiyun #define TSR13_CRM(x)		(x & 0xFFFF)
787*4882a593Smuzhiyun 
788*4882a593Smuzhiyun #define TSR14_DELETE		(1<<31)
789*4882a593Smuzhiyun #define TSR14_ABR_CLOSE		(1<<16)
790*4882a593Smuzhiyun 
791*4882a593Smuzhiyun /* 2.7.1 per connection receieve state registers */
792*4882a593Smuzhiyun 
793*4882a593Smuzhiyun #define RSR0_START_PDU	(1<<10)
794*4882a593Smuzhiyun #define RSR0_OPEN_CONN	(1<<6)
795*4882a593Smuzhiyun #define RSR0_CLOSE_CONN	(0<<6)
796*4882a593Smuzhiyun #define RSR0_PPD_ENABLE	(1<<5)
797*4882a593Smuzhiyun #define RSR0_EPD_ENABLE	(1<<4)
798*4882a593Smuzhiyun #define RSR0_TCP_CKSUM	(1<<3)
799*4882a593Smuzhiyun #define RSR0_AAL5		(0)
800*4882a593Smuzhiyun #define RSR0_AAL0		(1)
801*4882a593Smuzhiyun #define RSR0_AAL0_SDU		(2)
802*4882a593Smuzhiyun #define RSR0_RAWCELL		(3)
803*4882a593Smuzhiyun #define RSR0_RAWCELL_CRC10	(4)
804*4882a593Smuzhiyun 
805*4882a593Smuzhiyun #define RSR1_AQI_ENABLE	(1<<20)
806*4882a593Smuzhiyun #define RSR1_RBPL_ONLY	(1<<19)
807*4882a593Smuzhiyun #define RSR1_GROUP(x)	((x)<<16)
808*4882a593Smuzhiyun 
809*4882a593Smuzhiyun #define RSR4_AQI_ENABLE (1<<30)
810*4882a593Smuzhiyun #define RSR4_GROUP(x)	((x)<<27)
811*4882a593Smuzhiyun #define RSR4_RBPL_ONLY	(1<<26)
812*4882a593Smuzhiyun 
813*4882a593Smuzhiyun /* 2.1.4 transmit packet descriptor */
814*4882a593Smuzhiyun 
815*4882a593Smuzhiyun #define	TPD_USERCELL		0x0
816*4882a593Smuzhiyun #define	TPD_SEGMENT_OAMF5	0x4
817*4882a593Smuzhiyun #define	TPD_END2END_OAMF5	0x5
818*4882a593Smuzhiyun #define	TPD_RMCELL		0x6
819*4882a593Smuzhiyun #define TPD_CELLTYPE(x)		(x<<3)
820*4882a593Smuzhiyun #define TPD_EOS			(1<<2)
821*4882a593Smuzhiyun #define TPD_CLP			(1<<1)
822*4882a593Smuzhiyun #define TPD_INT			(1<<0)
823*4882a593Smuzhiyun #define TPD_LST		(1<<31)
824*4882a593Smuzhiyun 
825*4882a593Smuzhiyun /* table 4.3 serial eeprom information */
826*4882a593Smuzhiyun 
827*4882a593Smuzhiyun #define PROD_ID		0x08	/* char[] */
828*4882a593Smuzhiyun #define  PROD_ID_LEN	30
829*4882a593Smuzhiyun #define HW_REV		0x26	/* char[] */
830*4882a593Smuzhiyun #define M_SN		0x3a	/* integer */
831*4882a593Smuzhiyun #define MEDIA		0x3e	/* integer */
832*4882a593Smuzhiyun #define  HE155MM	0x26
833*4882a593Smuzhiyun #define  HE622MM	0x27
834*4882a593Smuzhiyun #define  HE155SM	0x46
835*4882a593Smuzhiyun #define  HE622SM	0x47
836*4882a593Smuzhiyun #define MAC_ADDR	0x42	/* char[] */
837*4882a593Smuzhiyun 
838*4882a593Smuzhiyun #define CS_LOW		0x0
839*4882a593Smuzhiyun #define CS_HIGH		ID_CS /* HOST_CNTL_ID_PROM_SEL */
840*4882a593Smuzhiyun #define CLK_LOW		0x0
841*4882a593Smuzhiyun #define CLK_HIGH	ID_CLOCK /* HOST_CNTL_ID_PROM_CLOCK */
842*4882a593Smuzhiyun #define SI_HIGH		ID_DIN /* HOST_CNTL_ID_PROM_DATA_IN */
843*4882a593Smuzhiyun #define EEPROM_DELAY	400 /* microseconds */
844*4882a593Smuzhiyun 
845*4882a593Smuzhiyun #endif /* _HE_H_ */
846