Lines Matching refs:ch

46 			if (likely(bch->ch.peer)) {
47 err = bch->ch.recv(bch->ch.peer, skb);
57 mISDN_initdchannel(struct dchannel *ch, int maxlen, void *phf)
59 test_and_set_bit(FLG_HDLC, &ch->Flags);
60 ch->maxlen = maxlen;
61 ch->hw = NULL;
62 ch->rx_skb = NULL;
63 ch->tx_skb = NULL;
64 ch->tx_idx = 0;
65 ch->phfunc = phf;
66 skb_queue_head_init(&ch->squeue);
67 skb_queue_head_init(&ch->rqueue);
68 INIT_LIST_HEAD(&ch->dev.bchannels);
69 INIT_WORK(&ch->workq, dchannel_bh);
75 mISDN_initbchannel(struct bchannel *ch, unsigned short maxlen,
78 ch->Flags = 0;
79 ch->minlen = minlen;
80 ch->next_minlen = minlen;
81 ch->init_minlen = minlen;
82 ch->maxlen = maxlen;
83 ch->next_maxlen = maxlen;
84 ch->init_maxlen = maxlen;
85 ch->hw = NULL;
86 ch->rx_skb = NULL;
87 ch->tx_skb = NULL;
88 ch->tx_idx = 0;
89 skb_queue_head_init(&ch->rqueue);
90 ch->rcount = 0;
91 ch->next_skb = NULL;
92 INIT_WORK(&ch->workq, bchannel_bh);
98 mISDN_freedchannel(struct dchannel *ch)
100 if (ch->tx_skb) {
101 dev_kfree_skb(ch->tx_skb);
102 ch->tx_skb = NULL;
104 if (ch->rx_skb) {
105 dev_kfree_skb(ch->rx_skb);
106 ch->rx_skb = NULL;
108 skb_queue_purge(&ch->squeue);
109 skb_queue_purge(&ch->rqueue);
110 flush_work(&ch->workq);
116 mISDN_clear_bchannel(struct bchannel *ch)
118 if (ch->tx_skb) {
119 dev_kfree_skb(ch->tx_skb);
120 ch->tx_skb = NULL;
122 ch->tx_idx = 0;
123 if (ch->rx_skb) {
124 dev_kfree_skb(ch->rx_skb);
125 ch->rx_skb = NULL;
127 if (ch->next_skb) {
128 dev_kfree_skb(ch->next_skb);
129 ch->next_skb = NULL;
131 test_and_clear_bit(FLG_TX_BUSY, &ch->Flags);
132 test_and_clear_bit(FLG_TX_NEXT, &ch->Flags);
133 test_and_clear_bit(FLG_ACTIVE, &ch->Flags);
134 test_and_clear_bit(FLG_FILLEMPTY, &ch->Flags);
135 test_and_clear_bit(FLG_TX_EMPTY, &ch->Flags);
136 test_and_clear_bit(FLG_RX_OFF, &ch->Flags);
137 ch->dropcnt = 0;
138 ch->minlen = ch->init_minlen;
139 ch->next_minlen = ch->init_minlen;
140 ch->maxlen = ch->init_maxlen;
141 ch->next_maxlen = ch->init_maxlen;
142 skb_queue_purge(&ch->rqueue);
143 ch->rcount = 0;
148 mISDN_freebchannel(struct bchannel *ch)
150 cancel_work_sync(&ch->workq);
151 mISDN_clear_bchannel(ch);
384 queue_ch_frame(struct mISDNchannel *ch, u_int pr, int id, struct sk_buff *skb)
389 _queue_data(ch, pr, id, 0, NULL, GFP_ATOMIC);
391 if (ch->peer) {
395 if (!ch->recv(ch->peer, skb))
404 dchannel_senddata(struct dchannel *ch, struct sk_buff *skb)
411 if (skb->len > ch->maxlen) {
413 __func__, skb->len, ch->maxlen);
417 if (test_and_set_bit(FLG_TX_BUSY, &ch->Flags)) {
418 skb_queue_tail(&ch->squeue, skb);
422 ch->tx_skb = skb;
423 ch->tx_idx = 0;
430 bchannel_senddata(struct bchannel *ch, struct sk_buff *skb)
438 if (skb->len > ch->maxlen) {
440 __func__, skb->len, ch->maxlen);
445 if (ch->next_skb) {
448 __func__, skb->len, ch->next_skb->len);
451 if (test_and_set_bit(FLG_TX_BUSY, &ch->Flags)) {
452 test_and_set_bit(FLG_TX_NEXT, &ch->Flags);
453 ch->next_skb = skb;
457 ch->tx_skb = skb;
458 ch->tx_idx = 0;
459 confirm_Bsend(ch);