Lines Matching refs:dch

39 #define ReadISAC(is, o)		(is->read_reg(is->dch.hw, o + is->off))
40 #define WriteISAC(is, o, v) (is->write_reg(is->dch.hw, o + is->off, v))
64 schedule_event(&isac->dch, FLG_PHCHANGE); in isac_ph_state_change()
68 isac_ph_state_bh(struct dchannel *dch) in isac_ph_state_bh() argument
70 struct isac_hw *isac = container_of(dch, struct isac_hw, dch); in isac_ph_state_bh()
75 dch->state = 0; in isac_ph_state_bh()
76 l1_event(dch->l1, HW_RESET_IND); in isac_ph_state_bh()
79 dch->state = 3; in isac_ph_state_bh()
80 l1_event(dch->l1, HW_DEACT_CNF); in isac_ph_state_bh()
83 dch->state = 3; in isac_ph_state_bh()
84 l1_event(dch->l1, HW_DEACT_IND); in isac_ph_state_bh()
87 dch->state = 4; in isac_ph_state_bh()
88 l1_event(dch->l1, HW_POWERUP_IND); in isac_ph_state_bh()
91 if (dch->state <= 5) { in isac_ph_state_bh()
92 dch->state = 5; in isac_ph_state_bh()
93 l1_event(dch->l1, ANYSIGNAL); in isac_ph_state_bh()
95 dch->state = 8; in isac_ph_state_bh()
96 l1_event(dch->l1, LOSTFRAMING); in isac_ph_state_bh()
100 dch->state = 6; in isac_ph_state_bh()
101 l1_event(dch->l1, INFO2); in isac_ph_state_bh()
104 dch->state = 7; in isac_ph_state_bh()
105 l1_event(dch->l1, INFO4_P8); in isac_ph_state_bh()
108 dch->state = 7; in isac_ph_state_bh()
109 l1_event(dch->l1, INFO4_P10); in isac_ph_state_bh()
112 pr_debug("%s: TE newstate %x\n", isac->name, dch->state); in isac_ph_state_bh()
122 if (!isac->dch.rx_skb) { in isac_empty_fifo()
123 isac->dch.rx_skb = mI_alloc_skb(isac->dch.maxlen, GFP_ATOMIC); in isac_empty_fifo()
124 if (!isac->dch.rx_skb) { in isac_empty_fifo()
130 if ((isac->dch.rx_skb->len + count) >= isac->dch.maxlen) { in isac_empty_fifo()
132 isac->dch.rx_skb->len + count); in isac_empty_fifo()
136 ptr = skb_put(isac->dch.rx_skb, count); in isac_empty_fifo()
137 isac->read_fifo(isac->dch.hw, isac->off, ptr, count); in isac_empty_fifo()
139 if (isac->dch.debug & DEBUG_HW_DFIFO) { in isac_empty_fifo()
154 if (!isac->dch.tx_skb) in isac_fill_fifo()
156 count = isac->dch.tx_skb->len - isac->dch.tx_idx; in isac_fill_fifo()
166 ptr = isac->dch.tx_skb->data + isac->dch.tx_idx; in isac_fill_fifo()
167 isac->dch.tx_idx += count; in isac_fill_fifo()
168 isac->write_fifo(isac->dch.hw, isac->off, ptr, count); in isac_fill_fifo()
170 if (test_and_set_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) { in isac_fill_fifo()
172 del_timer(&isac->dch.timer); in isac_fill_fifo()
174 init_timer(&isac->dch.timer); in isac_fill_fifo()
175 isac->dch.timer.expires = jiffies + ((DBUSY_TIMER_VALUE * HZ)/1000); in isac_fill_fifo()
176 add_timer(&isac->dch.timer); in isac_fill_fifo()
177 if (isac->dch.debug & DEBUG_HW_DFIFO) { in isac_fill_fifo()
196 isac->dch.err_rx++; in isac_rme_irq()
202 isac->dch.err_crc++; in isac_rme_irq()
206 if (isac->dch.rx_skb) in isac_rme_irq()
207 dev_kfree_skb(isac->dch.rx_skb); in isac_rme_irq()
208 isac->dch.rx_skb = NULL; in isac_rme_irq()
214 recv_Dchannel(&isac->dch); in isac_rme_irq()
221 if (test_and_clear_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) in isac_xpr_irq()
222 del_timer(&isac->dch.timer); in isac_xpr_irq()
223 if (isac->dch.tx_skb && isac->dch.tx_idx < isac->dch.tx_skb->len) { in isac_xpr_irq()
226 if (isac->dch.tx_skb) in isac_xpr_irq()
227 dev_kfree_skb(isac->dch.tx_skb); in isac_xpr_irq()
228 if (get_next_dframe(&isac->dch)) in isac_xpr_irq()
236 if (test_and_clear_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) in isac_retransmit()
237 del_timer(&isac->dch.timer); in isac_retransmit()
238 if (test_bit(FLG_TX_BUSY, &isac->dch.Flags)) { in isac_retransmit()
240 isac->dch.tx_idx = 0; in isac_retransmit()
242 } else if (isac->dch.tx_skb) { /* should not happen */ in isac_retransmit()
244 test_and_set_bit(FLG_TX_BUSY, &isac->dch.Flags); in isac_retransmit()
245 isac->dch.tx_idx = 0; in isac_retransmit()
249 if (get_next_dframe(&isac->dch)) in isac_retransmit()
327 ret = isac->monitor(isac->dch.hw, MONITOR_RX_0, in isac_mos_irq()
345 ret = isac->monitor(isac->dch.hw, MONITOR_RX_1, in isac_mos_irq()
366 ret = isac->monitor(isac->dch.hw, in isac_mos_irq()
377 ret = isac->monitor(isac->dch.hw, in isac_mos_irq()
399 ret = isac->monitor(isac->dch.hw, in isac_mos_irq()
410 ret = isac->monitor(isac->dch.hw, in isac_mos_irq()
475 isac->dch.err_rx++; in isacsx_rme_irq()
477 isac->dch.err_crc++; in isacsx_rme_irq()
480 if (isac->dch.rx_skb) in isacsx_rme_irq()
481 dev_kfree_skb(isac->dch.rx_skb); in isacsx_rme_irq()
482 isac->dch.rx_skb = NULL; in isacsx_rme_irq()
488 if (isac->dch.rx_skb) { in isacsx_rme_irq()
489 skb_trim(isac->dch.rx_skb, isac->dch.rx_skb->len - 1); in isacsx_rme_irq()
491 isac->dch.rx_skb->len); in isacsx_rme_irq()
492 recv_Dchannel(&isac->dch); in isacsx_rme_irq()
512 isac->dch.err_tx++; in mISDNisac_irq()
519 isac->dch.err_tx++; in mISDNisac_irq()
555 isac->dch.err_tx++; in mISDNisac_irq()
571 struct dchannel *dch = container_of(dev, struct dchannel, dev); in isac_l1hw() local
572 struct isac_hw *isac = container_of(dch, struct isac_hw, dch); in isac_l1hw()
581 ret = dchannel_senddata(dch, skb); in isac_l1hw()
592 ret = l1_event(dch->l1, hh->prim); in isac_l1hw()
595 test_and_clear_bit(FLG_L2_ACTIVATED, &dch->Flags); in isac_l1hw()
596 ret = l1_event(dch->l1, hh->prim); in isac_l1hw()
631 ret = l1_event(isac->dch.l1, HW_TIMER3_VALUE | (para & 0xff)); in isac_ctrl()
642 isac_l1cmd(struct dchannel *dch, u32 cmd) in isac_l1cmd() argument
644 struct isac_hw *isac = container_of(dch, struct isac_hw, dch); in isac_l1cmd()
670 skb_queue_purge(&dch->squeue); in isac_l1cmd()
671 if (dch->tx_skb) { in isac_l1cmd()
672 dev_kfree_skb(dch->tx_skb); in isac_l1cmd()
673 dch->tx_skb = NULL; in isac_l1cmd()
675 dch->tx_idx = 0; in isac_l1cmd()
676 if (dch->rx_skb) { in isac_l1cmd()
677 dev_kfree_skb(dch->rx_skb); in isac_l1cmd()
678 dch->rx_skb = NULL; in isac_l1cmd()
680 test_and_clear_bit(FLG_TX_BUSY, &dch->Flags); in isac_l1cmd()
681 if (test_and_clear_bit(FLG_BUSY_TIMER, &dch->Flags)) in isac_l1cmd()
682 del_timer(&dch->timer); in isac_l1cmd()
690 test_and_set_bit(FLG_ACTIVE, &dch->Flags); in isac_l1cmd()
691 _queue_data(&dch->dev.D, cmd, MISDN_ID_ANY, 0, NULL, in isac_l1cmd()
695 test_and_clear_bit(FLG_ACTIVE, &dch->Flags); in isac_l1cmd()
696 _queue_data(&dch->dev.D, cmd, MISDN_ID_ANY, 0, NULL, in isac_l1cmd()
714 if (isac->dch.timer.function != NULL) { in isac_release()
715 del_timer(&isac->dch.timer); in isac_release()
716 isac->dch.timer.function = NULL; in isac_release()
722 if (isac->dch.l1) in isac_release()
723 l1_event(isac->dch.l1, CLOSE_CHANNEL); in isac_release()
724 mISDN_freedchannel(&isac->dch); in isac_release()
733 if (test_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) { in dbusy_timer_handler()
740 test_and_set_bit(FLG_L1_BUSY, &isac->dch.Flags); in dbusy_timer_handler()
743 test_and_clear_bit(FLG_BUSY_TIMER, &isac->dch.Flags); in dbusy_timer_handler()
744 if (isac->dch.tx_idx) in dbusy_timer_handler()
745 isac->dch.tx_idx = 0; in dbusy_timer_handler()
760 isac->dch.dev.id, caller); in open_dchannel_caller()
766 rq->ch = &isac->dch.dev.D; in open_dchannel_caller()
768 if (isac->dch.state == 7) in open_dchannel_caller()
790 if (!isac->dch.l1) { in isac_init()
791 err = create_l1(&isac->dch, isac_l1cmd); in isac_init()
797 isac->dch.timer.function = (void *) dbusy_timer_handler; in isac_init()
798 isac->dch.timer.data = (long)isac; in isac_init()
799 init_timer(&isac->dch.timer); in isac_init()
818 if (isac->dch.debug & DEBUG_HW) in isac_init()
843 if (isac->dch.debug & DEBUG_HW) in isac_init()
875 mISDN_initdchannel(&isac->dch, MAX_DFRAME_LEN_L1, isac_ph_state_bh); in mISDNisac_init()
876 isac->dch.hw = hw; in mISDNisac_init()
877 isac->dch.dev.D.send = isac_l1hw; in mISDNisac_init()
882 isac->dch.dev.Dprotocols = (1 << ISDN_P_TE_S0); in mISDNisac_init()
883 isac->dch.dev.nrbchan = 2; in mISDNisac_init()
1545 struct dchannel *dch = container_of(dev, struct dchannel, dev); in ipac_dctrl() local
1546 struct isac_hw *isac = container_of(dch, struct isac_hw, dch); in ipac_dctrl()
1566 dch->dev.id, __builtin_return_address(0)); in ipac_dctrl()
1586 if (ipac->isac.dch.debug & DEBUG_HW) in mISDNipac_init()
1611 ipac->isac.dch.dev.D.ctrl = ipac_dctrl; in mISDNipac_init()
1615 set_channelmap(i + 1, ipac->isac.dch.dev.channelmap); in mISDNipac_init()
1617 &ipac->isac.dch.dev.bchannels); in mISDNipac_init()