Loading...
1/*
2 * Driver for high-speed SCC boards (those with DMA support)
3 * Copyright (C) 1997-2000 Klaus Kudielka
4 *
5 * S5SCC/DMA support by Janko Koleznik S52HI
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22
23#include <linux/module.h>
24#include <linux/bitops.h>
25#include <linux/delay.h>
26#include <linux/errno.h>
27#include <linux/if_arp.h>
28#include <linux/in.h>
29#include <linux/init.h>
30#include <linux/interrupt.h>
31#include <linux/ioport.h>
32#include <linux/kernel.h>
33#include <linux/mm.h>
34#include <linux/netdevice.h>
35#include <linux/slab.h>
36#include <linux/rtnetlink.h>
37#include <linux/sockios.h>
38#include <linux/workqueue.h>
39#include <linux/atomic.h>
40#include <asm/dma.h>
41#include <asm/io.h>
42#include <asm/irq.h>
43#include <asm/uaccess.h>
44#include <net/ax25.h>
45#include "z8530.h"
46
47
48/* Number of buffers per channel */
49
50#define NUM_TX_BUF 2 /* NUM_TX_BUF >= 1 (min. 2 recommended) */
51#define NUM_RX_BUF 6 /* NUM_RX_BUF >= 1 (min. 2 recommended) */
52#define BUF_SIZE 1576 /* BUF_SIZE >= mtu + hard_header_len */
53
54
55/* Cards supported */
56
57#define HW_PI { "Ottawa PI", 0x300, 0x20, 0x10, 8, \
58 0, 8, 1843200, 3686400 }
59#define HW_PI2 { "Ottawa PI2", 0x300, 0x20, 0x10, 8, \
60 0, 8, 3686400, 7372800 }
61#define HW_TWIN { "Gracilis PackeTwin", 0x200, 0x10, 0x10, 32, \
62 0, 4, 6144000, 6144000 }
63#define HW_S5 { "S5SCC/DMA", 0x200, 0x10, 0x10, 32, \
64 0, 8, 4915200, 9830400 }
65
66#define HARDWARE { HW_PI, HW_PI2, HW_TWIN, HW_S5 }
67
68#define TMR_0_HZ 25600 /* Frequency of timer 0 */
69
70#define TYPE_PI 0
71#define TYPE_PI2 1
72#define TYPE_TWIN 2
73#define TYPE_S5 3
74#define NUM_TYPES 4
75
76#define MAX_NUM_DEVS 32
77
78
79/* SCC chips supported */
80
81#define Z8530 0
82#define Z85C30 1
83#define Z85230 2
84
85#define CHIPNAMES { "Z8530", "Z85C30", "Z85230" }
86
87
88/* I/O registers */
89
90/* 8530 registers relative to card base */
91#define SCCB_CMD 0x00
92#define SCCB_DATA 0x01
93#define SCCA_CMD 0x02
94#define SCCA_DATA 0x03
95
96/* 8253/8254 registers relative to card base */
97#define TMR_CNT0 0x00
98#define TMR_CNT1 0x01
99#define TMR_CNT2 0x02
100#define TMR_CTRL 0x03
101
102/* Additional PI/PI2 registers relative to card base */
103#define PI_DREQ_MASK 0x04
104
105/* Additional PackeTwin registers relative to card base */
106#define TWIN_INT_REG 0x08
107#define TWIN_CLR_TMR1 0x09
108#define TWIN_CLR_TMR2 0x0a
109#define TWIN_SPARE_1 0x0b
110#define TWIN_DMA_CFG 0x08
111#define TWIN_SERIAL_CFG 0x09
112#define TWIN_DMA_CLR_FF 0x0a
113#define TWIN_SPARE_2 0x0b
114
115
116/* PackeTwin I/O register values */
117
118/* INT_REG */
119#define TWIN_SCC_MSK 0x01
120#define TWIN_TMR1_MSK 0x02
121#define TWIN_TMR2_MSK 0x04
122#define TWIN_INT_MSK 0x07
123
124/* SERIAL_CFG */
125#define TWIN_DTRA_ON 0x01
126#define TWIN_DTRB_ON 0x02
127#define TWIN_EXTCLKA 0x04
128#define TWIN_EXTCLKB 0x08
129#define TWIN_LOOPA_ON 0x10
130#define TWIN_LOOPB_ON 0x20
131#define TWIN_EI 0x80
132
133/* DMA_CFG */
134#define TWIN_DMA_HDX_T1 0x08
135#define TWIN_DMA_HDX_R1 0x0a
136#define TWIN_DMA_HDX_T3 0x14
137#define TWIN_DMA_HDX_R3 0x16
138#define TWIN_DMA_FDX_T3R1 0x1b
139#define TWIN_DMA_FDX_T1R3 0x1d
140
141
142/* Status values */
143
144#define IDLE 0
145#define TX_HEAD 1
146#define TX_DATA 2
147#define TX_PAUSE 3
148#define TX_TAIL 4
149#define RTS_OFF 5
150#define WAIT 6
151#define DCD_ON 7
152#define RX_ON 8
153#define DCD_OFF 9
154
155
156/* Ioctls */
157
158#define SIOCGSCCPARAM SIOCDEVPRIVATE
159#define SIOCSSCCPARAM (SIOCDEVPRIVATE+1)
160
161
162/* Data types */
163
164struct scc_param {
165 int pclk_hz; /* frequency of BRG input (don't change) */
166 int brg_tc; /* BRG terminal count; BRG disabled if < 0 */
167 int nrzi; /* 0 (nrz), 1 (nrzi) */
168 int clocks; /* see dmascc_cfg documentation */
169 int txdelay; /* [1/TMR_0_HZ] */
170 int txtimeout; /* [1/HZ] */
171 int txtail; /* [1/TMR_0_HZ] */
172 int waittime; /* [1/TMR_0_HZ] */
173 int slottime; /* [1/TMR_0_HZ] */
174 int persist; /* 1 ... 256 */
175 int dma; /* -1 (disable), 0, 1, 3 */
176 int txpause; /* [1/TMR_0_HZ] */
177 int rtsoff; /* [1/TMR_0_HZ] */
178 int dcdon; /* [1/TMR_0_HZ] */
179 int dcdoff; /* [1/TMR_0_HZ] */
180};
181
182struct scc_hardware {
183 char *name;
184 int io_region;
185 int io_delta;
186 int io_size;
187 int num_devs;
188 int scc_offset;
189 int tmr_offset;
190 int tmr_hz;
191 int pclk_hz;
192};
193
194struct scc_priv {
195 int type;
196 int chip;
197 struct net_device *dev;
198 struct scc_info *info;
199
200 int channel;
201 int card_base, scc_cmd, scc_data;
202 int tmr_cnt, tmr_ctrl, tmr_mode;
203 struct scc_param param;
204 char rx_buf[NUM_RX_BUF][BUF_SIZE];
205 int rx_len[NUM_RX_BUF];
206 int rx_ptr;
207 struct work_struct rx_work;
208 int rx_head, rx_tail, rx_count;
209 int rx_over;
210 char tx_buf[NUM_TX_BUF][BUF_SIZE];
211 int tx_len[NUM_TX_BUF];
212 int tx_ptr;
213 int tx_head, tx_tail, tx_count;
214 int state;
215 unsigned long tx_start;
216 int rr0;
217 spinlock_t *register_lock; /* Per scc_info */
218 spinlock_t ring_lock;
219};
220
221struct scc_info {
222 int irq_used;
223 int twin_serial_cfg;
224 struct net_device *dev[2];
225 struct scc_priv priv[2];
226 struct scc_info *next;
227 spinlock_t register_lock; /* Per device register lock */
228};
229
230
231/* Function declarations */
232static int setup_adapter(int card_base, int type, int n) __init;
233
234static void write_scc(struct scc_priv *priv, int reg, int val);
235static void write_scc_data(struct scc_priv *priv, int val, int fast);
236static int read_scc(struct scc_priv *priv, int reg);
237static int read_scc_data(struct scc_priv *priv);
238
239static int scc_open(struct net_device *dev);
240static int scc_close(struct net_device *dev);
241static int scc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
242static int scc_send_packet(struct sk_buff *skb, struct net_device *dev);
243static int scc_set_mac_address(struct net_device *dev, void *sa);
244
245static inline void tx_on(struct scc_priv *priv);
246static inline void rx_on(struct scc_priv *priv);
247static inline void rx_off(struct scc_priv *priv);
248static void start_timer(struct scc_priv *priv, int t, int r15);
249static inline unsigned char random(void);
250
251static inline void z8530_isr(struct scc_info *info);
252static irqreturn_t scc_isr(int irq, void *dev_id);
253static void rx_isr(struct scc_priv *priv);
254static void special_condition(struct scc_priv *priv, int rc);
255static void rx_bh(struct work_struct *);
256static void tx_isr(struct scc_priv *priv);
257static void es_isr(struct scc_priv *priv);
258static void tm_isr(struct scc_priv *priv);
259
260
261/* Initialization variables */
262
263static int io[MAX_NUM_DEVS] __initdata = { 0, };
264
265/* Beware! hw[] is also used in dmascc_exit(). */
266static struct scc_hardware hw[NUM_TYPES] = HARDWARE;
267
268
269/* Global variables */
270
271static struct scc_info *first;
272static unsigned long rand;
273
274
275MODULE_AUTHOR("Klaus Kudielka");
276MODULE_DESCRIPTION("Driver for high-speed SCC boards");
277module_param_array(io, int, NULL, 0);
278MODULE_LICENSE("GPL");
279
280static void __exit dmascc_exit(void)
281{
282 int i;
283 struct scc_info *info;
284
285 while (first) {
286 info = first;
287
288 /* Unregister devices */
289 for (i = 0; i < 2; i++)
290 unregister_netdev(info->dev[i]);
291
292 /* Reset board */
293 if (info->priv[0].type == TYPE_TWIN)
294 outb(0, info->dev[0]->base_addr + TWIN_SERIAL_CFG);
295 write_scc(&info->priv[0], R9, FHWRES);
296 release_region(info->dev[0]->base_addr,
297 hw[info->priv[0].type].io_size);
298
299 for (i = 0; i < 2; i++)
300 free_netdev(info->dev[i]);
301
302 /* Free memory */
303 first = info->next;
304 kfree(info);
305 }
306}
307
308static int __init dmascc_init(void)
309{
310 int h, i, j, n;
311 int base[MAX_NUM_DEVS], tcmd[MAX_NUM_DEVS], t0[MAX_NUM_DEVS],
312 t1[MAX_NUM_DEVS];
313 unsigned t_val;
314 unsigned long time, start[MAX_NUM_DEVS], delay[MAX_NUM_DEVS],
315 counting[MAX_NUM_DEVS];
316
317 /* Initialize random number generator */
318 rand = jiffies;
319 /* Cards found = 0 */
320 n = 0;
321 /* Warning message */
322 if (!io[0])
323 printk(KERN_INFO "dmascc: autoprobing (dangerous)\n");
324
325 /* Run autodetection for each card type */
326 for (h = 0; h < NUM_TYPES; h++) {
327
328 if (io[0]) {
329 /* User-specified I/O address regions */
330 for (i = 0; i < hw[h].num_devs; i++)
331 base[i] = 0;
332 for (i = 0; i < MAX_NUM_DEVS && io[i]; i++) {
333 j = (io[i] -
334 hw[h].io_region) / hw[h].io_delta;
335 if (j >= 0 && j < hw[h].num_devs &&
336 hw[h].io_region +
337 j * hw[h].io_delta == io[i]) {
338 base[j] = io[i];
339 }
340 }
341 } else {
342 /* Default I/O address regions */
343 for (i = 0; i < hw[h].num_devs; i++) {
344 base[i] =
345 hw[h].io_region + i * hw[h].io_delta;
346 }
347 }
348
349 /* Check valid I/O address regions */
350 for (i = 0; i < hw[h].num_devs; i++)
351 if (base[i]) {
352 if (!request_region
353 (base[i], hw[h].io_size, "dmascc"))
354 base[i] = 0;
355 else {
356 tcmd[i] =
357 base[i] + hw[h].tmr_offset +
358 TMR_CTRL;
359 t0[i] =
360 base[i] + hw[h].tmr_offset +
361 TMR_CNT0;
362 t1[i] =
363 base[i] + hw[h].tmr_offset +
364 TMR_CNT1;
365 }
366 }
367
368 /* Start timers */
369 for (i = 0; i < hw[h].num_devs; i++)
370 if (base[i]) {
371 /* Timer 0: LSB+MSB, Mode 3, TMR_0_HZ */
372 outb(0x36, tcmd[i]);
373 outb((hw[h].tmr_hz / TMR_0_HZ) & 0xFF,
374 t0[i]);
375 outb((hw[h].tmr_hz / TMR_0_HZ) >> 8,
376 t0[i]);
377 /* Timer 1: LSB+MSB, Mode 0, HZ/10 */
378 outb(0x70, tcmd[i]);
379 outb((TMR_0_HZ / HZ * 10) & 0xFF, t1[i]);
380 outb((TMR_0_HZ / HZ * 10) >> 8, t1[i]);
381 start[i] = jiffies;
382 delay[i] = 0;
383 counting[i] = 1;
384 /* Timer 2: LSB+MSB, Mode 0 */
385 outb(0xb0, tcmd[i]);
386 }
387 time = jiffies;
388 /* Wait until counter registers are loaded */
389 udelay(2000000 / TMR_0_HZ);
390
391 /* Timing loop */
392 while (jiffies - time < 13) {
393 for (i = 0; i < hw[h].num_devs; i++)
394 if (base[i] && counting[i]) {
395 /* Read back Timer 1: latch; read LSB; read MSB */
396 outb(0x40, tcmd[i]);
397 t_val =
398 inb(t1[i]) + (inb(t1[i]) << 8);
399 /* Also check whether counter did wrap */
400 if (t_val == 0 ||
401 t_val > TMR_0_HZ / HZ * 10)
402 counting[i] = 0;
403 delay[i] = jiffies - start[i];
404 }
405 }
406
407 /* Evaluate measurements */
408 for (i = 0; i < hw[h].num_devs; i++)
409 if (base[i]) {
410 if ((delay[i] >= 9 && delay[i] <= 11) &&
411 /* Ok, we have found an adapter */
412 (setup_adapter(base[i], h, n) == 0))
413 n++;
414 else
415 release_region(base[i],
416 hw[h].io_size);
417 }
418
419 } /* NUM_TYPES */
420
421 /* If any adapter was successfully initialized, return ok */
422 if (n)
423 return 0;
424
425 /* If no adapter found, return error */
426 printk(KERN_INFO "dmascc: no adapters found\n");
427 return -EIO;
428}
429
430module_init(dmascc_init);
431module_exit(dmascc_exit);
432
433static void __init dev_setup(struct net_device *dev)
434{
435 dev->type = ARPHRD_AX25;
436 dev->hard_header_len = AX25_MAX_HEADER_LEN;
437 dev->mtu = 1500;
438 dev->addr_len = AX25_ADDR_LEN;
439 dev->tx_queue_len = 64;
440 memcpy(dev->broadcast, &ax25_bcast, AX25_ADDR_LEN);
441 memcpy(dev->dev_addr, &ax25_defaddr, AX25_ADDR_LEN);
442}
443
444static const struct net_device_ops scc_netdev_ops = {
445 .ndo_open = scc_open,
446 .ndo_stop = scc_close,
447 .ndo_start_xmit = scc_send_packet,
448 .ndo_do_ioctl = scc_ioctl,
449 .ndo_set_mac_address = scc_set_mac_address,
450};
451
452static int __init setup_adapter(int card_base, int type, int n)
453{
454 int i, irq, chip;
455 struct scc_info *info;
456 struct net_device *dev;
457 struct scc_priv *priv;
458 unsigned long time;
459 unsigned int irqs;
460 int tmr_base = card_base + hw[type].tmr_offset;
461 int scc_base = card_base + hw[type].scc_offset;
462 char *chipnames[] = CHIPNAMES;
463
464 /* Initialize what is necessary for write_scc and write_scc_data */
465 info = kzalloc(sizeof(struct scc_info), GFP_KERNEL | GFP_DMA);
466 if (!info)
467 goto out;
468
469 info->dev[0] = alloc_netdev(0, "", dev_setup);
470 if (!info->dev[0]) {
471 printk(KERN_ERR "dmascc: "
472 "could not allocate memory for %s at %#3x\n",
473 hw[type].name, card_base);
474 goto out1;
475 }
476
477 info->dev[1] = alloc_netdev(0, "", dev_setup);
478 if (!info->dev[1]) {
479 printk(KERN_ERR "dmascc: "
480 "could not allocate memory for %s at %#3x\n",
481 hw[type].name, card_base);
482 goto out2;
483 }
484 spin_lock_init(&info->register_lock);
485
486 priv = &info->priv[0];
487 priv->type = type;
488 priv->card_base = card_base;
489 priv->scc_cmd = scc_base + SCCA_CMD;
490 priv->scc_data = scc_base + SCCA_DATA;
491 priv->register_lock = &info->register_lock;
492
493 /* Reset SCC */
494 write_scc(priv, R9, FHWRES | MIE | NV);
495
496 /* Determine type of chip by enabling SDLC/HDLC enhancements */
497 write_scc(priv, R15, SHDLCE);
498 if (!read_scc(priv, R15)) {
499 /* WR7' not present. This is an ordinary Z8530 SCC. */
500 chip = Z8530;
501 } else {
502 /* Put one character in TX FIFO */
503 write_scc_data(priv, 0, 0);
504 if (read_scc(priv, R0) & Tx_BUF_EMP) {
505 /* TX FIFO not full. This is a Z85230 ESCC with a 4-byte FIFO. */
506 chip = Z85230;
507 } else {
508 /* TX FIFO full. This is a Z85C30 SCC with a 1-byte FIFO. */
509 chip = Z85C30;
510 }
511 }
512 write_scc(priv, R15, 0);
513
514 /* Start IRQ auto-detection */
515 irqs = probe_irq_on();
516
517 /* Enable interrupts */
518 if (type == TYPE_TWIN) {
519 outb(0, card_base + TWIN_DMA_CFG);
520 inb(card_base + TWIN_CLR_TMR1);
521 inb(card_base + TWIN_CLR_TMR2);
522 info->twin_serial_cfg = TWIN_EI;
523 outb(info->twin_serial_cfg, card_base + TWIN_SERIAL_CFG);
524 } else {
525 write_scc(priv, R15, CTSIE);
526 write_scc(priv, R0, RES_EXT_INT);
527 write_scc(priv, R1, EXT_INT_ENAB);
528 }
529
530 /* Start timer */
531 outb(1, tmr_base + TMR_CNT1);
532 outb(0, tmr_base + TMR_CNT1);
533
534 /* Wait and detect IRQ */
535 time = jiffies;
536 while (jiffies - time < 2 + HZ / TMR_0_HZ);
537 irq = probe_irq_off(irqs);
538
539 /* Clear pending interrupt, disable interrupts */
540 if (type == TYPE_TWIN) {
541 inb(card_base + TWIN_CLR_TMR1);
542 } else {
543 write_scc(priv, R1, 0);
544 write_scc(priv, R15, 0);
545 write_scc(priv, R0, RES_EXT_INT);
546 }
547
548 if (irq <= 0) {
549 printk(KERN_ERR
550 "dmascc: could not find irq of %s at %#3x (irq=%d)\n",
551 hw[type].name, card_base, irq);
552 goto out3;
553 }
554
555 /* Set up data structures */
556 for (i = 0; i < 2; i++) {
557 dev = info->dev[i];
558 priv = &info->priv[i];
559 priv->type = type;
560 priv->chip = chip;
561 priv->dev = dev;
562 priv->info = info;
563 priv->channel = i;
564 spin_lock_init(&priv->ring_lock);
565 priv->register_lock = &info->register_lock;
566 priv->card_base = card_base;
567 priv->scc_cmd = scc_base + (i ? SCCB_CMD : SCCA_CMD);
568 priv->scc_data = scc_base + (i ? SCCB_DATA : SCCA_DATA);
569 priv->tmr_cnt = tmr_base + (i ? TMR_CNT2 : TMR_CNT1);
570 priv->tmr_ctrl = tmr_base + TMR_CTRL;
571 priv->tmr_mode = i ? 0xb0 : 0x70;
572 priv->param.pclk_hz = hw[type].pclk_hz;
573 priv->param.brg_tc = -1;
574 priv->param.clocks = TCTRxCP | RCRTxCP;
575 priv->param.persist = 256;
576 priv->param.dma = -1;
577 INIT_WORK(&priv->rx_work, rx_bh);
578 dev->ml_priv = priv;
579 sprintf(dev->name, "dmascc%i", 2 * n + i);
580 dev->base_addr = card_base;
581 dev->irq = irq;
582 dev->netdev_ops = &scc_netdev_ops;
583 dev->header_ops = &ax25_header_ops;
584 }
585 if (register_netdev(info->dev[0])) {
586 printk(KERN_ERR "dmascc: could not register %s\n",
587 info->dev[0]->name);
588 goto out3;
589 }
590 if (register_netdev(info->dev[1])) {
591 printk(KERN_ERR "dmascc: could not register %s\n",
592 info->dev[1]->name);
593 goto out4;
594 }
595
596
597 info->next = first;
598 first = info;
599 printk(KERN_INFO "dmascc: found %s (%s) at %#3x, irq %d\n",
600 hw[type].name, chipnames[chip], card_base, irq);
601 return 0;
602
603 out4:
604 unregister_netdev(info->dev[0]);
605 out3:
606 if (info->priv[0].type == TYPE_TWIN)
607 outb(0, info->dev[0]->base_addr + TWIN_SERIAL_CFG);
608 write_scc(&info->priv[0], R9, FHWRES);
609 free_netdev(info->dev[1]);
610 out2:
611 free_netdev(info->dev[0]);
612 out1:
613 kfree(info);
614 out:
615 return -1;
616}
617
618
619/* Driver functions */
620
621static void write_scc(struct scc_priv *priv, int reg, int val)
622{
623 unsigned long flags;
624 switch (priv->type) {
625 case TYPE_S5:
626 if (reg)
627 outb(reg, priv->scc_cmd);
628 outb(val, priv->scc_cmd);
629 return;
630 case TYPE_TWIN:
631 if (reg)
632 outb_p(reg, priv->scc_cmd);
633 outb_p(val, priv->scc_cmd);
634 return;
635 default:
636 spin_lock_irqsave(priv->register_lock, flags);
637 outb_p(0, priv->card_base + PI_DREQ_MASK);
638 if (reg)
639 outb_p(reg, priv->scc_cmd);
640 outb_p(val, priv->scc_cmd);
641 outb(1, priv->card_base + PI_DREQ_MASK);
642 spin_unlock_irqrestore(priv->register_lock, flags);
643 return;
644 }
645}
646
647
648static void write_scc_data(struct scc_priv *priv, int val, int fast)
649{
650 unsigned long flags;
651 switch (priv->type) {
652 case TYPE_S5:
653 outb(val, priv->scc_data);
654 return;
655 case TYPE_TWIN:
656 outb_p(val, priv->scc_data);
657 return;
658 default:
659 if (fast)
660 outb_p(val, priv->scc_data);
661 else {
662 spin_lock_irqsave(priv->register_lock, flags);
663 outb_p(0, priv->card_base + PI_DREQ_MASK);
664 outb_p(val, priv->scc_data);
665 outb(1, priv->card_base + PI_DREQ_MASK);
666 spin_unlock_irqrestore(priv->register_lock, flags);
667 }
668 return;
669 }
670}
671
672
673static int read_scc(struct scc_priv *priv, int reg)
674{
675 int rc;
676 unsigned long flags;
677 switch (priv->type) {
678 case TYPE_S5:
679 if (reg)
680 outb(reg, priv->scc_cmd);
681 return inb(priv->scc_cmd);
682 case TYPE_TWIN:
683 if (reg)
684 outb_p(reg, priv->scc_cmd);
685 return inb_p(priv->scc_cmd);
686 default:
687 spin_lock_irqsave(priv->register_lock, flags);
688 outb_p(0, priv->card_base + PI_DREQ_MASK);
689 if (reg)
690 outb_p(reg, priv->scc_cmd);
691 rc = inb_p(priv->scc_cmd);
692 outb(1, priv->card_base + PI_DREQ_MASK);
693 spin_unlock_irqrestore(priv->register_lock, flags);
694 return rc;
695 }
696}
697
698
699static int read_scc_data(struct scc_priv *priv)
700{
701 int rc;
702 unsigned long flags;
703 switch (priv->type) {
704 case TYPE_S5:
705 return inb(priv->scc_data);
706 case TYPE_TWIN:
707 return inb_p(priv->scc_data);
708 default:
709 spin_lock_irqsave(priv->register_lock, flags);
710 outb_p(0, priv->card_base + PI_DREQ_MASK);
711 rc = inb_p(priv->scc_data);
712 outb(1, priv->card_base + PI_DREQ_MASK);
713 spin_unlock_irqrestore(priv->register_lock, flags);
714 return rc;
715 }
716}
717
718
719static int scc_open(struct net_device *dev)
720{
721 struct scc_priv *priv = dev->ml_priv;
722 struct scc_info *info = priv->info;
723 int card_base = priv->card_base;
724
725 /* Request IRQ if not already used by other channel */
726 if (!info->irq_used) {
727 if (request_irq(dev->irq, scc_isr, 0, "dmascc", info)) {
728 return -EAGAIN;
729 }
730 }
731 info->irq_used++;
732
733 /* Request DMA if required */
734 if (priv->param.dma >= 0) {
735 if (request_dma(priv->param.dma, "dmascc")) {
736 if (--info->irq_used == 0)
737 free_irq(dev->irq, info);
738 return -EAGAIN;
739 } else {
740 unsigned long flags = claim_dma_lock();
741 clear_dma_ff(priv->param.dma);
742 release_dma_lock(flags);
743 }
744 }
745
746 /* Initialize local variables */
747 priv->rx_ptr = 0;
748 priv->rx_over = 0;
749 priv->rx_head = priv->rx_tail = priv->rx_count = 0;
750 priv->state = IDLE;
751 priv->tx_head = priv->tx_tail = priv->tx_count = 0;
752 priv->tx_ptr = 0;
753
754 /* Reset channel */
755 write_scc(priv, R9, (priv->channel ? CHRB : CHRA) | MIE | NV);
756 /* X1 clock, SDLC mode */
757 write_scc(priv, R4, SDLC | X1CLK);
758 /* DMA */
759 write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
760 /* 8 bit RX char, RX disable */
761 write_scc(priv, R3, Rx8);
762 /* 8 bit TX char, TX disable */
763 write_scc(priv, R5, Tx8);
764 /* SDLC address field */
765 write_scc(priv, R6, 0);
766 /* SDLC flag */
767 write_scc(priv, R7, FLAG);
768 switch (priv->chip) {
769 case Z85C30:
770 /* Select WR7' */
771 write_scc(priv, R15, SHDLCE);
772 /* Auto EOM reset */
773 write_scc(priv, R7, AUTOEOM);
774 write_scc(priv, R15, 0);
775 break;
776 case Z85230:
777 /* Select WR7' */
778 write_scc(priv, R15, SHDLCE);
779 /* The following bits are set (see 2.5.2.1):
780 - Automatic EOM reset
781 - Interrupt request if RX FIFO is half full
782 This bit should be ignored in DMA mode (according to the
783 documentation), but actually isn't. The receiver doesn't work if
784 it is set. Thus, we have to clear it in DMA mode.
785 - Interrupt/DMA request if TX FIFO is completely empty
786 a) If set, the ESCC behaves as if it had no TX FIFO (Z85C30
787 compatibility).
788 b) If cleared, DMA requests may follow each other very quickly,
789 filling up the TX FIFO.
790 Advantage: TX works even in case of high bus latency.
791 Disadvantage: Edge-triggered DMA request circuitry may miss
792 a request. No more data is delivered, resulting
793 in a TX FIFO underrun.
794 Both PI2 and S5SCC/DMA seem to work fine with TXFIFOE cleared.
795 The PackeTwin doesn't. I don't know about the PI, but let's
796 assume it behaves like the PI2.
797 */
798 if (priv->param.dma >= 0) {
799 if (priv->type == TYPE_TWIN)
800 write_scc(priv, R7, AUTOEOM | TXFIFOE);
801 else
802 write_scc(priv, R7, AUTOEOM);
803 } else {
804 write_scc(priv, R7, AUTOEOM | RXFIFOH);
805 }
806 write_scc(priv, R15, 0);
807 break;
808 }
809 /* Preset CRC, NRZ(I) encoding */
810 write_scc(priv, R10, CRCPS | (priv->param.nrzi ? NRZI : NRZ));
811
812 /* Configure baud rate generator */
813 if (priv->param.brg_tc >= 0) {
814 /* Program BR generator */
815 write_scc(priv, R12, priv->param.brg_tc & 0xFF);
816 write_scc(priv, R13, (priv->param.brg_tc >> 8) & 0xFF);
817 /* BRG source = SYS CLK; enable BRG; DTR REQ function (required by
818 PackeTwin, not connected on the PI2); set DPLL source to BRG */
819 write_scc(priv, R14, SSBR | DTRREQ | BRSRC | BRENABL);
820 /* Enable DPLL */
821 write_scc(priv, R14, SEARCH | DTRREQ | BRSRC | BRENABL);
822 } else {
823 /* Disable BR generator */
824 write_scc(priv, R14, DTRREQ | BRSRC);
825 }
826
827 /* Configure clocks */
828 if (priv->type == TYPE_TWIN) {
829 /* Disable external TX clock receiver */
830 outb((info->twin_serial_cfg &=
831 ~(priv->channel ? TWIN_EXTCLKB : TWIN_EXTCLKA)),
832 card_base + TWIN_SERIAL_CFG);
833 }
834 write_scc(priv, R11, priv->param.clocks);
835 if ((priv->type == TYPE_TWIN) && !(priv->param.clocks & TRxCOI)) {
836 /* Enable external TX clock receiver */
837 outb((info->twin_serial_cfg |=
838 (priv->channel ? TWIN_EXTCLKB : TWIN_EXTCLKA)),
839 card_base + TWIN_SERIAL_CFG);
840 }
841
842 /* Configure PackeTwin */
843 if (priv->type == TYPE_TWIN) {
844 /* Assert DTR, enable interrupts */
845 outb((info->twin_serial_cfg |= TWIN_EI |
846 (priv->channel ? TWIN_DTRB_ON : TWIN_DTRA_ON)),
847 card_base + TWIN_SERIAL_CFG);
848 }
849
850 /* Read current status */
851 priv->rr0 = read_scc(priv, R0);
852 /* Enable DCD interrupt */
853 write_scc(priv, R15, DCDIE);
854
855 netif_start_queue(dev);
856
857 return 0;
858}
859
860
861static int scc_close(struct net_device *dev)
862{
863 struct scc_priv *priv = dev->ml_priv;
864 struct scc_info *info = priv->info;
865 int card_base = priv->card_base;
866
867 netif_stop_queue(dev);
868
869 if (priv->type == TYPE_TWIN) {
870 /* Drop DTR */
871 outb((info->twin_serial_cfg &=
872 (priv->channel ? ~TWIN_DTRB_ON : ~TWIN_DTRA_ON)),
873 card_base + TWIN_SERIAL_CFG);
874 }
875
876 /* Reset channel, free DMA and IRQ */
877 write_scc(priv, R9, (priv->channel ? CHRB : CHRA) | MIE | NV);
878 if (priv->param.dma >= 0) {
879 if (priv->type == TYPE_TWIN)
880 outb(0, card_base + TWIN_DMA_CFG);
881 free_dma(priv->param.dma);
882 }
883 if (--info->irq_used == 0)
884 free_irq(dev->irq, info);
885
886 return 0;
887}
888
889
890static int scc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
891{
892 struct scc_priv *priv = dev->ml_priv;
893
894 switch (cmd) {
895 case SIOCGSCCPARAM:
896 if (copy_to_user
897 (ifr->ifr_data, &priv->param,
898 sizeof(struct scc_param)))
899 return -EFAULT;
900 return 0;
901 case SIOCSSCCPARAM:
902 if (!capable(CAP_NET_ADMIN))
903 return -EPERM;
904 if (netif_running(dev))
905 return -EAGAIN;
906 if (copy_from_user
907 (&priv->param, ifr->ifr_data,
908 sizeof(struct scc_param)))
909 return -EFAULT;
910 return 0;
911 default:
912 return -EINVAL;
913 }
914}
915
916
917static int scc_send_packet(struct sk_buff *skb, struct net_device *dev)
918{
919 struct scc_priv *priv = dev->ml_priv;
920 unsigned long flags;
921 int i;
922
923 /* Temporarily stop the scheduler feeding us packets */
924 netif_stop_queue(dev);
925
926 /* Transfer data to DMA buffer */
927 i = priv->tx_head;
928 skb_copy_from_linear_data_offset(skb, 1, priv->tx_buf[i], skb->len - 1);
929 priv->tx_len[i] = skb->len - 1;
930
931 /* Clear interrupts while we touch our circular buffers */
932
933 spin_lock_irqsave(&priv->ring_lock, flags);
934 /* Move the ring buffer's head */
935 priv->tx_head = (i + 1) % NUM_TX_BUF;
936 priv->tx_count++;
937
938 /* If we just filled up the last buffer, leave queue stopped.
939 The higher layers must wait until we have a DMA buffer
940 to accept the data. */
941 if (priv->tx_count < NUM_TX_BUF)
942 netif_wake_queue(dev);
943
944 /* Set new TX state */
945 if (priv->state == IDLE) {
946 /* Assert RTS, start timer */
947 priv->state = TX_HEAD;
948 priv->tx_start = jiffies;
949 write_scc(priv, R5, TxCRC_ENAB | RTS | TxENAB | Tx8);
950 write_scc(priv, R15, 0);
951 start_timer(priv, priv->param.txdelay, 0);
952 }
953
954 /* Turn interrupts back on and free buffer */
955 spin_unlock_irqrestore(&priv->ring_lock, flags);
956 dev_kfree_skb(skb);
957
958 return NETDEV_TX_OK;
959}
960
961
962static int scc_set_mac_address(struct net_device *dev, void *sa)
963{
964 memcpy(dev->dev_addr, ((struct sockaddr *) sa)->sa_data,
965 dev->addr_len);
966 return 0;
967}
968
969
970static inline void tx_on(struct scc_priv *priv)
971{
972 int i, n;
973 unsigned long flags;
974
975 if (priv->param.dma >= 0) {
976 n = (priv->chip == Z85230) ? 3 : 1;
977 /* Program DMA controller */
978 flags = claim_dma_lock();
979 set_dma_mode(priv->param.dma, DMA_MODE_WRITE);
980 set_dma_addr(priv->param.dma,
981 (int) priv->tx_buf[priv->tx_tail] + n);
982 set_dma_count(priv->param.dma,
983 priv->tx_len[priv->tx_tail] - n);
984 release_dma_lock(flags);
985 /* Enable TX underrun interrupt */
986 write_scc(priv, R15, TxUIE);
987 /* Configure DREQ */
988 if (priv->type == TYPE_TWIN)
989 outb((priv->param.dma ==
990 1) ? TWIN_DMA_HDX_T1 : TWIN_DMA_HDX_T3,
991 priv->card_base + TWIN_DMA_CFG);
992 else
993 write_scc(priv, R1,
994 EXT_INT_ENAB | WT_FN_RDYFN |
995 WT_RDY_ENAB);
996 /* Write first byte(s) */
997 spin_lock_irqsave(priv->register_lock, flags);
998 for (i = 0; i < n; i++)
999 write_scc_data(priv,
1000 priv->tx_buf[priv->tx_tail][i], 1);
1001 enable_dma(priv->param.dma);
1002 spin_unlock_irqrestore(priv->register_lock, flags);
1003 } else {
1004 write_scc(priv, R15, TxUIE);
1005 write_scc(priv, R1,
1006 EXT_INT_ENAB | WT_FN_RDYFN | TxINT_ENAB);
1007 tx_isr(priv);
1008 }
1009 /* Reset EOM latch if we do not have the AUTOEOM feature */
1010 if (priv->chip == Z8530)
1011 write_scc(priv, R0, RES_EOM_L);
1012}
1013
1014
1015static inline void rx_on(struct scc_priv *priv)
1016{
1017 unsigned long flags;
1018
1019 /* Clear RX FIFO */
1020 while (read_scc(priv, R0) & Rx_CH_AV)
1021 read_scc_data(priv);
1022 priv->rx_over = 0;
1023 if (priv->param.dma >= 0) {
1024 /* Program DMA controller */
1025 flags = claim_dma_lock();
1026 set_dma_mode(priv->param.dma, DMA_MODE_READ);
1027 set_dma_addr(priv->param.dma,
1028 (int) priv->rx_buf[priv->rx_head]);
1029 set_dma_count(priv->param.dma, BUF_SIZE);
1030 release_dma_lock(flags);
1031 enable_dma(priv->param.dma);
1032 /* Configure PackeTwin DMA */
1033 if (priv->type == TYPE_TWIN) {
1034 outb((priv->param.dma ==
1035 1) ? TWIN_DMA_HDX_R1 : TWIN_DMA_HDX_R3,
1036 priv->card_base + TWIN_DMA_CFG);
1037 }
1038 /* Sp. cond. intr. only, ext int enable, RX DMA enable */
1039 write_scc(priv, R1, EXT_INT_ENAB | INT_ERR_Rx |
1040 WT_RDY_RT | WT_FN_RDYFN | WT_RDY_ENAB);
1041 } else {
1042 /* Reset current frame */
1043 priv->rx_ptr = 0;
1044 /* Intr. on all Rx characters and Sp. cond., ext int enable */
1045 write_scc(priv, R1, EXT_INT_ENAB | INT_ALL_Rx | WT_RDY_RT |
1046 WT_FN_RDYFN);
1047 }
1048 write_scc(priv, R0, ERR_RES);
1049 write_scc(priv, R3, RxENABLE | Rx8 | RxCRC_ENAB);
1050}
1051
1052
1053static inline void rx_off(struct scc_priv *priv)
1054{
1055 /* Disable receiver */
1056 write_scc(priv, R3, Rx8);
1057 /* Disable DREQ / RX interrupt */
1058 if (priv->param.dma >= 0 && priv->type == TYPE_TWIN)
1059 outb(0, priv->card_base + TWIN_DMA_CFG);
1060 else
1061 write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
1062 /* Disable DMA */
1063 if (priv->param.dma >= 0)
1064 disable_dma(priv->param.dma);
1065}
1066
1067
1068static void start_timer(struct scc_priv *priv, int t, int r15)
1069{
1070 outb(priv->tmr_mode, priv->tmr_ctrl);
1071 if (t == 0) {
1072 tm_isr(priv);
1073 } else if (t > 0) {
1074 outb(t & 0xFF, priv->tmr_cnt);
1075 outb((t >> 8) & 0xFF, priv->tmr_cnt);
1076 if (priv->type != TYPE_TWIN) {
1077 write_scc(priv, R15, r15 | CTSIE);
1078 priv->rr0 |= CTS;
1079 }
1080 }
1081}
1082
1083
1084static inline unsigned char random(void)
1085{
1086 /* See "Numerical Recipes in C", second edition, p. 284 */
1087 rand = rand * 1664525L + 1013904223L;
1088 return (unsigned char) (rand >> 24);
1089}
1090
1091static inline void z8530_isr(struct scc_info *info)
1092{
1093 int is, i = 100;
1094
1095 while ((is = read_scc(&info->priv[0], R3)) && i--) {
1096 if (is & CHARxIP) {
1097 rx_isr(&info->priv[0]);
1098 } else if (is & CHATxIP) {
1099 tx_isr(&info->priv[0]);
1100 } else if (is & CHAEXT) {
1101 es_isr(&info->priv[0]);
1102 } else if (is & CHBRxIP) {
1103 rx_isr(&info->priv[1]);
1104 } else if (is & CHBTxIP) {
1105 tx_isr(&info->priv[1]);
1106 } else {
1107 es_isr(&info->priv[1]);
1108 }
1109 write_scc(&info->priv[0], R0, RES_H_IUS);
1110 i++;
1111 }
1112 if (i < 0) {
1113 printk(KERN_ERR "dmascc: stuck in ISR with RR3=0x%02x.\n",
1114 is);
1115 }
1116 /* Ok, no interrupts pending from this 8530. The INT line should
1117 be inactive now. */
1118}
1119
1120
1121static irqreturn_t scc_isr(int irq, void *dev_id)
1122{
1123 struct scc_info *info = dev_id;
1124
1125 spin_lock(info->priv[0].register_lock);
1126 /* At this point interrupts are enabled, and the interrupt under service
1127 is already acknowledged, but masked off.
1128
1129 Interrupt processing: We loop until we know that the IRQ line is
1130 low. If another positive edge occurs afterwards during the ISR,
1131 another interrupt will be triggered by the interrupt controller
1132 as soon as the IRQ level is enabled again (see asm/irq.h).
1133
1134 Bottom-half handlers will be processed after scc_isr(). This is
1135 important, since we only have small ringbuffers and want new data
1136 to be fetched/delivered immediately. */
1137
1138 if (info->priv[0].type == TYPE_TWIN) {
1139 int is, card_base = info->priv[0].card_base;
1140 while ((is = ~inb(card_base + TWIN_INT_REG)) &
1141 TWIN_INT_MSK) {
1142 if (is & TWIN_SCC_MSK) {
1143 z8530_isr(info);
1144 } else if (is & TWIN_TMR1_MSK) {
1145 inb(card_base + TWIN_CLR_TMR1);
1146 tm_isr(&info->priv[0]);
1147 } else {
1148 inb(card_base + TWIN_CLR_TMR2);
1149 tm_isr(&info->priv[1]);
1150 }
1151 }
1152 } else
1153 z8530_isr(info);
1154 spin_unlock(info->priv[0].register_lock);
1155 return IRQ_HANDLED;
1156}
1157
1158
1159static void rx_isr(struct scc_priv *priv)
1160{
1161 if (priv->param.dma >= 0) {
1162 /* Check special condition and perform error reset. See 2.4.7.5. */
1163 special_condition(priv, read_scc(priv, R1));
1164 write_scc(priv, R0, ERR_RES);
1165 } else {
1166 /* Check special condition for each character. Error reset not necessary.
1167 Same algorithm for SCC and ESCC. See 2.4.7.1 and 2.4.7.4. */
1168 int rc;
1169 while (read_scc(priv, R0) & Rx_CH_AV) {
1170 rc = read_scc(priv, R1);
1171 if (priv->rx_ptr < BUF_SIZE)
1172 priv->rx_buf[priv->rx_head][priv->
1173 rx_ptr++] =
1174 read_scc_data(priv);
1175 else {
1176 priv->rx_over = 2;
1177 read_scc_data(priv);
1178 }
1179 special_condition(priv, rc);
1180 }
1181 }
1182}
1183
1184
1185static void special_condition(struct scc_priv *priv, int rc)
1186{
1187 int cb;
1188 unsigned long flags;
1189
1190 /* See Figure 2-15. Only overrun and EOF need to be checked. */
1191
1192 if (rc & Rx_OVR) {
1193 /* Receiver overrun */
1194 priv->rx_over = 1;
1195 if (priv->param.dma < 0)
1196 write_scc(priv, R0, ERR_RES);
1197 } else if (rc & END_FR) {
1198 /* End of frame. Get byte count */
1199 if (priv->param.dma >= 0) {
1200 flags = claim_dma_lock();
1201 cb = BUF_SIZE - get_dma_residue(priv->param.dma) -
1202 2;
1203 release_dma_lock(flags);
1204 } else {
1205 cb = priv->rx_ptr - 2;
1206 }
1207 if (priv->rx_over) {
1208 /* We had an overrun */
1209 priv->dev->stats.rx_errors++;
1210 if (priv->rx_over == 2)
1211 priv->dev->stats.rx_length_errors++;
1212 else
1213 priv->dev->stats.rx_fifo_errors++;
1214 priv->rx_over = 0;
1215 } else if (rc & CRC_ERR) {
1216 /* Count invalid CRC only if packet length >= minimum */
1217 if (cb >= 15) {
1218 priv->dev->stats.rx_errors++;
1219 priv->dev->stats.rx_crc_errors++;
1220 }
1221 } else {
1222 if (cb >= 15) {
1223 if (priv->rx_count < NUM_RX_BUF - 1) {
1224 /* Put good frame in FIFO */
1225 priv->rx_len[priv->rx_head] = cb;
1226 priv->rx_head =
1227 (priv->rx_head +
1228 1) % NUM_RX_BUF;
1229 priv->rx_count++;
1230 schedule_work(&priv->rx_work);
1231 } else {
1232 priv->dev->stats.rx_errors++;
1233 priv->dev->stats.rx_over_errors++;
1234 }
1235 }
1236 }
1237 /* Get ready for new frame */
1238 if (priv->param.dma >= 0) {
1239 flags = claim_dma_lock();
1240 set_dma_addr(priv->param.dma,
1241 (int) priv->rx_buf[priv->rx_head]);
1242 set_dma_count(priv->param.dma, BUF_SIZE);
1243 release_dma_lock(flags);
1244 } else {
1245 priv->rx_ptr = 0;
1246 }
1247 }
1248}
1249
1250
1251static void rx_bh(struct work_struct *ugli_api)
1252{
1253 struct scc_priv *priv = container_of(ugli_api, struct scc_priv, rx_work);
1254 int i = priv->rx_tail;
1255 int cb;
1256 unsigned long flags;
1257 struct sk_buff *skb;
1258 unsigned char *data;
1259
1260 spin_lock_irqsave(&priv->ring_lock, flags);
1261 while (priv->rx_count) {
1262 spin_unlock_irqrestore(&priv->ring_lock, flags);
1263 cb = priv->rx_len[i];
1264 /* Allocate buffer */
1265 skb = dev_alloc_skb(cb + 1);
1266 if (skb == NULL) {
1267 /* Drop packet */
1268 priv->dev->stats.rx_dropped++;
1269 } else {
1270 /* Fill buffer */
1271 data = skb_put(skb, cb + 1);
1272 data[0] = 0;
1273 memcpy(&data[1], priv->rx_buf[i], cb);
1274 skb->protocol = ax25_type_trans(skb, priv->dev);
1275 netif_rx(skb);
1276 priv->dev->stats.rx_packets++;
1277 priv->dev->stats.rx_bytes += cb;
1278 }
1279 spin_lock_irqsave(&priv->ring_lock, flags);
1280 /* Move tail */
1281 priv->rx_tail = i = (i + 1) % NUM_RX_BUF;
1282 priv->rx_count--;
1283 }
1284 spin_unlock_irqrestore(&priv->ring_lock, flags);
1285}
1286
1287
1288static void tx_isr(struct scc_priv *priv)
1289{
1290 int i = priv->tx_tail, p = priv->tx_ptr;
1291
1292 /* Suspend TX interrupts if we don't want to send anything.
1293 See Figure 2-22. */
1294 if (p == priv->tx_len[i]) {
1295 write_scc(priv, R0, RES_Tx_P);
1296 return;
1297 }
1298
1299 /* Write characters */
1300 while ((read_scc(priv, R0) & Tx_BUF_EMP) && p < priv->tx_len[i]) {
1301 write_scc_data(priv, priv->tx_buf[i][p++], 0);
1302 }
1303
1304 /* Reset EOM latch of Z8530 */
1305 if (!priv->tx_ptr && p && priv->chip == Z8530)
1306 write_scc(priv, R0, RES_EOM_L);
1307
1308 priv->tx_ptr = p;
1309}
1310
1311
1312static void es_isr(struct scc_priv *priv)
1313{
1314 int i, rr0, drr0, res;
1315 unsigned long flags;
1316
1317 /* Read status, reset interrupt bit (open latches) */
1318 rr0 = read_scc(priv, R0);
1319 write_scc(priv, R0, RES_EXT_INT);
1320 drr0 = priv->rr0 ^ rr0;
1321 priv->rr0 = rr0;
1322
1323 /* Transmit underrun (2.4.9.6). We can't check the TxEOM flag, since
1324 it might have already been cleared again by AUTOEOM. */
1325 if (priv->state == TX_DATA) {
1326 /* Get remaining bytes */
1327 i = priv->tx_tail;
1328 if (priv->param.dma >= 0) {
1329 disable_dma(priv->param.dma);
1330 flags = claim_dma_lock();
1331 res = get_dma_residue(priv->param.dma);
1332 release_dma_lock(flags);
1333 } else {
1334 res = priv->tx_len[i] - priv->tx_ptr;
1335 priv->tx_ptr = 0;
1336 }
1337 /* Disable DREQ / TX interrupt */
1338 if (priv->param.dma >= 0 && priv->type == TYPE_TWIN)
1339 outb(0, priv->card_base + TWIN_DMA_CFG);
1340 else
1341 write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
1342 if (res) {
1343 /* Update packet statistics */
1344 priv->dev->stats.tx_errors++;
1345 priv->dev->stats.tx_fifo_errors++;
1346 /* Other underrun interrupts may already be waiting */
1347 write_scc(priv, R0, RES_EXT_INT);
1348 write_scc(priv, R0, RES_EXT_INT);
1349 } else {
1350 /* Update packet statistics */
1351 priv->dev->stats.tx_packets++;
1352 priv->dev->stats.tx_bytes += priv->tx_len[i];
1353 /* Remove frame from FIFO */
1354 priv->tx_tail = (i + 1) % NUM_TX_BUF;
1355 priv->tx_count--;
1356 /* Inform upper layers */
1357 netif_wake_queue(priv->dev);
1358 }
1359 /* Switch state */
1360 write_scc(priv, R15, 0);
1361 if (priv->tx_count &&
1362 (jiffies - priv->tx_start) < priv->param.txtimeout) {
1363 priv->state = TX_PAUSE;
1364 start_timer(priv, priv->param.txpause, 0);
1365 } else {
1366 priv->state = TX_TAIL;
1367 start_timer(priv, priv->param.txtail, 0);
1368 }
1369 }
1370
1371 /* DCD transition */
1372 if (drr0 & DCD) {
1373 if (rr0 & DCD) {
1374 switch (priv->state) {
1375 case IDLE:
1376 case WAIT:
1377 priv->state = DCD_ON;
1378 write_scc(priv, R15, 0);
1379 start_timer(priv, priv->param.dcdon, 0);
1380 }
1381 } else {
1382 switch (priv->state) {
1383 case RX_ON:
1384 rx_off(priv);
1385 priv->state = DCD_OFF;
1386 write_scc(priv, R15, 0);
1387 start_timer(priv, priv->param.dcdoff, 0);
1388 }
1389 }
1390 }
1391
1392 /* CTS transition */
1393 if ((drr0 & CTS) && (~rr0 & CTS) && priv->type != TYPE_TWIN)
1394 tm_isr(priv);
1395
1396}
1397
1398
1399static void tm_isr(struct scc_priv *priv)
1400{
1401 switch (priv->state) {
1402 case TX_HEAD:
1403 case TX_PAUSE:
1404 tx_on(priv);
1405 priv->state = TX_DATA;
1406 break;
1407 case TX_TAIL:
1408 write_scc(priv, R5, TxCRC_ENAB | Tx8);
1409 priv->state = RTS_OFF;
1410 if (priv->type != TYPE_TWIN)
1411 write_scc(priv, R15, 0);
1412 start_timer(priv, priv->param.rtsoff, 0);
1413 break;
1414 case RTS_OFF:
1415 write_scc(priv, R15, DCDIE);
1416 priv->rr0 = read_scc(priv, R0);
1417 if (priv->rr0 & DCD) {
1418 priv->dev->stats.collisions++;
1419 rx_on(priv);
1420 priv->state = RX_ON;
1421 } else {
1422 priv->state = WAIT;
1423 start_timer(priv, priv->param.waittime, DCDIE);
1424 }
1425 break;
1426 case WAIT:
1427 if (priv->tx_count) {
1428 priv->state = TX_HEAD;
1429 priv->tx_start = jiffies;
1430 write_scc(priv, R5,
1431 TxCRC_ENAB | RTS | TxENAB | Tx8);
1432 write_scc(priv, R15, 0);
1433 start_timer(priv, priv->param.txdelay, 0);
1434 } else {
1435 priv->state = IDLE;
1436 if (priv->type != TYPE_TWIN)
1437 write_scc(priv, R15, DCDIE);
1438 }
1439 break;
1440 case DCD_ON:
1441 case DCD_OFF:
1442 write_scc(priv, R15, DCDIE);
1443 priv->rr0 = read_scc(priv, R0);
1444 if (priv->rr0 & DCD) {
1445 rx_on(priv);
1446 priv->state = RX_ON;
1447 } else {
1448 priv->state = WAIT;
1449 start_timer(priv,
1450 random() / priv->param.persist *
1451 priv->param.slottime, DCDIE);
1452 }
1453 break;
1454 }
1455}
1/*
2 * Driver for high-speed SCC boards (those with DMA support)
3 * Copyright (C) 1997-2000 Klaus Kudielka
4 *
5 * S5SCC/DMA support by Janko Koleznik S52HI
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22
23#include <linux/module.h>
24#include <linux/bitops.h>
25#include <linux/delay.h>
26#include <linux/errno.h>
27#include <linux/if_arp.h>
28#include <linux/in.h>
29#include <linux/init.h>
30#include <linux/interrupt.h>
31#include <linux/ioport.h>
32#include <linux/kernel.h>
33#include <linux/mm.h>
34#include <linux/netdevice.h>
35#include <linux/slab.h>
36#include <linux/rtnetlink.h>
37#include <linux/sockios.h>
38#include <linux/workqueue.h>
39#include <linux/atomic.h>
40#include <asm/dma.h>
41#include <asm/io.h>
42#include <asm/irq.h>
43#include <asm/uaccess.h>
44#include <net/ax25.h>
45#include "z8530.h"
46
47
48/* Number of buffers per channel */
49
50#define NUM_TX_BUF 2 /* NUM_TX_BUF >= 1 (min. 2 recommended) */
51#define NUM_RX_BUF 6 /* NUM_RX_BUF >= 1 (min. 2 recommended) */
52#define BUF_SIZE 1576 /* BUF_SIZE >= mtu + hard_header_len */
53
54
55/* Cards supported */
56
57#define HW_PI { "Ottawa PI", 0x300, 0x20, 0x10, 8, \
58 0, 8, 1843200, 3686400 }
59#define HW_PI2 { "Ottawa PI2", 0x300, 0x20, 0x10, 8, \
60 0, 8, 3686400, 7372800 }
61#define HW_TWIN { "Gracilis PackeTwin", 0x200, 0x10, 0x10, 32, \
62 0, 4, 6144000, 6144000 }
63#define HW_S5 { "S5SCC/DMA", 0x200, 0x10, 0x10, 32, \
64 0, 8, 4915200, 9830400 }
65
66#define HARDWARE { HW_PI, HW_PI2, HW_TWIN, HW_S5 }
67
68#define TMR_0_HZ 25600 /* Frequency of timer 0 */
69
70#define TYPE_PI 0
71#define TYPE_PI2 1
72#define TYPE_TWIN 2
73#define TYPE_S5 3
74#define NUM_TYPES 4
75
76#define MAX_NUM_DEVS 32
77
78
79/* SCC chips supported */
80
81#define Z8530 0
82#define Z85C30 1
83#define Z85230 2
84
85#define CHIPNAMES { "Z8530", "Z85C30", "Z85230" }
86
87
88/* I/O registers */
89
90/* 8530 registers relative to card base */
91#define SCCB_CMD 0x00
92#define SCCB_DATA 0x01
93#define SCCA_CMD 0x02
94#define SCCA_DATA 0x03
95
96/* 8253/8254 registers relative to card base */
97#define TMR_CNT0 0x00
98#define TMR_CNT1 0x01
99#define TMR_CNT2 0x02
100#define TMR_CTRL 0x03
101
102/* Additional PI/PI2 registers relative to card base */
103#define PI_DREQ_MASK 0x04
104
105/* Additional PackeTwin registers relative to card base */
106#define TWIN_INT_REG 0x08
107#define TWIN_CLR_TMR1 0x09
108#define TWIN_CLR_TMR2 0x0a
109#define TWIN_SPARE_1 0x0b
110#define TWIN_DMA_CFG 0x08
111#define TWIN_SERIAL_CFG 0x09
112#define TWIN_DMA_CLR_FF 0x0a
113#define TWIN_SPARE_2 0x0b
114
115
116/* PackeTwin I/O register values */
117
118/* INT_REG */
119#define TWIN_SCC_MSK 0x01
120#define TWIN_TMR1_MSK 0x02
121#define TWIN_TMR2_MSK 0x04
122#define TWIN_INT_MSK 0x07
123
124/* SERIAL_CFG */
125#define TWIN_DTRA_ON 0x01
126#define TWIN_DTRB_ON 0x02
127#define TWIN_EXTCLKA 0x04
128#define TWIN_EXTCLKB 0x08
129#define TWIN_LOOPA_ON 0x10
130#define TWIN_LOOPB_ON 0x20
131#define TWIN_EI 0x80
132
133/* DMA_CFG */
134#define TWIN_DMA_HDX_T1 0x08
135#define TWIN_DMA_HDX_R1 0x0a
136#define TWIN_DMA_HDX_T3 0x14
137#define TWIN_DMA_HDX_R3 0x16
138#define TWIN_DMA_FDX_T3R1 0x1b
139#define TWIN_DMA_FDX_T1R3 0x1d
140
141
142/* Status values */
143
144#define IDLE 0
145#define TX_HEAD 1
146#define TX_DATA 2
147#define TX_PAUSE 3
148#define TX_TAIL 4
149#define RTS_OFF 5
150#define WAIT 6
151#define DCD_ON 7
152#define RX_ON 8
153#define DCD_OFF 9
154
155
156/* Ioctls */
157
158#define SIOCGSCCPARAM SIOCDEVPRIVATE
159#define SIOCSSCCPARAM (SIOCDEVPRIVATE+1)
160
161
162/* Data types */
163
164struct scc_param {
165 int pclk_hz; /* frequency of BRG input (don't change) */
166 int brg_tc; /* BRG terminal count; BRG disabled if < 0 */
167 int nrzi; /* 0 (nrz), 1 (nrzi) */
168 int clocks; /* see dmascc_cfg documentation */
169 int txdelay; /* [1/TMR_0_HZ] */
170 int txtimeout; /* [1/HZ] */
171 int txtail; /* [1/TMR_0_HZ] */
172 int waittime; /* [1/TMR_0_HZ] */
173 int slottime; /* [1/TMR_0_HZ] */
174 int persist; /* 1 ... 256 */
175 int dma; /* -1 (disable), 0, 1, 3 */
176 int txpause; /* [1/TMR_0_HZ] */
177 int rtsoff; /* [1/TMR_0_HZ] */
178 int dcdon; /* [1/TMR_0_HZ] */
179 int dcdoff; /* [1/TMR_0_HZ] */
180};
181
182struct scc_hardware {
183 char *name;
184 int io_region;
185 int io_delta;
186 int io_size;
187 int num_devs;
188 int scc_offset;
189 int tmr_offset;
190 int tmr_hz;
191 int pclk_hz;
192};
193
194struct scc_priv {
195 int type;
196 int chip;
197 struct net_device *dev;
198 struct scc_info *info;
199
200 int channel;
201 int card_base, scc_cmd, scc_data;
202 int tmr_cnt, tmr_ctrl, tmr_mode;
203 struct scc_param param;
204 char rx_buf[NUM_RX_BUF][BUF_SIZE];
205 int rx_len[NUM_RX_BUF];
206 int rx_ptr;
207 struct work_struct rx_work;
208 int rx_head, rx_tail, rx_count;
209 int rx_over;
210 char tx_buf[NUM_TX_BUF][BUF_SIZE];
211 int tx_len[NUM_TX_BUF];
212 int tx_ptr;
213 int tx_head, tx_tail, tx_count;
214 int state;
215 unsigned long tx_start;
216 int rr0;
217 spinlock_t *register_lock; /* Per scc_info */
218 spinlock_t ring_lock;
219};
220
221struct scc_info {
222 int irq_used;
223 int twin_serial_cfg;
224 struct net_device *dev[2];
225 struct scc_priv priv[2];
226 struct scc_info *next;
227 spinlock_t register_lock; /* Per device register lock */
228};
229
230
231/* Function declarations */
232static int setup_adapter(int card_base, int type, int n) __init;
233
234static void write_scc(struct scc_priv *priv, int reg, int val);
235static void write_scc_data(struct scc_priv *priv, int val, int fast);
236static int read_scc(struct scc_priv *priv, int reg);
237static int read_scc_data(struct scc_priv *priv);
238
239static int scc_open(struct net_device *dev);
240static int scc_close(struct net_device *dev);
241static int scc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
242static int scc_send_packet(struct sk_buff *skb, struct net_device *dev);
243static int scc_set_mac_address(struct net_device *dev, void *sa);
244
245static inline void tx_on(struct scc_priv *priv);
246static inline void rx_on(struct scc_priv *priv);
247static inline void rx_off(struct scc_priv *priv);
248static void start_timer(struct scc_priv *priv, int t, int r15);
249static inline unsigned char random(void);
250
251static inline void z8530_isr(struct scc_info *info);
252static irqreturn_t scc_isr(int irq, void *dev_id);
253static void rx_isr(struct scc_priv *priv);
254static void special_condition(struct scc_priv *priv, int rc);
255static void rx_bh(struct work_struct *);
256static void tx_isr(struct scc_priv *priv);
257static void es_isr(struct scc_priv *priv);
258static void tm_isr(struct scc_priv *priv);
259
260
261/* Initialization variables */
262
263static int io[MAX_NUM_DEVS] __initdata = { 0, };
264
265/* Beware! hw[] is also used in dmascc_exit(). */
266static struct scc_hardware hw[NUM_TYPES] = HARDWARE;
267
268
269/* Global variables */
270
271static struct scc_info *first;
272static unsigned long rand;
273
274
275MODULE_AUTHOR("Klaus Kudielka");
276MODULE_DESCRIPTION("Driver for high-speed SCC boards");
277module_param_array(io, int, NULL, 0);
278MODULE_LICENSE("GPL");
279
280static void __exit dmascc_exit(void)
281{
282 int i;
283 struct scc_info *info;
284
285 while (first) {
286 info = first;
287
288 /* Unregister devices */
289 for (i = 0; i < 2; i++)
290 unregister_netdev(info->dev[i]);
291
292 /* Reset board */
293 if (info->priv[0].type == TYPE_TWIN)
294 outb(0, info->dev[0]->base_addr + TWIN_SERIAL_CFG);
295 write_scc(&info->priv[0], R9, FHWRES);
296 release_region(info->dev[0]->base_addr,
297 hw[info->priv[0].type].io_size);
298
299 for (i = 0; i < 2; i++)
300 free_netdev(info->dev[i]);
301
302 /* Free memory */
303 first = info->next;
304 kfree(info);
305 }
306}
307
308static int __init dmascc_init(void)
309{
310 int h, i, j, n;
311 int base[MAX_NUM_DEVS], tcmd[MAX_NUM_DEVS], t0[MAX_NUM_DEVS],
312 t1[MAX_NUM_DEVS];
313 unsigned t_val;
314 unsigned long time, start[MAX_NUM_DEVS], delay[MAX_NUM_DEVS],
315 counting[MAX_NUM_DEVS];
316
317 /* Initialize random number generator */
318 rand = jiffies;
319 /* Cards found = 0 */
320 n = 0;
321 /* Warning message */
322 if (!io[0])
323 printk(KERN_INFO "dmascc: autoprobing (dangerous)\n");
324
325 /* Run autodetection for each card type */
326 for (h = 0; h < NUM_TYPES; h++) {
327
328 if (io[0]) {
329 /* User-specified I/O address regions */
330 for (i = 0; i < hw[h].num_devs; i++)
331 base[i] = 0;
332 for (i = 0; i < MAX_NUM_DEVS && io[i]; i++) {
333 j = (io[i] -
334 hw[h].io_region) / hw[h].io_delta;
335 if (j >= 0 && j < hw[h].num_devs &&
336 hw[h].io_region +
337 j * hw[h].io_delta == io[i]) {
338 base[j] = io[i];
339 }
340 }
341 } else {
342 /* Default I/O address regions */
343 for (i = 0; i < hw[h].num_devs; i++) {
344 base[i] =
345 hw[h].io_region + i * hw[h].io_delta;
346 }
347 }
348
349 /* Check valid I/O address regions */
350 for (i = 0; i < hw[h].num_devs; i++)
351 if (base[i]) {
352 if (!request_region
353 (base[i], hw[h].io_size, "dmascc"))
354 base[i] = 0;
355 else {
356 tcmd[i] =
357 base[i] + hw[h].tmr_offset +
358 TMR_CTRL;
359 t0[i] =
360 base[i] + hw[h].tmr_offset +
361 TMR_CNT0;
362 t1[i] =
363 base[i] + hw[h].tmr_offset +
364 TMR_CNT1;
365 }
366 }
367
368 /* Start timers */
369 for (i = 0; i < hw[h].num_devs; i++)
370 if (base[i]) {
371 /* Timer 0: LSB+MSB, Mode 3, TMR_0_HZ */
372 outb(0x36, tcmd[i]);
373 outb((hw[h].tmr_hz / TMR_0_HZ) & 0xFF,
374 t0[i]);
375 outb((hw[h].tmr_hz / TMR_0_HZ) >> 8,
376 t0[i]);
377 /* Timer 1: LSB+MSB, Mode 0, HZ/10 */
378 outb(0x70, tcmd[i]);
379 outb((TMR_0_HZ / HZ * 10) & 0xFF, t1[i]);
380 outb((TMR_0_HZ / HZ * 10) >> 8, t1[i]);
381 start[i] = jiffies;
382 delay[i] = 0;
383 counting[i] = 1;
384 /* Timer 2: LSB+MSB, Mode 0 */
385 outb(0xb0, tcmd[i]);
386 }
387 time = jiffies;
388 /* Wait until counter registers are loaded */
389 udelay(2000000 / TMR_0_HZ);
390
391 /* Timing loop */
392 while (jiffies - time < 13) {
393 for (i = 0; i < hw[h].num_devs; i++)
394 if (base[i] && counting[i]) {
395 /* Read back Timer 1: latch; read LSB; read MSB */
396 outb(0x40, tcmd[i]);
397 t_val =
398 inb(t1[i]) + (inb(t1[i]) << 8);
399 /* Also check whether counter did wrap */
400 if (t_val == 0 ||
401 t_val > TMR_0_HZ / HZ * 10)
402 counting[i] = 0;
403 delay[i] = jiffies - start[i];
404 }
405 }
406
407 /* Evaluate measurements */
408 for (i = 0; i < hw[h].num_devs; i++)
409 if (base[i]) {
410 if ((delay[i] >= 9 && delay[i] <= 11) &&
411 /* Ok, we have found an adapter */
412 (setup_adapter(base[i], h, n) == 0))
413 n++;
414 else
415 release_region(base[i],
416 hw[h].io_size);
417 }
418
419 } /* NUM_TYPES */
420
421 /* If any adapter was successfully initialized, return ok */
422 if (n)
423 return 0;
424
425 /* If no adapter found, return error */
426 printk(KERN_INFO "dmascc: no adapters found\n");
427 return -EIO;
428}
429
430module_init(dmascc_init);
431module_exit(dmascc_exit);
432
433static void __init dev_setup(struct net_device *dev)
434{
435 dev->type = ARPHRD_AX25;
436 dev->hard_header_len = AX25_MAX_HEADER_LEN;
437 dev->mtu = 1500;
438 dev->addr_len = AX25_ADDR_LEN;
439 dev->tx_queue_len = 64;
440 memcpy(dev->broadcast, &ax25_bcast, AX25_ADDR_LEN);
441 memcpy(dev->dev_addr, &ax25_defaddr, AX25_ADDR_LEN);
442}
443
444static const struct net_device_ops scc_netdev_ops = {
445 .ndo_open = scc_open,
446 .ndo_stop = scc_close,
447 .ndo_start_xmit = scc_send_packet,
448 .ndo_do_ioctl = scc_ioctl,
449 .ndo_set_mac_address = scc_set_mac_address,
450};
451
452static int __init setup_adapter(int card_base, int type, int n)
453{
454 int i, irq, chip, err;
455 struct scc_info *info;
456 struct net_device *dev;
457 struct scc_priv *priv;
458 unsigned long time;
459 unsigned int irqs;
460 int tmr_base = card_base + hw[type].tmr_offset;
461 int scc_base = card_base + hw[type].scc_offset;
462 char *chipnames[] = CHIPNAMES;
463
464 /* Initialize what is necessary for write_scc and write_scc_data */
465 info = kzalloc(sizeof(struct scc_info), GFP_KERNEL | GFP_DMA);
466 if (!info) {
467 err = -ENOMEM;
468 goto out;
469 }
470
471 info->dev[0] = alloc_netdev(0, "", NET_NAME_UNKNOWN, dev_setup);
472 if (!info->dev[0]) {
473 printk(KERN_ERR "dmascc: "
474 "could not allocate memory for %s at %#3x\n",
475 hw[type].name, card_base);
476 err = -ENOMEM;
477 goto out1;
478 }
479
480 info->dev[1] = alloc_netdev(0, "", NET_NAME_UNKNOWN, dev_setup);
481 if (!info->dev[1]) {
482 printk(KERN_ERR "dmascc: "
483 "could not allocate memory for %s at %#3x\n",
484 hw[type].name, card_base);
485 err = -ENOMEM;
486 goto out2;
487 }
488 spin_lock_init(&info->register_lock);
489
490 priv = &info->priv[0];
491 priv->type = type;
492 priv->card_base = card_base;
493 priv->scc_cmd = scc_base + SCCA_CMD;
494 priv->scc_data = scc_base + SCCA_DATA;
495 priv->register_lock = &info->register_lock;
496
497 /* Reset SCC */
498 write_scc(priv, R9, FHWRES | MIE | NV);
499
500 /* Determine type of chip by enabling SDLC/HDLC enhancements */
501 write_scc(priv, R15, SHDLCE);
502 if (!read_scc(priv, R15)) {
503 /* WR7' not present. This is an ordinary Z8530 SCC. */
504 chip = Z8530;
505 } else {
506 /* Put one character in TX FIFO */
507 write_scc_data(priv, 0, 0);
508 if (read_scc(priv, R0) & Tx_BUF_EMP) {
509 /* TX FIFO not full. This is a Z85230 ESCC with a 4-byte FIFO. */
510 chip = Z85230;
511 } else {
512 /* TX FIFO full. This is a Z85C30 SCC with a 1-byte FIFO. */
513 chip = Z85C30;
514 }
515 }
516 write_scc(priv, R15, 0);
517
518 /* Start IRQ auto-detection */
519 irqs = probe_irq_on();
520
521 /* Enable interrupts */
522 if (type == TYPE_TWIN) {
523 outb(0, card_base + TWIN_DMA_CFG);
524 inb(card_base + TWIN_CLR_TMR1);
525 inb(card_base + TWIN_CLR_TMR2);
526 info->twin_serial_cfg = TWIN_EI;
527 outb(info->twin_serial_cfg, card_base + TWIN_SERIAL_CFG);
528 } else {
529 write_scc(priv, R15, CTSIE);
530 write_scc(priv, R0, RES_EXT_INT);
531 write_scc(priv, R1, EXT_INT_ENAB);
532 }
533
534 /* Start timer */
535 outb(1, tmr_base + TMR_CNT1);
536 outb(0, tmr_base + TMR_CNT1);
537
538 /* Wait and detect IRQ */
539 time = jiffies;
540 while (jiffies - time < 2 + HZ / TMR_0_HZ);
541 irq = probe_irq_off(irqs);
542
543 /* Clear pending interrupt, disable interrupts */
544 if (type == TYPE_TWIN) {
545 inb(card_base + TWIN_CLR_TMR1);
546 } else {
547 write_scc(priv, R1, 0);
548 write_scc(priv, R15, 0);
549 write_scc(priv, R0, RES_EXT_INT);
550 }
551
552 if (irq <= 0) {
553 printk(KERN_ERR
554 "dmascc: could not find irq of %s at %#3x (irq=%d)\n",
555 hw[type].name, card_base, irq);
556 err = -ENODEV;
557 goto out3;
558 }
559
560 /* Set up data structures */
561 for (i = 0; i < 2; i++) {
562 dev = info->dev[i];
563 priv = &info->priv[i];
564 priv->type = type;
565 priv->chip = chip;
566 priv->dev = dev;
567 priv->info = info;
568 priv->channel = i;
569 spin_lock_init(&priv->ring_lock);
570 priv->register_lock = &info->register_lock;
571 priv->card_base = card_base;
572 priv->scc_cmd = scc_base + (i ? SCCB_CMD : SCCA_CMD);
573 priv->scc_data = scc_base + (i ? SCCB_DATA : SCCA_DATA);
574 priv->tmr_cnt = tmr_base + (i ? TMR_CNT2 : TMR_CNT1);
575 priv->tmr_ctrl = tmr_base + TMR_CTRL;
576 priv->tmr_mode = i ? 0xb0 : 0x70;
577 priv->param.pclk_hz = hw[type].pclk_hz;
578 priv->param.brg_tc = -1;
579 priv->param.clocks = TCTRxCP | RCRTxCP;
580 priv->param.persist = 256;
581 priv->param.dma = -1;
582 INIT_WORK(&priv->rx_work, rx_bh);
583 dev->ml_priv = priv;
584 sprintf(dev->name, "dmascc%i", 2 * n + i);
585 dev->base_addr = card_base;
586 dev->irq = irq;
587 dev->netdev_ops = &scc_netdev_ops;
588 dev->header_ops = &ax25_header_ops;
589 }
590 if (register_netdev(info->dev[0])) {
591 printk(KERN_ERR "dmascc: could not register %s\n",
592 info->dev[0]->name);
593 err = -ENODEV;
594 goto out3;
595 }
596 if (register_netdev(info->dev[1])) {
597 printk(KERN_ERR "dmascc: could not register %s\n",
598 info->dev[1]->name);
599 err = -ENODEV;
600 goto out4;
601 }
602
603
604 info->next = first;
605 first = info;
606 printk(KERN_INFO "dmascc: found %s (%s) at %#3x, irq %d\n",
607 hw[type].name, chipnames[chip], card_base, irq);
608 return 0;
609
610 out4:
611 unregister_netdev(info->dev[0]);
612 out3:
613 if (info->priv[0].type == TYPE_TWIN)
614 outb(0, info->dev[0]->base_addr + TWIN_SERIAL_CFG);
615 write_scc(&info->priv[0], R9, FHWRES);
616 free_netdev(info->dev[1]);
617 out2:
618 free_netdev(info->dev[0]);
619 out1:
620 kfree(info);
621 out:
622 return err;
623}
624
625
626/* Driver functions */
627
628static void write_scc(struct scc_priv *priv, int reg, int val)
629{
630 unsigned long flags;
631 switch (priv->type) {
632 case TYPE_S5:
633 if (reg)
634 outb(reg, priv->scc_cmd);
635 outb(val, priv->scc_cmd);
636 return;
637 case TYPE_TWIN:
638 if (reg)
639 outb_p(reg, priv->scc_cmd);
640 outb_p(val, priv->scc_cmd);
641 return;
642 default:
643 spin_lock_irqsave(priv->register_lock, flags);
644 outb_p(0, priv->card_base + PI_DREQ_MASK);
645 if (reg)
646 outb_p(reg, priv->scc_cmd);
647 outb_p(val, priv->scc_cmd);
648 outb(1, priv->card_base + PI_DREQ_MASK);
649 spin_unlock_irqrestore(priv->register_lock, flags);
650 return;
651 }
652}
653
654
655static void write_scc_data(struct scc_priv *priv, int val, int fast)
656{
657 unsigned long flags;
658 switch (priv->type) {
659 case TYPE_S5:
660 outb(val, priv->scc_data);
661 return;
662 case TYPE_TWIN:
663 outb_p(val, priv->scc_data);
664 return;
665 default:
666 if (fast)
667 outb_p(val, priv->scc_data);
668 else {
669 spin_lock_irqsave(priv->register_lock, flags);
670 outb_p(0, priv->card_base + PI_DREQ_MASK);
671 outb_p(val, priv->scc_data);
672 outb(1, priv->card_base + PI_DREQ_MASK);
673 spin_unlock_irqrestore(priv->register_lock, flags);
674 }
675 return;
676 }
677}
678
679
680static int read_scc(struct scc_priv *priv, int reg)
681{
682 int rc;
683 unsigned long flags;
684 switch (priv->type) {
685 case TYPE_S5:
686 if (reg)
687 outb(reg, priv->scc_cmd);
688 return inb(priv->scc_cmd);
689 case TYPE_TWIN:
690 if (reg)
691 outb_p(reg, priv->scc_cmd);
692 return inb_p(priv->scc_cmd);
693 default:
694 spin_lock_irqsave(priv->register_lock, flags);
695 outb_p(0, priv->card_base + PI_DREQ_MASK);
696 if (reg)
697 outb_p(reg, priv->scc_cmd);
698 rc = inb_p(priv->scc_cmd);
699 outb(1, priv->card_base + PI_DREQ_MASK);
700 spin_unlock_irqrestore(priv->register_lock, flags);
701 return rc;
702 }
703}
704
705
706static int read_scc_data(struct scc_priv *priv)
707{
708 int rc;
709 unsigned long flags;
710 switch (priv->type) {
711 case TYPE_S5:
712 return inb(priv->scc_data);
713 case TYPE_TWIN:
714 return inb_p(priv->scc_data);
715 default:
716 spin_lock_irqsave(priv->register_lock, flags);
717 outb_p(0, priv->card_base + PI_DREQ_MASK);
718 rc = inb_p(priv->scc_data);
719 outb(1, priv->card_base + PI_DREQ_MASK);
720 spin_unlock_irqrestore(priv->register_lock, flags);
721 return rc;
722 }
723}
724
725
726static int scc_open(struct net_device *dev)
727{
728 struct scc_priv *priv = dev->ml_priv;
729 struct scc_info *info = priv->info;
730 int card_base = priv->card_base;
731
732 /* Request IRQ if not already used by other channel */
733 if (!info->irq_used) {
734 if (request_irq(dev->irq, scc_isr, 0, "dmascc", info)) {
735 return -EAGAIN;
736 }
737 }
738 info->irq_used++;
739
740 /* Request DMA if required */
741 if (priv->param.dma >= 0) {
742 if (request_dma(priv->param.dma, "dmascc")) {
743 if (--info->irq_used == 0)
744 free_irq(dev->irq, info);
745 return -EAGAIN;
746 } else {
747 unsigned long flags = claim_dma_lock();
748 clear_dma_ff(priv->param.dma);
749 release_dma_lock(flags);
750 }
751 }
752
753 /* Initialize local variables */
754 priv->rx_ptr = 0;
755 priv->rx_over = 0;
756 priv->rx_head = priv->rx_tail = priv->rx_count = 0;
757 priv->state = IDLE;
758 priv->tx_head = priv->tx_tail = priv->tx_count = 0;
759 priv->tx_ptr = 0;
760
761 /* Reset channel */
762 write_scc(priv, R9, (priv->channel ? CHRB : CHRA) | MIE | NV);
763 /* X1 clock, SDLC mode */
764 write_scc(priv, R4, SDLC | X1CLK);
765 /* DMA */
766 write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
767 /* 8 bit RX char, RX disable */
768 write_scc(priv, R3, Rx8);
769 /* 8 bit TX char, TX disable */
770 write_scc(priv, R5, Tx8);
771 /* SDLC address field */
772 write_scc(priv, R6, 0);
773 /* SDLC flag */
774 write_scc(priv, R7, FLAG);
775 switch (priv->chip) {
776 case Z85C30:
777 /* Select WR7' */
778 write_scc(priv, R15, SHDLCE);
779 /* Auto EOM reset */
780 write_scc(priv, R7, AUTOEOM);
781 write_scc(priv, R15, 0);
782 break;
783 case Z85230:
784 /* Select WR7' */
785 write_scc(priv, R15, SHDLCE);
786 /* The following bits are set (see 2.5.2.1):
787 - Automatic EOM reset
788 - Interrupt request if RX FIFO is half full
789 This bit should be ignored in DMA mode (according to the
790 documentation), but actually isn't. The receiver doesn't work if
791 it is set. Thus, we have to clear it in DMA mode.
792 - Interrupt/DMA request if TX FIFO is completely empty
793 a) If set, the ESCC behaves as if it had no TX FIFO (Z85C30
794 compatibility).
795 b) If cleared, DMA requests may follow each other very quickly,
796 filling up the TX FIFO.
797 Advantage: TX works even in case of high bus latency.
798 Disadvantage: Edge-triggered DMA request circuitry may miss
799 a request. No more data is delivered, resulting
800 in a TX FIFO underrun.
801 Both PI2 and S5SCC/DMA seem to work fine with TXFIFOE cleared.
802 The PackeTwin doesn't. I don't know about the PI, but let's
803 assume it behaves like the PI2.
804 */
805 if (priv->param.dma >= 0) {
806 if (priv->type == TYPE_TWIN)
807 write_scc(priv, R7, AUTOEOM | TXFIFOE);
808 else
809 write_scc(priv, R7, AUTOEOM);
810 } else {
811 write_scc(priv, R7, AUTOEOM | RXFIFOH);
812 }
813 write_scc(priv, R15, 0);
814 break;
815 }
816 /* Preset CRC, NRZ(I) encoding */
817 write_scc(priv, R10, CRCPS | (priv->param.nrzi ? NRZI : NRZ));
818
819 /* Configure baud rate generator */
820 if (priv->param.brg_tc >= 0) {
821 /* Program BR generator */
822 write_scc(priv, R12, priv->param.brg_tc & 0xFF);
823 write_scc(priv, R13, (priv->param.brg_tc >> 8) & 0xFF);
824 /* BRG source = SYS CLK; enable BRG; DTR REQ function (required by
825 PackeTwin, not connected on the PI2); set DPLL source to BRG */
826 write_scc(priv, R14, SSBR | DTRREQ | BRSRC | BRENABL);
827 /* Enable DPLL */
828 write_scc(priv, R14, SEARCH | DTRREQ | BRSRC | BRENABL);
829 } else {
830 /* Disable BR generator */
831 write_scc(priv, R14, DTRREQ | BRSRC);
832 }
833
834 /* Configure clocks */
835 if (priv->type == TYPE_TWIN) {
836 /* Disable external TX clock receiver */
837 outb((info->twin_serial_cfg &=
838 ~(priv->channel ? TWIN_EXTCLKB : TWIN_EXTCLKA)),
839 card_base + TWIN_SERIAL_CFG);
840 }
841 write_scc(priv, R11, priv->param.clocks);
842 if ((priv->type == TYPE_TWIN) && !(priv->param.clocks & TRxCOI)) {
843 /* Enable external TX clock receiver */
844 outb((info->twin_serial_cfg |=
845 (priv->channel ? TWIN_EXTCLKB : TWIN_EXTCLKA)),
846 card_base + TWIN_SERIAL_CFG);
847 }
848
849 /* Configure PackeTwin */
850 if (priv->type == TYPE_TWIN) {
851 /* Assert DTR, enable interrupts */
852 outb((info->twin_serial_cfg |= TWIN_EI |
853 (priv->channel ? TWIN_DTRB_ON : TWIN_DTRA_ON)),
854 card_base + TWIN_SERIAL_CFG);
855 }
856
857 /* Read current status */
858 priv->rr0 = read_scc(priv, R0);
859 /* Enable DCD interrupt */
860 write_scc(priv, R15, DCDIE);
861
862 netif_start_queue(dev);
863
864 return 0;
865}
866
867
868static int scc_close(struct net_device *dev)
869{
870 struct scc_priv *priv = dev->ml_priv;
871 struct scc_info *info = priv->info;
872 int card_base = priv->card_base;
873
874 netif_stop_queue(dev);
875
876 if (priv->type == TYPE_TWIN) {
877 /* Drop DTR */
878 outb((info->twin_serial_cfg &=
879 (priv->channel ? ~TWIN_DTRB_ON : ~TWIN_DTRA_ON)),
880 card_base + TWIN_SERIAL_CFG);
881 }
882
883 /* Reset channel, free DMA and IRQ */
884 write_scc(priv, R9, (priv->channel ? CHRB : CHRA) | MIE | NV);
885 if (priv->param.dma >= 0) {
886 if (priv->type == TYPE_TWIN)
887 outb(0, card_base + TWIN_DMA_CFG);
888 free_dma(priv->param.dma);
889 }
890 if (--info->irq_used == 0)
891 free_irq(dev->irq, info);
892
893 return 0;
894}
895
896
897static int scc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
898{
899 struct scc_priv *priv = dev->ml_priv;
900
901 switch (cmd) {
902 case SIOCGSCCPARAM:
903 if (copy_to_user
904 (ifr->ifr_data, &priv->param,
905 sizeof(struct scc_param)))
906 return -EFAULT;
907 return 0;
908 case SIOCSSCCPARAM:
909 if (!capable(CAP_NET_ADMIN))
910 return -EPERM;
911 if (netif_running(dev))
912 return -EAGAIN;
913 if (copy_from_user
914 (&priv->param, ifr->ifr_data,
915 sizeof(struct scc_param)))
916 return -EFAULT;
917 return 0;
918 default:
919 return -EINVAL;
920 }
921}
922
923
924static int scc_send_packet(struct sk_buff *skb, struct net_device *dev)
925{
926 struct scc_priv *priv = dev->ml_priv;
927 unsigned long flags;
928 int i;
929
930 if (skb->protocol == htons(ETH_P_IP))
931 return ax25_ip_xmit(skb);
932
933 /* Temporarily stop the scheduler feeding us packets */
934 netif_stop_queue(dev);
935
936 /* Transfer data to DMA buffer */
937 i = priv->tx_head;
938 skb_copy_from_linear_data_offset(skb, 1, priv->tx_buf[i], skb->len - 1);
939 priv->tx_len[i] = skb->len - 1;
940
941 /* Clear interrupts while we touch our circular buffers */
942
943 spin_lock_irqsave(&priv->ring_lock, flags);
944 /* Move the ring buffer's head */
945 priv->tx_head = (i + 1) % NUM_TX_BUF;
946 priv->tx_count++;
947
948 /* If we just filled up the last buffer, leave queue stopped.
949 The higher layers must wait until we have a DMA buffer
950 to accept the data. */
951 if (priv->tx_count < NUM_TX_BUF)
952 netif_wake_queue(dev);
953
954 /* Set new TX state */
955 if (priv->state == IDLE) {
956 /* Assert RTS, start timer */
957 priv->state = TX_HEAD;
958 priv->tx_start = jiffies;
959 write_scc(priv, R5, TxCRC_ENAB | RTS | TxENAB | Tx8);
960 write_scc(priv, R15, 0);
961 start_timer(priv, priv->param.txdelay, 0);
962 }
963
964 /* Turn interrupts back on and free buffer */
965 spin_unlock_irqrestore(&priv->ring_lock, flags);
966 dev_kfree_skb(skb);
967
968 return NETDEV_TX_OK;
969}
970
971
972static int scc_set_mac_address(struct net_device *dev, void *sa)
973{
974 memcpy(dev->dev_addr, ((struct sockaddr *) sa)->sa_data,
975 dev->addr_len);
976 return 0;
977}
978
979
980static inline void tx_on(struct scc_priv *priv)
981{
982 int i, n;
983 unsigned long flags;
984
985 if (priv->param.dma >= 0) {
986 n = (priv->chip == Z85230) ? 3 : 1;
987 /* Program DMA controller */
988 flags = claim_dma_lock();
989 set_dma_mode(priv->param.dma, DMA_MODE_WRITE);
990 set_dma_addr(priv->param.dma,
991 (int) priv->tx_buf[priv->tx_tail] + n);
992 set_dma_count(priv->param.dma,
993 priv->tx_len[priv->tx_tail] - n);
994 release_dma_lock(flags);
995 /* Enable TX underrun interrupt */
996 write_scc(priv, R15, TxUIE);
997 /* Configure DREQ */
998 if (priv->type == TYPE_TWIN)
999 outb((priv->param.dma ==
1000 1) ? TWIN_DMA_HDX_T1 : TWIN_DMA_HDX_T3,
1001 priv->card_base + TWIN_DMA_CFG);
1002 else
1003 write_scc(priv, R1,
1004 EXT_INT_ENAB | WT_FN_RDYFN |
1005 WT_RDY_ENAB);
1006 /* Write first byte(s) */
1007 spin_lock_irqsave(priv->register_lock, flags);
1008 for (i = 0; i < n; i++)
1009 write_scc_data(priv,
1010 priv->tx_buf[priv->tx_tail][i], 1);
1011 enable_dma(priv->param.dma);
1012 spin_unlock_irqrestore(priv->register_lock, flags);
1013 } else {
1014 write_scc(priv, R15, TxUIE);
1015 write_scc(priv, R1,
1016 EXT_INT_ENAB | WT_FN_RDYFN | TxINT_ENAB);
1017 tx_isr(priv);
1018 }
1019 /* Reset EOM latch if we do not have the AUTOEOM feature */
1020 if (priv->chip == Z8530)
1021 write_scc(priv, R0, RES_EOM_L);
1022}
1023
1024
1025static inline void rx_on(struct scc_priv *priv)
1026{
1027 unsigned long flags;
1028
1029 /* Clear RX FIFO */
1030 while (read_scc(priv, R0) & Rx_CH_AV)
1031 read_scc_data(priv);
1032 priv->rx_over = 0;
1033 if (priv->param.dma >= 0) {
1034 /* Program DMA controller */
1035 flags = claim_dma_lock();
1036 set_dma_mode(priv->param.dma, DMA_MODE_READ);
1037 set_dma_addr(priv->param.dma,
1038 (int) priv->rx_buf[priv->rx_head]);
1039 set_dma_count(priv->param.dma, BUF_SIZE);
1040 release_dma_lock(flags);
1041 enable_dma(priv->param.dma);
1042 /* Configure PackeTwin DMA */
1043 if (priv->type == TYPE_TWIN) {
1044 outb((priv->param.dma ==
1045 1) ? TWIN_DMA_HDX_R1 : TWIN_DMA_HDX_R3,
1046 priv->card_base + TWIN_DMA_CFG);
1047 }
1048 /* Sp. cond. intr. only, ext int enable, RX DMA enable */
1049 write_scc(priv, R1, EXT_INT_ENAB | INT_ERR_Rx |
1050 WT_RDY_RT | WT_FN_RDYFN | WT_RDY_ENAB);
1051 } else {
1052 /* Reset current frame */
1053 priv->rx_ptr = 0;
1054 /* Intr. on all Rx characters and Sp. cond., ext int enable */
1055 write_scc(priv, R1, EXT_INT_ENAB | INT_ALL_Rx | WT_RDY_RT |
1056 WT_FN_RDYFN);
1057 }
1058 write_scc(priv, R0, ERR_RES);
1059 write_scc(priv, R3, RxENABLE | Rx8 | RxCRC_ENAB);
1060}
1061
1062
1063static inline void rx_off(struct scc_priv *priv)
1064{
1065 /* Disable receiver */
1066 write_scc(priv, R3, Rx8);
1067 /* Disable DREQ / RX interrupt */
1068 if (priv->param.dma >= 0 && priv->type == TYPE_TWIN)
1069 outb(0, priv->card_base + TWIN_DMA_CFG);
1070 else
1071 write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
1072 /* Disable DMA */
1073 if (priv->param.dma >= 0)
1074 disable_dma(priv->param.dma);
1075}
1076
1077
1078static void start_timer(struct scc_priv *priv, int t, int r15)
1079{
1080 outb(priv->tmr_mode, priv->tmr_ctrl);
1081 if (t == 0) {
1082 tm_isr(priv);
1083 } else if (t > 0) {
1084 outb(t & 0xFF, priv->tmr_cnt);
1085 outb((t >> 8) & 0xFF, priv->tmr_cnt);
1086 if (priv->type != TYPE_TWIN) {
1087 write_scc(priv, R15, r15 | CTSIE);
1088 priv->rr0 |= CTS;
1089 }
1090 }
1091}
1092
1093
1094static inline unsigned char random(void)
1095{
1096 /* See "Numerical Recipes in C", second edition, p. 284 */
1097 rand = rand * 1664525L + 1013904223L;
1098 return (unsigned char) (rand >> 24);
1099}
1100
1101static inline void z8530_isr(struct scc_info *info)
1102{
1103 int is, i = 100;
1104
1105 while ((is = read_scc(&info->priv[0], R3)) && i--) {
1106 if (is & CHARxIP) {
1107 rx_isr(&info->priv[0]);
1108 } else if (is & CHATxIP) {
1109 tx_isr(&info->priv[0]);
1110 } else if (is & CHAEXT) {
1111 es_isr(&info->priv[0]);
1112 } else if (is & CHBRxIP) {
1113 rx_isr(&info->priv[1]);
1114 } else if (is & CHBTxIP) {
1115 tx_isr(&info->priv[1]);
1116 } else {
1117 es_isr(&info->priv[1]);
1118 }
1119 write_scc(&info->priv[0], R0, RES_H_IUS);
1120 i++;
1121 }
1122 if (i < 0) {
1123 printk(KERN_ERR "dmascc: stuck in ISR with RR3=0x%02x.\n",
1124 is);
1125 }
1126 /* Ok, no interrupts pending from this 8530. The INT line should
1127 be inactive now. */
1128}
1129
1130
1131static irqreturn_t scc_isr(int irq, void *dev_id)
1132{
1133 struct scc_info *info = dev_id;
1134
1135 spin_lock(info->priv[0].register_lock);
1136 /* At this point interrupts are enabled, and the interrupt under service
1137 is already acknowledged, but masked off.
1138
1139 Interrupt processing: We loop until we know that the IRQ line is
1140 low. If another positive edge occurs afterwards during the ISR,
1141 another interrupt will be triggered by the interrupt controller
1142 as soon as the IRQ level is enabled again (see asm/irq.h).
1143
1144 Bottom-half handlers will be processed after scc_isr(). This is
1145 important, since we only have small ringbuffers and want new data
1146 to be fetched/delivered immediately. */
1147
1148 if (info->priv[0].type == TYPE_TWIN) {
1149 int is, card_base = info->priv[0].card_base;
1150 while ((is = ~inb(card_base + TWIN_INT_REG)) &
1151 TWIN_INT_MSK) {
1152 if (is & TWIN_SCC_MSK) {
1153 z8530_isr(info);
1154 } else if (is & TWIN_TMR1_MSK) {
1155 inb(card_base + TWIN_CLR_TMR1);
1156 tm_isr(&info->priv[0]);
1157 } else {
1158 inb(card_base + TWIN_CLR_TMR2);
1159 tm_isr(&info->priv[1]);
1160 }
1161 }
1162 } else
1163 z8530_isr(info);
1164 spin_unlock(info->priv[0].register_lock);
1165 return IRQ_HANDLED;
1166}
1167
1168
1169static void rx_isr(struct scc_priv *priv)
1170{
1171 if (priv->param.dma >= 0) {
1172 /* Check special condition and perform error reset. See 2.4.7.5. */
1173 special_condition(priv, read_scc(priv, R1));
1174 write_scc(priv, R0, ERR_RES);
1175 } else {
1176 /* Check special condition for each character. Error reset not necessary.
1177 Same algorithm for SCC and ESCC. See 2.4.7.1 and 2.4.7.4. */
1178 int rc;
1179 while (read_scc(priv, R0) & Rx_CH_AV) {
1180 rc = read_scc(priv, R1);
1181 if (priv->rx_ptr < BUF_SIZE)
1182 priv->rx_buf[priv->rx_head][priv->
1183 rx_ptr++] =
1184 read_scc_data(priv);
1185 else {
1186 priv->rx_over = 2;
1187 read_scc_data(priv);
1188 }
1189 special_condition(priv, rc);
1190 }
1191 }
1192}
1193
1194
1195static void special_condition(struct scc_priv *priv, int rc)
1196{
1197 int cb;
1198 unsigned long flags;
1199
1200 /* See Figure 2-15. Only overrun and EOF need to be checked. */
1201
1202 if (rc & Rx_OVR) {
1203 /* Receiver overrun */
1204 priv->rx_over = 1;
1205 if (priv->param.dma < 0)
1206 write_scc(priv, R0, ERR_RES);
1207 } else if (rc & END_FR) {
1208 /* End of frame. Get byte count */
1209 if (priv->param.dma >= 0) {
1210 flags = claim_dma_lock();
1211 cb = BUF_SIZE - get_dma_residue(priv->param.dma) -
1212 2;
1213 release_dma_lock(flags);
1214 } else {
1215 cb = priv->rx_ptr - 2;
1216 }
1217 if (priv->rx_over) {
1218 /* We had an overrun */
1219 priv->dev->stats.rx_errors++;
1220 if (priv->rx_over == 2)
1221 priv->dev->stats.rx_length_errors++;
1222 else
1223 priv->dev->stats.rx_fifo_errors++;
1224 priv->rx_over = 0;
1225 } else if (rc & CRC_ERR) {
1226 /* Count invalid CRC only if packet length >= minimum */
1227 if (cb >= 15) {
1228 priv->dev->stats.rx_errors++;
1229 priv->dev->stats.rx_crc_errors++;
1230 }
1231 } else {
1232 if (cb >= 15) {
1233 if (priv->rx_count < NUM_RX_BUF - 1) {
1234 /* Put good frame in FIFO */
1235 priv->rx_len[priv->rx_head] = cb;
1236 priv->rx_head =
1237 (priv->rx_head +
1238 1) % NUM_RX_BUF;
1239 priv->rx_count++;
1240 schedule_work(&priv->rx_work);
1241 } else {
1242 priv->dev->stats.rx_errors++;
1243 priv->dev->stats.rx_over_errors++;
1244 }
1245 }
1246 }
1247 /* Get ready for new frame */
1248 if (priv->param.dma >= 0) {
1249 flags = claim_dma_lock();
1250 set_dma_addr(priv->param.dma,
1251 (int) priv->rx_buf[priv->rx_head]);
1252 set_dma_count(priv->param.dma, BUF_SIZE);
1253 release_dma_lock(flags);
1254 } else {
1255 priv->rx_ptr = 0;
1256 }
1257 }
1258}
1259
1260
1261static void rx_bh(struct work_struct *ugli_api)
1262{
1263 struct scc_priv *priv = container_of(ugli_api, struct scc_priv, rx_work);
1264 int i = priv->rx_tail;
1265 int cb;
1266 unsigned long flags;
1267 struct sk_buff *skb;
1268 unsigned char *data;
1269
1270 spin_lock_irqsave(&priv->ring_lock, flags);
1271 while (priv->rx_count) {
1272 spin_unlock_irqrestore(&priv->ring_lock, flags);
1273 cb = priv->rx_len[i];
1274 /* Allocate buffer */
1275 skb = dev_alloc_skb(cb + 1);
1276 if (skb == NULL) {
1277 /* Drop packet */
1278 priv->dev->stats.rx_dropped++;
1279 } else {
1280 /* Fill buffer */
1281 data = skb_put(skb, cb + 1);
1282 data[0] = 0;
1283 memcpy(&data[1], priv->rx_buf[i], cb);
1284 skb->protocol = ax25_type_trans(skb, priv->dev);
1285 netif_rx(skb);
1286 priv->dev->stats.rx_packets++;
1287 priv->dev->stats.rx_bytes += cb;
1288 }
1289 spin_lock_irqsave(&priv->ring_lock, flags);
1290 /* Move tail */
1291 priv->rx_tail = i = (i + 1) % NUM_RX_BUF;
1292 priv->rx_count--;
1293 }
1294 spin_unlock_irqrestore(&priv->ring_lock, flags);
1295}
1296
1297
1298static void tx_isr(struct scc_priv *priv)
1299{
1300 int i = priv->tx_tail, p = priv->tx_ptr;
1301
1302 /* Suspend TX interrupts if we don't want to send anything.
1303 See Figure 2-22. */
1304 if (p == priv->tx_len[i]) {
1305 write_scc(priv, R0, RES_Tx_P);
1306 return;
1307 }
1308
1309 /* Write characters */
1310 while ((read_scc(priv, R0) & Tx_BUF_EMP) && p < priv->tx_len[i]) {
1311 write_scc_data(priv, priv->tx_buf[i][p++], 0);
1312 }
1313
1314 /* Reset EOM latch of Z8530 */
1315 if (!priv->tx_ptr && p && priv->chip == Z8530)
1316 write_scc(priv, R0, RES_EOM_L);
1317
1318 priv->tx_ptr = p;
1319}
1320
1321
1322static void es_isr(struct scc_priv *priv)
1323{
1324 int i, rr0, drr0, res;
1325 unsigned long flags;
1326
1327 /* Read status, reset interrupt bit (open latches) */
1328 rr0 = read_scc(priv, R0);
1329 write_scc(priv, R0, RES_EXT_INT);
1330 drr0 = priv->rr0 ^ rr0;
1331 priv->rr0 = rr0;
1332
1333 /* Transmit underrun (2.4.9.6). We can't check the TxEOM flag, since
1334 it might have already been cleared again by AUTOEOM. */
1335 if (priv->state == TX_DATA) {
1336 /* Get remaining bytes */
1337 i = priv->tx_tail;
1338 if (priv->param.dma >= 0) {
1339 disable_dma(priv->param.dma);
1340 flags = claim_dma_lock();
1341 res = get_dma_residue(priv->param.dma);
1342 release_dma_lock(flags);
1343 } else {
1344 res = priv->tx_len[i] - priv->tx_ptr;
1345 priv->tx_ptr = 0;
1346 }
1347 /* Disable DREQ / TX interrupt */
1348 if (priv->param.dma >= 0 && priv->type == TYPE_TWIN)
1349 outb(0, priv->card_base + TWIN_DMA_CFG);
1350 else
1351 write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
1352 if (res) {
1353 /* Update packet statistics */
1354 priv->dev->stats.tx_errors++;
1355 priv->dev->stats.tx_fifo_errors++;
1356 /* Other underrun interrupts may already be waiting */
1357 write_scc(priv, R0, RES_EXT_INT);
1358 write_scc(priv, R0, RES_EXT_INT);
1359 } else {
1360 /* Update packet statistics */
1361 priv->dev->stats.tx_packets++;
1362 priv->dev->stats.tx_bytes += priv->tx_len[i];
1363 /* Remove frame from FIFO */
1364 priv->tx_tail = (i + 1) % NUM_TX_BUF;
1365 priv->tx_count--;
1366 /* Inform upper layers */
1367 netif_wake_queue(priv->dev);
1368 }
1369 /* Switch state */
1370 write_scc(priv, R15, 0);
1371 if (priv->tx_count &&
1372 (jiffies - priv->tx_start) < priv->param.txtimeout) {
1373 priv->state = TX_PAUSE;
1374 start_timer(priv, priv->param.txpause, 0);
1375 } else {
1376 priv->state = TX_TAIL;
1377 start_timer(priv, priv->param.txtail, 0);
1378 }
1379 }
1380
1381 /* DCD transition */
1382 if (drr0 & DCD) {
1383 if (rr0 & DCD) {
1384 switch (priv->state) {
1385 case IDLE:
1386 case WAIT:
1387 priv->state = DCD_ON;
1388 write_scc(priv, R15, 0);
1389 start_timer(priv, priv->param.dcdon, 0);
1390 }
1391 } else {
1392 switch (priv->state) {
1393 case RX_ON:
1394 rx_off(priv);
1395 priv->state = DCD_OFF;
1396 write_scc(priv, R15, 0);
1397 start_timer(priv, priv->param.dcdoff, 0);
1398 }
1399 }
1400 }
1401
1402 /* CTS transition */
1403 if ((drr0 & CTS) && (~rr0 & CTS) && priv->type != TYPE_TWIN)
1404 tm_isr(priv);
1405
1406}
1407
1408
1409static void tm_isr(struct scc_priv *priv)
1410{
1411 switch (priv->state) {
1412 case TX_HEAD:
1413 case TX_PAUSE:
1414 tx_on(priv);
1415 priv->state = TX_DATA;
1416 break;
1417 case TX_TAIL:
1418 write_scc(priv, R5, TxCRC_ENAB | Tx8);
1419 priv->state = RTS_OFF;
1420 if (priv->type != TYPE_TWIN)
1421 write_scc(priv, R15, 0);
1422 start_timer(priv, priv->param.rtsoff, 0);
1423 break;
1424 case RTS_OFF:
1425 write_scc(priv, R15, DCDIE);
1426 priv->rr0 = read_scc(priv, R0);
1427 if (priv->rr0 & DCD) {
1428 priv->dev->stats.collisions++;
1429 rx_on(priv);
1430 priv->state = RX_ON;
1431 } else {
1432 priv->state = WAIT;
1433 start_timer(priv, priv->param.waittime, DCDIE);
1434 }
1435 break;
1436 case WAIT:
1437 if (priv->tx_count) {
1438 priv->state = TX_HEAD;
1439 priv->tx_start = jiffies;
1440 write_scc(priv, R5,
1441 TxCRC_ENAB | RTS | TxENAB | Tx8);
1442 write_scc(priv, R15, 0);
1443 start_timer(priv, priv->param.txdelay, 0);
1444 } else {
1445 priv->state = IDLE;
1446 if (priv->type != TYPE_TWIN)
1447 write_scc(priv, R15, DCDIE);
1448 }
1449 break;
1450 case DCD_ON:
1451 case DCD_OFF:
1452 write_scc(priv, R15, DCDIE);
1453 priv->rr0 = read_scc(priv, R0);
1454 if (priv->rr0 & DCD) {
1455 rx_on(priv);
1456 priv->state = RX_ON;
1457 } else {
1458 priv->state = WAIT;
1459 start_timer(priv,
1460 random() / priv->param.persist *
1461 priv->param.slottime, DCDIE);
1462 }
1463 break;
1464 }
1465}