Lines Matching refs:msi

40 #define msi_hwirq(msi, msir_index, intr_index) \  argument
41 ((msir_index) << (msi)->srs_shift | \
42 ((intr_index) << (msi)->ibs_shift))
331 struct fsl_msi *msi = platform_get_drvdata(ofdev); in fsl_of_msi_remove() local
334 if (msi->list.prev != NULL) in fsl_of_msi_remove()
335 list_del(&msi->list); in fsl_of_msi_remove()
337 if (msi->cascade_array[i]) { in fsl_of_msi_remove()
338 virq = msi->cascade_array[i]->virq; in fsl_of_msi_remove()
342 free_irq(virq, msi->cascade_array[i]); in fsl_of_msi_remove()
343 kfree(msi->cascade_array[i]); in fsl_of_msi_remove()
347 if (msi->bitmap.bitmap) in fsl_of_msi_remove()
348 msi_bitmap_free(&msi->bitmap); in fsl_of_msi_remove()
349 if ((msi->feature & FSL_PIC_IP_MASK) != FSL_PIC_IP_VMPIC) in fsl_of_msi_remove()
350 iounmap(msi->msi_regs); in fsl_of_msi_remove()
351 kfree(msi); in fsl_of_msi_remove()
358 static int fsl_msi_setup_hwirq(struct fsl_msi *msi, struct platform_device *dev, in fsl_msi_setup_hwirq() argument
378 cascade_data->msi_data = msi; in fsl_msi_setup_hwirq()
380 msi->cascade_array[irq_index] = cascade_data; in fsl_msi_setup_hwirq()
392 msi_bitmap_free_hwirqs(&msi->bitmap, in fsl_msi_setup_hwirq()
393 msi_hwirq(msi, offset, i), 1); in fsl_msi_setup_hwirq()
402 struct fsl_msi *msi; in fsl_of_msi_probe() local
418 msi = kzalloc(sizeof(struct fsl_msi), GFP_KERNEL); in fsl_of_msi_probe()
419 if (!msi) { in fsl_of_msi_probe()
423 platform_set_drvdata(dev, msi); in fsl_of_msi_probe()
425 msi->irqhost = irq_domain_add_linear(dev->dev.of_node, in fsl_of_msi_probe()
426 NR_MSI_IRQS_MAX, &fsl_msi_host_ops, msi); in fsl_of_msi_probe()
428 if (msi->irqhost == NULL) { in fsl_of_msi_probe()
446 msi->msi_regs = ioremap(res.start, resource_size(&res)); in fsl_of_msi_probe()
447 if (!msi->msi_regs) { in fsl_of_msi_probe()
453 msi->msiir_offset = in fsl_of_msi_probe()
461 msi->msiir_offset = features->msiir_offset + in fsl_of_msi_probe()
464 msi->msiir_offset = msiir.start & MSIIR_OFFSET_MASK; in fsl_of_msi_probe()
467 msi->feature = features->fsl_pic_ip; in fsl_of_msi_probe()
472 msi->feature |= MSI_HW_ERRATA_ENDIAN; in fsl_of_msi_probe()
478 msi->phandle = dev->dev.of_node->phandle; in fsl_of_msi_probe()
480 err = fsl_msi_init_allocator(msi); in fsl_of_msi_probe()
490 msi->srs_shift = MSIIR1_SRS_SHIFT; in fsl_of_msi_probe()
491 msi->ibs_shift = MSIIR1_IBS_SHIFT; in fsl_of_msi_probe()
498 err = fsl_msi_setup_hwirq(msi, dev, in fsl_of_msi_probe()
507 msi->srs_shift = MSIIR_SRS_SHIFT; in fsl_of_msi_probe()
508 msi->ibs_shift = MSIIR_IBS_SHIFT; in fsl_of_msi_probe()
536 err = fsl_msi_setup_hwirq(msi, dev, offset + j, in fsl_of_msi_probe()
544 list_add_tail(&msi->list, &msi_head); in fsl_of_msi_probe()