|
@@ -850,3 +850,31 @@ void irq_cpu_offline(void)
|
|
|
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
|
|
|
+/**
|
|
|
+ * irq_chip_ack_parent - Acknowledge the parent interrupt
|
|
|
+ * @data: Pointer to interrupt specific data
|
|
|
+ */
|
|
|
+void irq_chip_ack_parent(struct irq_data *data)
|
|
|
+{
|
|
|
+ data = data->parent_data;
|
|
|
+ data->chip->irq_ack(data);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * irq_chip_retrigger_hierarchy - Retrigger an interrupt in hardware
|
|
|
+ * @data: Pointer to interrupt specific data
|
|
|
+ *
|
|
|
+ * Iterate through the domain hierarchy of the interrupt and check
|
|
|
+ * whether a hw retrigger function exists. If yes, invoke it.
|
|
|
+ */
|
|
|
+int irq_chip_retrigger_hierarchy(struct irq_data *data)
|
|
|
+{
|
|
|
+ for (data = data->parent_data; data; data = data->parent_data)
|
|
|
+ if (data->chip && data->chip->irq_retrigger)
|
|
|
+ return data->chip->irq_retrigger(data);
|
|
|
+
|
|
|
+ return -ENOSYS;
|
|
|
+}
|
|
|
+#endif
|