• Home
  • Raw
  • Download

Lines Matching full:link

72  * A opencapi link can be used be by several PCI functions. We have
73 * one link per device slot.
79 struct link { struct
182 struct link *link = (struct link *) data; in xsl_fault_handler() local
183 struct spa *spa = link->spa; in xsl_fault_handler()
259 static int setup_xsl_irq(struct pci_dev *dev, struct link *link) in setup_xsl_irq() argument
261 struct spa *spa = link->spa; in setup_xsl_irq()
274 link->domain, link->bus, link->dev); in setup_xsl_irq()
282 * number of interrupts. Could we have an IRQ domain per link? in setup_xsl_irq()
296 link); in setup_xsl_irq()
309 static void release_xsl_irq(struct link *link) in release_xsl_irq() argument
311 struct spa *spa = link->spa; in release_xsl_irq()
314 free_irq(spa->virq, link); in release_xsl_irq()
321 static int alloc_spa(struct pci_dev *dev, struct link *link) in alloc_spa() argument
341 pr_debug("Allocated SPA for %x:%x:%x at %p\n", link->domain, link->bus, in alloc_spa()
342 link->dev, spa->spa_mem); in alloc_spa()
344 link->spa = spa; in alloc_spa()
348 static void free_spa(struct link *link) in free_spa() argument
350 struct spa *spa = link->spa; in free_spa()
352 pr_debug("Freeing SPA for %x:%x:%x\n", link->domain, link->bus, in free_spa()
353 link->dev); in free_spa()
358 link->spa = NULL; in free_spa()
362 static int alloc_link(struct pci_dev *dev, int PE_mask, struct link **out_link) in alloc_link()
364 struct link *link; in alloc_link() local
367 link = kzalloc(sizeof(struct link), GFP_KERNEL); in alloc_link()
368 if (!link) in alloc_link()
371 kref_init(&link->ref); in alloc_link()
372 link->domain = pci_domain_nr(dev->bus); in alloc_link()
373 link->bus = dev->bus->number; in alloc_link()
374 link->dev = PCI_SLOT(dev->devfn); in alloc_link()
375 atomic_set(&link->irq_available, MAX_IRQ_PER_LINK); in alloc_link()
377 rc = alloc_spa(dev, link); in alloc_link()
381 rc = setup_xsl_irq(dev, link); in alloc_link()
386 rc = pnv_ocxl_spa_setup(dev, link->spa->spa_mem, PE_mask, in alloc_link()
387 &link->platform_data); in alloc_link()
391 *out_link = link; in alloc_link()
395 release_xsl_irq(link); in alloc_link()
397 free_spa(link); in alloc_link()
399 kfree(link); in alloc_link()
403 static void free_link(struct link *link) in free_link() argument
405 release_xsl_irq(link); in free_link()
406 free_spa(link); in free_link()
407 kfree(link); in free_link()
413 struct link *link; in ocxl_link_setup() local
416 list_for_each_entry(link, &links_list, list) { in ocxl_link_setup()
417 /* The functions of a device all share the same link */ in ocxl_link_setup()
418 if (link->domain == pci_domain_nr(dev->bus) && in ocxl_link_setup()
419 link->bus == dev->bus->number && in ocxl_link_setup()
420 link->dev == PCI_SLOT(dev->devfn)) { in ocxl_link_setup()
421 kref_get(&link->ref); in ocxl_link_setup()
422 *link_handle = link; in ocxl_link_setup()
426 rc = alloc_link(dev, PE_mask, &link); in ocxl_link_setup()
430 list_add(&link->list, &links_list); in ocxl_link_setup()
431 *link_handle = link; in ocxl_link_setup()
440 struct link *link = container_of(ref, struct link, ref); in release_xsl() local
442 list_del(&link->list); in release_xsl()
444 pnv_ocxl_spa_release(link->platform_data); in release_xsl()
445 free_link(link); in release_xsl()
450 struct link *link = (struct link *) link_handle; in ocxl_link_release() local
453 kref_put(&link->ref, release_xsl); in ocxl_link_release()
486 struct link *link = (struct link *) link_handle; in ocxl_link_add_pe() local
487 struct spa *spa = link->spa; in ocxl_link_add_pe()
556 struct link *link = (struct link *) link_handle; in ocxl_link_update_pe() local
557 struct spa *spa = link->spa; in ocxl_link_update_pe()
583 rc = pnv_ocxl_spa_remove_pe_from_cache(link->platform_data, pe_handle); in ocxl_link_update_pe()
592 struct link *link = (struct link *) link_handle; in ocxl_link_remove_pe() local
593 struct spa *spa = link->spa; in ocxl_link_remove_pe()
645 rc = pnv_ocxl_spa_remove_pe_from_cache(link->platform_data, pe_handle); in ocxl_link_remove_pe()
664 struct link *link = (struct link *) link_handle; in ocxl_link_irq_alloc() local
668 if (atomic_dec_if_positive(&link->irq_available) < 0) in ocxl_link_irq_alloc()
673 atomic_inc(&link->irq_available); in ocxl_link_irq_alloc()
685 struct link *link = (struct link *) link_handle; in ocxl_link_free_irq() local
688 atomic_inc(&link->irq_available); in ocxl_link_free_irq()