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