1#define	USE_PCI_CLOCK
2static const char rcsid[] =
3"Revision: 3.4.5 Date: 2002/03/07 ";
4
5/*
6 * pc300.c	Cyclades-PC300(tm) Driver.
7 *
8 * Author:	Ivan Passos <ivan@cyclades.com>
9 * Maintainer:	PC300 Maintainer <pc300@cyclades.com>
10 *
11 * Copyright:	(c) 1999-2003 Cyclades Corp.
12 *
13 *	This program is free software; you can redistribute it and/or
14 *	modify it under the terms of the GNU General Public License
15 *	as published by the Free Software Foundation; either version
16 *	2 of the License, or (at your option) any later version.
17 *
18 *	Using tabstop = 4.
19 *
20 * $Log: pc300_drv.c,v $
21 * Revision 3.23  2002/03/20 13:58:40  henrique
22 * Fixed ortographic mistakes
23 *
24 * Revision 3.22  2002/03/13 16:56:56  henrique
25 * Take out the debug messages
26 *
27 * Revision 3.21  2002/03/07 14:17:09  henrique
28 * License data fixed
29 *
30 * Revision 3.20  2002/01/17 17:58:52  ivan
31 * Support for PC300-TE/M (PMC).
32 *
33 * Revision 3.19  2002/01/03 17:08:47  daniela
34 * Enables DMA reception when the SCA-II disables it improperly.
35 *
36 * Revision 3.18  2001/12/03 18:47:50  daniela
37 * Esthetic changes.
38 *
39 * Revision 3.17  2001/10/19 16:50:13  henrique
40 * Patch to kernel 2.4.12 and new generic hdlc.
41 *
42 * Revision 3.16  2001/10/16 15:12:31  regina
43 * clear statistics
44 *
45 * Revision 3.11 to 3.15  2001/10/11 20:26:04  daniela
46 * More DMA fixes for noisy lines.
47 * Return the size of bad frames in dma_get_rx_frame_size, so that the Rx buffer
48 * descriptors can be cleaned by dma_buf_read (called in cpc_net_rx).
49 * Renamed dma_start routine to rx_dma_start. Improved Rx statistics.
50 * Fixed BOF interrupt treatment. Created dma_start routine.
51 * Changed min and max to cpc_min and cpc_max.
52 *
53 * Revision 3.10  2001/08/06 12:01:51  regina
54 * Fixed problem in DSR_DE bit.
55 *
56 * Revision 3.9  2001/07/18 19:27:26  daniela
57 * Added some history comments.
58 *
59 * Revision 3.8  2001/07/12 13:11:19  regina
60 * bug fix - DCD-OFF in pc300 tty driver
61 *
62 * Revision 3.3 to 3.7  2001/07/06 15:00:20  daniela
63 * Removing kernel 2.4.3 and previous support.
64 * DMA transmission bug fix.
65 * MTU check in cpc_net_rx fixed.
66 * Boot messages reviewed.
67 * New configuration parameters (line code, CRC calculation and clock).
68 *
69 * Revision 3.2 2001/06/22 13:13:02  regina
70 * MLPPP implementation. Changed the header of message trace to include
71 * the device name. New format : "hdlcX[R/T]: ".
72 * Default configuration changed.
73 *
74 * Revision 3.1 2001/06/15 regina
75 * in cpc_queue_xmit, netif_stop_queue is called if don't have free descriptor
76 * upping major version number
77 *
78 * Revision 1.1.1.1  2001/06/13 20:25:04  daniela
79 * PC300 initial CVS version (3.4.0-pre1)
80 *
81 * Revision 3.0.1.2 2001/06/08 daniela
82 * Did some changes in the DMA programming implementation to avoid the
83 * occurrence of a SCA-II bug when CDA is accessed during a DMA transfer.
84 *
85 * Revision 3.0.1.1 2001/05/02 daniela
86 * Added kernel 2.4.3 support.
87 *
88 * Revision 3.0.1.0 2001/03/13 daniela, henrique
89 * Added Frame Relay Support.
90 * Driver now uses HDLC generic driver to provide protocol support.
91 *
92 * Revision 3.0.0.8 2001/03/02 daniela
93 * Fixed ram size detection.
94 * Changed SIOCGPC300CONF ioctl, to give hw information to pc300util.
95 *
96 * Revision 3.0.0.7 2001/02/23 daniela
97 * netif_stop_queue called before the SCA-II transmition commands in
98 * cpc_queue_xmit, and with interrupts disabled to avoid race conditions with
99 * transmition interrupts.
100 * Fixed falc_check_status for Unframed E1.
101 *
102 * Revision 3.0.0.6 2000/12/13 daniela
103 * Implemented pc300util support: trace, statistics, status and loopback
104 * tests for the PC300 TE boards.
105 *
106 * Revision 3.0.0.5 2000/12/12 ivan
107 * Added support for Unframed E1.
108 * Implemented monitor mode.
109 * Fixed DCD sensitivity on the second channel.
110 * Driver now complies with new PCI kernel architecture.
111 *
112 * Revision 3.0.0.4 2000/09/28 ivan
113 * Implemented DCD sensitivity.
114 * Moved hardware-specific open to the end of cpc_open, to avoid race
115 * conditions with early reception interrupts.
116 * Included code for [request|release]_mem_region().
117 * Changed location of pc300.h .
118 * Minor code revision (contrib. of Jeff Garzik).
119 *
120 * Revision 3.0.0.3 2000/07/03 ivan
121 * Previous bugfix for the framing errors with external clock made X21
122 * boards stop working. This version fixes it.
123 *
124 * Revision 3.0.0.2 2000/06/23 ivan
125 * Revisited cpc_queue_xmit to prevent race conditions on Tx DMA buffer
126 * handling when Tx timeouts occur.
127 * Revisited Rx statistics.
128 * Fixed a bug in the SCA-II programming that would cause framing errors
129 * when external clock was configured.
130 *
131 * Revision 3.0.0.1 2000/05/26 ivan
132 * Added logic in the SCA interrupt handler so that no board can monopolize
133 * the driver.
134 * Request PLX I/O region, although driver doesn't use it, to avoid
135 * problems with other drivers accessing it.
136 *
137 * Revision 3.0.0.0 2000/05/15 ivan
138 * Did some changes in the DMA programming implementation to avoid the
139 * occurrence of a SCA-II bug in the second channel.
140 * Implemented workaround for PLX9050 bug that would cause a system lockup
141 * in certain systems, depending on the MMIO addresses allocated to the
142 * board.
143 * Fixed the FALC chip programming to avoid synchronization problems in the
144 * second channel (TE only).
145 * Implemented a cleaner and faster Tx DMA descriptor cleanup procedure in
146 * cpc_queue_xmit().
147 * Changed the built-in driver implementation so that the driver can use the
148 * general 'hdlcN' naming convention instead of proprietary device names.
149 * Driver load messages are now device-centric, instead of board-centric.
150 * Dynamic allocation of net_device structures.
151 * Code is now compliant with the new module interface (module_[init|exit]).
152 * Make use of the PCI helper functions to access PCI resources.
153 *
154 * Revision 2.0.0.0 2000/04/15 ivan
155 * Added support for the PC300/TE boards (T1/FT1/E1/FE1).
156 *
157 * Revision 1.1.0.0 2000/02/28 ivan
158 * Major changes in the driver architecture.
159 * Softnet compliancy implemented.
160 * Driver now reports physical instead of virtual memory addresses.
161 * Added cpc_change_mtu function.
162 *
163 * Revision 1.0.0.0 1999/12/16 ivan
164 * First official release.
165 * Support for 1- and 2-channel boards (which use distinct PCI Device ID's).
166 * Support for monolythic installation (i.e., drv built into the kernel).
167 * X.25 additional checking when lapb_[dis]connect_request returns an error.
168 * SCA programming now covers X.21 as well.
169 *
170 * Revision 0.3.1.0 1999/11/18 ivan
171 * Made X.25 support configuration-dependent (as it depends on external
172 * modules to work).
173 * Changed X.25-specific function names to comply with adopted convention.
174 * Fixed typos in X.25 functions that would cause compile errors (Daniela).
175 * Fixed bug in ch_config that would disable interrupts on a previously
176 * enabled channel if the other channel on the same board was enabled later.
177 *
178 * Revision 0.3.0.0 1999/11/16 daniela
179 * X.25 support.
180 *
181 * Revision 0.2.3.0 1999/11/15 ivan
182 * Function cpc_ch_status now provides more detailed information.
183 * Added support for X.21 clock configuration.
184 * Changed TNR1 setting in order to prevent Tx FIFO overaccesses by the SCA.
185 * Now using PCI clock instead of internal oscillator clock for the SCA.
186 *
187 * Revision 0.2.2.0 1999/11/10 ivan
188 * Changed the *_dma_buf_check functions so that they would print only
189 * the useful info instead of the whole buffer descriptor bank.
190 * Fixed bug in cpc_queue_xmit that would eventually crash the system
191 * in case of a packet drop.
192 * Implemented TX underrun handling.
193 * Improved SCA fine tuning to boost up its performance.
194 *
195 * Revision 0.2.1.0 1999/11/03 ivan
196 * Added functions *dma_buf_pt_init to allow independent initialization
197 * of the next-descr. and DMA buffer pointers on the DMA descriptors.
198 * Kernel buffer release and tbusy clearing is now done in the interrupt
199 * handler.
200 * Fixed bug in cpc_open that would cause an interface reopen to fail.
201 * Added a protocol-specific code section in cpc_net_rx.
202 * Removed printk level defs (they might be added back after the beta phase).
203 *
204 * Revision 0.2.0.0 1999/10/28 ivan
205 * Revisited the code so that new protocols can be easily added / supported.
206 *
207 * Revision 0.1.0.1 1999/10/20 ivan
208 * Mostly "esthetic" changes.
209 *
210 * Revision 0.1.0.0 1999/10/11 ivan
211 * Initial version.
212 *
213 */
214
215#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
216
217#include <linux/module.h>
218#include <linux/kernel.h>
219#include <linux/mm.h>
220#include <linux/ioport.h>
221#include <linux/pci.h>
222#include <linux/errno.h>
223#include <linux/string.h>
224#include <linux/init.h>
225#include <linux/delay.h>
226#include <linux/net.h>
227#include <linux/skbuff.h>
228#include <linux/if_arp.h>
229#include <linux/netdevice.h>
230#include <linux/etherdevice.h>
231#include <linux/spinlock.h>
232#include <linux/if.h>
233#include <linux/slab.h>
234#include <net/arp.h>
235
236#include <asm/io.h>
237#include <asm/uaccess.h>
238
239#include "pc300.h"
240
241#define	CPC_LOCK(card,flags)		\
242		do {						\
243		spin_lock_irqsave(&card->card_lock, flags);	\
244		} while (0)
245
246#define CPC_UNLOCK(card,flags)			\
247		do {							\
248		spin_unlock_irqrestore(&card->card_lock, flags);	\
249		} while (0)
250
251#undef	PC300_DEBUG_PCI
252#undef	PC300_DEBUG_INTR
253#undef	PC300_DEBUG_TX
254#undef	PC300_DEBUG_RX
255#undef	PC300_DEBUG_OTHER
256
257static DEFINE_PCI_DEVICE_TABLE(cpc_pci_dev_id) = {
258	/* PC300/RSV or PC300/X21, 2 chan */
259	{0x120e, 0x300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0x300},
260	/* PC300/RSV or PC300/X21, 1 chan */
261	{0x120e, 0x301, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0x301},
262	/* PC300/TE, 2 chan */
263	{0x120e, 0x310, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0x310},
264	/* PC300/TE, 1 chan */
265	{0x120e, 0x311, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0x311},
266	/* PC300/TE-M, 2 chan */
267	{0x120e, 0x320, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0x320},
268	/* PC300/TE-M, 1 chan */
269	{0x120e, 0x321, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0x321},
270	/* End of table */
271	{0,},
272};
273MODULE_DEVICE_TABLE(pci, cpc_pci_dev_id);
274
275#ifndef cpc_min
276#define	cpc_min(a,b)	(((a)<(b))?(a):(b))
277#endif
278#ifndef cpc_max
279#define	cpc_max(a,b)	(((a)>(b))?(a):(b))
280#endif
281
282/* prototypes */
283static void tx_dma_buf_pt_init(pc300_t *, int);
284static void tx_dma_buf_init(pc300_t *, int);
285static void rx_dma_buf_pt_init(pc300_t *, int);
286static void rx_dma_buf_init(pc300_t *, int);
287static void tx_dma_buf_check(pc300_t *, int);
288static void rx_dma_buf_check(pc300_t *, int);
289static irqreturn_t cpc_intr(int, void *);
290static int clock_rate_calc(u32, u32, int *);
291static u32 detect_ram(pc300_t *);
292static void plx_init(pc300_t *);
293static void cpc_trace(struct net_device *, struct sk_buff *, char);
294static int cpc_attach(struct net_device *, unsigned short, unsigned short);
295static int cpc_close(struct net_device *dev);
296
297#ifdef CONFIG_PC300_MLPPP
298void cpc_tty_init(pc300dev_t * dev);
299void cpc_tty_unregister_service(pc300dev_t * pc300dev);
300void cpc_tty_receive(pc300dev_t * pc300dev);
301void cpc_tty_trigger_poll(pc300dev_t * pc300dev);
302#endif
303
304/************************/
305/***   DMA Routines   ***/
306/************************/
307static void tx_dma_buf_pt_init(pc300_t * card, int ch)
308{
309	int i;
310	int ch_factor = ch * N_DMA_TX_BUF;
311	volatile pcsca_bd_t __iomem *ptdescr = (card->hw.rambase
312			               + DMA_TX_BD_BASE + ch_factor * sizeof(pcsca_bd_t));
313
314	for (i = 0; i < N_DMA_TX_BUF; i++, ptdescr++) {
315		cpc_writel(&ptdescr->next, (u32)(DMA_TX_BD_BASE +
316			(ch_factor + ((i + 1) & (N_DMA_TX_BUF - 1))) * sizeof(pcsca_bd_t)));
317		cpc_writel(&ptdescr->ptbuf,
318			   (u32)(DMA_TX_BASE + (ch_factor + i) * BD_DEF_LEN));
319	}
320}
321
322static void tx_dma_buf_init(pc300_t * card, int ch)
323{
324	int i;
325	int ch_factor = ch * N_DMA_TX_BUF;
326	volatile pcsca_bd_t __iomem *ptdescr = (card->hw.rambase
327			       + DMA_TX_BD_BASE + ch_factor * sizeof(pcsca_bd_t));
328
329	for (i = 0; i < N_DMA_TX_BUF; i++, ptdescr++) {
330		memset_io(ptdescr, 0, sizeof(pcsca_bd_t));
331		cpc_writew(&ptdescr->len, 0);
332		cpc_writeb(&ptdescr->status, DST_OSB);
333	}
334	tx_dma_buf_pt_init(card, ch);
335}
336
337static void rx_dma_buf_pt_init(pc300_t * card, int ch)
338{
339	int i;
340	int ch_factor = ch * N_DMA_RX_BUF;
341	volatile pcsca_bd_t __iomem *ptdescr = (card->hw.rambase
342				       + DMA_RX_BD_BASE + ch_factor * sizeof(pcsca_bd_t));
343
344	for (i = 0; i < N_DMA_RX_BUF; i++, ptdescr++) {
345		cpc_writel(&ptdescr->next, (u32)(DMA_RX_BD_BASE +
346			(ch_factor + ((i + 1) & (N_DMA_RX_BUF - 1))) * sizeof(pcsca_bd_t)));
347		cpc_writel(&ptdescr->ptbuf,
348			   (u32)(DMA_RX_BASE + (ch_factor + i) * BD_DEF_LEN));
349	}
350}
351
352static void rx_dma_buf_init(pc300_t * card, int ch)
353{
354	int i;
355	int ch_factor = ch * N_DMA_RX_BUF;
356	volatile pcsca_bd_t __iomem *ptdescr = (card->hw.rambase
357				       + DMA_RX_BD_BASE + ch_factor * sizeof(pcsca_bd_t));
358
359	for (i = 0; i < N_DMA_RX_BUF; i++, ptdescr++) {
360		memset_io(ptdescr, 0, sizeof(pcsca_bd_t));
361		cpc_writew(&ptdescr->len, 0);
362		cpc_writeb(&ptdescr->status, 0);
363	}
364	rx_dma_buf_pt_init(card, ch);
365}
366
367static void tx_dma_buf_check(pc300_t * card, int ch)
368{
369	volatile pcsca_bd_t __iomem *ptdescr;
370	int i;
371	u16 first_bd = card->chan[ch].tx_first_bd;
372	u16 next_bd = card->chan[ch].tx_next_bd;
373
374	printk("#CH%d: f_bd = %d(0x%08zx), n_bd = %d(0x%08zx)\n", ch,
375	       first_bd, TX_BD_ADDR(ch, first_bd),
376	       next_bd, TX_BD_ADDR(ch, next_bd));
377	for (i = first_bd,
378	     ptdescr = (card->hw.rambase + TX_BD_ADDR(ch, first_bd));
379	     i != ((next_bd + 1) & (N_DMA_TX_BUF - 1));
380	     i = (i + 1) & (N_DMA_TX_BUF - 1),
381		 ptdescr = (card->hw.rambase + TX_BD_ADDR(ch, i))) {
382		printk("\n CH%d TX%d: next=0x%x, ptbuf=0x%x, ST=0x%x, len=%d",
383		       ch, i, cpc_readl(&ptdescr->next),
384		       cpc_readl(&ptdescr->ptbuf),
385		       cpc_readb(&ptdescr->status), cpc_readw(&ptdescr->len));
386	}
387	printk("\n");
388}
389
390#ifdef	PC300_DEBUG_OTHER
391/* Show all TX buffer descriptors */
392static void tx1_dma_buf_check(pc300_t * card, int ch)
393{
394	volatile pcsca_bd_t __iomem *ptdescr;
395	int i;
396	u16 first_bd = card->chan[ch].tx_first_bd;
397	u16 next_bd = card->chan[ch].tx_next_bd;
398	u32 scabase = card->hw.scabase;
399
400	printk ("\nnfree_tx_bd = %d\n", card->chan[ch].nfree_tx_bd);
401	printk("#CH%d: f_bd = %d(0x%08x), n_bd = %d(0x%08x)\n", ch,
402	       first_bd, TX_BD_ADDR(ch, first_bd),
403	       next_bd, TX_BD_ADDR(ch, next_bd));
404	printk("TX_CDA=0x%08x, TX_EDA=0x%08x\n",
405	       cpc_readl(scabase + DTX_REG(CDAL, ch)),
406	       cpc_readl(scabase + DTX_REG(EDAL, ch)));
407	for (i = 0; i < N_DMA_TX_BUF; i++) {
408		ptdescr = (card->hw.rambase + TX_BD_ADDR(ch, i));
409		printk("\n CH%d TX%d: next=0x%x, ptbuf=0x%x, ST=0x%x, len=%d",
410		       ch, i, cpc_readl(&ptdescr->next),
411		       cpc_readl(&ptdescr->ptbuf),
412		       cpc_readb(&ptdescr->status), cpc_readw(&ptdescr->len));
413	}
414	printk("\n");
415}
416#endif
417
418static void rx_dma_buf_check(pc300_t * card, int ch)
419{
420	volatile pcsca_bd_t __iomem *ptdescr;
421	int i;
422	u16 first_bd = card->chan[ch].rx_first_bd;
423	u16 last_bd = card->chan[ch].rx_last_bd;
424	int ch_factor;
425
426	ch_factor = ch * N_DMA_RX_BUF;
427	printk("#CH%d: f_bd = %d, l_bd = %d\n", ch, first_bd, last_bd);
428	for (i = 0, ptdescr = (card->hw.rambase +
429					      DMA_RX_BD_BASE + ch_factor * sizeof(pcsca_bd_t));
430	     i < N_DMA_RX_BUF; i++, ptdescr++) {
431		if (cpc_readb(&ptdescr->status) & DST_OSB)
432			printk ("\n CH%d RX%d: next=0x%x, ptbuf=0x%x, ST=0x%x, len=%d",
433				 ch, i, cpc_readl(&ptdescr->next),
434				 cpc_readl(&ptdescr->ptbuf),
435				 cpc_readb(&ptdescr->status),
436				 cpc_readw(&ptdescr->len));
437	}
438	printk("\n");
439}
440
441static int dma_get_rx_frame_size(pc300_t * card, int ch)
442{
443	volatile pcsca_bd_t __iomem *ptdescr;
444	u16 first_bd = card->chan[ch].rx_first_bd;
445	int rcvd = 0;
446	volatile u8 status;
447
448	ptdescr = (card->hw.rambase + RX_BD_ADDR(ch, first_bd));
449	while ((status = cpc_readb(&ptdescr->status)) & DST_OSB) {
450		rcvd += cpc_readw(&ptdescr->len);
451		first_bd = (first_bd + 1) & (N_DMA_RX_BUF - 1);
452		if ((status & DST_EOM) || (first_bd == card->chan[ch].rx_last_bd)) {
453			/* Return the size of a good frame or incomplete bad frame
454			* (dma_buf_read will clean the buffer descriptors in this case). */
455			return rcvd;
456		}
457		ptdescr = (card->hw.rambase + cpc_readl(&ptdescr->next));
458	}
459	return -1;
460}
461
462/*
463 * dma_buf_write: writes a frame to the Tx DMA buffers
464 * NOTE: this function writes one frame at a time.
465 */
466static int dma_buf_write(pc300_t *card, int ch, u8 *ptdata, int len)
467{
468	int i, nchar;
469	volatile pcsca_bd_t __iomem *ptdescr;
470	int tosend = len;
471	u8 nbuf = ((len - 1) / BD_DEF_LEN) + 1;
472
473	if (nbuf >= card->chan[ch].nfree_tx_bd) {
474		return -ENOMEM;
475	}
476
477	for (i = 0; i < nbuf; i++) {
478		ptdescr = (card->hw.rambase +
479					  TX_BD_ADDR(ch, card->chan[ch].tx_next_bd));
480		nchar = cpc_min(BD_DEF_LEN, tosend);
481		if (cpc_readb(&ptdescr->status) & DST_OSB) {
482			memcpy_toio((card->hw.rambase + cpc_readl(&ptdescr->ptbuf)),
483				    &ptdata[len - tosend], nchar);
484			cpc_writew(&ptdescr->len, nchar);
485			card->chan[ch].nfree_tx_bd--;
486			if ((i + 1) == nbuf) {
487				/* This must be the last BD to be used */
488				cpc_writeb(&ptdescr->status, DST_EOM);
489			} else {
490				cpc_writeb(&ptdescr->status, 0);
491			}
492		} else {
493			return -ENOMEM;
494		}
495		tosend -= nchar;
496		card->chan[ch].tx_next_bd =
497			(card->chan[ch].tx_next_bd + 1) & (N_DMA_TX_BUF - 1);
498	}
499	/* If it gets to here, it means we have sent the whole frame */
500	return 0;
501}
502
503/*
504 * dma_buf_read: reads a frame from the Rx DMA buffers
505 * NOTE: this function reads one frame at a time.
506 */
507static int dma_buf_read(pc300_t * card, int ch, struct sk_buff *skb)
508{
509	int nchar;
510	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
511	volatile pcsca_bd_t __iomem *ptdescr;
512	int rcvd = 0;
513	volatile u8 status;
514
515	ptdescr = (card->hw.rambase +
516				  RX_BD_ADDR(ch, chan->rx_first_bd));
517	while ((status = cpc_readb(&ptdescr->status)) & DST_OSB) {
518		nchar = cpc_readw(&ptdescr->len);
519		if ((status & (DST_OVR | DST_CRC | DST_RBIT | DST_SHRT | DST_ABT)) ||
520		    (nchar > BD_DEF_LEN)) {
521
522			if (nchar > BD_DEF_LEN)
523				status |= DST_RBIT;
524			rcvd = -status;
525			/* Discard remaining descriptors used by the bad frame */
526			while (chan->rx_first_bd != chan->rx_last_bd) {
527				cpc_writeb(&ptdescr->status, 0);
528				chan->rx_first_bd = (chan->rx_first_bd+1) & (N_DMA_RX_BUF-1);
529				if (status & DST_EOM)
530					break;
531				ptdescr = (card->hw.rambase +
532							  cpc_readl(&ptdescr->next));
533				status = cpc_readb(&ptdescr->status);
534			}
535			break;
536		}
537		if (nchar != 0) {
538			if (skb) {
539				memcpy_fromio(skb_put(skb, nchar),
540				 (card->hw.rambase+cpc_readl(&ptdescr->ptbuf)),nchar);
541			}
542			rcvd += nchar;
543		}
544		cpc_writeb(&ptdescr->status, 0);
545		cpc_writeb(&ptdescr->len, 0);
546		chan->rx_first_bd = (chan->rx_first_bd + 1) & (N_DMA_RX_BUF - 1);
547
548		if (status & DST_EOM)
549			break;
550
551		ptdescr = (card->hw.rambase + cpc_readl(&ptdescr->next));
552	}
553
554	if (rcvd != 0) {
555		/* Update pointer */
556		chan->rx_last_bd = (chan->rx_first_bd - 1) & (N_DMA_RX_BUF - 1);
557		/* Update EDA */
558		cpc_writel(card->hw.scabase + DRX_REG(EDAL, ch),
559			   RX_BD_ADDR(ch, chan->rx_last_bd));
560	}
561	return rcvd;
562}
563
564static void tx_dma_stop(pc300_t * card, int ch)
565{
566	void __iomem *scabase = card->hw.scabase;
567	u8 drr_ena_bit = 1 << (5 + 2 * ch);
568	u8 drr_rst_bit = 1 << (1 + 2 * ch);
569
570	/* Disable DMA */
571	cpc_writeb(scabase + DRR, drr_ena_bit);
572	cpc_writeb(scabase + DRR, drr_rst_bit & ~drr_ena_bit);
573}
574
575static void rx_dma_stop(pc300_t * card, int ch)
576{
577	void __iomem *scabase = card->hw.scabase;
578	u8 drr_ena_bit = 1 << (4 + 2 * ch);
579	u8 drr_rst_bit = 1 << (2 * ch);
580
581	/* Disable DMA */
582	cpc_writeb(scabase + DRR, drr_ena_bit);
583	cpc_writeb(scabase + DRR, drr_rst_bit & ~drr_ena_bit);
584}
585
586static void rx_dma_start(pc300_t * card, int ch)
587{
588	void __iomem *scabase = card->hw.scabase;
589	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
590
591	/* Start DMA */
592	cpc_writel(scabase + DRX_REG(CDAL, ch),
593		   RX_BD_ADDR(ch, chan->rx_first_bd));
594	if (cpc_readl(scabase + DRX_REG(CDAL,ch)) !=
595				  RX_BD_ADDR(ch, chan->rx_first_bd)) {
596		cpc_writel(scabase + DRX_REG(CDAL, ch),
597				   RX_BD_ADDR(ch, chan->rx_first_bd));
598	}
599	cpc_writel(scabase + DRX_REG(EDAL, ch),
600		   RX_BD_ADDR(ch, chan->rx_last_bd));
601	cpc_writew(scabase + DRX_REG(BFLL, ch), BD_DEF_LEN);
602	cpc_writeb(scabase + DSR_RX(ch), DSR_DE);
603	if (!(cpc_readb(scabase + DSR_RX(ch)) & DSR_DE)) {
604	cpc_writeb(scabase + DSR_RX(ch), DSR_DE);
605	}
606}
607
608/*************************/
609/***   FALC Routines   ***/
610/*************************/
611static void falc_issue_cmd(pc300_t *card, int ch, u8 cmd)
612{
613	void __iomem *falcbase = card->hw.falcbase;
614	unsigned long i = 0;
615
616	while (cpc_readb(falcbase + F_REG(SIS, ch)) & SIS_CEC) {
617		if (i++ >= PC300_FALC_MAXLOOP) {
618			printk("%s: FALC command locked(cmd=0x%x).\n",
619			       card->chan[ch].d.name, cmd);
620			break;
621		}
622	}
623	cpc_writeb(falcbase + F_REG(CMDR, ch), cmd);
624}
625
626static void falc_intr_enable(pc300_t * card, int ch)
627{
628	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
629	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
630	falc_t *pfalc = (falc_t *) & chan->falc;
631	void __iomem *falcbase = card->hw.falcbase;
632
633	/* Interrupt pins are open-drain */
634	cpc_writeb(falcbase + F_REG(IPC, ch),
635		   cpc_readb(falcbase + F_REG(IPC, ch)) & ~IPC_IC0);
636	/* Conters updated each second */
637	cpc_writeb(falcbase + F_REG(FMR1, ch),
638		   cpc_readb(falcbase + F_REG(FMR1, ch)) | FMR1_ECM);
639	/* Enable SEC and ES interrupts  */
640	cpc_writeb(falcbase + F_REG(IMR3, ch),
641		   cpc_readb(falcbase + F_REG(IMR3, ch)) & ~(IMR3_SEC | IMR3_ES));
642	if (conf->fr_mode == PC300_FR_UNFRAMED) {
643		cpc_writeb(falcbase + F_REG(IMR4, ch),
644			   cpc_readb(falcbase + F_REG(IMR4, ch)) & ~(IMR4_LOS));
645	} else {
646		cpc_writeb(falcbase + F_REG(IMR4, ch),
647			   cpc_readb(falcbase + F_REG(IMR4, ch)) &
648			   ~(IMR4_LFA | IMR4_AIS | IMR4_LOS | IMR4_SLIP));
649	}
650	if (conf->media == IF_IFACE_T1) {
651		cpc_writeb(falcbase + F_REG(IMR3, ch),
652			   cpc_readb(falcbase + F_REG(IMR3, ch)) & ~IMR3_LLBSC);
653	} else {
654		cpc_writeb(falcbase + F_REG(IPC, ch),
655			   cpc_readb(falcbase + F_REG(IPC, ch)) | IPC_SCI);
656		if (conf->fr_mode == PC300_FR_UNFRAMED) {
657			cpc_writeb(falcbase + F_REG(IMR2, ch),
658				   cpc_readb(falcbase + F_REG(IMR2, ch)) & ~(IMR2_LOS));
659		} else {
660			cpc_writeb(falcbase + F_REG(IMR2, ch),
661				   cpc_readb(falcbase + F_REG(IMR2, ch)) &
662				   ~(IMR2_FAR | IMR2_LFA | IMR2_AIS | IMR2_LOS));
663			if (pfalc->multiframe_mode) {
664				cpc_writeb(falcbase + F_REG(IMR2, ch),
665					   cpc_readb(falcbase + F_REG(IMR2, ch)) &
666					   ~(IMR2_T400MS | IMR2_MFAR));
667			} else {
668				cpc_writeb(falcbase + F_REG(IMR2, ch),
669					   cpc_readb(falcbase + F_REG(IMR2, ch)) |
670					   IMR2_T400MS | IMR2_MFAR);
671			}
672		}
673	}
674}
675
676static void falc_open_timeslot(pc300_t * card, int ch, int timeslot)
677{
678	void __iomem *falcbase = card->hw.falcbase;
679	u8 tshf = card->chan[ch].falc.offset;
680
681	cpc_writeb(falcbase + F_REG((ICB1 + (timeslot - tshf) / 8), ch),
682		   cpc_readb(falcbase + F_REG((ICB1 + (timeslot - tshf) / 8), ch)) &
683		   	~(0x80 >> ((timeslot - tshf) & 0x07)));
684	cpc_writeb(falcbase + F_REG((TTR1 + timeslot / 8), ch),
685		   cpc_readb(falcbase + F_REG((TTR1 + timeslot / 8), ch)) |
686   			(0x80 >> (timeslot & 0x07)));
687	cpc_writeb(falcbase + F_REG((RTR1 + timeslot / 8), ch),
688		   cpc_readb(falcbase + F_REG((RTR1 + timeslot / 8), ch)) |
689			(0x80 >> (timeslot & 0x07)));
690}
691
692static void falc_close_timeslot(pc300_t * card, int ch, int timeslot)
693{
694	void __iomem *falcbase = card->hw.falcbase;
695	u8 tshf = card->chan[ch].falc.offset;
696
697	cpc_writeb(falcbase + F_REG((ICB1 + (timeslot - tshf) / 8), ch),
698		   cpc_readb(falcbase + F_REG((ICB1 + (timeslot - tshf) / 8), ch)) |
699		   (0x80 >> ((timeslot - tshf) & 0x07)));
700	cpc_writeb(falcbase + F_REG((TTR1 + timeslot / 8), ch),
701		   cpc_readb(falcbase + F_REG((TTR1 + timeslot / 8), ch)) &
702		   ~(0x80 >> (timeslot & 0x07)));
703	cpc_writeb(falcbase + F_REG((RTR1 + timeslot / 8), ch),
704		   cpc_readb(falcbase + F_REG((RTR1 + timeslot / 8), ch)) &
705		   ~(0x80 >> (timeslot & 0x07)));
706}
707
708static void falc_close_all_timeslots(pc300_t * card, int ch)
709{
710	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
711	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
712	void __iomem *falcbase = card->hw.falcbase;
713
714	cpc_writeb(falcbase + F_REG(ICB1, ch), 0xff);
715	cpc_writeb(falcbase + F_REG(TTR1, ch), 0);
716	cpc_writeb(falcbase + F_REG(RTR1, ch), 0);
717	cpc_writeb(falcbase + F_REG(ICB2, ch), 0xff);
718	cpc_writeb(falcbase + F_REG(TTR2, ch), 0);
719	cpc_writeb(falcbase + F_REG(RTR2, ch), 0);
720	cpc_writeb(falcbase + F_REG(ICB3, ch), 0xff);
721	cpc_writeb(falcbase + F_REG(TTR3, ch), 0);
722	cpc_writeb(falcbase + F_REG(RTR3, ch), 0);
723	if (conf->media == IF_IFACE_E1) {
724		cpc_writeb(falcbase + F_REG(ICB4, ch), 0xff);
725		cpc_writeb(falcbase + F_REG(TTR4, ch), 0);
726		cpc_writeb(falcbase + F_REG(RTR4, ch), 0);
727	}
728}
729
730static void falc_open_all_timeslots(pc300_t * card, int ch)
731{
732	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
733	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
734	void __iomem *falcbase = card->hw.falcbase;
735
736	cpc_writeb(falcbase + F_REG(ICB1, ch), 0);
737	if (conf->fr_mode == PC300_FR_UNFRAMED) {
738		cpc_writeb(falcbase + F_REG(TTR1, ch), 0xff);
739		cpc_writeb(falcbase + F_REG(RTR1, ch), 0xff);
740	} else {
741		/* Timeslot 0 is never enabled */
742		cpc_writeb(falcbase + F_REG(TTR1, ch), 0x7f);
743		cpc_writeb(falcbase + F_REG(RTR1, ch), 0x7f);
744	}
745	cpc_writeb(falcbase + F_REG(ICB2, ch), 0);
746	cpc_writeb(falcbase + F_REG(TTR2, ch), 0xff);
747	cpc_writeb(falcbase + F_REG(RTR2, ch), 0xff);
748	cpc_writeb(falcbase + F_REG(ICB3, ch), 0);
749	cpc_writeb(falcbase + F_REG(TTR3, ch), 0xff);
750	cpc_writeb(falcbase + F_REG(RTR3, ch), 0xff);
751	if (conf->media == IF_IFACE_E1) {
752		cpc_writeb(falcbase + F_REG(ICB4, ch), 0);
753		cpc_writeb(falcbase + F_REG(TTR4, ch), 0xff);
754		cpc_writeb(falcbase + F_REG(RTR4, ch), 0xff);
755	} else {
756		cpc_writeb(falcbase + F_REG(ICB4, ch), 0xff);
757		cpc_writeb(falcbase + F_REG(TTR4, ch), 0x80);
758		cpc_writeb(falcbase + F_REG(RTR4, ch), 0x80);
759	}
760}
761
762static void falc_init_timeslot(pc300_t * card, int ch)
763{
764	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
765	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
766	falc_t *pfalc = (falc_t *) & chan->falc;
767	int tslot;
768
769	for (tslot = 0; tslot < pfalc->num_channels; tslot++) {
770		if (conf->tslot_bitmap & (1 << tslot)) {
771			// Channel enabled
772			falc_open_timeslot(card, ch, tslot + 1);
773		} else {
774			// Channel disabled
775			falc_close_timeslot(card, ch, tslot + 1);
776		}
777	}
778}
779
780static void falc_enable_comm(pc300_t * card, int ch)
781{
782	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
783	falc_t *pfalc = (falc_t *) & chan->falc;
784
785	if (pfalc->full_bandwidth) {
786		falc_open_all_timeslots(card, ch);
787	} else {
788		falc_init_timeslot(card, ch);
789	}
790	// CTS/DCD ON
791	cpc_writeb(card->hw.falcbase + card->hw.cpld_reg1,
792		   cpc_readb(card->hw.falcbase + card->hw.cpld_reg1) &
793		   ~((CPLD_REG1_FALC_DCD | CPLD_REG1_FALC_CTS) << (2 * ch)));
794}
795
796static void falc_disable_comm(pc300_t * card, int ch)
797{
798	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
799	falc_t *pfalc = (falc_t *) & chan->falc;
800
801	if (pfalc->loop_active != 2) {
802		falc_close_all_timeslots(card, ch);
803	}
804	// CTS/DCD OFF
805	cpc_writeb(card->hw.falcbase + card->hw.cpld_reg1,
806		   cpc_readb(card->hw.falcbase + card->hw.cpld_reg1) |
807		   ((CPLD_REG1_FALC_DCD | CPLD_REG1_FALC_CTS) << (2 * ch)));
808}
809
810static void falc_init_t1(pc300_t * card, int ch)
811{
812	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
813	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
814	falc_t *pfalc = (falc_t *) & chan->falc;
815	void __iomem *falcbase = card->hw.falcbase;
816	u8 dja = (ch ? (LIM2_DJA2 | LIM2_DJA1) : 0);
817
818	/* Switch to T1 mode (PCM 24) */
819	cpc_writeb(falcbase + F_REG(FMR1, ch), FMR1_PMOD);
820
821	/* Wait 20 us for setup */
822	udelay(20);
823
824	/* Transmit Buffer Size (1 frame) */
825	cpc_writeb(falcbase + F_REG(SIC1, ch), SIC1_XBS0);
826
827	/* Clock mode */
828	if (conf->phys_settings.clock_type == CLOCK_INT) { /* Master mode */
829		cpc_writeb(falcbase + F_REG(LIM0, ch),
830			   cpc_readb(falcbase + F_REG(LIM0, ch)) | LIM0_MAS);
831	} else { /* Slave mode */
832		cpc_writeb(falcbase + F_REG(LIM0, ch),
833			   cpc_readb(falcbase + F_REG(LIM0, ch)) & ~LIM0_MAS);
834		cpc_writeb(falcbase + F_REG(LOOP, ch),
835			   cpc_readb(falcbase + F_REG(LOOP, ch)) & ~LOOP_RTM);
836	}
837
838	cpc_writeb(falcbase + F_REG(IPC, ch), IPC_SCI);
839	cpc_writeb(falcbase + F_REG(FMR0, ch),
840		   cpc_readb(falcbase + F_REG(FMR0, ch)) &
841		   ~(FMR0_XC0 | FMR0_XC1 | FMR0_RC0 | FMR0_RC1));
842
843	switch (conf->lcode) {
844		case PC300_LC_AMI:
845			cpc_writeb(falcbase + F_REG(FMR0, ch),
846				   cpc_readb(falcbase + F_REG(FMR0, ch)) |
847				   FMR0_XC1 | FMR0_RC1);
848			/* Clear Channel register to ON for all channels */
849			cpc_writeb(falcbase + F_REG(CCB1, ch), 0xff);
850			cpc_writeb(falcbase + F_REG(CCB2, ch), 0xff);
851			cpc_writeb(falcbase + F_REG(CCB3, ch), 0xff);
852			break;
853
854		case PC300_LC_B8ZS:
855			cpc_writeb(falcbase + F_REG(FMR0, ch),
856				   cpc_readb(falcbase + F_REG(FMR0, ch)) |
857				   FMR0_XC0 | FMR0_XC1 | FMR0_RC0 | FMR0_RC1);
858			break;
859
860		case PC300_LC_NRZ:
861			cpc_writeb(falcbase + F_REG(FMR0, ch),
862				   cpc_readb(falcbase + F_REG(FMR0, ch)) | 0x00);
863			break;
864	}
865
866	cpc_writeb(falcbase + F_REG(LIM0, ch),
867		   cpc_readb(falcbase + F_REG(LIM0, ch)) | LIM0_ELOS);
868	cpc_writeb(falcbase + F_REG(LIM0, ch),
869		   cpc_readb(falcbase + F_REG(LIM0, ch)) & ~(LIM0_SCL1 | LIM0_SCL0));
870	/* Set interface mode to 2 MBPS */
871	cpc_writeb(falcbase + F_REG(FMR1, ch),
872		   cpc_readb(falcbase + F_REG(FMR1, ch)) | FMR1_IMOD);
873
874	switch (conf->fr_mode) {
875		case PC300_FR_ESF:
876			pfalc->multiframe_mode = 0;
877			cpc_writeb(falcbase + F_REG(FMR4, ch),
878				   cpc_readb(falcbase + F_REG(FMR4, ch)) | FMR4_FM1);
879			cpc_writeb(falcbase + F_REG(FMR1, ch),
880				   cpc_readb(falcbase + F_REG(FMR1, ch)) |
881				   FMR1_CRC | FMR1_EDL);
882			cpc_writeb(falcbase + F_REG(XDL1, ch), 0);
883			cpc_writeb(falcbase + F_REG(XDL2, ch), 0);
884			cpc_writeb(falcbase + F_REG(XDL3, ch), 0);
885			cpc_writeb(falcbase + F_REG(FMR0, ch),
886				   cpc_readb(falcbase + F_REG(FMR0, ch)) & ~FMR0_SRAF);
887			cpc_writeb(falcbase + F_REG(FMR2, ch),
888				   cpc_readb(falcbase + F_REG(FMR2,ch)) | FMR2_MCSP | FMR2_SSP);
889			break;
890
891		case PC300_FR_D4:
892			pfalc->multiframe_mode = 1;
893			cpc_writeb(falcbase + F_REG(FMR4, ch),
894				   cpc_readb(falcbase + F_REG(FMR4, ch)) &
895				   ~(FMR4_FM1 | FMR4_FM0));
896			cpc_writeb(falcbase + F_REG(FMR0, ch),
897				   cpc_readb(falcbase + F_REG(FMR0, ch)) | FMR0_SRAF);
898			cpc_writeb(falcbase + F_REG(FMR2, ch),
899				   cpc_readb(falcbase + F_REG(FMR2, ch)) & ~FMR2_SSP);
900			break;
901	}
902
903	/* Enable Automatic Resynchronization */
904	cpc_writeb(falcbase + F_REG(FMR4, ch),
905		   cpc_readb(falcbase + F_REG(FMR4, ch)) | FMR4_AUTO);
906
907	/* Transmit Automatic Remote Alarm */
908	cpc_writeb(falcbase + F_REG(FMR2, ch),
909		   cpc_readb(falcbase + F_REG(FMR2, ch)) | FMR2_AXRA);
910
911	/* Channel translation mode 1 : one to one */
912	cpc_writeb(falcbase + F_REG(FMR1, ch),
913		   cpc_readb(falcbase + F_REG(FMR1, ch)) | FMR1_CTM);
914
915	/* No signaling */
916	cpc_writeb(falcbase + F_REG(FMR1, ch),
917		   cpc_readb(falcbase + F_REG(FMR1, ch)) & ~FMR1_SIGM);
918	cpc_writeb(falcbase + F_REG(FMR5, ch),
919		   cpc_readb(falcbase + F_REG(FMR5, ch)) &
920		   ~(FMR5_EIBR | FMR5_SRS));
921	cpc_writeb(falcbase + F_REG(CCR1, ch), 0);
922
923	cpc_writeb(falcbase + F_REG(LIM1, ch),
924		   cpc_readb(falcbase + F_REG(LIM1, ch)) | LIM1_RIL0 | LIM1_RIL1);
925
926	switch (conf->lbo) {
927			/* Provides proper Line Build Out */
928		case PC300_LBO_0_DB:
929			cpc_writeb(falcbase + F_REG(LIM2, ch), (LIM2_LOS1 | dja));
930			cpc_writeb(falcbase + F_REG(XPM0, ch), 0x5a);
931			cpc_writeb(falcbase + F_REG(XPM1, ch), 0x8f);
932			cpc_writeb(falcbase + F_REG(XPM2, ch), 0x20);
933			break;
934		case PC300_LBO_7_5_DB:
935			cpc_writeb(falcbase + F_REG(LIM2, ch), (0x40 | LIM2_LOS1 | dja));
936			cpc_writeb(falcbase + F_REG(XPM0, ch), 0x11);
937			cpc_writeb(falcbase + F_REG(XPM1, ch), 0x02);
938			cpc_writeb(falcbase + F_REG(XPM2, ch), 0x20);
939			break;
940		case PC300_LBO_15_DB:
941			cpc_writeb(falcbase + F_REG(LIM2, ch), (0x80 | LIM2_LOS1 | dja));
942			cpc_writeb(falcbase + F_REG(XPM0, ch), 0x8e);
943			cpc_writeb(falcbase + F_REG(XPM1, ch), 0x01);
944			cpc_writeb(falcbase + F_REG(XPM2, ch), 0x20);
945			break;
946		case PC300_LBO_22_5_DB:
947			cpc_writeb(falcbase + F_REG(LIM2, ch), (0xc0 | LIM2_LOS1 | dja));
948			cpc_writeb(falcbase + F_REG(XPM0, ch), 0x09);
949			cpc_writeb(falcbase + F_REG(XPM1, ch), 0x01);
950			cpc_writeb(falcbase + F_REG(XPM2, ch), 0x20);
951			break;
952	}
953
954	/* Transmit Clock-Slot Offset */
955	cpc_writeb(falcbase + F_REG(XC0, ch),
956		   cpc_readb(falcbase + F_REG(XC0, ch)) | 0x01);
957	/* Transmit Time-slot Offset */
958	cpc_writeb(falcbase + F_REG(XC1, ch), 0x3e);
959	/* Receive  Clock-Slot offset */
960	cpc_writeb(falcbase + F_REG(RC0, ch), 0x05);
961	/* Receive  Time-slot offset */
962	cpc_writeb(falcbase + F_REG(RC1, ch), 0x00);
963
964	/* LOS Detection after 176 consecutive 0s */
965	cpc_writeb(falcbase + F_REG(PCDR, ch), 0x0a);
966	/* LOS Recovery after 22 ones in the time window of PCD */
967	cpc_writeb(falcbase + F_REG(PCRR, ch), 0x15);
968
969	cpc_writeb(falcbase + F_REG(IDLE, ch), 0x7f);
970
971	if (conf->fr_mode == PC300_FR_ESF_JAPAN) {
972		cpc_writeb(falcbase + F_REG(RC1, ch),
973			   cpc_readb(falcbase + F_REG(RC1, ch)) | 0x80);
974	}
975
976	falc_close_all_timeslots(card, ch);
977}
978
979static void falc_init_e1(pc300_t * card, int ch)
980{
981	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
982	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
983	falc_t *pfalc = (falc_t *) & chan->falc;
984	void __iomem *falcbase = card->hw.falcbase;
985	u8 dja = (ch ? (LIM2_DJA2 | LIM2_DJA1) : 0);
986
987	/* Switch to E1 mode (PCM 30) */
988	cpc_writeb(falcbase + F_REG(FMR1, ch),
989		   cpc_readb(falcbase + F_REG(FMR1, ch)) & ~FMR1_PMOD);
990
991	/* Clock mode */
992	if (conf->phys_settings.clock_type == CLOCK_INT) { /* Master mode */
993		cpc_writeb(falcbase + F_REG(LIM0, ch),
994			   cpc_readb(falcbase + F_REG(LIM0, ch)) | LIM0_MAS);
995	} else { /* Slave mode */
996		cpc_writeb(falcbase + F_REG(LIM0, ch),
997			   cpc_readb(falcbase + F_REG(LIM0, ch)) & ~LIM0_MAS);
998	}
999	cpc_writeb(falcbase + F_REG(LOOP, ch),
1000		   cpc_readb(falcbase + F_REG(LOOP, ch)) & ~LOOP_SFM);
1001
1002	cpc_writeb(falcbase + F_REG(IPC, ch), IPC_SCI);
1003	cpc_writeb(falcbase + F_REG(FMR0, ch),
1004		   cpc_readb(falcbase + F_REG(FMR0, ch)) &
1005		   ~(FMR0_XC0 | FMR0_XC1 | FMR0_RC0 | FMR0_RC1));
1006
1007	switch (conf->lcode) {
1008		case PC300_LC_AMI:
1009			cpc_writeb(falcbase + F_REG(FMR0, ch),
1010				   cpc_readb(falcbase + F_REG(FMR0, ch)) |
1011				   FMR0_XC1 | FMR0_RC1);
1012			break;
1013
1014		case PC300_LC_HDB3:
1015			cpc_writeb(falcbase + F_REG(FMR0, ch),
1016				   cpc_readb(falcbase + F_REG(FMR0, ch)) |
1017				   FMR0_XC0 | FMR0_XC1 | FMR0_RC0 | FMR0_RC1);
1018			break;
1019
1020		case PC300_LC_NRZ:
1021			break;
1022	}
1023
1024	cpc_writeb(falcbase + F_REG(LIM0, ch),
1025		   cpc_readb(falcbase + F_REG(LIM0, ch)) & ~(LIM0_SCL1 | LIM0_SCL0));
1026	/* Set interface mode to 2 MBPS */
1027	cpc_writeb(falcbase + F_REG(FMR1, ch),
1028		   cpc_readb(falcbase + F_REG(FMR1, ch)) | FMR1_IMOD);
1029
1030	cpc_writeb(falcbase + F_REG(XPM0, ch), 0x18);
1031	cpc_writeb(falcbase + F_REG(XPM1, ch), 0x03);
1032	cpc_writeb(falcbase + F_REG(XPM2, ch), 0x00);
1033
1034	switch (conf->fr_mode) {
1035		case PC300_FR_MF_CRC4:
1036			pfalc->multiframe_mode = 1;
1037			cpc_writeb(falcbase + F_REG(FMR1, ch),
1038				   cpc_readb(falcbase + F_REG(FMR1, ch)) | FMR1_XFS);
1039			cpc_writeb(falcbase + F_REG(FMR2, ch),
1040				   cpc_readb(falcbase + F_REG(FMR2, ch)) | FMR2_RFS1);
1041			cpc_writeb(falcbase + F_REG(FMR2, ch),
1042				   cpc_readb(falcbase + F_REG(FMR2, ch)) & ~FMR2_RFS0);
1043			cpc_writeb(falcbase + F_REG(FMR3, ch),
1044				   cpc_readb(falcbase + F_REG(FMR3, ch)) & ~FMR3_EXTIW);
1045
1046			/* MultiFrame Resynchronization */
1047			cpc_writeb(falcbase + F_REG(FMR1, ch),
1048				   cpc_readb(falcbase + F_REG(FMR1, ch)) | FMR1_MFCS);
1049
1050			/* Automatic Loss of Multiframe > 914 CRC errors */
1051			cpc_writeb(falcbase + F_REG(FMR2, ch),
1052				   cpc_readb(falcbase + F_REG(FMR2, ch)) | FMR2_ALMF);
1053
1054			/* S1 and SI1/SI2 spare Bits set to 1 */
1055			cpc_writeb(falcbase + F_REG(XSP, ch),
1056				   cpc_readb(falcbase + F_REG(XSP, ch)) & ~XSP_AXS);
1057			cpc_writeb(falcbase + F_REG(XSP, ch),
1058				   cpc_readb(falcbase + F_REG(XSP, ch)) | XSP_EBP);
1059			cpc_writeb(falcbase + F_REG(XSP, ch),
1060				   cpc_readb(falcbase + F_REG(XSP, ch)) | XSP_XS13 | XSP_XS15);
1061
1062			/* Automatic Force Resynchronization */
1063			cpc_writeb(falcbase + F_REG(FMR1, ch),
1064				   cpc_readb(falcbase + F_REG(FMR1, ch)) | FMR1_AFR);
1065
1066			/* Transmit Automatic Remote Alarm */
1067			cpc_writeb(falcbase + F_REG(FMR2, ch),
1068				   cpc_readb(falcbase + F_REG(FMR2, ch)) | FMR2_AXRA);
1069
1070			/* Transmit Spare Bits for National Use (Y, Sn, Sa) */
1071			cpc_writeb(falcbase + F_REG(XSW, ch),
1072				   cpc_readb(falcbase + F_REG(XSW, ch)) |
1073				   XSW_XY0 | XSW_XY1 | XSW_XY2 | XSW_XY3 | XSW_XY4);
1074			break;
1075
1076		case PC300_FR_MF_NON_CRC4:
1077		case PC300_FR_D4:
1078			pfalc->multiframe_mode = 0;
1079			cpc_writeb(falcbase + F_REG(FMR1, ch),
1080				   cpc_readb(falcbase + F_REG(FMR1, ch)) & ~FMR1_XFS);
1081			cpc_writeb(falcbase + F_REG(FMR2, ch),
1082				   cpc_readb(falcbase + F_REG(FMR2, ch)) &
1083				   ~(FMR2_RFS1 | FMR2_RFS0));
1084			cpc_writeb(falcbase + F_REG(XSW, ch),
1085				   cpc_readb(falcbase + F_REG(XSW, ch)) | XSW_XSIS);
1086			cpc_writeb(falcbase + F_REG(XSP, ch),
1087				   cpc_readb(falcbase + F_REG(XSP, ch)) | XSP_XSIF);
1088
1089			/* Automatic Force Resynchronization */
1090			cpc_writeb(falcbase + F_REG(FMR1, ch),
1091				   cpc_readb(falcbase + F_REG(FMR1, ch)) | FMR1_AFR);
1092
1093			/* Transmit Automatic Remote Alarm */
1094			cpc_writeb(falcbase + F_REG(FMR2, ch),
1095				   cpc_readb(falcbase + F_REG(FMR2, ch)) | FMR2_AXRA);
1096
1097			/* Transmit Spare Bits for National Use (Y, Sn, Sa) */
1098			cpc_writeb(falcbase + F_REG(XSW, ch),
1099				   cpc_readb(falcbase + F_REG(XSW, ch)) |
1100				   XSW_XY0 | XSW_XY1 | XSW_XY2 | XSW_XY3 | XSW_XY4);
1101			break;
1102
1103		case PC300_FR_UNFRAMED:
1104			pfalc->multiframe_mode = 0;
1105			cpc_writeb(falcbase + F_REG(FMR1, ch),
1106				   cpc_readb(falcbase + F_REG(FMR1, ch)) & ~FMR1_XFS);
1107			cpc_writeb(falcbase + F_REG(FMR2, ch),
1108				   cpc_readb(falcbase + F_REG(FMR2, ch)) &
1109				   ~(FMR2_RFS1 | FMR2_RFS0));
1110			cpc_writeb(falcbase + F_REG(XSP, ch),
1111				   cpc_readb(falcbase + F_REG(XSP, ch)) | XSP_TT0);
1112			cpc_writeb(falcbase + F_REG(XSW, ch),
1113				   cpc_readb(falcbase + F_REG(XSW, ch)) &
1114				   ~(XSW_XTM|XSW_XY0|XSW_XY1|XSW_XY2|XSW_XY3|XSW_XY4));
1115			cpc_writeb(falcbase + F_REG(TSWM, ch), 0xff);
1116			cpc_writeb(falcbase + F_REG(FMR2, ch),
1117				   cpc_readb(falcbase + F_REG(FMR2, ch)) |
1118				   (FMR2_RTM | FMR2_DAIS));
1119			cpc_writeb(falcbase + F_REG(FMR2, ch),
1120				   cpc_readb(falcbase + F_REG(FMR2, ch)) & ~FMR2_AXRA);
1121			cpc_writeb(falcbase + F_REG(FMR1, ch),
1122				   cpc_readb(falcbase + F_REG(FMR1, ch)) & ~FMR1_AFR);
1123			pfalc->sync = 1;
1124			cpc_writeb(falcbase + card->hw.cpld_reg2,
1125				   cpc_readb(falcbase + card->hw.cpld_reg2) |
1126				   (CPLD_REG2_FALC_LED2 << (2 * ch)));
1127			break;
1128	}
1129
1130	/* No signaling */
1131	cpc_writeb(falcbase + F_REG(XSP, ch),
1132		   cpc_readb(falcbase + F_REG(XSP, ch)) & ~XSP_CASEN);
1133	cpc_writeb(falcbase + F_REG(CCR1, ch), 0);
1134
1135	cpc_writeb(falcbase + F_REG(LIM1, ch),
1136		   cpc_readb(falcbase + F_REG(LIM1, ch)) | LIM1_RIL0 | LIM1_RIL1);
1137	cpc_writeb(falcbase + F_REG(LIM2, ch), (LIM2_LOS1 | dja));
1138
1139	/* Transmit Clock-Slot Offset */
1140	cpc_writeb(falcbase + F_REG(XC0, ch),
1141		   cpc_readb(falcbase + F_REG(XC0, ch)) | 0x01);
1142	/* Transmit Time-slot Offset */
1143	cpc_writeb(falcbase + F_REG(XC1, ch), 0x3e);
1144	/* Receive  Clock-Slot offset */
1145	cpc_writeb(falcbase + F_REG(RC0, ch), 0x05);
1146	/* Receive  Time-slot offset */
1147	cpc_writeb(falcbase + F_REG(RC1, ch), 0x00);
1148
1149	/* LOS Detection after 176 consecutive 0s */
1150	cpc_writeb(falcbase + F_REG(PCDR, ch), 0x0a);
1151	/* LOS Recovery after 22 ones in the time window of PCD */
1152	cpc_writeb(falcbase + F_REG(PCRR, ch), 0x15);
1153
1154	cpc_writeb(falcbase + F_REG(IDLE, ch), 0x7f);
1155
1156	falc_close_all_timeslots(card, ch);
1157}
1158
1159static void falc_init_hdlc(pc300_t * card, int ch)
1160{
1161	void __iomem *falcbase = card->hw.falcbase;
1162	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1163	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1164
1165	/* Enable transparent data transfer */
1166	if (conf->fr_mode == PC300_FR_UNFRAMED) {
1167		cpc_writeb(falcbase + F_REG(MODE, ch), 0);
1168	} else {
1169		cpc_writeb(falcbase + F_REG(MODE, ch),
1170			   cpc_readb(falcbase + F_REG(MODE, ch)) |
1171			   (MODE_HRAC | MODE_MDS2));
1172		cpc_writeb(falcbase + F_REG(RAH2, ch), 0xff);
1173		cpc_writeb(falcbase + F_REG(RAH1, ch), 0xff);
1174		cpc_writeb(falcbase + F_REG(RAL2, ch), 0xff);
1175		cpc_writeb(falcbase + F_REG(RAL1, ch), 0xff);
1176	}
1177
1178	/* Tx/Rx reset  */
1179	falc_issue_cmd(card, ch, CMDR_RRES | CMDR_XRES | CMDR_SRES);
1180
1181	/* Enable interrupt sources */
1182	falc_intr_enable(card, ch);
1183}
1184
1185static void te_config(pc300_t * card, int ch)
1186{
1187	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1188	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1189	falc_t *pfalc = (falc_t *) & chan->falc;
1190	void __iomem *falcbase = card->hw.falcbase;
1191	u8 dummy;
1192	unsigned long flags;
1193
1194	memset(pfalc, 0, sizeof(falc_t));
1195	switch (conf->media) {
1196		case IF_IFACE_T1:
1197			pfalc->num_channels = NUM_OF_T1_CHANNELS;
1198			pfalc->offset = 1;
1199			break;
1200		case IF_IFACE_E1:
1201			pfalc->num_channels = NUM_OF_E1_CHANNELS;
1202			pfalc->offset = 0;
1203			break;
1204	}
1205	if (conf->tslot_bitmap == 0xffffffffUL)
1206		pfalc->full_bandwidth = 1;
1207	else
1208		pfalc->full_bandwidth = 0;
1209
1210	CPC_LOCK(card, flags);
1211	/* Reset the FALC chip */
1212	cpc_writeb(card->hw.falcbase + card->hw.cpld_reg1,
1213		   cpc_readb(card->hw.falcbase + card->hw.cpld_reg1) |
1214		   (CPLD_REG1_FALC_RESET << (2 * ch)));
1215	udelay(10000);
1216	cpc_writeb(card->hw.falcbase + card->hw.cpld_reg1,
1217		   cpc_readb(card->hw.falcbase + card->hw.cpld_reg1) &
1218		   ~(CPLD_REG1_FALC_RESET << (2 * ch)));
1219
1220	if (conf->media == IF_IFACE_T1) {
1221		falc_init_t1(card, ch);
1222	} else {
1223		falc_init_e1(card, ch);
1224	}
1225	falc_init_hdlc(card, ch);
1226	if (conf->rx_sens == PC300_RX_SENS_SH) {
1227		cpc_writeb(falcbase + F_REG(LIM0, ch),
1228			   cpc_readb(falcbase + F_REG(LIM0, ch)) & ~LIM0_EQON);
1229	} else {
1230		cpc_writeb(falcbase + F_REG(LIM0, ch),
1231			   cpc_readb(falcbase + F_REG(LIM0, ch)) | LIM0_EQON);
1232	}
1233	cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,
1234		   cpc_readb(card->hw.falcbase + card->hw.cpld_reg2) |
1235		   ((CPLD_REG2_FALC_TX_CLK | CPLD_REG2_FALC_RX_CLK) << (2 * ch)));
1236
1237	/* Clear all interrupt registers */
1238	dummy = cpc_readb(falcbase + F_REG(FISR0, ch)) +
1239		cpc_readb(falcbase + F_REG(FISR1, ch)) +
1240		cpc_readb(falcbase + F_REG(FISR2, ch)) +
1241		cpc_readb(falcbase + F_REG(FISR3, ch));
1242	CPC_UNLOCK(card, flags);
1243}
1244
1245static void falc_check_status(pc300_t * card, int ch, unsigned char frs0)
1246{
1247	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1248	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1249	falc_t *pfalc = (falc_t *) & chan->falc;
1250	void __iomem *falcbase = card->hw.falcbase;
1251
1252	/* Verify LOS */
1253	if (frs0 & FRS0_LOS) {
1254		if (!pfalc->red_alarm) {
1255			pfalc->red_alarm = 1;
1256			pfalc->los++;
1257			if (!pfalc->blue_alarm) {
1258				// EVENT_FALC_ABNORMAL
1259				if (conf->media == IF_IFACE_T1) {
1260					/* Disable this interrupt as it may otherwise interfere
1261					 * with other working boards. */
1262					cpc_writeb(falcbase + F_REG(IMR0, ch),
1263						   cpc_readb(falcbase + F_REG(IMR0, ch))
1264						   | IMR0_PDEN);
1265				}
1266				falc_disable_comm(card, ch);
1267				// EVENT_FALC_ABNORMAL
1268			}
1269		}
1270	} else {
1271		if (pfalc->red_alarm) {
1272			pfalc->red_alarm = 0;
1273			pfalc->losr++;
1274		}
1275	}
1276
1277	if (conf->fr_mode != PC300_FR_UNFRAMED) {
1278		/* Verify AIS alarm */
1279		if (frs0 & FRS0_AIS) {
1280			if (!pfalc->blue_alarm) {
1281				pfalc->blue_alarm = 1;
1282				pfalc->ais++;
1283				// EVENT_AIS
1284				if (conf->media == IF_IFACE_T1) {
1285					/* Disable this interrupt as it may otherwise interfere with                       other working boards. */
1286					cpc_writeb(falcbase + F_REG(IMR0, ch),
1287						   cpc_readb(falcbase + F_REG(IMR0, ch)) | IMR0_PDEN);
1288				}
1289				falc_disable_comm(card, ch);
1290				// EVENT_AIS
1291			}
1292		} else {
1293			pfalc->blue_alarm = 0;
1294		}
1295
1296		/* Verify LFA */
1297		if (frs0 & FRS0_LFA) {
1298			if (!pfalc->loss_fa) {
1299				pfalc->loss_fa = 1;
1300				pfalc->lfa++;
1301				if (!pfalc->blue_alarm && !pfalc->red_alarm) {
1302					// EVENT_FALC_ABNORMAL
1303					if (conf->media == IF_IFACE_T1) {
1304						/* Disable this interrupt as it may otherwise
1305						 * interfere with other working boards. */
1306						cpc_writeb(falcbase + F_REG(IMR0, ch),
1307							   cpc_readb(falcbase + F_REG(IMR0, ch))
1308							   | IMR0_PDEN);
1309					}
1310					falc_disable_comm(card, ch);
1311					// EVENT_FALC_ABNORMAL
1312				}
1313			}
1314		} else {
1315			if (pfalc->loss_fa) {
1316				pfalc->loss_fa = 0;
1317				pfalc->farec++;
1318			}
1319		}
1320
1321		/* Verify LMFA */
1322		if (pfalc->multiframe_mode && (frs0 & FRS0_LMFA)) {
1323			/* D4 or CRC4 frame mode */
1324			if (!pfalc->loss_mfa) {
1325				pfalc->loss_mfa = 1;
1326				pfalc->lmfa++;
1327				if (!pfalc->blue_alarm && !pfalc->red_alarm &&
1328				    !pfalc->loss_fa) {
1329					// EVENT_FALC_ABNORMAL
1330					if (conf->media == IF_IFACE_T1) {
1331						/* Disable this interrupt as it may otherwise
1332						 * interfere with other working boards. */
1333						cpc_writeb(falcbase + F_REG(IMR0, ch),
1334							   cpc_readb(falcbase + F_REG(IMR0, ch))
1335							   | IMR0_PDEN);
1336					}
1337					falc_disable_comm(card, ch);
1338					// EVENT_FALC_ABNORMAL
1339				}
1340			}
1341		} else {
1342			pfalc->loss_mfa = 0;
1343		}
1344
1345		/* Verify Remote Alarm */
1346		if (frs0 & FRS0_RRA) {
1347			if (!pfalc->yellow_alarm) {
1348				pfalc->yellow_alarm = 1;
1349				pfalc->rai++;
1350				if (pfalc->sync) {
1351					// EVENT_RAI
1352					falc_disable_comm(card, ch);
1353					// EVENT_RAI
1354				}
1355			}
1356		} else {
1357			pfalc->yellow_alarm = 0;
1358		}
1359	} /* if !PC300_UNFRAMED */
1360
1361	if (pfalc->red_alarm || pfalc->loss_fa ||
1362	    pfalc->loss_mfa || pfalc->blue_alarm) {
1363		if (pfalc->sync) {
1364			pfalc->sync = 0;
1365			chan->d.line_off++;
1366			cpc_writeb(falcbase + card->hw.cpld_reg2,
1367				   cpc_readb(falcbase + card->hw.cpld_reg2) &
1368				   ~(CPLD_REG2_FALC_LED2 << (2 * ch)));
1369		}
1370	} else {
1371		if (!pfalc->sync) {
1372			pfalc->sync = 1;
1373			chan->d.line_on++;
1374			cpc_writeb(falcbase + card->hw.cpld_reg2,
1375				   cpc_readb(falcbase + card->hw.cpld_reg2) |
1376				   (CPLD_REG2_FALC_LED2 << (2 * ch)));
1377		}
1378	}
1379
1380	if (pfalc->sync && !pfalc->yellow_alarm) {
1381		if (!pfalc->active) {
1382			// EVENT_FALC_NORMAL
1383			if (pfalc->loop_active) {
1384				return;
1385			}
1386			if (conf->media == IF_IFACE_T1) {
1387				cpc_writeb(falcbase + F_REG(IMR0, ch),
1388					   cpc_readb(falcbase + F_REG(IMR0, ch)) & ~IMR0_PDEN);
1389			}
1390			falc_enable_comm(card, ch);
1391			// EVENT_FALC_NORMAL
1392			pfalc->active = 1;
1393		}
1394	} else {
1395		if (pfalc->active) {
1396			pfalc->active = 0;
1397		}
1398	}
1399}
1400
1401static void falc_update_stats(pc300_t * card, int ch)
1402{
1403	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1404	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1405	falc_t *pfalc = (falc_t *) & chan->falc;
1406	void __iomem *falcbase = card->hw.falcbase;
1407	u16 counter;
1408
1409	counter = cpc_readb(falcbase + F_REG(FECL, ch));
1410	counter |= cpc_readb(falcbase + F_REG(FECH, ch)) << 8;
1411	pfalc->fec += counter;
1412
1413	counter = cpc_readb(falcbase + F_REG(CVCL, ch));
1414	counter |= cpc_readb(falcbase + F_REG(CVCH, ch)) << 8;
1415	pfalc->cvc += counter;
1416
1417	counter = cpc_readb(falcbase + F_REG(CECL, ch));
1418	counter |= cpc_readb(falcbase + F_REG(CECH, ch)) << 8;
1419	pfalc->cec += counter;
1420
1421	counter = cpc_readb(falcbase + F_REG(EBCL, ch));
1422	counter |= cpc_readb(falcbase + F_REG(EBCH, ch)) << 8;
1423	pfalc->ebc += counter;
1424
1425	if (cpc_readb(falcbase + F_REG(LCR1, ch)) & LCR1_EPRM) {
1426		mdelay(10);
1427		counter = cpc_readb(falcbase + F_REG(BECL, ch));
1428		counter |= cpc_readb(falcbase + F_REG(BECH, ch)) << 8;
1429		pfalc->bec += counter;
1430
1431		if (((conf->media == IF_IFACE_T1) &&
1432		     (cpc_readb(falcbase + F_REG(FRS1, ch)) & FRS1_LLBAD) &&
1433		     (!(cpc_readb(falcbase + F_REG(FRS1, ch)) & FRS1_PDEN))) ||
1434		    ((conf->media == IF_IFACE_E1) &&
1435		     (cpc_readb(falcbase + F_REG(RSP, ch)) & RSP_LLBAD))) {
1436			pfalc->prbs = 2;
1437		} else {
1438			pfalc->prbs = 1;
1439		}
1440	}
1441}
1442
1443/*----------------------------------------------------------------------------
1444 * falc_remote_loop
1445 *----------------------------------------------------------------------------
1446 * Description:	In the remote loopback mode the clock and data recovered
1447 *		from the line inputs RL1/2 or RDIP/RDIN are routed back
1448 *		to the line outputs XL1/2 or XDOP/XDON via the analog
1449 *		transmitter. As in normal mode they are processed by
1450 *		the synchronizer and then sent to the system interface.
1451 *----------------------------------------------------------------------------
1452 */
1453static void falc_remote_loop(pc300_t * card, int ch, int loop_on)
1454{
1455	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1456	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1457	falc_t *pfalc = (falc_t *) & chan->falc;
1458	void __iomem *falcbase = card->hw.falcbase;
1459
1460	if (loop_on) {
1461		// EVENT_FALC_ABNORMAL
1462		if (conf->media == IF_IFACE_T1) {
1463			/* Disable this interrupt as it may otherwise interfere with
1464			 * other working boards. */
1465			cpc_writeb(falcbase + F_REG(IMR0, ch),
1466				   cpc_readb(falcbase + F_REG(IMR0, ch)) | IMR0_PDEN);
1467		}
1468		falc_disable_comm(card, ch);
1469		// EVENT_FALC_ABNORMAL
1470		cpc_writeb(falcbase + F_REG(LIM1, ch),
1471			   cpc_readb(falcbase + F_REG(LIM1, ch)) | LIM1_RL);
1472		pfalc->loop_active = 1;
1473	} else {
1474		cpc_writeb(falcbase + F_REG(LIM1, ch),
1475			   cpc_readb(falcbase + F_REG(LIM1, ch)) & ~LIM1_RL);
1476		pfalc->sync = 0;
1477		cpc_writeb(falcbase + card->hw.cpld_reg2,
1478			   cpc_readb(falcbase + card->hw.cpld_reg2) &
1479			   ~(CPLD_REG2_FALC_LED2 << (2 * ch)));
1480		pfalc->active = 0;
1481		falc_issue_cmd(card, ch, CMDR_XRES);
1482		pfalc->loop_active = 0;
1483	}
1484}
1485
1486/*----------------------------------------------------------------------------
1487 * falc_local_loop
1488 *----------------------------------------------------------------------------
1489 * Description: The local loopback mode disconnects the receive lines
1490 *		RL1/RL2 resp. RDIP/RDIN from the receiver. Instead of the
1491 *		signals coming from the line the data provided by system
1492 *		interface are routed through the analog receiver back to
1493 *		the system interface. The unipolar bit stream will be
1494 *		undisturbed transmitted on the line. Receiver and transmitter
1495 *		coding must be identical.
1496 *----------------------------------------------------------------------------
1497 */
1498static void falc_local_loop(pc300_t * card, int ch, int loop_on)
1499{
1500	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1501	falc_t *pfalc = (falc_t *) & chan->falc;
1502	void __iomem *falcbase = card->hw.falcbase;
1503
1504	if (loop_on) {
1505		cpc_writeb(falcbase + F_REG(LIM0, ch),
1506			   cpc_readb(falcbase + F_REG(LIM0, ch)) | LIM0_LL);
1507		pfalc->loop_active = 1;
1508	} else {
1509		cpc_writeb(falcbase + F_REG(LIM0, ch),
1510			   cpc_readb(falcbase + F_REG(LIM0, ch)) & ~LIM0_LL);
1511		pfalc->loop_active = 0;
1512	}
1513}
1514
1515/*----------------------------------------------------------------------------
1516 * falc_payload_loop
1517 *----------------------------------------------------------------------------
1518 * Description: This routine allows to enable/disable payload loopback.
1519 *		When the payload loop is activated, the received 192 bits
1520 *		of payload data will be looped back to the transmit
1521 *		direction. The framing bits, CRC6 and DL bits are not
1522 *		looped. They are originated by the FALC-LH transmitter.
1523 *----------------------------------------------------------------------------
1524 */
1525static void falc_payload_loop(pc300_t * card, int ch, int loop_on)
1526{
1527	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1528	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1529	falc_t *pfalc = (falc_t *) & chan->falc;
1530	void __iomem *falcbase = card->hw.falcbase;
1531
1532	if (loop_on) {
1533		// EVENT_FALC_ABNORMAL
1534		if (conf->media == IF_IFACE_T1) {
1535			/* Disable this interrupt as it may otherwise interfere with
1536			 * other working boards. */
1537			cpc_writeb(falcbase + F_REG(IMR0, ch),
1538				   cpc_readb(falcbase + F_REG(IMR0, ch)) | IMR0_PDEN);
1539		}
1540		falc_disable_comm(card, ch);
1541		// EVENT_FALC_ABNORMAL
1542		cpc_writeb(falcbase + F_REG(FMR2, ch),
1543			   cpc_readb(falcbase + F_REG(FMR2, ch)) | FMR2_PLB);
1544		if (conf->media == IF_IFACE_T1) {
1545			cpc_writeb(falcbase + F_REG(FMR4, ch),
1546				   cpc_readb(falcbase + F_REG(FMR4, ch)) | FMR4_TM);
1547		} else {
1548			cpc_writeb(falcbase + F_REG(FMR5, ch),
1549				   cpc_readb(falcbase + F_REG(FMR5, ch)) | XSP_TT0);
1550		}
1551		falc_open_all_timeslots(card, ch);
1552		pfalc->loop_active = 2;
1553	} else {
1554		cpc_writeb(falcbase + F_REG(FMR2, ch),
1555			   cpc_readb(falcbase + F_REG(FMR2, ch)) & ~FMR2_PLB);
1556		if (conf->media == IF_IFACE_T1) {
1557			cpc_writeb(falcbase + F_REG(FMR4, ch),
1558				   cpc_readb(falcbase + F_REG(FMR4, ch)) & ~FMR4_TM);
1559		} else {
1560			cpc_writeb(falcbase + F_REG(FMR5, ch),
1561				   cpc_readb(falcbase + F_REG(FMR5, ch)) & ~XSP_TT0);
1562		}
1563		pfalc->sync = 0;
1564		cpc_writeb(falcbase + card->hw.cpld_reg2,
1565			   cpc_readb(falcbase + card->hw.cpld_reg2) &
1566			   ~(CPLD_REG2_FALC_LED2 << (2 * ch)));
1567		pfalc->active = 0;
1568		falc_issue_cmd(card, ch, CMDR_XRES);
1569		pfalc->loop_active = 0;
1570	}
1571}
1572
1573/*----------------------------------------------------------------------------
1574 * turn_off_xlu
1575 *----------------------------------------------------------------------------
1576 * Description:	Turns XLU bit off in the proper register
1577 *----------------------------------------------------------------------------
1578 */
1579static void turn_off_xlu(pc300_t * card, int ch)
1580{
1581	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1582	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1583	void __iomem *falcbase = card->hw.falcbase;
1584
1585	if (conf->media == IF_IFACE_T1) {
1586		cpc_writeb(falcbase + F_REG(FMR5, ch),
1587			   cpc_readb(falcbase + F_REG(FMR5, ch)) & ~FMR5_XLU);
1588	} else {
1589		cpc_writeb(falcbase + F_REG(FMR3, ch),
1590			   cpc_readb(falcbase + F_REG(FMR3, ch)) & ~FMR3_XLU);
1591	}
1592}
1593
1594/*----------------------------------------------------------------------------
1595 * turn_off_xld
1596 *----------------------------------------------------------------------------
1597 * Description: Turns XLD bit off in the proper register
1598 *----------------------------------------------------------------------------
1599 */
1600static void turn_off_xld(pc300_t * card, int ch)
1601{
1602	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1603	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1604	void __iomem *falcbase = card->hw.falcbase;
1605
1606	if (conf->media == IF_IFACE_T1) {
1607		cpc_writeb(falcbase + F_REG(FMR5, ch),
1608			   cpc_readb(falcbase + F_REG(FMR5, ch)) & ~FMR5_XLD);
1609	} else {
1610		cpc_writeb(falcbase + F_REG(FMR3, ch),
1611			   cpc_readb(falcbase + F_REG(FMR3, ch)) & ~FMR3_XLD);
1612	}
1613}
1614
1615/*----------------------------------------------------------------------------
1616 * falc_generate_loop_up_code
1617 *----------------------------------------------------------------------------
1618 * Description:	This routine writes the proper FALC chip register in order
1619 *		to generate a LOOP activation code over a T1/E1 line.
1620 *----------------------------------------------------------------------------
1621 */
1622static void falc_generate_loop_up_code(pc300_t * card, int ch)
1623{
1624	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1625	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1626	falc_t *pfalc = (falc_t *) & chan->falc;
1627	void __iomem *falcbase = card->hw.falcbase;
1628
1629	if (conf->media == IF_IFACE_T1) {
1630		cpc_writeb(falcbase + F_REG(FMR5, ch),
1631			   cpc_readb(falcbase + F_REG(FMR5, ch)) | FMR5_XLU);
1632	} else {
1633		cpc_writeb(falcbase + F_REG(FMR3, ch),
1634			   cpc_readb(falcbase + F_REG(FMR3, ch)) | FMR3_XLU);
1635	}
1636	// EVENT_FALC_ABNORMAL
1637	if (conf->media == IF_IFACE_T1) {
1638		/* Disable this interrupt as it may otherwise interfere with
1639		 * other working boards. */
1640		cpc_writeb(falcbase + F_REG(IMR0, ch),
1641			   cpc_readb(falcbase + F_REG(IMR0, ch)) | IMR0_PDEN);
1642	}
1643	falc_disable_comm(card, ch);
1644	// EVENT_FALC_ABNORMAL
1645	pfalc->loop_gen = 1;
1646}
1647
1648/*----------------------------------------------------------------------------
1649 * falc_generate_loop_down_code
1650 *----------------------------------------------------------------------------
1651 * Description:	This routine writes the proper FALC chip register in order
1652 *		to generate a LOOP deactivation code over a T1/E1 line.
1653 *----------------------------------------------------------------------------
1654 */
1655static void falc_generate_loop_down_code(pc300_t * card, int ch)
1656{
1657	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1658	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1659	falc_t *pfalc = (falc_t *) & chan->falc;
1660	void __iomem *falcbase = card->hw.falcbase;
1661
1662	if (conf->media == IF_IFACE_T1) {
1663		cpc_writeb(falcbase + F_REG(FMR5, ch),
1664			   cpc_readb(falcbase + F_REG(FMR5, ch)) | FMR5_XLD);
1665	} else {
1666		cpc_writeb(falcbase + F_REG(FMR3, ch),
1667			   cpc_readb(falcbase + F_REG(FMR3, ch)) | FMR3_XLD);
1668	}
1669	pfalc->sync = 0;
1670	cpc_writeb(falcbase + card->hw.cpld_reg2,
1671		   cpc_readb(falcbase + card->hw.cpld_reg2) &
1672		   ~(CPLD_REG2_FALC_LED2 << (2 * ch)));
1673	pfalc->active = 0;
1674//?    falc_issue_cmd(card, ch, CMDR_XRES);
1675	pfalc->loop_gen = 0;
1676}
1677
1678/*----------------------------------------------------------------------------
1679 * falc_pattern_test
1680 *----------------------------------------------------------------------------
1681 * Description:	This routine generates a pattern code and checks
1682 *		it on the reception side.
1683 *----------------------------------------------------------------------------
1684 */
1685static void falc_pattern_test(pc300_t * card, int ch, unsigned int activate)
1686{
1687	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1688	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
1689	falc_t *pfalc = (falc_t *) & chan->falc;
1690	void __iomem *falcbase = card->hw.falcbase;
1691
1692	if (activate) {
1693		pfalc->prbs = 1;
1694		pfalc->bec = 0;
1695		if (conf->media == IF_IFACE_T1) {
1696			/* Disable local loop activation/deactivation detect */
1697			cpc_writeb(falcbase + F_REG(IMR3, ch),
1698				   cpc_readb(falcbase + F_REG(IMR3, ch)) | IMR3_LLBSC);
1699		} else {
1700			/* Disable local loop activation/deactivation detect */
1701			cpc_writeb(falcbase + F_REG(IMR1, ch),
1702				   cpc_readb(falcbase + F_REG(IMR1, ch)) | IMR1_LLBSC);
1703		}
1704		/* Activates generation and monitoring of PRBS
1705		 * (Pseudo Random Bit Sequence) */
1706		cpc_writeb(falcbase + F_REG(LCR1, ch),
1707			   cpc_readb(falcbase + F_REG(LCR1, ch)) | LCR1_EPRM | LCR1_XPRBS);
1708	} else {
1709		pfalc->prbs = 0;
1710		/* Deactivates generation and monitoring of PRBS
1711		 * (Pseudo Random Bit Sequence) */
1712		cpc_writeb(falcbase + F_REG(LCR1, ch),
1713			   cpc_readb(falcbase+F_REG(LCR1,ch)) & ~(LCR1_EPRM | LCR1_XPRBS));
1714		if (conf->media == IF_IFACE_T1) {
1715			/* Enable local loop activation/deactivation detect */
1716			cpc_writeb(falcbase + F_REG(IMR3, ch),
1717				   cpc_readb(falcbase + F_REG(IMR3, ch)) & ~IMR3_LLBSC);
1718		} else {
1719			/* Enable local loop activation/deactivation detect */
1720			cpc_writeb(falcbase + F_REG(IMR1, ch),
1721				   cpc_readb(falcbase + F_REG(IMR1, ch)) & ~IMR1_LLBSC);
1722		}
1723	}
1724}
1725
1726/*----------------------------------------------------------------------------
1727 * falc_pattern_test_error
1728 *----------------------------------------------------------------------------
1729 * Description:	This routine returns the bit error counter value
1730 *----------------------------------------------------------------------------
1731 */
1732static u16 falc_pattern_test_error(pc300_t * card, int ch)
1733{
1734	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
1735	falc_t *pfalc = (falc_t *) & chan->falc;
1736
1737	return pfalc->bec;
1738}
1739
1740/**********************************/
1741/***   Net Interface Routines   ***/
1742/**********************************/
1743
1744static void
1745cpc_trace(struct net_device *dev, struct sk_buff *skb_main, char rx_tx)
1746{
1747	struct sk_buff *skb;
1748
1749	if ((skb = dev_alloc_skb(10 + skb_main->len)) == NULL) {
1750		printk("%s: out of memory\n", dev->name);
1751		return;
1752	}
1753	skb_put(skb, 10 + skb_main->len);
1754
1755	skb->dev = dev;
1756	skb->protocol = htons(ETH_P_CUST);
1757	skb_reset_mac_header(skb);
1758	skb->pkt_type = PACKET_HOST;
1759	skb->len = 10 + skb_main->len;
1760
1761	skb_copy_to_linear_data(skb, dev->name, 5);
1762	skb->data[5] = '[';
1763	skb->data[6] = rx_tx;
1764	skb->data[7] = ']';
1765	skb->data[8] = ':';
1766	skb->data[9] = ' ';
1767	skb_copy_from_linear_data(skb_main, &skb->data[10], skb_main->len);
1768
1769	netif_rx(skb);
1770}
1771
1772static void cpc_tx_timeout(struct net_device *dev)
1773{
1774	pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
1775	pc300ch_t *chan = (pc300ch_t *) d->chan;
1776	pc300_t *card = (pc300_t *) chan->card;
1777	int ch = chan->channel;
1778	unsigned long flags;
1779	u8 ilar;
1780
1781	dev->stats.tx_errors++;
1782	dev->stats.tx_aborted_errors++;
1783	CPC_LOCK(card, flags);
1784	if ((ilar = cpc_readb(card->hw.scabase + ILAR)) != 0) {
1785		printk("%s: ILAR=0x%x\n", dev->name, ilar);
1786		cpc_writeb(card->hw.scabase + ILAR, ilar);
1787		cpc_writeb(card->hw.scabase + DMER, 0x80);
1788	}
1789	if (card->hw.type == PC300_TE) {
1790		cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,
1791			   cpc_readb(card->hw.falcbase + card->hw.cpld_reg2) &
1792			   ~(CPLD_REG2_FALC_LED1 << (2 * ch)));
1793	}
1794	dev->trans_start = jiffies; /* prevent tx timeout */
1795	CPC_UNLOCK(card, flags);
1796	netif_wake_queue(dev);
1797}
1798
1799static int cpc_queue_xmit(struct sk_buff *skb, struct net_device *dev)
1800{
1801	pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
1802	pc300ch_t *chan = (pc300ch_t *) d->chan;
1803	pc300_t *card = (pc300_t *) chan->card;
1804	int ch = chan->channel;
1805	unsigned long flags;
1806#ifdef PC300_DEBUG_TX
1807	int i;
1808#endif
1809
1810	if (!netif_carrier_ok(dev)) {
1811		/* DCD must be OFF: drop packet */
1812		dev_kfree_skb(skb);
1813		dev->stats.tx_errors++;
1814		dev->stats.tx_carrier_errors++;
1815		return 0;
1816	} else if (cpc_readb(card->hw.scabase + M_REG(ST3, ch)) & ST3_DCD) {
1817		printk("%s: DCD is OFF. Going administrative down.\n", dev->name);
1818		dev->stats.tx_errors++;
1819		dev->stats.tx_carrier_errors++;
1820		dev_kfree_skb(skb);
1821		netif_carrier_off(dev);
1822		CPC_LOCK(card, flags);
1823		cpc_writeb(card->hw.scabase + M_REG(CMD, ch), CMD_TX_BUF_CLR);
1824		if (card->hw.type == PC300_TE) {
1825			cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,
1826				   cpc_readb(card->hw.falcbase + card->hw.cpld_reg2) &
1827				   			~(CPLD_REG2_FALC_LED1 << (2 * ch)));
1828		}
1829		CPC_UNLOCK(card, flags);
1830		netif_wake_queue(dev);
1831		return 0;
1832	}
1833
1834	/* Write buffer to DMA buffers */
1835	if (dma_buf_write(card, ch, (u8 *)skb->data, skb->len) != 0) {
1836//		printk("%s: write error. Dropping TX packet.\n", dev->name);
1837		netif_stop_queue(dev);
1838		dev_kfree_skb(skb);
1839		dev->stats.tx_errors++;
1840		dev->stats.tx_dropped++;
1841		return 0;
1842	}
1843#ifdef PC300_DEBUG_TX
1844	printk("%s T:", dev->name);
1845	for (i = 0; i < skb->len; i++)
1846		printk(" %02x", *(skb->data + i));
1847	printk("\n");
1848#endif
1849
1850	if (d->trace_on) {
1851		cpc_trace(dev, skb, 'T');
1852	}
1853
1854	/* Start transmission */
1855	CPC_LOCK(card, flags);
1856	/* verify if it has more than one free descriptor */
1857	if (card->chan[ch].nfree_tx_bd <= 1) {
1858		/* don't have so stop the queue */
1859		netif_stop_queue(dev);
1860	}
1861	cpc_writel(card->hw.scabase + DTX_REG(EDAL, ch),
1862		   TX_BD_ADDR(ch, chan->tx_next_bd));
1863	cpc_writeb(card->hw.scabase + M_REG(CMD, ch), CMD_TX_ENA);
1864	cpc_writeb(card->hw.scabase + DSR_TX(ch), DSR_DE);
1865	if (card->hw.type == PC300_TE) {
1866		cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,
1867			   cpc_readb(card->hw.falcbase + card->hw.cpld_reg2) |
1868			   (CPLD_REG2_FALC_LED1 << (2 * ch)));
1869	}
1870	CPC_UNLOCK(card, flags);
1871	dev_kfree_skb(skb);
1872
1873	return 0;
1874}
1875
1876static void cpc_net_rx(struct net_device *dev)
1877{
1878	pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
1879	pc300ch_t *chan = (pc300ch_t *) d->chan;
1880	pc300_t *card = (pc300_t *) chan->card;
1881	int ch = chan->channel;
1882#ifdef PC300_DEBUG_RX
1883	int i;
1884#endif
1885	int rxb;
1886	struct sk_buff *skb;
1887
1888	while (1) {
1889		if ((rxb = dma_get_rx_frame_size(card, ch)) == -1)
1890			return;
1891
1892		if (!netif_carrier_ok(dev)) {
1893			/* DCD must be OFF: drop packet */
1894		    printk("%s : DCD is OFF - drop %d rx bytes\n", dev->name, rxb);
1895			skb = NULL;
1896		} else {
1897			if (rxb > (dev->mtu + 40)) { /* add headers */
1898				printk("%s : MTU exceeded %d\n", dev->name, rxb);
1899				skb = NULL;
1900			} else {
1901				skb = dev_alloc_skb(rxb);
1902				if (skb == NULL) {
1903					printk("%s: Memory squeeze!!\n", dev->name);
1904					return;
1905				}
1906				skb->dev = dev;
1907			}
1908		}
1909
1910		if (((rxb = dma_buf_read(card, ch, skb)) <= 0) || (skb == NULL)) {
1911#ifdef PC300_DEBUG_RX
1912			printk("%s: rxb = %x\n", dev->name, rxb);
1913#endif
1914			if ((skb == NULL) && (rxb > 0)) {
1915				/* rxb > dev->mtu */
1916				dev->stats.rx_errors++;
1917				dev->stats.rx_length_errors++;
1918				continue;
1919			}
1920
1921			if (rxb < 0) {	/* Invalid frame */
1922				rxb = -rxb;
1923				if (rxb & DST_OVR) {
1924					dev->stats.rx_errors++;
1925					dev->stats.rx_fifo_errors++;
1926				}
1927				if (rxb & DST_CRC) {
1928					dev->stats.rx_errors++;
1929					dev->stats.rx_crc_errors++;
1930				}
1931				if (rxb & (DST_RBIT | DST_SHRT | DST_ABT)) {
1932					dev->stats.rx_errors++;
1933					dev->stats.rx_frame_errors++;
1934				}
1935			}
1936			if (skb) {
1937				dev_kfree_skb_irq(skb);
1938			}
1939			continue;
1940		}
1941
1942		dev->stats.rx_bytes += rxb;
1943
1944#ifdef PC300_DEBUG_RX
1945		printk("%s R:", dev->name);
1946		for (i = 0; i < skb->len; i++)
1947			printk(" %02x", *(skb->data + i));
1948		printk("\n");
1949#endif
1950		if (d->trace_on) {
1951			cpc_trace(dev, skb, 'R');
1952		}
1953		dev->stats.rx_packets++;
1954		skb->protocol = hdlc_type_trans(skb, dev);
1955		netif_rx(skb);
1956	}
1957}
1958
1959/************************************/
1960/***   PC300 Interrupt Routines   ***/
1961/************************************/
1962static void sca_tx_intr(pc300dev_t *dev)
1963{
1964	pc300ch_t *chan = (pc300ch_t *)dev->chan;
1965	pc300_t *card = (pc300_t *)chan->card;
1966	int ch = chan->channel;
1967	volatile pcsca_bd_t __iomem * ptdescr;
1968
1969    /* Clean up descriptors from previous transmission */
1970	ptdescr = (card->hw.rambase +
1971						TX_BD_ADDR(ch,chan->tx_first_bd));
1972	while ((cpc_readl(card->hw.scabase + DTX_REG(CDAL,ch)) !=
1973		TX_BD_ADDR(ch,chan->tx_first_bd)) &&
1974	       (cpc_readb(&ptdescr->status) & DST_OSB)) {
1975		dev->dev->stats.tx_packets++;
1976		dev->dev->stats.tx_bytes += cpc_readw(&ptdescr->len);
1977		cpc_writeb(&ptdescr->status, DST_OSB);
1978		cpc_writew(&ptdescr->len, 0);
1979		chan->nfree_tx_bd++;
1980		chan->tx_first_bd = (chan->tx_first_bd + 1) & (N_DMA_TX_BUF - 1);
1981		ptdescr = (card->hw.rambase + TX_BD_ADDR(ch,chan->tx_first_bd));
1982    }
1983
1984#ifdef CONFIG_PC300_MLPPP
1985	if (chan->conf.proto == PC300_PROTO_MLPPP) {
1986			cpc_tty_trigger_poll(dev);
1987	} else {
1988#endif
1989	/* Tell the upper layer we are ready to transmit more packets */
1990		netif_wake_queue(dev->dev);
1991#ifdef CONFIG_PC300_MLPPP
1992	}
1993#endif
1994}
1995
1996static void sca_intr(pc300_t * card)
1997{
1998	void __iomem *scabase = card->hw.scabase;
1999	volatile u32 status;
2000	int ch;
2001	int intr_count = 0;
2002	unsigned char dsr_rx;
2003
2004	while ((status = cpc_readl(scabase + ISR0)) != 0) {
2005		for (ch = 0; ch < card->hw.nchan; ch++) {
2006			pc300ch_t *chan = &card->chan[ch];
2007			pc300dev_t *d = &chan->d;
2008			struct net_device *dev = d->dev;
2009
2010			spin_lock(&card->card_lock);
2011
2012	    /**** Reception ****/
2013			if (status & IR0_DRX((IR0_DMIA | IR0_DMIB), ch)) {
2014				u8 drx_stat = cpc_readb(scabase + DSR_RX(ch));
2015
2016				/* Clear RX interrupts */
2017				cpc_writeb(scabase + DSR_RX(ch), drx_stat | DSR_DWE);
2018
2019#ifdef PC300_DEBUG_INTR
2020				printk ("sca_intr: RX intr chan[%d] (st=0x%08lx, dsr=0x%02x)\n",
2021					 ch, status, drx_stat);
2022#endif
2023				if (status & IR0_DRX(IR0_DMIA, ch)) {
2024					if (drx_stat & DSR_BOF) {
2025#ifdef CONFIG_PC300_MLPPP
2026						if (chan->conf.proto == PC300_PROTO_MLPPP) {
2027							/* verify if driver is TTY */
2028							if ((cpc_readb(scabase + DSR_RX(ch)) & DSR_DE)) {
2029								rx_dma_stop(card, ch);
2030							}
2031							cpc_tty_receive(d);
2032							rx_dma_start(card, ch);
2033						} else
2034#endif
2035						{
2036							if ((cpc_readb(scabase + DSR_RX(ch)) & DSR_DE)) {
2037								rx_dma_stop(card, ch);
2038							}
2039							cpc_net_rx(dev);
2040							/* Discard invalid frames */
2041							dev->stats.rx_errors++;
2042							dev->stats.rx_over_errors++;
2043							chan->rx_first_bd = 0;
2044							chan->rx_last_bd = N_DMA_RX_BUF - 1;
2045							rx_dma_start(card, ch);
2046						}
2047					}
2048				}
2049				if (status & IR0_DRX(IR0_DMIB, ch)) {
2050					if (drx_stat & DSR_EOM) {
2051						if (card->hw.type == PC300_TE) {
2052							cpc_writeb(card->hw.falcbase +
2053								   card->hw.cpld_reg2,
2054								   cpc_readb (card->hw.falcbase +
2055								    	card->hw.cpld_reg2) |
2056								   (CPLD_REG2_FALC_LED1 << (2 * ch)));
2057						}
2058#ifdef CONFIG_PC300_MLPPP
2059						if (chan->conf.proto == PC300_PROTO_MLPPP) {
2060							/* verify if driver is TTY */
2061							cpc_tty_receive(d);
2062						} else {
2063							cpc_net_rx(dev);
2064						}
2065#else
2066						cpc_net_rx(dev);
2067#endif
2068						if (card->hw.type == PC300_TE) {
2069							cpc_writeb(card->hw.falcbase +
2070								   card->hw.cpld_reg2,
2071								   cpc_readb (card->hw.falcbase +
2072								    		card->hw.cpld_reg2) &
2073								   ~ (CPLD_REG2_FALC_LED1 << (2 * ch)));
2074						}
2075					}
2076				}
2077				if (!(dsr_rx = cpc_readb(scabase + DSR_RX(ch)) & DSR_DE)) {
2078#ifdef PC300_DEBUG_INTR
2079		printk("%s: RX intr chan[%d] (st=0x%08lx, dsr=0x%02x, dsr2=0x%02x)\n",
2080			dev->name, ch, status, drx_stat, dsr_rx);
2081#endif
2082					cpc_writeb(scabase + DSR_RX(ch), (dsr_rx | DSR_DE) & 0xfe);
2083				}
2084			}
2085
2086	    /**** Transmission ****/
2087			if (status & IR0_DTX((IR0_EFT | IR0_DMIA | IR0_DMIB), ch)) {
2088				u8 dtx_stat = cpc_readb(scabase + DSR_TX(ch));
2089
2090				/* Clear TX interrupts */
2091				cpc_writeb(scabase + DSR_TX(ch), dtx_stat | DSR_DWE);
2092
2093#ifdef PC300_DEBUG_INTR
2094				printk ("sca_intr: TX intr chan[%d] (st=0x%08lx, dsr=0x%02x)\n",
2095					 ch, status, dtx_stat);
2096#endif
2097				if (status & IR0_DTX(IR0_EFT, ch)) {
2098					if (dtx_stat & DSR_UDRF) {
2099						if (cpc_readb (scabase + M_REG(TBN, ch)) != 0) {
2100							cpc_writeb(scabase + M_REG(CMD,ch), CMD_TX_BUF_CLR);
2101						}
2102						if (card->hw.type == PC300_TE) {
2103							cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,
2104								   cpc_readb (card->hw.falcbase +
2105										   card->hw.cpld_reg2) &
2106								   ~ (CPLD_REG2_FALC_LED1 << (2 * ch)));
2107						}
2108						dev->stats.tx_errors++;
2109						dev->stats.tx_fifo_errors++;
2110						sca_tx_intr(d);
2111					}
2112				}
2113				if (status & IR0_DTX(IR0_DMIA, ch)) {
2114					if (dtx_stat & DSR_BOF) {
2115					}
2116				}
2117				if (status & IR0_DTX(IR0_DMIB, ch)) {
2118					if (dtx_stat & DSR_EOM) {
2119						if (card->hw.type == PC300_TE) {
2120							cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,
2121								   cpc_readb (card->hw.falcbase +
2122								    			card->hw.cpld_reg2) &
2123								   ~ (CPLD_REG2_FALC_LED1 << (2 * ch)));
2124						}
2125						sca_tx_intr(d);
2126					}
2127				}
2128			}
2129
2130	    /**** MSCI ****/
2131			if (status & IR0_M(IR0_RXINTA, ch)) {
2132				u8 st1 = cpc_readb(scabase + M_REG(ST1, ch));
2133
2134				/* Clear MSCI interrupts */
2135				cpc_writeb(scabase + M_REG(ST1, ch), st1);
2136
2137#ifdef PC300_DEBUG_INTR
2138				printk("sca_intr: MSCI intr chan[%d] (st=0x%08lx, st1=0x%02x)\n",
2139					 ch, status, st1);
2140#endif
2141				if (st1 & ST1_CDCD) {	/* DCD changed */
2142					if (cpc_readb(scabase + M_REG(ST3, ch)) & ST3_DCD) {
2143						printk ("%s: DCD is OFF. Going administrative down.\n",
2144							 dev->name);
2145#ifdef CONFIG_PC300_MLPPP
2146						if (chan->conf.proto != PC300_PROTO_MLPPP) {
2147							netif_carrier_off(dev);
2148						}
2149#else
2150						netif_carrier_off(dev);
2151
2152#endif
2153						card->chan[ch].d.line_off++;
2154					} else {	/* DCD = 1 */
2155						printk ("%s: DCD is ON. Going administrative up.\n",
2156							 dev->name);
2157#ifdef CONFIG_PC300_MLPPP
2158						if (chan->conf.proto != PC300_PROTO_MLPPP)
2159							/* verify if driver is not TTY */
2160#endif
2161							netif_carrier_on(dev);
2162						card->chan[ch].d.line_on++;
2163					}
2164				}
2165			}
2166			spin_unlock(&card->card_lock);
2167		}
2168		if (++intr_count == 10)
2169			/* Too much work at this board. Force exit */
2170			break;
2171	}
2172}
2173
2174static void falc_t1_loop_detection(pc300_t *card, int ch, u8 frs1)
2175{
2176	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
2177	falc_t *pfalc = (falc_t *) & chan->falc;
2178	void __iomem *falcbase = card->hw.falcbase;
2179
2180	if (((cpc_readb(falcbase + F_REG(LCR1, ch)) & LCR1_XPRBS) == 0) &&
2181	    !pfalc->loop_gen) {
2182		if (frs1 & FRS1_LLBDD) {
2183			// A Line Loop Back Deactivation signal detected
2184			if (pfalc->loop_active) {
2185				falc_remote_loop(card, ch, 0);
2186			}
2187		} else {
2188			if ((frs1 & FRS1_LLBAD) &&
2189			    ((cpc_readb(falcbase + F_REG(LCR1, ch)) & LCR1_EPRM) == 0)) {
2190				// A Line Loop Back Activation signal detected
2191				if (!pfalc->loop_active) {
2192					falc_remote_loop(card, ch, 1);
2193				}
2194			}
2195		}
2196	}
2197}
2198
2199static void falc_e1_loop_detection(pc300_t *card, int ch, u8 rsp)
2200{
2201	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
2202	falc_t *pfalc = (falc_t *) & chan->falc;
2203	void __iomem *falcbase = card->hw.falcbase;
2204
2205	if (((cpc_readb(falcbase + F_REG(LCR1, ch)) & LCR1_XPRBS) == 0) &&
2206	    !pfalc->loop_gen) {
2207		if (rsp & RSP_LLBDD) {
2208			// A Line Loop Back Deactivation signal detected
2209			if (pfalc->loop_active) {
2210				falc_remote_loop(card, ch, 0);
2211			}
2212		} else {
2213			if ((rsp & RSP_LLBAD) &&
2214			    ((cpc_readb(falcbase + F_REG(LCR1, ch)) & LCR1_EPRM) == 0)) {
2215				// A Line Loop Back Activation signal detected
2216				if (!pfalc->loop_active) {
2217					falc_remote_loop(card, ch, 1);
2218				}
2219			}
2220		}
2221	}
2222}
2223
2224static void falc_t1_intr(pc300_t * card, int ch)
2225{
2226	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
2227	falc_t *pfalc = (falc_t *) & chan->falc;
2228	void __iomem *falcbase = card->hw.falcbase;
2229	u8 isr0, isr3, gis;
2230	u8 dummy;
2231
2232	while ((gis = cpc_readb(falcbase + F_REG(GIS, ch))) != 0) {
2233		if (gis & GIS_ISR0) {
2234			isr0 = cpc_readb(falcbase + F_REG(FISR0, ch));
2235			if (isr0 & FISR0_PDEN) {
2236				/* Read the bit to clear the situation */
2237				if (cpc_readb(falcbase + F_REG(FRS1, ch)) &
2238				    FRS1_PDEN) {
2239					pfalc->pden++;
2240				}
2241			}
2242		}
2243
2244		if (gis & GIS_ISR1) {
2245			dummy = cpc_readb(falcbase + F_REG(FISR1, ch));
2246		}
2247
2248		if (gis & GIS_ISR2) {
2249			dummy = cpc_readb(falcbase + F_REG(FISR2, ch));
2250		}
2251
2252		if (gis & GIS_ISR3) {
2253			isr3 = cpc_readb(falcbase + F_REG(FISR3, ch));
2254			if (isr3 & FISR3_SEC) {
2255				pfalc->sec++;
2256				falc_update_stats(card, ch);
2257				falc_check_status(card, ch,
2258						  cpc_readb(falcbase + F_REG(FRS0, ch)));
2259			}
2260			if (isr3 & FISR3_ES) {
2261				pfalc->es++;
2262			}
2263			if (isr3 & FISR3_LLBSC) {
2264				falc_t1_loop_detection(card, ch,
2265						       cpc_readb(falcbase + F_REG(FRS1, ch)));
2266			}
2267		}
2268	}
2269}
2270
2271static void falc_e1_intr(pc300_t * card, int ch)
2272{
2273	pc300ch_t *chan = (pc300ch_t *) & card->chan[ch];
2274	falc_t *pfalc = (falc_t *) & chan->falc;
2275	void __iomem *falcbase = card->hw.falcbase;
2276	u8 isr1, isr2, isr3, gis, rsp;
2277	u8 dummy;
2278
2279	while ((gis = cpc_readb(falcbase + F_REG(GIS, ch))) != 0) {
2280		rsp = cpc_readb(falcbase + F_REG(RSP, ch));
2281
2282		if (gis & GIS_ISR0) {
2283			dummy = cpc_readb(falcbase + F_REG(FISR0, ch));
2284		}
2285		if (gis & GIS_ISR1) {
2286			isr1 = cpc_readb(falcbase + F_REG(FISR1, ch));
2287			if (isr1 & FISR1_XMB) {
2288				if ((pfalc->xmb_cause & 2) &&
2289				    pfalc->multiframe_mode) {
2290					if (cpc_readb (falcbase + F_REG(FRS0, ch)) &
2291									(FRS0_LOS | FRS0_AIS | FRS0_LFA)) {
2292						cpc_writeb(falcbase + F_REG(XSP, ch),
2293							   cpc_readb(falcbase + F_REG(XSP, ch))
2294							   & ~XSP_AXS);
2295					} else {
2296						cpc_writeb(falcbase + F_REG(XSP, ch),
2297							   cpc_readb(falcbase + F_REG(XSP, ch))
2298							   | XSP_AXS);
2299					}
2300				}
2301				pfalc->xmb_cause = 0;
2302				cpc_writeb(falcbase + F_REG(IMR1, ch),
2303					   cpc_readb(falcbase + F_REG(IMR1, ch)) | IMR1_XMB);
2304			}
2305			if (isr1 & FISR1_LLBSC) {
2306				falc_e1_loop_detection(card, ch, rsp);
2307			}
2308		}
2309		if (gis & GIS_ISR2) {
2310			isr2 = cpc_readb(falcbase + F_REG(FISR2, ch));
2311			if (isr2 & FISR2_T400MS) {
2312				cpc_writeb(falcbase + F_REG(XSW, ch),
2313					   cpc_readb(falcbase + F_REG(XSW, ch)) | XSW_XRA);
2314			}
2315			if (isr2 & FISR2_MFAR) {
2316				cpc_writeb(falcbase + F_REG(XSW, ch),
2317					   cpc_readb(falcbase + F_REG(XSW, ch)) & ~XSW_XRA);
2318			}
2319			if (isr2 & (FISR2_FAR | FISR2_LFA | FISR2_AIS | FISR2_LOS)) {
2320				pfalc->xmb_cause |= 2;
2321				cpc_writeb(falcbase + F_REG(IMR1, ch),
2322					   cpc_readb(falcbase + F_REG(IMR1, ch)) & ~IMR1_XMB);
2323			}
2324		}
2325		if (gis & GIS_ISR3) {
2326			isr3 = cpc_readb(falcbase + F_REG(FISR3, ch));
2327			if (isr3 & FISR3_SEC) {
2328				pfalc->sec++;
2329				falc_update_stats(card, ch);
2330				falc_check_status(card, ch,
2331						  cpc_readb(falcbase + F_REG(FRS0, ch)));
2332			}
2333			if (isr3 & FISR3_ES) {
2334				pfalc->es++;
2335			}
2336		}
2337	}
2338}
2339
2340static void falc_intr(pc300_t * card)
2341{
2342	int ch;
2343
2344	for (ch = 0; ch < card->hw.nchan; ch++) {
2345		pc300ch_t *chan = &card->chan[ch];
2346		pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
2347
2348		if (conf->media == IF_IFACE_T1) {
2349			falc_t1_intr(card, ch);
2350		} else {
2351			falc_e1_intr(card, ch);
2352		}
2353	}
2354}
2355
2356static irqreturn_t cpc_intr(int irq, void *dev_id)
2357{
2358	pc300_t *card = dev_id;
2359	volatile u8 plx_status;
2360
2361	if (!card) {
2362#ifdef PC300_DEBUG_INTR
2363		printk("cpc_intr: spurious intr %d\n", irq);
2364#endif
2365		return IRQ_NONE;		/* spurious intr */
2366	}
2367
2368	if (!card->hw.rambase) {
2369#ifdef PC300_DEBUG_INTR
2370		printk("cpc_intr: spurious intr2 %d\n", irq);
2371#endif
2372		return IRQ_NONE;		/* spurious intr */
2373	}
2374
2375	switch (card->hw.type) {
2376		case PC300_RSV:
2377		case PC300_X21:
2378			sca_intr(card);
2379			break;
2380
2381		case PC300_TE:
2382			while ( (plx_status = (cpc_readb(card->hw.plxbase + card->hw.intctl_reg) &
2383				 (PLX_9050_LINT1_STATUS | PLX_9050_LINT2_STATUS))) != 0) {
2384				if (plx_status & PLX_9050_LINT1_STATUS) {	/* SCA Interrupt */
2385					sca_intr(card);
2386				}
2387				if (plx_status & PLX_9050_LINT2_STATUS) {	/* FALC Interrupt */
2388					falc_intr(card);
2389				}
2390			}
2391			break;
2392	}
2393	return IRQ_HANDLED;
2394}
2395
2396static void cpc_sca_status(pc300_t * card, int ch)
2397{
2398	u8 ilar;
2399	void __iomem *scabase = card->hw.scabase;
2400	unsigned long flags;
2401
2402	tx_dma_buf_check(card, ch);
2403	rx_dma_buf_check(card, ch);
2404	ilar = cpc_readb(scabase + ILAR);
2405	printk ("ILAR=0x%02x, WCRL=0x%02x, PCR=0x%02x, BTCR=0x%02x, BOLR=0x%02x\n",
2406		 ilar, cpc_readb(scabase + WCRL), cpc_readb(scabase + PCR),
2407		 cpc_readb(scabase + BTCR), cpc_readb(scabase + BOLR));
2408	printk("TX_CDA=0x%08x, TX_EDA=0x%08x\n",
2409	       cpc_readl(scabase + DTX_REG(CDAL, ch)),
2410	       cpc_readl(scabase + DTX_REG(EDAL, ch)));
2411	printk("RX_CDA=0x%08x, RX_EDA=0x%08x, BFL=0x%04x\n",
2412	       cpc_readl(scabase + DRX_REG(CDAL, ch)),
2413	       cpc_readl(scabase + DRX_REG(EDAL, ch)),
2414	       cpc_readw(scabase + DRX_REG(BFLL, ch)));
2415	printk("DMER=0x%02x, DSR_TX=0x%02x, DSR_RX=0x%02x\n",
2416	       cpc_readb(scabase + DMER), cpc_readb(scabase + DSR_TX(ch)),
2417	       cpc_readb(scabase + DSR_RX(ch)));
2418	printk("DMR_TX=0x%02x, DMR_RX=0x%02x, DIR_TX=0x%02x, DIR_RX=0x%02x\n",
2419	       cpc_readb(scabase + DMR_TX(ch)), cpc_readb(scabase + DMR_RX(ch)),
2420	       cpc_readb(scabase + DIR_TX(ch)),
2421	       cpc_readb(scabase + DIR_RX(ch)));
2422	printk("DCR_TX=0x%02x, DCR_RX=0x%02x, FCT_TX=0x%02x, FCT_RX=0x%02x\n",
2423	       cpc_readb(scabase + DCR_TX(ch)), cpc_readb(scabase + DCR_RX(ch)),
2424	       cpc_readb(scabase + FCT_TX(ch)),
2425	       cpc_readb(scabase + FCT_RX(ch)));
2426	printk("MD0=0x%02x, MD1=0x%02x, MD2=0x%02x, MD3=0x%02x, IDL=0x%02x\n",
2427	       cpc_readb(scabase + M_REG(MD0, ch)),
2428	       cpc_readb(scabase + M_REG(MD1, ch)),
2429	       cpc_readb(scabase + M_REG(MD2, ch)),
2430	       cpc_readb(scabase + M_REG(MD3, ch)),
2431	       cpc_readb(scabase + M_REG(IDL, ch)));
2432	printk("CMD=0x%02x, SA0=0x%02x, SA1=0x%02x, TFN=0x%02x, CTL=0x%02x\n",
2433	       cpc_readb(scabase + M_REG(CMD, ch)),
2434	       cpc_readb(scabase + M_REG(SA0, ch)),
2435	       cpc_readb(scabase + M_REG(SA1, ch)),
2436	       cpc_readb(scabase + M_REG(TFN, ch)),
2437	       cpc_readb(scabase + M_REG(CTL, ch)));
2438	printk("ST0=0x%02x, ST1=0x%02x, ST2=0x%02x, ST3=0x%02x, ST4=0x%02x\n",
2439	       cpc_readb(scabase + M_REG(ST0, ch)),
2440	       cpc_readb(scabase + M_REG(ST1, ch)),
2441	       cpc_readb(scabase + M_REG(ST2, ch)),
2442	       cpc_readb(scabase + M_REG(ST3, ch)),
2443	       cpc_readb(scabase + M_REG(ST4, ch)));
2444	printk ("CST0=0x%02x, CST1=0x%02x, CST2=0x%02x, CST3=0x%02x, FST=0x%02x\n",
2445		 cpc_readb(scabase + M_REG(CST0, ch)),
2446		 cpc_readb(scabase + M_REG(CST1, ch)),
2447		 cpc_readb(scabase + M_REG(CST2, ch)),
2448		 cpc_readb(scabase + M_REG(CST3, ch)),
2449		 cpc_readb(scabase + M_REG(FST, ch)));
2450	printk("TRC0=0x%02x, TRC1=0x%02x, RRC=0x%02x, TBN=0x%02x, RBN=0x%02x\n",
2451	       cpc_readb(scabase + M_REG(TRC0, ch)),
2452	       cpc_readb(scabase + M_REG(TRC1, ch)),
2453	       cpc_readb(scabase + M_REG(RRC, ch)),
2454	       cpc_readb(scabase + M_REG(TBN, ch)),
2455	       cpc_readb(scabase + M_REG(RBN, ch)));
2456	printk("TFS=0x%02x, TNR0=0x%02x, TNR1=0x%02x, RNR=0x%02x\n",
2457	       cpc_readb(scabase + M_REG(TFS, ch)),
2458	       cpc_readb(scabase + M_REG(TNR0, ch)),
2459	       cpc_readb(scabase + M_REG(TNR1, ch)),
2460	       cpc_readb(scabase + M_REG(RNR, ch)));
2461	printk("TCR=0x%02x, RCR=0x%02x, TNR1=0x%02x, RNR=0x%02x\n",
2462	       cpc_readb(scabase + M_REG(TCR, ch)),
2463	       cpc_readb(scabase + M_REG(RCR, ch)),
2464	       cpc_readb(scabase + M_REG(TNR1, ch)),
2465	       cpc_readb(scabase + M_REG(RNR, ch)));
2466	printk("TXS=0x%02x, RXS=0x%02x, EXS=0x%02x, TMCT=0x%02x, TMCR=0x%02x\n",
2467	       cpc_readb(scabase + M_REG(TXS, ch)),
2468	       cpc_readb(scabase + M_REG(RXS, ch)),
2469	       cpc_readb(scabase + M_REG(EXS, ch)),
2470	       cpc_readb(scabase + M_REG(TMCT, ch)),
2471	       cpc_readb(scabase + M_REG(TMCR, ch)));
2472	printk("IE0=0x%02x, IE1=0x%02x, IE2=0x%02x, IE4=0x%02x, FIE=0x%02x\n",
2473	       cpc_readb(scabase + M_REG(IE0, ch)),
2474	       cpc_readb(scabase + M_REG(IE1, ch)),
2475	       cpc_readb(scabase + M_REG(IE2, ch)),
2476	       cpc_readb(scabase + M_REG(IE4, ch)),
2477	       cpc_readb(scabase + M_REG(FIE, ch)));
2478	printk("IER0=0x%08x\n", cpc_readl(scabase + IER0));
2479
2480	if (ilar != 0) {
2481		CPC_LOCK(card, flags);
2482		cpc_writeb(scabase + ILAR, ilar);
2483		cpc_writeb(scabase + DMER, 0x80);
2484		CPC_UNLOCK(card, flags);
2485	}
2486}
2487
2488static void cpc_falc_status(pc300_t * card, int ch)
2489{
2490	pc300ch_t *chan = &card->chan[ch];
2491	falc_t *pfalc = (falc_t *) & chan->falc;
2492	unsigned long flags;
2493
2494	CPC_LOCK(card, flags);
2495	printk("CH%d:   %s %s  %d channels\n",
2496	       ch, (pfalc->sync ? "SYNC" : ""), (pfalc->active ? "ACTIVE" : ""),
2497	       pfalc->num_channels);
2498
2499	printk("        pden=%d,  los=%d,  losr=%d,  lfa=%d,  farec=%d\n",
2500	       pfalc->pden, pfalc->los, pfalc->losr, pfalc->lfa, pfalc->farec);
2501	printk("        lmfa=%d,  ais=%d,  sec=%d,  es=%d,  rai=%d\n",
2502	       pfalc->lmfa, pfalc->ais, pfalc->sec, pfalc->es, pfalc->rai);
2503	printk("        bec=%d,  fec=%d,  cvc=%d,  cec=%d,  ebc=%d\n",
2504	       pfalc->bec, pfalc->fec, pfalc->cvc, pfalc->cec, pfalc->ebc);
2505
2506	printk("\n");
2507	printk("        STATUS: %s  %s  %s  %s  %s  %s\n",
2508	       (pfalc->red_alarm ? "RED" : ""),
2509	       (pfalc->blue_alarm ? "BLU" : ""),
2510	       (pfalc->yellow_alarm ? "YEL" : ""),
2511	       (pfalc->loss_fa ? "LFA" : ""),
2512	       (pfalc->loss_mfa ? "LMF" : ""), (pfalc->prbs ? "PRB" : ""));
2513	CPC_UNLOCK(card, flags);
2514}
2515
2516static int cpc_change_mtu(struct net_device *dev, int new_mtu)
2517{
2518	if ((new_mtu < 128) || (new_mtu > PC300_DEF_MTU))
2519		return -EINVAL;
2520	dev->mtu = new_mtu;
2521	return 0;
2522}
2523
2524static int cpc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
2525{
2526	pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
2527	pc300ch_t *chan = (pc300ch_t *) d->chan;
2528	pc300_t *card = (pc300_t *) chan->card;
2529	pc300conf_t conf_aux;
2530	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
2531	int ch = chan->channel;
2532	void __user *arg = ifr->ifr_data;
2533	struct if_settings *settings = &ifr->ifr_settings;
2534	void __iomem *scabase = card->hw.scabase;
2535
2536	if (!capable(CAP_NET_ADMIN))
2537		return -EPERM;
2538
2539	switch (cmd) {
2540		case SIOCGPC300CONF:
2541#ifdef CONFIG_PC300_MLPPP
2542			if (conf->proto != PC300_PROTO_MLPPP) {
2543				conf->proto = /* FIXME hdlc->proto.id */ 0;
2544			}
2545#else
2546			conf->proto = /* FIXME hdlc->proto.id */ 0;
2547#endif
2548			memcpy(&conf_aux.conf, conf, sizeof(pc300chconf_t));
2549			memcpy(&conf_aux.hw, &card->hw, sizeof(pc300hw_t));
2550			if (!arg ||
2551				copy_to_user(arg, &conf_aux, sizeof(pc300conf_t)))
2552				return -EINVAL;
2553			return 0;
2554		case SIOCSPC300CONF:
2555			if (!capable(CAP_NET_ADMIN))
2556				return -EPERM;
2557			if (!arg ||
2558				copy_from_user(&conf_aux.conf, arg, sizeof(pc300chconf_t)))
2559				return -EINVAL;
2560			if (card->hw.cpld_id < 0x02 &&
2561			    conf_aux.conf.fr_mode == PC300_FR_UNFRAMED) {
2562				/* CPLD_ID < 0x02 doesn't support Unframed E1 */
2563				return -EINVAL;
2564			}
2565#ifdef CONFIG_PC300_MLPPP
2566			if (conf_aux.conf.proto == PC300_PROTO_MLPPP) {
2567				if (conf->proto != PC300_PROTO_MLPPP) {
2568					memcpy(conf, &conf_aux.conf, sizeof(pc300chconf_t));
2569					cpc_tty_init(d);	/* init TTY driver */
2570				}
2571			} else {
2572				if (conf_aux.conf.proto == 0xffff) {
2573					if (conf->proto == PC300_PROTO_MLPPP){
2574						/* ifdown interface */
2575						cpc_close(dev);
2576					}
2577				} else {
2578					memcpy(conf, &conf_aux.conf, sizeof(pc300chconf_t));
2579					/* FIXME hdlc->proto.id = conf->proto; */
2580				}
2581			}
2582#else
2583			memcpy(conf, &conf_aux.conf, sizeof(pc300chconf_t));
2584			/* FIXME hdlc->proto.id = conf->proto; */
2585#endif
2586			return 0;
2587		case SIOCGPC300STATUS:
2588			cpc_sca_status(card, ch);
2589			return 0;
2590		case SIOCGPC300FALCSTATUS:
2591			cpc_falc_status(card, ch);
2592			return 0;
2593
2594		case SIOCGPC300UTILSTATS:
2595			{
2596				if (!arg) {	/* clear statistics */
2597					memset(&dev->stats, 0, sizeof(dev->stats));
2598					if (card->hw.type == PC300_TE) {
2599						memset(&chan->falc, 0, sizeof(falc_t));
2600					}
2601				} else {
2602					pc300stats_t pc300stats;
2603
2604					memset(&pc300stats, 0, sizeof(pc300stats_t));
2605					pc300stats.hw_type = card->hw.type;
2606					pc300stats.line_on = card->chan[ch].d.line_on;
2607					pc300stats.line_off = card->chan[ch].d.line_off;
2608					memcpy(&pc300stats.gen_stats, &dev->stats,
2609					       sizeof(dev->stats));
2610					if (card->hw.type == PC300_TE)
2611						memcpy(&pc300stats.te_stats,&chan->falc,sizeof(falc_t));
2612				    	if (copy_to_user(arg, &pc300stats, sizeof(pc300stats_t)))
2613						return -EFAULT;
2614				}
2615				return 0;
2616			}
2617
2618		case SIOCGPC300UTILSTATUS:
2619			{
2620				struct pc300status pc300status;
2621
2622				pc300status.hw_type = card->hw.type;
2623				if (card->hw.type == PC300_TE) {
2624					pc300status.te_status.sync = chan->falc.sync;
2625					pc300status.te_status.red_alarm = chan->falc.red_alarm;
2626					pc300status.te_status.blue_alarm = chan->falc.blue_alarm;
2627					pc300status.te_status.loss_fa = chan->falc.loss_fa;
2628					pc300status.te_status.yellow_alarm =chan->falc.yellow_alarm;
2629					pc300status.te_status.loss_mfa = chan->falc.loss_mfa;
2630					pc300status.te_status.prbs = chan->falc.prbs;
2631				} else {
2632					pc300status.gen_status.dcd =
2633						!(cpc_readb (scabase + M_REG(ST3, ch)) & ST3_DCD);
2634					pc300status.gen_status.cts =
2635						!(cpc_readb (scabase + M_REG(ST3, ch)) & ST3_CTS);
2636					pc300status.gen_status.rts =
2637						!(cpc_readb (scabase + M_REG(CTL, ch)) & CTL_RTS);
2638					pc300status.gen_status.dtr =
2639						!(cpc_readb (scabase + M_REG(CTL, ch)) & CTL_DTR);
2640					/* There is no DSR in HD64572 */
2641				}
2642				if (!arg ||
2643				    copy_to_user(arg, &pc300status, sizeof(pc300status_t)))
2644					return -EINVAL;
2645				return 0;
2646			}
2647
2648		case SIOCSPC300TRACE:
2649			/* Sets/resets a trace_flag for the respective device */
2650			if (!arg || copy_from_user(&d->trace_on, arg,sizeof(unsigned char)))
2651					return -EINVAL;
2652			return 0;
2653
2654		case SIOCSPC300LOOPBACK:
2655			{
2656				struct pc300loopback pc300loop;
2657
2658				/* TE boards only */
2659				if (card->hw.type != PC300_TE)
2660					return -EINVAL;
2661
2662				if (!arg ||
2663					copy_from_user(&pc300loop, arg, sizeof(pc300loopback_t)))
2664						return -EINVAL;
2665				switch (pc300loop.loop_type) {
2666					case PC300LOCLOOP:	/* Turn the local loop on/off */
2667						falc_local_loop(card, ch, pc300loop.loop_on);
2668						return 0;
2669
2670					case PC300REMLOOP:	/* Turn the remote loop on/off */
2671						falc_remote_loop(card, ch, pc300loop.loop_on);
2672						return 0;
2673
2674					case PC300PAYLOADLOOP:	/* Turn the payload loop on/off */
2675						falc_payload_loop(card, ch, pc300loop.loop_on);
2676						return 0;
2677
2678					case PC300GENLOOPUP:	/* Generate loop UP */
2679						if (pc300loop.loop_on) {
2680							falc_generate_loop_up_code (card, ch);
2681						} else {
2682							turn_off_xlu(card, ch);
2683						}
2684						return 0;
2685
2686					case PC300GENLOOPDOWN:	/* Generate loop DOWN */
2687						if (pc300loop.loop_on) {
2688							falc_generate_loop_down_code (card, ch);
2689						} else {
2690							turn_off_xld(card, ch);
2691						}
2692						return 0;
2693
2694					default:
2695						return -EINVAL;
2696				}
2697			}
2698
2699		case SIOCSPC300PATTERNTEST:
2700			/* Turn the pattern test on/off and show the errors counter */
2701			{
2702				struct pc300patterntst pc300patrntst;
2703
2704				/* TE boards only */
2705				if (card->hw.type != PC300_TE)
2706					return -EINVAL;
2707
2708				if (card->hw.cpld_id < 0x02) {
2709					/* CPLD_ID < 0x02 doesn't support pattern test */
2710					return -EINVAL;
2711				}
2712
2713				if (!arg ||
2714					copy_from_user(&pc300patrntst,arg,sizeof(pc300patterntst_t)))
2715						return -EINVAL;
2716				if (pc300patrntst.patrntst_on == 2) {
2717					if (chan->falc.prbs == 0) {
2718						falc_pattern_test(card, ch, 1);
2719					}
2720					pc300patrntst.num_errors =
2721						falc_pattern_test_error(card, ch);
2722					if (copy_to_user(arg, &pc300patrntst,
2723							 sizeof(pc300patterntst_t)))
2724							return -EINVAL;
2725				} else {
2726					falc_pattern_test(card, ch, pc300patrntst.patrntst_on);
2727				}
2728				return 0;
2729			}
2730
2731		case SIOCWANDEV:
2732			switch (ifr->ifr_settings.type) {
2733				case IF_GET_IFACE:
2734				{
2735					const size_t size = sizeof(sync_serial_settings);
2736					ifr->ifr_settings.type = conf->media;
2737					if (ifr->ifr_settings.size < size) {
2738						/* data size wanted */
2739						ifr->ifr_settings.size = size;
2740						return -ENOBUFS;
2741					}
2742
2743					if (copy_to_user(settings->ifs_ifsu.sync,
2744							 &conf->phys_settings, size)) {
2745						return -EFAULT;
2746					}
2747					return 0;
2748				}
2749
2750				case IF_IFACE_V35:
2751				case IF_IFACE_V24:
2752				case IF_IFACE_X21:
2753				{
2754					const size_t size = sizeof(sync_serial_settings);
2755
2756					if (!capable(CAP_NET_ADMIN)) {
2757						return -EPERM;
2758					}
2759					/* incorrect data len? */
2760					if (ifr->ifr_settings.size != size) {
2761						return -ENOBUFS;
2762					}
2763
2764					if (copy_from_user(&conf->phys_settings,
2765							   settings->ifs_ifsu.sync, size)) {
2766						return -EFAULT;
2767					}
2768
2769					if (conf->phys_settings.loopback) {
2770						cpc_writeb(card->hw.scabase + M_REG(MD2, ch),
2771							cpc_readb(card->hw.scabase + M_REG(MD2, ch)) |
2772							MD2_LOOP_MIR);
2773					}
2774					conf->media = ifr->ifr_settings.type;
2775					return 0;
2776				}
2777
2778				case IF_IFACE_T1:
2779				case IF_IFACE_E1:
2780				{
2781					const size_t te_size = sizeof(te1_settings);
2782					const size_t size = sizeof(sync_serial_settings);
2783
2784					if (!capable(CAP_NET_ADMIN)) {
2785						return -EPERM;
2786					}
2787
2788					/* incorrect data len? */
2789					if (ifr->ifr_settings.size != te_size) {
2790						return -ENOBUFS;
2791					}
2792
2793					if (copy_from_user(&conf->phys_settings,
2794							   settings->ifs_ifsu.te1, size)) {
2795						return -EFAULT;
2796					}/* Ignoring HDLC slot_map for a while */
2797
2798					if (conf->phys_settings.loopback) {
2799						cpc_writeb(card->hw.scabase + M_REG(MD2, ch),
2800							cpc_readb(card->hw.scabase + M_REG(MD2, ch)) |
2801							MD2_LOOP_MIR);
2802					}
2803					conf->media = ifr->ifr_settings.type;
2804					return 0;
2805				}
2806				default:
2807					return hdlc_ioctl(dev, ifr, cmd);
2808			}
2809
2810		default:
2811			return hdlc_ioctl(dev, ifr, cmd);
2812	}
2813}
2814
2815static int clock_rate_calc(u32 rate, u32 clock, int *br_io)
2816{
2817	int br, tc;
2818	int br_pwr, error;
2819
2820	*br_io = 0;
2821
2822	if (rate == 0)
2823		return 0;
2824
2825	for (br = 0, br_pwr = 1; br <= 9; br++, br_pwr <<= 1) {
2826		if ((tc = clock / br_pwr / rate) <= 0xff) {
2827			*br_io = br;
2828			break;
2829		}
2830	}
2831
2832	if (tc <= 0xff) {
2833		error = ((rate - (clock / br_pwr / rate)) / rate) * 1000;
2834		/* Errors bigger than +/- 1% won't be tolerated */
2835		if (error < -10 || error > 10)
2836			return -1;
2837		else
2838			return tc;
2839	} else {
2840		return -1;
2841	}
2842}
2843
2844static int ch_config(pc300dev_t * d)
2845{
2846	pc300ch_t *chan = (pc300ch_t *) d->chan;
2847	pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
2848	pc300_t *card = (pc300_t *) chan->card;
2849	void __iomem *scabase = card->hw.scabase;
2850	void __iomem *plxbase = card->hw.plxbase;
2851	int ch = chan->channel;
2852	u32 clkrate = chan->conf.phys_settings.clock_rate;
2853	u32 clktype = chan->conf.phys_settings.clock_type;
2854	u16 encoding = chan->conf.proto_settings.encoding;
2855	u16 parity = chan->conf.proto_settings.parity;
2856	u8 md0, md2;
2857
2858	/* Reset the channel */
2859	cpc_writeb(scabase + M_REG(CMD, ch), CMD_CH_RST);
2860
2861	/* Configure the SCA registers */
2862	switch (parity) {
2863		case PARITY_NONE:
2864			md0 = MD0_BIT_SYNC;
2865			break;
2866		case PARITY_CRC16_PR0:
2867			md0 = MD0_CRC16_0|MD0_CRCC0|MD0_BIT_SYNC;
2868			break;
2869		case PARITY_CRC16_PR1:
2870			md0 = MD0_CRC16_1|MD0_CRCC0|MD0_BIT_SYNC;
2871			break;
2872		case PARITY_CRC32_PR1_CCITT:
2873			md0 = MD0_CRC32|MD0_CRCC0|MD0_BIT_SYNC;
2874			break;
2875		case PARITY_CRC16_PR1_CCITT:
2876		default:
2877			md0 = MD0_CRC_CCITT|MD0_CRCC0|MD0_BIT_SYNC;
2878			break;
2879	}
2880	switch (encoding) {
2881		case ENCODING_NRZI:
2882			md2 = MD2_F_DUPLEX|MD2_ADPLL_X8|MD2_NRZI;
2883			break;
2884		case ENCODING_FM_MARK:	/* FM1 */
2885			md2 = MD2_F_DUPLEX|MD2_ADPLL_X8|MD2_FM|MD2_FM1;
2886			break;
2887		case ENCODING_FM_SPACE:	/* FM0 */
2888			md2 = MD2_F_DUPLEX|MD2_ADPLL_X8|MD2_FM|MD2_FM0;
2889			break;
2890		case ENCODING_MANCHESTER: /* It's not working... */
2891			md2 = MD2_F_DUPLEX|MD2_ADPLL_X8|MD2_FM|MD2_MANCH;
2892			break;
2893		case ENCODING_NRZ:
2894		default:
2895			md2 = MD2_F_DUPLEX|MD2_ADPLL_X8|MD2_NRZ;
2896			break;
2897	}
2898	cpc_writeb(scabase + M_REG(MD0, ch), md0);
2899	cpc_writeb(scabase + M_REG(MD1, ch), 0);
2900	cpc_writeb(scabase + M_REG(MD2, ch), md2);
2901 	cpc_writeb(scabase + M_REG(IDL, ch), 0x7e);
2902	cpc_writeb(scabase + M_REG(CTL, ch), CTL_URSKP | CTL_IDLC);
2903
2904	/* Configure HW media */
2905	switch (card->hw.type) {
2906		case PC300_RSV:
2907			if (conf->media == IF_IFACE_V35) {
2908				cpc_writel((plxbase + card->hw.gpioc_reg),
2909					   cpc_readl(plxbase + card->hw.gpioc_reg) | PC300_CHMEDIA_MASK(ch));
2910			} else {
2911				cpc_writel((plxbase + card->hw.gpioc_reg),
2912					   cpc_readl(plxbase + card->hw.gpioc_reg) & ~PC300_CHMEDIA_MASK(ch));
2913			}
2914			break;
2915
2916		case PC300_X21:
2917			break;
2918
2919		case PC300_TE:
2920			te_config(card, ch);
2921			break;
2922	}
2923
2924	switch (card->hw.type) {
2925		case PC300_RSV:
2926		case PC300_X21:
2927			if (clktype == CLOCK_INT || clktype == CLOCK_TXINT) {
2928				int tmc, br;
2929
2930				/* Calculate the clkrate parameters */
2931				tmc = clock_rate_calc(clkrate, card->hw.clock, &br);
2932				if (tmc < 0)
2933					return -EIO;
2934				cpc_writeb(scabase + M_REG(TMCT, ch), tmc);
2935				cpc_writeb(scabase + M_REG(TXS, ch),
2936					   (TXS_DTRXC | TXS_IBRG | br));
2937				if (clktype == CLOCK_INT) {
2938					cpc_writeb(scabase + M_REG(TMCR, ch), tmc);
2939					cpc_writeb(scabase + M_REG(RXS, ch),
2940						   (RXS_IBRG | br));
2941				} else {
2942					cpc_writeb(scabase + M_REG(TMCR, ch), 1);
2943					cpc_writeb(scabase + M_REG(RXS, ch), 0);
2944				}
2945	    			if (card->hw.type == PC300_X21) {
2946					cpc_writeb(scabase + M_REG(GPO, ch), 1);
2947					cpc_writeb(scabase + M_REG(EXS, ch), EXS_TES1 | EXS_RES1);
2948				} else {
2949					cpc_writeb(scabase + M_REG(EXS, ch), EXS_TES1);
2950				}
2951			} else {
2952				cpc_writeb(scabase + M_REG(TMCT, ch), 1);
2953				if (clktype == CLOCK_EXT) {
2954					cpc_writeb(scabase + M_REG(TXS, ch),
2955						   TXS_DTRXC);
2956				} else {
2957					cpc_writeb(scabase + M_REG(TXS, ch),
2958						   TXS_DTRXC|TXS_RCLK);
2959				}
2960	    			cpc_writeb(scabase + M_REG(TMCR, ch), 1);
2961				cpc_writeb(scabase + M_REG(RXS, ch), 0);
2962				if (card->hw.type == PC300_X21) {
2963					cpc_writeb(scabase + M_REG(GPO, ch), 0);
2964					cpc_writeb(scabase + M_REG(EXS, ch), EXS_TES1 | EXS_RES1);
2965				} else {
2966					cpc_writeb(scabase + M_REG(EXS, ch), EXS_TES1);
2967				}
2968			}
2969			break;
2970
2971		case PC300_TE:
2972			/* SCA always receives clock from the FALC chip */
2973			cpc_writeb(scabase + M_REG(TMCT, ch), 1);
2974			cpc_writeb(scabase + M_REG(TXS, ch), 0);
2975			cpc_writeb(scabase + M_REG(TMCR, ch), 1);
2976			cpc_writeb(scabase + M_REG(RXS, ch), 0);
2977			cpc_writeb(scabase + M_REG(EXS, ch), 0);
2978			break;
2979	}
2980
2981	/* Enable Interrupts */
2982	cpc_writel(scabase + IER0,
2983		   cpc_readl(scabase + IER0) |
2984		   IR0_M(IR0_RXINTA, ch) |
2985		   IR0_DRX(IR0_EFT | IR0_DMIA | IR0_DMIB, ch) |
2986		   IR0_DTX(IR0_EFT | IR0_DMIA | IR0_DMIB, ch));
2987	cpc_writeb(scabase + M_REG(IE0, ch),
2988		   cpc_readl(scabase + M_REG(IE0, ch)) | IE0_RXINTA);
2989	cpc_writeb(scabase + M_REG(IE1, ch),
2990		   cpc_readl(scabase + M_REG(IE1, ch)) | IE1_CDCD);
2991
2992	return 0;
2993}
2994
2995static int rx_config(pc300dev_t * d)
2996{
2997	pc300ch_t *chan = (pc300ch_t *) d->chan;
2998	pc300_t *card = (pc300_t *) chan->card;
2999	void __iomem *scabase = card->hw.scabase;
3000	int ch = chan->channel;
3001
3002	cpc_writeb(scabase + DSR_RX(ch), 0);
3003
3004	/* General RX settings */
3005	cpc_writeb(scabase + M_REG(RRC, ch), 0);
3006	cpc_writeb(scabase + M_REG(RNR, ch), 16);
3007
3008	/* Enable reception */
3009	cpc_writeb(scabase + M_REG(CMD, ch), CMD_RX_CRC_INIT);
3010	cpc_writeb(scabase + M_REG(CMD, ch), CMD_RX_ENA);
3011
3012	/* Initialize DMA stuff */
3013	chan->rx_first_bd = 0;
3014	chan->rx_last_bd = N_DMA_RX_BUF - 1;
3015	rx_dma_buf_init(card, ch);
3016	cpc_writeb(scabase + DCR_RX(ch), DCR_FCT_CLR);
3017	cpc_writeb(scabase + DMR_RX(ch), (DMR_TMOD | DMR_NF));
3018	cpc_writeb(scabase + DIR_RX(ch), (DIR_EOM | DIR_BOF));
3019
3020	/* Start DMA */
3021	rx_dma_start(card, ch);
3022
3023	return 0;
3024}
3025
3026static int tx_config(pc300dev_t * d)
3027{
3028	pc300ch_t *chan = (pc300ch_t *) d->chan;
3029	pc300_t *card = (pc300_t *) chan->card;
3030	void __iomem *scabase = card->hw.scabase;
3031	int ch = chan->channel;
3032
3033	cpc_writeb(scabase + DSR_TX(ch), 0);
3034
3035	/* General TX settings */
3036	cpc_writeb(scabase + M_REG(TRC0, ch), 0);
3037	cpc_writeb(scabase + M_REG(TFS, ch), 32);
3038	cpc_writeb(scabase + M_REG(TNR0, ch), 20);
3039	cpc_writeb(scabase + M_REG(TNR1, ch), 48);
3040	cpc_writeb(scabase + M_REG(TCR, ch), 8);
3041
3042	/* Enable transmission */
3043	cpc_writeb(scabase + M_REG(CMD, ch), CMD_TX_CRC_INIT);
3044
3045	/* Initialize DMA stuff */
3046	chan->tx_first_bd = 0;
3047	chan->tx_next_bd = 0;
3048	tx_dma_buf_init(card, ch);
3049	cpc_writeb(scabase + DCR_TX(ch), DCR_FCT_CLR);
3050	cpc_writeb(scabase + DMR_TX(ch), (DMR_TMOD | DMR_NF));
3051	cpc_writeb(scabase + DIR_TX(ch), (DIR_EOM | DIR_BOF | DIR_UDRF));
3052	cpc_writel(scabase + DTX_REG(CDAL, ch), TX_BD_ADDR(ch, chan->tx_first_bd));
3053	cpc_writel(scabase + DTX_REG(EDAL, ch), TX_BD_ADDR(ch, chan->tx_next_bd));
3054
3055	return 0;
3056}
3057
3058static int cpc_attach(struct net_device *dev, unsigned short encoding,
3059		      unsigned short parity)
3060{
3061	pc300dev_t *d = (pc300dev_t *)dev_to_hdlc(dev)->priv;
3062	pc300ch_t *chan = (pc300ch_t *)d->chan;
3063	pc300_t *card = (pc300_t *)chan->card;
3064	pc300chconf_t *conf = (pc300chconf_t *)&chan->conf;
3065
3066	if (card->hw.type == PC300_TE) {
3067		if (encoding != ENCODING_NRZ && encoding != ENCODING_NRZI) {
3068			return -EINVAL;
3069		}
3070	} else {
3071		if (encoding != ENCODING_NRZ && encoding != ENCODING_NRZI &&
3072		    encoding != ENCODING_FM_MARK && encoding != ENCODING_FM_SPACE) {
3073			/* Driver doesn't support ENCODING_MANCHESTER yet */
3074			return -EINVAL;
3075		}
3076	}
3077
3078	if (parity != PARITY_NONE && parity != PARITY_CRC16_PR0 &&
3079	    parity != PARITY_CRC16_PR1 && parity != PARITY_CRC32_PR1_CCITT &&
3080	    parity != PARITY_CRC16_PR1_CCITT) {
3081		return -EINVAL;
3082	}
3083
3084	conf->proto_settings.encoding = encoding;
3085	conf->proto_settings.parity = parity;
3086	return 0;
3087}
3088
3089static int cpc_opench(pc300dev_t * d)
3090{
3091	pc300ch_t *chan = (pc300ch_t *) d->chan;
3092	pc300_t *card = (pc300_t *) chan->card;
3093	int ch = chan->channel, rc;
3094	void __iomem *scabase = card->hw.scabase;
3095
3096	rc = ch_config(d);
3097	if (rc)
3098		return rc;
3099
3100	rx_config(d);
3101
3102	tx_config(d);
3103
3104	/* Assert RTS and DTR */
3105	cpc_writeb(scabase + M_REG(CTL, ch),
3106		   cpc_readb(scabase + M_REG(CTL, ch)) & ~(CTL_RTS | CTL_DTR));
3107
3108	return 0;
3109}
3110
3111static void cpc_closech(pc300dev_t * d)
3112{
3113	pc300ch_t *chan = (pc300ch_t *) d->chan;
3114	pc300_t *card = (pc300_t *) chan->card;
3115	falc_t *pfalc = (falc_t *) & chan->falc;
3116	int ch = chan->channel;
3117
3118	cpc_writeb(card->hw.scabase + M_REG(CMD, ch), CMD_CH_RST);
3119	rx_dma_stop(card, ch);
3120	tx_dma_stop(card, ch);
3121
3122	if (card->hw.type == PC300_TE) {
3123		memset(pfalc, 0, sizeof(falc_t));
3124		cpc_writeb(card->hw.falcbase + card->hw.cpld_reg2,
3125			   cpc_readb(card->hw.falcbase + card->hw.cpld_reg2) &
3126			   ~((CPLD_REG2_FALC_TX_CLK | CPLD_REG2_FALC_RX_CLK |
3127			      CPLD_REG2_FALC_LED2) << (2 * ch)));
3128		/* Reset the FALC chip */
3129		cpc_writeb(card->hw.falcbase + card->hw.cpld_reg1,
3130			   cpc_readb(card->hw.falcbase + card->hw.cpld_reg1) |
3131			   (CPLD_REG1_FALC_RESET << (2 * ch)));
3132		udelay(10000);
3133		cpc_writeb(card->hw.falcbase + card->hw.cpld_reg1,
3134			   cpc_readb(card->hw.falcbase + card->hw.cpld_reg1) &
3135			   ~(CPLD_REG1_FALC_RESET << (2 * ch)));
3136	}
3137}
3138
3139int cpc_open(struct net_device *dev)
3140{
3141	pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
3142	struct ifreq ifr;
3143	int result;
3144
3145#ifdef	PC300_DEBUG_OTHER
3146	printk("pc300: cpc_open");
3147#endif
3148
3149	result = hdlc_open(dev);
3150
3151	if (result)
3152		return result;
3153
3154	sprintf(ifr.ifr_name, "%s", dev->name);
3155	result = cpc_opench(d);
3156	if (result)
3157		goto err_out;
3158
3159	netif_start_queue(dev);
3160	return 0;
3161
3162err_out:
3163	hdlc_close(dev);
3164	return result;
3165}
3166
3167static int cpc_close(struct net_device *dev)
3168{
3169	pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
3170	pc300ch_t *chan = (pc300ch_t *) d->chan;
3171	pc300_t *card = (pc300_t *) chan->card;
3172	unsigned long flags;
3173
3174#ifdef	PC300_DEBUG_OTHER
3175	printk("pc300: cpc_close");
3176#endif
3177
3178	netif_stop_queue(dev);
3179
3180	CPC_LOCK(card, flags);
3181	cpc_closech(d);
3182	CPC_UNLOCK(card, flags);
3183
3184	hdlc_close(dev);
3185
3186#ifdef CONFIG_PC300_MLPPP
3187	if (chan->conf.proto == PC300_PROTO_MLPPP) {
3188		cpc_tty_unregister_service(d);
3189		chan->conf.proto = 0xffff;
3190	}
3191#endif
3192
3193	return 0;
3194}
3195
3196static u32 detect_ram(pc300_t * card)
3197{
3198	u32 i;
3199	u8 data;
3200	void __iomem *rambase = card->hw.rambase;
3201
3202	card->hw.ramsize = PC300_RAMSIZE;
3203	/* Let's find out how much RAM is present on this board */
3204	for (i = 0; i < card->hw.ramsize; i++) {
3205		data = (u8)(i & 0xff);
3206		cpc_writeb(rambase + i, data);
3207		if (cpc_readb(rambase + i) != data) {
3208			break;
3209		}
3210	}
3211	return i;
3212}
3213
3214static void plx_init(pc300_t * card)
3215{
3216	struct RUNTIME_9050 __iomem *plx_ctl = card->hw.plxbase;
3217
3218	/* Reset PLX */
3219	cpc_writel(&plx_ctl->init_ctrl,
3220		   cpc_readl(&plx_ctl->init_ctrl) | 0x40000000);
3221	udelay(10000L);
3222	cpc_writel(&plx_ctl->init_ctrl,
3223		   cpc_readl(&plx_ctl->init_ctrl) & ~0x40000000);
3224
3225	/* Reload Config. Registers from EEPROM */
3226	cpc_writel(&plx_ctl->init_ctrl,
3227		   cpc_readl(&plx_ctl->init_ctrl) | 0x20000000);
3228	udelay(10000L);
3229	cpc_writel(&plx_ctl->init_ctrl,
3230		   cpc_readl(&plx_ctl->init_ctrl) & ~0x20000000);
3231
3232}
3233
3234static void show_version(void)
3235{
3236	char *rcsvers, *rcsdate, *tmp;
3237
3238	rcsvers = strchr(rcsid, ' ');
3239	rcsvers++;
3240	tmp = strchr(rcsvers, ' ');
3241	*tmp++ = '\0';
3242	rcsdate = strchr(tmp, ' ');
3243	rcsdate++;
3244	tmp = strrchr(rcsdate, ' ');
3245	*tmp = '\0';
3246	pr_info("Cyclades-PC300 driver %s %s\n", rcsvers, rcsdate);
3247}				/* show_version */
3248
3249static const struct net_device_ops cpc_netdev_ops = {
3250	.ndo_open		= cpc_open,
3251	.ndo_stop		= cpc_close,
3252	.ndo_tx_timeout		= cpc_tx_timeout,
3253	.ndo_set_mac_address	= NULL,
3254	.ndo_change_mtu		= cpc_change_mtu,
3255	.ndo_do_ioctl		= cpc_ioctl,
3256	.ndo_validate_addr	= eth_validate_addr,
3257};
3258
3259static void cpc_init_card(pc300_t * card)
3260{
3261	int i, devcount = 0;
3262	static int board_nbr = 1;
3263
3264	/* Enable interrupts on the PCI bridge */
3265	plx_init(card);
3266	cpc_writew(card->hw.plxbase + card->hw.intctl_reg,
3267		   cpc_readw(card->hw.plxbase + card->hw.intctl_reg) | 0x0040);
3268
3269#ifdef USE_PCI_CLOCK
3270	/* Set board clock to PCI clock */
3271	cpc_writel(card->hw.plxbase + card->hw.gpioc_reg,
3272		   cpc_readl(card->hw.plxbase + card->hw.gpioc_reg) | 0x00000004UL);
3273	card->hw.clock = PC300_PCI_CLOCK;
3274#else
3275	/* Set board clock to internal oscillator clock */
3276	cpc_writel(card->hw.plxbase + card->hw.gpioc_reg,
3277		   cpc_readl(card->hw.plxbase + card->hw.gpioc_reg) & ~0x00000004UL);
3278	card->hw.clock = PC300_OSC_CLOCK;
3279#endif
3280
3281	/* Detect actual on-board RAM size */
3282	card->hw.ramsize = detect_ram(card);
3283
3284	/* Set Global SCA-II registers */
3285	cpc_writeb(card->hw.scabase + PCR, PCR_PR2);
3286	cpc_writeb(card->hw.scabase + BTCR, 0x10);
3287	cpc_writeb(card->hw.scabase + WCRL, 0);
3288	cpc_writeb(card->hw.scabase + DMER, 0x80);
3289
3290	if (card->hw.type == PC300_TE) {
3291		u8 reg1;
3292
3293		/* Check CPLD version */
3294		reg1 = cpc_readb(card->hw.falcbase + CPLD_REG1);
3295		cpc_writeb(card->hw.falcbase + CPLD_REG1, (reg1 + 0x5a));
3296		if (cpc_readb(card->hw.falcbase + CPLD_REG1) == reg1) {
3297			/* New CPLD */
3298			card->hw.cpld_id = cpc_readb(card->hw.falcbase + CPLD_ID_REG);
3299			card->hw.cpld_reg1 = CPLD_V2_REG1;
3300			card->hw.cpld_reg2 = CPLD_V2_REG2;
3301		} else {
3302			/* old CPLD */
3303			card->hw.cpld_id = 0;
3304			card->hw.cpld_reg1 = CPLD_REG1;
3305			card->hw.cpld_reg2 = CPLD_REG2;
3306			cpc_writeb(card->hw.falcbase + CPLD_REG1, reg1);
3307		}
3308
3309		/* Enable the board's global clock */
3310		cpc_writeb(card->hw.falcbase + card->hw.cpld_reg1,
3311			   cpc_readb(card->hw.falcbase + card->hw.cpld_reg1) |
3312			   CPLD_REG1_GLOBAL_CLK);
3313
3314	}
3315
3316	for (i = 0; i < card->hw.nchan; i++) {
3317		pc300ch_t *chan = &card->chan[i];
3318		pc300dev_t *d = &chan->d;
3319		hdlc_device *hdlc;
3320		struct net_device *dev;
3321
3322		chan->card = card;
3323		chan->channel = i;
3324		chan->conf.phys_settings.clock_rate = 0;
3325		chan->conf.phys_settings.clock_type = CLOCK_EXT;
3326		chan->conf.proto_settings.encoding = ENCODING_NRZ;
3327		chan->conf.proto_settings.parity = PARITY_CRC16_PR1_CCITT;
3328		switch (card->hw.type) {
3329			case PC300_TE:
3330				chan->conf.media = IF_IFACE_T1;
3331				chan->conf.lcode = PC300_LC_B8ZS;
3332				chan->conf.fr_mode = PC300_FR_ESF;
3333				chan->conf.lbo = PC300_LBO_0_DB;
3334				chan->conf.rx_sens = PC300_RX_SENS_SH;
3335				chan->conf.tslot_bitmap = 0xffffffffUL;
3336				break;
3337
3338			case PC300_X21:
3339				chan->conf.media = IF_IFACE_X21;
3340				break;
3341
3342			case PC300_RSV:
3343			default:
3344				chan->conf.media = IF_IFACE_V35;
3345				break;
3346		}
3347		chan->conf.proto = IF_PROTO_PPP;
3348		chan->tx_first_bd = 0;
3349		chan->tx_next_bd = 0;
3350		chan->rx_first_bd = 0;
3351		chan->rx_last_bd = N_DMA_RX_BUF - 1;
3352		chan->nfree_tx_bd = N_DMA_TX_BUF;
3353
3354		d->chan = chan;
3355		d->trace_on = 0;
3356		d->line_on = 0;
3357		d->line_off = 0;
3358
3359		dev = alloc_hdlcdev(d);
3360		if (dev == NULL)
3361			continue;
3362
3363		hdlc = dev_to_hdlc(dev);
3364		hdlc->xmit = cpc_queue_xmit;
3365		hdlc->attach = cpc_attach;
3366		d->dev = dev;
3367		dev->mem_start = card->hw.ramphys;
3368		dev->mem_end = card->hw.ramphys + card->hw.ramsize - 1;
3369		dev->irq = card->hw.irq;
3370		dev->tx_queue_len = PC300_TX_QUEUE_LEN;
3371		dev->mtu = PC300_DEF_MTU;
3372
3373		dev->netdev_ops = &cpc_netdev_ops;
3374		dev->watchdog_timeo = PC300_TX_TIMEOUT;
3375
3376		if (register_hdlc_device(dev) == 0) {
3377			printk("%s: Cyclades-PC300/", dev->name);
3378			switch (card->hw.type) {
3379				case PC300_TE:
3380					if (card->hw.bus == PC300_PMC) {
3381						printk("TE-M");
3382					} else {
3383						printk("TE  ");
3384					}
3385					break;
3386
3387				case PC300_X21:
3388					printk("X21 ");
3389					break;
3390
3391				case PC300_RSV:
3392				default:
3393					printk("RSV ");
3394					break;
3395			}
3396			printk (" #%d, %dKB of RAM at 0x%08x, IRQ%d, channel %d.\n",
3397				 board_nbr, card->hw.ramsize / 1024,
3398				 card->hw.ramphys, card->hw.irq, i + 1);
3399			devcount++;
3400		} else {
3401			printk ("Dev%d on card(0x%08x): unable to allocate i/f name.\n",
3402				 i + 1, card->hw.ramphys);
3403			free_netdev(dev);
3404			continue;
3405		}
3406	}
3407	spin_lock_init(&card->card_lock);
3408
3409	board_nbr++;
3410}
3411
3412static int __devinit
3413cpc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
3414{
3415	int err, eeprom_outdated = 0;
3416	u16 device_id;
3417	pc300_t *card;
3418
3419	if ((err = pci_enable_device(pdev)) < 0)
3420		return err;
3421
3422	card = kzalloc(sizeof(pc300_t), GFP_KERNEL);
3423	if (card == NULL) {
3424		printk("PC300 found at RAM 0x%016llx, "
3425		       "but could not allocate card structure.\n",
3426		       (unsigned long long)pci_resource_start(pdev, 3));
3427		err = -ENOMEM;
3428		goto err_disable_dev;
3429	}
3430
3431	err = -ENODEV;
3432
3433	/* read PCI configuration area */
3434	device_id = ent->device;
3435	card->hw.irq = pdev->irq;
3436	card->hw.iophys = pci_resource_start(pdev, 1);
3437	card->hw.iosize = pci_resource_len(pdev, 1);
3438	card->hw.scaphys = pci_resource_start(pdev, 2);
3439	card->hw.scasize = pci_resource_len(pdev, 2);
3440	card->hw.ramphys = pci_resource_start(pdev, 3);
3441	card->hw.alloc_ramsize = pci_resource_len(pdev, 3);
3442	card->hw.falcphys = pci_resource_start(pdev, 4);
3443	card->hw.falcsize = pci_resource_len(pdev, 4);
3444	card->hw.plxphys = pci_resource_start(pdev, 5);
3445	card->hw.plxsize = pci_resource_len(pdev, 5);
3446
3447	switch (device_id) {
3448		case PCI_DEVICE_ID_PC300_RX_1:
3449		case PCI_DEVICE_ID_PC300_TE_1:
3450		case PCI_DEVICE_ID_PC300_TE_M_1:
3451			card->hw.nchan = 1;
3452			break;
3453
3454		case PCI_DEVICE_ID_PC300_RX_2:
3455		case PCI_DEVICE_ID_PC300_TE_2:
3456		case PCI_DEVICE_ID_PC300_TE_M_2:
3457		default:
3458			card->hw.nchan = PC300_MAXCHAN;
3459			break;
3460	}
3461#ifdef PC300_DEBUG_PCI
3462	printk("cpc (bus=0x0%x,pci_id=0x%x,", pdev->bus->number, pdev->devfn);
3463	printk("rev_id=%d) IRQ%d\n", pdev->revision, card->hw.irq);
3464	printk("cpc:found  ramaddr=0x%08lx plxaddr=0x%08lx "
3465	       "ctladdr=0x%08lx falcaddr=0x%08lx\n",
3466	       card->hw.ramphys, card->hw.plxphys, card->hw.scaphys,
3467	       card->hw.falcphys);
3468#endif
3469	/* Although we don't use this I/O region, we should
3470	 * request it from the kernel anyway, to avoid problems
3471	 * with other drivers accessing it. */
3472	if (!request_region(card->hw.iophys, card->hw.iosize, "PLX Registers")) {
3473		/* In case we can't allocate it, warn user */
3474		printk("WARNING: couldn't allocate I/O region for PC300 board "
3475		       "at 0x%08x!\n", card->hw.ramphys);
3476	}
3477
3478	if (card->hw.plxphys) {
3479		pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0, card->hw.plxphys);
3480	} else {
3481		eeprom_outdated = 1;
3482		card->hw.plxphys = pci_resource_start(pdev, 0);
3483		card->hw.plxsize = pci_resource_len(pdev, 0);
3484	}
3485
3486	if (!request_mem_region(card->hw.plxphys, card->hw.plxsize,
3487				"PLX Registers")) {
3488		printk("PC300 found at RAM 0x%08x, "
3489		       "but could not allocate PLX mem region.\n",
3490		       card->hw.ramphys);
3491		goto err_release_io;
3492	}
3493	if (!request_mem_region(card->hw.ramphys, card->hw.alloc_ramsize,
3494				"On-board RAM")) {
3495		printk("PC300 found at RAM 0x%08x, "
3496		       "but could not allocate RAM mem region.\n",
3497		       card->hw.ramphys);
3498		goto err_release_plx;
3499	}
3500	if (!request_mem_region(card->hw.scaphys, card->hw.scasize,
3501				"SCA-II Registers")) {
3502		printk("PC300 found at RAM 0x%08x, "
3503		       "but could not allocate SCA mem region.\n",
3504		       card->hw.ramphys);
3505		goto err_release_ram;
3506	}
3507
3508	card->hw.plxbase = ioremap(card->hw.plxphys, card->hw.plxsize);
3509	card->hw.rambase = ioremap(card->hw.ramphys, card->hw.alloc_ramsize);
3510	card->hw.scabase = ioremap(card->hw.scaphys, card->hw.scasize);
3511	switch (device_id) {
3512		case PCI_DEVICE_ID_PC300_TE_1:
3513		case PCI_DEVICE_ID_PC300_TE_2:
3514		case PCI_DEVICE_ID_PC300_TE_M_1:
3515		case PCI_DEVICE_ID_PC300_TE_M_2:
3516			request_mem_region(card->hw.falcphys, card->hw.falcsize,
3517					   "FALC Registers");
3518			card->hw.falcbase = ioremap(card->hw.falcphys, card->hw.falcsize);
3519			break;
3520
3521		case PCI_DEVICE_ID_PC300_RX_1:
3522		case PCI_DEVICE_ID_PC300_RX_2:
3523		default:
3524			card->hw.falcbase = NULL;
3525			break;
3526	}
3527
3528#ifdef PC300_DEBUG_PCI
3529	printk("cpc: relocate ramaddr=0x%08lx plxaddr=0x%08lx "
3530	       "ctladdr=0x%08lx falcaddr=0x%08lx\n",
3531	       card->hw.rambase, card->hw.plxbase, card->hw.scabase,
3532	       card->hw.falcbase);
3533#endif
3534
3535	/* Set PCI drv pointer to the card structure */
3536	pci_set_drvdata(pdev, card);
3537
3538	/* Set board type */
3539	switch (device_id) {
3540		case PCI_DEVICE_ID_PC300_TE_1:
3541		case PCI_DEVICE_ID_PC300_TE_2:
3542		case PCI_DEVICE_ID_PC300_TE_M_1:
3543		case PCI_DEVICE_ID_PC300_TE_M_2:
3544			card->hw.type = PC300_TE;
3545
3546			if ((device_id == PCI_DEVICE_ID_PC300_TE_M_1) ||
3547			    (device_id == PCI_DEVICE_ID_PC300_TE_M_2)) {
3548				card->hw.bus = PC300_PMC;
3549				/* Set PLX register offsets */
3550				card->hw.gpioc_reg = 0x54;
3551				card->hw.intctl_reg = 0x4c;
3552			} else {
3553				card->hw.bus = PC300_PCI;
3554				/* Set PLX register offsets */
3555				card->hw.gpioc_reg = 0x50;
3556				card->hw.intctl_reg = 0x4c;
3557			}
3558			break;
3559
3560		case PCI_DEVICE_ID_PC300_RX_1:
3561		case PCI_DEVICE_ID_PC300_RX_2:
3562		default:
3563			card->hw.bus = PC300_PCI;
3564			/* Set PLX register offsets */
3565			card->hw.gpioc_reg = 0x50;
3566			card->hw.intctl_reg = 0x4c;
3567
3568			if ((cpc_readl(card->hw.plxbase + card->hw.gpioc_reg) & PC300_CTYPE_MASK)) {
3569				card->hw.type = PC300_X21;
3570			} else {
3571				card->hw.type = PC300_RSV;
3572			}
3573			break;
3574	}
3575
3576	/* Allocate IRQ */
3577	if (request_irq(card->hw.irq, cpc_intr, IRQF_SHARED, "Cyclades-PC300", card)) {
3578		printk ("PC300 found at RAM 0x%08x, but could not allocate IRQ%d.\n",
3579			 card->hw.ramphys, card->hw.irq);
3580		goto err_io_unmap;
3581	}
3582
3583	cpc_init_card(card);
3584
3585	if (eeprom_outdated)
3586		printk("WARNING: PC300 with outdated EEPROM.\n");
3587	return 0;
3588
3589err_io_unmap:
3590	iounmap(card->hw.plxbase);
3591	iounmap(card->hw.scabase);
3592	iounmap(card->hw.rambase);
3593	if (card->hw.type == PC300_TE) {
3594		iounmap(card->hw.falcbase);
3595		release_mem_region(card->hw.falcphys, card->hw.falcsize);
3596	}
3597	release_mem_region(card->hw.scaphys, card->hw.scasize);
3598err_release_ram:
3599	release_mem_region(card->hw.ramphys, card->hw.alloc_ramsize);
3600err_release_plx:
3601	release_mem_region(card->hw.plxphys, card->hw.plxsize);
3602err_release_io:
3603	release_region(card->hw.iophys, card->hw.iosize);
3604	kfree(card);
3605err_disable_dev:
3606	pci_disable_device(pdev);
3607	return err;
3608}
3609
3610static void __devexit cpc_remove_one(struct pci_dev *pdev)
3611{
3612	pc300_t *card = pci_get_drvdata(pdev);
3613
3614	if (card->hw.rambase) {
3615		int i;
3616
3617		/* Disable interrupts on the PCI bridge */
3618		cpc_writew(card->hw.plxbase + card->hw.intctl_reg,
3619			   cpc_readw(card->hw.plxbase + card->hw.intctl_reg) & ~(0x0040));
3620
3621		for (i = 0; i < card->hw.nchan; i++) {
3622			unregister_hdlc_device(card->chan[i].d.dev);
3623		}
3624		iounmap(card->hw.plxbase);
3625		iounmap(card->hw.scabase);
3626		iounmap(card->hw.rambase);
3627		release_mem_region(card->hw.plxphys, card->hw.plxsize);
3628		release_mem_region(card->hw.ramphys, card->hw.alloc_ramsize);
3629		release_mem_region(card->hw.scaphys, card->hw.scasize);
3630		release_region(card->hw.iophys, card->hw.iosize);
3631		if (card->hw.type == PC300_TE) {
3632			iounmap(card->hw.falcbase);
3633			release_mem_region(card->hw.falcphys, card->hw.falcsize);
3634		}
3635		for (i = 0; i < card->hw.nchan; i++)
3636			if (card->chan[i].d.dev)
3637				free_netdev(card->chan[i].d.dev);
3638		if (card->hw.irq)
3639			free_irq(card->hw.irq, card);
3640		kfree(card);
3641		pci_disable_device(pdev);
3642	}
3643}
3644
3645static struct pci_driver cpc_driver = {
3646	.name           = "pc300",
3647	.id_table       = cpc_pci_dev_id,
3648	.probe          = cpc_init_one,
3649	.remove         = __devexit_p(cpc_remove_one),
3650};
3651
3652static int __init cpc_init(void)
3653{
3654	show_version();
3655	return pci_register_driver(&cpc_driver);
3656}
3657
3658static void __exit cpc_cleanup_module(void)
3659{
3660	pci_unregister_driver(&cpc_driver);
3661}
3662
3663module_init(cpc_init);
3664module_exit(cpc_cleanup_module);
3665
3666MODULE_DESCRIPTION("Cyclades-PC300 cards driver");
3667MODULE_AUTHOR(  "Author: Ivan Passos <ivan@cyclades.com>\r\n"
3668                "Maintainer: PC300 Maintainer <pc300@cyclades.com");
3669MODULE_LICENSE("GPL");
3670
3671