Lines Matching full:msi

16 #include <linux/msi.h>
109 /* MSI interrupt status mask bits */
146 struct nwl_msi { /* MSI information */
170 struct nwl_msi msi; member
345 struct nwl_msi *msi; in nwl_pcie_handle_msi_irq() local
350 msi = &pcie->msi; in nwl_pcie_handle_msi_irq()
355 virq = irq_find_mapping(msi->dev_domain, bit); in nwl_pcie_handle_msi_irq()
439 .name = "nwl_pcie:msi",
470 .name = "Xilinx MSI",
479 struct nwl_msi *msi = &pcie->msi; in nwl_irq_domain_alloc() local
483 mutex_lock(&msi->lock); in nwl_irq_domain_alloc()
484 bit = bitmap_find_free_region(msi->bitmap, INT_PCI_MSI_NR, in nwl_irq_domain_alloc()
487 mutex_unlock(&msi->lock); in nwl_irq_domain_alloc()
496 mutex_unlock(&msi->lock); in nwl_irq_domain_alloc()
505 struct nwl_msi *msi = &pcie->msi; in nwl_irq_domain_free() local
507 mutex_lock(&msi->lock); in nwl_irq_domain_free()
508 bitmap_release_region(msi->bitmap, data->hwirq, in nwl_irq_domain_free()
510 mutex_unlock(&msi->lock); in nwl_irq_domain_free()
523 struct nwl_msi *msi = &pcie->msi; in nwl_pcie_init_msi_irq_domain() local
525 msi->dev_domain = irq_domain_add_linear(NULL, INT_PCI_MSI_NR, in nwl_pcie_init_msi_irq_domain()
527 if (!msi->dev_domain) { in nwl_pcie_init_msi_irq_domain()
531 msi->msi_domain = pci_msi_create_irq_domain(fwnode, in nwl_pcie_init_msi_irq_domain()
533 msi->dev_domain); in nwl_pcie_init_msi_irq_domain()
534 if (!msi->msi_domain) { in nwl_pcie_init_msi_irq_domain()
535 dev_err(dev, "failed to create msi IRQ domain\n"); in nwl_pcie_init_msi_irq_domain()
536 irq_domain_remove(msi->dev_domain); in nwl_pcie_init_msi_irq_domain()
574 struct nwl_msi *msi = &pcie->msi; in nwl_pcie_enable_msi() local
579 mutex_init(&msi->lock); in nwl_pcie_enable_msi()
581 msi->bitmap = kzalloc(size, GFP_KERNEL); in nwl_pcie_enable_msi()
582 if (!msi->bitmap) in nwl_pcie_enable_msi()
586 msi->irq_msi1 = platform_get_irq_byname(pdev, "msi1"); in nwl_pcie_enable_msi()
587 if (msi->irq_msi1 < 0) { in nwl_pcie_enable_msi()
592 irq_set_chained_handler_and_data(msi->irq_msi1, in nwl_pcie_enable_msi()
596 msi->irq_msi0 = platform_get_irq_byname(pdev, "msi0"); in nwl_pcie_enable_msi()
597 if (msi->irq_msi0 < 0) { in nwl_pcie_enable_msi()
602 irq_set_chained_handler_and_data(msi->irq_msi0, in nwl_pcie_enable_msi()
608 dev_err(dev, "MSI not present\n"); in nwl_pcie_enable_msi()
627 * For high range MSI interrupts: disable, clear any pending, in nwl_pcie_enable_msi()
638 * For low range MSI interrupts: disable, clear any pending, in nwl_pcie_enable_msi()
650 kfree(msi->bitmap); in nwl_pcie_enable_msi()
651 msi->bitmap = NULL; in nwl_pcie_enable_msi()
858 dev_err(dev, "failed to enable MSI support: %d\n", err); in nwl_pcie_probe()