Lines Matching refs:bch

48 	struct bchannel	*bch  = container_of(ws, struct bchannel, workq);  in bchannel_bh()  local
52 if (test_and_clear_bit(FLG_RECVQUEUE, &bch->Flags)) { in bchannel_bh()
53 while ((skb = skb_dequeue(&bch->rqueue))) { in bchannel_bh()
54 bch->rcount--; in bchannel_bh()
55 if (likely(bch->ch.peer)) { in bchannel_bh()
56 err = bch->ch.recv(bch->ch.peer, skb); in bchannel_bh()
165 mISDN_ctrl_bchannel(struct bchannel *bch, struct mISDN_ctrl_req *cq) in mISDN_ctrl_bchannel() argument
176 memset(bch->fill, cq->p2 & 0xff, MISDN_BCH_FILL_SIZE); in mISDN_ctrl_bchannel()
177 test_and_set_bit(FLG_FILLEMPTY, &bch->Flags); in mISDN_ctrl_bchannel()
179 test_and_clear_bit(FLG_FILLEMPTY, &bch->Flags); in mISDN_ctrl_bchannel()
184 cq->p2 = bch->dropcnt; in mISDN_ctrl_bchannel()
186 test_and_set_bit(FLG_RX_OFF, &bch->Flags); in mISDN_ctrl_bchannel()
188 test_and_clear_bit(FLG_RX_OFF, &bch->Flags); in mISDN_ctrl_bchannel()
189 bch->dropcnt = 0; in mISDN_ctrl_bchannel()
193 bch->next_maxlen = cq->p2; in mISDN_ctrl_bchannel()
195 bch->next_minlen = cq->p1; in mISDN_ctrl_bchannel()
197 cq->p1 = bch->minlen; in mISDN_ctrl_bchannel()
198 cq->p2 = bch->maxlen; in mISDN_ctrl_bchannel()
258 recv_Bchannel(struct bchannel *bch, unsigned int id, bool force) in recv_Bchannel() argument
263 if (unlikely(!bch->rx_skb)) in recv_Bchannel()
265 if (unlikely(!bch->rx_skb->len)) { in recv_Bchannel()
269 dev_kfree_skb(bch->rx_skb); in recv_Bchannel()
270 bch->rx_skb = NULL; in recv_Bchannel()
272 if (test_bit(FLG_TRANSPARENT, &bch->Flags) && in recv_Bchannel()
273 (bch->rx_skb->len < bch->minlen) && !force) in recv_Bchannel()
275 hh = mISDN_HEAD_P(bch->rx_skb); in recv_Bchannel()
278 if (bch->rcount >= 64) { in recv_Bchannel()
281 bch->nr); in recv_Bchannel()
282 skb_queue_purge(&bch->rqueue); in recv_Bchannel()
284 bch->rcount++; in recv_Bchannel()
285 skb_queue_tail(&bch->rqueue, bch->rx_skb); in recv_Bchannel()
286 bch->rx_skb = NULL; in recv_Bchannel()
287 schedule_event(bch, FLG_RECVQUEUE); in recv_Bchannel()
301 recv_Bchannel_skb(struct bchannel *bch, struct sk_buff *skb) in recv_Bchannel_skb() argument
303 if (bch->rcount >= 64) { in recv_Bchannel_skb()
305 "flushing!\n", bch); in recv_Bchannel_skb()
306 skb_queue_purge(&bch->rqueue); in recv_Bchannel_skb()
307 bch->rcount = 0; in recv_Bchannel_skb()
309 bch->rcount++; in recv_Bchannel_skb()
310 skb_queue_tail(&bch->rqueue, skb); in recv_Bchannel_skb()
311 schedule_event(bch, FLG_RECVQUEUE); in recv_Bchannel_skb()
347 confirm_Bsend(struct bchannel *bch) in confirm_Bsend() argument
351 if (bch->rcount >= 64) { in confirm_Bsend()
353 "flushing!\n", bch); in confirm_Bsend()
354 skb_queue_purge(&bch->rqueue); in confirm_Bsend()
355 bch->rcount = 0; in confirm_Bsend()
357 skb = _alloc_mISDN_skb(PH_DATA_CNF, mISDN_HEAD_ID(bch->tx_skb), in confirm_Bsend()
361 mISDN_HEAD_ID(bch->tx_skb)); in confirm_Bsend()
364 bch->rcount++; in confirm_Bsend()
365 skb_queue_tail(&bch->rqueue, skb); in confirm_Bsend()
366 schedule_event(bch, FLG_RECVQUEUE); in confirm_Bsend()
370 get_next_bframe(struct bchannel *bch) in get_next_bframe() argument
372 bch->tx_idx = 0; in get_next_bframe()
373 if (test_bit(FLG_TX_NEXT, &bch->Flags)) { in get_next_bframe()
374 bch->tx_skb = bch->next_skb; in get_next_bframe()
375 if (bch->tx_skb) { in get_next_bframe()
376 bch->next_skb = NULL; in get_next_bframe()
377 test_and_clear_bit(FLG_TX_NEXT, &bch->Flags); in get_next_bframe()
379 confirm_Bsend(bch); in get_next_bframe()
382 test_and_clear_bit(FLG_TX_NEXT, &bch->Flags); in get_next_bframe()
386 bch->tx_skb = NULL; in get_next_bframe()
387 test_and_clear_bit(FLG_TX_BUSY, &bch->Flags); in get_next_bframe()
479 bchannel_get_rxbuf(struct bchannel *bch, int reqlen) in bchannel_get_rxbuf() argument
483 if (bch->rx_skb) { in bchannel_get_rxbuf()
484 len = skb_tailroom(bch->rx_skb); in bchannel_get_rxbuf()
487 bch->nr, reqlen, len); in bchannel_get_rxbuf()
488 if (test_bit(FLG_TRANSPARENT, &bch->Flags)) { in bchannel_get_rxbuf()
490 recv_Bchannel(bch, 0, true); in bchannel_get_rxbuf()
500 if (unlikely(bch->maxlen != bch->next_maxlen)) in bchannel_get_rxbuf()
501 bch->maxlen = bch->next_maxlen; in bchannel_get_rxbuf()
502 if (unlikely(bch->minlen != bch->next_minlen)) in bchannel_get_rxbuf()
503 bch->minlen = bch->next_minlen; in bchannel_get_rxbuf()
504 if (unlikely(reqlen > bch->maxlen)) in bchannel_get_rxbuf()
506 if (test_bit(FLG_TRANSPARENT, &bch->Flags)) { in bchannel_get_rxbuf()
507 if (reqlen >= bch->minlen) { in bchannel_get_rxbuf()
510 len = 2 * bch->minlen; in bchannel_get_rxbuf()
511 if (len > bch->maxlen) in bchannel_get_rxbuf()
512 len = bch->maxlen; in bchannel_get_rxbuf()
516 len = bch->maxlen; in bchannel_get_rxbuf()
518 bch->rx_skb = mI_alloc_skb(len, GFP_ATOMIC); in bchannel_get_rxbuf()
519 if (!bch->rx_skb) { in bchannel_get_rxbuf()
521 bch->nr, len); in bchannel_get_rxbuf()