#include <linux/device.h>
#include <linux/irqdomain.h>
#define MAX_DEV_MSIS (1 << (32 - DEV_ID_SHIFT))
struct platform_msi_priv_data {
irq_write_msi_msg_t write_msg;
static DEFINE_IDA(platform_msi_devid_ida);
#ifdef GENERIC_MSI_DOMAIN_OPS
static irq_hw_number_t platform_msi_calc_hwirq(struct msi_desc *desc)
devid = desc->platform.msi_priv_data->devid;
return (devid << (32 - DEV_ID_SHIFT)) | desc->platform.msi_index;
static void platform_msi_set_desc(msi_alloc_info_t *arg, struct msi_desc *desc)
arg->hwirq = platform_msi_calc_hwirq(desc);
static int platform_msi_init(struct irq_domain *domain,
struct msi_domain_info *info,
unsigned int virq, irq_hw_number_t hwirq,
return irq_domain_set_hwirq_and_chip(domain, virq, hwirq,
info->chip, info->chip_data);
#define platform_msi_set_desc NULL