• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/isdn/hisax/

Lines Matching defs:bcs

44 static void bch_empty_fifo(struct BCState *bcs, int count);
45 static void bch_fill_fifo(struct BCState *bcs);
47 static void bch_mode(struct BCState *bcs, int mode, int bc);
48 static void bch_close_state(struct BCState *bcs);
49 static int bch_open_state(struct IsdnCardState *cs, struct BCState *bcs);
50 static int bch_setstack(struct PStack *st, struct BCState *bcs);
447 struct BCState *bcs = st->l1.bcs;
453 spin_lock_irqsave(&bcs->cs->lock, flags);
454 if (bcs->tx_skb) {
455 skb_queue_tail(&bcs->squeue, skb);
457 bcs->tx_skb = skb;
458 set_bit(BC_FLG_BUSY, &bcs->Flag);
459 bcs->hw.hscx.count = 0;
460 bch_fill_fifo(bcs);
462 spin_unlock_irqrestore(&bcs->cs->lock, flags);
465 spin_lock_irqsave(&bcs->cs->lock, flags);
466 if (bcs->tx_skb) {
469 set_bit(BC_FLG_BUSY, &bcs->Flag);
470 bcs->tx_skb = skb;
471 bcs->hw.hscx.count = 0;
472 bch_fill_fifo(bcs);
474 spin_unlock_irqrestore(&bcs->cs->lock, flags);
477 if (!bcs->tx_skb) {
484 spin_lock_irqsave(&bcs->cs->lock, flags);
485 set_bit(BC_FLG_ACTIV, &bcs->Flag);
486 bch_mode(bcs, st->l1.mode, st->l1.bc);
487 spin_unlock_irqrestore(&bcs->cs->lock, flags);
494 spin_lock_irqsave(&bcs->cs->lock, flags);
495 clear_bit(BC_FLG_ACTIV, &bcs->Flag);
496 clear_bit(BC_FLG_BUSY, &bcs->Flag);
497 bch_mode(bcs, 0, st->l1.bc);
498 spin_unlock_irqrestore(&bcs->cs->lock, flags);
508 bch_empty_fifo(struct BCState *bcs, int count)
514 cs = bcs->cs;
515 hscx = bcs->hw.hscx.hscx;
520 if (bcs->hw.hscx.rcvidx + count > HSCX_BUFMAX) {
524 bcs->hw.hscx.rcvidx = 0;
528 ptr = bcs->hw.hscx.rcvbuf + bcs->hw.hscx.rcvidx;
533 ptr = bcs->hw.hscx.rcvbuf + bcs->hw.hscx.rcvidx;
534 bcs->hw.hscx.rcvidx += count;
537 char *t = bcs->blog;
541 debugl1(cs, bcs->blog);
549 bch_fill_fifo(struct BCState *bcs)
555 cs = bcs->cs;
559 if (!bcs->tx_skb) return;
560 if (bcs->tx_skb->len <= 0) return;
562 hscx = bcs->hw.hscx.hscx;
563 more = (bcs->mode == L1_MODE_TRANS) ? 1 : 0;
564 if (bcs->tx_skb->len > B_FIFO_SIZE) {
568 count = bcs->tx_skb->len;
572 p = ptr = bcs->tx_skb->data;
573 skb_pull(bcs->tx_skb, count);
574 bcs->tx_cnt -= count;
575 bcs->hw.hscx.count += count;
580 char *t = bcs->blog;
584 debugl1(cs, bcs->blog);
595 struct BCState *bcs;
600 bcs = cs->bcs + hscx;
605 if (!test_bit(BC_FLG_INIT, &bcs->Flag)) return;
613 if ((rstab &0x40) && (bcs->mode != L1_MODE_NULL))
615 debugl1(cs, "bch_int() B-%d: RDO mode=%d", hscx, bcs->mode);
624 bch_empty_fifo(bcs, count);
625 if ((count = bcs->hw.hscx.rcvidx - 1) > 0) {
631 memcpy(skb_put(skb, count), bcs->hw.hscx.rcvbuf, count);
632 skb_queue_tail(&bcs->rqueue, skb);
636 bcs->hw.hscx.rcvidx = 0;
637 schedule_event(bcs, B_RCVBUFREADY);
641 bch_empty_fifo(bcs, B_FIFO_SIZE);
643 if (bcs->mode == L1_MODE_TRANS) { // queue every chunk
648 memcpy(skb_put(skb, B_FIFO_SIZE), bcs->hw.hscx.rcvbuf, B_FIFO_SIZE);
649 skb_queue_tail(&bcs->rqueue, skb);
651 bcs->hw.hscx.rcvidx = 0;
652 schedule_event(bcs, B_RCVBUFREADY);
663 if (bcs->tx_skb) {
664 if (bcs->tx_skb->len) {
665 bch_fill_fifo(bcs);
668 if (test_bit(FLG_LLI_L1WAKEUP,&bcs->st->lli.flag) &&
669 (PACKET_NOACK != bcs->tx_skb->pkt_type)) {
671 spin_lock_irqsave(&bcs->aclock, flags);
672 bcs->ackcnt += bcs->hw.hscx.count;
673 spin_unlock_irqrestore(&bcs->aclock, flags);
674 schedule_event(bcs, B_ACKPENDING);
677 dev_kfree_skb_irq(bcs->tx_skb);
678 bcs->hw.hscx.count = 0;
679 bcs->tx_skb = NULL;
681 if ((bcs->tx_skb = skb_dequeue(&bcs->squeue))) {
682 bcs->hw.hscx.count = 0;
683 set_bit(BC_FLG_BUSY, &bcs->Flag);
684 bch_fill_fifo(bcs);
686 clear_bit(BC_FLG_BUSY, &bcs->Flag);
687 schedule_event(bcs, B_XMTBUFREADY);
693 if (bcs->mode == L1_MODE_TRANS) {
694 bch_fill_fifo(bcs);
697 if (bcs->tx_skb) { // restart transmitting the whole frame
698 skb_push(bcs->tx_skb, bcs->hw.hscx.count);
699 bcs->tx_cnt += bcs->hw.hscx.count;
700 bcs->hw.hscx.count = 0;
712 bch_mode(struct BCState *bcs, int mode, int bc)
714 struct IsdnCardState *cs = bcs->cs;
715 int hscx = bcs->hw.hscx.hscx;
720 bcs->mode = mode;
721 bcs->channel = bc;
760 bch_close_state(struct BCState *bcs)
762 bch_mode(bcs, 0, bcs->channel);
763 if (test_and_clear_bit(BC_FLG_INIT, &bcs->Flag)) {
764 kfree(bcs->hw.hscx.rcvbuf);
765 bcs->hw.hscx.rcvbuf = NULL;
766 kfree(bcs->blog);
767 bcs->blog = NULL;
768 skb_queue_purge(&bcs->rqueue);
769 skb_queue_purge(&bcs->squeue);
770 if (bcs->tx_skb) {
771 dev_kfree_skb_any(bcs->tx_skb);
772 bcs->tx_skb = NULL;
773 clear_bit(BC_FLG_BUSY, &bcs->Flag);
781 bch_open_state(struct IsdnCardState *cs, struct BCState *bcs)
783 if (!test_and_set_bit(BC_FLG_INIT, &bcs->Flag)) {
784 if (!(bcs->hw.hscx.rcvbuf = kmalloc(HSCX_BUFMAX, GFP_ATOMIC))) {
787 clear_bit(BC_FLG_INIT, &bcs->Flag);
790 if (!(bcs->blog = kmalloc(MAX_BLOG_SPACE, GFP_ATOMIC))) {
792 "HiSax open_bchstate: No memory for bcs->blog\n");
793 clear_bit(BC_FLG_INIT, &bcs->Flag);
794 kfree(bcs->hw.hscx.rcvbuf);
795 bcs->hw.hscx.rcvbuf = NULL;
798 skb_queue_head_init(&bcs->rqueue);
799 skb_queue_head_init(&bcs->squeue);
801 bcs->tx_skb = NULL;
802 clear_bit(BC_FLG_BUSY, &bcs->Flag);
803 bcs->event = 0;
804 bcs->hw.hscx.rcvidx = 0;
805 bcs->tx_cnt = 0;
812 bch_setstack(struct PStack *st, struct BCState *bcs)
814 bcs->channel = st->l1.bc;
815 if (bch_open_state(st->l1.hardware, bcs)) return (-1);
816 st->l1.bcs = bcs;
819 bcs->st = st;
829 cs->bcs[hscx].BC_SetStack = bch_setstack;
830 cs->bcs[hscx].BC_Close = bch_close_state;
831 cs->bcs[hscx].hw.hscx.hscx = hscx;
832 cs->bcs[hscx].cs = cs;
833 bch_mode(cs->bcs + hscx, 0, hscx);