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()
185 dev_err(tsi148_bridge->parent, "VME Bus Exception Overflow " in tsi148_VERR_irqhandler()
194 list_add_tail(&error->list, &tsi148_bridge->vme_errors); in tsi148_VERR_irqhandler()
196 dev_err(tsi148_bridge->parent, in tsi148_VERR_irqhandler()
202 dev_err(tsi148_bridge->parent, in tsi148_VERR_irqhandler()
226 static u32 tsi148_VIRQ_irqhandler(struct vme_bridge *tsi148_bridge, in tsi148_VIRQ_irqhandler() argument
232 bridge = tsi148_bridge->driver_priv; in tsi148_VIRQ_irqhandler()
243 vme_irq_handler(tsi148_bridge, i, vec); in tsi148_VIRQ_irqhandler()
259 struct vme_bridge *tsi148_bridge; in tsi148_irqhandler() local
262 tsi148_bridge = ptr; in tsi148_irqhandler()
264 bridge = tsi148_bridge->driver_priv; in tsi148_irqhandler()
289 serviced |= tsi148_MB_irqhandler(tsi148_bridge, stat); in tsi148_irqhandler()
293 serviced |= tsi148_PERR_irqhandler(tsi148_bridge); in tsi148_irqhandler()
297 serviced |= tsi148_VERR_irqhandler(tsi148_bridge); in tsi148_irqhandler()
308 serviced |= tsi148_VIRQ_irqhandler(tsi148_bridge, stat); in tsi148_irqhandler()
316 static int tsi148_irq_init(struct vme_bridge *tsi148_bridge) in tsi148_irq_init() argument
323 pdev = to_pci_dev(tsi148_bridge->parent); in tsi148_irq_init()
325 bridge = tsi148_bridge->driver_priv; in tsi148_irq_init()
328 INIT_LIST_HEAD(&tsi148_bridge->vme_errors); in tsi148_irq_init()
330 mutex_init(&tsi148_bridge->irq_mtx); in tsi148_irq_init()
335 driver_name, tsi148_bridge); in tsi148_irq_init()
337 dev_err(tsi148_bridge->parent, "Can't get assigned pci irq " in tsi148_irq_init()
382 static void tsi148_irq_exit(struct vme_bridge *tsi148_bridge, in tsi148_irq_exit() argument
385 struct tsi148_driver *bridge = tsi148_bridge->driver_priv; in tsi148_irq_exit()
395 free_irq(pdev->irq, tsi148_bridge); in tsi148_irq_exit()
416 static void tsi148_irq_set(struct vme_bridge *tsi148_bridge, int level, in tsi148_irq_set() argument
423 bridge = tsi148_bridge->driver_priv; in tsi148_irq_set()
436 pdev = to_pci_dev(tsi148_bridge->parent); in tsi148_irq_set()
454 static int tsi148_irq_generate(struct vme_bridge *tsi148_bridge, int level, in tsi148_irq_generate() argument
460 bridge = tsi148_bridge->driver_priv; in tsi148_irq_generate()
488 static struct vme_bus_error *tsi148_find_error(struct vme_bridge *tsi148_bridge, in tsi148_find_error() argument
506 list_for_each(err_pos, &tsi148_bridge->vme_errors) { in tsi148_find_error()
522 static void tsi148_clear_errors(struct vme_bridge *tsi148_bridge, in tsi148_clear_errors() argument
540 list_for_each_safe(err_pos, temp, &tsi148_bridge->vme_errors) { in tsi148_clear_errors()
565 struct vme_bridge *tsi148_bridge; in tsi148_slave_set() local
568 tsi148_bridge = image->parent; in tsi148_slave_set()
569 bridge = tsi148_bridge->driver_priv; in tsi148_slave_set()
591 dev_err(tsi148_bridge->parent, "Invalid address space\n"); in tsi148_slave_set()
609 dev_err(tsi148_bridge->parent, "Invalid VME base alignment\n"); in tsi148_slave_set()
613 dev_err(tsi148_bridge->parent, "Invalid VME bound alignment\n"); in tsi148_slave_set()
617 dev_err(tsi148_bridge->parent, "Invalid PCI Offset " in tsi148_slave_set()
806 struct vme_bridge *tsi148_bridge; in tsi148_alloc_resource() local
808 tsi148_bridge = image->parent; in tsi148_alloc_resource()
810 pdev = to_pci_dev(tsi148_bridge->parent); in tsi148_alloc_resource()
834 dev_err(tsi148_bridge->parent, "Unable to allocate " in tsi148_alloc_resource()
841 sprintf((char *)image->bus_resource.name, "%s.%d", tsi148_bridge->name, in tsi148_alloc_resource()
852 dev_err(tsi148_bridge->parent, "Failed to allocate mem " in tsi148_alloc_resource()
862 dev_err(tsi148_bridge->parent, "Failed to remap resource\n"); in tsi148_alloc_resource()
904 struct vme_bridge *tsi148_bridge; in tsi148_master_set() local
909 tsi148_bridge = image->parent; in tsi148_master_set()
911 bridge = tsi148_bridge->driver_priv; in tsi148_master_set()
913 pdev = to_pci_dev(tsi148_bridge->parent); in tsi148_master_set()
917 dev_err(tsi148_bridge->parent, "Invalid VME Window " in tsi148_master_set()
924 dev_err(tsi148_bridge->parent, "Size must be non-zero for " in tsi148_master_set()
939 dev_err(tsi148_bridge->parent, "Unable to allocate memory for " in tsi148_master_set()
968 dev_err(tsi148_bridge->parent, "Invalid PCI base alignment\n"); in tsi148_master_set()
974 dev_err(tsi148_bridge->parent, "Invalid PCI bound alignment\n"); in tsi148_master_set()
980 dev_err(tsi148_bridge->parent, "Invalid VME Offset " in tsi148_master_set()
1027 dev_warn(tsi148_bridge->parent, "Currently not setting " in tsi148_master_set()
1044 dev_err(tsi148_bridge->parent, "Invalid data width\n"); in tsi148_master_set()
1081 dev_err(tsi148_bridge->parent, "Invalid address space\n"); in tsi148_master_set()
1268 struct vme_bridge *tsi148_bridge; in tsi148_master_read() local
1273 tsi148_bridge = image->parent; in tsi148_master_read()
1326 vme_err = tsi148_find_error(tsi148_bridge, aspace, vme_base + offset, in tsi148_master_read()
1333 tsi148_clear_errors(tsi148_bridge, aspace, vme_base + offset, in tsi148_master_read()
1355 struct vme_bridge *tsi148_bridge; in tsi148_master_write() local
1358 tsi148_bridge = image->parent; in tsi148_master_write()
1360 bridge = tsi148_bridge->driver_priv; in tsi148_master_write()
1425 vme_err = tsi148_find_error(tsi148_bridge, aspace, vme_base + offset, in tsi148_master_write()
1428 dev_warn(tsi148_bridge->parent, "First VME write error detected" in tsi148_master_write()
1432 tsi148_clear_errors(tsi148_bridge, aspace, vme_base + offset, in tsi148_master_write()
1717 struct vme_bridge *tsi148_bridge; in tsi148_dma_list_add() local
1719 tsi148_bridge = list->parent->parent; in tsi148_dma_list_add()
1724 dev_err(tsi148_bridge->parent, "Failed to allocate memory for " in tsi148_dma_list_add()
1732 dev_err(tsi148_bridge->parent, "Descriptor not aligned to 8 " in tsi148_dma_list_add()
1781 tsi148_bridge->parent, &entry->descriptor.dsat, in tsi148_dma_list_add()
1787 dev_err(tsi148_bridge->parent, "Invalid source type\n"); in tsi148_dma_list_add()
1818 tsi148_bridge->parent, &entry->descriptor.ddat, in tsi148_dma_list_add()
1824 dev_err(tsi148_bridge->parent, "Invalid destination type\n"); in tsi148_dma_list_add()
1841 entry->dma_handle = dma_map_single(tsi148_bridge->parent, in tsi148_dma_list_add()
1865 static int tsi148_dma_busy(struct vme_bridge *tsi148_bridge, int channel) in tsi148_dma_busy() argument
1870 bridge = tsi148_bridge->driver_priv; in tsi148_dma_busy()
1894 struct vme_bridge *tsi148_bridge; in tsi148_dma_list_exec() local
1899 tsi148_bridge = ctrlr->parent; in tsi148_dma_list_exec()
1901 bridge = tsi148_bridge->driver_priv; in tsi148_dma_list_exec()
1924 entry->dma_handle = dma_map_single(tsi148_bridge->parent, in tsi148_dma_list_exec()
1955 dev_err(tsi148_bridge->parent, "DMA Error. DSTA=%08X\n", val); in tsi148_dma_list_exec()
1977 struct vme_bridge *tsi148_bridge = list->parent->parent; in tsi148_dma_list_empty() local
1984 dma_unmap_single(tsi148_bridge->parent, entry->dma_handle, in tsi148_dma_list_empty()
2004 struct vme_bridge *tsi148_bridge; in tsi148_lm_set() local
2007 tsi148_bridge = lm->parent; in tsi148_lm_set()
2009 bridge = tsi148_bridge->driver_priv; in tsi148_lm_set()
2017 dev_err(tsi148_bridge->parent, "Location monitor " in tsi148_lm_set()
2038 dev_err(tsi148_bridge->parent, "Invalid address space\n"); in tsi148_lm_set()
2121 struct vme_bridge *tsi148_bridge; in tsi148_lm_attach() local
2124 tsi148_bridge = lm->parent; in tsi148_lm_attach()
2126 bridge = tsi148_bridge->driver_priv; in tsi148_lm_attach()
2134 dev_err(tsi148_bridge->parent, "Location monitor not properly " in tsi148_lm_attach()
2142 dev_err(tsi148_bridge->parent, "Existing callback attached\n"); in tsi148_lm_attach()
2212 static int tsi148_slot_get(struct vme_bridge *tsi148_bridge) in tsi148_slot_get() argument
2217 bridge = tsi148_bridge->driver_priv; in tsi148_slot_get()
2262 static int tsi148_crcsr_init(struct vme_bridge *tsi148_bridge, in tsi148_crcsr_init() argument
2270 bridge = tsi148_bridge->driver_priv; in tsi148_crcsr_init()
2276 dev_err(tsi148_bridge->parent, "Failed to allocate memory for " in tsi148_crcsr_init()
2290 vstat = tsi148_slot_get(tsi148_bridge); in tsi148_crcsr_init()
2294 dev_info(tsi148_bridge->parent, "Setting CR/CSR offset\n"); in tsi148_crcsr_init()
2297 dev_info(tsi148_bridge->parent, "CR/CSR Offset: %d\n", cbar); in tsi148_crcsr_init()
2301 dev_info(tsi148_bridge->parent, "CR/CSR already enabled\n"); in tsi148_crcsr_init()
2303 dev_info(tsi148_bridge->parent, "Enabling CR/CSR space\n"); in tsi148_crcsr_init()
2317 dev_err(tsi148_bridge->parent, "Configuring flush image" in tsi148_crcsr_init()
2325 static void tsi148_crcsr_exit(struct vme_bridge *tsi148_bridge, in tsi148_crcsr_exit() argument
2331 bridge = tsi148_bridge->driver_priv; in tsi148_crcsr_exit()
2351 struct vme_bridge *tsi148_bridge; in tsi148_probe() local
2361 tsi148_bridge = kzalloc(sizeof(struct vme_bridge), GFP_KERNEL); in tsi148_probe()
2362 if (tsi148_bridge == NULL) { in tsi148_probe()
2377 tsi148_bridge->driver_priv = tsi148_device; in tsi148_probe()
2417 tsi148_bridge->parent = &pdev->dev; in tsi148_probe()
2418 strcpy(tsi148_bridge->name, driver_name); in tsi148_probe()
2421 retval = tsi148_irq_init(tsi148_bridge); in tsi148_probe()
2444 tsi148_device->flush_image->parent = tsi148_bridge; in tsi148_probe()
2454 INIT_LIST_HEAD(&tsi148_bridge->master_resources); in tsi148_probe()
2464 master_image->parent = tsi148_bridge; in tsi148_probe()
2480 &tsi148_bridge->master_resources); in tsi148_probe()
2484 INIT_LIST_HEAD(&tsi148_bridge->slave_resources); in tsi148_probe()
2494 slave_image->parent = tsi148_bridge; in tsi148_probe()
2505 &tsi148_bridge->slave_resources); in tsi148_probe()
2509 INIT_LIST_HEAD(&tsi148_bridge->dma_resources); in tsi148_probe()
2519 dma_ctrlr->parent = tsi148_bridge; in tsi148_probe()
2530 &tsi148_bridge->dma_resources); in tsi148_probe()
2534 INIT_LIST_HEAD(&tsi148_bridge->lm_resources); in tsi148_probe()
2542 lm->parent = tsi148_bridge; in tsi148_probe()
2547 list_add_tail(&lm->list, &tsi148_bridge->lm_resources); in tsi148_probe()
2549 tsi148_bridge->slave_get = tsi148_slave_get; in tsi148_probe()
2550 tsi148_bridge->slave_set = tsi148_slave_set; in tsi148_probe()
2551 tsi148_bridge->master_get = tsi148_master_get; in tsi148_probe()
2552 tsi148_bridge->master_set = tsi148_master_set; in tsi148_probe()
2553 tsi148_bridge->master_read = tsi148_master_read; in tsi148_probe()
2554 tsi148_bridge->master_write = tsi148_master_write; in tsi148_probe()
2555 tsi148_bridge->master_rmw = tsi148_master_rmw; in tsi148_probe()
2556 tsi148_bridge->dma_list_add = tsi148_dma_list_add; in tsi148_probe()
2557 tsi148_bridge->dma_list_exec = tsi148_dma_list_exec; in tsi148_probe()
2558 tsi148_bridge->dma_list_empty = tsi148_dma_list_empty; in tsi148_probe()
2559 tsi148_bridge->irq_set = tsi148_irq_set; in tsi148_probe()
2560 tsi148_bridge->irq_generate = tsi148_irq_generate; in tsi148_probe()
2561 tsi148_bridge->lm_set = tsi148_lm_set; in tsi148_probe()
2562 tsi148_bridge->lm_get = tsi148_lm_get; in tsi148_probe()
2563 tsi148_bridge->lm_attach = tsi148_lm_attach; in tsi148_probe()
2564 tsi148_bridge->lm_detach = tsi148_lm_detach; in tsi148_probe()
2565 tsi148_bridge->slot_get = tsi148_slot_get; in tsi148_probe()
2566 tsi148_bridge->alloc_consistent = tsi148_alloc_consistent; in tsi148_probe()
2567 tsi148_bridge->free_consistent = tsi148_free_consistent; in tsi148_probe()
2582 retval = tsi148_crcsr_init(tsi148_bridge, pdev); in tsi148_probe()
2588 retval = vme_register_bridge(tsi148_bridge); in tsi148_probe()
2594 pci_set_drvdata(pdev, tsi148_bridge); in tsi148_probe()
2605 tsi148_crcsr_exit(tsi148_bridge, pdev); in tsi148_probe()
2609 list_for_each_safe(pos, n, &tsi148_bridge->lm_resources) { in tsi148_probe()
2616 list_for_each_safe(pos, n, &tsi148_bridge->dma_resources) { in tsi148_probe()
2623 list_for_each_safe(pos, n, &tsi148_bridge->slave_resources) { in tsi148_probe()
2630 list_for_each_safe(pos, n, &tsi148_bridge->master_resources) { in tsi148_probe()
2637 tsi148_irq_exit(tsi148_bridge, pdev); in tsi148_probe()
2648 kfree(tsi148_bridge); in tsi148_probe()
2663 struct vme_bridge *tsi148_bridge = pci_get_drvdata(pdev); in tsi148_remove() local
2665 bridge = tsi148_bridge->driver_priv; in tsi148_remove()
2709 tsi148_irq_exit(tsi148_bridge, pdev); in tsi148_remove()
2711 vme_unregister_bridge(tsi148_bridge); in tsi148_remove()
2713 tsi148_crcsr_exit(tsi148_bridge, pdev); in tsi148_remove()
2716 list_for_each_safe(pos, tmplist, &tsi148_bridge->dma_resources) { in tsi148_remove()
2723 list_for_each_safe(pos, tmplist, &tsi148_bridge->slave_resources) { in tsi148_remove()
2730 list_for_each_safe(pos, tmplist, &tsi148_bridge->master_resources) { in tsi148_remove()
2743 kfree(tsi148_bridge->driver_priv); in tsi148_remove()
2745 kfree(tsi148_bridge); in tsi148_remove()