Lines Matching refs:vcc

307 static void rx_ident_err(struct atm_vcc *vcc)
313 dev = vcc->dev;
319 eni_vcc = ENI_VCC(vcc);
322 printk(KERN_ALERT " VCI %d, rxing %d, words %ld\n",vcc->vci,
338 static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb,
349 eni_dev = ENI_DEV(vcc->dev);
350 eni_vcc = ENI_VCC(vcc);
360 "mis-aligned RX data (0x%lx)\n",vcc->dev->number,
361 vcc->vci,(unsigned long) paddr);
364 ATM_SKB(skb)->vcc = vcc;
369 dma[j++] = (here << MID_DMA_COUNT_SHIFT) | (vcc->vci
390 (vcc->vci << MID_DMA_VCI_SHIFT);
398 MID_DMA_COUNT_SHIFT) | (vcc->vci <<
408 MID_DMA_COUNT_SHIFT) | (vcc->vci <<
418 MID_DMA_COUNT_SHIFT) | (vcc->vci <<
428 MID_DMA_COUNT_SHIFT) | (vcc->vci <<
437 | (vcc->vci << MID_DMA_VCI_SHIFT);
443 (vcc->vci << MID_DMA_VCI_SHIFT) | MID_DT_JK;
460 vcc->dev->number);
488 static void discard(struct atm_vcc *vcc,unsigned long size)
492 eni_vcc = ENI_VCC(vcc);
494 while (do_rx_dma(vcc,NULL,1,size,0)) EVENT("BUSY LOOP",0,0);
506 static int rx_aal0(struct atm_vcc *vcc)
514 eni_vcc = ENI_VCC(vcc);
517 rx_ident_err(vcc);
522 vcc->dev->number);
524 atomic_inc(&vcc->stats->rx_err);
529 skb = length ? atm_alloc_charge(vcc,length,GFP_ATOMIC) : NULL;
531 discard(vcc,length >> 2);
537 if (do_rx_dma(vcc,skb,1,length >> 2,length >> 2)) return 1;
543 static int rx_aal5(struct atm_vcc *vcc)
552 eni_vcc = ENI_VCC(vcc);
555 rx_ident_err(vcc);
562 vcc->dev->number);
571 vcc->dev->number);
579 atomic_inc(&vcc->stats->rx_err);
594 vcc->dev->number,vcc->vci,length,size << 2,descr);
596 atomic_inc(&vcc->stats->rx_err);
599 skb = eff ? atm_alloc_charge(vcc,eff << 2,GFP_ATOMIC) : NULL;
601 discard(vcc,size);
606 if (do_rx_dma(vcc,skb,1,size,eff)) return 1;
612 static inline int rx_vcc(struct atm_vcc *vcc)
618 eni_vcc = ENI_VCC(vcc);
619 vci_dsc = ENI_DEV(vcc->dev)->vci+vcc->vci*16;
625 DPRINTK("CB_DESCR %ld REG_DESCR %d\n",ENI_VCC(vcc)->descr,
628 if (ENI_VCC(vcc)->rx(vcc)) return 1;
638 while (ENI_VCC(vcc)->descr != (tmp = (readl(vci_dsc+4) & MID_VCI_DESCR)
642 DPRINTK("CB_DESCR %ld REG_DESCR %d\n",ENI_VCC(vcc)->descr,
645 if (ENI_VCC(vcc)->rx(vcc)) return 1;
679 struct atm_vcc *vcc;
687 vcc = eni_dev->rx_map[vci & 1023];
688 if (!vcc) {
695 if (ENI_VCC(vcc)->next != ENI_VCC_NOS) {
700 ENI_VCC(vcc)->timestamp = ktime_get_real();
701 ENI_VCC(vcc)->next = NULL;
702 if (vcc->qos.rxtp.traffic_class == ATM_CBR) {
704 ENI_VCC(eni_dev->last_fast)->next = vcc;
705 else eni_dev->fast = vcc;
706 eni_dev->last_fast = vcc;
710 ENI_VCC(eni_dev->last_slow)->next = vcc;
711 else eni_dev->slow = vcc;
712 eni_dev->last_slow = vcc;
715 ENI_VCC(vcc)->servicing++;
724 struct atm_vcc *vcc;
744 vcc = ATM_SKB(skb)->vcc;
745 eni_vcc = ENI_VCC(vcc);
747 vci_dsc = eni_dev->vci+vcc->vci*16;
762 if (vcc->qos.aal == ATM_AAL0)
766 vcc->push(vcc,skb);
769 atomic_inc(&vcc->stats->rx);
775 static int open_rx_first(struct atm_vcc *vcc)
782 eni_dev = ENI_DEV(vcc->dev);
783 eni_vcc = ENI_VCC(vcc);
785 if (vcc->qos.rxtp.traffic_class == ATM_NONE) return 0;
786 size = vcc->qos.rxtp.max_sdu*eni_dev->rx_mult/100;
787 if (size > MID_MAX_BUF_SIZE && vcc->qos.rxtp.max_sdu <=
794 eni_vcc->rx = vcc->qos.aal == ATM_AAL5 ? rx_aal5 : rx_aal0;
804 static int open_rx_second(struct atm_vcc *vcc)
813 eni_dev = ENI_DEV(vcc->dev);
814 eni_vcc = ENI_VCC(vcc);
817 here = eni_dev->vci+vcc->vci*16;
823 if (eni_dev->rx_map[vcc->vci])
825 "in use\n",vcc->dev->number,vcc->vci);
826 eni_dev->rx_map[vcc->vci] = vcc; /* now it counts */
827 writel(((vcc->qos.aal != ATM_AAL5 ? MID_MODE_RAW : MID_MODE_AAL5) <<
835 static void close_rx(struct atm_vcc *vcc)
842 eni_vcc = ENI_VCC(vcc);
844 eni_dev = ENI_DEV(vcc->dev);
845 if (vcc->vpi != ATM_VPI_UNSPEC && vcc->vci != ATM_VCI_UNSPEC) {
846 here = eni_dev->vci+vcc->vci*16;
855 eni_dev->rx_map[vcc->vci] = NULL;
880 tmp = readl(eni_dev->vci+vcc->vci*16+4) & MID_VCI_READ;
1029 struct atm_vcc *vcc;
1042 vcc = ATM_SKB(skb)->vcc;
1043 NULLCHECK(vcc);
1044 eni_dev = ENI_DEV(vcc->dev);
1046 eni_vcc = ENI_VCC(vcc);
1062 "TX data\n",vcc->dev->number,vcc->vci);
1070 aal5 = vcc->qos.aal == ATM_AAL5;
1090 vcc->dev->number,size);
1103 "(got only %d)\n",vcc->dev->number,dma_size,TX_DMA_BUF);
1109 vcc->dev->number);
1156 writel((vcc->vci << MID_SEG_VCI_SHIFT) |
1172 ENI_VCC(vcc)->txing += size;
1209 struct atm_vcc *vcc;
1217 vcc = ATM_SKB(skb)->vcc;
1218 NULLCHECK(vcc);
1219 tx = ENI_VCC(vcc)->tx;
1220 NULLCHECK(ENI_VCC(vcc)->tx);
1223 if (ENI_VCC(vcc)->txing < tx->words && ENI_PRV_POS(skb) ==
1228 ENI_VCC(vcc)->txing -= ENI_PRV_SIZE(skb);
1231 if (vcc->pop) vcc->pop(vcc,skb);
1233 atomic_inc(&vcc->stats->tx);
1287 static int reserve_or_set_tx(struct atm_vcc *vcc,struct atm_trafprm *txtp,
1290 struct eni_dev *eni_dev = ENI_DEV(vcc->dev);
1291 struct eni_vcc *eni_vcc = ENI_VCC(vcc);
1375 static int open_tx_first(struct atm_vcc *vcc)
1377 ENI_VCC(vcc)->tx = NULL;
1378 if (vcc->qos.txtp.traffic_class == ATM_NONE) return 0;
1379 ENI_VCC(vcc)->txing = 0;
1380 return reserve_or_set_tx(vcc,&vcc->qos.txtp,1,1);
1384 static int open_tx_second(struct atm_vcc *vcc)
1390 static void close_tx(struct atm_vcc *vcc)
1396 eni_vcc = ENI_VCC(vcc);
1398 eni_dev = ENI_DEV(vcc->dev);
1894 static void eni_close(struct atm_vcc *vcc)
1897 if (!ENI_VCC(vcc)) return;
1898 clear_bit(ATM_VF_READY,&vcc->flags);
1899 close_rx(vcc);
1900 close_tx(vcc);
1903 kfree(ENI_VCC(vcc));
1904 vcc->dev_data = NULL;
1905 clear_bit(ATM_VF_ADDR,&vcc->flags);
1910 static int eni_open(struct atm_vcc *vcc)
1914 short vpi = vcc->vpi;
1915 int vci = vcc->vci;
1919 if (!test_bit(ATM_VF_PARTIAL,&vcc->flags))
1920 vcc->dev_data = NULL;
1922 set_bit(ATM_VF_ADDR,&vcc->flags);
1923 if (vcc->qos.aal != ATM_AAL0 && vcc->qos.aal != ATM_AAL5)
1925 DPRINTK(DEV_LABEL "(itf %d): open %d.%d\n",vcc->dev->number,vcc->vpi,
1926 vcc->vci);
1927 if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) {
1930 vcc->dev_data = eni_vcc;
1932 if ((error = open_rx_first(vcc))) {
1933 eni_close(vcc);
1936 if ((error = open_tx_first(vcc))) {
1937 eni_close(vcc);
1942 if ((error = open_rx_second(vcc))) {
1943 eni_close(vcc);
1946 if ((error = open_tx_second(vcc))) {
1947 eni_close(vcc);
1950 set_bit(ATM_VF_READY,&vcc->flags);
1956 static int eni_change_qos(struct atm_vcc *vcc,struct atm_qos *qos,int flgs)
1958 struct eni_dev *eni_dev = ENI_DEV(vcc->dev);
1959 struct eni_tx *tx = ENI_VCC(vcc)->tx;
1973 error = reserve_or_set_tx(vcc,&qos->txtp,rsv,shp);
1984 if (ATM_SKB(skb)->vcc != vcc) continue;
2034 static int eni_send(struct atm_vcc *vcc,struct sk_buff *skb)
2039 if (!ENI_VCC(vcc)->tx) {
2040 if (vcc->pop) vcc->pop(vcc,skb);
2046 if (vcc->pop) vcc->pop(vcc,skb);
2049 if (vcc->qos.aal == ATM_AAL0) {
2051 if (vcc->pop) vcc->pop(vcc,skb);
2058 ATM_SKB(skb)->vcc = vcc;
2059 tasklet_disable_in_atomic(&ENI_DEV(vcc->dev)->task);
2061 tasklet_enable(&ENI_DEV(vcc->dev)->task);
2063 skb_queue_tail(&ENI_VCC(vcc)->tx->backlog,skb);
2065 tasklet_schedule(&ENI_DEV(vcc->dev)->task);
2088 struct atm_vcc *vcc;
2166 vcc = atm_sk(s);
2167 if (vcc->dev != dev)
2169 eni_vcc = ENI_VCC(vcc);
2171 length = sprintf(page,"vcc %4d: ",vcc->vci);