xref: /OK3568_Linux_fs/kernel/drivers/isdn/hardware/mISDN/hfc_pci.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *  specific defines for CCD's HFC 2BDS0 PCI chips
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Author     Werner Cornelius (werner@isdn4linux.de)
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Copyright 1999  by Werner Cornelius (werner@isdn4linux.de)
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /*
11*4882a593Smuzhiyun  * thresholds for transparent B-channel mode
12*4882a593Smuzhiyun  * change mask and threshold simultaneously
13*4882a593Smuzhiyun  */
14*4882a593Smuzhiyun #define HFCPCI_BTRANS_THRESHOLD 128
15*4882a593Smuzhiyun #define HFCPCI_FILLEMPTY	64
16*4882a593Smuzhiyun #define HFCPCI_BTRANS_THRESMASK 0x00
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun /* defines for PCI config */
19*4882a593Smuzhiyun #define PCI_ENA_MEMIO		0x02
20*4882a593Smuzhiyun #define PCI_ENA_MASTER		0x04
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /* GCI/IOM bus monitor registers */
23*4882a593Smuzhiyun #define HCFPCI_C_I		0x08
24*4882a593Smuzhiyun #define HFCPCI_TRxR		0x0C
25*4882a593Smuzhiyun #define HFCPCI_MON1_D		0x28
26*4882a593Smuzhiyun #define HFCPCI_MON2_D		0x2C
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /* GCI/IOM bus timeslot registers */
29*4882a593Smuzhiyun #define HFCPCI_B1_SSL		0x80
30*4882a593Smuzhiyun #define HFCPCI_B2_SSL		0x84
31*4882a593Smuzhiyun #define HFCPCI_AUX1_SSL		0x88
32*4882a593Smuzhiyun #define HFCPCI_AUX2_SSL		0x8C
33*4882a593Smuzhiyun #define HFCPCI_B1_RSL		0x90
34*4882a593Smuzhiyun #define HFCPCI_B2_RSL		0x94
35*4882a593Smuzhiyun #define HFCPCI_AUX1_RSL		0x98
36*4882a593Smuzhiyun #define HFCPCI_AUX2_RSL		0x9C
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /* GCI/IOM bus data registers */
39*4882a593Smuzhiyun #define HFCPCI_B1_D		0xA0
40*4882a593Smuzhiyun #define HFCPCI_B2_D		0xA4
41*4882a593Smuzhiyun #define HFCPCI_AUX1_D		0xA8
42*4882a593Smuzhiyun #define HFCPCI_AUX2_D		0xAC
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun /* GCI/IOM bus configuration registers */
45*4882a593Smuzhiyun #define HFCPCI_MST_EMOD		0xB4
46*4882a593Smuzhiyun #define HFCPCI_MST_MODE		0xB8
47*4882a593Smuzhiyun #define HFCPCI_CONNECT		0xBC
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /* Interrupt and status registers */
51*4882a593Smuzhiyun #define HFCPCI_FIFO_EN		0x44
52*4882a593Smuzhiyun #define HFCPCI_TRM		0x48
53*4882a593Smuzhiyun #define HFCPCI_B_MODE		0x4C
54*4882a593Smuzhiyun #define HFCPCI_CHIP_ID		0x58
55*4882a593Smuzhiyun #define HFCPCI_CIRM		0x60
56*4882a593Smuzhiyun #define HFCPCI_CTMT		0x64
57*4882a593Smuzhiyun #define HFCPCI_INT_M1		0x68
58*4882a593Smuzhiyun #define HFCPCI_INT_M2		0x6C
59*4882a593Smuzhiyun #define HFCPCI_INT_S1		0x78
60*4882a593Smuzhiyun #define HFCPCI_INT_S2		0x7C
61*4882a593Smuzhiyun #define HFCPCI_STATUS		0x70
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /* S/T section registers */
64*4882a593Smuzhiyun #define HFCPCI_STATES		0xC0
65*4882a593Smuzhiyun #define HFCPCI_SCTRL		0xC4
66*4882a593Smuzhiyun #define HFCPCI_SCTRL_E		0xC8
67*4882a593Smuzhiyun #define HFCPCI_SCTRL_R		0xCC
68*4882a593Smuzhiyun #define HFCPCI_SQ		0xD0
69*4882a593Smuzhiyun #define HFCPCI_CLKDEL		0xDC
70*4882a593Smuzhiyun #define HFCPCI_B1_REC		0xF0
71*4882a593Smuzhiyun #define HFCPCI_B1_SEND		0xF0
72*4882a593Smuzhiyun #define HFCPCI_B2_REC		0xF4
73*4882a593Smuzhiyun #define HFCPCI_B2_SEND		0xF4
74*4882a593Smuzhiyun #define HFCPCI_D_REC		0xF8
75*4882a593Smuzhiyun #define HFCPCI_D_SEND		0xF8
76*4882a593Smuzhiyun #define HFCPCI_E_REC		0xFC
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /* bits in status register (READ) */
80*4882a593Smuzhiyun #define HFCPCI_PCI_PROC		0x02
81*4882a593Smuzhiyun #define HFCPCI_NBUSY		0x04
82*4882a593Smuzhiyun #define HFCPCI_TIMER_ELAP	0x10
83*4882a593Smuzhiyun #define HFCPCI_STATINT		0x20
84*4882a593Smuzhiyun #define HFCPCI_FRAMEINT		0x40
85*4882a593Smuzhiyun #define HFCPCI_ANYINT		0x80
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /* bits in CTMT (Write) */
88*4882a593Smuzhiyun #define HFCPCI_CLTIMER		0x80
89*4882a593Smuzhiyun #define HFCPCI_TIM3_125		0x04
90*4882a593Smuzhiyun #define HFCPCI_TIM25		0x10
91*4882a593Smuzhiyun #define HFCPCI_TIM50		0x14
92*4882a593Smuzhiyun #define HFCPCI_TIM400		0x18
93*4882a593Smuzhiyun #define HFCPCI_TIM800		0x1C
94*4882a593Smuzhiyun #define HFCPCI_AUTO_TIMER	0x20
95*4882a593Smuzhiyun #define HFCPCI_TRANSB2		0x02
96*4882a593Smuzhiyun #define HFCPCI_TRANSB1		0x01
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun /* bits in CIRM (Write) */
99*4882a593Smuzhiyun #define HFCPCI_AUX_MSK		0x07
100*4882a593Smuzhiyun #define HFCPCI_RESET		0x08
101*4882a593Smuzhiyun #define HFCPCI_B1_REV		0x40
102*4882a593Smuzhiyun #define HFCPCI_B2_REV		0x80
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun /* bits in INT_M1 and INT_S1 */
105*4882a593Smuzhiyun #define HFCPCI_INTS_B1TRANS	0x01
106*4882a593Smuzhiyun #define HFCPCI_INTS_B2TRANS	0x02
107*4882a593Smuzhiyun #define HFCPCI_INTS_DTRANS	0x04
108*4882a593Smuzhiyun #define HFCPCI_INTS_B1REC	0x08
109*4882a593Smuzhiyun #define HFCPCI_INTS_B2REC	0x10
110*4882a593Smuzhiyun #define HFCPCI_INTS_DREC	0x20
111*4882a593Smuzhiyun #define HFCPCI_INTS_L1STATE	0x40
112*4882a593Smuzhiyun #define HFCPCI_INTS_TIMER	0x80
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun /* bits in INT_M2 */
115*4882a593Smuzhiyun #define HFCPCI_PROC_TRANS	0x01
116*4882a593Smuzhiyun #define HFCPCI_GCI_I_CHG	0x02
117*4882a593Smuzhiyun #define HFCPCI_GCI_MON_REC	0x04
118*4882a593Smuzhiyun #define HFCPCI_IRQ_ENABLE	0x08
119*4882a593Smuzhiyun #define HFCPCI_PMESEL		0x80
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /* bits in STATES */
122*4882a593Smuzhiyun #define HFCPCI_STATE_MSK	0x0F
123*4882a593Smuzhiyun #define HFCPCI_LOAD_STATE	0x10
124*4882a593Smuzhiyun #define HFCPCI_ACTIVATE		0x20
125*4882a593Smuzhiyun #define HFCPCI_DO_ACTION	0x40
126*4882a593Smuzhiyun #define HFCPCI_NT_G2_G3		0x80
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /* bits in HFCD_MST_MODE */
129*4882a593Smuzhiyun #define HFCPCI_MASTER		0x01
130*4882a593Smuzhiyun #define HFCPCI_SLAVE		0x00
131*4882a593Smuzhiyun #define HFCPCI_F0IO_POSITIV	0x02
132*4882a593Smuzhiyun #define HFCPCI_F0_NEGATIV	0x04
133*4882a593Smuzhiyun #define HFCPCI_F0_2C4		0x08
134*4882a593Smuzhiyun /* remaining bits are for codecs control */
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* bits in HFCD_SCTRL */
137*4882a593Smuzhiyun #define SCTRL_B1_ENA		0x01
138*4882a593Smuzhiyun #define SCTRL_B2_ENA		0x02
139*4882a593Smuzhiyun #define SCTRL_MODE_TE		0x00
140*4882a593Smuzhiyun #define SCTRL_MODE_NT		0x04
141*4882a593Smuzhiyun #define SCTRL_LOW_PRIO		0x08
142*4882a593Smuzhiyun #define SCTRL_SQ_ENA		0x10
143*4882a593Smuzhiyun #define SCTRL_TEST		0x20
144*4882a593Smuzhiyun #define SCTRL_NONE_CAP		0x40
145*4882a593Smuzhiyun #define SCTRL_PWR_DOWN		0x80
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun /* bits in SCTRL_E  */
148*4882a593Smuzhiyun #define HFCPCI_AUTO_AWAKE	0x01
149*4882a593Smuzhiyun #define HFCPCI_DBIT_1		0x04
150*4882a593Smuzhiyun #define HFCPCI_IGNORE_COL	0x08
151*4882a593Smuzhiyun #define HFCPCI_CHG_B1_B2	0x80
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun /* bits in FIFO_EN register */
154*4882a593Smuzhiyun #define HFCPCI_FIFOEN_B1	0x03
155*4882a593Smuzhiyun #define HFCPCI_FIFOEN_B2	0x0C
156*4882a593Smuzhiyun #define HFCPCI_FIFOEN_DTX	0x10
157*4882a593Smuzhiyun #define HFCPCI_FIFOEN_B1TX	0x01
158*4882a593Smuzhiyun #define HFCPCI_FIFOEN_B1RX	0x02
159*4882a593Smuzhiyun #define HFCPCI_FIFOEN_B2TX	0x04
160*4882a593Smuzhiyun #define HFCPCI_FIFOEN_B2RX	0x08
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun /* definitions of fifo memory area */
164*4882a593Smuzhiyun #define MAX_D_FRAMES 15
165*4882a593Smuzhiyun #define MAX_B_FRAMES 31
166*4882a593Smuzhiyun #define B_SUB_VAL    0x200
167*4882a593Smuzhiyun #define B_FIFO_SIZE  (0x2000 - B_SUB_VAL)
168*4882a593Smuzhiyun #define D_FIFO_SIZE  512
169*4882a593Smuzhiyun #define D_FREG_MASK  0xF
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun struct zt {
172*4882a593Smuzhiyun 	__le16 z1;  /* Z1 pointer 16 Bit */
173*4882a593Smuzhiyun 	__le16 z2;  /* Z2 pointer 16 Bit */
174*4882a593Smuzhiyun };
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun struct dfifo {
177*4882a593Smuzhiyun 	u_char data[D_FIFO_SIZE]; /* FIFO data space */
178*4882a593Smuzhiyun 	u_char fill1[0x20A0 - D_FIFO_SIZE]; /* reserved, do not use */
179*4882a593Smuzhiyun 	u_char f1, f2; /* f pointers */
180*4882a593Smuzhiyun 	u_char fill2[0x20C0 - 0x20A2]; /* reserved, do not use */
181*4882a593Smuzhiyun 	/* mask index with D_FREG_MASK for access */
182*4882a593Smuzhiyun 	struct zt za[MAX_D_FRAMES + 1];
183*4882a593Smuzhiyun 	u_char fill3[0x4000 - 0x2100]; /* align 16K */
184*4882a593Smuzhiyun };
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun struct bzfifo {
187*4882a593Smuzhiyun 	struct zt	za[MAX_B_FRAMES + 1]; /* only range 0x0..0x1F allowed */
188*4882a593Smuzhiyun 	u_char		f1, f2; /* f pointers */
189*4882a593Smuzhiyun 	u_char		fill[0x2100 - 0x2082]; /* alignment */
190*4882a593Smuzhiyun };
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun union fifo_area {
194*4882a593Smuzhiyun 	struct {
195*4882a593Smuzhiyun 		struct dfifo d_tx; /* D-send channel */
196*4882a593Smuzhiyun 		struct dfifo d_rx; /* D-receive channel */
197*4882a593Smuzhiyun 	} d_chan;
198*4882a593Smuzhiyun 	struct {
199*4882a593Smuzhiyun 		u_char		fill1[0x200];
200*4882a593Smuzhiyun 		u_char		txdat_b1[B_FIFO_SIZE];
201*4882a593Smuzhiyun 		struct bzfifo	txbz_b1;
202*4882a593Smuzhiyun 		struct bzfifo	txbz_b2;
203*4882a593Smuzhiyun 		u_char		txdat_b2[B_FIFO_SIZE];
204*4882a593Smuzhiyun 		u_char		fill2[D_FIFO_SIZE];
205*4882a593Smuzhiyun 		u_char		rxdat_b1[B_FIFO_SIZE];
206*4882a593Smuzhiyun 		struct bzfifo	rxbz_b1;
207*4882a593Smuzhiyun 		struct bzfifo	rxbz_b2;
208*4882a593Smuzhiyun 		u_char rxdat_b2[B_FIFO_SIZE];
209*4882a593Smuzhiyun 	} b_chans;
210*4882a593Smuzhiyun 	u_char fill[32768];
211*4882a593Smuzhiyun };
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun #define Write_hfc(a, b, c) (writeb(c, (a->hw.pci_io) + b))
214*4882a593Smuzhiyun #define Read_hfc(a, b) (readb((a->hw.pci_io) + b))
215