Lines Matching refs:vcc
313 static void rx_ident_err(struct atm_vcc *vcc) in rx_ident_err() argument
319 dev = vcc->dev; in rx_ident_err()
325 eni_vcc = ENI_VCC(vcc); in rx_ident_err()
328 printk(KERN_ALERT " VCI %d, rxing %d, words %ld\n",vcc->vci, in rx_ident_err()
344 static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb, in do_rx_dma() argument
355 eni_dev = ENI_DEV(vcc->dev); in do_rx_dma()
356 eni_vcc = ENI_VCC(vcc); in do_rx_dma()
366 "mis-aligned RX data (0x%lx)\n",vcc->dev->number, in do_rx_dma()
367 vcc->vci,(unsigned long) paddr); in do_rx_dma()
370 ATM_SKB(skb)->vcc = vcc; in do_rx_dma()
375 dma[j++] = (here << MID_DMA_COUNT_SHIFT) | (vcc->vci in do_rx_dma()
396 (vcc->vci << MID_DMA_VCI_SHIFT); in do_rx_dma()
404 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
414 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
424 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
434 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
443 | (vcc->vci << MID_DMA_VCI_SHIFT); in do_rx_dma()
449 (vcc->vci << MID_DMA_VCI_SHIFT) | MID_DT_JK; in do_rx_dma()
466 vcc->dev->number); in do_rx_dma()
494 static void discard(struct atm_vcc *vcc,unsigned long size) in discard() argument
498 eni_vcc = ENI_VCC(vcc); in discard()
500 while (do_rx_dma(vcc,NULL,1,size,0)) EVENT("BUSY LOOP",0,0); in discard()
512 static int rx_aal0(struct atm_vcc *vcc) in rx_aal0() argument
520 eni_vcc = ENI_VCC(vcc); in rx_aal0()
523 rx_ident_err(vcc); in rx_aal0()
528 vcc->dev->number); in rx_aal0()
530 atomic_inc(&vcc->stats->rx_err); in rx_aal0()
535 skb = length ? atm_alloc_charge(vcc,length,GFP_ATOMIC) : NULL; in rx_aal0()
537 discard(vcc,length >> 2); in rx_aal0()
543 if (do_rx_dma(vcc,skb,1,length >> 2,length >> 2)) return 1; in rx_aal0()
549 static int rx_aal5(struct atm_vcc *vcc) in rx_aal5() argument
558 eni_vcc = ENI_VCC(vcc); in rx_aal5()
561 rx_ident_err(vcc); in rx_aal5()
568 vcc->dev->number); in rx_aal5()
577 vcc->dev->number); in rx_aal5()
585 atomic_inc(&vcc->stats->rx_err); in rx_aal5()
600 vcc->dev->number,vcc->vci,length,size << 2,descr); in rx_aal5()
602 atomic_inc(&vcc->stats->rx_err); in rx_aal5()
605 skb = eff ? atm_alloc_charge(vcc,eff << 2,GFP_ATOMIC) : NULL; in rx_aal5()
607 discard(vcc,size); in rx_aal5()
612 if (do_rx_dma(vcc,skb,1,size,eff)) return 1; in rx_aal5()
618 static inline int rx_vcc(struct atm_vcc *vcc) in rx_vcc() argument
624 eni_vcc = ENI_VCC(vcc); in rx_vcc()
625 vci_dsc = ENI_DEV(vcc->dev)->vci+vcc->vci*16; in rx_vcc()
631 DPRINTK("CB_DESCR %ld REG_DESCR %d\n",ENI_VCC(vcc)->descr, in rx_vcc()
634 if (ENI_VCC(vcc)->rx(vcc)) return 1; in rx_vcc()
644 while (ENI_VCC(vcc)->descr != (tmp = (readl(vci_dsc+4) & MID_VCI_DESCR) in rx_vcc()
648 DPRINTK("CB_DESCR %ld REG_DESCR %d\n",ENI_VCC(vcc)->descr, in rx_vcc()
651 if (ENI_VCC(vcc)->rx(vcc)) return 1; in rx_vcc()
685 struct atm_vcc *vcc; in get_service() local
693 vcc = eni_dev->rx_map[vci & 1023]; in get_service()
694 if (!vcc) { in get_service()
701 if (ENI_VCC(vcc)->next != ENI_VCC_NOS) { in get_service()
706 ENI_VCC(vcc)->timestamp = ktime_get_real(); in get_service()
707 ENI_VCC(vcc)->next = NULL; in get_service()
708 if (vcc->qos.rxtp.traffic_class == ATM_CBR) { in get_service()
710 ENI_VCC(eni_dev->last_fast)->next = vcc; in get_service()
711 else eni_dev->fast = vcc; in get_service()
712 eni_dev->last_fast = vcc; in get_service()
716 ENI_VCC(eni_dev->last_slow)->next = vcc; in get_service()
717 else eni_dev->slow = vcc; in get_service()
718 eni_dev->last_slow = vcc; in get_service()
721 ENI_VCC(vcc)->servicing++; in get_service()
730 struct atm_vcc *vcc; in dequeue_rx() local
750 vcc = ATM_SKB(skb)->vcc; in dequeue_rx()
751 eni_vcc = ENI_VCC(vcc); in dequeue_rx()
753 vci_dsc = eni_dev->vci+vcc->vci*16; in dequeue_rx()
768 if (vcc->qos.aal == ATM_AAL0) in dequeue_rx()
772 vcc->push(vcc,skb); in dequeue_rx()
775 atomic_inc(&vcc->stats->rx); in dequeue_rx()
781 static int open_rx_first(struct atm_vcc *vcc) in open_rx_first() argument
788 eni_dev = ENI_DEV(vcc->dev); in open_rx_first()
789 eni_vcc = ENI_VCC(vcc); in open_rx_first()
791 if (vcc->qos.rxtp.traffic_class == ATM_NONE) return 0; in open_rx_first()
792 size = vcc->qos.rxtp.max_sdu*eni_dev->rx_mult/100; in open_rx_first()
793 if (size > MID_MAX_BUF_SIZE && vcc->qos.rxtp.max_sdu <= in open_rx_first()
800 eni_vcc->rx = vcc->qos.aal == ATM_AAL5 ? rx_aal5 : rx_aal0; in open_rx_first()
810 static int open_rx_second(struct atm_vcc *vcc) in open_rx_second() argument
819 eni_dev = ENI_DEV(vcc->dev); in open_rx_second()
820 eni_vcc = ENI_VCC(vcc); in open_rx_second()
823 here = eni_dev->vci+vcc->vci*16; in open_rx_second()
829 if (eni_dev->rx_map[vcc->vci]) in open_rx_second()
831 "in use\n",vcc->dev->number,vcc->vci); in open_rx_second()
832 eni_dev->rx_map[vcc->vci] = vcc; /* now it counts */ in open_rx_second()
833 writel(((vcc->qos.aal != ATM_AAL5 ? MID_MODE_RAW : MID_MODE_AAL5) << in open_rx_second()
841 static void close_rx(struct atm_vcc *vcc) in close_rx() argument
848 eni_vcc = ENI_VCC(vcc); in close_rx()
850 eni_dev = ENI_DEV(vcc->dev); in close_rx()
851 if (vcc->vpi != ATM_VPI_UNSPEC && vcc->vci != ATM_VCI_UNSPEC) { in close_rx()
852 here = eni_dev->vci+vcc->vci*16; in close_rx()
861 eni_dev->rx_map[vcc->vci] = NULL; in close_rx()
886 tmp = readl(eni_dev->vci+vcc->vci*16+4) & MID_VCI_READ; in close_rx()
1035 struct atm_vcc *vcc; in do_tx() local
1047 vcc = ATM_SKB(skb)->vcc; in do_tx()
1048 NULLCHECK(vcc); in do_tx()
1049 eni_dev = ENI_DEV(vcc->dev); in do_tx()
1051 eni_vcc = ENI_VCC(vcc); in do_tx()
1067 "TX data\n",vcc->dev->number,vcc->vci); in do_tx()
1075 aal5 = vcc->qos.aal == ATM_AAL5; in do_tx()
1095 vcc->dev->number,size); in do_tx()
1108 "(got only %d)\n",vcc->dev->number,dma_size,TX_DMA_BUF); in do_tx()
1114 vcc->dev->number); in do_tx()
1158 writel((vcc->vci << MID_SEG_VCI_SHIFT) | in do_tx()
1174 ENI_VCC(vcc)->txing += size; in do_tx()
1211 struct atm_vcc *vcc; in dequeue_tx() local
1219 vcc = ATM_SKB(skb)->vcc; in dequeue_tx()
1220 NULLCHECK(vcc); in dequeue_tx()
1221 tx = ENI_VCC(vcc)->tx; in dequeue_tx()
1222 NULLCHECK(ENI_VCC(vcc)->tx); in dequeue_tx()
1225 if (ENI_VCC(vcc)->txing < tx->words && ENI_PRV_POS(skb) == in dequeue_tx()
1230 ENI_VCC(vcc)->txing -= ENI_PRV_SIZE(skb); in dequeue_tx()
1233 if (vcc->pop) vcc->pop(vcc,skb); in dequeue_tx()
1235 atomic_inc(&vcc->stats->tx); in dequeue_tx()
1289 static int reserve_or_set_tx(struct atm_vcc *vcc,struct atm_trafprm *txtp, in reserve_or_set_tx() argument
1292 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in reserve_or_set_tx()
1293 struct eni_vcc *eni_vcc = ENI_VCC(vcc); in reserve_or_set_tx()
1377 static int open_tx_first(struct atm_vcc *vcc) in open_tx_first() argument
1379 ENI_VCC(vcc)->tx = NULL; in open_tx_first()
1380 if (vcc->qos.txtp.traffic_class == ATM_NONE) return 0; in open_tx_first()
1381 ENI_VCC(vcc)->txing = 0; in open_tx_first()
1382 return reserve_or_set_tx(vcc,&vcc->qos.txtp,1,1); in open_tx_first()
1386 static int open_tx_second(struct atm_vcc *vcc) in open_tx_second() argument
1392 static void close_tx(struct atm_vcc *vcc) in close_tx() argument
1398 eni_vcc = ENI_VCC(vcc); in close_tx()
1400 eni_dev = ENI_DEV(vcc->dev); in close_tx()
1896 static void eni_close(struct atm_vcc *vcc) in eni_close() argument
1899 if (!ENI_VCC(vcc)) return; in eni_close()
1900 clear_bit(ATM_VF_READY,&vcc->flags); in eni_close()
1901 close_rx(vcc); in eni_close()
1902 close_tx(vcc); in eni_close()
1905 kfree(ENI_VCC(vcc)); in eni_close()
1906 vcc->dev_data = NULL; in eni_close()
1907 clear_bit(ATM_VF_ADDR,&vcc->flags); in eni_close()
1912 static int eni_open(struct atm_vcc *vcc) in eni_open() argument
1916 short vpi = vcc->vpi; in eni_open()
1917 int vci = vcc->vci; in eni_open()
1921 if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) in eni_open()
1922 vcc->dev_data = NULL; in eni_open()
1924 set_bit(ATM_VF_ADDR,&vcc->flags); in eni_open()
1925 if (vcc->qos.aal != ATM_AAL0 && vcc->qos.aal != ATM_AAL5) in eni_open()
1927 DPRINTK(DEV_LABEL "(itf %d): open %d.%d\n",vcc->dev->number,vcc->vpi, in eni_open()
1928 vcc->vci); in eni_open()
1929 if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) { in eni_open()
1932 vcc->dev_data = eni_vcc; in eni_open()
1934 if ((error = open_rx_first(vcc))) { in eni_open()
1935 eni_close(vcc); in eni_open()
1938 if ((error = open_tx_first(vcc))) { in eni_open()
1939 eni_close(vcc); in eni_open()
1944 if ((error = open_rx_second(vcc))) { in eni_open()
1945 eni_close(vcc); in eni_open()
1948 if ((error = open_tx_second(vcc))) { in eni_open()
1949 eni_close(vcc); in eni_open()
1952 set_bit(ATM_VF_READY,&vcc->flags); in eni_open()
1958 static int eni_change_qos(struct atm_vcc *vcc,struct atm_qos *qos,int flgs) in eni_change_qos() argument
1960 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in eni_change_qos()
1961 struct eni_tx *tx = ENI_VCC(vcc)->tx; in eni_change_qos()
1975 error = reserve_or_set_tx(vcc,&qos->txtp,rsv,shp); in eni_change_qos()
1986 if (ATM_SKB(skb)->vcc != vcc) continue; in eni_change_qos()
2037 static int eni_getsockopt(struct atm_vcc *vcc,int level,int optname, in eni_getsockopt() argument
2044 static int eni_setsockopt(struct atm_vcc *vcc,int level,int optname, in eni_setsockopt() argument
2051 static int eni_send(struct atm_vcc *vcc,struct sk_buff *skb) in eni_send() argument
2056 if (!ENI_VCC(vcc)->tx) { in eni_send()
2057 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2063 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2066 if (vcc->qos.aal == ATM_AAL0) { in eni_send()
2068 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2075 ATM_SKB(skb)->vcc = vcc; in eni_send()
2076 tasklet_disable(&ENI_DEV(vcc->dev)->task); in eni_send()
2078 tasklet_enable(&ENI_DEV(vcc->dev)->task); in eni_send()
2080 skb_queue_tail(&ENI_VCC(vcc)->tx->backlog,skb); in eni_send()
2082 tasklet_schedule(&ENI_DEV(vcc->dev)->task); in eni_send()
2105 struct atm_vcc *vcc; in eni_proc_read() local
2183 vcc = atm_sk(s); in eni_proc_read()
2184 if (vcc->dev != dev) in eni_proc_read()
2186 eni_vcc = ENI_VCC(vcc); in eni_proc_read()
2188 length = sprintf(page,"vcc %4d: ",vcc->vci); in eni_proc_read()