summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu
diff options
context:
space:
mode:
authorJay Monkman <jtm@smoothsmoothie.com>2005-09-15 19:40:08 +0000
committerJay Monkman <jtm@smoothsmoothie.com>2005-09-15 19:40:08 +0000
commit1370850c051930734b696d1fc95d606d6ce479ec (patch)
tree3560df4f77fbdd43f3130666503a18bbc583ff76 /c/src/lib/libcpu
parent2005-09-15 Jay Monkman (diff)
downloadrtems-1370850c051930734b696d1fc95d606d6ce479ec.tar.bz2
2005-09-15 Jay Monkman <jtm@lopingdog.com>
PR 776/bsps * at91rm9200/irq/bsp_irq_asm.S, at91rm9200/irq/irq.h: Added code to pass interrupt vector number to ISR on AT91RM9200
Diffstat (limited to 'c/src/lib/libcpu')
-rw-r--r--c/src/lib/libcpu/arm/ChangeLog6
-rw-r--r--c/src/lib/libcpu/arm/at91rm9200/irq/bsp_irq_asm.S5
-rw-r--r--c/src/lib/libcpu/arm/at91rm9200/irq/irq.h2
3 files changed, 11 insertions, 2 deletions
diff --git a/c/src/lib/libcpu/arm/ChangeLog b/c/src/lib/libcpu/arm/ChangeLog
index d2d19d5a7d..43aef5744e 100644
--- a/c/src/lib/libcpu/arm/ChangeLog
+++ b/c/src/lib/libcpu/arm/ChangeLog
@@ -1,3 +1,9 @@
+2005-09-15 Jay Monkman <jtm@lopingdog.com>
+
+ PR 776/bsps
+ * at91rm9200/irq/bsp_irq_asm.S, at91rm9200/irq/irq.h: Added code to
+ pass interrupt vector number to ISR on AT91RM9200.
+
2005-08-17 Lars Munch <lars@segv.dk>
PR 727/bsps
diff --git a/c/src/lib/libcpu/arm/at91rm9200/irq/bsp_irq_asm.S b/c/src/lib/libcpu/arm/at91rm9200/irq/bsp_irq_asm.S
index 36a34b1ede..2960ecc78d 100644
--- a/c/src/lib/libcpu/arm/at91rm9200/irq/bsp_irq_asm.S
+++ b/c/src/lib/libcpu/arm/at91rm9200/irq/bsp_irq_asm.S
@@ -18,12 +18,15 @@ ExecuteITHandler :
/*
* Look at interrupt status register to determine source.
* From source, determine offset into expanded vector table
- * and load handler address into r0.
+ * and load vector into r0 and handler address into r1.
*/
ldr r0, =0xFFFFF100 /* AIC_CTL_BASE + AIC_IVR */
ldr r1, [r0]
str r1, [r0] /* write back in case we are using protect */
+ ldr r0, =0xFFFFF108 /* AIC_CTL_BASE + AIC_ISR */
+ ldr r0, [r0] /* Read interrupt vector */
+
stmdb sp!,{lr}
ldr lr, =IRQ_return /* prepare the return from handler */
diff --git a/c/src/lib/libcpu/arm/at91rm9200/irq/irq.h b/c/src/lib/libcpu/arm/at91rm9200/irq/irq.h
index b4e2f84afd..4322085f1e 100644
--- a/c/src/lib/libcpu/arm/at91rm9200/irq/irq.h
+++ b/c/src/lib/libcpu/arm/at91rm9200/irq/irq.h
@@ -77,7 +77,7 @@ typedef unsigned char rtems_irq_trigger;
struct __rtems_irq_connect_data__; /* forward declaratiuon */
typedef unsigned int rtems_irq_number;
-typedef void (*rtems_irq_hdl) (void);
+typedef void (*rtems_irq_hdl) (uint32_t vector);
typedef void (*rtems_irq_enable) (const struct __rtems_irq_connect_data__*);
typedef void (*rtems_irq_disable) (const struct __rtems_irq_connect_data__*);
typedef int (*rtems_irq_is_enabled)(const struct __rtems_irq_connect_data__*);