Lennert Buytenhek | e7736d4 | 2006-03-20 17:10:13 +0000 | [diff] [blame] | 1 | /* |
| 2 | * linux/include/asm-arm/arch-ep93xx/entry-macro.S |
| 3 | * IRQ demultiplexing for EP93xx |
| 4 | * |
| 5 | * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org> |
| 6 | * |
| 7 | * This program is free software; you can redistribute it and/or modify |
| 8 | * it under the terms of the GNU General Public License as published by |
| 9 | * the Free Software Foundation; either version 2 of the License, or (at |
| 10 | * your option) any later version. |
| 11 | */ |
| 12 | #include <asm/arch/ep93xx-regs.h> |
| 13 | |
| 14 | .macro disable_fiq |
| 15 | .endm |
| 16 | |
Dan Williams | f80dff9 | 2007-02-16 22:16:32 +0100 | [diff] [blame] | 17 | .macro get_irqnr_preamble, base, tmp |
| 18 | .endm |
| 19 | |
| 20 | .macro arch_ret_to_user, tmp1, tmp2 |
| 21 | .endm |
| 22 | |
Lennert Buytenhek | e7736d4 | 2006-03-20 17:10:13 +0000 | [diff] [blame] | 23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp |
| 24 | ldr \base, =(EP93XX_AHB_VIRT_BASE) |
| 25 | orr \base, \base, #0x000b0000 |
| 26 | mov \irqnr, #0 |
| 27 | ldr \irqstat, [\base] @ lower 32 interrupts |
| 28 | cmp \irqstat, #0 |
| 29 | bne 1001f |
| 30 | |
| 31 | eor \base, \base, #0x00070000 |
| 32 | ldr \irqstat, [\base] @ upper 32 interrupts |
| 33 | cmp \irqstat, #0 |
| 34 | beq 1002f |
| 35 | mov \irqnr, #0x20 |
| 36 | |
| 37 | 1001: |
| 38 | movs \tmp, \irqstat, lsl #16 |
| 39 | movne \irqstat, \tmp |
| 40 | addeq \irqnr, \irqnr, #16 |
| 41 | |
| 42 | movs \tmp, \irqstat, lsl #8 |
| 43 | movne \irqstat, \tmp |
| 44 | addeq \irqnr, \irqnr, #8 |
| 45 | |
| 46 | movs \tmp, \irqstat, lsl #4 |
| 47 | movne \irqstat, \tmp |
| 48 | addeq \irqnr, \irqnr, #4 |
| 49 | |
| 50 | movs \tmp, \irqstat, lsl #2 |
| 51 | movne \irqstat, \tmp |
| 52 | addeq \irqnr, \irqnr, #2 |
| 53 | |
| 54 | movs \tmp, \irqstat, lsl #1 |
| 55 | addeq \irqnr, \irqnr, #1 |
| 56 | orrs \base, \base, #1 |
| 57 | |
| 58 | 1002: |
| 59 | .endm |