Lines Matching refs:bch

143 	struct bchannel		bch[2];  member
154 card->bch[0].debug = debug; in _set_debug()
155 card->bch[1].debug = debug; in _set_debug()
263 if (test_bit(FLG_ACTIVE, &fc->bch[0].Flags) && in Sel_BCS()
264 (fc->bch[0].nr & channel)) in Sel_BCS()
265 return &fc->bch[0]; in Sel_BCS()
266 else if (test_bit(FLG_ACTIVE, &fc->bch[1].Flags) && in Sel_BCS()
267 (fc->bch[1].nr & channel)) in Sel_BCS()
268 return &fc->bch[1]; in Sel_BCS()
288 write_ctrl(struct bchannel *bch, int which) { in write_ctrl() argument
289 struct fritzcard *fc = bch->hw; in write_ctrl()
292 hdlc = &fc->hdlc[(bch->nr - 1) & 1]; in write_ctrl()
293 pr_debug("%s: hdlc %c wr%x ctrl %x\n", fc->name, '@' + bch->nr, in write_ctrl()
297 __write_ctrl_pciv2(fc, hdlc, bch->nr); in write_ctrl()
300 __write_ctrl_pci(fc, hdlc, bch->nr); in write_ctrl()
349 modehdlc(struct bchannel *bch, int protocol) in modehdlc() argument
351 struct fritzcard *fc = bch->hw; in modehdlc()
355 hdlc = &fc->hdlc[(bch->nr - 1) & 1]; in modehdlc()
357 '@' + bch->nr, bch->state, protocol, bch->nr); in modehdlc()
363 bch->state = -1; in modehdlc()
365 if (bch->state == ISDN_P_NONE) in modehdlc()
369 write_ctrl(bch, 5); in modehdlc()
370 bch->state = ISDN_P_NONE; in modehdlc()
371 test_and_clear_bit(FLG_HDLC, &bch->Flags); in modehdlc()
372 test_and_clear_bit(FLG_TRANSPARENT, &bch->Flags); in modehdlc()
375 bch->state = protocol; in modehdlc()
378 write_ctrl(bch, 5); in modehdlc()
380 write_ctrl(bch, 1); in modehdlc()
382 test_and_set_bit(FLG_TRANSPARENT, &bch->Flags); in modehdlc()
385 bch->state = protocol; in modehdlc()
388 write_ctrl(bch, 5); in modehdlc()
390 write_ctrl(bch, 1); in modehdlc()
392 test_and_set_bit(FLG_HDLC, &bch->Flags); in modehdlc()
402 hdlc_empty_fifo(struct bchannel *bch, int count) in hdlc_empty_fifo() argument
408 struct fritzcard *fc = bch->hw; in hdlc_empty_fifo()
411 if (test_bit(FLG_RX_OFF, &bch->Flags)) { in hdlc_empty_fifo()
413 bch->dropcnt += count; in hdlc_empty_fifo()
415 cnt = bchannel_get_rxbuf(bch, count); in hdlc_empty_fifo()
418 fc->name, bch->nr, count); in hdlc_empty_fifo()
421 p = skb_put(bch->rx_skb, count); in hdlc_empty_fifo()
425 addr = fc->addr + (bch->nr == 2 ? in hdlc_empty_fifo()
429 outl(bch->nr == 2 ? AVM_HDLC_2 : AVM_HDLC_1, fc->addr); in hdlc_empty_fifo()
442 bch->nr, fc->name, count); in hdlc_empty_fifo()
448 hdlc_fill_fifo(struct bchannel *bch) in hdlc_fill_fifo() argument
450 struct fritzcard *fc = bch->hw; in hdlc_fill_fifo()
457 idx = (bch->nr - 1) & 1; in hdlc_fill_fifo()
461 if (!bch->tx_skb) { in hdlc_fill_fifo()
462 if (!test_bit(FLG_TX_EMPTY, &bch->Flags)) in hdlc_fill_fifo()
465 p = bch->fill; in hdlc_fill_fifo()
468 count = bch->tx_skb->len - bch->tx_idx; in hdlc_fill_fifo()
471 p = bch->tx_skb->data + bch->tx_idx; in hdlc_fill_fifo()
477 if (test_bit(FLG_HDLC, &bch->Flags)) in hdlc_fill_fifo()
482 pr_debug("%s.B%d: %d/%d/%d", fc->name, bch->nr, count, in hdlc_fill_fifo()
483 bch->tx_idx, bch->tx_skb->len); in hdlc_fill_fifo()
484 bch->tx_idx += count; in hdlc_fill_fifo()
486 pr_debug("%s.B%d: fillempty %d\n", fc->name, bch->nr, count); in hdlc_fill_fifo()
490 __write_ctrl_pciv2(fc, hdlc, bch->nr); in hdlc_fill_fifo()
491 addr = fc->addr + (bch->nr == 2 ? in hdlc_fill_fifo()
494 __write_ctrl_pci(fc, hdlc, bch->nr); in hdlc_fill_fifo()
513 bch->nr, fc->name, count); in hdlc_fill_fifo()
519 HDLC_irq_xpr(struct bchannel *bch) in HDLC_irq_xpr() argument
521 if (bch->tx_skb && bch->tx_idx < bch->tx_skb->len) { in HDLC_irq_xpr()
522 hdlc_fill_fifo(bch); in HDLC_irq_xpr()
524 if (bch->tx_skb) in HDLC_irq_xpr()
525 dev_kfree_skb(bch->tx_skb); in HDLC_irq_xpr()
526 if (get_next_bframe(bch)) { in HDLC_irq_xpr()
527 hdlc_fill_fifo(bch); in HDLC_irq_xpr()
528 test_and_clear_bit(FLG_TX_EMPTY, &bch->Flags); in HDLC_irq_xpr()
529 } else if (test_bit(FLG_TX_EMPTY, &bch->Flags)) { in HDLC_irq_xpr()
530 hdlc_fill_fifo(bch); in HDLC_irq_xpr()
536 HDLC_irq(struct bchannel *bch, u32 stat) in HDLC_irq() argument
538 struct fritzcard *fc = bch->hw; in HDLC_irq()
543 hdlc = &fc->hdlc[(bch->nr - 1) & 1]; in HDLC_irq()
544 pr_debug("%s: ch%d stat %#x\n", fc->name, bch->nr, stat); in HDLC_irq()
555 fc->name, bch->nr, stat); in HDLC_irq()
558 write_ctrl(bch, 1); in HDLC_irq()
560 write_ctrl(bch, 1); in HDLC_irq()
561 if (bch->rx_skb) in HDLC_irq()
562 skb_trim(bch->rx_skb, 0); in HDLC_irq()
567 hdlc_empty_fifo(bch, len); in HDLC_irq()
568 if (!bch->rx_skb) in HDLC_irq()
570 if (test_bit(FLG_TRANSPARENT, &bch->Flags)) { in HDLC_irq()
571 recv_Bchannel(bch, 0, false); in HDLC_irq()
575 recv_Bchannel(bch, 0, false); in HDLC_irq()
579 skb_trim(bch->rx_skb, 0); in HDLC_irq()
590 pr_warning("%s: ch%d stat %x XDU %s\n", fc->name, bch->nr, in HDLC_irq()
591 stat, bch->tx_skb ? "tx_skb" : "no tx_skb"); in HDLC_irq()
592 if (bch->tx_skb && bch->tx_skb->len) { in HDLC_irq()
593 if (!test_bit(FLG_TRANSPARENT, &bch->Flags)) in HDLC_irq()
594 bch->tx_idx = 0; in HDLC_irq()
595 } else if (test_bit(FLG_FILLEMPTY, &bch->Flags)) { in HDLC_irq()
596 test_and_set_bit(FLG_TX_EMPTY, &bch->Flags); in HDLC_irq()
600 write_ctrl(bch, 1); in HDLC_irq()
602 HDLC_irq_xpr(bch); in HDLC_irq()
605 HDLC_irq_xpr(bch); in HDLC_irq()
612 struct bchannel *bch; in HDLC_irq_main() local
616 bch = Sel_BCS(fc, 1); in HDLC_irq_main()
617 if (bch) in HDLC_irq_main()
618 HDLC_irq(bch, stat); in HDLC_irq_main()
624 bch = Sel_BCS(fc, 2); in HDLC_irq_main()
625 if (bch) in HDLC_irq_main()
626 HDLC_irq(bch, stat); in HDLC_irq_main()
695 struct bchannel *bch = container_of(ch, struct bchannel, ch); in avm_l2l1B() local
696 struct fritzcard *fc = bch->hw; in avm_l2l1B()
704 ret = bchannel_senddata(bch, skb); in avm_l2l1B()
706 hdlc_fill_fifo(bch); in avm_l2l1B()
713 if (!test_and_set_bit(FLG_ACTIVE, &bch->Flags)) in avm_l2l1B()
714 ret = modehdlc(bch, ch->protocol); in avm_l2l1B()
724 mISDN_clear_bchannel(bch); in avm_l2l1B()
725 modehdlc(bch, ISDN_P_NONE); in avm_l2l1B()
740 modehdlc(&fc->bch[0], -1); in inithdlc()
741 modehdlc(&fc->bch[1], -1); in inithdlc()
843 channel_bctrl(struct bchannel *bch, struct mISDN_ctrl_req *cq) in channel_bctrl() argument
845 return mISDN_ctrl_bchannel(bch, cq); in channel_bctrl()
851 struct bchannel *bch = container_of(ch, struct bchannel, ch); in avm_bctrl() local
852 struct fritzcard *fc = bch->hw; in avm_bctrl()
859 test_and_clear_bit(FLG_OPEN, &bch->Flags); in avm_bctrl()
860 cancel_work_sync(&bch->workq); in avm_bctrl()
862 mISDN_clear_bchannel(bch); in avm_bctrl()
863 modehdlc(bch, ISDN_P_NONE); in avm_bctrl()
871 ret = channel_bctrl(bch, arg); in avm_bctrl()
910 struct bchannel *bch; in open_bchannel() local
916 bch = &fc->bch[rq->adr.channel - 1]; in open_bchannel()
917 if (test_and_set_bit(FLG_OPEN, &bch->Flags)) in open_bchannel()
919 bch->ch.protocol = rq->protocol; in open_bchannel()
920 rq->ch = &bch->ch; in open_bchannel()
1019 modehdlc(&card->bch[0], ISDN_P_NONE); in release_card()
1020 modehdlc(&card->bch[1], ISDN_P_NONE); in release_card()
1024 mISDN_freebchannel(&card->bch[1]); in release_card()
1025 mISDN_freebchannel(&card->bch[0]); in release_card()
1059 card->bch[i].nr = i + 1; in setup_instance()
1065 mISDN_initbchannel(&card->bch[i], MAX_DATA_MEM, minsize); in setup_instance()
1066 card->bch[i].hw = card; in setup_instance()
1067 card->bch[i].ch.send = avm_l2l1B; in setup_instance()
1068 card->bch[i].ch.ctrl = avm_bctrl; in setup_instance()
1069 card->bch[i].ch.nr = i + 1; in setup_instance()
1070 list_add(&card->bch[i].ch.list, &card->isac.dch.dev.bchannels); in setup_instance()
1090 mISDN_freebchannel(&card->bch[1]); in setup_instance()
1091 mISDN_freebchannel(&card->bch[0]); in setup_instance()