linux/arch/arm/mach-ixp4xx/include/mach/entry-macro.S
<<
>>
Prefs
   1/*
   2 * arch/arm/mach-ixp4xx/include/mach/entry-macro.S
   3 *
   4 * Low-level IRQ helper macros for IXP4xx-based platforms
   5 *
   6 * This file is licensed under  the terms of the GNU General Public
   7 * License version 2. This program is licensed "as is" without any
   8 * warranty of any kind, whether express or implied.
   9 */
  10#include <mach/hardware.h>
  11
  12                .macro  get_irqnr_preamble, base, tmp
  13                .endm
  14
  15                .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
  16                ldr     \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET)
  17                ldr     \irqstat, [\irqstat]            @ get interrupts
  18                cmp     \irqstat, #0
  19                beq     1001f                           @ upper IRQ?
  20                clz     \irqnr, \irqstat
  21                mov     \base, #31
  22                sub     \irqnr, \base, \irqnr
  23                b       1002f                           @ lower IRQ being
  24                                                        @ handled
  25
  261001:
  27                /*
  28                 * IXP465/IXP435 has an upper IRQ status register
  29                 */
  30#if defined(CONFIG_CPU_IXP46X) || defined(CONFIG_CPU_IXP43X)
  31                ldr     \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP2_OFFSET)
  32                ldr     \irqstat, [\irqstat]            @ get upper interrupts
  33                mov     \irqnr, #63
  34                clz     \irqstat, \irqstat
  35                cmp     \irqstat, #32
  36                subne   \irqnr, \irqnr, \irqstat
  37#endif
  381002:
  39                .endm
  40
  41
  42