Lines Matching refs:tpci200

48 	struct tpci200_board *tpci200;  in check_slot()  local
54 tpci200 = dev_get_drvdata(dev->bus->parent); in check_slot()
56 if (tpci200 == NULL) { in check_slot()
68 return tpci200; in check_slot()
71 static void tpci200_clear_mask(struct tpci200_board *tpci200, in tpci200_clear_mask() argument
75 spin_lock_irqsave(&tpci200->regs_lock, flags); in tpci200_clear_mask()
77 spin_unlock_irqrestore(&tpci200->regs_lock, flags); in tpci200_clear_mask()
80 static void tpci200_set_mask(struct tpci200_board *tpci200, in tpci200_set_mask() argument
84 spin_lock_irqsave(&tpci200->regs_lock, flags); in tpci200_set_mask()
86 spin_unlock_irqrestore(&tpci200->regs_lock, flags); in tpci200_set_mask()
89 static void tpci200_unregister(struct tpci200_board *tpci200) in tpci200_unregister() argument
91 free_irq(tpci200->info->pdev->irq, (void *) tpci200); in tpci200_unregister()
93 pci_iounmap(tpci200->info->pdev, tpci200->info->interface_regs); in tpci200_unregister()
95 pci_release_region(tpci200->info->pdev, TPCI200_IP_INTERFACE_BAR); in tpci200_unregister()
96 pci_release_region(tpci200->info->pdev, TPCI200_IO_ID_INT_SPACES_BAR); in tpci200_unregister()
97 pci_release_region(tpci200->info->pdev, TPCI200_MEM16_SPACE_BAR); in tpci200_unregister()
98 pci_release_region(tpci200->info->pdev, TPCI200_MEM8_SPACE_BAR); in tpci200_unregister()
100 pci_disable_device(tpci200->info->pdev); in tpci200_unregister()
103 static void tpci200_enable_irq(struct tpci200_board *tpci200, in tpci200_enable_irq() argument
106 tpci200_set_mask(tpci200, in tpci200_enable_irq()
107 &tpci200->info->interface_regs->control[islot], in tpci200_enable_irq()
111 static void tpci200_disable_irq(struct tpci200_board *tpci200, in tpci200_disable_irq() argument
114 tpci200_clear_mask(tpci200, in tpci200_disable_irq()
115 &tpci200->info->interface_regs->control[islot], in tpci200_disable_irq()
132 struct tpci200_board *tpci200 = (struct tpci200_board *) dev_id; in tpci200_interrupt() local
139 status_reg = ioread16(&tpci200->info->interface_regs->status); in tpci200_interrupt()
150 slot_irq = rcu_dereference(tpci200->slots[i].irq); in tpci200_interrupt()
153 dev_info(&tpci200->info->pdev->dev, in tpci200_interrupt()
155 tpci200->number, i); in tpci200_interrupt()
156 tpci200_disable_irq(tpci200, i); in tpci200_interrupt()
167 struct tpci200_board *tpci200; in tpci200_free_irq() local
169 tpci200 = check_slot(dev); in tpci200_free_irq()
170 if (tpci200 == NULL) in tpci200_free_irq()
173 if (mutex_lock_interruptible(&tpci200->mutex)) in tpci200_free_irq()
176 if (tpci200->slots[dev->slot].irq == NULL) { in tpci200_free_irq()
177 mutex_unlock(&tpci200->mutex); in tpci200_free_irq()
181 tpci200_disable_irq(tpci200, dev->slot); in tpci200_free_irq()
182 slot_irq = tpci200->slots[dev->slot].irq; in tpci200_free_irq()
184 RCU_INIT_POINTER(tpci200->slots[dev->slot].irq, NULL); in tpci200_free_irq()
187 mutex_unlock(&tpci200->mutex); in tpci200_free_irq()
196 struct tpci200_board *tpci200; in tpci200_request_irq() local
198 tpci200 = check_slot(dev); in tpci200_request_irq()
199 if (tpci200 == NULL) in tpci200_request_irq()
202 if (mutex_lock_interruptible(&tpci200->mutex)) in tpci200_request_irq()
205 if (tpci200->slots[dev->slot].irq != NULL) { in tpci200_request_irq()
233 rcu_assign_pointer(tpci200->slots[dev->slot].irq, slot_irq); in tpci200_request_irq()
234 tpci200_enable_irq(tpci200, dev->slot); in tpci200_request_irq()
237 mutex_unlock(&tpci200->mutex); in tpci200_request_irq()
241 static int tpci200_register(struct tpci200_board *tpci200) in tpci200_register() argument
248 if (pci_enable_device(tpci200->info->pdev) < 0) in tpci200_register()
252 res = pci_request_region(tpci200->info->pdev, TPCI200_IP_INTERFACE_BAR, in tpci200_register()
255 dev_err(&tpci200->info->pdev->dev, in tpci200_register()
257 tpci200->info->pdev->bus->number, in tpci200_register()
258 tpci200->info->pdev->devfn); in tpci200_register()
263 res = pci_request_region(tpci200->info->pdev, in tpci200_register()
267 dev_err(&tpci200->info->pdev->dev, in tpci200_register()
269 tpci200->info->pdev->bus->number, in tpci200_register()
270 tpci200->info->pdev->devfn); in tpci200_register()
275 res = pci_request_region(tpci200->info->pdev, TPCI200_MEM8_SPACE_BAR, in tpci200_register()
278 dev_err(&tpci200->info->pdev->dev, in tpci200_register()
280 tpci200->info->pdev->bus->number, in tpci200_register()
281 tpci200->info->pdev->devfn); in tpci200_register()
286 res = pci_request_region(tpci200->info->pdev, TPCI200_MEM16_SPACE_BAR, in tpci200_register()
289 dev_err(&tpci200->info->pdev->dev, in tpci200_register()
291 tpci200->info->pdev->bus->number, in tpci200_register()
292 tpci200->info->pdev->devfn); in tpci200_register()
297 tpci200->info->interface_regs = in tpci200_register()
298 ioremap(pci_resource_start(tpci200->info->pdev, in tpci200_register()
301 if (!tpci200->info->interface_regs) { in tpci200_register()
302 dev_err(&tpci200->info->pdev->dev, in tpci200_register()
304 tpci200->info->pdev->bus->number, in tpci200_register()
305 tpci200->info->pdev->devfn); in tpci200_register()
311 spin_lock_init(&tpci200->regs_lock); in tpci200_register()
313 ioidint_base = pci_resource_start(tpci200->info->pdev, in tpci200_register()
315 tpci200->mod_mem[IPACK_IO_SPACE] = ioidint_base + TPCI200_IO_SPACE_OFF; in tpci200_register()
316 tpci200->mod_mem[IPACK_ID_SPACE] = ioidint_base + TPCI200_ID_SPACE_OFF; in tpci200_register()
317 tpci200->mod_mem[IPACK_INT_SPACE] = in tpci200_register()
319 tpci200->mod_mem[IPACK_MEM8_SPACE] = in tpci200_register()
320 pci_resource_start(tpci200->info->pdev, in tpci200_register()
322 tpci200->mod_mem[IPACK_MEM16_SPACE] = in tpci200_register()
323 pci_resource_start(tpci200->info->pdev, in tpci200_register()
336 writew(slot_ctrl, &tpci200->info->interface_regs->control[i]); in tpci200_register()
338 res = request_irq(tpci200->info->pdev->irq, in tpci200_register()
340 KBUILD_MODNAME, (void *) tpci200); in tpci200_register()
342 dev_err(&tpci200->info->pdev->dev, in tpci200_register()
344 tpci200->info->pdev->bus->number, in tpci200_register()
345 tpci200->info->pdev->devfn); in tpci200_register()
352 pci_iounmap(tpci200->info->pdev, tpci200->info->interface_regs); in tpci200_register()
354 pci_release_region(tpci200->info->pdev, TPCI200_MEM16_SPACE_BAR); in tpci200_register()
356 pci_release_region(tpci200->info->pdev, TPCI200_MEM8_SPACE_BAR); in tpci200_register()
358 pci_release_region(tpci200->info->pdev, TPCI200_IO_ID_INT_SPACES_BAR); in tpci200_register()
360 pci_release_region(tpci200->info->pdev, TPCI200_IP_INTERFACE_BAR); in tpci200_register()
362 pci_disable_device(tpci200->info->pdev); in tpci200_register()
368 struct tpci200_board *tpci200 = check_slot(dev); in tpci200_get_clockrate() local
371 if (!tpci200) in tpci200_get_clockrate()
374 addr = &tpci200->info->interface_regs->control[dev->slot]; in tpci200_get_clockrate()
380 struct tpci200_board *tpci200 = check_slot(dev); in tpci200_set_clockrate() local
383 if (!tpci200) in tpci200_set_clockrate()
386 addr = &tpci200->info->interface_regs->control[dev->slot]; in tpci200_set_clockrate()
390 tpci200_clear_mask(tpci200, addr, TPCI200_CLK32); in tpci200_set_clockrate()
393 tpci200_set_mask(tpci200, addr, TPCI200_CLK32); in tpci200_set_clockrate()
403 struct tpci200_board *tpci200 = check_slot(dev); in tpci200_get_error() local
407 if (!tpci200) in tpci200_get_error()
410 addr = &tpci200->info->interface_regs->status; in tpci200_get_error()
417 struct tpci200_board *tpci200 = check_slot(dev); in tpci200_get_timeout() local
421 if (!tpci200) in tpci200_get_timeout()
424 addr = &tpci200->info->interface_regs->status; in tpci200_get_timeout()
432 struct tpci200_board *tpci200 = check_slot(dev); in tpci200_reset_timeout() local
436 if (!tpci200) in tpci200_reset_timeout()
439 addr = &tpci200->info->interface_regs->status; in tpci200_reset_timeout()
446 static void tpci200_uninstall(struct tpci200_board *tpci200) in tpci200_uninstall() argument
448 tpci200_unregister(tpci200); in tpci200_uninstall()
449 kfree(tpci200->slots); in tpci200_uninstall()
462 static int tpci200_install(struct tpci200_board *tpci200) in tpci200_install() argument
466 tpci200->slots = kcalloc(TPCI200_NB_SLOT, sizeof(struct tpci200_slot), in tpci200_install()
468 if (tpci200->slots == NULL) in tpci200_install()
471 res = tpci200_register(tpci200); in tpci200_install()
473 kfree(tpci200->slots); in tpci200_install()
474 tpci200->slots = NULL; in tpci200_install()
478 mutex_init(&tpci200->mutex); in tpci200_install()
487 static int tpci200_create_device(struct tpci200_board *tpci200, int i) in tpci200_create_device() argument
496 dev->bus = tpci200->info->ipack_bus; in tpci200_create_device()
501 tpci200->mod_mem[space] in tpci200_create_device()
523 struct tpci200_board *tpci200; in tpci200_pci_probe() local
526 tpci200 = kzalloc(sizeof(struct tpci200_board), GFP_KERNEL); in tpci200_pci_probe()
527 if (!tpci200) in tpci200_pci_probe()
530 tpci200->info = kzalloc(sizeof(struct tpci200_infos), GFP_KERNEL); in tpci200_pci_probe()
531 if (!tpci200->info) { in tpci200_pci_probe()
546 tpci200->info->cfg_regs = ioremap( in tpci200_pci_probe()
549 if (!tpci200->info->cfg_regs) { in tpci200_pci_probe()
558 reg32 = ioread32(tpci200->info->cfg_regs + LAS1_DESC); in tpci200_pci_probe()
560 iowrite32(reg32, tpci200->info->cfg_regs + LAS1_DESC); in tpci200_pci_probe()
562 reg32 = ioread32(tpci200->info->cfg_regs + LAS2_DESC); in tpci200_pci_probe()
564 iowrite32(reg32, tpci200->info->cfg_regs + LAS2_DESC); in tpci200_pci_probe()
567 tpci200->info->pdev = pdev; in tpci200_pci_probe()
568 tpci200->info->id_table = (struct pci_device_id *)id; in tpci200_pci_probe()
571 ret = tpci200_install(tpci200); in tpci200_pci_probe()
579 tpci200->info->ipack_bus = ipack_bus_register(&pdev->dev, in tpci200_pci_probe()
583 if (!tpci200->info->ipack_bus) { in tpci200_pci_probe()
591 tpci200->number = tpci200->info->ipack_bus->bus_nr; in tpci200_pci_probe()
592 dev_set_drvdata(&pdev->dev, tpci200); in tpci200_pci_probe()
595 tpci200_create_device(tpci200, i); in tpci200_pci_probe()
599 tpci200_uninstall(tpci200); in tpci200_pci_probe()
601 pci_iounmap(tpci200->info->pdev, tpci200->info->cfg_regs); in tpci200_pci_probe()
605 kfree(tpci200->info); in tpci200_pci_probe()
608 kfree(tpci200); in tpci200_pci_probe()
612 static void __tpci200_pci_remove(struct tpci200_board *tpci200) in __tpci200_pci_remove() argument
614 ipack_bus_unregister(tpci200->info->ipack_bus); in __tpci200_pci_remove()
615 tpci200_uninstall(tpci200); in __tpci200_pci_remove()
617 pci_iounmap(tpci200->info->pdev, tpci200->info->cfg_regs); in __tpci200_pci_remove()
619 pci_release_region(tpci200->info->pdev, TPCI200_CFG_MEM_BAR); in __tpci200_pci_remove()
621 pci_dev_put(tpci200->info->pdev); in __tpci200_pci_remove()
623 kfree(tpci200->info); in __tpci200_pci_remove()
624 kfree(tpci200); in __tpci200_pci_remove()
629 struct tpci200_board *tpci200 = pci_get_drvdata(dev); in tpci200_pci_remove() local
631 __tpci200_pci_remove(tpci200); in tpci200_pci_remove()