Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / arm / mach-footbridge / include / mach / entry-macro.S
diff --git a/kernel/arch/arm/mach-footbridge/include/mach/entry-macro.S b/kernel/arch/arm/mach-footbridge/include/mach/entry-macro.S
new file mode 100644 (file)
index 0000000..dabbd5c
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * arch/arm/mach-footbridge/include/mach/entry-macro.S
+ *
+ * Low-level IRQ helper macros for footbridge-based platforms
+ *
+ * This file is licensed under  the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+#include <mach/hardware.h>
+#include <mach/irqs.h>
+#include <asm/hardware/dec21285.h>
+
+               .equ    dc21285_high, ARMCSR_BASE & 0xff000000
+               .equ    dc21285_low, ARMCSR_BASE & 0x00ffffff
+
+               .macro  get_irqnr_preamble, base, tmp
+               mov     \base, #dc21285_high
+               .if     dc21285_low
+               orr     \base, \base, #dc21285_low
+               .endif
+               .endm
+
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
+               ldr     \irqstat, [\base, #0x180]       @ get interrupts
+
+               mov     \irqnr, #IRQ_SDRAMPARITY
+               tst     \irqstat, #IRQ_MASK_SDRAMPARITY
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_UART_RX
+               movne   \irqnr, #IRQ_CONRX
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_DMA1
+               movne   \irqnr, #IRQ_DMA1
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_DMA2
+               movne   \irqnr, #IRQ_DMA2
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_IN0
+               movne   \irqnr, #IRQ_IN0
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_IN1
+               movne   \irqnr, #IRQ_IN1
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_IN2
+               movne   \irqnr, #IRQ_IN2
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_IN3
+               movne   \irqnr, #IRQ_IN3
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_PCI
+               movne   \irqnr, #IRQ_PCI
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_DOORBELLHOST
+               movne   \irqnr, #IRQ_DOORBELLHOST
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_I2OINPOST
+               movne   \irqnr, #IRQ_I2OINPOST
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_TIMER1
+               movne   \irqnr, #IRQ_TIMER1
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_TIMER2
+               movne   \irqnr, #IRQ_TIMER2
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_TIMER3
+               movne   \irqnr, #IRQ_TIMER3
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_UART_TX
+               movne   \irqnr, #IRQ_CONTX
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_PCI_ABORT
+               movne   \irqnr, #IRQ_PCI_ABORT
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_PCI_SERR
+               movne   \irqnr, #IRQ_PCI_SERR
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_DISCARD_TIMER
+               movne   \irqnr, #IRQ_DISCARD_TIMER
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_PCI_DPERR
+               movne   \irqnr, #IRQ_PCI_DPERR
+               bne     1001f
+
+               tst     \irqstat, #IRQ_MASK_PCI_PERR
+               movne   \irqnr, #IRQ_PCI_PERR
+1001:
+               .endm
+