genirq: Introduce irq_chip.irq_compose_msi_msg() to support stacked irqchip
Add callback irq_compose_msi_msg to struct irq_chip, which will be used to support stacked irqchip. Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> Cc: Bjorn Helgaas <bhelgaas@google.com> Cc: Grant Likely <grant.likely@linaro.org> Cc: Marc Zyngier <marc.zyngier@arm.com> Cc: Yingjoe Chen <yingjoe.chen@mediatek.com> Cc: Yijing Wang <wangyijing@huawei.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
这个提交包含在:
@@ -926,3 +926,29 @@ int irq_chip_retrigger_hierarchy(struct irq_data *data)
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* irq_chip_compose_msi_msg - Componse msi message for a irq chip
|
||||
* @data: Pointer to interrupt specific data
|
||||
* @msg: Pointer to the MSI message
|
||||
*
|
||||
* For hierarchical domains we find the first chip in the hierarchy
|
||||
* which implements the irq_compose_msi_msg callback. For non
|
||||
* hierarchical we use the top level chip.
|
||||
*/
|
||||
int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
|
||||
{
|
||||
struct irq_data *pos = NULL;
|
||||
|
||||
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
|
||||
for (; data; data = data->parent_data)
|
||||
#endif
|
||||
if (data->chip && data->chip->irq_compose_msi_msg)
|
||||
pos = data;
|
||||
if (!pos)
|
||||
return -ENOSYS;
|
||||
|
||||
pos->chip->irq_compose_msi_msg(pos, msg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
在新工单中引用
屏蔽一个用户