Lines Matching refs:vcc

311 static void rx_ident_err(struct atm_vcc *vcc)  in rx_ident_err()  argument
317 dev = vcc->dev; in rx_ident_err()
323 eni_vcc = ENI_VCC(vcc); in rx_ident_err()
326 printk(KERN_ALERT " VCI %d, rxing %d, words %ld\n",vcc->vci, in rx_ident_err()
342 static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb, in do_rx_dma() argument
353 eni_dev = ENI_DEV(vcc->dev); in do_rx_dma()
354 eni_vcc = ENI_VCC(vcc); in do_rx_dma()
364 "mis-aligned RX data (0x%lx)\n",vcc->dev->number, in do_rx_dma()
365 vcc->vci,(unsigned long) paddr); in do_rx_dma()
368 ATM_SKB(skb)->vcc = vcc; in do_rx_dma()
373 dma[j++] = (here << MID_DMA_COUNT_SHIFT) | (vcc->vci in do_rx_dma()
394 (vcc->vci << MID_DMA_VCI_SHIFT); in do_rx_dma()
402 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
412 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
422 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
432 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
441 | (vcc->vci << MID_DMA_VCI_SHIFT); in do_rx_dma()
447 (vcc->vci << MID_DMA_VCI_SHIFT) | MID_DT_JK; in do_rx_dma()
464 vcc->dev->number); in do_rx_dma()
492 static void discard(struct atm_vcc *vcc,unsigned long size) in discard() argument
496 eni_vcc = ENI_VCC(vcc); in discard()
498 while (do_rx_dma(vcc,NULL,1,size,0)) EVENT("BUSY LOOP",0,0); in discard()
510 static int rx_aal0(struct atm_vcc *vcc) in rx_aal0() argument
518 eni_vcc = ENI_VCC(vcc); in rx_aal0()
521 rx_ident_err(vcc); in rx_aal0()
526 vcc->dev->number); in rx_aal0()
528 atomic_inc(&vcc->stats->rx_err); in rx_aal0()
533 skb = length ? atm_alloc_charge(vcc,length,GFP_ATOMIC) : NULL; in rx_aal0()
535 discard(vcc,length >> 2); in rx_aal0()
541 if (do_rx_dma(vcc,skb,1,length >> 2,length >> 2)) return 1; in rx_aal0()
547 static int rx_aal5(struct atm_vcc *vcc) in rx_aal5() argument
556 eni_vcc = ENI_VCC(vcc); in rx_aal5()
559 rx_ident_err(vcc); in rx_aal5()
566 vcc->dev->number); in rx_aal5()
575 vcc->dev->number); in rx_aal5()
583 atomic_inc(&vcc->stats->rx_err); in rx_aal5()
598 vcc->dev->number,vcc->vci,length,size << 2,descr); in rx_aal5()
600 atomic_inc(&vcc->stats->rx_err); in rx_aal5()
603 skb = eff ? atm_alloc_charge(vcc,eff << 2,GFP_ATOMIC) : NULL; in rx_aal5()
605 discard(vcc,size); in rx_aal5()
610 if (do_rx_dma(vcc,skb,1,size,eff)) return 1; in rx_aal5()
616 static inline int rx_vcc(struct atm_vcc *vcc) in rx_vcc() argument
622 eni_vcc = ENI_VCC(vcc); in rx_vcc()
623 vci_dsc = ENI_DEV(vcc->dev)->vci+vcc->vci*16; in rx_vcc()
629 DPRINTK("CB_DESCR %ld REG_DESCR %d\n",ENI_VCC(vcc)->descr, in rx_vcc()
632 if (ENI_VCC(vcc)->rx(vcc)) return 1; in rx_vcc()
642 while (ENI_VCC(vcc)->descr != (tmp = (readl(vci_dsc+4) & MID_VCI_DESCR) in rx_vcc()
646 DPRINTK("CB_DESCR %ld REG_DESCR %d\n",ENI_VCC(vcc)->descr, in rx_vcc()
649 if (ENI_VCC(vcc)->rx(vcc)) return 1; in rx_vcc()
683 struct atm_vcc *vcc; in get_service() local
691 vcc = eni_dev->rx_map[vci & 1023]; in get_service()
692 if (!vcc) { in get_service()
699 if (ENI_VCC(vcc)->next != ENI_VCC_NOS) { in get_service()
704 ENI_VCC(vcc)->timestamp = ktime_get_real(); in get_service()
705 ENI_VCC(vcc)->next = NULL; in get_service()
706 if (vcc->qos.rxtp.traffic_class == ATM_CBR) { in get_service()
708 ENI_VCC(eni_dev->last_fast)->next = vcc; in get_service()
709 else eni_dev->fast = vcc; in get_service()
710 eni_dev->last_fast = vcc; in get_service()
714 ENI_VCC(eni_dev->last_slow)->next = vcc; in get_service()
715 else eni_dev->slow = vcc; in get_service()
716 eni_dev->last_slow = vcc; in get_service()
719 ENI_VCC(vcc)->servicing++; in get_service()
728 struct atm_vcc *vcc; in dequeue_rx() local
748 vcc = ATM_SKB(skb)->vcc; in dequeue_rx()
749 eni_vcc = ENI_VCC(vcc); in dequeue_rx()
751 vci_dsc = eni_dev->vci+vcc->vci*16; in dequeue_rx()
766 if (vcc->qos.aal == ATM_AAL0) in dequeue_rx()
770 vcc->push(vcc,skb); in dequeue_rx()
773 atomic_inc(&vcc->stats->rx); in dequeue_rx()
779 static int open_rx_first(struct atm_vcc *vcc) in open_rx_first() argument
786 eni_dev = ENI_DEV(vcc->dev); in open_rx_first()
787 eni_vcc = ENI_VCC(vcc); in open_rx_first()
789 if (vcc->qos.rxtp.traffic_class == ATM_NONE) return 0; in open_rx_first()
790 size = vcc->qos.rxtp.max_sdu*eni_dev->rx_mult/100; in open_rx_first()
791 if (size > MID_MAX_BUF_SIZE && vcc->qos.rxtp.max_sdu <= in open_rx_first()
798 eni_vcc->rx = vcc->qos.aal == ATM_AAL5 ? rx_aal5 : rx_aal0; in open_rx_first()
808 static int open_rx_second(struct atm_vcc *vcc) in open_rx_second() argument
817 eni_dev = ENI_DEV(vcc->dev); in open_rx_second()
818 eni_vcc = ENI_VCC(vcc); in open_rx_second()
821 here = eni_dev->vci+vcc->vci*16; in open_rx_second()
827 if (eni_dev->rx_map[vcc->vci]) in open_rx_second()
829 "in use\n",vcc->dev->number,vcc->vci); in open_rx_second()
830 eni_dev->rx_map[vcc->vci] = vcc; /* now it counts */ in open_rx_second()
831 writel(((vcc->qos.aal != ATM_AAL5 ? MID_MODE_RAW : MID_MODE_AAL5) << in open_rx_second()
839 static void close_rx(struct atm_vcc *vcc) in close_rx() argument
846 eni_vcc = ENI_VCC(vcc); in close_rx()
848 eni_dev = ENI_DEV(vcc->dev); in close_rx()
849 if (vcc->vpi != ATM_VPI_UNSPEC && vcc->vci != ATM_VCI_UNSPEC) { in close_rx()
850 here = eni_dev->vci+vcc->vci*16; in close_rx()
859 eni_dev->rx_map[vcc->vci] = NULL; in close_rx()
884 tmp = readl(eni_dev->vci+vcc->vci*16+4) & MID_VCI_READ; in close_rx()
1033 struct atm_vcc *vcc; in do_tx() local
1045 vcc = ATM_SKB(skb)->vcc; in do_tx()
1046 NULLCHECK(vcc); in do_tx()
1047 eni_dev = ENI_DEV(vcc->dev); in do_tx()
1049 eni_vcc = ENI_VCC(vcc); in do_tx()
1065 "TX data\n",vcc->dev->number,vcc->vci); in do_tx()
1073 aal5 = vcc->qos.aal == ATM_AAL5; in do_tx()
1093 vcc->dev->number,size); in do_tx()
1106 "(got only %d)\n",vcc->dev->number,dma_size,TX_DMA_BUF); in do_tx()
1112 vcc->dev->number); in do_tx()
1156 writel((vcc->vci << MID_SEG_VCI_SHIFT) | in do_tx()
1172 ENI_VCC(vcc)->txing += size; in do_tx()
1209 struct atm_vcc *vcc; in dequeue_tx() local
1217 vcc = ATM_SKB(skb)->vcc; in dequeue_tx()
1218 NULLCHECK(vcc); in dequeue_tx()
1219 tx = ENI_VCC(vcc)->tx; in dequeue_tx()
1220 NULLCHECK(ENI_VCC(vcc)->tx); in dequeue_tx()
1223 if (ENI_VCC(vcc)->txing < tx->words && ENI_PRV_POS(skb) == in dequeue_tx()
1228 ENI_VCC(vcc)->txing -= ENI_PRV_SIZE(skb); in dequeue_tx()
1231 if (vcc->pop) vcc->pop(vcc,skb); in dequeue_tx()
1233 atomic_inc(&vcc->stats->tx); in dequeue_tx()
1287 static int reserve_or_set_tx(struct atm_vcc *vcc,struct atm_trafprm *txtp, in reserve_or_set_tx() argument
1290 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in reserve_or_set_tx()
1291 struct eni_vcc *eni_vcc = ENI_VCC(vcc); in reserve_or_set_tx()
1375 static int open_tx_first(struct atm_vcc *vcc) in open_tx_first() argument
1377 ENI_VCC(vcc)->tx = NULL; in open_tx_first()
1378 if (vcc->qos.txtp.traffic_class == ATM_NONE) return 0; in open_tx_first()
1379 ENI_VCC(vcc)->txing = 0; in open_tx_first()
1380 return reserve_or_set_tx(vcc,&vcc->qos.txtp,1,1); in open_tx_first()
1384 static int open_tx_second(struct atm_vcc *vcc) in open_tx_second() argument
1390 static void close_tx(struct atm_vcc *vcc) in close_tx() argument
1396 eni_vcc = ENI_VCC(vcc); in close_tx()
1398 eni_dev = ENI_DEV(vcc->dev); in close_tx()
1893 static void eni_close(struct atm_vcc *vcc) in eni_close() argument
1896 if (!ENI_VCC(vcc)) return; in eni_close()
1897 clear_bit(ATM_VF_READY,&vcc->flags); in eni_close()
1898 close_rx(vcc); in eni_close()
1899 close_tx(vcc); in eni_close()
1902 kfree(ENI_VCC(vcc)); in eni_close()
1903 vcc->dev_data = NULL; in eni_close()
1904 clear_bit(ATM_VF_ADDR,&vcc->flags); in eni_close()
1909 static int eni_open(struct atm_vcc *vcc) in eni_open() argument
1913 short vpi = vcc->vpi; in eni_open()
1914 int vci = vcc->vci; in eni_open()
1918 if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) in eni_open()
1919 vcc->dev_data = NULL; in eni_open()
1921 set_bit(ATM_VF_ADDR,&vcc->flags); in eni_open()
1922 if (vcc->qos.aal != ATM_AAL0 && vcc->qos.aal != ATM_AAL5) in eni_open()
1924 DPRINTK(DEV_LABEL "(itf %d): open %d.%d\n",vcc->dev->number,vcc->vpi, in eni_open()
1925 vcc->vci); in eni_open()
1926 if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) { in eni_open()
1929 vcc->dev_data = eni_vcc; in eni_open()
1931 if ((error = open_rx_first(vcc))) { in eni_open()
1932 eni_close(vcc); in eni_open()
1935 if ((error = open_tx_first(vcc))) { in eni_open()
1936 eni_close(vcc); in eni_open()
1941 if ((error = open_rx_second(vcc))) { in eni_open()
1942 eni_close(vcc); in eni_open()
1945 if ((error = open_tx_second(vcc))) { in eni_open()
1946 eni_close(vcc); in eni_open()
1949 set_bit(ATM_VF_READY,&vcc->flags); in eni_open()
1955 static int eni_change_qos(struct atm_vcc *vcc,struct atm_qos *qos,int flgs) in eni_change_qos() argument
1957 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in eni_change_qos()
1958 struct eni_tx *tx = ENI_VCC(vcc)->tx; in eni_change_qos()
1972 error = reserve_or_set_tx(vcc,&qos->txtp,rsv,shp); in eni_change_qos()
1983 if (ATM_SKB(skb)->vcc != vcc) continue; in eni_change_qos()
2034 static int eni_getsockopt(struct atm_vcc *vcc,int level,int optname, in eni_getsockopt() argument
2041 static int eni_setsockopt(struct atm_vcc *vcc,int level,int optname, in eni_setsockopt() argument
2048 static int eni_send(struct atm_vcc *vcc,struct sk_buff *skb) in eni_send() argument
2053 if (!ENI_VCC(vcc)->tx) { in eni_send()
2054 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2060 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2063 if (vcc->qos.aal == ATM_AAL0) { in eni_send()
2065 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2072 ATM_SKB(skb)->vcc = vcc; in eni_send()
2073 tasklet_disable(&ENI_DEV(vcc->dev)->task); in eni_send()
2075 tasklet_enable(&ENI_DEV(vcc->dev)->task); in eni_send()
2077 skb_queue_tail(&ENI_VCC(vcc)->tx->backlog,skb); in eni_send()
2079 tasklet_schedule(&ENI_DEV(vcc->dev)->task); in eni_send()
2102 struct atm_vcc *vcc; in eni_proc_read() local
2180 vcc = atm_sk(s); in eni_proc_read()
2181 if (vcc->dev != dev) in eni_proc_read()
2183 eni_vcc = ENI_VCC(vcc); in eni_proc_read()
2185 length = sprintf(page,"vcc %4d: ",vcc->vci); in eni_proc_read()