Lines Matching refs:tsi148_bridge
118 static u32 tsi148_MB_irqhandler(struct vme_bridge *tsi148_bridge, u32 stat) in tsi148_MB_irqhandler() argument
125 bridge = tsi148_bridge->driver_priv; in tsi148_MB_irqhandler()
130 dev_err(tsi148_bridge->parent, "VME Mailbox %d received" in tsi148_MB_irqhandler()
142 static u32 tsi148_PERR_irqhandler(struct vme_bridge *tsi148_bridge) in tsi148_PERR_irqhandler() argument
146 bridge = tsi148_bridge->driver_priv; in tsi148_PERR_irqhandler()
148 dev_err(tsi148_bridge->parent, "PCI Exception at address: 0x%08x:%08x, " in tsi148_PERR_irqhandler()
154 dev_err(tsi148_bridge->parent, "PCI-X attribute reg: %08x, PCI-X split " in tsi148_PERR_irqhandler()
167 static u32 tsi148_VERR_irqhandler(struct vme_bridge *tsi148_bridge) in tsi148_VERR_irqhandler() argument
175 bridge = tsi148_bridge->driver_priv; in tsi148_VERR_irqhandler()
186 dev_err(tsi148_bridge->parent, "VME Bus Exception Overflow " in tsi148_VERR_irqhandler()
191 vme_bus_error_handler(tsi148_bridge, error_addr, error_am); in tsi148_VERR_irqhandler()
193 dev_err(tsi148_bridge->parent, in tsi148_VERR_irqhandler()
216 static u32 tsi148_VIRQ_irqhandler(struct vme_bridge *tsi148_bridge, in tsi148_VIRQ_irqhandler() argument
222 bridge = tsi148_bridge->driver_priv; in tsi148_VIRQ_irqhandler()
233 vme_irq_handler(tsi148_bridge, i, vec); in tsi148_VIRQ_irqhandler()
249 struct vme_bridge *tsi148_bridge; in tsi148_irqhandler() local
252 tsi148_bridge = ptr; in tsi148_irqhandler()
254 bridge = tsi148_bridge->driver_priv; in tsi148_irqhandler()
279 serviced |= tsi148_MB_irqhandler(tsi148_bridge, stat); in tsi148_irqhandler()
283 serviced |= tsi148_PERR_irqhandler(tsi148_bridge); in tsi148_irqhandler()
287 serviced |= tsi148_VERR_irqhandler(tsi148_bridge); in tsi148_irqhandler()
298 serviced |= tsi148_VIRQ_irqhandler(tsi148_bridge, stat); in tsi148_irqhandler()
306 static int tsi148_irq_init(struct vme_bridge *tsi148_bridge) in tsi148_irq_init() argument
313 pdev = to_pci_dev(tsi148_bridge->parent); in tsi148_irq_init()
315 bridge = tsi148_bridge->driver_priv; in tsi148_irq_init()
317 INIT_LIST_HEAD(&tsi148_bridge->vme_error_handlers); in tsi148_irq_init()
319 mutex_init(&tsi148_bridge->irq_mtx); in tsi148_irq_init()
324 driver_name, tsi148_bridge); in tsi148_irq_init()
326 dev_err(tsi148_bridge->parent, "Can't get assigned pci irq " in tsi148_irq_init()
371 static void tsi148_irq_exit(struct vme_bridge *tsi148_bridge, in tsi148_irq_exit() argument
374 struct tsi148_driver *bridge = tsi148_bridge->driver_priv; in tsi148_irq_exit()
384 free_irq(pdev->irq, tsi148_bridge); in tsi148_irq_exit()
405 static void tsi148_irq_set(struct vme_bridge *tsi148_bridge, int level, in tsi148_irq_set() argument
412 bridge = tsi148_bridge->driver_priv; in tsi148_irq_set()
425 pdev = to_pci_dev(tsi148_bridge->parent); in tsi148_irq_set()
443 static int tsi148_irq_generate(struct vme_bridge *tsi148_bridge, int level, in tsi148_irq_generate() argument
449 bridge = tsi148_bridge->driver_priv; in tsi148_irq_generate()
487 struct vme_bridge *tsi148_bridge; in tsi148_slave_set() local
490 tsi148_bridge = image->parent; in tsi148_slave_set()
491 bridge = tsi148_bridge->driver_priv; in tsi148_slave_set()
513 dev_err(tsi148_bridge->parent, "Invalid address space\n"); in tsi148_slave_set()
531 dev_err(tsi148_bridge->parent, "Invalid VME base alignment\n"); in tsi148_slave_set()
535 dev_err(tsi148_bridge->parent, "Invalid VME bound alignment\n"); in tsi148_slave_set()
539 dev_err(tsi148_bridge->parent, "Invalid PCI Offset " in tsi148_slave_set()
728 struct vme_bridge *tsi148_bridge; in tsi148_alloc_resource() local
730 tsi148_bridge = image->parent; in tsi148_alloc_resource()
732 pdev = to_pci_dev(tsi148_bridge->parent); in tsi148_alloc_resource()
756 dev_err(tsi148_bridge->parent, "Unable to allocate " in tsi148_alloc_resource()
763 sprintf((char *)image->bus_resource.name, "%s.%d", tsi148_bridge->name, in tsi148_alloc_resource()
774 dev_err(tsi148_bridge->parent, "Failed to allocate mem " in tsi148_alloc_resource()
784 dev_err(tsi148_bridge->parent, "Failed to remap resource\n"); in tsi148_alloc_resource()
826 struct vme_bridge *tsi148_bridge; in tsi148_master_set() local
831 tsi148_bridge = image->parent; in tsi148_master_set()
833 bridge = tsi148_bridge->driver_priv; in tsi148_master_set()
835 pdev = to_pci_dev(tsi148_bridge->parent); in tsi148_master_set()
839 dev_err(tsi148_bridge->parent, "Invalid VME Window " in tsi148_master_set()
846 dev_err(tsi148_bridge->parent, "Size must be non-zero for " in tsi148_master_set()
861 dev_err(tsi148_bridge->parent, "Unable to allocate memory for " in tsi148_master_set()
890 dev_err(tsi148_bridge->parent, "Invalid PCI base alignment\n"); in tsi148_master_set()
896 dev_err(tsi148_bridge->parent, "Invalid PCI bound alignment\n"); in tsi148_master_set()
902 dev_err(tsi148_bridge->parent, "Invalid VME Offset " in tsi148_master_set()
949 dev_warn(tsi148_bridge->parent, "Currently not setting " in tsi148_master_set()
966 dev_err(tsi148_bridge->parent, "Invalid data width\n"); in tsi148_master_set()
1003 dev_err(tsi148_bridge->parent, "Invalid address space\n"); in tsi148_master_set()
1190 struct vme_bridge *tsi148_bridge; in tsi148_master_read() local
1195 tsi148_bridge = image->parent; in tsi148_master_read()
1202 handler = vme_register_error_handler(tsi148_bridge, aspace, in tsi148_master_read()
1280 struct vme_bridge *tsi148_bridge; in tsi148_master_write() local
1283 tsi148_bridge = image->parent; in tsi148_master_write()
1285 bridge = tsi148_bridge->driver_priv; in tsi148_master_write()
1292 handler = vme_register_error_handler(tsi148_bridge, aspace, in tsi148_master_write()
1353 dev_warn(tsi148_bridge->parent, in tsi148_master_write()
1641 struct vme_bridge *tsi148_bridge; in tsi148_dma_list_add() local
1643 tsi148_bridge = list->parent->parent; in tsi148_dma_list_add()
1648 dev_err(tsi148_bridge->parent, "Failed to allocate memory for " in tsi148_dma_list_add()
1656 dev_err(tsi148_bridge->parent, "Descriptor not aligned to 8 " in tsi148_dma_list_add()
1705 tsi148_bridge->parent, &entry->descriptor.dsat, in tsi148_dma_list_add()
1711 dev_err(tsi148_bridge->parent, "Invalid source type\n"); in tsi148_dma_list_add()
1742 tsi148_bridge->parent, &entry->descriptor.ddat, in tsi148_dma_list_add()
1748 dev_err(tsi148_bridge->parent, "Invalid destination type\n"); in tsi148_dma_list_add()
1760 entry->dma_handle = dma_map_single(tsi148_bridge->parent, in tsi148_dma_list_add()
1763 if (dma_mapping_error(tsi148_bridge->parent, entry->dma_handle)) { in tsi148_dma_list_add()
1764 dev_err(tsi148_bridge->parent, "DMA mapping error\n"); in tsi148_dma_list_add()
1794 static int tsi148_dma_busy(struct vme_bridge *tsi148_bridge, int channel) in tsi148_dma_busy() argument
1799 bridge = tsi148_bridge->driver_priv; in tsi148_dma_busy()
1823 struct vme_bridge *tsi148_bridge; in tsi148_dma_list_exec() local
1828 tsi148_bridge = ctrlr->parent; in tsi148_dma_list_exec()
1830 bridge = tsi148_bridge->driver_priv; in tsi148_dma_list_exec()
1890 dev_err(tsi148_bridge->parent, "DMA Error. DSTA=%08X\n", val); in tsi148_dma_list_exec()
1913 struct vme_bridge *tsi148_bridge = list->parent->parent; in tsi148_dma_list_empty() local
1920 dma_unmap_single(tsi148_bridge->parent, entry->dma_handle, in tsi148_dma_list_empty()
1940 struct vme_bridge *tsi148_bridge; in tsi148_lm_set() local
1943 tsi148_bridge = lm->parent; in tsi148_lm_set()
1945 bridge = tsi148_bridge->driver_priv; in tsi148_lm_set()
1953 dev_err(tsi148_bridge->parent, "Location monitor " in tsi148_lm_set()
1974 dev_err(tsi148_bridge->parent, "Invalid address space\n"); in tsi148_lm_set()
2057 struct vme_bridge *tsi148_bridge; in tsi148_lm_attach() local
2060 tsi148_bridge = lm->parent; in tsi148_lm_attach()
2062 bridge = tsi148_bridge->driver_priv; in tsi148_lm_attach()
2070 dev_err(tsi148_bridge->parent, "Location monitor not properly " in tsi148_lm_attach()
2078 dev_err(tsi148_bridge->parent, "Existing callback attached\n"); in tsi148_lm_attach()
2148 static int tsi148_slot_get(struct vme_bridge *tsi148_bridge) in tsi148_slot_get() argument
2153 bridge = tsi148_bridge->driver_priv; in tsi148_slot_get()
2198 static int tsi148_crcsr_init(struct vme_bridge *tsi148_bridge, in tsi148_crcsr_init() argument
2206 bridge = tsi148_bridge->driver_priv; in tsi148_crcsr_init()
2212 dev_err(tsi148_bridge->parent, "Failed to allocate memory for " in tsi148_crcsr_init()
2226 vstat = tsi148_slot_get(tsi148_bridge); in tsi148_crcsr_init()
2230 dev_info(tsi148_bridge->parent, "Setting CR/CSR offset\n"); in tsi148_crcsr_init()
2233 dev_info(tsi148_bridge->parent, "CR/CSR Offset: %d\n", cbar); in tsi148_crcsr_init()
2237 dev_info(tsi148_bridge->parent, "CR/CSR already enabled\n"); in tsi148_crcsr_init()
2239 dev_info(tsi148_bridge->parent, "Enabling CR/CSR space\n"); in tsi148_crcsr_init()
2253 dev_err(tsi148_bridge->parent, "Configuring flush image" in tsi148_crcsr_init()
2261 static void tsi148_crcsr_exit(struct vme_bridge *tsi148_bridge, in tsi148_crcsr_exit() argument
2267 bridge = tsi148_bridge->driver_priv; in tsi148_crcsr_exit()
2287 struct vme_bridge *tsi148_bridge; in tsi148_probe() local
2297 tsi148_bridge = kzalloc(sizeof(struct vme_bridge), GFP_KERNEL); in tsi148_probe()
2298 if (tsi148_bridge == NULL) { in tsi148_probe()
2313 tsi148_bridge->driver_priv = tsi148_device; in tsi148_probe()
2353 tsi148_bridge->parent = &pdev->dev; in tsi148_probe()
2354 strcpy(tsi148_bridge->name, driver_name); in tsi148_probe()
2357 retval = tsi148_irq_init(tsi148_bridge); in tsi148_probe()
2380 tsi148_device->flush_image->parent = tsi148_bridge; in tsi148_probe()
2390 INIT_LIST_HEAD(&tsi148_bridge->master_resources); in tsi148_probe()
2400 master_image->parent = tsi148_bridge; in tsi148_probe()
2416 &tsi148_bridge->master_resources); in tsi148_probe()
2420 INIT_LIST_HEAD(&tsi148_bridge->slave_resources); in tsi148_probe()
2430 slave_image->parent = tsi148_bridge; in tsi148_probe()
2441 &tsi148_bridge->slave_resources); in tsi148_probe()
2445 INIT_LIST_HEAD(&tsi148_bridge->dma_resources); in tsi148_probe()
2455 dma_ctrlr->parent = tsi148_bridge; in tsi148_probe()
2466 &tsi148_bridge->dma_resources); in tsi148_probe()
2470 INIT_LIST_HEAD(&tsi148_bridge->lm_resources); in tsi148_probe()
2478 lm->parent = tsi148_bridge; in tsi148_probe()
2483 list_add_tail(&lm->list, &tsi148_bridge->lm_resources); in tsi148_probe()
2485 tsi148_bridge->slave_get = tsi148_slave_get; in tsi148_probe()
2486 tsi148_bridge->slave_set = tsi148_slave_set; in tsi148_probe()
2487 tsi148_bridge->master_get = tsi148_master_get; in tsi148_probe()
2488 tsi148_bridge->master_set = tsi148_master_set; in tsi148_probe()
2489 tsi148_bridge->master_read = tsi148_master_read; in tsi148_probe()
2490 tsi148_bridge->master_write = tsi148_master_write; in tsi148_probe()
2491 tsi148_bridge->master_rmw = tsi148_master_rmw; in tsi148_probe()
2492 tsi148_bridge->dma_list_add = tsi148_dma_list_add; in tsi148_probe()
2493 tsi148_bridge->dma_list_exec = tsi148_dma_list_exec; in tsi148_probe()
2494 tsi148_bridge->dma_list_empty = tsi148_dma_list_empty; in tsi148_probe()
2495 tsi148_bridge->irq_set = tsi148_irq_set; in tsi148_probe()
2496 tsi148_bridge->irq_generate = tsi148_irq_generate; in tsi148_probe()
2497 tsi148_bridge->lm_set = tsi148_lm_set; in tsi148_probe()
2498 tsi148_bridge->lm_get = tsi148_lm_get; in tsi148_probe()
2499 tsi148_bridge->lm_attach = tsi148_lm_attach; in tsi148_probe()
2500 tsi148_bridge->lm_detach = tsi148_lm_detach; in tsi148_probe()
2501 tsi148_bridge->slot_get = tsi148_slot_get; in tsi148_probe()
2502 tsi148_bridge->alloc_consistent = tsi148_alloc_consistent; in tsi148_probe()
2503 tsi148_bridge->free_consistent = tsi148_free_consistent; in tsi148_probe()
2518 retval = tsi148_crcsr_init(tsi148_bridge, pdev); in tsi148_probe()
2524 retval = vme_register_bridge(tsi148_bridge); in tsi148_probe()
2530 pci_set_drvdata(pdev, tsi148_bridge); in tsi148_probe()
2541 tsi148_crcsr_exit(tsi148_bridge, pdev); in tsi148_probe()
2545 list_for_each_safe(pos, n, &tsi148_bridge->lm_resources) { in tsi148_probe()
2552 list_for_each_safe(pos, n, &tsi148_bridge->dma_resources) { in tsi148_probe()
2559 list_for_each_safe(pos, n, &tsi148_bridge->slave_resources) { in tsi148_probe()
2566 list_for_each_safe(pos, n, &tsi148_bridge->master_resources) { in tsi148_probe()
2573 tsi148_irq_exit(tsi148_bridge, pdev); in tsi148_probe()
2584 kfree(tsi148_bridge); in tsi148_probe()
2599 struct vme_bridge *tsi148_bridge = pci_get_drvdata(pdev); in tsi148_remove() local
2601 bridge = tsi148_bridge->driver_priv; in tsi148_remove()
2645 tsi148_irq_exit(tsi148_bridge, pdev); in tsi148_remove()
2647 vme_unregister_bridge(tsi148_bridge); in tsi148_remove()
2649 tsi148_crcsr_exit(tsi148_bridge, pdev); in tsi148_remove()
2652 list_for_each_safe(pos, tmplist, &tsi148_bridge->dma_resources) { in tsi148_remove()
2659 list_for_each_safe(pos, tmplist, &tsi148_bridge->slave_resources) { in tsi148_remove()
2666 list_for_each_safe(pos, tmplist, &tsi148_bridge->master_resources) { in tsi148_remove()
2679 kfree(tsi148_bridge->driver_priv); in tsi148_remove()
2681 kfree(tsi148_bridge); in tsi148_remove()