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 <asm/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_array(io
, int, 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
)
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
);
467 printk(KERN_ERR
"dmascc: "
468 "could not allocate memory for %s at %#3x\n",
469 hw
[type
].name
, card_base
);
474 info
->dev
[0] = alloc_netdev(0, "", dev_setup
);
476 printk(KERN_ERR
"dmascc: "
477 "could not allocate memory for %s at %#3x\n",
478 hw
[type
].name
, card_base
);
482 info
->dev
[1] = alloc_netdev(0, "", dev_setup
);
484 printk(KERN_ERR
"dmascc: "
485 "could not allocate memory for %s at %#3x\n",
486 hw
[type
].name
, card_base
);
489 spin_lock_init(&info
->register_lock
);
491 priv
= &info
->priv
[0];
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
;
499 write_scc(priv
, R9
, FHWRES
| MIE
| NV
);
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. */
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. */
513 /* TX FIFO full. This is a Z85C30 SCC with a 1-byte FIFO. */
517 write_scc(priv
, R15
, 0);
519 /* Start IRQ auto-detection */
520 irqs
= probe_irq_on();
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
);
530 write_scc(priv
, R15
, CTSIE
);
531 write_scc(priv
, R0
, RES_EXT_INT
);
532 write_scc(priv
, R1
, EXT_INT_ENAB
);
536 outb(1, tmr_base
+ TMR_CNT1
);
537 outb(0, tmr_base
+ TMR_CNT1
);
539 /* Wait and detect IRQ */
541 while (jiffies
- time
< 2 + HZ
/ TMR_0_HZ
);
542 irq
= probe_irq_off(irqs
);
544 /* Clear pending interrupt, disable interrupts */
545 if (type
== TYPE_TWIN
) {
546 inb(card_base
+ TWIN_CLR_TMR1
);
548 write_scc(priv
, R1
, 0);
549 write_scc(priv
, R15
, 0);
550 write_scc(priv
, R0
, RES_EXT_INT
);
555 "dmascc: could not find irq of %s at %#3x (irq=%d)\n",
556 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 sprintf(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",
595 if (register_netdev(info
->dev
[1])) {
596 printk(KERN_ERR
"dmascc: could not register %s\n",
604 printk(KERN_INFO
"dmascc: found %s (%s) at %#3x, irq %d\n",
605 hw
[type
].name
, chipnames
[chip
], card_base
, irq
);
609 unregister_netdev(info
->dev
[0]);
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]);
616 free_netdev(info
->dev
[0]);
624 /* Driver functions */
626 static void write_scc(struct scc_priv
*priv
, int reg
, int val
)
629 switch (priv
->type
) {
632 outb(reg
, priv
->scc_cmd
);
633 outb(val
, priv
->scc_cmd
);
637 outb_p(reg
, priv
->scc_cmd
);
638 outb_p(val
, priv
->scc_cmd
);
641 spin_lock_irqsave(priv
->register_lock
, flags
);
642 outb_p(0, priv
->card_base
+ PI_DREQ_MASK
);
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
);
653 static void write_scc_data(struct scc_priv
*priv
, int val
, int fast
)
656 switch (priv
->type
) {
658 outb(val
, priv
->scc_data
);
661 outb_p(val
, priv
->scc_data
);
665 outb_p(val
, priv
->scc_data
);
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
);
678 static int read_scc(struct scc_priv
*priv
, int reg
)
682 switch (priv
->type
) {
685 outb(reg
, priv
->scc_cmd
);
686 return inb(priv
->scc_cmd
);
689 outb_p(reg
, priv
->scc_cmd
);
690 return inb_p(priv
->scc_cmd
);
692 spin_lock_irqsave(priv
->register_lock
, flags
);
693 outb_p(0, priv
->card_base
+ PI_DREQ_MASK
);
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
);
704 static int read_scc_data(struct scc_priv
*priv
)
708 switch (priv
->type
) {
710 return inb(priv
->scc_data
);
712 return inb_p(priv
->scc_data
);
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
);
724 static int scc_open(struct net_device
*dev
)
726 struct scc_priv
*priv
= dev
->ml_priv
;
727 struct scc_info
*info
= priv
->info
;
728 int card_base
= priv
->card_base
;
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
)) {
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
);
745 unsigned long flags
= claim_dma_lock();
746 clear_dma_ff(priv
->param
.dma
);
747 release_dma_lock(flags
);
751 /* Initialize local variables */
754 priv
->rx_head
= priv
->rx_tail
= priv
->rx_count
= 0;
756 priv
->tx_head
= priv
->tx_tail
= priv
->tx_count
= 0;
760 write_scc(priv
, R9
, (priv
->channel
? CHRB
: CHRA
) | MIE
| NV
);
761 /* X1 clock, SDLC mode */
762 write_scc(priv
, R4
, SDLC
| X1CLK
);
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);
772 write_scc(priv
, R7
, FLAG
);
773 switch (priv
->chip
) {
776 write_scc(priv
, R15
, SHDLCE
);
778 write_scc(priv
, R7
, AUTOEOM
);
779 write_scc(priv
, R15
, 0);
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
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.
803 if (priv
->param
.dma
>= 0) {
804 if (priv
->type
== TYPE_TWIN
)
805 write_scc(priv
, R7
, AUTOEOM
| TXFIFOE
);
807 write_scc(priv
, R7
, AUTOEOM
);
809 write_scc(priv
, R7
, AUTOEOM
| RXFIFOH
);
811 write_scc(priv
, R15
, 0);
814 /* Preset CRC, NRZ(I) encoding */
815 write_scc(priv
, R10
, CRCPS
| (priv
->param
.nrzi
? NRZI
: NRZ
));
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
);
826 write_scc(priv
, R14
, SEARCH
| DTRREQ
| BRSRC
| BRENABL
);
828 /* Disable BR generator */
829 write_scc(priv
, R14
, DTRREQ
| BRSRC
);
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
);
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
);
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
);
855 /* Read current status */
856 priv
->rr0
= read_scc(priv
, R0
);
857 /* Enable DCD interrupt */
858 write_scc(priv
, R15
, DCDIE
);
860 netif_start_queue(dev
);
866 static int scc_close(struct net_device
*dev
)
868 struct scc_priv
*priv
= dev
->ml_priv
;
869 struct scc_info
*info
= priv
->info
;
870 int card_base
= priv
->card_base
;
872 netif_stop_queue(dev
);
874 if (priv
->type
== TYPE_TWIN
) {
876 outb((info
->twin_serial_cfg
&=
877 (priv
->channel
? ~TWIN_DTRB_ON
: ~TWIN_DTRA_ON
)),
878 card_base
+ TWIN_SERIAL_CFG
);
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
);
888 if (--info
->irq_used
== 0)
889 free_irq(dev
->irq
, info
);
895 static int scc_ioctl(struct net_device
*dev
, struct ifreq
*ifr
, int cmd
)
897 struct scc_priv
*priv
= dev
->ml_priv
;
902 (ifr
->ifr_data
, &priv
->param
,
903 sizeof(struct scc_param
)))
907 if (!capable(CAP_NET_ADMIN
))
909 if (netif_running(dev
))
912 (&priv
->param
, ifr
->ifr_data
,
913 sizeof(struct scc_param
)))
922 static int scc_send_packet(struct sk_buff
*skb
, struct net_device
*dev
)
924 struct scc_priv
*priv
= dev
->ml_priv
;
928 /* Temporarily stop the scheduler feeding us packets */
929 netif_stop_queue(dev
);
931 /* Transfer data to DMA buffer */
933 skb_copy_from_linear_data_offset(skb
, 1, priv
->tx_buf
[i
], skb
->len
- 1);
934 priv
->tx_len
[i
] = skb
->len
- 1;
936 /* Clear interrupts while we touch our circular buffers */
938 spin_lock_irqsave(&priv
->ring_lock
, flags
);
939 /* Move the ring buffer's head */
940 priv
->tx_head
= (i
+ 1) % NUM_TX_BUF
;
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
);
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);
959 /* Turn interrupts back on and free buffer */
960 spin_unlock_irqrestore(&priv
->ring_lock
, flags
);
967 static int scc_set_mac_address(struct net_device
*dev
, void *sa
)
969 memcpy(dev
->dev_addr
, ((struct sockaddr
*) sa
)->sa_data
,
975 static inline void tx_on(struct scc_priv
*priv
)
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
);
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
);
999 EXT_INT_ENAB
| WT_FN_RDYFN
|
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
);
1009 write_scc(priv
, R15
, TxUIE
);
1011 EXT_INT_ENAB
| WT_FN_RDYFN
| TxINT_ENAB
);
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
);
1020 static inline void rx_on(struct scc_priv
*priv
)
1022 unsigned long flags
;
1025 while (read_scc(priv
, R0
) & Rx_CH_AV
)
1026 read_scc_data(priv
);
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
);
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
);
1047 /* Reset current frame */
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
|
1053 write_scc(priv
, R0
, ERR_RES
);
1054 write_scc(priv
, R3
, RxENABLE
| Rx8
| RxCRC_ENAB
);
1058 static inline void rx_off(struct scc_priv
*priv
)
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
);
1066 write_scc(priv
, R1
, EXT_INT_ENAB
| WT_FN_RDYFN
);
1068 if (priv
->param
.dma
>= 0)
1069 disable_dma(priv
->param
.dma
);
1073 static void start_timer(struct scc_priv
*priv
, int t
, int r15
)
1075 outb(priv
->tmr_mode
, priv
->tmr_ctrl
);
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
);
1089 static inline unsigned char random(void)
1091 /* See "Numerical Recipes in C", second edition, p. 284 */
1092 rand
= rand
* 1664525L + 1013904223L;
1093 return (unsigned char) (rand
>> 24);
1096 static inline void z8530_isr(struct scc_info
*info
)
1100 while ((is
= read_scc(&info
->priv
[0], R3
)) && i
--) {
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]);
1112 es_isr(&info
->priv
[1]);
1114 write_scc(&info
->priv
[0], R0
, RES_H_IUS
);
1118 printk(KERN_ERR
"dmascc: stuck in ISR with RR3=0x%02x.\n",
1121 /* Ok, no interrupts pending from this 8530. The INT line should
1126 static irqreturn_t
scc_isr(int irq
, void *dev_id
)
1128 struct scc_info
*info
= dev_id
;
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.
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).
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. */
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
)) &
1147 if (is
& TWIN_SCC_MSK
) {
1149 } else if (is
& TWIN_TMR1_MSK
) {
1150 inb(card_base
+ TWIN_CLR_TMR1
);
1151 tm_isr(&info
->priv
[0]);
1153 inb(card_base
+ TWIN_CLR_TMR2
);
1154 tm_isr(&info
->priv
[1]);
1159 spin_unlock(info
->priv
[0].register_lock
);
1164 static void rx_isr(struct scc_priv
*priv
)
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
);
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. */
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
->
1179 read_scc_data(priv
);
1182 read_scc_data(priv
);
1184 special_condition(priv
, rc
);
1190 static void special_condition(struct scc_priv
*priv
, int rc
)
1193 unsigned long flags
;
1195 /* See Figure 2-15. Only overrun and EOF need to be checked. */
1198 /* Receiver overrun */
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
) -
1208 release_dma_lock(flags
);
1210 cb
= priv
->rx_ptr
- 2;
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
++;
1218 priv
->dev
->stats
.rx_fifo_errors
++;
1220 } else if (rc
& CRC_ERR
) {
1221 /* Count invalid CRC only if packet length >= minimum */
1223 priv
->dev
->stats
.rx_errors
++;
1224 priv
->dev
->stats
.rx_crc_errors
++;
1228 if (priv
->rx_count
< NUM_RX_BUF
- 1) {
1229 /* Put good frame in FIFO */
1230 priv
->rx_len
[priv
->rx_head
] = cb
;
1235 schedule_work(&priv
->rx_work
);
1237 priv
->dev
->stats
.rx_errors
++;
1238 priv
->dev
->stats
.rx_over_errors
++;
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
);
1256 static void rx_bh(struct work_struct
*ugli_api
)
1258 struct scc_priv
*priv
= container_of(ugli_api
, struct scc_priv
, rx_work
);
1259 int i
= priv
->rx_tail
;
1261 unsigned long flags
;
1262 struct sk_buff
*skb
;
1263 unsigned char *data
;
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);
1273 priv
->dev
->stats
.rx_dropped
++;
1276 data
= skb_put(skb
, cb
+ 1);
1278 memcpy(&data
[1], priv
->rx_buf
[i
], cb
);
1279 skb
->protocol
= ax25_type_trans(skb
, priv
->dev
);
1281 priv
->dev
->stats
.rx_packets
++;
1282 priv
->dev
->stats
.rx_bytes
+= cb
;
1284 spin_lock_irqsave(&priv
->ring_lock
, flags
);
1286 priv
->rx_tail
= i
= (i
+ 1) % NUM_RX_BUF
;
1289 spin_unlock_irqrestore(&priv
->ring_lock
, flags
);
1293 static void tx_isr(struct scc_priv
*priv
)
1295 int i
= priv
->tx_tail
, p
= priv
->tx_ptr
;
1297 /* Suspend TX interrupts if we don't want to send anything.
1299 if (p
== priv
->tx_len
[i
]) {
1300 write_scc(priv
, R0
, RES_Tx_P
);
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);
1309 /* Reset EOM latch of Z8530 */
1310 if (!priv
->tx_ptr
&& p
&& priv
->chip
== Z8530
)
1311 write_scc(priv
, R0
, RES_EOM_L
);
1317 static void es_isr(struct scc_priv
*priv
)
1319 int i
, rr0
, drr0
, res
;
1320 unsigned long flags
;
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
;
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 */
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
);
1339 res
= priv
->tx_len
[i
] - priv
->tx_ptr
;
1342 /* Disable DREQ / TX interrupt */
1343 if (priv
->param
.dma
>= 0 && priv
->type
== TYPE_TWIN
)
1344 outb(0, priv
->card_base
+ TWIN_DMA_CFG
);
1346 write_scc(priv
, R1
, EXT_INT_ENAB
| WT_FN_RDYFN
);
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
);
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
;
1361 /* Inform upper layers */
1362 netif_wake_queue(priv
->dev
);
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);
1371 priv
->state
= TX_TAIL
;
1372 start_timer(priv
, priv
->param
.txtail
, 0);
1376 /* DCD transition */
1379 switch (priv
->state
) {
1382 priv
->state
= DCD_ON
;
1383 write_scc(priv
, R15
, 0);
1384 start_timer(priv
, priv
->param
.dcdon
, 0);
1387 switch (priv
->state
) {
1390 priv
->state
= DCD_OFF
;
1391 write_scc(priv
, R15
, 0);
1392 start_timer(priv
, priv
->param
.dcdoff
, 0);
1397 /* CTS transition */
1398 if ((drr0
& CTS
) && (~rr0
& CTS
) && priv
->type
!= TYPE_TWIN
)
1404 static void tm_isr(struct scc_priv
*priv
)
1406 switch (priv
->state
) {
1410 priv
->state
= TX_DATA
;
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);
1420 write_scc(priv
, R15
, DCDIE
);
1421 priv
->rr0
= read_scc(priv
, R0
);
1422 if (priv
->rr0
& DCD
) {
1423 priv
->dev
->stats
.collisions
++;
1425 priv
->state
= RX_ON
;
1428 start_timer(priv
, priv
->param
.waittime
, DCDIE
);
1432 if (priv
->tx_count
) {
1433 priv
->state
= TX_HEAD
;
1434 priv
->tx_start
= jiffies
;
1436 TxCRC_ENAB
| RTS
| TxENAB
| Tx8
);
1437 write_scc(priv
, R15
, 0);
1438 start_timer(priv
, priv
->param
.txdelay
, 0);
1441 if (priv
->type
!= TYPE_TWIN
)
1442 write_scc(priv
, R15
, DCDIE
);
1447 write_scc(priv
, R15
, DCDIE
);
1448 priv
->rr0
= read_scc(priv
, R0
);
1449 if (priv
->rr0
& DCD
) {
1451 priv
->state
= RX_ON
;
1455 random() / priv
->param
.persist
*
1456 priv
->param
.slottime
, DCDIE
);