Lines Matching refs:eni_dev
154 #define eni_in(r) readl(eni_dev->reg+(r)*4)
155 #define eni_out(v,r) writel((v),eni_dev->reg+(r)*4)
161 static void dump_mem(struct eni_dev *eni_dev) in dump_mem() argument
165 for (i = 0; i < eni_dev->free_len; i++) in dump_mem()
167 eni_dev->free_list[i].start, in dump_mem()
168 1 << eni_dev->free_list[i].order); in dump_mem()
174 struct eni_dev *eni_dev; in dump() local
178 eni_dev = ENI_DEV(dev); in dump()
180 dump_mem(eni_dev); in dump()
183 if (eni_dev->tx[i].send) in dump()
185 eni_dev->tx[i].send,eni_dev->tx[i].words*4); in dump()
188 if (eni_dev->rx_map[i] && ENI_VCC(eni_dev->rx_map[i])->rx) in dump()
190 ENI_VCC(eni_dev->rx_map[i])->recv, in dump()
191 ENI_VCC(eni_dev->rx_map[i])->words*4); in dump()
196 static void eni_put_free(struct eni_dev *eni_dev, void __iomem *start, in eni_put_free() argument
203 start += eni_dev->base_diff; in eni_put_free()
204 list = eni_dev->free_list; in eni_put_free()
205 len = eni_dev->free_len; in eni_put_free()
207 if (len >= eni_dev->free_list_size) { in eni_put_free()
224 eni_dev->free_len = len; in eni_put_free()
229 static void __iomem *eni_alloc_mem(struct eni_dev *eni_dev, unsigned long *size) in eni_alloc_mem() argument
235 list = eni_dev->free_list; in eni_alloc_mem()
236 len = eni_dev->free_len; in eni_alloc_mem()
255 start = list[index].start-eni_dev->base_diff; in eni_alloc_mem()
257 eni_dev->free_len = len; in eni_alloc_mem()
259 eni_put_free(eni_dev,start+*size,(1 << best_order)-*size); in eni_alloc_mem()
267 static void eni_free_mem(struct eni_dev *eni_dev, void __iomem *start, in eni_free_mem() argument
273 start += eni_dev->base_diff; in eni_free_mem()
274 list = eni_dev->free_list; in eni_free_mem()
275 len = eni_dev->free_len; in eni_free_mem()
289 if (len >= eni_dev->free_list_size) { in eni_free_mem()
296 eni_dev->free_len = len+1; in eni_free_mem()
310 struct eni_dev *eni_dev; in rx_ident_err() local
314 eni_dev = ENI_DEV(dev); in rx_ident_err()
341 struct eni_dev *eni_dev; in do_rx_dma() local
349 eni_dev = ENI_DEV(vcc->dev); in do_rx_dma()
353 paddr = dma_map_single(&eni_dev->pci_dev->dev,skb->data,skb->len, in do_rx_dma()
355 if (dma_mapping_error(&eni_dev->pci_dev->dev, paddr)) in do_rx_dma()
464 writel(dma[i*2],eni_dev->rx_dma+dma_wr*8); in do_rx_dma()
465 writel(dma[i*2+1],eni_dev->rx_dma+dma_wr*8+4); in do_rx_dma()
470 skb_queue_tail(&eni_dev->rx_queue,skb); in do_rx_dma()
480 dma_unmap_single(&eni_dev->pci_dev->dev,paddr,skb->len, in do_rx_dma()
653 struct eni_dev *eni_dev; in poll_rx() local
656 eni_dev = ENI_DEV(dev); in poll_rx()
657 while ((curr = eni_dev->fast)) { in poll_rx()
660 eni_dev->fast = ENI_VCC(curr)->next; in poll_rx()
665 while ((curr = eni_dev->slow)) { in poll_rx()
668 eni_dev->slow = ENI_VCC(curr)->next; in poll_rx()
678 struct eni_dev *eni_dev; in get_service() local
683 eni_dev = ENI_DEV(dev); in get_service()
684 while (eni_in(MID_SERV_WRITE) != eni_dev->serv_read) { in get_service()
685 vci = readl(eni_dev->service+eni_dev->serv_read*4); in get_service()
686 eni_dev->serv_read = (eni_dev->serv_read+1) & (NR_SERVICE-1); in get_service()
687 vcc = eni_dev->rx_map[vci & 1023]; in get_service()
703 if (eni_dev->fast) in get_service()
704 ENI_VCC(eni_dev->last_fast)->next = vcc; in get_service()
705 else eni_dev->fast = vcc; in get_service()
706 eni_dev->last_fast = vcc; in get_service()
709 if (eni_dev->slow) in get_service()
710 ENI_VCC(eni_dev->last_slow)->next = vcc; in get_service()
711 else eni_dev->slow = vcc; in get_service()
712 eni_dev->last_slow = vcc; in get_service()
722 struct eni_dev *eni_dev; in dequeue_rx() local
729 eni_dev = ENI_DEV(dev); in dequeue_rx()
732 skb = skb_dequeue(&eni_dev->rx_queue); in dequeue_rx()
747 vci_dsc = eni_dev->vci+vcc->vci*16; in dequeue_rx()
752 skb_queue_head(&eni_dev->rx_queue,skb); in dequeue_rx()
757 dma_unmap_single(&eni_dev->pci_dev->dev,ENI_PRV_PADDR(skb),skb->len, in dequeue_rx()
771 wake_up(&eni_dev->rx_wait); in dequeue_rx()
777 struct eni_dev *eni_dev; in open_rx_first() local
782 eni_dev = ENI_DEV(vcc->dev); in open_rx_first()
786 size = vcc->qos.rxtp.max_sdu*eni_dev->rx_mult/100; in open_rx_first()
790 eni_vcc->recv = eni_alloc_mem(eni_dev,&size); in open_rx_first()
807 struct eni_dev *eni_dev; in open_rx_second() local
813 eni_dev = ENI_DEV(vcc->dev); in open_rx_second()
817 here = eni_dev->vci+vcc->vci*16; in open_rx_second()
818 DPRINTK("loc 0x%x\n",(unsigned) (eni_vcc->recv-eni_dev->ram)/4); in open_rx_second()
823 if (eni_dev->rx_map[vcc->vci]) in open_rx_second()
826 eni_dev->rx_map[vcc->vci] = vcc; /* now it counts */ in open_rx_second()
829 (((eni_vcc->recv-eni_dev->ram) >> (MID_LOC_SKIP+2)) << in open_rx_second()
839 struct eni_dev *eni_dev; in close_rx() local
844 eni_dev = ENI_DEV(vcc->dev); in close_rx()
846 here = eni_dev->vci+vcc->vci*16; in close_rx()
855 eni_dev->rx_map[vcc->vci] = NULL; in close_rx()
859 add_wait_queue(&eni_dev->rx_wait,&wait); in close_rx()
879 tasklet_disable(&eni_dev->task); in close_rx()
880 tmp = readl(eni_dev->vci+vcc->vci*16+4) & MID_VCI_READ; in close_rx()
882 tasklet_enable(&eni_dev->task); in close_rx()
892 remove_wait_queue(&eni_dev->rx_wait,&wait); in close_rx()
894 eni_free_mem(eni_dev,eni_vcc->recv,eni_vcc->words << 2); in close_rx()
901 struct eni_dev *eni_dev; in start_rx() local
903 eni_dev = ENI_DEV(dev); in start_rx()
904 eni_dev->rx_map = (struct atm_vcc **) get_zeroed_page(GFP_KERNEL); in start_rx()
905 if (!eni_dev->rx_map) { in start_rx()
908 free_page((unsigned long) eni_dev->free_list); in start_rx()
911 eni_dev->rx_mult = DEFAULT_RX_MULT; in start_rx()
912 eni_dev->fast = eni_dev->last_fast = NULL; in start_rx()
913 eni_dev->slow = eni_dev->last_slow = NULL; in start_rx()
914 init_waitqueue_head(&eni_dev->rx_wait); in start_rx()
915 skb_queue_head_init(&eni_dev->rx_queue); in start_rx()
916 eni_dev->serv_read = eni_in(MID_SERV_WRITE); in start_rx()
1030 struct eni_dev *eni_dev; in do_tx() local
1044 eni_dev = ENI_DEV(vcc->dev); in do_tx()
1045 NULLCHECK(eni_dev); in do_tx()
1113 paddr = dma_map_single(&eni_dev->pci_dev->dev,skb->data,skb->len, in do_tx()
1118 eni_dev->dma[j++] = (((tx->tx_pos+TX_DESCR_SIZE) & (tx->words-1)) << in do_tx()
1123 if (aal5) put_dma(tx->index,eni_dev->dma,&j,paddr,skb->len); in do_tx()
1124 else put_dma(tx->index,eni_dev->dma,&j,paddr+4,skb->len-4); in do_tx()
1129 put_dma(tx->index,eni_dev->dma,&j,(unsigned long) in do_tx()
1133 put_dma(tx->index,eni_dev->dma,&j,(unsigned long) in do_tx()
1139 put_dma(tx->index, eni_dev->dma, &j, eni_dev->zero.dma, in do_tx()
1143 eni_dev->dma[j++] = (((tx->tx_pos+size) & (tx->words-1)) << in do_tx()
1164 writel(eni_dev->dma[i*2],eni_dev->tx_dma+dma_wr*8); in do_tx()
1165 writel(eni_dev->dma[i*2+1],eni_dev->tx_dma+dma_wr*8+4); in do_tx()
1174 skb_queue_tail(&eni_dev->tx_queue,skb); in do_tx()
1206 struct eni_dev *eni_dev; in dequeue_tx() local
1212 eni_dev = ENI_DEV(dev); in dequeue_tx()
1213 NULLCHECK(eni_dev); in dequeue_tx()
1214 while ((skb = skb_dequeue(&eni_dev->tx_queue))) { in dequeue_tx()
1223 skb_queue_head(&eni_dev->tx_queue,skb); in dequeue_tx()
1227 dma_unmap_single(&eni_dev->pci_dev->dev,ENI_PRV_PADDR(skb),skb->len, in dequeue_tx()
1232 wake_up(&eni_dev->tx_wait); in dequeue_tx()
1238 static struct eni_tx *alloc_tx(struct eni_dev *eni_dev,int ubr) in alloc_tx() argument
1243 if (!eni_dev->tx[i].send) return eni_dev->tx+i; in alloc_tx()
1248 static int comp_tx(struct eni_dev *eni_dev,int *pcr,int reserved,int *pre, in comp_tx() argument
1268 if (!*pcr) *pcr = eni_dev->tx_bw+reserved; in comp_tx()
1288 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in reserve_or_set_tx() local
1302 size = txtp->max_sdu*eni_dev->tx_mult/100; in reserve_or_set_tx()
1308 if (eni_dev->ubr) { in reserve_or_set_tx()
1309 eni_vcc->tx = eni_dev->ubr; in reserve_or_set_tx()
1319 mem = eni_alloc_mem(eni_dev,&size); in reserve_or_set_tx()
1321 tx = alloc_tx(eni_dev,unlimited); in reserve_or_set_tx()
1323 eni_free_mem(eni_dev,mem,size); in reserve_or_set_tx()
1333 ((tx->send-eni_dev->ram) >> (MID_LOC_SKIP+2)), in reserve_or_set_tx()
1338 error = comp_tx(eni_dev,&rate,tx->reserved,&pre,&res,unlimited); in reserve_or_set_tx()
1342 if (!error && !ubr && rate > eni_dev->tx_bw+tx->reserved) in reserve_or_set_tx()
1351 eni_free_mem(eni_dev,mem,size); in reserve_or_set_tx()
1357 eni_dev->tx_bw += tx->reserved; in reserve_or_set_tx()
1359 eni_dev->tx_bw -= rate; in reserve_or_set_tx()
1362 if (unlimited && new_tx) eni_dev->ubr = tx; in reserve_or_set_tx()
1391 struct eni_dev *eni_dev; in close_tx() local
1396 eni_dev = ENI_DEV(vcc->dev); in close_tx()
1399 add_wait_queue(&eni_dev->tx_wait,&wait); in close_tx()
1404 tasklet_disable(&eni_dev->task); in close_tx()
1406 tasklet_enable(&eni_dev->task); in close_tx()
1413 remove_wait_queue(&eni_dev->tx_wait,&wait); in close_tx()
1414 if (eni_vcc->tx != eni_dev->ubr) { in close_tx()
1423 eni_free_mem(eni_dev,eni_vcc->tx->send,eni_vcc->tx->words << 2); in close_tx()
1425 eni_dev->tx_bw += eni_vcc->tx->reserved; in close_tx()
1433 struct eni_dev *eni_dev; in start_tx() local
1436 eni_dev = ENI_DEV(dev); in start_tx()
1437 eni_dev->lost = 0; in start_tx()
1438 eni_dev->tx_bw = ATM_OC3_PCR; in start_tx()
1439 eni_dev->tx_mult = DEFAULT_TX_MULT; in start_tx()
1440 init_waitqueue_head(&eni_dev->tx_wait); in start_tx()
1441 eni_dev->ubr = NULL; in start_tx()
1442 skb_queue_head_init(&eni_dev->tx_queue); in start_tx()
1445 eni_dev->tx[i].send = NULL; in start_tx()
1446 eni_dev->tx[i].index = i; in start_tx()
1491 struct eni_dev *eni_dev; in eni_int() local
1496 eni_dev = ENI_DEV(dev); in eni_int()
1507 eni_dev->lost += eni_in(MID_STAT) & MID_OVFL_TRASH; in eni_int()
1516 spin_lock(&eni_dev->lock); in eni_int()
1517 eni_dev->events |= reason; in eni_int()
1518 spin_unlock(&eni_dev->lock); in eni_int()
1519 tasklet_schedule(&eni_dev->task); in eni_int()
1527 struct eni_dev *eni_dev = ENI_DEV(dev); in eni_tasklet() local
1532 spin_lock_irqsave(&eni_dev->lock,flags); in eni_tasklet()
1533 events = xchg(&eni_dev->events,0); in eni_tasklet()
1534 spin_unlock_irqrestore(&eni_dev->lock,flags); in eni_tasklet()
1557 wake_up(&eni_dev->tx_wait); in eni_tasklet()
1585 pci_error = pci_write_config_byte(eni_dev->pci_dev,PCI_TONGA_CTRL,tonga); \
1590 pci_error = pci_read_config_byte(eni_dev->pci_dev,PCI_TONGA_CTRL,&tonga); \
1597 struct eni_dev *eni_dev; in get_esi_asic() local
1602 eni_dev = ENI_DEV(dev); in get_esi_asic()
1701 struct eni_dev *eni_dev; in eni_do_init() local
1711 eni_dev = ENI_DEV(dev); in eni_do_init()
1712 pci_dev = eni_dev->pci_dev; in eni_do_init()
1714 eni_dev->irq = pci_dev->irq; in eni_do_init()
1717 (eni_dev->asic ? PCI_COMMAND_PARITY | PCI_COMMAND_SERR : 0)))) { in eni_do_init()
1723 dev->number,pci_dev->revision,real_base,eni_dev->irq); in eni_do_init()
1730 eni_dev->ioaddr = base; in eni_do_init()
1731 eni_dev->base_diff = real_base - (unsigned long) base; in eni_do_init()
1733 if (!eni_dev->asic) { in eni_do_init()
1745 eni_dev->phy = base+PHY_BASE; in eni_do_init()
1746 eni_dev->reg = base+REG_BASE; in eni_do_init()
1747 eni_dev->ram = base+RAM_BASE; in eni_do_init()
1750 writel(0x55555555,eni_dev->ram+i); in eni_do_init()
1751 if (readl(eni_dev->ram+i) != 0x55555555) last = i; in eni_do_init()
1753 writel(0xAAAAAAAA,eni_dev->ram+i); in eni_do_init()
1754 if (readl(eni_dev->ram+i) != 0xAAAAAAAA) last = i; in eni_do_init()
1755 else writel(i,eni_dev->ram+i); in eni_do_init()
1759 if (readl(eni_dev->ram+i) != i) break; in eni_do_init()
1760 eni_dev->mem = i; in eni_do_init()
1761 memset_io(eni_dev->ram,0,eni_dev->mem); in eni_do_init()
1763 printk("mem=%dkB (",eni_dev->mem >> 10); in eni_do_init()
1765 if (!(eni_in(MID_RES_ID_MCON) & 0x200) != !eni_dev->asic) { in eni_do_init()
1772 error = eni_dev->asic ? get_esi_asic(dev) : get_esi_fpga(dev,base); in eni_do_init()
1794 struct eni_dev *ed = ENI_DEV(dev); in eni_do_release()
1803 struct eni_dev *eni_dev; in eni_start() local
1810 eni_dev = ENI_DEV(dev); in eni_start()
1811 if (request_irq(eni_dev->irq,&eni_int,IRQF_SHARED,DEV_LABEL,dev)) { in eni_start()
1813 dev->number,eni_dev->irq); in eni_start()
1817 pci_set_master(eni_dev->pci_dev); in eni_start()
1818 if ((error = pci_write_config_word(eni_dev->pci_dev,PCI_COMMAND, in eni_start()
1820 (eni_dev->asic ? PCI_COMMAND_PARITY | PCI_COMMAND_SERR : 0)))) { in eni_start()
1825 if ((error = pci_write_config_byte(eni_dev->pci_dev,PCI_TONGA_CTRL, in eni_start()
1832 eni_dev->vci = eni_dev->ram; in eni_start()
1833 eni_dev->rx_dma = eni_dev->ram+NR_VCI*16; in eni_start()
1834 eni_dev->tx_dma = eni_dev->rx_dma+NR_DMA_RX*8; in eni_start()
1835 eni_dev->service = eni_dev->tx_dma+NR_DMA_TX*8; in eni_start()
1836 buf = eni_dev->service+NR_SERVICE*4; in eni_start()
1838 eni_dev->vci,eni_dev->rx_dma,eni_dev->tx_dma, in eni_start()
1839 eni_dev->service,buf); in eni_start()
1840 spin_lock_init(&eni_dev->lock); in eni_start()
1841 tasklet_init(&eni_dev->task,eni_tasklet,(unsigned long) dev); in eni_start()
1842 eni_dev->events = 0; in eni_start()
1844 buffer_mem = eni_dev->mem - (buf - eni_dev->ram); in eni_start()
1845 eni_dev->free_list_size = buffer_mem/MID_MIN_BUF_SIZE/2; in eni_start()
1846 eni_dev->free_list = kmalloc_array(eni_dev->free_list_size + 1, in eni_start()
1847 sizeof(*eni_dev->free_list), in eni_start()
1849 if (!eni_dev->free_list) { in eni_start()
1855 eni_dev->free_len = 0; in eni_start()
1856 eni_put_free(eni_dev,buf,buffer_mem); in eni_start()
1857 memset_io(eni_dev->vci,0,16*NR_VCI); /* clear VCI table */ in eni_start()
1882 kfree(eni_dev->free_list); in eni_start()
1885 free_irq(eni_dev->irq, dev); in eni_start()
1956 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in eni_change_qos() local
1962 if (tx == eni_dev->ubr) return -EBADFD; in eni_change_qos()
1978 tasklet_disable(&eni_dev->task); in eni_change_qos()
1979 skb_queue_walk(&eni_dev->tx_queue, skb) { in eni_change_qos()
1988 tasklet_enable(&eni_dev->task); in eni_change_qos()
1995 struct eni_dev *eni_dev = ENI_DEV(dev); in eni_ioctl() local
2014 if (mult.tx) eni_dev->tx_mult = mult.tx; in eni_ioctl()
2015 if (mult.rx) eni_dev->rx_mult = mult.rx; in eni_ioctl()
2085 struct eni_dev *eni_dev = ENI_DEV(dev); in eni_proc_read() local
2093 eni_dev->mem >> 10,eni_dev->tx_bw); in eni_proc_read()
2139 "",eni_dev->tx_mult,eni_dev->rx_mult); in eni_proc_read()
2141 struct eni_tx *tx = eni_dev->tx+i; in eni_proc_read()
2147 (unsigned long) (tx->send - eni_dev->ram), in eni_proc_read()
2148 tx->send-eni_dev->ram+tx->words*4-1,tx->words*4, in eni_proc_read()
2150 tx == eni_dev->ubr ? " (UBR)" : ""); in eni_proc_read()
2173 (unsigned long) (eni_vcc->recv - eni_dev->ram), in eni_proc_read()
2174 eni_vcc->recv-eni_dev->ram+eni_vcc->words*4-1, in eni_proc_read()
2187 for (i = 0; i < eni_dev->free_len; i++) { in eni_proc_read()
2188 struct eni_free *fe = eni_dev->free_list+i; in eni_proc_read()
2192 offset = (unsigned long) eni_dev->ram+eni_dev->base_diff; in eni_proc_read()
2217 struct eni_dev *eni_dev; in eni_init_one() local
2230 eni_dev = kmalloc(sizeof(struct eni_dev), GFP_KERNEL); in eni_init_one()
2231 if (!eni_dev) in eni_init_one()
2234 zero = &eni_dev->zero; in eni_init_one()
2244 dev->dev_data = eni_dev; in eni_init_one()
2246 eni_dev->pci_dev = pci_dev; in eni_init_one()
2247 eni_dev->asic = ent->driver_data; in eni_init_one()
2257 eni_dev->more = eni_boards; in eni_init_one()
2269 kfree(eni_dev); in eni_init_one()
2287 struct eni_dev *ed = ENI_DEV(dev); in eni_remove_one()