aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiang Liu <jiang.liu@linux.intel.com>2014-11-09 10:10:28 -0500
committerThomas Gleixner <tglx@linutronix.de>2014-11-23 07:01:47 -0500
commit9dde55b72dc80bfae4280ddce5dbd69ba8240813 (patch)
tree1e36e2e0b199d46962ab89111328e34706f4353a
parentf86eff222fabe30da5c536ef2b51bd98d14cfe3b (diff)
genirq: Introduce callback irq_chip.irq_write_msi_msg
Introduce callback irq_chip.irq_write_msi_msg, so we can share common code among MSI alike interrupt controllers, such as HPET and DMAR. 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>
-rw-r--r--include/linux/irq.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 677482bd8b92..8badf34baf0f 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -322,6 +322,7 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
322 * @irq_release_resources: optional to release resources acquired with 322 * @irq_release_resources: optional to release resources acquired with
323 * irq_request_resources 323 * irq_request_resources
324 * @irq_compose_msi_msg: optional to compose message content for MSI 324 * @irq_compose_msi_msg: optional to compose message content for MSI
325 * @irq_write_msi_msg: optional to write message content for MSI
325 * @flags: chip specific flags 326 * @flags: chip specific flags
326 */ 327 */
327struct irq_chip { 328struct irq_chip {
@@ -359,6 +360,7 @@ struct irq_chip {
359 void (*irq_release_resources)(struct irq_data *data); 360 void (*irq_release_resources)(struct irq_data *data);
360 361
361 void (*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg); 362 void (*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg);
363 void (*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg);
362 364
363 unsigned long flags; 365 unsigned long flags;
364}; 366};
@@ -459,6 +461,12 @@ extern int irq_chip_set_affinity_parent(struct irq_data *data,
459 bool force); 461 bool force);
460#endif 462#endif
461 463
464static inline void irq_chip_write_msi_msg(struct irq_data *data,
465 struct msi_msg *msg)
466{
467 data->chip->irq_write_msi_msg(data, msg);
468}
469
462/* Handling of unhandled and spurious interrupts: */ 470/* Handling of unhandled and spurious interrupts: */
463extern void note_interrupt(unsigned int irq, struct irq_desc *desc, 471extern void note_interrupt(unsigned int irq, struct irq_desc *desc,
464 irqreturn_t action_ret); 472 irqreturn_t action_ret);