Lines Matching refs:wch
445 W6692_empty_Bfifo(struct w6692_ch *wch, int count)
447 struct w6692_hw *card = wch->bch.hw;
452 if (unlikely(wch->bch.state == ISDN_P_NONE)) {
454 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RACK | W_B_CMDR_RACT);
455 if (wch->bch.rx_skb)
456 skb_trim(wch->bch.rx_skb, 0);
459 if (test_bit(FLG_RX_OFF, &wch->bch.Flags)) {
460 wch->bch.dropcnt += count;
461 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RACK | W_B_CMDR_RACT);
464 maxlen = bchannel_get_rxbuf(&wch->bch, count);
466 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RACK | W_B_CMDR_RACT);
467 if (wch->bch.rx_skb)
468 skb_trim(wch->bch.rx_skb, 0);
470 card->name, wch->bch.nr, count);
473 ptr = skb_put(wch->bch.rx_skb, count);
474 insb(wch->addr + W_B_RFIFO, ptr, count);
475 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RACK | W_B_CMDR_RACT);
478 wch->bch.nr, card->name, count);
484 W6692_fill_Bfifo(struct w6692_ch *wch)
486 struct w6692_hw *card = wch->bch.hw;
491 if (!wch->bch.tx_skb) {
492 if (!test_bit(FLG_TX_EMPTY, &wch->bch.Flags))
494 ptr = wch->bch.fill;
498 count = wch->bch.tx_skb->len - wch->bch.tx_idx;
501 ptr = wch->bch.tx_skb->data + wch->bch.tx_idx;
505 else if (test_bit(FLG_HDLC, &wch->bch.Flags))
509 count, wch->bch.tx_idx);
510 wch->bch.tx_idx += count;
513 outsb(wch->addr + W_B_XFIFO, ptr, MISDN_BCH_FILL_SIZE);
517 outsb(wch->addr + W_B_XFIFO, ptr, count);
519 WriteW6692B(wch, W_B_CMDR, cmd);
522 wch->bch.nr, card->name, count);
529 setvolume(struct w6692_ch *wch, int mic, struct sk_buff *skb)
531 struct w6692_hw *card = wch->bch.hw;
536 !test_bit(FLG_TRANSPARENT, &wch->bch.Flags))
556 enable_pots(struct w6692_ch *wch)
558 struct w6692_hw *card = wch->bch.hw;
561 !test_bit(FLG_TRANSPARENT, &wch->bch.Flags))
563 wch->b_mode |= W_B_MODE_EPCM | W_B_MODE_BSW0;
564 WriteW6692B(wch, W_B_MODE, wch->b_mode);
565 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RRST | W_B_CMDR_XRST);
566 card->pctl |= ((wch->bch.nr & 2) ? W_PCTL_PCX : 0);
573 disable_pots(struct w6692_ch *wch)
575 struct w6692_hw *card = wch->bch.hw;
579 wch->b_mode &= ~(W_B_MODE_EPCM | W_B_MODE_BSW0);
580 WriteW6692B(wch, W_B_MODE, wch->b_mode);
581 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RRST | W_B_CMDR_RACT |
587 w6692_mode(struct w6692_ch *wch, u32 pr)
591 card = wch->bch.hw;
593 wch->bch.nr, wch->bch.state, pr);
596 if ((card->fmask & pots) && (wch->b_mode & W_B_MODE_EPCM))
597 disable_pots(wch);
598 wch->b_mode = 0;
599 mISDN_clear_bchannel(&wch->bch);
600 WriteW6692B(wch, W_B_MODE, wch->b_mode);
601 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RRST | W_B_CMDR_XRST);
602 test_and_clear_bit(FLG_HDLC, &wch->bch.Flags);
603 test_and_clear_bit(FLG_TRANSPARENT, &wch->bch.Flags);
606 wch->b_mode = W_B_MODE_MMS;
607 WriteW6692B(wch, W_B_MODE, wch->b_mode);
608 WriteW6692B(wch, W_B_EXIM, 0);
609 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RRST | W_B_CMDR_RACT |
611 test_and_set_bit(FLG_TRANSPARENT, &wch->bch.Flags);
614 wch->b_mode = W_B_MODE_ITF;
615 WriteW6692B(wch, W_B_MODE, wch->b_mode);
616 WriteW6692B(wch, W_B_ADM1, 0xff);
617 WriteW6692B(wch, W_B_ADM2, 0xff);
618 WriteW6692B(wch, W_B_EXIM, 0);
619 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RRST | W_B_CMDR_RACT |
621 test_and_set_bit(FLG_HDLC, &wch->bch.Flags);
627 wch->bch.state = pr;
632 send_next(struct w6692_ch *wch)
634 if (wch->bch.tx_skb && wch->bch.tx_idx < wch->bch.tx_skb->len) {
635 W6692_fill_Bfifo(wch);
637 dev_kfree_skb(wch->bch.tx_skb);
638 if (get_next_bframe(&wch->bch)) {
639 W6692_fill_Bfifo(wch);
640 test_and_clear_bit(FLG_TX_EMPTY, &wch->bch.Flags);
641 } else if (test_bit(FLG_TX_EMPTY, &wch->bch.Flags)) {
642 W6692_fill_Bfifo(wch);
650 struct w6692_ch *wch = &card->bc[ch];
654 stat = ReadW6692B(wch, W_B_EXIR);
655 pr_debug("%s: B%d EXIR %02x\n", card->name, wch->bch.nr, stat);
657 star = ReadW6692B(wch, W_B_STAR);
660 test_bit(FLG_ACTIVE, &wch->bch.Flags)) {
662 wch->bch.nr, wch->bch.state);
664 wch->bch.err_rdo++;
667 if (test_bit(FLG_HDLC, &wch->bch.Flags)) {
670 card->name, wch->bch.nr);
672 wch->bch.err_crc++;
677 card->name, wch->bch.nr);
679 wch->bch.err_inv++;
683 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RACK |
685 if (wch->bch.rx_skb)
686 skb_trim(wch->bch.rx_skb, 0);
688 count = ReadW6692B(wch, W_B_RBCL) &
692 W6692_empty_Bfifo(wch, count);
693 recv_Bchannel(&wch->bch, 0, false);
698 star = ReadW6692B(wch, W_B_STAR);
701 wch->bch.nr, wch->bch.state);
703 wch->bch.err_rdo++;
705 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RACK |
708 W6692_empty_Bfifo(wch, W_B_FIFO_THRESH);
709 if (test_bit(FLG_TRANSPARENT, &wch->bch.Flags))
710 recv_Bchannel(&wch->bch, 0, false);
717 wch->bch.nr, wch->bch.state);
719 wch->bch.err_rdo++;
721 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_RACK |
727 star = ReadW6692B(wch, W_B_STAR);
729 wch->bch.nr, star);
733 wch->bch.nr, wch->bch.state);
735 wch->bch.err_xdu++;
737 WriteW6692B(wch, W_B_CMDR, W_B_CMDR_XRST |
740 if (wch->bch.tx_skb) {
741 if (!test_bit(FLG_TRANSPARENT, &wch->bch.Flags))
742 wch->bch.tx_idx = 0;
745 send_next(wch);
751 wch->bch.nr, wch->bch.state);
753 wch->bch.err_xdu++;
756 if (wch->bch.tx_skb) {
757 if (!test_bit(FLG_TRANSPARENT, &wch->bch.Flags))
758 wch->bch.tx_idx = 0;
759 } else if (test_bit(FLG_FILLEMPTY, &wch->bch.Flags)) {
760 test_and_set_bit(FLG_TX_EMPTY, &wch->bch.Flags);
762 send_next(wch);