27 #include <linux/string.h>
28 #include <linux/kernel.h>
29 #include <linux/types.h>
30 #include <linux/sched.h>
31 #include <linux/slab.h>
37 #include <linux/isdnif.h>
53 static void pcbit_transmit(
struct pcbit_dev *
dev);
55 static void pcbit_recv_ack(
struct pcbit_dev *
dev,
unsigned char ack);
57 static void pcbit_l2_error(
struct pcbit_dev *
dev);
58 static void pcbit_l2_active_conf(
struct pcbit_dev *
dev,
u_char info);
59 static void pcbit_l2_err_recover(
unsigned long data);
61 static void pcbit_firmware_bug(
struct pcbit_dev *
dev);
64 pcbit_sched_delivery(
struct pcbit_dev *
dev)
108 if (dev->write_queue ==
NULL) {
109 dev->write_queue =
frame;
110 spin_unlock_irqrestore(&dev->lock, flags);
113 for (ptr = dev->write_queue; ptr->
next; ptr = ptr->
next);
116 spin_unlock_irqrestore(&dev->lock, flags);
122 pcbit_tx_update(
struct pcbit_dev *
dev,
ushort len)
126 dev->send_seq = (dev->send_seq + 1) % 8;
128 dev->fsize[dev->send_seq] = len;
130 info |= dev->rcv_seq << 3;
131 info |= dev->send_seq;
142 pcbit_transmit(
struct pcbit_dev *
dev)
145 unsigned char unacked;
156 unacked = (dev->send_seq + (8 - dev->unack_seq)) & 0x07;
160 if (dev->free > 16 && dev->write_queue && unacked < 7) {
165 spin_unlock_irqrestore(&dev->lock, flags);
170 frame = dev->write_queue;
173 spin_unlock_irqrestore(&dev->lock, flags);
197 pcbit_writeb(dev, GET_MSG_CPU(msg));
199 pcbit_writeb(dev, GET_MSG_PROC(msg));
202 pcbit_writew(dev, frame->
hdr_len + PREHDR_LEN);
205 pcbit_writew(dev, frame->
dt_len);
213 pcbit_writew(dev, frame->
hdr_len + PREHDR_LEN);
216 pcbit_writew(dev, 0);
219 pcbit_writeb(dev, GET_MSG_CMD(msg));
220 pcbit_writeb(dev, GET_MSG_SCMD(msg));
223 pcbit_writew(dev, frame->
refnum);
229 flen = 2 + (frame->
skb->len - frame->
copied);
235 tt = ((
ushort) (flen - 2)) | 0x8000U;
236 pcbit_writew(dev, tt);
242 cp_len = frame->
skb->len - frame->
copied;
243 if (cp_len > flen - count)
244 cp_len = flen -
count;
246 memcpy_topcbit(dev, frame->
skb->data + frame->
copied,
252 pcbit_tx_update(dev, flen);
258 dev->write_queue = frame->
next;
262 dev_kfree_skb(frame->
skb);
267 spin_unlock_irqrestore(&dev->lock, flags);
269 spin_unlock_irqrestore(&dev->lock, flags);
272 unacked, dev->free, dev->write_queue ?
"not empty" :
288 struct pcbit_dev *dev =
293 while ((frame = dev->read_queue)) {
294 dev->read_queue = frame->
next;
295 spin_unlock_irqrestore(&dev->lock, flags);
299 SET_MSG_PROC(msg, 0);
300 SET_MSG_CMD(msg, frame->
skb->data[2]);
301 SET_MSG_SCMD(msg, frame->
skb->data[3]);
316 spin_unlock_irqrestore(&dev->lock, flags);
324 pcbit_receive(
struct pcbit_dev *dev)
336 tt = pcbit_readw(dev);
338 if ((tt & 0x7fffU) > 511) {
344 if (!(tt & 0x8000U)) {
347 if (dev->read_frame) {
351 kfree(dev->read_frame);
352 dev->read_frame =
NULL;
361 cpu = pcbit_readb(dev);
362 proc = pcbit_readb(dev);
365 if (cpu != 0x06 && cpu != 0x02) {
376 frame->
hdr_len = pcbit_readw(dev);
377 frame->
dt_len = pcbit_readw(dev);
391 pcbit_firmware_bug(dev);
409 ((frame->
hdr_len + 15) & ~15));
418 skb_reserve(frame->
skb, (frame->
hdr_len + 15) & ~15);
425 if (!(frame = dev->read_frame)) {
426 printk(
"Type 1 frame and no frame queued\n");
436 memcpy_frompcbit(dev,
skb_put(frame->
skb, tt), tt);
443 dev->read_frame =
NULL;
445 if (dev->read_queue) {
447 for (ptr = dev->read_queue; ptr->
next; ptr = ptr->
next);
450 dev->read_queue =
frame;
453 dev->read_frame =
frame;
455 spin_unlock_irqrestore(&dev->lock, flags);
465 pcbit_fake_conf(
struct pcbit_dev *dev,
struct pcbit_chan *
chan)
475 dev->dev_if->statcallb(&ictl);
480 pcbit_firmware_bug(
struct pcbit_dev *dev)
482 struct pcbit_chan *chan;
487 pcbit_fake_conf(dev, chan);
492 pcbit_fake_conf(dev, chan);
499 struct pcbit_dev *
dev;
504 dev = (
struct pcbit_dev *) devptr;
510 if (dev->interrupt) {
519 pcbit_l2_active_conf(dev, info);
535 ack_seq = (info >> 3) & 0x07U;
536 read_seq = (info & 0x07
U);
540 if (read_seq != dev->rcv_seq) {
541 while (read_seq != dev->rcv_seq) {
543 dev->rcv_seq = (dev->rcv_seq + 1) % 8;
545 pcbit_sched_delivery(dev);
547 if (ack_seq != dev->unack_seq) {
548 pcbit_recv_ack(dev, ack_seq);
550 info = dev->rcv_seq << 3;
551 info |= dev->send_seq;
559 pcbit_l2_active_conf(
struct pcbit_dev *dev,
u_char info)
563 state = dev->l2_state;
571 dev->rcv_seq = info & 0x07
U;
585 pcbit_l2_err_recover(
unsigned long data)
588 struct pcbit_dev *
dev;
591 dev = (
struct pcbit_dev *) data;
594 if (dev->w_busy || dev->r_busy) {
596 dev->error_recover_timer.expires =
jiffies + ERRTIME;
600 dev->w_busy = dev->r_busy = 1;
602 if (dev->read_frame) {
604 kfree(dev->read_frame);
605 dev->read_frame =
NULL;
607 if (dev->write_queue) {
608 frame = dev->write_queue;
610 dev->write_queue = dev->write_queue->
next;
613 dev_kfree_skb(frame->
skb);
620 dev->rcv_seq = dev->send_seq = dev->unack_seq = 0;
625 pcbit_firmware_bug(dev);
627 dev->writeptr = dev->sh_mem;
628 dev->readptr = dev->sh_mem +
BANK2;
630 writeb((0x80U | ((dev->rcv_seq & 0x07) << 3) | (dev->send_seq & 0x07)),
631 dev->sh_mem +
BANK4);
632 dev->w_busy = dev->r_busy = 0;
637 pcbit_l2_error(
struct pcbit_dev *dev)
650 dev->error_recover_timer.function = &pcbit_l2_err_recover;
651 dev->error_recover_timer.data = (
ulong) dev;
652 dev->error_recover_timer.expires =
jiffies + ERRTIME;
665 pcbit_recv_ack(
struct pcbit_dev *dev,
unsigned char ack)
671 unacked = (dev->send_seq + (8 - dev->unack_seq)) & 0x07;
677 if (dev->send_seq > dev->unack_seq) {
678 if (ack <= dev->unack_seq || ack > dev->send_seq) {
680 "layer 2 ack unacceptable - dev %d",
684 }
else if (ack > dev->send_seq && ack <= dev->unack_seq) {
686 "layer 2 ack unacceptable - dev %d",
697 dev->unack_seq = i = (i + 1) % 8;
698 dev->free += dev->fsize[
i];
702 while (count < 7 && dev->write_queue) {
703 u8 lsend_seq = dev->send_seq;
707 if (dev->send_seq == lsend_seq)