Lines Matching refs:tpci200
12 #include "tpci200.h"
46 struct tpci200_board *tpci200;
52 tpci200 = dev_get_drvdata(dev->bus->parent);
54 if (tpci200 == NULL) {
61 "Slot [%d:%d] doesn't exist! Last tpci200 slot is %d.\n",
66 return tpci200;
69 static void tpci200_clear_mask(struct tpci200_board *tpci200,
73 spin_lock_irqsave(&tpci200->regs_lock, flags);
75 spin_unlock_irqrestore(&tpci200->regs_lock, flags);
78 static void tpci200_set_mask(struct tpci200_board *tpci200,
82 spin_lock_irqsave(&tpci200->regs_lock, flags);
84 spin_unlock_irqrestore(&tpci200->regs_lock, flags);
87 static void tpci200_unregister(struct tpci200_board *tpci200)
89 free_irq(tpci200->info->pdev->irq, (void *) tpci200);
91 pci_iounmap(tpci200->info->pdev, tpci200->info->interface_regs);
93 pci_release_region(tpci200->info->pdev, TPCI200_IP_INTERFACE_BAR);
94 pci_release_region(tpci200->info->pdev, TPCI200_IO_ID_INT_SPACES_BAR);
95 pci_release_region(tpci200->info->pdev, TPCI200_MEM16_SPACE_BAR);
96 pci_release_region(tpci200->info->pdev, TPCI200_MEM8_SPACE_BAR);
98 pci_disable_device(tpci200->info->pdev);
101 static void tpci200_enable_irq(struct tpci200_board *tpci200,
104 tpci200_set_mask(tpci200,
105 &tpci200->info->interface_regs->control[islot],
109 static void tpci200_disable_irq(struct tpci200_board *tpci200,
112 tpci200_clear_mask(tpci200,
113 &tpci200->info->interface_regs->control[islot],
130 struct tpci200_board *tpci200 = (struct tpci200_board *) dev_id;
137 status_reg = ioread16(&tpci200->info->interface_regs->status);
148 slot_irq = rcu_dereference(tpci200->slots[i].irq);
151 dev_info(&tpci200->info->pdev->dev,
153 tpci200->number, i);
154 tpci200_disable_irq(tpci200, i);
165 struct tpci200_board *tpci200;
167 tpci200 = check_slot(dev);
168 if (tpci200 == NULL)
171 if (mutex_lock_interruptible(&tpci200->mutex))
174 if (tpci200->slots[dev->slot].irq == NULL) {
175 mutex_unlock(&tpci200->mutex);
179 tpci200_disable_irq(tpci200, dev->slot);
180 slot_irq = tpci200->slots[dev->slot].irq;
182 RCU_INIT_POINTER(tpci200->slots[dev->slot].irq, NULL);
185 mutex_unlock(&tpci200->mutex);
194 struct tpci200_board *tpci200;
196 tpci200 = check_slot(dev);
197 if (tpci200 == NULL)
200 if (mutex_lock_interruptible(&tpci200->mutex))
203 if (tpci200->slots[dev->slot].irq != NULL) {
231 rcu_assign_pointer(tpci200->slots[dev->slot].irq, slot_irq);
232 tpci200_enable_irq(tpci200, dev->slot);
235 mutex_unlock(&tpci200->mutex);
239 static int tpci200_register(struct tpci200_board *tpci200)
246 if (pci_enable_device(tpci200->info->pdev) < 0)
250 res = pci_request_region(tpci200->info->pdev, TPCI200_IP_INTERFACE_BAR,
253 dev_err(&tpci200->info->pdev->dev,
255 tpci200->info->pdev->bus->number,
256 tpci200->info->pdev->devfn);
261 res = pci_request_region(tpci200->info->pdev,
265 dev_err(&tpci200->info->pdev->dev,
267 tpci200->info->pdev->bus->number,
268 tpci200->info->pdev->devfn);
273 res = pci_request_region(tpci200->info->pdev, TPCI200_MEM8_SPACE_BAR,
276 dev_err(&tpci200->info->pdev->dev,
278 tpci200->info->pdev->bus->number,
279 tpci200->info->pdev->devfn);
284 res = pci_request_region(tpci200->info->pdev, TPCI200_MEM16_SPACE_BAR,
287 dev_err(&tpci200->info->pdev->dev,
289 tpci200->info->pdev->bus->number,
290 tpci200->info->pdev->devfn);
294 /* Map internal tpci200 driver user space */
295 tpci200->info->interface_regs =
296 ioremap(pci_resource_start(tpci200->info->pdev,
299 if (!tpci200->info->interface_regs) {
300 dev_err(&tpci200->info->pdev->dev,
302 tpci200->info->pdev->bus->number,
303 tpci200->info->pdev->devfn);
309 spin_lock_init(&tpci200->regs_lock);
311 ioidint_base = pci_resource_start(tpci200->info->pdev,
313 tpci200->mod_mem[IPACK_IO_SPACE] = ioidint_base + TPCI200_IO_SPACE_OFF;
314 tpci200->mod_mem[IPACK_ID_SPACE] = ioidint_base + TPCI200_ID_SPACE_OFF;
315 tpci200->mod_mem[IPACK_INT_SPACE] =
317 tpci200->mod_mem[IPACK_MEM8_SPACE] =
318 pci_resource_start(tpci200->info->pdev,
320 tpci200->mod_mem[IPACK_MEM16_SPACE] =
321 pci_resource_start(tpci200->info->pdev,
334 writew(slot_ctrl, &tpci200->info->interface_regs->control[i]);
336 res = request_irq(tpci200->info->pdev->irq,
338 KBUILD_MODNAME, (void *) tpci200);
340 dev_err(&tpci200->info->pdev->dev,
342 tpci200->info->pdev->bus->number,
343 tpci200->info->pdev->devfn);
350 pci_iounmap(tpci200->info->pdev, tpci200->info->interface_regs);
352 pci_release_region(tpci200->info->pdev, TPCI200_MEM16_SPACE_BAR);
354 pci_release_region(tpci200->info->pdev, TPCI200_MEM8_SPACE_BAR);
356 pci_release_region(tpci200->info->pdev, TPCI200_IO_ID_INT_SPACES_BAR);
358 pci_release_region(tpci200->info->pdev, TPCI200_IP_INTERFACE_BAR);
360 pci_disable_device(tpci200->info->pdev);
366 struct tpci200_board *tpci200 = check_slot(dev);
369 if (!tpci200)
372 addr = &tpci200->info->interface_regs->control[dev->slot];
378 struct tpci200_board *tpci200 = check_slot(dev);
381 if (!tpci200)
384 addr = &tpci200->info->interface_regs->control[dev->slot];
388 tpci200_clear_mask(tpci200, addr, TPCI200_CLK32);
391 tpci200_set_mask(tpci200, addr, TPCI200_CLK32);
401 struct tpci200_board *tpci200 = check_slot(dev);
405 if (!tpci200)
408 addr = &tpci200->info->interface_regs->status;
415 struct tpci200_board *tpci200 = check_slot(dev);
419 if (!tpci200)
422 addr = &tpci200->info->interface_regs->status;
430 struct tpci200_board *tpci200 = check_slot(dev);
434 if (!tpci200)
437 addr = &tpci200->info->interface_regs->status;
444 static void tpci200_uninstall(struct tpci200_board *tpci200)
446 tpci200_unregister(tpci200);
447 kfree(tpci200->slots);
460 static int tpci200_install(struct tpci200_board *tpci200)
464 tpci200->slots = kcalloc(TPCI200_NB_SLOT, sizeof(struct tpci200_slot),
466 if (tpci200->slots == NULL)
469 res = tpci200_register(tpci200);
471 kfree(tpci200->slots);
472 tpci200->slots = NULL;
476 mutex_init(&tpci200->mutex);
485 static int tpci200_create_device(struct tpci200_board *tpci200, int i)
494 dev->bus = tpci200->info->ipack_bus;
499 tpci200->mod_mem[space]
521 struct tpci200_board *tpci200;
524 tpci200 = kzalloc(sizeof(struct tpci200_board), GFP_KERNEL);
525 if (!tpci200)
528 tpci200->info = kzalloc(sizeof(struct tpci200_infos), GFP_KERNEL);
529 if (!tpci200->info) {
544 tpci200->info->cfg_regs = ioremap(
547 if (!tpci200->info->cfg_regs) {
556 reg32 = ioread32(tpci200->info->cfg_regs + LAS1_DESC);
558 iowrite32(reg32, tpci200->info->cfg_regs + LAS1_DESC);
560 reg32 = ioread32(tpci200->info->cfg_regs + LAS2_DESC);
562 iowrite32(reg32, tpci200->info->cfg_regs + LAS2_DESC);
565 tpci200->info->pdev = pdev;
566 tpci200->info->id_table = (struct pci_device_id *)id;
569 ret = tpci200_install(tpci200);
571 dev_err(&pdev->dev, "error during tpci200 install\n");
577 tpci200->info->ipack_bus = ipack_bus_register(&pdev->dev,
581 if (!tpci200->info->ipack_bus) {
589 tpci200->number = tpci200->info->ipack_bus->bus_nr;
590 dev_set_drvdata(&pdev->dev, tpci200);
593 tpci200_create_device(tpci200, i);
597 tpci200_uninstall(tpci200);
599 pci_iounmap(tpci200->info->pdev, tpci200->info->cfg_regs);
603 kfree(tpci200->info);
606 kfree(tpci200);
610 static void __tpci200_pci_remove(struct tpci200_board *tpci200)
612 ipack_bus_unregister(tpci200->info->ipack_bus);
613 tpci200_uninstall(tpci200);
615 pci_iounmap(tpci200->info->pdev, tpci200->info->cfg_regs);
617 pci_release_region(tpci200->info->pdev, TPCI200_CFG_MEM_BAR);
619 pci_dev_put(tpci200->info->pdev);
621 kfree(tpci200->info);
622 kfree(tpci200);
627 struct tpci200_board *tpci200 = pci_get_drvdata(dev);
629 __tpci200_pci_remove(tpci200);
641 .name = "tpci200",