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()
362 "mis-aligned RX data (0x%lx)\n",vcc->dev->number, in do_rx_dma()
363 vcc->vci,(unsigned long) paddr); in do_rx_dma()
366 ATM_SKB(skb)->vcc = vcc; in do_rx_dma()
371 dma[j++] = (here << MID_DMA_COUNT_SHIFT) | (vcc->vci in do_rx_dma()
392 (vcc->vci << MID_DMA_VCI_SHIFT); in do_rx_dma()
400 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
410 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
420 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
430 MID_DMA_COUNT_SHIFT) | (vcc->vci << in do_rx_dma()
439 | (vcc->vci << MID_DMA_VCI_SHIFT); in do_rx_dma()
445 (vcc->vci << MID_DMA_VCI_SHIFT) | MID_DT_JK; in do_rx_dma()
462 vcc->dev->number); in do_rx_dma()
489 static void discard(struct atm_vcc *vcc,unsigned long size) in discard() argument
493 eni_vcc = ENI_VCC(vcc); in discard()
495 while (do_rx_dma(vcc,NULL,1,size,0)) EVENT("BUSY LOOP",0,0); in discard()
507 static int rx_aal0(struct atm_vcc *vcc) in rx_aal0() argument
515 eni_vcc = ENI_VCC(vcc); in rx_aal0()
518 rx_ident_err(vcc); in rx_aal0()
523 vcc->dev->number); in rx_aal0()
525 atomic_inc(&vcc->stats->rx_err); in rx_aal0()
530 skb = length ? atm_alloc_charge(vcc,length,GFP_ATOMIC) : NULL; in rx_aal0()
532 discard(vcc,length >> 2); in rx_aal0()
538 if (do_rx_dma(vcc,skb,1,length >> 2,length >> 2)) return 1; in rx_aal0()
544 static int rx_aal5(struct atm_vcc *vcc) in rx_aal5() argument
553 eni_vcc = ENI_VCC(vcc); in rx_aal5()
556 rx_ident_err(vcc); in rx_aal5()
563 vcc->dev->number); in rx_aal5()
572 vcc->dev->number); in rx_aal5()
580 atomic_inc(&vcc->stats->rx_err); in rx_aal5()
595 vcc->dev->number,vcc->vci,length,size << 2,descr); in rx_aal5()
597 atomic_inc(&vcc->stats->rx_err); in rx_aal5()
600 skb = eff ? atm_alloc_charge(vcc,eff << 2,GFP_ATOMIC) : NULL; in rx_aal5()
602 discard(vcc,size); in rx_aal5()
607 if (do_rx_dma(vcc,skb,1,size,eff)) return 1; in rx_aal5()
613 static inline int rx_vcc(struct atm_vcc *vcc) in rx_vcc() argument
619 eni_vcc = ENI_VCC(vcc); in rx_vcc()
620 vci_dsc = ENI_DEV(vcc->dev)->vci+vcc->vci*16; in rx_vcc()
626 DPRINTK("CB_DESCR %ld REG_DESCR %d\n",ENI_VCC(vcc)->descr, in rx_vcc()
629 if (ENI_VCC(vcc)->rx(vcc)) return 1; in rx_vcc()
639 while (ENI_VCC(vcc)->descr != (tmp = (readl(vci_dsc+4) & MID_VCI_DESCR) in rx_vcc()
643 DPRINTK("CB_DESCR %ld REG_DESCR %d\n",ENI_VCC(vcc)->descr, in rx_vcc()
646 if (ENI_VCC(vcc)->rx(vcc)) return 1; in rx_vcc()
680 struct atm_vcc *vcc; in get_service() local
688 vcc = eni_dev->rx_map[vci & 1023]; in get_service()
689 if (!vcc) { in get_service()
696 if (ENI_VCC(vcc)->next != ENI_VCC_NOS) { in get_service()
701 ENI_VCC(vcc)->timestamp = ktime_get_real(); in get_service()
702 ENI_VCC(vcc)->next = NULL; in get_service()
703 if (vcc->qos.rxtp.traffic_class == ATM_CBR) { in get_service()
705 ENI_VCC(eni_dev->last_fast)->next = vcc; in get_service()
706 else eni_dev->fast = vcc; in get_service()
707 eni_dev->last_fast = vcc; in get_service()
711 ENI_VCC(eni_dev->last_slow)->next = vcc; in get_service()
712 else eni_dev->slow = vcc; in get_service()
713 eni_dev->last_slow = vcc; in get_service()
716 ENI_VCC(vcc)->servicing++; in get_service()
725 struct atm_vcc *vcc; in dequeue_rx() local
745 vcc = ATM_SKB(skb)->vcc; in dequeue_rx()
746 eni_vcc = ENI_VCC(vcc); in dequeue_rx()
748 vci_dsc = eni_dev->vci+vcc->vci*16; in dequeue_rx()
763 if (vcc->qos.aal == ATM_AAL0) in dequeue_rx()
767 vcc->push(vcc,skb); in dequeue_rx()
770 atomic_inc(&vcc->stats->rx); in dequeue_rx()
776 static int open_rx_first(struct atm_vcc *vcc) in open_rx_first() argument
783 eni_dev = ENI_DEV(vcc->dev); in open_rx_first()
784 eni_vcc = ENI_VCC(vcc); in open_rx_first()
786 if (vcc->qos.rxtp.traffic_class == ATM_NONE) return 0; in open_rx_first()
787 size = vcc->qos.rxtp.max_sdu*eni_dev->rx_mult/100; in open_rx_first()
788 if (size > MID_MAX_BUF_SIZE && vcc->qos.rxtp.max_sdu <= in open_rx_first()
795 eni_vcc->rx = vcc->qos.aal == ATM_AAL5 ? rx_aal5 : rx_aal0; in open_rx_first()
805 static int open_rx_second(struct atm_vcc *vcc) in open_rx_second() argument
814 eni_dev = ENI_DEV(vcc->dev); in open_rx_second()
815 eni_vcc = ENI_VCC(vcc); in open_rx_second()
818 here = eni_dev->vci+vcc->vci*16; in open_rx_second()
824 if (eni_dev->rx_map[vcc->vci]) in open_rx_second()
826 "in use\n",vcc->dev->number,vcc->vci); in open_rx_second()
827 eni_dev->rx_map[vcc->vci] = vcc; /* now it counts */ in open_rx_second()
828 writel(((vcc->qos.aal != ATM_AAL5 ? MID_MODE_RAW : MID_MODE_AAL5) << in open_rx_second()
836 static void close_rx(struct atm_vcc *vcc) in close_rx() argument
843 eni_vcc = ENI_VCC(vcc); in close_rx()
845 eni_dev = ENI_DEV(vcc->dev); in close_rx()
846 if (vcc->vpi != ATM_VPI_UNSPEC && vcc->vci != ATM_VCI_UNSPEC) { in close_rx()
847 here = eni_dev->vci+vcc->vci*16; in close_rx()
856 eni_dev->rx_map[vcc->vci] = NULL; in close_rx()
881 tmp = readl(eni_dev->vci+vcc->vci*16+4) & MID_VCI_READ; in close_rx()
1030 struct atm_vcc *vcc; in do_tx() local
1042 vcc = ATM_SKB(skb)->vcc; in do_tx()
1043 NULLCHECK(vcc); in do_tx()
1044 eni_dev = ENI_DEV(vcc->dev); in do_tx()
1046 eni_vcc = ENI_VCC(vcc); in do_tx()
1062 "TX data\n",vcc->dev->number,vcc->vci); in do_tx()
1070 aal5 = vcc->qos.aal == ATM_AAL5; in do_tx()
1090 vcc->dev->number,size); in do_tx()
1103 "(got only %d)\n",vcc->dev->number,dma_size,TX_DMA_BUF); in do_tx()
1109 vcc->dev->number); in do_tx()
1153 writel((vcc->vci << MID_SEG_VCI_SHIFT) | in do_tx()
1169 ENI_VCC(vcc)->txing += size; in do_tx()
1206 struct atm_vcc *vcc; in dequeue_tx() local
1214 vcc = ATM_SKB(skb)->vcc; in dequeue_tx()
1215 NULLCHECK(vcc); in dequeue_tx()
1216 tx = ENI_VCC(vcc)->tx; in dequeue_tx()
1217 NULLCHECK(ENI_VCC(vcc)->tx); in dequeue_tx()
1220 if (ENI_VCC(vcc)->txing < tx->words && ENI_PRV_POS(skb) == in dequeue_tx()
1225 ENI_VCC(vcc)->txing -= ENI_PRV_SIZE(skb); in dequeue_tx()
1228 if (vcc->pop) vcc->pop(vcc,skb); in dequeue_tx()
1230 atomic_inc(&vcc->stats->tx); in dequeue_tx()
1284 static int reserve_or_set_tx(struct atm_vcc *vcc,struct atm_trafprm *txtp, in reserve_or_set_tx() argument
1287 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in reserve_or_set_tx()
1288 struct eni_vcc *eni_vcc = ENI_VCC(vcc); in reserve_or_set_tx()
1372 static int open_tx_first(struct atm_vcc *vcc) in open_tx_first() argument
1374 ENI_VCC(vcc)->tx = NULL; in open_tx_first()
1375 if (vcc->qos.txtp.traffic_class == ATM_NONE) return 0; in open_tx_first()
1376 ENI_VCC(vcc)->txing = 0; in open_tx_first()
1377 return reserve_or_set_tx(vcc,&vcc->qos.txtp,1,1); in open_tx_first()
1381 static int open_tx_second(struct atm_vcc *vcc) in open_tx_second() argument
1387 static void close_tx(struct atm_vcc *vcc) in close_tx() argument
1393 eni_vcc = ENI_VCC(vcc); in close_tx()
1395 eni_dev = ENI_DEV(vcc->dev); in close_tx()
1890 static void eni_close(struct atm_vcc *vcc) in eni_close() argument
1893 if (!ENI_VCC(vcc)) return; in eni_close()
1894 clear_bit(ATM_VF_READY,&vcc->flags); in eni_close()
1895 close_rx(vcc); in eni_close()
1896 close_tx(vcc); in eni_close()
1899 kfree(ENI_VCC(vcc)); in eni_close()
1900 vcc->dev_data = NULL; in eni_close()
1901 clear_bit(ATM_VF_ADDR,&vcc->flags); in eni_close()
1906 static int eni_open(struct atm_vcc *vcc) in eni_open() argument
1910 short vpi = vcc->vpi; in eni_open()
1911 int vci = vcc->vci; in eni_open()
1915 if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) in eni_open()
1916 vcc->dev_data = NULL; in eni_open()
1918 set_bit(ATM_VF_ADDR,&vcc->flags); in eni_open()
1919 if (vcc->qos.aal != ATM_AAL0 && vcc->qos.aal != ATM_AAL5) in eni_open()
1921 DPRINTK(DEV_LABEL "(itf %d): open %d.%d\n",vcc->dev->number,vcc->vpi, in eni_open()
1922 vcc->vci); in eni_open()
1923 if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) { in eni_open()
1926 vcc->dev_data = eni_vcc; in eni_open()
1928 if ((error = open_rx_first(vcc))) { in eni_open()
1929 eni_close(vcc); in eni_open()
1932 if ((error = open_tx_first(vcc))) { in eni_open()
1933 eni_close(vcc); in eni_open()
1938 if ((error = open_rx_second(vcc))) { in eni_open()
1939 eni_close(vcc); in eni_open()
1942 if ((error = open_tx_second(vcc))) { in eni_open()
1943 eni_close(vcc); in eni_open()
1946 set_bit(ATM_VF_READY,&vcc->flags); in eni_open()
1952 static int eni_change_qos(struct atm_vcc *vcc,struct atm_qos *qos,int flgs) in eni_change_qos() argument
1954 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in eni_change_qos()
1955 struct eni_tx *tx = ENI_VCC(vcc)->tx; in eni_change_qos()
1969 error = reserve_or_set_tx(vcc,&qos->txtp,rsv,shp); in eni_change_qos()
1980 if (ATM_SKB(skb)->vcc != vcc) continue; in eni_change_qos()
2031 static int eni_getsockopt(struct atm_vcc *vcc,int level,int optname, in eni_getsockopt() argument
2038 static int eni_setsockopt(struct atm_vcc *vcc,int level,int optname, in eni_setsockopt() argument
2045 static int eni_send(struct atm_vcc *vcc,struct sk_buff *skb) in eni_send() argument
2050 if (!ENI_VCC(vcc)->tx) { in eni_send()
2051 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2057 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2060 if (vcc->qos.aal == ATM_AAL0) { in eni_send()
2062 if (vcc->pop) vcc->pop(vcc,skb); in eni_send()
2069 ATM_SKB(skb)->vcc = vcc; in eni_send()
2070 tasklet_disable(&ENI_DEV(vcc->dev)->task); in eni_send()
2072 tasklet_enable(&ENI_DEV(vcc->dev)->task); in eni_send()
2074 skb_queue_tail(&ENI_VCC(vcc)->tx->backlog,skb); in eni_send()
2076 tasklet_schedule(&ENI_DEV(vcc->dev)->task); in eni_send()
2099 struct atm_vcc *vcc; in eni_proc_read() local
2177 vcc = atm_sk(s); in eni_proc_read()
2178 if (vcc->dev != dev) in eni_proc_read()
2180 eni_vcc = ENI_VCC(vcc); in eni_proc_read()
2182 length = sprintf(page,"vcc %4d: ",vcc->vci); in eni_proc_read()