Lines Matching refs:dch

26 #define ReadISAC(is, o)		(is->read_reg(is->dch.hw, o + is->off))
27 #define WriteISAC(is, o, v) (is->write_reg(is->dch.hw, o + is->off, v))
51 schedule_event(&isac->dch, FLG_PHCHANGE); in isac_ph_state_change()
55 isac_ph_state_bh(struct dchannel *dch) in isac_ph_state_bh() argument
57 struct isac_hw *isac = container_of(dch, struct isac_hw, dch); in isac_ph_state_bh()
62 dch->state = 0; in isac_ph_state_bh()
63 l1_event(dch->l1, HW_RESET_IND); in isac_ph_state_bh()
66 dch->state = 3; in isac_ph_state_bh()
67 l1_event(dch->l1, HW_DEACT_CNF); in isac_ph_state_bh()
71 dch->state = 3; in isac_ph_state_bh()
72 l1_event(dch->l1, HW_DEACT_IND); in isac_ph_state_bh()
75 dch->state = 4; in isac_ph_state_bh()
76 l1_event(dch->l1, HW_POWERUP_IND); in isac_ph_state_bh()
79 if (dch->state <= 5) { in isac_ph_state_bh()
80 dch->state = 5; in isac_ph_state_bh()
81 l1_event(dch->l1, ANYSIGNAL); in isac_ph_state_bh()
83 dch->state = 8; in isac_ph_state_bh()
84 l1_event(dch->l1, LOSTFRAMING); in isac_ph_state_bh()
88 dch->state = 6; in isac_ph_state_bh()
89 l1_event(dch->l1, INFO2); in isac_ph_state_bh()
92 dch->state = 7; in isac_ph_state_bh()
93 l1_event(dch->l1, INFO4_P8); in isac_ph_state_bh()
96 dch->state = 7; in isac_ph_state_bh()
97 l1_event(dch->l1, INFO4_P10); in isac_ph_state_bh()
100 pr_debug("%s: TE newstate %x\n", isac->name, dch->state); in isac_ph_state_bh()
110 if (!isac->dch.rx_skb) { in isac_empty_fifo()
111 isac->dch.rx_skb = mI_alloc_skb(isac->dch.maxlen, GFP_ATOMIC); in isac_empty_fifo()
112 if (!isac->dch.rx_skb) { in isac_empty_fifo()
118 if ((isac->dch.rx_skb->len + count) >= isac->dch.maxlen) { in isac_empty_fifo()
120 isac->dch.rx_skb->len + count); in isac_empty_fifo()
124 ptr = skb_put(isac->dch.rx_skb, count); in isac_empty_fifo()
125 isac->read_fifo(isac->dch.hw, isac->off, ptr, count); in isac_empty_fifo()
127 if (isac->dch.debug & DEBUG_HW_DFIFO) { in isac_empty_fifo()
142 if (!isac->dch.tx_skb) in isac_fill_fifo()
144 count = isac->dch.tx_skb->len - isac->dch.tx_idx; in isac_fill_fifo()
154 ptr = isac->dch.tx_skb->data + isac->dch.tx_idx; in isac_fill_fifo()
155 isac->dch.tx_idx += count; in isac_fill_fifo()
156 isac->write_fifo(isac->dch.hw, isac->off, ptr, count); in isac_fill_fifo()
158 if (test_and_set_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) { in isac_fill_fifo()
160 del_timer(&isac->dch.timer); in isac_fill_fifo()
162 isac->dch.timer.expires = jiffies + ((DBUSY_TIMER_VALUE * HZ)/1000); in isac_fill_fifo()
163 add_timer(&isac->dch.timer); in isac_fill_fifo()
164 if (isac->dch.debug & DEBUG_HW_DFIFO) { in isac_fill_fifo()
183 isac->dch.err_rx++; in isac_rme_irq()
189 isac->dch.err_crc++; in isac_rme_irq()
193 dev_kfree_skb(isac->dch.rx_skb); in isac_rme_irq()
194 isac->dch.rx_skb = NULL; in isac_rme_irq()
200 recv_Dchannel(&isac->dch); in isac_rme_irq()
207 if (test_and_clear_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) in isac_xpr_irq()
208 del_timer(&isac->dch.timer); in isac_xpr_irq()
209 if (isac->dch.tx_skb && isac->dch.tx_idx < isac->dch.tx_skb->len) { in isac_xpr_irq()
212 dev_kfree_skb(isac->dch.tx_skb); in isac_xpr_irq()
213 if (get_next_dframe(&isac->dch)) in isac_xpr_irq()
221 if (test_and_clear_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) in isac_retransmit()
222 del_timer(&isac->dch.timer); in isac_retransmit()
223 if (test_bit(FLG_TX_BUSY, &isac->dch.Flags)) { in isac_retransmit()
225 isac->dch.tx_idx = 0; in isac_retransmit()
227 } else if (isac->dch.tx_skb) { /* should not happen */ in isac_retransmit()
229 test_and_set_bit(FLG_TX_BUSY, &isac->dch.Flags); in isac_retransmit()
230 isac->dch.tx_idx = 0; in isac_retransmit()
234 if (get_next_dframe(&isac->dch)) in isac_retransmit()
312 ret = isac->monitor(isac->dch.hw, MONITOR_RX_0, in isac_mos_irq()
330 ret = isac->monitor(isac->dch.hw, MONITOR_RX_1, in isac_mos_irq()
351 isac->monitor(isac->dch.hw, in isac_mos_irq()
362 isac->monitor(isac->dch.hw, in isac_mos_irq()
384 isac->monitor(isac->dch.hw, in isac_mos_irq()
395 isac->monitor(isac->dch.hw, in isac_mos_irq()
460 isac->dch.err_rx++; in isacsx_rme_irq()
462 isac->dch.err_crc++; in isacsx_rme_irq()
465 dev_kfree_skb(isac->dch.rx_skb); in isacsx_rme_irq()
466 isac->dch.rx_skb = NULL; in isacsx_rme_irq()
472 if (isac->dch.rx_skb) { in isacsx_rme_irq()
473 skb_trim(isac->dch.rx_skb, isac->dch.rx_skb->len - 1); in isacsx_rme_irq()
475 isac->dch.rx_skb->len); in isacsx_rme_irq()
476 recv_Dchannel(&isac->dch); in isacsx_rme_irq()
496 isac->dch.err_tx++; in mISDNisac_irq()
503 isac->dch.err_tx++; in mISDNisac_irq()
539 isac->dch.err_tx++; in mISDNisac_irq()
555 struct dchannel *dch = container_of(dev, struct dchannel, dev); in isac_l1hw() local
556 struct isac_hw *isac = container_of(dch, struct isac_hw, dch); in isac_l1hw()
565 ret = dchannel_senddata(dch, skb); in isac_l1hw()
576 ret = l1_event(dch->l1, hh->prim); in isac_l1hw()
579 test_and_clear_bit(FLG_L2_ACTIVATED, &dch->Flags); in isac_l1hw()
580 ret = l1_event(dch->l1, hh->prim); in isac_l1hw()
615 ret = l1_event(isac->dch.l1, HW_TIMER3_VALUE | (para & 0xff)); in isac_ctrl()
626 isac_l1cmd(struct dchannel *dch, u32 cmd) in isac_l1cmd() argument
628 struct isac_hw *isac = container_of(dch, struct isac_hw, dch); in isac_l1cmd()
655 skb_queue_purge(&dch->squeue); in isac_l1cmd()
656 if (dch->tx_skb) { in isac_l1cmd()
657 dev_kfree_skb(dch->tx_skb); in isac_l1cmd()
658 dch->tx_skb = NULL; in isac_l1cmd()
660 dch->tx_idx = 0; in isac_l1cmd()
661 if (dch->rx_skb) { in isac_l1cmd()
662 dev_kfree_skb(dch->rx_skb); in isac_l1cmd()
663 dch->rx_skb = NULL; in isac_l1cmd()
665 test_and_clear_bit(FLG_TX_BUSY, &dch->Flags); in isac_l1cmd()
666 if (test_and_clear_bit(FLG_BUSY_TIMER, &dch->Flags)) in isac_l1cmd()
667 del_timer(&dch->timer); in isac_l1cmd()
675 test_and_set_bit(FLG_ACTIVE, &dch->Flags); in isac_l1cmd()
676 _queue_data(&dch->dev.D, cmd, MISDN_ID_ANY, 0, NULL, in isac_l1cmd()
680 test_and_clear_bit(FLG_ACTIVE, &dch->Flags); in isac_l1cmd()
681 _queue_data(&dch->dev.D, cmd, MISDN_ID_ANY, 0, NULL, in isac_l1cmd()
699 if (isac->dch.timer.function != NULL) { in isac_release()
700 del_timer(&isac->dch.timer); in isac_release()
701 isac->dch.timer.function = NULL; in isac_release()
707 if (isac->dch.l1) in isac_release()
708 l1_event(isac->dch.l1, CLOSE_CHANNEL); in isac_release()
709 mISDN_freedchannel(&isac->dch); in isac_release()
715 struct isac_hw *isac = from_timer(isac, t, dch.timer); in dbusy_timer_handler()
719 if (test_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) { in dbusy_timer_handler()
726 test_and_set_bit(FLG_L1_BUSY, &isac->dch.Flags); in dbusy_timer_handler()
729 test_and_clear_bit(FLG_BUSY_TIMER, &isac->dch.Flags); in dbusy_timer_handler()
730 if (isac->dch.tx_idx) in dbusy_timer_handler()
731 isac->dch.tx_idx = 0; in dbusy_timer_handler()
746 isac->dch.dev.id, caller); in open_dchannel_caller()
752 rq->ch = &isac->dch.dev.D; in open_dchannel_caller()
754 if (isac->dch.state == 7) in open_dchannel_caller()
776 if (!isac->dch.l1) { in isac_init()
777 err = create_l1(&isac->dch, isac_l1cmd); in isac_init()
783 timer_setup(&isac->dch.timer, dbusy_timer_handler, 0); in isac_init()
802 if (isac->dch.debug & DEBUG_HW) in isac_init()
827 if (isac->dch.debug & DEBUG_HW) in isac_init()
859 mISDN_initdchannel(&isac->dch, MAX_DFRAME_LEN_L1, isac_ph_state_bh); in mISDNisac_init()
860 isac->dch.hw = hw; in mISDNisac_init()
861 isac->dch.dev.D.send = isac_l1hw; in mISDNisac_init()
866 isac->dch.dev.Dprotocols = (1 << ISDN_P_TE_S0); in mISDNisac_init()
867 isac->dch.dev.nrbchan = 2; in mISDNisac_init()
1528 struct dchannel *dch = container_of(dev, struct dchannel, dev); in ipac_dctrl() local
1529 struct isac_hw *isac = container_of(dch, struct isac_hw, dch); in ipac_dctrl()
1549 dch->dev.id, __builtin_return_address(0)); in ipac_dctrl()
1569 if (ipac->isac.dch.debug & DEBUG_HW) in mISDNipac_init()
1594 ipac->isac.dch.dev.D.ctrl = ipac_dctrl; in mISDNipac_init()
1598 set_channelmap(i + 1, ipac->isac.dch.dev.channelmap); in mISDNipac_init()
1600 &ipac->isac.dch.dev.bchannels); in mISDNipac_init()