Lines Matching defs:bch

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