summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c
diff options
context:
space:
mode:
authorJay Monkman <jtm@smoothsmoothie.com>2006-06-03 03:14:07 +0000
committerJay Monkman <jtm@smoothsmoothie.com>2006-06-03 03:14:07 +0000
commit7afe5a2fe01b2edf7d1db5bc684e6b9ba7cb1a82 (patch)
treed5e98dd64e2485864d66952d7fdc0a8d148ffb3a /c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c
parent2006-06-02 Jay Monkman (diff)
downloadrtems-7afe5a2fe01b2edf7d1db5bc684e6b9ba7cb1a82.tar.bz2
2006-06-02 Jay Monkman
* at91rm9200/irq/bsp_irq_init.c, mc9328mxl/clock/clockdrv.c, mc9328mxl/irq/bsp_irq_asm.S, mc9328mxl/irq/bsp_irq_init.c, mc9328mxl/irq/irq.c, mc9328mxl/irq/irq.h, s3c2400/irq/bsp_irq_init.c: Changed interrupt handling to use shared rtems_irq_connect_data struct.
Diffstat (limited to 'c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c')
-rw-r--r--c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c b/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c
index 23c29698f9..fcb74150bc 100644
--- a/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c
+++ b/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c
@@ -16,6 +16,8 @@
#include <rtems/score/apiext.h>
#include <mc9328mxl.h>
+mc9328mxl_irq_info_t bsp_vector_table[BSP_MAX_INT];
+
/*
* This function check that the value given for the irq line
* is valid.
@@ -36,9 +38,6 @@ static int isValidInterrupt(int irq)
int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq)
{
rtems_interrupt_level level;
- rtems_irq_hdl *bsp_tbl;
-
- bsp_tbl = (rtems_irq_hdl *)&bsp_vector_table;
if (!isValidInterrupt(irq->name)) {
return 0;
@@ -47,8 +46,8 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq)
/*
* Check if default handler is actually connected. If not issue an error.
*/
- if (bsp_tbl[irq->name] != default_int_handler) {
- return 0;
+ if (bsp_vector_table[irq->name].vector != default_int_handler) {
+ return 0;
}
_CPU_ISR_Disable(level);
@@ -56,7 +55,8 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq)
/*
* store the new handler
*/
- bsp_tbl[irq->name] = irq->hdl;
+ bsp_vector_table[irq->name].vector = irq->hdl;
+ bsp_vector_table[irq->name].data = irq->handle;
/*
* Enable interrupt on device
@@ -80,18 +80,15 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq)
int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq)
{
rtems_interrupt_level level;
- rtems_irq_hdl *bsp_tbl;
- bsp_tbl = (rtems_irq_hdl *)&bsp_vector_table;
-
if (!isValidInterrupt(irq->name)) {
return 0;
}
/*
* Check if the handler is actually connected. If not issue an error.
*/
- if (bsp_tbl[irq->name] != irq->hdl) {
- return 0;
+ if (bsp_vector_table[irq->name].vector != irq->hdl) {
+ return 0;
}
_CPU_ISR_Disable(level);
@@ -106,8 +103,8 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq)
/*
* restore the default irq value
*/
- bsp_tbl[irq->name] = default_int_handler;
-
+ bsp_vector_table[irq->name].vector = default_int_handler;
+ bsp_vector_table[irq->name].data = NULL;
_CPU_ISR_Enable(level);