genirq: Add irq_chip_(enable/disable)_parent
Add helper irq_chip_enable_parent and irq_chip_disable_parent. The helper implement the default behavior in case irq_enable or irq_disable is not implemented for the parent interrupt chip, which is calling the irq_mask or irq_unmask respectively. Signed-off-by: Stefan Agner <stefan@agner.ch> Cc: marc.zyngier@arm.com Cc: linux@arm.linux.org.uk Cc: u.kleine-koenig@pengutronix.de Cc: olof@lixom.net Cc: arnd@arndb.de Cc: daniel.lezcano@linaro.org Cc: mark.rutland@arm.com Cc: pawel.moll@arm.com Cc: robh+dt@kernel.org Cc: ijc+devicetree@hellion.org.uk Cc: galak@codeaurora.org Cc: mcoquelin.stm32@gmail.com Cc: linux-arm-kernel@lists.infradead.org Cc: shawn.guo@linaro.org Cc: kernel@pengutronix.de Cc: jason@lakedaemon.net Link: http://lkml.kernel.org/r/1431769465-26867-3-git-send-email-stefan@agner.ch Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
Родитель
5f22f5c668
Коммит
3cfeffc265
|
@ -458,6 +458,8 @@ extern void handle_nested_irq(unsigned int irq);
|
|||
|
||||
extern int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg);
|
||||
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
|
||||
extern void irq_chip_enable_parent(struct irq_data *data);
|
||||
extern void irq_chip_disable_parent(struct irq_data *data);
|
||||
extern void irq_chip_ack_parent(struct irq_data *data);
|
||||
extern int irq_chip_retrigger_hierarchy(struct irq_data *data);
|
||||
extern void irq_chip_mask_parent(struct irq_data *data);
|
||||
|
|
|
@ -875,6 +875,34 @@ void irq_cpu_offline(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
|
||||
/**
|
||||
* irq_chip_enable_parent - Enable the parent interrupt (defaults to unmask if
|
||||
* NULL)
|
||||
* @data: Pointer to interrupt specific data
|
||||
*/
|
||||
void irq_chip_enable_parent(struct irq_data *data)
|
||||
{
|
||||
data = data->parent_data;
|
||||
if (data->chip->irq_enable)
|
||||
data->chip->irq_enable(data);
|
||||
else
|
||||
data->chip->irq_unmask(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* irq_chip_disable_parent - Disable the parent interrupt (defaults to mask if
|
||||
* NULL)
|
||||
* @data: Pointer to interrupt specific data
|
||||
*/
|
||||
void irq_chip_disable_parent(struct irq_data *data)
|
||||
{
|
||||
data = data->parent_data;
|
||||
if (data->chip->irq_disable)
|
||||
data->chip->irq_disable(data);
|
||||
else
|
||||
data->chip->irq_mask(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* irq_chip_ack_parent - Acknowledge the parent interrupt
|
||||
* @data: Pointer to interrupt specific data
|
||||
|
|
Загрузка…
Ссылка в новой задаче