Lines Matching full:vc
550 struct vc_map *vc; in idt77252_tx_dump() local
555 vc = card->vcs[i]; in idt77252_tx_dump()
556 if (!vc) in idt77252_tx_dump()
560 if (vc->rx_vcc) in idt77252_tx_dump()
561 vcc = vc->rx_vcc; in idt77252_tx_dump()
562 else if (vc->tx_vcc) in idt77252_tx_dump()
563 vcc = vc->tx_vcc; in idt77252_tx_dump()
568 printk("%s: Connection %d:\n", card->name, vc->index); in idt77252_tx_dump()
569 dump_tct(card, vc->index); in idt77252_tx_dump()
703 push_on_scq(struct idt77252_dev *card, struct vc_map *vc, struct sk_buff *skb) in push_on_scq() argument
705 struct scq_info *scq = vc->scq; in push_on_scq()
721 spin_lock_irqsave(&vc->lock, flags); in push_on_scq()
722 if (vc->estimator) { in push_on_scq()
723 struct atm_vcc *vcc = vc->tx_vcc; in push_on_scq()
726 vc->estimator->cells += (skb->len + 47) / 48; in push_on_scq()
729 u32 cps = vc->estimator->maxcps; in push_on_scq()
731 vc->estimator->cps = cps; in push_on_scq()
732 vc->estimator->avcps = cps << 5; in push_on_scq()
733 if (vc->lacr < vc->init_er) { in push_on_scq()
734 vc->lacr = vc->init_er; in push_on_scq()
735 writel(TCMDQ_LACR | (vc->lacr << 16) | in push_on_scq()
736 vc->index, SAR_REG_TCMDQ); in push_on_scq()
740 spin_unlock_irqrestore(&vc->lock, flags); in push_on_scq()
763 if (test_and_clear_bit(VCF_IDLE, &vc->flags)) { in push_on_scq()
764 writel(TCMDQ_START_LACR | (vc->lacr << 16) | vc->index, in push_on_scq()
779 card->name, vc->tx_vcc->vpi, vc->tx_vcc->vci); in push_on_scq()
791 drain_scq(struct idt77252_dev *card, struct vc_map *vc) in drain_scq() argument
793 struct scq_info *scq = vc->scq; in drain_scq()
821 if (push_on_scq(card, vc, skb)) { in drain_scq()
822 skb_queue_head(&vc->scq->pending, skb); in drain_scq()
830 queue_skb(struct idt77252_dev *card, struct vc_map *vc, in queue_skb() argument
867 if (test_bit(VCF_RSV, &vc->flags)) in queue_skb()
868 vc = card->vcs[0]; in queue_skb()
873 if (test_bit(VCF_RSV, &vc->flags)) { in queue_skb()
874 printk("%s: Trying to transmit on reserved VC\n", card->name); in queue_skb()
915 spin_lock_irqsave(&vc->scq->skblock, flags); in queue_skb()
916 skb_queue_tail(&vc->scq->pending, skb); in queue_skb()
918 while ((skb = skb_dequeue(&vc->scq->pending))) { in queue_skb()
919 if (push_on_scq(card, vc, skb)) { in queue_skb()
920 skb_queue_head(&vc->scq->pending, skb); in queue_skb()
924 spin_unlock_irqrestore(&vc->scq->skblock, flags); in queue_skb()
935 get_free_scd(struct idt77252_dev *card, struct vc_map *vc) in get_free_scd() argument
941 card->scd2vc[i] = vc; in get_free_scd()
942 vc->scd_index = i; in get_free_scd()
1016 struct vc_map *vc; in dequeue_rx() local
1046 printk("%s: SDU received for out-of-range vc %u.%u\n", in dequeue_rx()
1052 vc = card->vcs[VPCI2VC(card, vpi, vci)]; in dequeue_rx()
1053 if (!vc || !test_bit(VCF_RX, &vc->flags)) { in dequeue_rx()
1054 printk("%s: SDU received on non RX vc %u.%u\n", in dequeue_rx()
1060 vcc = vc->rx_vcc; in dequeue_rx()
1115 rpp = &vc->rcv.rx_pool; in dequeue_rx()
1243 struct vc_map *vc; in idt77252_rx_raw() local
1288 RPRINTK("%s: SDU received for out-of-range vc %u.%u\n", in idt77252_rx_raw()
1293 vc = card->vcs[VPCI2VC(card, vpi, vci)]; in idt77252_rx_raw()
1294 if (!vc || !test_bit(VCF_RX, &vc->flags)) { in idt77252_rx_raw()
1295 RPRINTK("%s: SDU received on non RX vc %u.%u\n", in idt77252_rx_raw()
1300 vcc = vc->rx_vcc; in idt77252_rx_raw()
1303 RPRINTK("%s: raw cell for non AAL0 vc %u.%u\n", in idt77252_rx_raw()
1409 struct vc_map *vc; in idt77252_tx() local
1452 vc = card->vcs[conn & 0x1fff]; in idt77252_tx()
1453 if (!vc) { in idt77252_tx()
1454 printk("%s: could not find VC from conn %d\n", in idt77252_tx()
1460 card->name, vc->index); in idt77252_tx()
1462 set_bit(VCF_IDLE, &vc->flags); in idt77252_tx()
1469 vc = card->vcs[conn & 0x1fff]; in idt77252_tx()
1470 if (!vc) { in idt77252_tx()
1471 printk("%s: no VC at index %d\n", in idt77252_tx()
1477 drain_scq(card, vc); in idt77252_tx()
1495 vc = card->vcs[VPCI2VC(card, vpi, vci)]; in idt77252_tx()
1496 if (!vc) { in idt77252_tx()
1498 "no VC at VPI.VCI %u.%u\n", in idt77252_tx()
1503 drain_scq(card, vc); in idt77252_tx()
1595 __fill_tst(struct idt77252_dev *card, struct vc_map *vc, in __fill_tst() argument
1605 if (card->soft_tst[e].vc == NULL) in __fill_tst()
1614 card->name, vc ? vc->index : -1, e); in __fill_tst()
1619 if (vc && (opc != TSTE_OPC_NULL)) in __fill_tst()
1620 data = opc | vc->index; in __fill_tst()
1628 if ((cl >= avail) && (card->soft_tst[e].vc == NULL)) { in __fill_tst()
1629 if (vc) in __fill_tst()
1630 card->soft_tst[e].vc = vc; in __fill_tst()
1632 card->soft_tst[e].vc = (void *)-1; in __fill_tst()
1655 fill_tst(struct idt77252_dev *card, struct vc_map *vc, int n, unsigned int opc) in fill_tst() argument
1662 res = __fill_tst(card, vc, n, opc); in fill_tst()
1673 __clear_tst(struct idt77252_dev *card, struct vc_map *vc) in __clear_tst() argument
1681 if (card->soft_tst[e].vc == vc) { in __clear_tst()
1682 card->soft_tst[e].vc = NULL; in __clear_tst()
1698 clear_tst(struct idt77252_dev *card, struct vc_map *vc) in clear_tst() argument
1705 res = __clear_tst(card, vc); in clear_tst()
1716 change_tst(struct idt77252_dev *card, struct vc_map *vc, in change_tst() argument
1724 __clear_tst(card, vc); in change_tst()
1725 res = __fill_tst(card, vc, n, opc); in change_tst()
1737 set_tct(struct idt77252_dev *card, struct vc_map *vc) in set_tct() argument
1741 tct = (unsigned long) (card->tct_base + vc->index * SAR_SRAM_TCT_SIZE); in set_tct()
1743 switch (vc->class) { in set_tct()
1746 card->name, tct, vc->scq->scd); in set_tct()
1748 write_sram(card, tct + 0, TCT_CBR | vc->scq->scd); in set_tct()
1760 card->name, tct, vc->scq->scd); in set_tct()
1762 write_sram(card, tct + 0, TCT_UBR | vc->scq->scd); in set_tct()
1767 write_sram(card, tct + 5, vc->init_er); in set_tct()
1943 struct vc_map *vc = vcc->dev_data; in idt77252_send_skb() local
1946 if (vc == NULL) { in idt77252_send_skb()
1952 if (!test_bit(VCF_TX, &vc->flags)) { in idt77252_send_skb()
1953 printk("%s: Trying to transmit on a non-tx VC.\n", card->name); in idt77252_send_skb()
1979 err = queue_skb(card, vc, skb, oam); in idt77252_send_skb()
2074 struct vc_map *vc = est->vc; in idt77252_est_timer() local
2075 struct idt77252_dev *card = vc->card; in idt77252_est_timer()
2081 spin_lock_irqsave(&vc->lock, flags); in idt77252_est_timer()
2082 if (!vc->estimator) in idt77252_est_timer()
2096 if (lacr > vc->max_er) in idt77252_est_timer()
2097 lacr = vc->max_er; in idt77252_est_timer()
2099 if (lacr != vc->lacr) { in idt77252_est_timer()
2100 vc->lacr = lacr; in idt77252_est_timer()
2101 writel(TCMDQ_LACR|(vc->lacr << 16)|vc->index, SAR_REG_TCMDQ); in idt77252_est_timer()
2108 spin_unlock_irqrestore(&vc->lock, flags); in idt77252_est_timer()
2112 idt77252_init_est(struct vc_map *vc, int pcr) in idt77252_init_est() argument
2122 est->vc = vc; in idt77252_init_est()
2133 idt77252_init_cbr(struct idt77252_dev *card, struct vc_map *vc, in idt77252_init_cbr() argument
2142 printk("%s: trying to open a CBR VC with cell rate = 0\n", in idt77252_init_cbr()
2149 if (test_bit(VCF_TX, &vc->flags)) in idt77252_init_cbr()
2150 tst_used = vc->ntste; in idt77252_init_cbr()
2184 vc->ntste = tst_entries; in idt77252_init_cbr()
2187 if (test_bit(VCF_TX, &vc->flags)) { in idt77252_init_cbr()
2193 change_tst(card, vc, tst_entries, TSTE_OPC_CBR); in idt77252_init_cbr()
2198 fill_tst(card, vc, tst_entries, TSTE_OPC_CBR); in idt77252_init_cbr()
2203 idt77252_init_ubr(struct idt77252_dev *card, struct vc_map *vc, in idt77252_init_ubr() argument
2210 spin_lock_irqsave(&vc->lock, flags); in idt77252_init_ubr()
2211 if (vc->estimator) { in idt77252_init_ubr()
2212 est = vc->estimator; in idt77252_init_ubr()
2213 vc->estimator = NULL; in idt77252_init_ubr()
2215 spin_unlock_irqrestore(&vc->lock, flags); in idt77252_init_ubr()
2225 vc->estimator = idt77252_init_est(vc, tcr); in idt77252_init_ubr()
2227 vc->class = SCHED_UBR; in idt77252_init_ubr()
2228 vc->init_er = idt77252_rate_logindex(card, tcr); in idt77252_init_ubr()
2229 vc->lacr = vc->init_er; in idt77252_init_ubr()
2231 vc->max_er = vc->init_er; in idt77252_init_ubr()
2233 vc->max_er = 0xff; in idt77252_init_ubr()
2239 idt77252_init_tx(struct idt77252_dev *card, struct vc_map *vc, in idt77252_init_tx() argument
2244 if (test_bit(VCF_TX, &vc->flags)) in idt77252_init_tx()
2249 vc->class = SCHED_CBR; in idt77252_init_tx()
2253 vc->class = SCHED_UBR; in idt77252_init_tx()
2262 vc->scq = alloc_scq(card, vc->class); in idt77252_init_tx()
2263 if (!vc->scq) { in idt77252_init_tx()
2268 vc->scq->scd = get_free_scd(card, vc); in idt77252_init_tx()
2269 if (vc->scq->scd == 0) { in idt77252_init_tx()
2271 free_scq(card, vc->scq); in idt77252_init_tx()
2275 fill_scd(card, vc->scq, vc->class); in idt77252_init_tx()
2277 if (set_tct(card, vc)) { in idt77252_init_tx()
2281 card->scd2vc[vc->scd_index] = NULL; in idt77252_init_tx()
2282 free_scq(card, vc->scq); in idt77252_init_tx()
2286 switch (vc->class) { in idt77252_init_tx()
2288 error = idt77252_init_cbr(card, vc, vcc, qos); in idt77252_init_tx()
2290 card->scd2vc[vc->scd_index] = NULL; in idt77252_init_tx()
2291 free_scq(card, vc->scq); in idt77252_init_tx()
2295 clear_bit(VCF_IDLE, &vc->flags); in idt77252_init_tx()
2296 writel(TCMDQ_START | vc->index, SAR_REG_TCMDQ); in idt77252_init_tx()
2300 error = idt77252_init_ubr(card, vc, vcc, qos); in idt77252_init_tx()
2302 card->scd2vc[vc->scd_index] = NULL; in idt77252_init_tx()
2303 free_scq(card, vc->scq); in idt77252_init_tx()
2307 set_bit(VCF_IDLE, &vc->flags); in idt77252_init_tx()
2311 vc->tx_vcc = vcc; in idt77252_init_tx()
2312 set_bit(VCF_TX, &vc->flags); in idt77252_init_tx()
2317 idt77252_init_rx(struct idt77252_dev *card, struct vc_map *vc, in idt77252_init_rx() argument
2324 if (test_bit(VCF_RX, &vc->flags)) in idt77252_init_rx()
2327 vc->rx_vcc = vcc; in idt77252_init_rx()
2328 set_bit(VCF_RX, &vc->flags); in idt77252_init_rx()
2333 flush_rx_pool(card, &vc->rcv.rx_pool); in idt77252_init_rx()
2367 addr = card->rct_base + (vc->index << 2); in idt77252_init_rx()
2385 struct vc_map *vc; in idt77252_open() local
2426 printk("%s: can't alloc vc in open()\n", card->name); in idt77252_open()
2435 vc = card->vcs[index]; in idt77252_open()
2437 vcc->dev_data = vc; in idt77252_open()
2439 IPRINTK("%s: idt77252_open: vc = %d (%d.%d) %s/%s (max RX SDU: %u)\n", in idt77252_open()
2440 card->name, vc->index, vcc->vpi, vcc->vci, in idt77252_open()
2447 test_bit(VCF_TX, &vc->flags)) in idt77252_open()
2450 test_bit(VCF_RX, &vc->flags)) in idt77252_open()
2461 error = idt77252_init_tx(card, vc, vcc, &vcc->qos); in idt77252_open()
2469 error = idt77252_init_rx(card, vc, vcc, &vcc->qos); in idt77252_open()
2487 struct vc_map *vc = vcc->dev_data; in idt77252_close() local
2494 IPRINTK("%s: idt77252_close: vc = %d (%d.%d)\n", in idt77252_close()
2495 card->name, vc->index, vcc->vpi, vcc->vci); in idt77252_close()
2501 spin_lock_irqsave(&vc->lock, flags); in idt77252_close()
2502 clear_bit(VCF_RX, &vc->flags); in idt77252_close()
2503 vc->rx_vcc = NULL; in idt77252_close()
2504 spin_unlock_irqrestore(&vc->lock, flags); in idt77252_close()
2509 addr = card->rct_base + vc->index * SAR_SRAM_RCT_SIZE; in idt77252_close()
2516 if (skb_queue_len(&vc->rcv.rx_pool.queue) != 0) { in idt77252_close()
2517 DPRINTK("%s: closing a VC with pending rx buffers.\n", in idt77252_close()
2520 recycle_rx_pool_skb(card, &vc->rcv.rx_pool); in idt77252_close()
2527 spin_lock_irqsave(&vc->lock, flags); in idt77252_close()
2528 clear_bit(VCF_TX, &vc->flags); in idt77252_close()
2529 clear_bit(VCF_IDLE, &vc->flags); in idt77252_close()
2530 clear_bit(VCF_RSV, &vc->flags); in idt77252_close()
2531 vc->tx_vcc = NULL; in idt77252_close()
2533 if (vc->estimator) { in idt77252_close()
2534 timer_shutdown(&vc->estimator->timer); in idt77252_close()
2535 kfree(vc->estimator); in idt77252_close()
2536 vc->estimator = NULL; in idt77252_close()
2538 spin_unlock_irqrestore(&vc->lock, flags); in idt77252_close()
2541 while (atomic_read(&vc->scq->used) > 0) { in idt77252_close()
2545 card->name, atomic_read(&vc->scq->used)); in idt77252_close()
2550 writel(TCMDQ_HALT | vc->index, SAR_REG_TCMDQ); in idt77252_close()
2551 clear_scd(card, vc->scq, vc->class); in idt77252_close()
2553 if (vc->class == SCHED_CBR) { in idt77252_close()
2554 clear_tst(card, vc); in idt77252_close()
2555 card->tst_free += vc->ntste; in idt77252_close()
2556 vc->ntste = 0; in idt77252_close()
2559 card->scd2vc[vc->scd_index] = NULL; in idt77252_close()
2560 free_scq(card, vc->scq); in idt77252_close()
2571 struct vc_map *vc = vcc->dev_data; in idt77252_change_qos() local
2577 if (!test_bit(VCF_TX, &vc->flags)) { in idt77252_change_qos()
2578 error = idt77252_init_tx(card, vc, vcc, qos); in idt77252_change_qos()
2584 error = idt77252_init_cbr(card, vc, vcc, qos); in idt77252_change_qos()
2590 error = idt77252_init_ubr(card, vc, vcc, qos); in idt77252_change_qos()
2594 if (!test_bit(VCF_IDLE, &vc->flags)) { in idt77252_change_qos()
2595 writel(TCMDQ_LACR | (vc->lacr << 16) | in idt77252_change_qos()
2596 vc->index, SAR_REG_TCMDQ); in idt77252_change_qos()
2609 !test_bit(VCF_RX, &vc->flags)) { in idt77252_change_qos()
2610 error = idt77252_init_rx(card, vc, vcc, qos); in idt77252_change_qos()
2665 struct vc_map *vc; in idt77252_proc_read() local
2668 vc = card->vcs[i]; in idt77252_proc_read()
2669 if (!vc) in idt77252_proc_read()
2673 if (vc->tx_vcc) in idt77252_proc_read()
2674 vcc = vc->tx_vcc; in idt77252_proc_read()
2846 struct vc_map *vc; in open_card_oam() local
2855 vc = kzalloc(sizeof(struct vc_map), GFP_KERNEL); in open_card_oam()
2856 if (!vc) { in open_card_oam()
2857 printk("%s: can't alloc vc\n", card->name); in open_card_oam()
2860 vc->index = index; in open_card_oam()
2861 card->vcs[index] = vc; in open_card_oam()
2863 flush_rx_pool(card, &vc->rcv.rx_pool); in open_card_oam()
2870 addr = card->rct_base + (vc->index << 2); in open_card_oam()
2889 struct vc_map *vc; in close_card_oam() local
2896 vc = card->vcs[index]; in close_card_oam()
2898 addr = card->rct_base + vc->index * SAR_SRAM_RCT_SIZE; in close_card_oam()
2906 if (skb_queue_len(&vc->rcv.rx_pool.queue) != 0) { in close_card_oam()
2907 DPRINTK("%s: closing a VC " in close_card_oam()
2911 recycle_rx_pool_skb(card, &vc->rcv.rx_pool); in close_card_oam()
2913 kfree(vc); in close_card_oam()
2921 struct vc_map *vc; in open_card_ubr0() local
2923 vc = kzalloc(sizeof(struct vc_map), GFP_KERNEL); in open_card_ubr0()
2924 if (!vc) { in open_card_ubr0()
2925 printk("%s: can't alloc vc\n", card->name); in open_card_ubr0()
2928 card->vcs[0] = vc; in open_card_ubr0()
2929 vc->class = SCHED_UBR0; in open_card_ubr0()
2931 vc->scq = alloc_scq(card, vc->class); in open_card_ubr0()
2932 if (!vc->scq) { in open_card_ubr0()
2939 card->scd2vc[0] = vc; in open_card_ubr0()
2940 vc->scd_index = 0; in open_card_ubr0()
2941 vc->scq->scd = card->scd_base; in open_card_ubr0()
2943 fill_scd(card, vc->scq, vc->class); in open_card_ubr0()
2954 clear_bit(VCF_IDLE, &vc->flags); in open_card_ubr0()
2962 struct vc_map *vc = card->vcs[0]; in close_card_ubr0() local
2964 free_scq(card, vc->scq); in close_card_ubr0()
2965 kfree(vc); in close_card_ubr0()
3415 IPRINTK("%s: allocate %d byte for VC map.\n", card->name, size); in init_card()
3424 IPRINTK("%s: allocate %d byte for SCD to VC mapping.\n", in init_card()
3434 IPRINTK("%s: allocate %d byte for TST to VC mapping.\n", in init_card()
3444 card->soft_tst[i].vc = NULL; in init_card()