Lines Matching refs:ch

55 			if (likely(bch->ch.peer)) {
56 err = bch->ch.recv(bch->ch.peer, skb);
66 mISDN_initdchannel(struct dchannel *ch, int maxlen, void *phf)
68 test_and_set_bit(FLG_HDLC, &ch->Flags);
69 ch->maxlen = maxlen;
70 ch->hw = NULL;
71 ch->rx_skb = NULL;
72 ch->tx_skb = NULL;
73 ch->tx_idx = 0;
74 ch->phfunc = phf;
75 skb_queue_head_init(&ch->squeue);
76 skb_queue_head_init(&ch->rqueue);
77 INIT_LIST_HEAD(&ch->dev.bchannels);
78 INIT_WORK(&ch->workq, dchannel_bh);
84 mISDN_initbchannel(struct bchannel *ch, unsigned short maxlen,
87 ch->Flags = 0;
88 ch->minlen = minlen;
89 ch->next_minlen = minlen;
90 ch->init_minlen = minlen;
91 ch->maxlen = maxlen;
92 ch->next_maxlen = maxlen;
93 ch->init_maxlen = maxlen;
94 ch->hw = NULL;
95 ch->rx_skb = NULL;
96 ch->tx_skb = NULL;
97 ch->tx_idx = 0;
98 skb_queue_head_init(&ch->rqueue);
99 ch->rcount = 0;
100 ch->next_skb = NULL;
101 INIT_WORK(&ch->workq, bchannel_bh);
107 mISDN_freedchannel(struct dchannel *ch)
109 if (ch->tx_skb) {
110 dev_kfree_skb(ch->tx_skb);
111 ch->tx_skb = NULL;
113 if (ch->rx_skb) {
114 dev_kfree_skb(ch->rx_skb);
115 ch->rx_skb = NULL;
117 skb_queue_purge(&ch->squeue);
118 skb_queue_purge(&ch->rqueue);
119 flush_work(&ch->workq);
125 mISDN_clear_bchannel(struct bchannel *ch)
127 if (ch->tx_skb) {
128 dev_kfree_skb(ch->tx_skb);
129 ch->tx_skb = NULL;
131 ch->tx_idx = 0;
132 if (ch->rx_skb) {
133 dev_kfree_skb(ch->rx_skb);
134 ch->rx_skb = NULL;
136 if (ch->next_skb) {
137 dev_kfree_skb(ch->next_skb);
138 ch->next_skb = NULL;
140 test_and_clear_bit(FLG_TX_BUSY, &ch->Flags);
141 test_and_clear_bit(FLG_TX_NEXT, &ch->Flags);
142 test_and_clear_bit(FLG_ACTIVE, &ch->Flags);
143 test_and_clear_bit(FLG_FILLEMPTY, &ch->Flags);
144 test_and_clear_bit(FLG_TX_EMPTY, &ch->Flags);
145 test_and_clear_bit(FLG_RX_OFF, &ch->Flags);
146 ch->dropcnt = 0;
147 ch->minlen = ch->init_minlen;
148 ch->next_minlen = ch->init_minlen;
149 ch->maxlen = ch->init_maxlen;
150 ch->next_maxlen = ch->init_maxlen;
151 skb_queue_purge(&ch->rqueue);
152 ch->rcount = 0;
157 mISDN_freebchannel(struct bchannel *ch)
159 cancel_work_sync(&ch->workq);
160 mISDN_clear_bchannel(ch);
393 queue_ch_frame(struct mISDNchannel *ch, u_int pr, int id, struct sk_buff *skb)
398 _queue_data(ch, pr, id, 0, NULL, GFP_ATOMIC);
400 if (ch->peer) {
404 if (!ch->recv(ch->peer, skb))
413 dchannel_senddata(struct dchannel *ch, struct sk_buff *skb)
420 if (skb->len > ch->maxlen) {
422 __func__, skb->len, ch->maxlen);
426 if (test_and_set_bit(FLG_TX_BUSY, &ch->Flags)) {
427 skb_queue_tail(&ch->squeue, skb);
431 ch->tx_skb = skb;
432 ch->tx_idx = 0;
439 bchannel_senddata(struct bchannel *ch, struct sk_buff *skb)
447 if (skb->len > ch->maxlen) {
449 __func__, skb->len, ch->maxlen);
454 if (ch->next_skb) {
457 __func__, skb->len, ch->next_skb->len);
460 if (test_and_set_bit(FLG_TX_BUSY, &ch->Flags)) {
461 test_and_set_bit(FLG_TX_NEXT, &ch->Flags);
462 ch->next_skb = skb;
466 ch->tx_skb = skb;
467 ch->tx_idx = 0;
468 confirm_Bsend(ch);