[PATCH 15/16] ARM: fiq: save FIQ_START by passing absolute fiq number

Shawn Guo shawn.guo at linaro.org
Tue Jun 19 01:26:56 EDT 2012


On Mon, Jun 18, 2012 at 05:44:02PM +0100, Russell King - ARM Linux wrote:
> FIQs should be an entirely separate number space from IRQs, as we
> may want to totally decouple them from the IRQ stuff (we probably
> should have already done this when genirq came along.)
> 
> About the only stuff FIQs use is the enable/disable_irq as a short
> cut to dealing with the mask registers.

I do not quite understand what you are asking for, but I'm guessing it
with the patch below.  Please elaborate it a little bit more if that's
not what you are asking for.

Regards,
Shawn

--8<---

diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c
index c32f845..dce12fb 100644
--- a/arch/arm/kernel/fiq.c
+++ b/arch/arm/kernel/fiq.c
@@ -39,6 +39,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
+#include <linux/irq.h>
 #include <linux/seq_file.h>

 #include <asm/cacheflush.h>
@@ -124,12 +125,20 @@ void release_fiq(struct fiq_handler *f)

 void enable_fiq(int fiq)
 {
-       enable_irq(fiq + FIQ_START);
+       struct irq_data *d = irq_get_irq_data(fiq);
+       struct irq_chip *chip = irq_data_get_irq_chip(d);
+
+       if (chip->irq_unmask)
+               chip->irq_unmask(d);
 }

 void disable_fiq(int fiq)
 {
-       disable_irq(fiq + FIQ_START);
+       struct irq_data *d = irq_get_irq_data(fiq);
+       struct irq_chip *chip = irq_data_get_irq_chip(d);
+
+       if (chip->irq_mask)
+               chip->irq_mask(d);
 }

 EXPORT_SYMBOL(set_fiq_handler);





More information about the linux-arm-kernel mailing list