xref: /OK3568_Linux_fs/kernel/drivers/isdn/hardware/mISDN/ipac.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * ipac.h	Defines for the Infineon (former Siemens) ISDN
5*4882a593Smuzhiyun  *		chip series
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Author       Karsten Keil <keil@isdn4linux.de>
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Copyright 2009  by Karsten Keil <keil@isdn4linux.de>
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include "iohelper.h"
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun struct isac_hw {
15*4882a593Smuzhiyun 	struct dchannel		dch;
16*4882a593Smuzhiyun 	u32			type;
17*4882a593Smuzhiyun 	u32			off;		/* offset to isac regs */
18*4882a593Smuzhiyun 	char			*name;
19*4882a593Smuzhiyun 	spinlock_t		*hwlock;	/* lock HW access */
20*4882a593Smuzhiyun 	read_reg_func		*read_reg;
21*4882a593Smuzhiyun 	write_reg_func		*write_reg;
22*4882a593Smuzhiyun 	fifo_func		*read_fifo;
23*4882a593Smuzhiyun 	fifo_func		*write_fifo;
24*4882a593Smuzhiyun 	int			(*monitor)(void *, u32, u8 *, int);
25*4882a593Smuzhiyun 	void			(*release)(struct isac_hw *);
26*4882a593Smuzhiyun 	int			(*init)(struct isac_hw *);
27*4882a593Smuzhiyun 	int			(*ctrl)(struct isac_hw *, u32, u_long);
28*4882a593Smuzhiyun 	int			(*open)(struct isac_hw *, struct channel_req *);
29*4882a593Smuzhiyun 	u8			*mon_tx;
30*4882a593Smuzhiyun 	u8			*mon_rx;
31*4882a593Smuzhiyun 	int			mon_txp;
32*4882a593Smuzhiyun 	int			mon_txc;
33*4882a593Smuzhiyun 	int			mon_rxp;
34*4882a593Smuzhiyun 	struct arcofi_msg	*arcofi_list;
35*4882a593Smuzhiyun 	struct timer_list	arcofitimer;
36*4882a593Smuzhiyun 	wait_queue_head_t	arcofi_wait;
37*4882a593Smuzhiyun 	u8			arcofi_bc;
38*4882a593Smuzhiyun 	u8			arcofi_state;
39*4882a593Smuzhiyun 	u8			mocr;
40*4882a593Smuzhiyun 	u8			adf2;
41*4882a593Smuzhiyun 	u8			state;
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun struct ipac_hw;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun struct hscx_hw {
47*4882a593Smuzhiyun 	struct bchannel		bch;
48*4882a593Smuzhiyun 	struct ipac_hw		*ip;
49*4882a593Smuzhiyun 	u8			fifo_size;
50*4882a593Smuzhiyun 	u8			off;	/* offset to ICA or ICB */
51*4882a593Smuzhiyun 	u8			slot;
52*4882a593Smuzhiyun 	char			log[64];
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun struct ipac_hw {
56*4882a593Smuzhiyun 	struct isac_hw		isac;
57*4882a593Smuzhiyun 	struct hscx_hw		hscx[2];
58*4882a593Smuzhiyun 	char			*name;
59*4882a593Smuzhiyun 	void			*hw;
60*4882a593Smuzhiyun 	spinlock_t		*hwlock;	/* lock HW access */
61*4882a593Smuzhiyun 	struct module		*owner;
62*4882a593Smuzhiyun 	u32			type;
63*4882a593Smuzhiyun 	read_reg_func		*read_reg;
64*4882a593Smuzhiyun 	write_reg_func		*write_reg;
65*4882a593Smuzhiyun 	fifo_func		*read_fifo;
66*4882a593Smuzhiyun 	fifo_func		*write_fifo;
67*4882a593Smuzhiyun 	void			(*release)(struct ipac_hw *);
68*4882a593Smuzhiyun 	int			(*init)(struct ipac_hw *);
69*4882a593Smuzhiyun 	int			(*ctrl)(struct ipac_hw *, u32, u_long);
70*4882a593Smuzhiyun 	u8			conf;
71*4882a593Smuzhiyun };
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun #define IPAC_TYPE_ISAC		0x0010
74*4882a593Smuzhiyun #define IPAC_TYPE_IPAC		0x0020
75*4882a593Smuzhiyun #define IPAC_TYPE_ISACX		0x0040
76*4882a593Smuzhiyun #define IPAC_TYPE_IPACX		0x0080
77*4882a593Smuzhiyun #define IPAC_TYPE_HSCX		0x0100
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun #define ISAC_USE_ARCOFI		0x1000
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun /* Monitor functions */
82*4882a593Smuzhiyun #define MONITOR_RX_0		0x1000
83*4882a593Smuzhiyun #define MONITOR_RX_1		0x1001
84*4882a593Smuzhiyun #define MONITOR_TX_0		0x2000
85*4882a593Smuzhiyun #define MONITOR_TX_1		0x2001
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /* All registers original Siemens Spec  */
88*4882a593Smuzhiyun /* IPAC/ISAC registers */
89*4882a593Smuzhiyun #define ISAC_ISTA		0x20
90*4882a593Smuzhiyun #define ISAC_MASK		0x20
91*4882a593Smuzhiyun #define ISAC_CMDR		0x21
92*4882a593Smuzhiyun #define ISAC_STAR		0x21
93*4882a593Smuzhiyun #define ISAC_MODE		0x22
94*4882a593Smuzhiyun #define ISAC_TIMR		0x23
95*4882a593Smuzhiyun #define ISAC_EXIR		0x24
96*4882a593Smuzhiyun #define ISAC_RBCL		0x25
97*4882a593Smuzhiyun #define ISAC_RSTA		0x27
98*4882a593Smuzhiyun #define ISAC_RBCH		0x2A
99*4882a593Smuzhiyun #define ISAC_SPCR		0x30
100*4882a593Smuzhiyun #define ISAC_CIR0		0x31
101*4882a593Smuzhiyun #define ISAC_CIX0		0x31
102*4882a593Smuzhiyun #define ISAC_MOR0		0x32
103*4882a593Smuzhiyun #define ISAC_MOX0		0x32
104*4882a593Smuzhiyun #define ISAC_CIR1		0x33
105*4882a593Smuzhiyun #define ISAC_CIX1		0x33
106*4882a593Smuzhiyun #define ISAC_MOR1		0x34
107*4882a593Smuzhiyun #define ISAC_MOX1		0x34
108*4882a593Smuzhiyun #define ISAC_STCR		0x37
109*4882a593Smuzhiyun #define ISAC_ADF1		0x38
110*4882a593Smuzhiyun #define ISAC_ADF2		0x39
111*4882a593Smuzhiyun #define ISAC_MOCR		0x3a
112*4882a593Smuzhiyun #define ISAC_MOSR		0x3a
113*4882a593Smuzhiyun #define ISAC_SQRR		0x3b
114*4882a593Smuzhiyun #define ISAC_SQXR		0x3b
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun #define ISAC_RBCH_XAC		0x80
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun #define IPAC_D_TIN2		0x01
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun /* IPAC/HSCX */
121*4882a593Smuzhiyun #define IPAC_ISTAB		0x20	/* RD	*/
122*4882a593Smuzhiyun #define IPAC_MASKB		0x20	/* WR	*/
123*4882a593Smuzhiyun #define IPAC_STARB		0x21	/* RD	*/
124*4882a593Smuzhiyun #define IPAC_CMDRB		0x21	/* WR	*/
125*4882a593Smuzhiyun #define IPAC_MODEB		0x22	/* R/W	*/
126*4882a593Smuzhiyun #define IPAC_EXIRB		0x24	/* RD	*/
127*4882a593Smuzhiyun #define IPAC_RBCLB		0x25	/* RD	*/
128*4882a593Smuzhiyun #define IPAC_RAH1		0x26	/* WR	*/
129*4882a593Smuzhiyun #define IPAC_RAH2		0x27	/* WR	*/
130*4882a593Smuzhiyun #define IPAC_RSTAB		0x27	/* RD	*/
131*4882a593Smuzhiyun #define IPAC_RAL1		0x28	/* R/W	*/
132*4882a593Smuzhiyun #define IPAC_RAL2		0x29	/* WR	*/
133*4882a593Smuzhiyun #define IPAC_RHCRB		0x29	/* RD	*/
134*4882a593Smuzhiyun #define IPAC_XBCL		0x2A	/* WR	*/
135*4882a593Smuzhiyun #define IPAC_CCR2		0x2C	/* R/W	*/
136*4882a593Smuzhiyun #define IPAC_RBCHB		0x2D	/* RD	*/
137*4882a593Smuzhiyun #define IPAC_XBCH		0x2D	/* WR	*/
138*4882a593Smuzhiyun #define HSCX_VSTR		0x2E	/* RD	*/
139*4882a593Smuzhiyun #define IPAC_RLCR		0x2E	/* WR	*/
140*4882a593Smuzhiyun #define IPAC_CCR1		0x2F	/* R/W	*/
141*4882a593Smuzhiyun #define IPAC_TSAX		0x30	/* WR	*/
142*4882a593Smuzhiyun #define IPAC_TSAR		0x31	/* WR	*/
143*4882a593Smuzhiyun #define IPAC_XCCR		0x32	/* WR	*/
144*4882a593Smuzhiyun #define IPAC_RCCR		0x33	/* WR	*/
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun /* IPAC_ISTAB/IPAC_MASKB bits */
147*4882a593Smuzhiyun #define IPAC_B_XPR		0x10
148*4882a593Smuzhiyun #define IPAC_B_RPF		0x40
149*4882a593Smuzhiyun #define IPAC_B_RME		0x80
150*4882a593Smuzhiyun #define IPAC_B_ON		0x2F
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun /* IPAC_EXIRB bits */
153*4882a593Smuzhiyun #define IPAC_B_RFS		0x04
154*4882a593Smuzhiyun #define IPAC_B_RFO		0x10
155*4882a593Smuzhiyun #define IPAC_B_XDU		0x40
156*4882a593Smuzhiyun #define IPAC_B_XMR		0x80
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /* IPAC special registers */
159*4882a593Smuzhiyun #define IPAC_CONF		0xC0	/* R/W	*/
160*4882a593Smuzhiyun #define IPAC_ISTA		0xC1	/* RD	*/
161*4882a593Smuzhiyun #define IPAC_MASK		0xC1	/* WR	*/
162*4882a593Smuzhiyun #define IPAC_ID			0xC2	/* RD	*/
163*4882a593Smuzhiyun #define IPAC_ACFG		0xC3	/* R/W	*/
164*4882a593Smuzhiyun #define IPAC_AOE		0xC4	/* R/W	*/
165*4882a593Smuzhiyun #define IPAC_ARX		0xC5	/* RD	*/
166*4882a593Smuzhiyun #define IPAC_ATX		0xC5	/* WR	*/
167*4882a593Smuzhiyun #define IPAC_PITA1		0xC6	/* R/W	*/
168*4882a593Smuzhiyun #define IPAC_PITA2		0xC7	/* R/W	*/
169*4882a593Smuzhiyun #define IPAC_POTA1		0xC8	/* R/W	*/
170*4882a593Smuzhiyun #define IPAC_POTA2		0xC9	/* R/W	*/
171*4882a593Smuzhiyun #define IPAC_PCFG		0xCA	/* R/W	*/
172*4882a593Smuzhiyun #define IPAC_SCFG		0xCB	/* R/W	*/
173*4882a593Smuzhiyun #define IPAC_TIMR2		0xCC	/* R/W	*/
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun /* IPAC_ISTA/_MASK bits */
176*4882a593Smuzhiyun #define IPAC__EXB		0x01
177*4882a593Smuzhiyun #define IPAC__ICB		0x02
178*4882a593Smuzhiyun #define IPAC__EXA		0x04
179*4882a593Smuzhiyun #define IPAC__ICA		0x08
180*4882a593Smuzhiyun #define IPAC__EXD		0x10
181*4882a593Smuzhiyun #define IPAC__ICD		0x20
182*4882a593Smuzhiyun #define IPAC__INT0		0x40
183*4882a593Smuzhiyun #define IPAC__INT1		0x80
184*4882a593Smuzhiyun #define IPAC__ON		0xC0
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun /* HSCX ISTA/MASK bits */
187*4882a593Smuzhiyun #define HSCX__EXB		0x01
188*4882a593Smuzhiyun #define HSCX__EXA		0x02
189*4882a593Smuzhiyun #define HSCX__ICA		0x04
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun /* ISAC/ISACX/IPAC/IPACX L1 commands */
192*4882a593Smuzhiyun #define ISAC_CMD_TIM		0x0
193*4882a593Smuzhiyun #define ISAC_CMD_RS		0x1
194*4882a593Smuzhiyun #define ISAC_CMD_SCZ		0x4
195*4882a593Smuzhiyun #define ISAC_CMD_SSZ		0x2
196*4882a593Smuzhiyun #define ISAC_CMD_AR8		0x8
197*4882a593Smuzhiyun #define ISAC_CMD_AR10		0x9
198*4882a593Smuzhiyun #define ISAC_CMD_ARL		0xA
199*4882a593Smuzhiyun #define ISAC_CMD_DUI		0xF
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun /* ISAC/ISACX/IPAC/IPACX L1 indications */
202*4882a593Smuzhiyun #define ISAC_IND_DR		0x0
203*4882a593Smuzhiyun #define ISAC_IND_RS		0x1
204*4882a593Smuzhiyun #define ISAC_IND_SD		0x2
205*4882a593Smuzhiyun #define ISAC_IND_DIS		0x3
206*4882a593Smuzhiyun #define ISAC_IND_RSY		0x4
207*4882a593Smuzhiyun #define ISAC_IND_DR6		0x5
208*4882a593Smuzhiyun #define ISAC_IND_EI		0x6
209*4882a593Smuzhiyun #define ISAC_IND_PU		0x7
210*4882a593Smuzhiyun #define ISAC_IND_ARD		0x8
211*4882a593Smuzhiyun #define ISAC_IND_TI		0xA
212*4882a593Smuzhiyun #define ISAC_IND_ATI		0xB
213*4882a593Smuzhiyun #define ISAC_IND_AI8		0xC
214*4882a593Smuzhiyun #define ISAC_IND_AI10		0xD
215*4882a593Smuzhiyun #define ISAC_IND_DID		0xF
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun /* the new ISACX / IPACX */
218*4882a593Smuzhiyun /* D-channel registers   */
219*4882a593Smuzhiyun #define ISACX_RFIFOD		0x00	/* RD	*/
220*4882a593Smuzhiyun #define ISACX_XFIFOD		0x00	/* WR	*/
221*4882a593Smuzhiyun #define ISACX_ISTAD		0x20	/* RD	*/
222*4882a593Smuzhiyun #define ISACX_MASKD		0x20	/* WR	*/
223*4882a593Smuzhiyun #define ISACX_STARD		0x21	/* RD	*/
224*4882a593Smuzhiyun #define ISACX_CMDRD		0x21	/* WR	*/
225*4882a593Smuzhiyun #define ISACX_MODED		0x22	/* R/W	*/
226*4882a593Smuzhiyun #define ISACX_EXMD1		0x23	/* R/W	*/
227*4882a593Smuzhiyun #define ISACX_TIMR1		0x24	/* R/W	*/
228*4882a593Smuzhiyun #define ISACX_SAP1		0x25	/* WR	*/
229*4882a593Smuzhiyun #define ISACX_SAP2		0x26	/* WR	*/
230*4882a593Smuzhiyun #define ISACX_RBCLD		0x26	/* RD	*/
231*4882a593Smuzhiyun #define ISACX_RBCHD		0x27	/* RD	*/
232*4882a593Smuzhiyun #define ISACX_TEI1		0x27	/* WR	*/
233*4882a593Smuzhiyun #define ISACX_TEI2		0x28	/* WR	*/
234*4882a593Smuzhiyun #define ISACX_RSTAD		0x28	/* RD	*/
235*4882a593Smuzhiyun #define ISACX_TMD		0x29	/* R/W	*/
236*4882a593Smuzhiyun #define ISACX_CIR0		0x2E	/* RD	*/
237*4882a593Smuzhiyun #define ISACX_CIX0		0x2E	/* WR	*/
238*4882a593Smuzhiyun #define ISACX_CIR1		0x2F	/* RD	*/
239*4882a593Smuzhiyun #define ISACX_CIX1		0x2F	/* WR	*/
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun /* Transceiver registers  */
242*4882a593Smuzhiyun #define ISACX_TR_CONF0		0x30	/* R/W	*/
243*4882a593Smuzhiyun #define ISACX_TR_CONF1		0x31	/* R/W	*/
244*4882a593Smuzhiyun #define ISACX_TR_CONF2		0x32	/* R/W	*/
245*4882a593Smuzhiyun #define ISACX_TR_STA		0x33	/* RD	*/
246*4882a593Smuzhiyun #define ISACX_TR_CMD		0x34	/* R/W	*/
247*4882a593Smuzhiyun #define ISACX_SQRR1		0x35	/* RD	*/
248*4882a593Smuzhiyun #define ISACX_SQXR1		0x35	/* WR	*/
249*4882a593Smuzhiyun #define ISACX_SQRR2		0x36	/* RD	*/
250*4882a593Smuzhiyun #define ISACX_SQXR2		0x36	/* WR	*/
251*4882a593Smuzhiyun #define ISACX_SQRR3		0x37	/* RD	*/
252*4882a593Smuzhiyun #define ISACX_SQXR3		0x37	/* WR	*/
253*4882a593Smuzhiyun #define ISACX_ISTATR		0x38	/* RD	*/
254*4882a593Smuzhiyun #define ISACX_MASKTR		0x39	/* R/W	*/
255*4882a593Smuzhiyun #define ISACX_TR_MODE		0x3A	/* R/W	*/
256*4882a593Smuzhiyun #define ISACX_ACFG1		0x3C	/* R/W	*/
257*4882a593Smuzhiyun #define ISACX_ACFG2		0x3D	/* R/W	*/
258*4882a593Smuzhiyun #define ISACX_AOE		0x3E	/* R/W	*/
259*4882a593Smuzhiyun #define ISACX_ARX		0x3F	/* RD	*/
260*4882a593Smuzhiyun #define ISACX_ATX		0x3F	/* WR	*/
261*4882a593Smuzhiyun 
262*4882a593Smuzhiyun /* IOM: Timeslot, DPS, CDA  */
263*4882a593Smuzhiyun #define ISACX_CDA10		0x40	/* R/W	*/
264*4882a593Smuzhiyun #define ISACX_CDA11		0x41	/* R/W	*/
265*4882a593Smuzhiyun #define ISACX_CDA20		0x42	/* R/W	*/
266*4882a593Smuzhiyun #define ISACX_CDA21		0x43	/* R/W	*/
267*4882a593Smuzhiyun #define ISACX_CDA_TSDP10	0x44	/* R/W	*/
268*4882a593Smuzhiyun #define ISACX_CDA_TSDP11	0x45	/* R/W	*/
269*4882a593Smuzhiyun #define ISACX_CDA_TSDP20	0x46	/* R/W	*/
270*4882a593Smuzhiyun #define ISACX_CDA_TSDP21	0x47	/* R/W	*/
271*4882a593Smuzhiyun #define ISACX_BCHA_TSDP_BC1	0x48	/* R/W	*/
272*4882a593Smuzhiyun #define ISACX_BCHA_TSDP_BC2	0x49	/* R/W	*/
273*4882a593Smuzhiyun #define ISACX_BCHB_TSDP_BC1	0x4A	/* R/W	*/
274*4882a593Smuzhiyun #define ISACX_BCHB_TSDP_BC2	0x4B	/* R/W	*/
275*4882a593Smuzhiyun #define ISACX_TR_TSDP_BC1	0x4C	/* R/W	*/
276*4882a593Smuzhiyun #define ISACX_TR_TSDP_BC2	0x4D	/* R/W	*/
277*4882a593Smuzhiyun #define ISACX_CDA1_CR		0x4E	/* R/W	*/
278*4882a593Smuzhiyun #define ISACX_CDA2_CR		0x4F	/* R/W	*/
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun /* IOM: Contol, Sync transfer, Monitor    */
281*4882a593Smuzhiyun #define ISACX_TR_CR		0x50	/* R/W	*/
282*4882a593Smuzhiyun #define ISACX_TRC_CR		0x50	/* R/W	*/
283*4882a593Smuzhiyun #define ISACX_BCHA_CR		0x51	/* R/W	*/
284*4882a593Smuzhiyun #define ISACX_BCHB_CR		0x52	/* R/W	*/
285*4882a593Smuzhiyun #define ISACX_DCI_CR		0x53	/* R/W	*/
286*4882a593Smuzhiyun #define ISACX_DCIC_CR		0x53	/* R/W	*/
287*4882a593Smuzhiyun #define ISACX_MON_CR		0x54	/* R/W	*/
288*4882a593Smuzhiyun #define ISACX_SDS1_CR		0x55	/* R/W	*/
289*4882a593Smuzhiyun #define ISACX_SDS2_CR		0x56	/* R/W	*/
290*4882a593Smuzhiyun #define ISACX_IOM_CR		0x57	/* R/W	*/
291*4882a593Smuzhiyun #define ISACX_STI		0x58	/* RD	*/
292*4882a593Smuzhiyun #define ISACX_ASTI		0x58	/* WR	*/
293*4882a593Smuzhiyun #define ISACX_MSTI		0x59	/* R/W	*/
294*4882a593Smuzhiyun #define ISACX_SDS_CONF		0x5A	/* R/W	*/
295*4882a593Smuzhiyun #define ISACX_MCDA		0x5B	/* RD	*/
296*4882a593Smuzhiyun #define ISACX_MOR		0x5C	/* RD	*/
297*4882a593Smuzhiyun #define ISACX_MOX		0x5C	/* WR	*/
298*4882a593Smuzhiyun #define ISACX_MOSR		0x5D	/* RD	*/
299*4882a593Smuzhiyun #define ISACX_MOCR		0x5E	/* R/W	*/
300*4882a593Smuzhiyun #define ISACX_MSTA		0x5F	/* RD	*/
301*4882a593Smuzhiyun #define ISACX_MCONF		0x5F	/* WR	*/
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun /* Interrupt and general registers */
304*4882a593Smuzhiyun #define ISACX_ISTA		0x60	/* RD	*/
305*4882a593Smuzhiyun #define ISACX_MASK		0x60	/* WR	*/
306*4882a593Smuzhiyun #define ISACX_AUXI		0x61	/* RD	*/
307*4882a593Smuzhiyun #define ISACX_AUXM		0x61	/* WR	*/
308*4882a593Smuzhiyun #define ISACX_MODE1		0x62	/* R/W	*/
309*4882a593Smuzhiyun #define ISACX_MODE2		0x63	/* R/W	*/
310*4882a593Smuzhiyun #define ISACX_ID		0x64	/* RD	*/
311*4882a593Smuzhiyun #define ISACX_SRES		0x64	/* WR	*/
312*4882a593Smuzhiyun #define ISACX_TIMR2		0x65	/* R/W	*/
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun /* Register Bits */
315*4882a593Smuzhiyun /* ISACX/IPACX _ISTAD (R) and _MASKD (W) */
316*4882a593Smuzhiyun #define ISACX_D_XDU		0x04
317*4882a593Smuzhiyun #define ISACX_D_XMR		0x08
318*4882a593Smuzhiyun #define ISACX_D_XPR		0x10
319*4882a593Smuzhiyun #define ISACX_D_RFO		0x20
320*4882a593Smuzhiyun #define ISACX_D_RPF		0x40
321*4882a593Smuzhiyun #define ISACX_D_RME		0x80
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun /* ISACX/IPACX _ISTA (R) and _MASK (W) */
324*4882a593Smuzhiyun #define ISACX__ICD		0x01
325*4882a593Smuzhiyun #define ISACX__MOS		0x02
326*4882a593Smuzhiyun #define ISACX__TRAN		0x04
327*4882a593Smuzhiyun #define ISACX__AUX		0x08
328*4882a593Smuzhiyun #define ISACX__CIC		0x10
329*4882a593Smuzhiyun #define ISACX__ST		0x20
330*4882a593Smuzhiyun #define IPACX__ON		0x2C
331*4882a593Smuzhiyun #define IPACX__ICB		0x40
332*4882a593Smuzhiyun #define IPACX__ICA		0x80
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun /* ISACX/IPACX _CMDRD (W) */
335*4882a593Smuzhiyun #define ISACX_CMDRD_XRES	0x01
336*4882a593Smuzhiyun #define ISACX_CMDRD_XME		0x02
337*4882a593Smuzhiyun #define ISACX_CMDRD_XTF		0x08
338*4882a593Smuzhiyun #define ISACX_CMDRD_STI		0x10
339*4882a593Smuzhiyun #define ISACX_CMDRD_RRES	0x40
340*4882a593Smuzhiyun #define ISACX_CMDRD_RMC		0x80
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun /* ISACX/IPACX _RSTAD (R) */
343*4882a593Smuzhiyun #define ISACX_RSTAD_TA		0x01
344*4882a593Smuzhiyun #define ISACX_RSTAD_CR		0x02
345*4882a593Smuzhiyun #define ISACX_RSTAD_SA0		0x04
346*4882a593Smuzhiyun #define ISACX_RSTAD_SA1		0x08
347*4882a593Smuzhiyun #define ISACX_RSTAD_RAB		0x10
348*4882a593Smuzhiyun #define ISACX_RSTAD_CRC		0x20
349*4882a593Smuzhiyun #define ISACX_RSTAD_RDO		0x40
350*4882a593Smuzhiyun #define ISACX_RSTAD_VFR		0x80
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun /* ISACX/IPACX _CIR0 (R) */
353*4882a593Smuzhiyun #define ISACX_CIR0_BAS		0x01
354*4882a593Smuzhiyun #define ISACX_CIR0_SG		0x08
355*4882a593Smuzhiyun #define ISACX_CIR0_CIC1		0x08
356*4882a593Smuzhiyun #define ISACX_CIR0_CIC0		0x08
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun /* B-channel registers */
359*4882a593Smuzhiyun #define IPACX_OFF_ICA		0x70
360*4882a593Smuzhiyun #define IPACX_OFF_ICB		0x80
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun /* ICA: IPACX_OFF_ICA + Reg ICB: IPACX_OFF_ICB + Reg */
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun #define IPACX_ISTAB		0x00    /* RD	*/
365*4882a593Smuzhiyun #define IPACX_MASKB		0x00	/* WR	*/
366*4882a593Smuzhiyun #define IPACX_STARB		0x01	/* RD	*/
367*4882a593Smuzhiyun #define IPACX_CMDRB		0x01	/* WR	*/
368*4882a593Smuzhiyun #define IPACX_MODEB		0x02	/* R/W	*/
369*4882a593Smuzhiyun #define IPACX_EXMB		0x03	/* R/W	*/
370*4882a593Smuzhiyun #define IPACX_RAH1		0x05	/* WR	*/
371*4882a593Smuzhiyun #define IPACX_RAH2		0x06	/* WR	*/
372*4882a593Smuzhiyun #define IPACX_RBCLB		0x06	/* RD	*/
373*4882a593Smuzhiyun #define IPACX_RBCHB		0x07	/* RD	*/
374*4882a593Smuzhiyun #define IPACX_RAL1		0x07	/* WR	*/
375*4882a593Smuzhiyun #define IPACX_RAL2		0x08	/* WR	*/
376*4882a593Smuzhiyun #define IPACX_RSTAB		0x08	/* RD	*/
377*4882a593Smuzhiyun #define IPACX_TMB		0x09	/* R/W	*/
378*4882a593Smuzhiyun #define IPACX_RFIFOB		0x0A	/* RD	*/
379*4882a593Smuzhiyun #define IPACX_XFIFOB		0x0A	/* WR	*/
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun /* IPACX_ISTAB / IPACX_MASKB bits */
382*4882a593Smuzhiyun #define IPACX_B_XDU		0x04
383*4882a593Smuzhiyun #define IPACX_B_XPR		0x10
384*4882a593Smuzhiyun #define IPACX_B_RFO		0x20
385*4882a593Smuzhiyun #define IPACX_B_RPF		0x40
386*4882a593Smuzhiyun #define IPACX_B_RME		0x80
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun #define IPACX_B_ON		0x0B
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun extern int mISDNisac_init(struct isac_hw *, void *);
391*4882a593Smuzhiyun extern irqreturn_t mISDNisac_irq(struct isac_hw *, u8);
392*4882a593Smuzhiyun extern u32 mISDNipac_init(struct ipac_hw *, void *);
393*4882a593Smuzhiyun extern irqreturn_t mISDNipac_irq(struct ipac_hw *, int);
394