2 * Driver for high-speed SCC boards (those with DMA support)
3 * Copyright (C) 1997-2000 Klaus Kudielka
5 * S5SCC/DMA support by Janko Koleznik S52HI
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.
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.
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.
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>
29 #include <linux/init.h>
30 #include <linux/interrupt.h>
31 #include <linux/ioport.h>
32 #include <linux/kernel.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>
43 #include <linux/uaccess.h>
48 /* Number of buffers per channel */
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 */
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 }
66 #define HARDWARE { HW_PI, HW_PI2, HW_TWIN, HW_S5 }
68 #define TMR_0_HZ 25600 /* Frequency of timer 0 */
76 #define MAX_NUM_DEVS 32
79 /* SCC chips supported */
85 #define CHIPNAMES { "Z8530", "Z85C30", "Z85230" }
90 /* 8530 registers relative to card base */
92 #define SCCB_DATA 0x01
94 #define SCCA_DATA 0x03
96 /* 8253/8254 registers relative to card base */
100 #define TMR_CTRL 0x03
102 /* Additional PI/PI2 registers relative to card base */
103 #define PI_DREQ_MASK 0x04
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
116 /* PackeTwin I/O register values */
119 #define TWIN_SCC_MSK 0x01
120 #define TWIN_TMR1_MSK 0x02
121 #define TWIN_TMR2_MSK 0x04
122 #define TWIN_INT_MSK 0x07
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
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
158 #define SIOCGSCCPARAM SIOCDEVPRIVATE
159 #define SIOCSSCCPARAM (SIOCDEVPRIVATE+1)
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] */
182 struct scc_hardware
{
197 struct net_device
*dev
;
198 struct scc_info
*info
;
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
];
207 struct work_struct rx_work
;
208 int rx_head
, rx_tail
, rx_count
;
210 char tx_buf
[NUM_TX_BUF
][BUF_SIZE
];
211 int tx_len
[NUM_TX_BUF
];
213 int tx_head
, tx_tail
, tx_count
;
215 unsigned long tx_start
;
217 spinlock_t
*register_lock
; /* Per scc_info */
218 spinlock_t ring_lock
;
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 */
231 /* Function declarations */
232 static int setup_adapter(int card_base
, int type
, int n
) __init
;
234 static void write_scc(struct scc_priv
*priv
, int reg
, int val
);
235 static void write_scc_data(struct scc_priv
*priv
, int val
, int fast
);
236 static int read_scc(struct scc_priv
*priv
, int reg
);
237 static int read_scc_data(struct scc_priv
*priv
);
239 static int scc_open(struct net_device
*dev
);
240 static int scc_close(struct net_device
*dev
);
241 static int scc_ioctl(struct net_device
*dev
, struct ifreq
*ifr
, int cmd
);
242 static int scc_send_packet(struct sk_buff
*skb
, struct net_device
*dev
);
243 static int scc_set_mac_address(struct net_device
*dev
, void *sa
);
245 static inline void tx_on(struct scc_priv
*priv
);
246 static inline void rx_on(struct scc_priv
*priv
);
247 static inline void rx_off(struct scc_priv
*priv
);
248 static void start_timer(struct scc_priv
*priv
, int t
, int r15
);
249 static inline unsigned char random(void);
251 static inline void z8530_isr(struct scc_info
*info
);
252 static irqreturn_t
scc_isr(int irq
, void *dev_id
);
253 static void rx_isr(struct scc_priv
*priv
);
254 static void special_condition(struct scc_priv
*priv
, int rc
);
255 static void rx_bh(struct work_struct
*);
256 static void tx_isr(struct scc_priv
*priv
);
257 static void es_isr(struct scc_priv
*priv
);
258 static void tm_isr(struct scc_priv
*priv
);
261 /* Initialization variables */
263 static int io
[MAX_NUM_DEVS
] __initdata
= { 0, };
265 /* Beware! hw[] is also used in dmascc_exit(). */
266 static struct scc_hardware hw
[NUM_TYPES
] = HARDWARE
;
269 /* Global variables */
271 static struct scc_info
*first
;
272 static unsigned long rand
;
275 MODULE_AUTHOR("Klaus Kudielka");
276 MODULE_DESCRIPTION("Driver for high-speed SCC boards");
277 module_param_hw_array(io
, int, ioport
, NULL
, 0);
278 MODULE_LICENSE("GPL");
280 static void __exit
dmascc_exit(void)
283 struct scc_info
*info
;
288 /* Unregister devices */
289 for (i
= 0; i
< 2; i
++)
290 unregister_netdev(info
->dev
[i
]);
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
);
299 for (i
= 0; i
< 2; i
++)
300 free_netdev(info
->dev
[i
]);
308 static int __init
dmascc_init(void)
311 int base
[MAX_NUM_DEVS
], tcmd
[MAX_NUM_DEVS
], t0
[MAX_NUM_DEVS
],
314 unsigned long time
, start
[MAX_NUM_DEVS
], delay
[MAX_NUM_DEVS
],
315 counting
[MAX_NUM_DEVS
];
317 /* Initialize random number generator */
319 /* Cards found = 0 */
321 /* Warning message */
323 printk(KERN_INFO
"dmascc: autoprobing (dangerous)\n");
325 /* Run autodetection for each card type */
326 for (h
= 0; h
< NUM_TYPES
; h
++) {
329 /* User-specified I/O address regions */
330 for (i
= 0; i
< hw
[h
].num_devs
; i
++)
332 for (i
= 0; i
< MAX_NUM_DEVS
&& io
[i
]; i
++) {
334 hw
[h
].io_region
) / hw
[h
].io_delta
;
335 if (j
>= 0 && j
< hw
[h
].num_devs
&&
337 j
* hw
[h
].io_delta
== io
[i
]) {
342 /* Default I/O address regions */
343 for (i
= 0; i
< hw
[h
].num_devs
; i
++) {
345 hw
[h
].io_region
+ i
* hw
[h
].io_delta
;
349 /* Check valid I/O address regions */
350 for (i
= 0; i
< hw
[h
].num_devs
; i
++)
353 (base
[i
], hw
[h
].io_size
, "dmascc"))
357 base
[i
] + hw
[h
].tmr_offset
+
360 base
[i
] + hw
[h
].tmr_offset
+
363 base
[i
] + hw
[h
].tmr_offset
+
369 for (i
= 0; i
< hw
[h
].num_devs
; i
++)
371 /* Timer 0: LSB+MSB, Mode 3, TMR_0_HZ */
373 outb((hw
[h
].tmr_hz
/ TMR_0_HZ
) & 0xFF,
375 outb((hw
[h
].tmr_hz
/ TMR_0_HZ
) >> 8,
377 /* Timer 1: LSB+MSB, Mode 0, HZ/10 */
379 outb((TMR_0_HZ
/ HZ
* 10) & 0xFF, t1
[i
]);
380 outb((TMR_0_HZ
/ HZ
* 10) >> 8, t1
[i
]);
384 /* Timer 2: LSB+MSB, Mode 0 */
388 /* Wait until counter registers are loaded */
389 udelay(2000000 / TMR_0_HZ
);
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 */
398 inb(t1
[i
]) + (inb(t1
[i
]) << 8);
399 /* Also check whether counter did wrap */
401 t_val
> TMR_0_HZ
/ HZ
* 10)
403 delay
[i
] = jiffies
- start
[i
];
407 /* Evaluate measurements */
408 for (i
= 0; i
< hw
[h
].num_devs
; i
++)
410 if ((delay
[i
] >= 9 && delay
[i
] <= 11) &&
411 /* Ok, we have found an adapter */
412 (setup_adapter(base
[i
], h
, n
) == 0))
415 release_region(base
[i
],
421 /* If any adapter was successfully initialized, return ok */
425 /* If no adapter found, return error */
426 printk(KERN_INFO
"dmascc: no adapters found\n");
430 module_init(dmascc_init
);
431 module_exit(dmascc_exit
);
433 static void __init
dev_setup(struct net_device
*dev
)
435 dev
->type
= ARPHRD_AX25
;
436 dev
->hard_header_len
= AX25_MAX_HEADER_LEN
;
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
);
444 static 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
,
452 static int __init
setup_adapter(int card_base
, int type
, int n
)
454 int i
, irq
, chip
, err
;
455 struct scc_info
*info
;
456 struct net_device
*dev
;
457 struct scc_priv
*priv
;
460 int tmr_base
= card_base
+ hw
[type
].tmr_offset
;
461 int scc_base
= card_base
+ hw
[type
].scc_offset
;
462 char *chipnames
[] = CHIPNAMES
;
464 /* Initialize what is necessary for write_scc and write_scc_data */
465 info
= kzalloc(sizeof(struct scc_info
), GFP_KERNEL
| GFP_DMA
);
471 info
->dev
[0] = alloc_netdev(0, "", NET_NAME_UNKNOWN
, dev_setup
);
473 printk(KERN_ERR
"dmascc: "
474 "could not allocate memory for %s at %#3x\n",
475 hw
[type
].name
, card_base
);
480 info
->dev
[1] = alloc_netdev(0, "", NET_NAME_UNKNOWN
, dev_setup
);
482 printk(KERN_ERR
"dmascc: "
483 "could not allocate memory for %s at %#3x\n",
484 hw
[type
].name
, card_base
);
488 spin_lock_init(&info
->register_lock
);
490 priv
= &info
->priv
[0];
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
;
498 write_scc(priv
, R9
, FHWRES
| MIE
| NV
);
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. */
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. */
512 /* TX FIFO full. This is a Z85C30 SCC with a 1-byte FIFO. */
516 write_scc(priv
, R15
, 0);
518 /* Start IRQ auto-detection */
519 irqs
= probe_irq_on();
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
);
529 write_scc(priv
, R15
, CTSIE
);
530 write_scc(priv
, R0
, RES_EXT_INT
);
531 write_scc(priv
, R1
, EXT_INT_ENAB
);
535 outb(1, tmr_base
+ TMR_CNT1
);
536 outb(0, tmr_base
+ TMR_CNT1
);
538 /* Wait and detect IRQ */
540 while (jiffies
- time
< 2 + HZ
/ TMR_0_HZ
);
541 irq
= probe_irq_off(irqs
);
543 /* Clear pending interrupt, disable interrupts */
544 if (type
== TYPE_TWIN
) {
545 inb(card_base
+ TWIN_CLR_TMR1
);
547 write_scc(priv
, R1
, 0);
548 write_scc(priv
, R15
, 0);
549 write_scc(priv
, R0
, RES_EXT_INT
);
554 "dmascc: could not find irq of %s at %#3x (irq=%d)\n",
555 hw
[type
].name
, card_base
, irq
);
560 /* Set up data structures */
561 for (i
= 0; i
< 2; i
++) {
563 priv
= &info
->priv
[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
);
584 snprintf(dev
->name
, sizeof(dev
->name
), "dmascc%i", 2 * n
+ i
);
585 dev
->base_addr
= card_base
;
587 dev
->netdev_ops
= &scc_netdev_ops
;
588 dev
->header_ops
= &ax25_header_ops
;
590 if (register_netdev(info
->dev
[0])) {
591 printk(KERN_ERR
"dmascc: could not register %s\n",
596 if (register_netdev(info
->dev
[1])) {
597 printk(KERN_ERR
"dmascc: could not register %s\n",
606 printk(KERN_INFO
"dmascc: found %s (%s) at %#3x, irq %d\n",
607 hw
[type
].name
, chipnames
[chip
], card_base
, irq
);
611 unregister_netdev(info
->dev
[0]);
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]);
618 free_netdev(info
->dev
[0]);
626 /* Driver functions */
628 static void write_scc(struct scc_priv
*priv
, int reg
, int val
)
631 switch (priv
->type
) {
634 outb(reg
, priv
->scc_cmd
);
635 outb(val
, priv
->scc_cmd
);
639 outb_p(reg
, priv
->scc_cmd
);
640 outb_p(val
, priv
->scc_cmd
);
643 spin_lock_irqsave(priv
->register_lock
, flags
);
644 outb_p(0, priv
->card_base
+ PI_DREQ_MASK
);
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
);
655 static void write_scc_data(struct scc_priv
*priv
, int val
, int fast
)
658 switch (priv
->type
) {
660 outb(val
, priv
->scc_data
);
663 outb_p(val
, priv
->scc_data
);
667 outb_p(val
, priv
->scc_data
);
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
);
680 static int read_scc(struct scc_priv
*priv
, int reg
)
684 switch (priv
->type
) {
687 outb(reg
, priv
->scc_cmd
);
688 return inb(priv
->scc_cmd
);
691 outb_p(reg
, priv
->scc_cmd
);
692 return inb_p(priv
->scc_cmd
);
694 spin_lock_irqsave(priv
->register_lock
, flags
);
695 outb_p(0, priv
->card_base
+ PI_DREQ_MASK
);
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
);
706 static int read_scc_data(struct scc_priv
*priv
)
710 switch (priv
->type
) {
712 return inb(priv
->scc_data
);
714 return inb_p(priv
->scc_data
);
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
);
726 static int scc_open(struct net_device
*dev
)
728 struct scc_priv
*priv
= dev
->ml_priv
;
729 struct scc_info
*info
= priv
->info
;
730 int card_base
= priv
->card_base
;
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
)) {
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
);
747 unsigned long flags
= claim_dma_lock();
748 clear_dma_ff(priv
->param
.dma
);
749 release_dma_lock(flags
);
753 /* Initialize local variables */
756 priv
->rx_head
= priv
->rx_tail
= priv
->rx_count
= 0;
758 priv
->tx_head
= priv
->tx_tail
= priv
->tx_count
= 0;
762 write_scc(priv
, R9
, (priv
->channel
? CHRB
: CHRA
) | MIE
| NV
);
763 /* X1 clock, SDLC mode */
764 write_scc(priv
, R4
, SDLC
| X1CLK
);
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);
774 write_scc(priv
, R7
, FLAG
);
775 switch (priv
->chip
) {
778 write_scc(priv
, R15
, SHDLCE
);
780 write_scc(priv
, R7
, AUTOEOM
);
781 write_scc(priv
, R15
, 0);
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
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.
805 if (priv
->param
.dma
>= 0) {
806 if (priv
->type
== TYPE_TWIN
)
807 write_scc(priv
, R7
, AUTOEOM
| TXFIFOE
);
809 write_scc(priv
, R7
, AUTOEOM
);
811 write_scc(priv
, R7
, AUTOEOM
| RXFIFOH
);
813 write_scc(priv
, R15
, 0);
816 /* Preset CRC, NRZ(I) encoding */
817 write_scc(priv
, R10
, CRCPS
| (priv
->param
.nrzi
? NRZI
: NRZ
));
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
);
828 write_scc(priv
, R14
, SEARCH
| DTRREQ
| BRSRC
| BRENABL
);
830 /* Disable BR generator */
831 write_scc(priv
, R14
, DTRREQ
| BRSRC
);
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
);
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
);
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
);
857 /* Read current status */
858 priv
->rr0
= read_scc(priv
, R0
);
859 /* Enable DCD interrupt */
860 write_scc(priv
, R15
, DCDIE
);
862 netif_start_queue(dev
);
868 static int scc_close(struct net_device
*dev
)
870 struct scc_priv
*priv
= dev
->ml_priv
;
871 struct scc_info
*info
= priv
->info
;
872 int card_base
= priv
->card_base
;
874 netif_stop_queue(dev
);
876 if (priv
->type
== TYPE_TWIN
) {
878 outb((info
->twin_serial_cfg
&=
879 (priv
->channel
? ~TWIN_DTRB_ON
: ~TWIN_DTRA_ON
)),
880 card_base
+ TWIN_SERIAL_CFG
);
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
);
890 if (--info
->irq_used
== 0)
891 free_irq(dev
->irq
, info
);
897 static int scc_ioctl(struct net_device
*dev
, struct ifreq
*ifr
, int cmd
)
899 struct scc_priv
*priv
= dev
->ml_priv
;
904 (ifr
->ifr_data
, &priv
->param
,
905 sizeof(struct scc_param
)))
909 if (!capable(CAP_NET_ADMIN
))
911 if (netif_running(dev
))
914 (&priv
->param
, ifr
->ifr_data
,
915 sizeof(struct scc_param
)))
924 static int scc_send_packet(struct sk_buff
*skb
, struct net_device
*dev
)
926 struct scc_priv
*priv
= dev
->ml_priv
;
930 if (skb
->protocol
== htons(ETH_P_IP
))
931 return ax25_ip_xmit(skb
);
933 /* Temporarily stop the scheduler feeding us packets */
934 netif_stop_queue(dev
);
936 /* Transfer data to DMA buffer */
938 skb_copy_from_linear_data_offset(skb
, 1, priv
->tx_buf
[i
], skb
->len
- 1);
939 priv
->tx_len
[i
] = skb
->len
- 1;
941 /* Clear interrupts while we touch our circular buffers */
943 spin_lock_irqsave(&priv
->ring_lock
, flags
);
944 /* Move the ring buffer's head */
945 priv
->tx_head
= (i
+ 1) % NUM_TX_BUF
;
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
);
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);
964 /* Turn interrupts back on and free buffer */
965 spin_unlock_irqrestore(&priv
->ring_lock
, flags
);
972 static int scc_set_mac_address(struct net_device
*dev
, void *sa
)
974 memcpy(dev
->dev_addr
, ((struct sockaddr
*) sa
)->sa_data
,
980 static inline void tx_on(struct scc_priv
*priv
)
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
);
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
);
1004 EXT_INT_ENAB
| WT_FN_RDYFN
|
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
);
1014 write_scc(priv
, R15
, TxUIE
);
1016 EXT_INT_ENAB
| WT_FN_RDYFN
| TxINT_ENAB
);
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
);
1025 static inline void rx_on(struct scc_priv
*priv
)
1027 unsigned long flags
;
1030 while (read_scc(priv
, R0
) & Rx_CH_AV
)
1031 read_scc_data(priv
);
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
);
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
);
1052 /* Reset current frame */
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
|
1058 write_scc(priv
, R0
, ERR_RES
);
1059 write_scc(priv
, R3
, RxENABLE
| Rx8
| RxCRC_ENAB
);
1063 static inline void rx_off(struct scc_priv
*priv
)
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
);
1071 write_scc(priv
, R1
, EXT_INT_ENAB
| WT_FN_RDYFN
);
1073 if (priv
->param
.dma
>= 0)
1074 disable_dma(priv
->param
.dma
);
1078 static void start_timer(struct scc_priv
*priv
, int t
, int r15
)
1080 outb(priv
->tmr_mode
, priv
->tmr_ctrl
);
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
);
1094 static inline unsigned char random(void)
1096 /* See "Numerical Recipes in C", second edition, p. 284 */
1097 rand
= rand
* 1664525L + 1013904223L;
1098 return (unsigned char) (rand
>> 24);
1101 static inline void z8530_isr(struct scc_info
*info
)
1105 while ((is
= read_scc(&info
->priv
[0], R3
)) && i
--) {
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]);
1117 es_isr(&info
->priv
[1]);
1119 write_scc(&info
->priv
[0], R0
, RES_H_IUS
);
1123 printk(KERN_ERR
"dmascc: stuck in ISR with RR3=0x%02x.\n",
1126 /* Ok, no interrupts pending from this 8530. The INT line should
1131 static irqreturn_t
scc_isr(int irq
, void *dev_id
)
1133 struct scc_info
*info
= dev_id
;
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.
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).
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. */
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
)) &
1152 if (is
& TWIN_SCC_MSK
) {
1154 } else if (is
& TWIN_TMR1_MSK
) {
1155 inb(card_base
+ TWIN_CLR_TMR1
);
1156 tm_isr(&info
->priv
[0]);
1158 inb(card_base
+ TWIN_CLR_TMR2
);
1159 tm_isr(&info
->priv
[1]);
1164 spin_unlock(info
->priv
[0].register_lock
);
1169 static void rx_isr(struct scc_priv
*priv
)
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
);
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. */
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
->
1184 read_scc_data(priv
);
1187 read_scc_data(priv
);
1189 special_condition(priv
, rc
);
1195 static void special_condition(struct scc_priv
*priv
, int rc
)
1198 unsigned long flags
;
1200 /* See Figure 2-15. Only overrun and EOF need to be checked. */
1203 /* Receiver overrun */
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
) -
1213 release_dma_lock(flags
);
1215 cb
= priv
->rx_ptr
- 2;
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
++;
1223 priv
->dev
->stats
.rx_fifo_errors
++;
1225 } else if (rc
& CRC_ERR
) {
1226 /* Count invalid CRC only if packet length >= minimum */
1228 priv
->dev
->stats
.rx_errors
++;
1229 priv
->dev
->stats
.rx_crc_errors
++;
1233 if (priv
->rx_count
< NUM_RX_BUF
- 1) {
1234 /* Put good frame in FIFO */
1235 priv
->rx_len
[priv
->rx_head
] = cb
;
1240 schedule_work(&priv
->rx_work
);
1242 priv
->dev
->stats
.rx_errors
++;
1243 priv
->dev
->stats
.rx_over_errors
++;
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
);
1261 static void rx_bh(struct work_struct
*ugli_api
)
1263 struct scc_priv
*priv
= container_of(ugli_api
, struct scc_priv
, rx_work
);
1264 int i
= priv
->rx_tail
;
1266 unsigned long flags
;
1267 struct sk_buff
*skb
;
1268 unsigned char *data
;
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);
1278 priv
->dev
->stats
.rx_dropped
++;
1281 data
= skb_put(skb
, cb
+ 1);
1283 memcpy(&data
[1], priv
->rx_buf
[i
], cb
);
1284 skb
->protocol
= ax25_type_trans(skb
, priv
->dev
);
1286 priv
->dev
->stats
.rx_packets
++;
1287 priv
->dev
->stats
.rx_bytes
+= cb
;
1289 spin_lock_irqsave(&priv
->ring_lock
, flags
);
1291 priv
->rx_tail
= i
= (i
+ 1) % NUM_RX_BUF
;
1294 spin_unlock_irqrestore(&priv
->ring_lock
, flags
);
1298 static void tx_isr(struct scc_priv
*priv
)
1300 int i
= priv
->tx_tail
, p
= priv
->tx_ptr
;
1302 /* Suspend TX interrupts if we don't want to send anything.
1304 if (p
== priv
->tx_len
[i
]) {
1305 write_scc(priv
, R0
, RES_Tx_P
);
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);
1314 /* Reset EOM latch of Z8530 */
1315 if (!priv
->tx_ptr
&& p
&& priv
->chip
== Z8530
)
1316 write_scc(priv
, R0
, RES_EOM_L
);
1322 static void es_isr(struct scc_priv
*priv
)
1324 int i
, rr0
, drr0
, res
;
1325 unsigned long flags
;
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
;
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 */
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
);
1344 res
= priv
->tx_len
[i
] - priv
->tx_ptr
;
1347 /* Disable DREQ / TX interrupt */
1348 if (priv
->param
.dma
>= 0 && priv
->type
== TYPE_TWIN
)
1349 outb(0, priv
->card_base
+ TWIN_DMA_CFG
);
1351 write_scc(priv
, R1
, EXT_INT_ENAB
| WT_FN_RDYFN
);
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
);
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
;
1366 /* Inform upper layers */
1367 netif_wake_queue(priv
->dev
);
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);
1376 priv
->state
= TX_TAIL
;
1377 start_timer(priv
, priv
->param
.txtail
, 0);
1381 /* DCD transition */
1384 switch (priv
->state
) {
1387 priv
->state
= DCD_ON
;
1388 write_scc(priv
, R15
, 0);
1389 start_timer(priv
, priv
->param
.dcdon
, 0);
1392 switch (priv
->state
) {
1395 priv
->state
= DCD_OFF
;
1396 write_scc(priv
, R15
, 0);
1397 start_timer(priv
, priv
->param
.dcdoff
, 0);
1402 /* CTS transition */
1403 if ((drr0
& CTS
) && (~rr0
& CTS
) && priv
->type
!= TYPE_TWIN
)
1409 static void tm_isr(struct scc_priv
*priv
)
1411 switch (priv
->state
) {
1415 priv
->state
= TX_DATA
;
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);
1425 write_scc(priv
, R15
, DCDIE
);
1426 priv
->rr0
= read_scc(priv
, R0
);
1427 if (priv
->rr0
& DCD
) {
1428 priv
->dev
->stats
.collisions
++;
1430 priv
->state
= RX_ON
;
1433 start_timer(priv
, priv
->param
.waittime
, DCDIE
);
1437 if (priv
->tx_count
) {
1438 priv
->state
= TX_HEAD
;
1439 priv
->tx_start
= jiffies
;
1441 TxCRC_ENAB
| RTS
| TxENAB
| Tx8
);
1442 write_scc(priv
, R15
, 0);
1443 start_timer(priv
, priv
->param
.txdelay
, 0);
1446 if (priv
->type
!= TYPE_TWIN
)
1447 write_scc(priv
, R15
, DCDIE
);
1452 write_scc(priv
, R15
, DCDIE
);
1453 priv
->rr0
= read_scc(priv
, R0
);
1454 if (priv
->rr0
& DCD
) {
1456 priv
->state
= RX_ON
;
1460 random() / priv
->param
.persist
*
1461 priv
->param
.slottime
, DCDIE
);