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()
1115 if (dma_mapping_error(&eni_dev->pci_dev->dev, paddr)) 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_array(eni_dev->free_list_size + 1, in eni_start()
1849 sizeof(*eni_dev->free_list), in eni_start()
1851 if (!eni_dev->free_list) { in eni_start()
1857 eni_dev->free_len = 0; in eni_start()
1858 eni_put_free(eni_dev,buf,buffer_mem); in eni_start()
1859 memset_io(eni_dev->vci,0,16*NR_VCI); /* clear VCI table */ in eni_start()
1884 kfree(eni_dev->free_list); in eni_start()
1887 free_irq(eni_dev->irq, dev); in eni_start()
1958 struct eni_dev *eni_dev = ENI_DEV(vcc->dev); in eni_change_qos() local
1964 if (tx == eni_dev->ubr) return -EBADFD; in eni_change_qos()
1980 tasklet_disable(&eni_dev->task); in eni_change_qos()
1981 skb_queue_walk(&eni_dev->tx_queue, skb) { in eni_change_qos()
1990 tasklet_enable(&eni_dev->task); in eni_change_qos()
1997 struct eni_dev *eni_dev = ENI_DEV(dev); in eni_ioctl() local
2016 if (mult.tx) eni_dev->tx_mult = mult.tx; in eni_ioctl()
2017 if (mult.rx) eni_dev->rx_mult = mult.rx; in eni_ioctl()
2087 struct eni_dev *eni_dev = ENI_DEV(dev); in eni_proc_read() local
2095 eni_dev->mem >> 10,eni_dev->tx_bw); in eni_proc_read()
2141 "",eni_dev->tx_mult,eni_dev->rx_mult); in eni_proc_read()
2143 struct eni_tx *tx = eni_dev->tx+i; in eni_proc_read()
2149 (unsigned long) (tx->send - eni_dev->ram), in eni_proc_read()
2150 tx->send-eni_dev->ram+tx->words*4-1,tx->words*4, in eni_proc_read()
2152 tx == eni_dev->ubr ? " (UBR)" : ""); in eni_proc_read()
2175 (unsigned long) (eni_vcc->recv - eni_dev->ram), in eni_proc_read()
2176 eni_vcc->recv-eni_dev->ram+eni_vcc->words*4-1, in eni_proc_read()
2189 for (i = 0; i < eni_dev->free_len; i++) { in eni_proc_read()
2190 struct eni_free *fe = eni_dev->free_list+i; in eni_proc_read()
2194 offset = (unsigned long) eni_dev->ram+eni_dev->base_diff; in eni_proc_read()
2219 struct eni_dev *eni_dev; in eni_init_one() local
2232 eni_dev = kmalloc(sizeof(struct eni_dev), GFP_KERNEL); in eni_init_one()
2233 if (!eni_dev) in eni_init_one()
2236 zero = &eni_dev->zero; in eni_init_one()
2246 dev->dev_data = eni_dev; in eni_init_one()
2248 eni_dev->pci_dev = pci_dev; in eni_init_one()
2249 eni_dev->asic = ent->driver_data; in eni_init_one()
2259 eni_dev->more = eni_boards; in eni_init_one()
2272 kfree(eni_dev); in eni_init_one()
2290 struct eni_dev *ed = ENI_DEV(dev); in eni_remove_one()