• Home
  • Raw
  • Download

Lines Matching +full:cs +full:- +full:1

13  * 16-Apr-2002 - led code added - Guy Ellis (guy@traverse.com.au)
31 NETjet_ReadIC(struct IsdnCardState *cs, u_char offset) in NETjet_ReadIC() argument
35 cs->hw.njet.auxd &= 0xfc; in NETjet_ReadIC()
36 cs->hw.njet.auxd |= (offset >> 4) & 3; in NETjet_ReadIC()
37 byteout(cs->hw.njet.auxa, cs->hw.njet.auxd); in NETjet_ReadIC()
38 ret = bytein(cs->hw.njet.isac + ((offset & 0xf) << 2)); in NETjet_ReadIC()
43 NETjet_WriteIC(struct IsdnCardState *cs, u_char offset, u_char value) in NETjet_WriteIC() argument
45 cs->hw.njet.auxd &= 0xfc; in NETjet_WriteIC()
46 cs->hw.njet.auxd |= (offset >> 4) & 3; in NETjet_WriteIC()
47 byteout(cs->hw.njet.auxa, cs->hw.njet.auxd); in NETjet_WriteIC()
48 byteout(cs->hw.njet.isac + ((offset & 0xf) << 2), value); in NETjet_WriteIC()
52 NETjet_ReadICfifo(struct IsdnCardState *cs, u_char *data, int size) in NETjet_ReadICfifo() argument
54 cs->hw.njet.auxd &= 0xfc; in NETjet_ReadICfifo()
55 byteout(cs->hw.njet.auxa, cs->hw.njet.auxd); in NETjet_ReadICfifo()
56 insb(cs->hw.njet.isac, data, size); in NETjet_ReadICfifo()
60 NETjet_WriteICfifo(struct IsdnCardState *cs, u_char *data, int size) in NETjet_WriteICfifo() argument
62 cs->hw.njet.auxd &= 0xfc; in NETjet_WriteICfifo()
63 byteout(cs->hw.njet.auxa, cs->hw.njet.auxd); in NETjet_WriteICfifo()
64 outsb(cs->hw.njet.isac, data, size); in NETjet_WriteICfifo()
81 if (p > bcs->hw.tiger.s_end) in fill_mem()
82 p = bcs->hw.tiger.send; in fill_mem()
89 struct IsdnCardState *cs = bcs->cs; in mode_tiger() local
92 if (cs->debug & L1_DEB_HSCX) in mode_tiger()
93 debugl1(cs, "Tiger mode %d bchan %d/%d", in mode_tiger()
94 mode, bc, bcs->channel); in mode_tiger()
95 bcs->mode = mode; in mode_tiger()
96 bcs->channel = bc; in mode_tiger()
99 fill_mem(bcs, bcs->hw.tiger.send, in mode_tiger()
101 if (cs->debug & L1_DEB_HSCX) in mode_tiger()
102 debugl1(cs, "Tiger stat rec %d/%d send %d", in mode_tiger()
103 bcs->hw.tiger.r_tot, bcs->hw.tiger.r_err, in mode_tiger()
104 bcs->hw.tiger.s_tot); in mode_tiger()
105 if ((cs->bcs[0].mode == L1_MODE_NULL) && in mode_tiger()
106 (cs->bcs[1].mode == L1_MODE_NULL)) { in mode_tiger()
107 cs->hw.njet.dmactrl = 0; in mode_tiger()
108 byteout(cs->hw.njet.base + NETJET_DMACTRL, in mode_tiger()
109 cs->hw.njet.dmactrl); in mode_tiger()
110 byteout(cs->hw.njet.base + NETJET_IRQMASK0, 0); in mode_tiger()
112 if (cs->typ == ISDN_CTYPE_NETJET_S) in mode_tiger()
118 cs->hw.njet.auxd &= led; in mode_tiger()
119 byteout(cs->hw.njet.auxa, cs->hw.njet.auxd); in mode_tiger()
126 fill_mem(bcs, bcs->hw.tiger.send, in mode_tiger()
128 bcs->hw.tiger.r_state = HDLC_ZERO_SEARCH; in mode_tiger()
129 bcs->hw.tiger.r_tot = 0; in mode_tiger()
130 bcs->hw.tiger.r_bitcnt = 0; in mode_tiger()
131 bcs->hw.tiger.r_one = 0; in mode_tiger()
132 bcs->hw.tiger.r_err = 0; in mode_tiger()
133 bcs->hw.tiger.s_tot = 0; in mode_tiger()
134 if (!cs->hw.njet.dmactrl) { in mode_tiger()
135 fill_mem(bcs, bcs->hw.tiger.send, in mode_tiger()
137 cs->hw.njet.dmactrl = 1; in mode_tiger()
138 byteout(cs->hw.njet.base + NETJET_DMACTRL, in mode_tiger()
139 cs->hw.njet.dmactrl); in mode_tiger()
140 byteout(cs->hw.njet.base + NETJET_IRQMASK0, 0x0f); in mode_tiger()
143 bcs->hw.tiger.sendp = bcs->hw.tiger.send; in mode_tiger()
144 bcs->hw.tiger.free = NETJET_DMA_TXSIZE; in mode_tiger()
145 test_and_set_bit(BC_FLG_EMPTY, &bcs->Flag); in mode_tiger()
146 if (cs->typ == ISDN_CTYPE_NETJET_S) in mode_tiger()
151 cs->hw.njet.auxd |= led; in mode_tiger()
152 byteout(cs->hw.njet.auxa, cs->hw.njet.auxd); in mode_tiger()
156 if (cs->debug & L1_DEB_HSCX) in mode_tiger()
157 debugl1(cs, "tiger: set %x %x %x %x/%x pulse=%d", in mode_tiger()
158 bytein(cs->hw.njet.base + NETJET_DMACTRL), in mode_tiger()
159 bytein(cs->hw.njet.base + NETJET_IRQMASK0), in mode_tiger()
160 bytein(cs->hw.njet.base + NETJET_IRQSTAT0), in mode_tiger()
161 inl(cs->hw.njet.base + NETJET_DMA_READ_ADR), in mode_tiger()
162 inl(cs->hw.njet.base + NETJET_DMA_WRITE_ADR), in mode_tiger()
163 bytein(cs->hw.njet.base + NETJET_PULSE_CNT)); in mode_tiger()
166 static void printframe(struct IsdnCardState *cs, u_char *buf, int count, char *s) { in printframe() argument
179 debugl1(cs, "%s", tmp); in printframe()
181 i -= j; in printframe()
191 s_val >>= 1; \
192 if (val & 1) { \
200 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; \
204 s_val >>= 1; \
210 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; \
213 val >>= 1; \
226 if (!bcs->tx_skb) { in make_raw_data()
227 debugl1(bcs->cs, "tiger make_raw: NULL skb"); in make_raw_data()
228 return (1); in make_raw_data()
230 bcs->hw.tiger.sendbuf[s_cnt++] = HDLC_FLAG_VALUE; in make_raw_data()
232 for (i = 0; i < bcs->tx_skb->len; i++) { in make_raw_data()
233 val = bcs->tx_skb->data[i]; in make_raw_data()
245 s_val >>= 1; in make_raw_data()
246 if (val & 1) in make_raw_data()
251 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; in make_raw_data()
254 val >>= 1; in make_raw_data()
256 if (bcs->cs->debug & L1_DEB_HSCX) in make_raw_data()
257 debugl1(bcs->cs, "tiger make_raw: in %u out %d.%d", in make_raw_data()
258 bcs->tx_skb->len, s_cnt, bitcnt); in make_raw_data()
261 s_val >>= 1; in make_raw_data()
264 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; in make_raw_data()
265 bcs->hw.tiger.sendbuf[s_cnt++] = 0xff; // NJ<->NJ thoughput bug fix in make_raw_data()
267 bcs->hw.tiger.sendcnt = s_cnt; in make_raw_data()
268 bcs->tx_cnt -= bcs->tx_skb->len; in make_raw_data()
269 bcs->hw.tiger.sp = bcs->hw.tiger.sendbuf; in make_raw_data()
277 s_val >>= 1; \
278 if (val & 1) { \
286 s_val >>= 1; \
288 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; \
292 s_val >>= 1; \
298 s_val >>= 1; \
300 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; \
303 val >>= 1; \
316 if (!bcs->tx_skb) { in make_raw_data_56k()
317 debugl1(bcs->cs, "tiger make_raw_56k: NULL skb"); in make_raw_data_56k()
318 return (1); in make_raw_data_56k()
323 s_val >>= 1; in make_raw_data_56k()
324 if (val & 1) in make_raw_data_56k()
329 s_val >>= 1; in make_raw_data_56k()
331 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; in make_raw_data_56k()
334 val >>= 1; in make_raw_data_56k()
337 for (i = 0; i < bcs->tx_skb->len; i++) { in make_raw_data_56k()
338 val = bcs->tx_skb->data[i]; in make_raw_data_56k()
350 s_val >>= 1; in make_raw_data_56k()
351 if (val & 1) in make_raw_data_56k()
356 s_val >>= 1; in make_raw_data_56k()
358 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; in make_raw_data_56k()
361 val >>= 1; in make_raw_data_56k()
363 if (bcs->cs->debug & L1_DEB_HSCX) in make_raw_data_56k()
364 debugl1(bcs->cs, "tiger make_raw_56k: in %u out %d.%d", in make_raw_data_56k()
365 bcs->tx_skb->len, s_cnt, bitcnt); in make_raw_data_56k()
368 s_val >>= 1; in make_raw_data_56k()
371 bcs->hw.tiger.sendbuf[s_cnt++] = s_val; in make_raw_data_56k()
372 bcs->hw.tiger.sendbuf[s_cnt++] = 0xff; // NJ<->NJ thoughput bug fix in make_raw_data_56k()
374 bcs->hw.tiger.sendcnt = s_cnt; in make_raw_data_56k()
375 bcs->tx_cnt -= bcs->tx_skb->len; in make_raw_data_56k()
376 bcs->hw.tiger.sp = bcs->hw.tiger.sendbuf; in make_raw_data_56k()
386 skb_put_data(skb, bcs->hw.tiger.rcvbuf, count); in got_frame()
387 skb_queue_tail(&bcs->rqueue, skb); in got_frame()
389 test_and_set_bit(B_RCVBUFREADY, &bcs->event); in got_frame()
390 schedule_work(&bcs->tqueue); in got_frame()
392 if (bcs->cs->debug & L1_DEB_RECEIVE_FRAME) in got_frame()
393 printframe(bcs->cs, bcs->hw.tiger.rcvbuf, count, "rec"); in got_frame()
402 u_int *pend = bcs->hw.tiger.rec + NETJET_DMA_RXSIZE - 1; in read_raw()
403 register u_char state = bcs->hw.tiger.r_state; in read_raw()
404 register u_char r_one = bcs->hw.tiger.r_one; in read_raw()
405 register u_char r_val = bcs->hw.tiger.r_val; in read_raw()
406 register u_int bitcnt = bcs->hw.tiger.r_bitcnt; in read_raw()
411 if (bcs->mode == L1_MODE_HDLC) { // it's 64k in read_raw()
420 val = bcs->channel ? ((*p >> 8) & 0xff) : (*p & 0xff); in read_raw()
423 p = bcs->hw.tiger.rec; in read_raw()
426 bcs->hw.tiger.r_tot++; in read_raw()
433 if (val & 1) { in read_raw()
438 if (bcs->cs->debug & L1_DEB_HSCX) in read_raw()
439 debugl1(bcs->cs, "tiger read_raw: zBit(%d,%d,%d) %x", in read_raw()
440 bcs->hw.tiger.r_tot, i, j, val); in read_raw()
443 if (val & 1) { in read_raw()
453 if (bcs->cs->debug & L1_DEB_HSCX) in read_raw()
454 debugl1(bcs->cs, "tiger read_raw: flag(%d,%d,%d) %x", in read_raw()
455 bcs->hw.tiger.r_tot, i, j, val); in read_raw()
460 if (val & 1) { in read_raw()
465 r_val >>= 1; in read_raw()
474 val >>= 1; in read_raw()
477 r_val >>= 1; in read_raw()
486 bcs->hw.tiger.r_fcs = PPP_INITFCS; in read_raw()
487 bcs->hw.tiger.rcvbuf[0] = r_val; in read_raw()
488 bcs->hw.tiger.r_fcs = PPP_FCS(bcs->hw.tiger.r_fcs, r_val); in read_raw()
489 if (bcs->cs->debug & L1_DEB_HSCX) in read_raw()
490 debugl1(bcs->cs, "tiger read_raw: byte1(%d,%d,%d) rval %x val %x i %x", in read_raw()
491 bcs->hw.tiger.r_tot, i, j, r_val, val, in read_raw()
492 bcs->cs->hw.njet.irqstat0); in read_raw()
495 if (val & 1) { in read_raw()
501 r_val >>= 1; in read_raw()
511 debugl1(bcs->cs, "tiger: frame not byte aligned"); in read_raw()
513 bcs->hw.tiger.r_err++; in read_raw()
515 bcs->err_inv++; in read_raw()
518 if (bcs->cs->debug & L1_DEB_HSCX) in read_raw()
519 debugl1(bcs->cs, "tiger frame end(%d,%d): fcs(%x) i %x", in read_raw()
520 i, j, bcs->hw.tiger.r_fcs, bcs->cs->hw.njet.irqstat0); in read_raw()
521 if (bcs->hw.tiger.r_fcs == PPP_GOODFCS) { in read_raw()
522 got_frame(bcs, (bitcnt >> 3) - 3); in read_raw()
524 if (bcs->cs->debug) { in read_raw()
525 debugl1(bcs->cs, "tiger FCS error"); in read_raw()
526 printframe(bcs->cs, bcs->hw.tiger.rcvbuf, in read_raw()
527 (bitcnt >> 3) - 1, "rec"); in read_raw()
528 bcs->hw.tiger.r_err++; in read_raw()
531 bcs->err_crc++; in read_raw()
538 val >>= 1; in read_raw()
542 r_val >>= 1; in read_raw()
551 debugl1(bcs->cs, "tiger: frame too big"); in read_raw()
554 bcs->hw.tiger.r_err++; in read_raw()
556 bcs->err_inv++; in read_raw()
559 bcs->hw.tiger.rcvbuf[(bitcnt >> 3) - 1] = r_val; in read_raw()
560 bcs->hw.tiger.r_fcs = in read_raw()
561 PPP_FCS(bcs->hw.tiger.r_fcs, r_val); in read_raw()
565 val >>= 1; in read_raw()
567 bcs->hw.tiger.r_tot++; in read_raw()
569 bcs->hw.tiger.r_state = state; in read_raw()
570 bcs->hw.tiger.r_one = r_one; in read_raw()
571 bcs->hw.tiger.r_val = r_val; in read_raw()
572 bcs->hw.tiger.r_bitcnt = bitcnt; in read_raw()
575 void read_tiger(struct IsdnCardState *cs) { in read_tiger() argument
579 if ((cs->hw.njet.irqstat0 & cs->hw.njet.last_is0) & NETJET_IRQM0_READ) { in read_tiger()
580 debugl1(cs, "tiger warn read double dma %x/%x", in read_tiger()
581 cs->hw.njet.irqstat0, cs->hw.njet.last_is0); in read_tiger()
583 if (cs->bcs[0].mode) in read_tiger()
584 cs->bcs[0].err_rdo++; in read_tiger()
585 if (cs->bcs[1].mode) in read_tiger()
586 cs->bcs[1].err_rdo++; in read_tiger()
590 cs->hw.njet.last_is0 &= ~NETJET_IRQM0_READ; in read_tiger()
591 cs->hw.njet.last_is0 |= (cs->hw.njet.irqstat0 & NETJET_IRQM0_READ); in read_tiger()
593 if (cs->hw.njet.irqstat0 & NETJET_IRQM0_READ_1) in read_tiger()
594 p = cs->bcs[0].hw.tiger.rec + NETJET_DMA_RXSIZE - 1; in read_tiger()
596 p = cs->bcs[0].hw.tiger.rec + cnt - 1; in read_tiger()
597 if ((cs->bcs[0].mode == L1_MODE_HDLC) || (cs->bcs[0].mode == L1_MODE_HDLC_56K)) in read_tiger()
598 read_raw(cs->bcs, p, cnt); in read_tiger()
600 if ((cs->bcs[1].mode == L1_MODE_HDLC) || (cs->bcs[1].mode == L1_MODE_HDLC_56K)) in read_tiger()
601 read_raw(cs->bcs + 1, p, cnt); in read_tiger()
602 cs->hw.njet.irqstat0 &= ~NETJET_IRQM0_READ; in read_tiger()
612 if (!bcs->tx_skb) in netjet_fill_dma()
614 if (bcs->cs->debug & L1_DEB_HSCX) in netjet_fill_dma()
615 debugl1(bcs->cs, "tiger fill_dma1: c%d %4lx", bcs->channel, in netjet_fill_dma()
616 bcs->Flag); in netjet_fill_dma()
617 if (test_and_set_bit(BC_FLG_BUSY, &bcs->Flag)) in netjet_fill_dma()
619 if (bcs->mode == L1_MODE_HDLC) { // it's 64k in netjet_fill_dma()
627 if (bcs->cs->debug & L1_DEB_HSCX) in netjet_fill_dma()
628 debugl1(bcs->cs, "tiger fill_dma2: c%d %4lx", bcs->channel, in netjet_fill_dma()
629 bcs->Flag); in netjet_fill_dma()
630 if (test_and_clear_bit(BC_FLG_NOFRAME, &bcs->Flag)) { in netjet_fill_dma()
631 write_raw(bcs, bcs->hw.tiger.sendp, bcs->hw.tiger.free); in netjet_fill_dma()
632 } else if (test_and_clear_bit(BC_FLG_HALF, &bcs->Flag)) { in netjet_fill_dma()
633 p = bus_to_virt(inl(bcs->cs->hw.njet.base + NETJET_DMA_READ_ADR)); in netjet_fill_dma()
634 sp = bcs->hw.tiger.sendp; in netjet_fill_dma()
635 if (p == bcs->hw.tiger.s_end) in netjet_fill_dma()
636 p = bcs->hw.tiger.send - 1; in netjet_fill_dma()
637 if (sp == bcs->hw.tiger.s_end) in netjet_fill_dma()
638 sp = bcs->hw.tiger.send - 1; in netjet_fill_dma()
639 cnt = p - sp; in netjet_fill_dma()
641 write_raw(bcs, bcs->hw.tiger.sendp, bcs->hw.tiger.free); in netjet_fill_dma()
645 if (p > bcs->hw.tiger.s_end) in netjet_fill_dma()
646 p = bcs->hw.tiger.send; in netjet_fill_dma()
649 if (p > bcs->hw.tiger.s_end) in netjet_fill_dma()
650 p = bcs->hw.tiger.send; in netjet_fill_dma()
651 write_raw(bcs, p, bcs->hw.tiger.free - cnt); in netjet_fill_dma()
653 } else if (test_and_clear_bit(BC_FLG_EMPTY, &bcs->Flag)) { in netjet_fill_dma()
654 p = bus_to_virt(inl(bcs->cs->hw.njet.base + NETJET_DMA_READ_ADR)); in netjet_fill_dma()
655 cnt = bcs->hw.tiger.s_end - p; in netjet_fill_dma()
657 p = bcs->hw.tiger.send + 1; in netjet_fill_dma()
658 cnt = NETJET_DMA_TXSIZE / 2 - 2; in netjet_fill_dma()
664 cnt--; in netjet_fill_dma()
665 cnt--; in netjet_fill_dma()
669 if (bcs->cs->debug & L1_DEB_HSCX) in netjet_fill_dma()
670 debugl1(bcs->cs, "tiger fill_dma3: c%d %4lx", bcs->channel, in netjet_fill_dma()
671 bcs->Flag); in netjet_fill_dma()
680 if (test_bit(BC_FLG_BUSY, &bcs->Flag)) { in write_raw()
681 if (bcs->hw.tiger.sendcnt > cnt) { in write_raw()
683 bcs->hw.tiger.sendcnt -= cnt; in write_raw()
685 s_cnt = bcs->hw.tiger.sendcnt; in write_raw()
686 bcs->hw.tiger.sendcnt = 0; in write_raw()
688 if (bcs->channel) in write_raw()
693 val = bcs->channel ? ((bcs->hw.tiger.sp[i] << 8) & 0xff00) : in write_raw()
694 (bcs->hw.tiger.sp[i]); in write_raw()
697 if (p > bcs->hw.tiger.s_end) in write_raw()
698 p = bcs->hw.tiger.send; in write_raw()
700 bcs->hw.tiger.s_tot += s_cnt; in write_raw()
701 if (bcs->cs->debug & L1_DEB_HSCX) in write_raw()
702 debugl1(bcs->cs, "tiger write_raw: c%d %p-%p %d/%d %d %x", bcs->channel, in write_raw()
704 bcs->hw.tiger.sendcnt, bcs->cs->hw.njet.irqstat0); in write_raw()
705 if (bcs->cs->debug & L1_DEB_HSCX_FIFO) in write_raw()
706 printframe(bcs->cs, bcs->hw.tiger.sp, s_cnt, "snd"); in write_raw()
707 bcs->hw.tiger.sp += s_cnt; in write_raw()
708 bcs->hw.tiger.sendp = p; in write_raw()
709 if (!bcs->hw.tiger.sendcnt) { in write_raw()
710 if (!bcs->tx_skb) { in write_raw()
711 debugl1(bcs->cs, "tiger write_raw: NULL skb s_cnt %d", s_cnt); in write_raw()
713 if (test_bit(FLG_LLI_L1WAKEUP, &bcs->st->lli.flag) && in write_raw()
714 (PACKET_NOACK != bcs->tx_skb->pkt_type)) { in write_raw()
716 spin_lock_irqsave(&bcs->aclock, flags); in write_raw()
717 bcs->ackcnt += bcs->tx_skb->len; in write_raw()
718 spin_unlock_irqrestore(&bcs->aclock, flags); in write_raw()
721 dev_kfree_skb_any(bcs->tx_skb); in write_raw()
722 bcs->tx_skb = NULL; in write_raw()
724 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in write_raw()
725 bcs->hw.tiger.free = cnt - s_cnt; in write_raw()
726 if (bcs->hw.tiger.free > (NETJET_DMA_TXSIZE / 2)) in write_raw()
727 test_and_set_bit(BC_FLG_HALF, &bcs->Flag); in write_raw()
729 test_and_clear_bit(BC_FLG_HALF, &bcs->Flag); in write_raw()
730 test_and_set_bit(BC_FLG_NOFRAME, &bcs->Flag); in write_raw()
732 if ((bcs->tx_skb = skb_dequeue(&bcs->squeue))) { in write_raw()
739 if (p > bcs->hw.tiger.s_end) in write_raw()
740 p = bcs->hw.tiger.send; in write_raw()
742 if (bcs->cs->debug & L1_DEB_HSCX) in write_raw()
743 debugl1(bcs->cs, "tiger write_raw: fill rest %d", in write_raw()
744 cnt - s_cnt); in write_raw()
746 test_and_set_bit(B_XMTBUFREADY, &bcs->event); in write_raw()
747 schedule_work(&bcs->tqueue); in write_raw()
750 } else if (test_and_clear_bit(BC_FLG_NOFRAME, &bcs->Flag)) { in write_raw()
751 test_and_set_bit(BC_FLG_HALF, &bcs->Flag); in write_raw()
752 fill_mem(bcs, buf, cnt, bcs->channel, 0xff); in write_raw()
753 bcs->hw.tiger.free += cnt; in write_raw()
754 if (bcs->cs->debug & L1_DEB_HSCX) in write_raw()
755 debugl1(bcs->cs, "tiger write_raw: fill half"); in write_raw()
756 } else if (test_and_clear_bit(BC_FLG_HALF, &bcs->Flag)) { in write_raw()
757 test_and_set_bit(BC_FLG_EMPTY, &bcs->Flag); in write_raw()
758 fill_mem(bcs, buf, cnt, bcs->channel, 0xff); in write_raw()
759 if (bcs->cs->debug & L1_DEB_HSCX) in write_raw()
760 debugl1(bcs->cs, "tiger write_raw: fill full"); in write_raw()
764 void write_tiger(struct IsdnCardState *cs) { in write_tiger() argument
767 if ((cs->hw.njet.irqstat0 & cs->hw.njet.last_is0) & NETJET_IRQM0_WRITE) { in write_tiger()
768 debugl1(cs, "tiger warn write double dma %x/%x", in write_tiger()
769 cs->hw.njet.irqstat0, cs->hw.njet.last_is0); in write_tiger()
771 if (cs->bcs[0].mode) in write_tiger()
772 cs->bcs[0].err_tx++; in write_tiger()
773 if (cs->bcs[1].mode) in write_tiger()
774 cs->bcs[1].err_tx++; in write_tiger()
778 cs->hw.njet.last_is0 &= ~NETJET_IRQM0_WRITE; in write_tiger()
779 cs->hw.njet.last_is0 |= (cs->hw.njet.irqstat0 & NETJET_IRQM0_WRITE); in write_tiger()
781 if (cs->hw.njet.irqstat0 & NETJET_IRQM0_WRITE_1) in write_tiger()
782 p = cs->bcs[0].hw.tiger.send + NETJET_DMA_TXSIZE - 1; in write_tiger()
784 p = cs->bcs[0].hw.tiger.send + cnt - 1; in write_tiger()
785 if ((cs->bcs[0].mode == L1_MODE_HDLC) || (cs->bcs[0].mode == L1_MODE_HDLC_56K)) in write_tiger()
786 write_raw(cs->bcs, p, cnt); in write_tiger()
787 if ((cs->bcs[1].mode == L1_MODE_HDLC) || (cs->bcs[1].mode == L1_MODE_HDLC_56K)) in write_tiger()
788 write_raw(cs->bcs + 1, p, cnt); in write_tiger()
789 cs->hw.njet.irqstat0 &= ~NETJET_IRQM0_WRITE; in write_tiger()
795 struct BCState *bcs = st->l1.bcs; in tiger_l2l1()
801 spin_lock_irqsave(&bcs->cs->lock, flags); in tiger_l2l1()
802 if (bcs->tx_skb) { in tiger_l2l1()
803 skb_queue_tail(&bcs->squeue, skb); in tiger_l2l1()
805 bcs->tx_skb = skb; in tiger_l2l1()
806 bcs->cs->BC_Send_Data(bcs); in tiger_l2l1()
808 spin_unlock_irqrestore(&bcs->cs->lock, flags); in tiger_l2l1()
811 spin_lock_irqsave(&bcs->cs->lock, flags); in tiger_l2l1()
812 if (bcs->tx_skb) { in tiger_l2l1()
815 bcs->tx_skb = skb; in tiger_l2l1()
816 bcs->cs->BC_Send_Data(bcs); in tiger_l2l1()
818 spin_unlock_irqrestore(&bcs->cs->lock, flags); in tiger_l2l1()
821 if (!bcs->tx_skb) { in tiger_l2l1()
822 test_and_clear_bit(FLG_L1_PULL_REQ, &st->l1.Flags); in tiger_l2l1()
823 st->l1.l1l2(st, PH_PULL | CONFIRM, NULL); in tiger_l2l1()
825 test_and_set_bit(FLG_L1_PULL_REQ, &st->l1.Flags); in tiger_l2l1()
828 spin_lock_irqsave(&bcs->cs->lock, flags); in tiger_l2l1()
829 test_and_set_bit(BC_FLG_ACTIV, &bcs->Flag); in tiger_l2l1()
830 mode_tiger(bcs, st->l1.mode, st->l1.bc); in tiger_l2l1()
831 /* 2001/10/04 Christoph Ersfeld, Formula-n Europe AG */ in tiger_l2l1()
832 spin_unlock_irqrestore(&bcs->cs->lock, flags); in tiger_l2l1()
833 bcs->cs->cardmsg(bcs->cs, MDL_BC_ASSIGN, (void *)(&st->l1.bc)); in tiger_l2l1()
837 /* 2001/10/04 Christoph Ersfeld, Formula-n Europe AG */ in tiger_l2l1()
838 bcs->cs->cardmsg(bcs->cs, MDL_BC_RELEASE, (void *)(&st->l1.bc)); in tiger_l2l1()
842 spin_lock_irqsave(&bcs->cs->lock, flags); in tiger_l2l1()
843 test_and_clear_bit(BC_FLG_ACTIV, &bcs->Flag); in tiger_l2l1()
844 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in tiger_l2l1()
845 mode_tiger(bcs, 0, st->l1.bc); in tiger_l2l1()
846 spin_unlock_irqrestore(&bcs->cs->lock, flags); in tiger_l2l1()
847 st->l1.l1l2(st, PH_DEACTIVATE | CONFIRM, NULL); in tiger_l2l1()
856 mode_tiger(bcs, 0, bcs->channel); in close_tigerstate()
857 if (test_and_clear_bit(BC_FLG_INIT, &bcs->Flag)) { in close_tigerstate()
858 kfree(bcs->hw.tiger.rcvbuf); in close_tigerstate()
859 bcs->hw.tiger.rcvbuf = NULL; in close_tigerstate()
860 kfree(bcs->hw.tiger.sendbuf); in close_tigerstate()
861 bcs->hw.tiger.sendbuf = NULL; in close_tigerstate()
862 skb_queue_purge(&bcs->rqueue); in close_tigerstate()
863 skb_queue_purge(&bcs->squeue); in close_tigerstate()
864 if (bcs->tx_skb) { in close_tigerstate()
865 dev_kfree_skb_any(bcs->tx_skb); in close_tigerstate()
866 bcs->tx_skb = NULL; in close_tigerstate()
867 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in close_tigerstate()
873 open_tigerstate(struct IsdnCardState *cs, struct BCState *bcs) in open_tigerstate() argument
875 if (!test_and_set_bit(BC_FLG_INIT, &bcs->Flag)) { in open_tigerstate()
876 if (!(bcs->hw.tiger.rcvbuf = kmalloc(HSCX_BUFMAX, GFP_ATOMIC))) { in open_tigerstate()
879 return (1); in open_tigerstate()
881 if (!(bcs->hw.tiger.sendbuf = kmalloc(RAW_BUFMAX, GFP_ATOMIC))) { in open_tigerstate()
884 return (1); in open_tigerstate()
886 skb_queue_head_init(&bcs->rqueue); in open_tigerstate()
887 skb_queue_head_init(&bcs->squeue); in open_tigerstate()
889 bcs->tx_skb = NULL; in open_tigerstate()
890 bcs->hw.tiger.sendcnt = 0; in open_tigerstate()
891 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in open_tigerstate()
892 bcs->event = 0; in open_tigerstate()
893 bcs->tx_cnt = 0; in open_tigerstate()
900 bcs->channel = st->l1.bc; in setstack_tiger()
901 if (open_tigerstate(st->l1.hardware, bcs)) in setstack_tiger()
902 return (-1); in setstack_tiger()
903 st->l1.bcs = bcs; in setstack_tiger()
904 st->l2.l2l1 = tiger_l2l1; in setstack_tiger()
906 bcs->st = st; in setstack_tiger()
913 inittiger(struct IsdnCardState *cs) in inittiger() argument
915 cs->bcs[0].hw.tiger.send = kmalloc_array(NETJET_DMA_TXSIZE, in inittiger()
918 if (!cs->bcs[0].hw.tiger.send) { in inittiger()
923 cs->bcs[0].hw.tiger.s_irq = cs->bcs[0].hw.tiger.send + NETJET_DMA_TXSIZE / 2 - 1; in inittiger()
924 cs->bcs[0].hw.tiger.s_end = cs->bcs[0].hw.tiger.send + NETJET_DMA_TXSIZE - 1; in inittiger()
925 cs->bcs[1].hw.tiger.send = cs->bcs[0].hw.tiger.send; in inittiger()
926 cs->bcs[1].hw.tiger.s_irq = cs->bcs[0].hw.tiger.s_irq; in inittiger()
927 cs->bcs[1].hw.tiger.s_end = cs->bcs[0].hw.tiger.s_end; in inittiger()
929 memset(cs->bcs[0].hw.tiger.send, 0xff, NETJET_DMA_TXSIZE * sizeof(unsigned int)); in inittiger()
930 debugl1(cs, "tiger: send buf %p - %p", cs->bcs[0].hw.tiger.send, in inittiger()
931 cs->bcs[0].hw.tiger.send + NETJET_DMA_TXSIZE - 1); in inittiger()
932 outl(virt_to_bus(cs->bcs[0].hw.tiger.send), in inittiger()
933 cs->hw.njet.base + NETJET_DMA_READ_START); in inittiger()
934 outl(virt_to_bus(cs->bcs[0].hw.tiger.s_irq), in inittiger()
935 cs->hw.njet.base + NETJET_DMA_READ_IRQ); in inittiger()
936 outl(virt_to_bus(cs->bcs[0].hw.tiger.s_end), in inittiger()
937 cs->hw.njet.base + NETJET_DMA_READ_END); in inittiger()
938 cs->bcs[0].hw.tiger.rec = kmalloc_array(NETJET_DMA_RXSIZE, in inittiger()
941 if (!cs->bcs[0].hw.tiger.rec) { in inittiger()
946 debugl1(cs, "tiger: rec buf %p - %p", cs->bcs[0].hw.tiger.rec, in inittiger()
947 cs->bcs[0].hw.tiger.rec + NETJET_DMA_RXSIZE - 1); in inittiger()
948 cs->bcs[1].hw.tiger.rec = cs->bcs[0].hw.tiger.rec; in inittiger()
949 memset(cs->bcs[0].hw.tiger.rec, 0xff, NETJET_DMA_RXSIZE * sizeof(unsigned int)); in inittiger()
950 outl(virt_to_bus(cs->bcs[0].hw.tiger.rec), in inittiger()
951 cs->hw.njet.base + NETJET_DMA_WRITE_START); in inittiger()
952 outl(virt_to_bus(cs->bcs[0].hw.tiger.rec + NETJET_DMA_RXSIZE / 2 - 1), in inittiger()
953 cs->hw.njet.base + NETJET_DMA_WRITE_IRQ); in inittiger()
954 outl(virt_to_bus(cs->bcs[0].hw.tiger.rec + NETJET_DMA_RXSIZE - 1), in inittiger()
955 cs->hw.njet.base + NETJET_DMA_WRITE_END); in inittiger()
956 debugl1(cs, "tiger: dmacfg %x/%x pulse=%d", in inittiger()
957 inl(cs->hw.njet.base + NETJET_DMA_WRITE_ADR), in inittiger()
958 inl(cs->hw.njet.base + NETJET_DMA_READ_ADR), in inittiger()
959 bytein(cs->hw.njet.base + NETJET_PULSE_CNT)); in inittiger()
960 cs->hw.njet.last_is0 = 0; in inittiger()
961 cs->bcs[0].BC_SetStack = setstack_tiger; in inittiger()
962 cs->bcs[1].BC_SetStack = setstack_tiger; in inittiger()
963 cs->bcs[0].BC_Close = close_tigerstate; in inittiger()
964 cs->bcs[1].BC_Close = close_tigerstate; in inittiger()
968 releasetiger(struct IsdnCardState *cs) in releasetiger() argument
970 kfree(cs->bcs[0].hw.tiger.send); in releasetiger()
971 cs->bcs[0].hw.tiger.send = NULL; in releasetiger()
972 cs->bcs[1].hw.tiger.send = NULL; in releasetiger()
973 kfree(cs->bcs[0].hw.tiger.rec); in releasetiger()
974 cs->bcs[0].hw.tiger.rec = NULL; in releasetiger()
975 cs->bcs[1].hw.tiger.rec = NULL; in releasetiger()
979 release_io_netjet(struct IsdnCardState *cs) in release_io_netjet() argument
981 byteout(cs->hw.njet.base + NETJET_IRQMASK0, 0); in release_io_netjet()
982 byteout(cs->hw.njet.base + NETJET_IRQMASK1, 0); in release_io_netjet()
983 releasetiger(cs); in release_io_netjet()
984 release_region(cs->hw.njet.base, 256); in release_io_netjet()