Lines Matching refs:eni_dev

159 #define eni_in(r)	readl(eni_dev->reg+(r)*4)
160 #define eni_out(v,r) writel((v),eni_dev->reg+(r)*4)
166 static void dump_mem(struct eni_dev *eni_dev) in dump_mem() argument
170 for (i = 0; i < eni_dev->free_len; i++) in dump_mem()
172 eni_dev->free_list[i].start, in dump_mem()
173 1 << eni_dev->free_list[i].order); in dump_mem()
179 struct eni_dev *eni_dev; in dump() local
183 eni_dev = ENI_DEV(dev); in dump()
185 dump_mem(eni_dev); in dump()
188 if (eni_dev->tx[i].send) in dump()
190 eni_dev->tx[i].send,eni_dev->tx[i].words*4); in dump()
193 if (eni_dev->rx_map[i] && ENI_VCC(eni_dev->rx_map[i])->rx) in dump()
195 ENI_VCC(eni_dev->rx_map[i])->recv, in dump()
196 ENI_VCC(eni_dev->rx_map[i])->words*4); in dump()
201 static void eni_put_free(struct eni_dev *eni_dev, void __iomem *start, in eni_put_free() argument
208 start += eni_dev->base_diff; in eni_put_free()
209 list = eni_dev->free_list; in eni_put_free()
210 len = eni_dev->free_len; in eni_put_free()
212 if (len >= eni_dev->free_list_size) { in eni_put_free()
229 eni_dev->free_len = len; in eni_put_free()
234 static void __iomem *eni_alloc_mem(struct eni_dev *eni_dev, unsigned long *size) in eni_alloc_mem() argument
240 list = eni_dev->free_list; in eni_alloc_mem()
241 len = eni_dev->free_len; in eni_alloc_mem()
259 start = list[index].start-eni_dev->base_diff; in eni_alloc_mem()
261 eni_dev->free_len = len; in eni_alloc_mem()
263 eni_put_free(eni_dev,start+*size,(1 << best_order)-*size); in eni_alloc_mem()
271 static void eni_free_mem(struct eni_dev *eni_dev, void __iomem *start, in eni_free_mem() argument
277 start += eni_dev->base_diff; in eni_free_mem()
278 list = eni_dev->free_list; in eni_free_mem()
279 len = eni_dev->free_len; in eni_free_mem()
293 if (len >= eni_dev->free_list_size) { in eni_free_mem()
300 eni_dev->free_len = len+1; in eni_free_mem()
314 struct eni_dev *eni_dev; in rx_ident_err() local
318 eni_dev = ENI_DEV(dev); in rx_ident_err()
345 struct eni_dev *eni_dev; in do_rx_dma() local
353 eni_dev = ENI_DEV(vcc->dev); in do_rx_dma()
357 paddr = dma_map_single(&eni_dev->pci_dev->dev,skb->data,skb->len, in do_rx_dma()
359 if (dma_mapping_error(&eni_dev->pci_dev->dev, paddr)) in do_rx_dma()
468 writel(dma[i*2],eni_dev->rx_dma+dma_wr*8); in do_rx_dma()
469 writel(dma[i*2+1],eni_dev->rx_dma+dma_wr*8+4); in do_rx_dma()
474 skb_queue_tail(&eni_dev->rx_queue,skb); in do_rx_dma()
484 dma_unmap_single(&eni_dev->pci_dev->dev,paddr,skb->len, in do_rx_dma()
657 struct eni_dev *eni_dev; in poll_rx() local
660 eni_dev = ENI_DEV(dev); in poll_rx()
661 while ((curr = eni_dev->fast)) { in poll_rx()
664 eni_dev->fast = ENI_VCC(curr)->next; in poll_rx()
669 while ((curr = eni_dev->slow)) { in poll_rx()
672 eni_dev->slow = ENI_VCC(curr)->next; in poll_rx()
682 struct eni_dev *eni_dev; in get_service() local
687 eni_dev = ENI_DEV(dev); in get_service()
688 while (eni_in(MID_SERV_WRITE) != eni_dev->serv_read) { in get_service()
689 vci = readl(eni_dev->service+eni_dev->serv_read*4); in get_service()
690 eni_dev->serv_read = (eni_dev->serv_read+1) & (NR_SERVICE-1); in get_service()
691 vcc = eni_dev->rx_map[vci & 1023]; in get_service()
707 if (eni_dev->fast) 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()
713 if (eni_dev->slow) 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()
726 struct eni_dev *eni_dev; in dequeue_rx() local
733 eni_dev = ENI_DEV(dev); in dequeue_rx()
736 skb = skb_dequeue(&eni_dev->rx_queue); in dequeue_rx()
751 vci_dsc = eni_dev->vci+vcc->vci*16; in dequeue_rx()
756 skb_queue_head(&eni_dev->rx_queue,skb); in dequeue_rx()
761 dma_unmap_single(&eni_dev->pci_dev->dev,ENI_PRV_PADDR(skb),skb->len, in dequeue_rx()
775 wake_up(&eni_dev->rx_wait); in dequeue_rx()
781 struct eni_dev *eni_dev; in open_rx_first() local
786 eni_dev = ENI_DEV(vcc->dev); in open_rx_first()
790 size = vcc->qos.rxtp.max_sdu*eni_dev->rx_mult/100; in open_rx_first()
794 eni_vcc->recv = eni_alloc_mem(eni_dev,&size); in open_rx_first()
811 struct eni_dev *eni_dev; in open_rx_second() local
817 eni_dev = ENI_DEV(vcc->dev); in open_rx_second()
821 here = eni_dev->vci+vcc->vci*16; in open_rx_second()
822 DPRINTK("loc 0x%x\n",(unsigned) (eni_vcc->recv-eni_dev->ram)/4); in open_rx_second()
827 if (eni_dev->rx_map[vcc->vci]) in open_rx_second()
830 eni_dev->rx_map[vcc->vci] = vcc; /* now it counts */ in open_rx_second()
833 (((eni_vcc->recv-eni_dev->ram) >> (MID_LOC_SKIP+2)) << in open_rx_second()
843 struct eni_dev *eni_dev; in close_rx() local
848 eni_dev = ENI_DEV(vcc->dev); 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()
863 add_wait_queue(&eni_dev->rx_wait,&wait); in close_rx()
883 tasklet_disable(&eni_dev->task); in close_rx()
884 tmp = readl(eni_dev->vci+vcc->vci*16+4) & MID_VCI_READ; in close_rx()
886 tasklet_enable(&eni_dev->task); in close_rx()
896 remove_wait_queue(&eni_dev->rx_wait,&wait); in close_rx()
898 eni_free_mem(eni_dev,eni_vcc->recv,eni_vcc->words << 2); in close_rx()
905 struct eni_dev *eni_dev; in start_rx() local
907 eni_dev = ENI_DEV(dev); in start_rx()
908 eni_dev->rx_map = (struct atm_vcc **) get_zeroed_page(GFP_KERNEL); in start_rx()
909 if (!eni_dev->rx_map) { in start_rx()
912 free_page((unsigned long) eni_dev->free_list); in start_rx()
915 eni_dev->rx_mult = DEFAULT_RX_MULT; in start_rx()
916 eni_dev->fast = eni_dev->last_fast = NULL; in start_rx()
917 eni_dev->slow = eni_dev->last_slow = NULL; in start_rx()
918 init_waitqueue_head(&eni_dev->rx_wait); in start_rx()
919 skb_queue_head_init(&eni_dev->rx_queue); in start_rx()
920 eni_dev->serv_read = eni_in(MID_SERV_WRITE); in start_rx()
1034 struct eni_dev *eni_dev; in do_tx() local
1047 eni_dev = ENI_DEV(vcc->dev); in do_tx()
1048 NULLCHECK(eni_dev); in do_tx()
1115 paddr = dma_map_single(&eni_dev->pci_dev->dev,skb->data,skb->len, in do_tx()
1120 eni_dev->dma[j++] = (((tx->tx_pos+TX_DESCR_SIZE) & (tx->words-1)) << in do_tx()
1125 if (aal5) put_dma(tx->index,eni_dev->dma,&j,paddr,skb->len); in do_tx()
1126 else put_dma(tx->index,eni_dev->dma,&j,paddr+4,skb->len-4); in do_tx()
1131 put_dma(tx->index,eni_dev->dma,&j,(unsigned long) in do_tx()
1135 put_dma(tx->index,eni_dev->dma,&j,(unsigned long) in do_tx()
1141 put_dma(tx->index, eni_dev->dma, &j, eni_dev->zero.dma, in do_tx()
1145 eni_dev->dma[j++] = (((tx->tx_pos+size) & (tx->words-1)) << in do_tx()
1166 writel(eni_dev->dma[i*2],eni_dev->tx_dma+dma_wr*8); in do_tx()
1167 writel(eni_dev->dma[i*2+1],eni_dev->tx_dma+dma_wr*8+4); in do_tx()
1176 skb_queue_tail(&eni_dev->tx_queue,skb); in do_tx()
1208 struct eni_dev *eni_dev; in dequeue_tx() local
1214 eni_dev = ENI_DEV(dev); in dequeue_tx()
1215 NULLCHECK(eni_dev); in dequeue_tx()
1216 while ((skb = skb_dequeue(&eni_dev->tx_queue))) { in dequeue_tx()
1225 skb_queue_head(&eni_dev->tx_queue,skb); in dequeue_tx()
1229 dma_unmap_single(&eni_dev->pci_dev->dev,ENI_PRV_PADDR(skb),skb->len, in dequeue_tx()
1234 wake_up(&eni_dev->tx_wait); in dequeue_tx()
1240 static struct eni_tx *alloc_tx(struct eni_dev *eni_dev,int ubr) in alloc_tx() argument
1245 if (!eni_dev->tx[i].send) return eni_dev->tx+i; in alloc_tx()
1250 static int comp_tx(struct eni_dev *eni_dev,int *pcr,int reserved,int *pre, in comp_tx() argument
1270 if (!*pcr) *pcr = eni_dev->tx_bw+reserved; in comp_tx()
1290 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in reserve_or_set_tx() local
1304 size = txtp->max_sdu*eni_dev->tx_mult/100; in reserve_or_set_tx()
1310 if (eni_dev->ubr) { in reserve_or_set_tx()
1311 eni_vcc->tx = eni_dev->ubr; in reserve_or_set_tx()
1321 mem = eni_alloc_mem(eni_dev,&size); in reserve_or_set_tx()
1323 tx = alloc_tx(eni_dev,unlimited); in reserve_or_set_tx()
1325 eni_free_mem(eni_dev,mem,size); in reserve_or_set_tx()
1335 ((tx->send-eni_dev->ram) >> (MID_LOC_SKIP+2)), in reserve_or_set_tx()
1340 error = comp_tx(eni_dev,&rate,tx->reserved,&pre,&res,unlimited); in reserve_or_set_tx()
1344 if (!error && !ubr && rate > eni_dev->tx_bw+tx->reserved) in reserve_or_set_tx()
1353 eni_free_mem(eni_dev,mem,size); in reserve_or_set_tx()
1359 eni_dev->tx_bw += tx->reserved; in reserve_or_set_tx()
1361 eni_dev->tx_bw -= rate; in reserve_or_set_tx()
1364 if (unlimited && new_tx) eni_dev->ubr = tx; in reserve_or_set_tx()
1393 struct eni_dev *eni_dev; in close_tx() local
1398 eni_dev = ENI_DEV(vcc->dev); in close_tx()
1401 add_wait_queue(&eni_dev->tx_wait,&wait); in close_tx()
1406 tasklet_disable(&eni_dev->task); in close_tx()
1408 tasklet_enable(&eni_dev->task); in close_tx()
1415 remove_wait_queue(&eni_dev->tx_wait,&wait); in close_tx()
1416 if (eni_vcc->tx != eni_dev->ubr) { in close_tx()
1425 eni_free_mem(eni_dev,eni_vcc->tx->send,eni_vcc->tx->words << 2); in close_tx()
1427 eni_dev->tx_bw += eni_vcc->tx->reserved; in close_tx()
1435 struct eni_dev *eni_dev; in start_tx() local
1438 eni_dev = ENI_DEV(dev); in start_tx()
1439 eni_dev->lost = 0; in start_tx()
1440 eni_dev->tx_bw = ATM_OC3_PCR; in start_tx()
1441 eni_dev->tx_mult = DEFAULT_TX_MULT; in start_tx()
1442 init_waitqueue_head(&eni_dev->tx_wait); in start_tx()
1443 eni_dev->ubr = NULL; in start_tx()
1444 skb_queue_head_init(&eni_dev->tx_queue); in start_tx()
1447 eni_dev->tx[i].send = NULL; in start_tx()
1448 eni_dev->tx[i].index = i; in start_tx()
1493 struct eni_dev *eni_dev; in eni_int() local
1498 eni_dev = ENI_DEV(dev); in eni_int()
1509 eni_dev->lost += eni_in(MID_STAT) & MID_OVFL_TRASH; in eni_int()
1518 spin_lock(&eni_dev->lock); in eni_int()
1519 eni_dev->events |= reason; in eni_int()
1520 spin_unlock(&eni_dev->lock); in eni_int()
1521 tasklet_schedule(&eni_dev->task); in eni_int()
1529 struct eni_dev *eni_dev = ENI_DEV(dev); in eni_tasklet() local
1534 spin_lock_irqsave(&eni_dev->lock,flags); in eni_tasklet()
1535 events = xchg(&eni_dev->events,0); in eni_tasklet()
1536 spin_unlock_irqrestore(&eni_dev->lock,flags); in eni_tasklet()
1559 wake_up(&eni_dev->tx_wait); in eni_tasklet()
1587 pci_error = pci_write_config_byte(eni_dev->pci_dev,PCI_TONGA_CTRL,tonga); \
1592 pci_error = pci_read_config_byte(eni_dev->pci_dev,PCI_TONGA_CTRL,&tonga); \
1599 struct eni_dev *eni_dev; in get_esi_asic() local
1604 eni_dev = ENI_DEV(dev); in get_esi_asic()
1703 struct eni_dev *eni_dev; in eni_do_init() local
1713 eni_dev = ENI_DEV(dev); in eni_do_init()
1714 pci_dev = eni_dev->pci_dev; in eni_do_init()
1716 eni_dev->irq = pci_dev->irq; in eni_do_init()
1719 (eni_dev->asic ? PCI_COMMAND_PARITY | PCI_COMMAND_SERR : 0)))) { in eni_do_init()
1725 dev->number,pci_dev->revision,real_base,eni_dev->irq); in eni_do_init()
1732 eni_dev->ioaddr = base; in eni_do_init()
1733 eni_dev->base_diff = real_base - (unsigned long) base; in eni_do_init()
1735 if (!eni_dev->asic) { in eni_do_init()
1747 eni_dev->phy = base+PHY_BASE; in eni_do_init()
1748 eni_dev->reg = base+REG_BASE; in eni_do_init()
1749 eni_dev->ram = base+RAM_BASE; in eni_do_init()
1752 writel(0x55555555,eni_dev->ram+i); in eni_do_init()
1753 if (readl(eni_dev->ram+i) != 0x55555555) last = i; in eni_do_init()
1755 writel(0xAAAAAAAA,eni_dev->ram+i); in eni_do_init()
1756 if (readl(eni_dev->ram+i) != 0xAAAAAAAA) last = i; in eni_do_init()
1757 else writel(i,eni_dev->ram+i); in eni_do_init()
1761 if (readl(eni_dev->ram+i) != i) break; in eni_do_init()
1762 eni_dev->mem = i; in eni_do_init()
1763 memset_io(eni_dev->ram,0,eni_dev->mem); in eni_do_init()
1765 printk("mem=%dkB (",eni_dev->mem >> 10); in eni_do_init()
1767 if (!(eni_in(MID_RES_ID_MCON) & 0x200) != !eni_dev->asic) { in eni_do_init()
1774 error = eni_dev->asic ? get_esi_asic(dev) : get_esi_fpga(dev,base); in eni_do_init()
1796 struct eni_dev *ed = ENI_DEV(dev); in eni_do_release()
1805 struct eni_dev *eni_dev; in eni_start() local
1812 eni_dev = ENI_DEV(dev); in eni_start()
1813 if (request_irq(eni_dev->irq,&eni_int,IRQF_SHARED,DEV_LABEL,dev)) { in eni_start()
1815 dev->number,eni_dev->irq); in eni_start()
1819 pci_set_master(eni_dev->pci_dev); in eni_start()
1820 if ((error = pci_write_config_word(eni_dev->pci_dev,PCI_COMMAND, in eni_start()
1822 (eni_dev->asic ? PCI_COMMAND_PARITY | PCI_COMMAND_SERR : 0)))) { in eni_start()
1827 if ((error = pci_write_config_byte(eni_dev->pci_dev,PCI_TONGA_CTRL, in eni_start()
1834 eni_dev->vci = eni_dev->ram; in eni_start()
1835 eni_dev->rx_dma = eni_dev->ram+NR_VCI*16; in eni_start()
1836 eni_dev->tx_dma = eni_dev->rx_dma+NR_DMA_RX*8; in eni_start()
1837 eni_dev->service = eni_dev->tx_dma+NR_DMA_TX*8; in eni_start()
1838 buf = eni_dev->service+NR_SERVICE*4; in eni_start()
1840 eni_dev->vci,eni_dev->rx_dma,eni_dev->tx_dma, in eni_start()
1841 eni_dev->service,buf); in eni_start()
1842 spin_lock_init(&eni_dev->lock); in eni_start()
1843 tasklet_init(&eni_dev->task,eni_tasklet,(unsigned long) dev); in eni_start()
1844 eni_dev->events = 0; in eni_start()
1846 buffer_mem = eni_dev->mem - (buf - eni_dev->ram); in eni_start()
1847 eni_dev->free_list_size = buffer_mem/MID_MIN_BUF_SIZE/2; in eni_start()
1848 eni_dev->free_list = kmalloc( in eni_start()
1849 sizeof(struct eni_free)*(eni_dev->free_list_size+1),GFP_KERNEL); in eni_start()
1850 if (!eni_dev->free_list) { in eni_start()
1856 eni_dev->free_len = 0; in eni_start()
1857 eni_put_free(eni_dev,buf,buffer_mem); in eni_start()
1858 memset_io(eni_dev->vci,0,16*NR_VCI); /* clear VCI table */ in eni_start()
1883 kfree(eni_dev->free_list); in eni_start()
1886 free_irq(eni_dev->irq, dev); in eni_start()
1957 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in eni_change_qos() local
1963 if (tx == eni_dev->ubr) return -EBADFD; in eni_change_qos()
1979 tasklet_disable(&eni_dev->task); in eni_change_qos()
1980 skb_queue_walk(&eni_dev->tx_queue, skb) { in eni_change_qos()
1989 tasklet_enable(&eni_dev->task); in eni_change_qos()
1996 struct eni_dev *eni_dev = ENI_DEV(dev); in eni_ioctl() local
2015 if (mult.tx) eni_dev->tx_mult = mult.tx; in eni_ioctl()
2016 if (mult.rx) eni_dev->rx_mult = mult.rx; in eni_ioctl()
2101 struct eni_dev *eni_dev = ENI_DEV(dev); in eni_proc_read() local
2109 eni_dev->mem >> 10,eni_dev->tx_bw); in eni_proc_read()
2155 "",eni_dev->tx_mult,eni_dev->rx_mult); in eni_proc_read()
2157 struct eni_tx *tx = eni_dev->tx+i; in eni_proc_read()
2163 (unsigned long) (tx->send - eni_dev->ram), in eni_proc_read()
2164 tx->send-eni_dev->ram+tx->words*4-1,tx->words*4, in eni_proc_read()
2166 tx == eni_dev->ubr ? " (UBR)" : ""); in eni_proc_read()
2189 (unsigned long) (eni_vcc->recv - eni_dev->ram), in eni_proc_read()
2190 eni_vcc->recv-eni_dev->ram+eni_vcc->words*4-1, in eni_proc_read()
2203 for (i = 0; i < eni_dev->free_len; i++) { in eni_proc_read()
2204 struct eni_free *fe = eni_dev->free_list+i; in eni_proc_read()
2208 offset = (unsigned long) eni_dev->ram+eni_dev->base_diff; in eni_proc_read()
2235 struct eni_dev *eni_dev; in eni_init_one() local
2248 eni_dev = kmalloc(sizeof(struct eni_dev), GFP_KERNEL); in eni_init_one()
2249 if (!eni_dev) in eni_init_one()
2252 zero = &eni_dev->zero; in eni_init_one()
2262 dev->dev_data = eni_dev; in eni_init_one()
2264 eni_dev->pci_dev = pci_dev; in eni_init_one()
2265 eni_dev->asic = ent->driver_data; in eni_init_one()
2275 eni_dev->more = eni_boards; in eni_init_one()
2287 kfree(eni_dev); in eni_init_one()
2305 struct eni_dev *ed = ENI_DEV(dev); in eni_remove_one()