Lines Matching defs:fore200e
58 #include "fore200e.h"
63 #define FORE200E "fore200e: "
165 fore200e_chunk_alloc(struct fore200e* fore200e, struct chunk* chunk, int size, int alignment, int direction)
184 chunk->dma_addr = dma_map_single(fore200e->dev, chunk->align_addr,
186 if (dma_mapping_error(fore200e->dev, chunk->dma_addr)) {
197 fore200e_chunk_free(struct fore200e* fore200e, struct chunk* chunk)
199 dma_unmap_single(fore200e->dev, chunk->dma_addr, chunk->dma_size,
210 fore200e_dma_chunk_alloc(struct fore200e *fore200e, struct chunk *chunk,
215 chunk->alloc_addr = dma_alloc_coherent(fore200e->dev, chunk->alloc_size,
227 fore200e_dma_chunk_free(struct fore200e* fore200e, struct chunk* chunk)
229 dma_free_coherent(fore200e->dev, chunk->alloc_size, chunk->alloc_addr,
242 fore200e_poll(struct fore200e* fore200e, volatile u32* addr, u32 val, int msecs)
266 fore200e_io_poll(struct fore200e* fore200e, volatile u32 __iomem *addr, u32 val, int msecs)
272 if ((ok = (fore200e->bus->read(addr) == val)))
280 fore200e->bus->read(addr), val);
289 fore200e_free_rx_buf(struct fore200e* fore200e)
297 if ((buffer = fore200e->host_bsq[ scheme ][ magn ].buffer) != NULL) {
304 fore200e_chunk_free(fore200e, data);
313 fore200e_uninit_bs_queue(struct fore200e* fore200e)
320 struct chunk* status = &fore200e->host_bsq[ scheme ][ magn ].status;
321 struct chunk* rbd_block = &fore200e->host_bsq[ scheme ][ magn ].rbd_block;
324 fore200e_dma_chunk_free(fore200e, status);
327 fore200e_dma_chunk_free(fore200e, rbd_block);
334 fore200e_reset(struct fore200e* fore200e, int diag)
338 fore200e->cp_monitor = fore200e->virt_base + FORE200E_CP_MONITOR_OFFSET;
340 fore200e->bus->write(BSTAT_COLD_START, &fore200e->cp_monitor->bstat);
342 fore200e->bus->reset(fore200e);
345 ok = fore200e_io_poll(fore200e, &fore200e->cp_monitor->bstat, BSTAT_SELFTEST_OK, 1000);
348 printk(FORE200E "device %s self-test failed\n", fore200e->name);
352 printk(FORE200E "device %s self-test passed\n", fore200e->name);
354 fore200e->state = FORE200E_STATE_RESET;
362 fore200e_shutdown(struct fore200e* fore200e)
365 fore200e->name, fore200e->phys_base,
366 fore200e_irq_itoa(fore200e->irq));
368 if (fore200e->state > FORE200E_STATE_RESET) {
370 fore200e_reset(fore200e, 0);
374 switch(fore200e->state) {
377 kfree(fore200e->stats);
381 free_irq(fore200e->irq, fore200e->atm_dev);
385 fore200e_free_rx_buf(fore200e);
389 fore200e_uninit_bs_queue(fore200e);
393 fore200e_dma_chunk_free(fore200e, &fore200e->host_rxq.status);
394 fore200e_dma_chunk_free(fore200e, &fore200e->host_rxq.rpd);
398 fore200e_dma_chunk_free(fore200e, &fore200e->host_txq.status);
399 fore200e_dma_chunk_free(fore200e, &fore200e->host_txq.tpd);
403 fore200e_dma_chunk_free(fore200e, &fore200e->host_cmdq.status);
416 fore200e->bus->unmap(fore200e);
424 atm_dev_deregister(fore200e->atm_dev);
451 fore200e_pca_irq_check(struct fore200e* fore200e)
454 int irq_posted = readl(fore200e->regs.pca.psr);
457 if (irq_posted && (readl(fore200e->regs.pca.hcr) & PCA200E_HCR_OUTFULL)) {
458 DPRINTK(2,"FIFO OUT full, device %d\n", fore200e->atm_dev->number);
467 fore200e_pca_irq_ack(struct fore200e* fore200e)
469 writel(PCA200E_HCR_CLRINTR, fore200e->regs.pca.hcr);
474 fore200e_pca_reset(struct fore200e* fore200e)
476 writel(PCA200E_HCR_RESET, fore200e->regs.pca.hcr);
478 writel(0, fore200e->regs.pca.hcr);
482 static int fore200e_pca_map(struct fore200e* fore200e)
484 DPRINTK(2, "device %s being mapped in memory\n", fore200e->name);
486 fore200e->virt_base = ioremap(fore200e->phys_base, PCA200E_IOSPACE_LENGTH);
488 if (fore200e->virt_base == NULL) {
489 printk(FORE200E "can't map device %s\n", fore200e->name);
493 DPRINTK(1, "device %s mapped to 0x%p\n", fore200e->name, fore200e->virt_base);
496 fore200e->regs.pca.hcr = fore200e->virt_base + PCA200E_HCR_OFFSET;
497 fore200e->regs.pca.imr = fore200e->virt_base + PCA200E_IMR_OFFSET;
498 fore200e->regs.pca.psr = fore200e->virt_base + PCA200E_PSR_OFFSET;
500 fore200e->state = FORE200E_STATE_MAP;
506 fore200e_pca_unmap(struct fore200e* fore200e)
508 DPRINTK(2, "device %s being unmapped from memory\n", fore200e->name);
510 if (fore200e->virt_base != NULL)
511 iounmap(fore200e->virt_base);
515 static int fore200e_pca_configure(struct fore200e *fore200e)
517 struct pci_dev *pci_dev = to_pci_dev(fore200e->dev);
520 DPRINTK(2, "device %s being configured\n", fore200e->name);
550 fore200e->state = FORE200E_STATE_CONFIGURE;
556 fore200e_pca_prom_read(struct fore200e* fore200e, struct prom_data* prom)
558 struct host_cmdq* cmdq = &fore200e->host_cmdq;
569 prom_dma = dma_map_single(fore200e->dev, prom, sizeof(struct prom_data),
571 if (dma_mapping_error(fore200e->dev, prom_dma))
574 fore200e->bus->write(prom_dma, &entry->cp_entry->cmd.prom_block.prom_haddr);
578 fore200e->bus->write(*(u32*)&opcode, (u32 __iomem *)&entry->cp_entry->cmd.prom_block.opcode);
580 ok = fore200e_poll(fore200e, entry->status, STATUS_COMPLETE, 400);
584 dma_unmap_single(fore200e->dev, prom_dma, sizeof(struct prom_data), DMA_FROM_DEVICE);
587 printk(FORE200E "unable to get PROM data from device %s\n", fore200e->name);
605 fore200e_pca_proc_read(struct fore200e* fore200e, char *page)
607 struct pci_dev *pci_dev = to_pci_dev(fore200e->dev);
644 static void fore200e_sba_irq_enable(struct fore200e *fore200e)
646 u32 hcr = fore200e->bus->read(fore200e->regs.sba.hcr) & SBA200E_HCR_STICKY;
647 fore200e->bus->write(hcr | SBA200E_HCR_INTR_ENA, fore200e->regs.sba.hcr);
650 static int fore200e_sba_irq_check(struct fore200e *fore200e)
652 return fore200e->bus->read(fore200e->regs.sba.hcr) & SBA200E_HCR_INTR_REQ;
655 static void fore200e_sba_irq_ack(struct fore200e *fore200e)
657 u32 hcr = fore200e->bus->read(fore200e->regs.sba.hcr) & SBA200E_HCR_STICKY;
658 fore200e->bus->write(hcr | SBA200E_HCR_INTR_CLR, fore200e->regs.sba.hcr);
661 static void fore200e_sba_reset(struct fore200e *fore200e)
663 fore200e->bus->write(SBA200E_HCR_RESET, fore200e->regs.sba.hcr);
665 fore200e->bus->write(0, fore200e->regs.sba.hcr);
668 static int __init fore200e_sba_map(struct fore200e *fore200e)
670 struct platform_device *op = to_platform_device(fore200e->dev);
674 fore200e->regs.sba.hcr = of_ioremap(&op->resource[0], 0, SBA200E_HCR_LENGTH, "SBA HCR");
675 fore200e->regs.sba.bsr = of_ioremap(&op->resource[1], 0, SBA200E_BSR_LENGTH, "SBA BSR");
676 fore200e->regs.sba.isr = of_ioremap(&op->resource[2], 0, SBA200E_ISR_LENGTH, "SBA ISR");
677 fore200e->virt_base = of_ioremap(&op->resource[3], 0, SBA200E_RAM_LENGTH, "SBA RAM");
679 if (!fore200e->virt_base) {
680 printk(FORE200E "unable to map RAM of device %s\n", fore200e->name);
684 DPRINTK(1, "device %s mapped to 0x%p\n", fore200e->name, fore200e->virt_base);
686 fore200e->bus->write(0x02, fore200e->regs.sba.isr); /* XXX hardwired interrupt level */
694 fore200e->state = FORE200E_STATE_MAP;
698 static void fore200e_sba_unmap(struct fore200e *fore200e)
700 struct platform_device *op = to_platform_device(fore200e->dev);
702 of_iounmap(&op->resource[0], fore200e->regs.sba.hcr, SBA200E_HCR_LENGTH);
703 of_iounmap(&op->resource[1], fore200e->regs.sba.bsr, SBA200E_BSR_LENGTH);
704 of_iounmap(&op->resource[2], fore200e->regs.sba.isr, SBA200E_ISR_LENGTH);
705 of_iounmap(&op->resource[3], fore200e->virt_base, SBA200E_RAM_LENGTH);
708 static int __init fore200e_sba_configure(struct fore200e *fore200e)
710 fore200e->state = FORE200E_STATE_CONFIGURE;
714 static int __init fore200e_sba_prom_read(struct fore200e *fore200e, struct prom_data *prom)
716 struct platform_device *op = to_platform_device(fore200e->dev);
738 static int fore200e_sba_proc_read(struct fore200e *fore200e, char *page)
740 struct platform_device *op = to_platform_device(fore200e->dev);
770 fore200e_tx_irq(struct fore200e* fore200e)
772 struct host_txq* txq = &fore200e->host_txq;
777 if (fore200e->host_txq.txing == 0)
795 dma_unmap_single(fore200e->dev, entry->tpd->tsd[ 0 ].buffer, entry->tpd->tsd[ 0 ].length,
805 fore200e->atm_dev->number);
828 fore200e->atm_dev->number);
854 fore200e->host_txq.txing--;
904 fore200e_supply(struct fore200e* fore200e)
915 bsq = &fore200e->host_bsq[ scheme ][ magn ];
954 fore200e->bus->write(entry->rbd_block_dma, &entry->cp_entry->rbd_block_haddr);
962 fore200e_push_rpd(struct fore200e* fore200e, struct atm_vcc* vcc, struct rpd* rpd)
1016 dma_sync_single_for_cpu(fore200e->dev, buffer->data.dma_addr,
1022 dma_sync_single_for_device(fore200e->dev, buffer->data.dma_addr,
1054 fore200e_collect_rpd(struct fore200e* fore200e, struct rpd* rpd)
1065 bsq = &fore200e->host_bsq[ buffer->scheme ][ buffer->magn ];
1087 fore200e_rx_irq(struct fore200e* fore200e)
1089 struct host_rxq* rxq = &fore200e->host_rxq;
1102 vc_map = FORE200E_VC_MAP(fore200e, entry->rpd->atm_header.vpi, entry->rpd->atm_header.vci);
1108 fore200e->atm_dev->number,
1117 fore200e_push_rpd(fore200e, vcc, entry->rpd);
1121 fore200e->atm_dev->number,
1129 fore200e_collect_rpd(fore200e, entry->rpd);
1132 fore200e->bus->write(entry->rpd_dma, &entry->cp_entry->rpd_haddr);
1135 fore200e_supply(fore200e);
1142 fore200e_irq(struct fore200e* fore200e)
1146 spin_lock_irqsave(&fore200e->q_lock, flags);
1147 fore200e_rx_irq(fore200e);
1148 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1150 spin_lock_irqsave(&fore200e->q_lock, flags);
1151 fore200e_tx_irq(fore200e);
1152 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1160 struct fore200e* fore200e = FORE200E_DEV((struct atm_dev*)dev);
1162 if (fore200e->bus->irq_check(fore200e) == 0) {
1164 DPRINTK(3, "interrupt NOT triggered by device %d\n", fore200e->atm_dev->number);
1167 DPRINTK(3, "interrupt triggered by device %d\n", fore200e->atm_dev->number);
1170 tasklet_schedule(&fore200e->tx_tasklet);
1171 tasklet_schedule(&fore200e->rx_tasklet);
1173 fore200e_irq(fore200e);
1176 fore200e->bus->irq_ack(fore200e);
1185 struct fore200e* fore200e = (struct fore200e*) data;
1188 DPRINTK(3, "tx tasklet scheduled for device %d\n", fore200e->atm_dev->number);
1190 spin_lock_irqsave(&fore200e->q_lock, flags);
1191 fore200e_tx_irq(fore200e);
1192 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1199 struct fore200e* fore200e = (struct fore200e*) data;
1202 DPRINTK(3, "rx tasklet scheduled for device %d\n", fore200e->atm_dev->number);
1204 spin_lock_irqsave(&fore200e->q_lock, flags);
1205 fore200e_rx_irq((struct fore200e*) data);
1206 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1225 fore200e_activate_vcin(struct fore200e* fore200e, int activate, struct atm_vcc* vcc, int mtu)
1227 struct host_cmdq* cmdq = &fore200e->host_cmdq;
1261 fore200e->bus->write(mtu, &entry->cp_entry->cmd.activate_block.mtu);
1262 fore200e->bus->write(*(u32*)&vpvc, (u32 __iomem *)&entry->cp_entry->cmd.activate_block.vpvc);
1263 fore200e->bus->write(*(u32*)&activ_opcode, (u32 __iomem *)&entry->cp_entry->cmd.activate_block.opcode);
1266 fore200e->bus->write(*(u32*)&vpvc, (u32 __iomem *)&entry->cp_entry->cmd.deactivate_block.vpvc);
1267 fore200e->bus->write(*(u32*)&deactiv_opcode, (u32 __iomem *)&entry->cp_entry->cmd.deactivate_block.opcode);
1270 ok = fore200e_poll(fore200e, entry->status, STATUS_COMPLETE, 400);
1308 struct fore200e* fore200e = FORE200E_DEV(vcc->dev);
1318 spin_lock_irqsave(&fore200e->q_lock, flags);
1320 vc_map = FORE200E_VC_MAP(fore200e, vpi, vci);
1323 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1326 fore200e->atm_dev->number, vpi, vci);
1333 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1352 mutex_lock(&fore200e->rate_mtx);
1353 if (fore200e->available_cell_rate < vcc->qos.txtp.max_pcr) {
1354 mutex_unlock(&fore200e->rate_mtx);
1362 fore200e->available_cell_rate -= vcc->qos.txtp.max_pcr;
1363 mutex_unlock(&fore200e->rate_mtx);
1373 if (fore200e_activate_vcin(fore200e, 1, vcc, vcc->qos.rxtp.max_sdu) < 0) {
1382 fore200e->available_cell_rate += vcc->qos.txtp.max_pcr;
1405 vc_map->incarn = ++fore200e->incarn_count;
1418 struct fore200e* fore200e;
1423 fore200e = FORE200E_DEV(vcc->dev);
1432 fore200e_activate_vcin(fore200e, 0, vcc, 0);
1434 spin_lock_irqsave(&fore200e->q_lock, flags);
1436 vc_map = FORE200E_VC_MAP(fore200e, vcc->vpi, vcc->vci);
1446 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1451 mutex_lock(&fore200e->rate_mtx);
1452 fore200e->available_cell_rate += vcc->qos.txtp.max_pcr;
1453 mutex_unlock(&fore200e->rate_mtx);
1469 struct fore200e* fore200e;
1488 fore200e = FORE200E_DEV(vcc->dev);
1491 if (!fore200e)
1494 txq = &fore200e->host_txq;
1521 DPRINTK(2, "misaligned tx PDU on device %s\n", fore200e->name);
1529 DPRINTK(2, "incomplete tx AAL0 PDU on device %s\n", fore200e->name);
1554 vc_map = FORE200E_VC_MAP(fore200e, vcc->vpi, vcc->vci);
1559 spin_lock_irqsave(&fore200e->q_lock, flags);
1566 fore200e_tx_irq(fore200e);
1570 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1580 fore200e->tx_sat++;
1582 fore200e->name, fore200e->cp_queues->heartbeat);
1603 tpd->tsd[ 0 ].buffer = dma_map_single(fore200e->dev, data, tx_len,
1605 if (dma_mapping_error(fore200e->dev, tpd->tsd[0].buffer)) {
1608 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1660 fore200e->bus->write(*(u32*)&tpd_haddr, (u32 __iomem *)&entry->cp_entry->tpd_haddr);
1662 spin_unlock_irqrestore(&fore200e->q_lock, flags);
1669 fore200e_getstats(struct fore200e* fore200e)
1671 struct host_cmdq* cmdq = &fore200e->host_cmdq;
1677 if (fore200e->stats == NULL) {
1678 fore200e->stats = kzalloc(sizeof(struct stats), GFP_KERNEL);
1679 if (fore200e->stats == NULL)
1683 stats_dma_addr = dma_map_single(fore200e->dev, fore200e->stats,
1685 if (dma_mapping_error(fore200e->dev, stats_dma_addr))
1693 fore200e->bus->write(stats_dma_addr, &entry->cp_entry->cmd.stats_block.stats_haddr);
1697 fore200e->bus->write(*(u32*)&opcode, (u32 __iomem *)&entry->cp_entry->cmd.stats_block.opcode);
1699 ok = fore200e_poll(fore200e, entry->status, STATUS_COMPLETE, 400);
1703 dma_unmap_single(fore200e->dev, stats_dma_addr, sizeof(struct stats), DMA_FROM_DEVICE);
1706 printk(FORE200E "unable to get statistics from device %s\n", fore200e->name);
1715 fore200e_get_oc3(struct fore200e* fore200e, struct oc3_regs* regs)
1717 struct host_cmdq* cmdq = &fore200e->host_cmdq;
1723 oc3_regs_dma_addr = fore200e->bus->dma_map(fore200e, regs, sizeof(struct oc3_regs), DMA_FROM_DEVICE);
1732 fore200e->bus->write(oc3_regs_dma_addr, &entry->cp_entry->cmd.oc3_block.regs_haddr);
1736 fore200e->bus->write(*(u32*)&opcode, (u32*)&entry->cp_entry->cmd.oc3_block.opcode);
1738 ok = fore200e_poll(fore200e, entry->status, STATUS_COMPLETE, 400);
1742 fore200e->bus->dma_unmap(fore200e, oc3_regs_dma_addr, sizeof(struct oc3_regs), DMA_FROM_DEVICE);
1745 printk(FORE200E "unable to get OC-3 regs of device %s\n", fore200e->name);
1755 fore200e_set_oc3(struct fore200e* fore200e, u32 reg, u32 value, u32 mask)
1757 struct host_cmdq* cmdq = &fore200e->host_cmdq;
1771 fore200e->bus->write(0, &entry->cp_entry->cmd.oc3_block.regs_haddr);
1775 fore200e->bus->write(*(u32*)&opcode, (u32 __iomem *)&entry->cp_entry->cmd.oc3_block.opcode);
1777 ok = fore200e_poll(fore200e, entry->status, STATUS_COMPLETE, 400);
1782 printk(FORE200E "unable to set OC-3 reg 0x%02x of device %s\n", reg, fore200e->name);
1791 fore200e_setloop(struct fore200e* fore200e, int loop_mode)
1818 error = fore200e_set_oc3(fore200e, SUNI_MCT, mct_value, mct_mask);
1820 fore200e->loop_mode = loop_mode;
1827 fore200e_fetch_stats(struct fore200e* fore200e, struct sonet_stats __user *arg)
1831 if (fore200e_getstats(fore200e) < 0)
1834 tmp.section_bip = be32_to_cpu(fore200e->stats->oc3.section_bip8_errors);
1835 tmp.line_bip = be32_to_cpu(fore200e->stats->oc3.line_bip24_errors);
1836 tmp.path_bip = be32_to_cpu(fore200e->stats->oc3.path_bip8_errors);
1837 tmp.line_febe = be32_to_cpu(fore200e->stats->oc3.line_febe_errors);
1838 tmp.path_febe = be32_to_cpu(fore200e->stats->oc3.path_febe_errors);
1839 tmp.corr_hcs = be32_to_cpu(fore200e->stats->oc3.corr_hcs_errors);
1840 tmp.uncorr_hcs = be32_to_cpu(fore200e->stats->oc3.ucorr_hcs_errors);
1841 tmp.tx_cells = be32_to_cpu(fore200e->stats->aal0.cells_transmitted) +
1842 be32_to_cpu(fore200e->stats->aal34.cells_transmitted) +
1843 be32_to_cpu(fore200e->stats->aal5.cells_transmitted);
1844 tmp.rx_cells = be32_to_cpu(fore200e->stats->aal0.cells_received) +
1845 be32_to_cpu(fore200e->stats->aal34.cells_received) +
1846 be32_to_cpu(fore200e->stats->aal5.cells_received);
1858 struct fore200e* fore200e = FORE200E_DEV(dev);
1865 return fore200e_fetch_stats(fore200e, (struct sonet_stats __user *)arg);
1871 return fore200e_setloop(fore200e, (int)(unsigned long)arg);
1874 return put_user(fore200e->loop_mode, (int __user *)arg) ? -EFAULT : 0;
1888 struct fore200e* fore200e = FORE200E_DEV(vcc->dev);
1904 flags, fore200e->available_cell_rate);
1908 mutex_lock(&fore200e->rate_mtx);
1909 if (fore200e->available_cell_rate + vcc->qos.txtp.max_pcr < qos->txtp.max_pcr) {
1910 mutex_unlock(&fore200e->rate_mtx);
1914 fore200e->available_cell_rate += vcc->qos.txtp.max_pcr;
1915 fore200e->available_cell_rate -= qos->txtp.max_pcr;
1917 mutex_unlock(&fore200e->rate_mtx);
1933 static int fore200e_irq_request(struct fore200e *fore200e)
1935 if (request_irq(fore200e->irq, fore200e_interrupt, IRQF_SHARED, fore200e->name, fore200e->atm_dev) < 0) {
1938 fore200e_irq_itoa(fore200e->irq), fore200e->name);
1943 fore200e_irq_itoa(fore200e->irq), fore200e->name);
1946 tasklet_init(&fore200e->tx_tasklet, fore200e_tx_tasklet, (unsigned long)fore200e);
1947 tasklet_init(&fore200e->rx_tasklet, fore200e_rx_tasklet, (unsigned long)fore200e);
1950 fore200e->state = FORE200E_STATE_IRQ;
1955 static int fore200e_get_esi(struct fore200e *fore200e)
1963 ok = fore200e->bus->prom_read(fore200e, prom);
1970 fore200e->name,
1975 fore200e->esi[ i ] = fore200e->atm_dev->esi[ i ] = prom->mac_addr[ i + 2 ];
1984 static int fore200e_alloc_rx_buf(struct fore200e *fore200e)
1994 bsq = &fore200e->host_bsq[ scheme ][ magn ];
2020 if (fore200e_chunk_alloc(fore200e,
2021 &buffer[ i ].data, size, fore200e->bus->buffer_alignment,
2025 fore200e_chunk_free(fore200e, &buffer[ --i ].data);
2044 fore200e->state = FORE200E_STATE_ALLOC_BUF;
2049 static int fore200e_init_bs_queue(struct fore200e *fore200e)
2061 bsq = &fore200e->host_bsq[ scheme ][ magn ];
2064 if (fore200e_dma_chunk_alloc(fore200e,
2068 fore200e->bus->status_alignment) < 0) {
2073 if (fore200e_dma_chunk_alloc(fore200e,
2077 fore200e->bus->descr_alignment) < 0) {
2079 fore200e_dma_chunk_free(fore200e, &bsq->status);
2084 cp_entry = fore200e->virt_base +
2085 fore200e->bus->read(&fore200e->cp_queues->cp_bsq[ scheme ][ magn ]);
2100 fore200e->bus->write(FORE200E_DMA_INDEX(bsq->status.dma_addr, enum status, i),
2106 fore200e->state = FORE200E_STATE_INIT_BSQ;
2111 static int fore200e_init_rx_queue(struct fore200e *fore200e)
2113 struct host_rxq* rxq = &fore200e->host_rxq;
2120 if (fore200e_dma_chunk_alloc(fore200e,
2124 fore200e->bus->status_alignment) < 0) {
2129 if (fore200e_dma_chunk_alloc(fore200e,
2133 fore200e->bus->descr_alignment) < 0) {
2135 fore200e_dma_chunk_free(fore200e, &rxq->status);
2140 cp_entry = fore200e->virt_base + fore200e->bus->read(&fore200e->cp_queues->cp_rxq);
2155 fore200e->bus->write(FORE200E_DMA_INDEX(rxq->status.dma_addr, enum status, i),
2158 fore200e->bus->write(FORE200E_DMA_INDEX(rxq->rpd.dma_addr, struct rpd, i),
2165 fore200e->state = FORE200E_STATE_INIT_RXQ;
2170 static int fore200e_init_tx_queue(struct fore200e *fore200e)
2172 struct host_txq* txq = &fore200e->host_txq;
2179 if (fore200e_dma_chunk_alloc(fore200e,
2183 fore200e->bus->status_alignment) < 0) {
2188 if (fore200e_dma_chunk_alloc(fore200e,
2192 fore200e->bus->descr_alignment) < 0) {
2194 fore200e_dma_chunk_free(fore200e, &txq->status);
2199 cp_entry = fore200e->virt_base + fore200e->bus->read(&fore200e->cp_queues->cp_txq);
2214 fore200e->bus->write(FORE200E_DMA_INDEX(txq->status.dma_addr, enum status, i),
2227 fore200e->state = FORE200E_STATE_INIT_TXQ;
2232 static int fore200e_init_cmd_queue(struct fore200e *fore200e)
2234 struct host_cmdq* cmdq = &fore200e->host_cmdq;
2241 if (fore200e_dma_chunk_alloc(fore200e,
2245 fore200e->bus->status_alignment) < 0) {
2250 cp_entry = fore200e->virt_base + fore200e->bus->read(&fore200e->cp_queues->cp_cmdq);
2261 fore200e->bus->write(FORE200E_DMA_INDEX(cmdq->status.dma_addr, enum status, i),
2268 fore200e->state = FORE200E_STATE_INIT_CMDQ;
2273 static void fore200e_param_bs_queue(struct fore200e *fore200e,
2278 struct bs_spec __iomem * bs_spec = &fore200e->cp_queues->init.bs_spec[ scheme ][ magn ];
2280 fore200e->bus->write(queue_length, &bs_spec->queue_length);
2281 fore200e->bus->write(fore200e_rx_buf_size[ scheme ][ magn ], &bs_spec->buffer_size);
2282 fore200e->bus->write(pool_size, &bs_spec->pool_size);
2283 fore200e->bus->write(supply_blksize, &bs_spec->supply_blksize);
2287 static int fore200e_initialize(struct fore200e *fore200e)
2292 DPRINTK(2, "device %s being initialized\n", fore200e->name);
2294 mutex_init(&fore200e->rate_mtx);
2295 spin_lock_init(&fore200e->q_lock);
2297 cpq = fore200e->cp_queues = fore200e->virt_base + FORE200E_CP_QUEUES_OFFSET;
2300 fore200e->bus->write(1, &cpq->imask);
2302 if (fore200e->bus->irq_enable)
2303 fore200e->bus->irq_enable(fore200e);
2305 fore200e->bus->write(NBR_CONNECT, &cpq->init.num_connect);
2307 fore200e->bus->write(QUEUE_SIZE_CMD, &cpq->init.cmd_queue_len);
2308 fore200e->bus->write(QUEUE_SIZE_RX, &cpq->init.rx_queue_len);
2309 fore200e->bus->write(QUEUE_SIZE_TX, &cpq->init.tx_queue_len);
2311 fore200e->bus->write(RSD_EXTENSION, &cpq->init.rsd_extension);
2312 fore200e->bus->write(TSD_EXTENSION, &cpq->init.tsd_extension);
2316 fore200e_param_bs_queue(fore200e, scheme, magn,
2322 fore200e->bus->write(STATUS_PENDING, &cpq->init.status);
2323 fore200e->bus->write(OPCODE_INITIALIZE, &cpq->init.opcode);
2325 ok = fore200e_io_poll(fore200e, &cpq->init.status, STATUS_COMPLETE, 3000);
2327 printk(FORE200E "device %s initialization failed\n", fore200e->name);
2331 printk(FORE200E "device %s initialized\n", fore200e->name);
2333 fore200e->state = FORE200E_STATE_INITIALIZE;
2338 static void fore200e_monitor_putc(struct fore200e *fore200e, char c)
2340 struct cp_monitor __iomem * monitor = fore200e->cp_monitor;
2345 fore200e->bus->write(((u32) c) | FORE200E_CP_MONITOR_UART_AVAIL, &monitor->soft_uart.send);
2349 static int fore200e_monitor_getc(struct fore200e *fore200e)
2351 struct cp_monitor __iomem * monitor = fore200e->cp_monitor;
2357 c = (int) fore200e->bus->read(&monitor->soft_uart.recv);
2361 fore200e->bus->write(FORE200E_CP_MONITOR_UART_FREE, &monitor->soft_uart.recv);
2373 static void fore200e_monitor_puts(struct fore200e *fore200e, char *str)
2378 while (fore200e_monitor_getc(fore200e) >= 0);
2380 fore200e_monitor_putc(fore200e, *str++);
2383 while (fore200e_monitor_getc(fore200e) >= 0);
2392 static int fore200e_load_and_start_fw(struct fore200e *fore200e)
2402 sprintf(buf, "%s%s", fore200e->bus->proc_name, FW_EXT);
2403 if ((err = request_firmware(&firmware, buf, fore200e->dev)) < 0) {
2404 printk(FORE200E "problem loading firmware image %s\n", fore200e->bus->model_name);
2411 load_addr = fore200e->virt_base + le32_to_cpu(fw_header->load_offset);
2414 fore200e->name, load_addr, fw_size);
2417 printk(FORE200E "corrupted %s firmware image\n", fore200e->bus->model_name);
2422 fore200e->bus->write(le32_to_cpu(*fw_data), load_addr);
2424 DPRINTK(2, "device %s firmware being started\n", fore200e->name);
2432 fore200e_monitor_puts(fore200e, buf);
2434 if (fore200e_io_poll(fore200e, &fore200e->cp_monitor->bstat, BSTAT_CP_RUNNING, 1000) == 0) {
2435 printk(FORE200E "device %s firmware didn't start\n", fore200e->name);
2439 printk(FORE200E "device %s firmware started\n", fore200e->name);
2441 fore200e->state = FORE200E_STATE_START_FW;
2450 static int fore200e_register(struct fore200e *fore200e, struct device *parent)
2454 DPRINTK(2, "device %s being registered\n", fore200e->name);
2456 atm_dev = atm_dev_register(fore200e->bus->proc_name, parent, &fore200e_ops,
2459 printk(FORE200E "unable to register device %s\n", fore200e->name);
2463 atm_dev->dev_data = fore200e;
2464 fore200e->atm_dev = atm_dev;
2469 fore200e->available_cell_rate = ATM_OC3_PCR;
2471 fore200e->state = FORE200E_STATE_REGISTER;
2476 static int fore200e_init(struct fore200e *fore200e, struct device *parent)
2478 if (fore200e_register(fore200e, parent) < 0)
2481 if (fore200e->bus->configure(fore200e) < 0)
2484 if (fore200e->bus->map(fore200e) < 0)
2487 if (fore200e_reset(fore200e, 1) < 0)
2490 if (fore200e_load_and_start_fw(fore200e) < 0)
2493 if (fore200e_initialize(fore200e) < 0)
2496 if (fore200e_init_cmd_queue(fore200e) < 0)
2499 if (fore200e_init_tx_queue(fore200e) < 0)
2502 if (fore200e_init_rx_queue(fore200e) < 0)
2505 if (fore200e_init_bs_queue(fore200e) < 0)
2508 if (fore200e_alloc_rx_buf(fore200e) < 0)
2511 if (fore200e_get_esi(fore200e) < 0)
2514 if (fore200e_irq_request(fore200e) < 0)
2517 fore200e_supply(fore200e);
2520 fore200e->state = FORE200E_STATE_COMPLETE;
2529 struct fore200e *fore200e;
2537 fore200e = kzalloc(sizeof(struct fore200e), GFP_KERNEL);
2538 if (!fore200e)
2541 fore200e->bus = &fore200e_sbus_ops;
2542 fore200e->dev = &op->dev;
2543 fore200e->irq = op->archdata.irqs[0];
2544 fore200e->phys_base = op->resource[0].start;
2546 sprintf(fore200e->name, "SBA-200E-%d", index);
2548 err = fore200e_init(fore200e, &op->dev);
2550 fore200e_shutdown(fore200e);
2551 kfree(fore200e);
2556 dev_set_drvdata(&op->dev, fore200e);
2563 struct fore200e *fore200e = dev_get_drvdata(&op->dev);
2565 fore200e_shutdown(fore200e);
2566 kfree(fore200e);
2593 struct fore200e* fore200e;
2607 fore200e = kzalloc(sizeof(struct fore200e), GFP_KERNEL);
2608 if (fore200e == NULL) {
2613 fore200e->bus = &fore200e_pci_ops;
2614 fore200e->dev = &pci_dev->dev;
2615 fore200e->irq = pci_dev->irq;
2616 fore200e->phys_base = pci_resource_start(pci_dev, 0);
2618 sprintf(fore200e->name, "PCA-200E-%d", index - 1);
2623 fore200e->phys_base, fore200e_irq_itoa(fore200e->irq));
2625 sprintf(fore200e->name, "PCA-200E-%d", index);
2627 err = fore200e_init(fore200e, &pci_dev->dev);
2629 fore200e_shutdown(fore200e);
2634 pci_set_drvdata(pci_dev, fore200e);
2640 kfree(fore200e);
2649 struct fore200e *fore200e;
2651 fore200e = pci_get_drvdata(pci_dev);
2653 fore200e_shutdown(fore200e);
2654 kfree(fore200e);
2711 struct fore200e* fore200e = FORE200E_DEV(dev);
2719 if (fore200e_getstats(fore200e) < 0)
2724 " internal name:\t\t%s\n", fore200e->name);
2727 if (fore200e->bus->proc_read)
2728 len += fore200e->bus->proc_read(fore200e, page + len);
2736 fore200e_irq_itoa(fore200e->irq),
2737 (void*)fore200e->phys_base,
2738 fore200e->virt_base,
2739 fore200e->esi,
2740 fore200e->esi[4] * 256 + fore200e->esi[5]);
2751 fore200e->host_bsq[ BUFFER_SCHEME_ONE ][ BUFFER_MAGN_SMALL ].freebuf_count,
2752 fore200e->host_bsq[ BUFFER_SCHEME_ONE ][ BUFFER_MAGN_LARGE ].freebuf_count,
2753 fore200e->host_bsq[ BUFFER_SCHEME_TWO ][ BUFFER_MAGN_SMALL ].freebuf_count,
2754 fore200e->host_bsq[ BUFFER_SCHEME_TWO ][ BUFFER_MAGN_LARGE ].freebuf_count);
2757 u32 hb = fore200e->bus->read(&fore200e->cp_queues->heartbeat);
2788 u32 fw_release = fore200e->bus->read(&fore200e->cp_queues->fw_release);
2789 u32 mon960_release = fore200e->bus->read(&fore200e->cp_queues->mon960_release);
2790 u32 oc3_revision = fore200e->bus->read(&fore200e->cp_queues->oc3_revision);
2791 u32 media_index = FORE200E_MEDIA_INDEX(fore200e->bus->read(&fore200e->cp_queues->media_type));
2797 switch (fore200e->loop_mode) {
2821 struct cp_monitor __iomem * cp_monitor = fore200e->cp_monitor;
2828 fore200e->bus->read(&cp_monitor->mon_version),
2829 fore200e->bus->read(&cp_monitor->bstat));
2839 be32_to_cpu(fore200e->stats->phy.crc_header_errors),
2840 be32_to_cpu(fore200e->stats->phy.framing_errors));
2852 be32_to_cpu(fore200e->stats->oc3.section_bip8_errors),
2853 be32_to_cpu(fore200e->stats->oc3.path_bip8_errors),
2854 be32_to_cpu(fore200e->stats->oc3.line_bip24_errors),
2855 be32_to_cpu(fore200e->stats->oc3.line_febe_errors),
2856 be32_to_cpu(fore200e->stats->oc3.path_febe_errors),
2857 be32_to_cpu(fore200e->stats->oc3.corr_hcs_errors),
2858 be32_to_cpu(fore200e->stats->oc3.ucorr_hcs_errors));
2869 be32_to_cpu(fore200e->stats->atm.cells_transmitted),
2870 be32_to_cpu(fore200e->stats->atm.cells_received),
2871 be32_to_cpu(fore200e->stats->atm.vpi_bad_range),
2872 be32_to_cpu(fore200e->stats->atm.vpi_no_conn),
2873 be32_to_cpu(fore200e->stats->atm.vci_bad_range),
2874 be32_to_cpu(fore200e->stats->atm.vci_no_conn));
2882 be32_to_cpu(fore200e->stats->aal0.cells_transmitted),
2883 be32_to_cpu(fore200e->stats->aal0.cells_received),
2884 be32_to_cpu(fore200e->stats->aal0.cells_dropped));
2900 be32_to_cpu(fore200e->stats->aal34.cells_transmitted),
2901 be32_to_cpu(fore200e->stats->aal34.cells_received),
2902 be32_to_cpu(fore200e->stats->aal34.cells_dropped),
2903 be32_to_cpu(fore200e->stats->aal34.cells_crc_errors),
2904 be32_to_cpu(fore200e->stats->aal34.cells_protocol_errors),
2905 be32_to_cpu(fore200e->stats->aal34.cspdus_transmitted),
2906 be32_to_cpu(fore200e->stats->aal34.cspdus_received),
2907 be32_to_cpu(fore200e->stats->aal34.cspdus_dropped),
2908 be32_to_cpu(fore200e->stats->aal34.cspdus_protocol_errors));
2924 be32_to_cpu(fore200e->stats->aal5.cells_transmitted),
2925 be32_to_cpu(fore200e->stats->aal5.cells_received),
2926 be32_to_cpu(fore200e->stats->aal5.cells_dropped),
2927 be32_to_cpu(fore200e->stats->aal5.congestion_experienced),
2928 be32_to_cpu(fore200e->stats->aal5.cspdus_transmitted),
2929 be32_to_cpu(fore200e->stats->aal5.cspdus_received),
2930 be32_to_cpu(fore200e->stats->aal5.cspdus_dropped),
2931 be32_to_cpu(fore200e->stats->aal5.cspdus_crc_errors),
2932 be32_to_cpu(fore200e->stats->aal5.cspdus_protocol_errors));
2943 be32_to_cpu(fore200e->stats->aux.small_b1_failed),
2944 be32_to_cpu(fore200e->stats->aux.large_b1_failed),
2945 be32_to_cpu(fore200e->stats->aux.small_b2_failed),
2946 be32_to_cpu(fore200e->stats->aux.large_b2_failed),
2947 be32_to_cpu(fore200e->stats->aux.rpd_alloc_failed),
2948 fore200e->tx_sat);
2953 fore200e->stats->aux.receive_carrier ? "ON" : "OFF!");
2963 vcc = fore200e->vc_map[i].vcc;
2968 spin_lock_irqsave(&fore200e->q_lock, flags);
2986 spin_unlock_irqrestore(&fore200e->q_lock, flags);
2990 spin_unlock_irqrestore(&fore200e->q_lock, flags);