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