summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2010-04-30 14:48:52 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2010-04-30 14:48:52 +0000
commit6e6886d5812e9824a7402bee7362ed5da80c452e (patch)
treee9fc092d1882d26d703efdb648fc20f63c4c6e86 /c/src/lib/libbsp
parent2010-04-30 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-6e6886d5812e9824a7402bee7362ed5da80c452e.tar.bz2
2010-04-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
* irq/bsp_irq_init.c: Removed file. * Makefile.am, preinstall.am: Reflect change above. Added generic interrupt support modules. * include/bsp.h: Define BSP_FEATURE_IRQ_EXTENSION. * startup/bspstart.c, irq/bsp_irq_asm.S, clock/clockdrv.c, network/network.c: Interrupt support changes.
Diffstat (limited to 'c/src/lib/libbsp')
-rw-r--r--c/src/lib/libbsp/arm/edb7312/ChangeLog9
-rw-r--r--c/src/lib/libbsp/arm/edb7312/Makefile.am16
-rw-r--r--c/src/lib/libbsp/arm/edb7312/clock/clockdrv.c2
-rw-r--r--c/src/lib/libbsp/arm/edb7312/include/bsp.h2
-rw-r--r--c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_asm.S56
-rw-r--r--c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_init.c123
-rw-r--r--c/src/lib/libbsp/arm/edb7312/irq/irq.c230
-rw-r--r--c/src/lib/libbsp/arm/edb7312/irq/irq.h42
-rw-r--r--c/src/lib/libbsp/arm/edb7312/network/network.c2
-rw-r--r--c/src/lib/libbsp/arm/edb7312/preinstall.am14
-rw-r--r--c/src/lib/libbsp/arm/edb7312/startup/bspstart.c6
11 files changed, 203 insertions, 299 deletions
diff --git a/c/src/lib/libbsp/arm/edb7312/ChangeLog b/c/src/lib/libbsp/arm/edb7312/ChangeLog
index 5c2d8e7bfd..6bbd54379a 100644
--- a/c/src/lib/libbsp/arm/edb7312/ChangeLog
+++ b/c/src/lib/libbsp/arm/edb7312/ChangeLog
@@ -1,5 +1,14 @@
2010-04-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
+ * irq/bsp_irq_init.c: Removed file.
+ * Makefile.am, preinstall.am: Reflect change above. Added generic
+ interrupt support modules.
+ * include/bsp.h: Define BSP_FEATURE_IRQ_EXTENSION.
+ * startup/bspstart.c, irq/bsp_irq_asm.S, clock/clockdrv.c,
+ network/network.c: Interrupt support changes.
+
+2010-04-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
* make/custom/edb7312.cfg: Use VFP floating point model.
2010-04-10 Ralf Corsépius <ralf.corsepius@rtems.org>
diff --git a/c/src/lib/libbsp/arm/edb7312/Makefile.am b/c/src/lib/libbsp/arm/edb7312/Makefile.am
index 1723c2f362..a9f6ca2acf 100644
--- a/c/src/lib/libbsp/arm/edb7312/Makefile.am
+++ b/c/src/lib/libbsp/arm/edb7312/Makefile.am
@@ -13,6 +13,8 @@ dist_project_lib_DATA = bsp_specs
include_HEADERS = include/bsp.h
include_HEADERS += ../../shared/include/tm27.h
+include_bsp_HEADERS =
+
nodist_include_HEADERS = include/bspopts.h
nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h
DISTCLEANFILES = include/bspopts.h
@@ -47,11 +49,17 @@ libbsp_a_SOURCES += timer/timer.c
# abort
libbsp_a_SOURCES += ../shared/abort/abort.c
-include_HEADERS += irq/irq.h
# irq
-libbsp_a_SOURCES += irq/irq.c irq/bsp_irq_init.c \
- ../../arm/shared/irq/irq_init.c irq/bsp_irq_asm.S \
- irq/irq.h
+include_bsp_HEADERS += ../../shared/include/irq-generic.h \
+ ../../shared/include/irq-info.h \
+ irq/irq.h
+libbsp_a_SOURCES += ../../shared/src/irq-generic.c \
+ ../../shared/src/irq-legacy.c \
+ ../../shared/src/irq-info.c \
+ ../../shared/src/irq-shell.c \
+ ../../shared/src/irq-server.c \
+ irq/irq.c \
+ irq/bsp_irq_asm.S
if HAS_NETWORKING
network_CPPFLAGS = -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
diff --git a/c/src/lib/libbsp/arm/edb7312/clock/clockdrv.c b/c/src/lib/libbsp/arm/edb7312/clock/clockdrv.c
index 32d185501d..29a8092abc 100644
--- a/c/src/lib/libbsp/arm/edb7312/clock/clockdrv.c
+++ b/c/src/lib/libbsp/arm/edb7312/clock/clockdrv.c
@@ -14,7 +14,7 @@
#include <rtems.h>
#include <ep7312.h>
#include <bsp.h>
-#include <irq.h>
+#include <bsp/irq.h>
#if ON_SKYEYE==1
#define CLOCK_DRIVER_USE_FAST_IDLE
diff --git a/c/src/lib/libbsp/arm/edb7312/include/bsp.h b/c/src/lib/libbsp/arm/edb7312/include/bsp.h
index f3076747bf..3602dc37cd 100644
--- a/c/src/lib/libbsp/arm/edb7312/include/bsp.h
+++ b/c/src/lib/libbsp/arm/edb7312/include/bsp.h
@@ -25,6 +25,8 @@ extern "C" {
#include <rtems/console.h>
#include <rtems/clockdrv.h>
+#define BSP_FEATURE_IRQ_EXTENSION
+
/*
* Define the interrupt mechanism for Time Test 27
*
diff --git a/c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_asm.S b/c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_asm.S
index 4b8da4961f..7374f167e0 100644
--- a/c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_asm.S
+++ b/c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_asm.S
@@ -16,7 +16,7 @@
#define __asm__
#include "irq.h"
-#define VECTOR_TABLE 0x40
+ .extern edb7312_interrupt_dispatch
/*
* Function to obtain, execute an IT handler and acknowledge the IT
@@ -45,7 +45,7 @@ check_dai:
and r6, r4, r5 /* only look at interrupts which are enabled */
tst r6, #0x0001
beq check_extfiq
- ldr r0, =(VECTOR_TABLE + (4 * 21)) /* load the vector number */
+ mov r0, #BSP_DAIINT
b get_handler
/*
@@ -57,7 +57,7 @@ check_extfiq:
and r6, r4, r5 /* only look at interrupts which are enabled */
tst r6, #0x0001
beq check_bl
- ldr r0, =(VECTOR_TABLE + (4 * 0)) /* load the vector number */
+ mov r0, #BSP_EXTFIQ
b get_handler
check_bl:
@@ -69,7 +69,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0002
beq check_we
- ldr r0, =(VECTOR_TABLE + (4 * 1)) /* load the vector number */
+ mov r0, #BSP_BLINT
b get_handler
check_we:
@@ -81,7 +81,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0004
beq check_mc
- ldr r0, =(VECTOR_TABLE + (4 * 2)) /* load the vector number */
+ mov r0, #BSP_WEINT
b get_handler
check_mc:
@@ -93,7 +93,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0008
beq check_cs
- ldr r0, =(VECTOR_TABLE + (4 * 3)) /* load the vector number */
+ mov r0, #BSP_MCINT
b get_handler
check_cs:
@@ -105,7 +105,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0010
beq check_e1
- ldr r0, =(VECTOR_TABLE + (4 * 4)) /* load the vector number */
+ mov r0, #BSP_CSINT
b get_handler
check_e1:
@@ -117,7 +117,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0020
beq check_e2
- ldr r0, =(VECTOR_TABLE + (4 * 5)) /* load the vector number */
+ mov r0, #BSP_EINT1
b get_handler
check_e2:
@@ -129,7 +129,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0040
beq check_e3
- ldr r0, =(VECTOR_TABLE + (4 * 6)) /* load the vector number */
+ mov r0, #BSP_EINT2
b get_handler
check_e3:
@@ -141,7 +141,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0080
beq check_tc1
- ldr r0, =(VECTOR_TABLE + (4 * 7)) /* load the vector number */
+ mov r0, #BSP_EINT3
b get_handler
check_tc1:
@@ -153,7 +153,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0100
beq check_tc2
- ldr r0, =(VECTOR_TABLE + (4 * 8)) /* load the vector number */
+ mov r0, #BSP_TC1OI
b get_handler
check_tc2:
@@ -165,7 +165,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0200
beq check_rtc
- ldr r0, =(VECTOR_TABLE + (4 * 9)) /* load the vector number */
+ mov r0, #BSP_TC2OI
b get_handler
check_rtc:
@@ -177,7 +177,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0400
beq check_tick
- ldr r0, =(VECTOR_TABLE + (4 * 10)) /* load the vector number */
+ mov r0, #BSP_RTCMI
b get_handler
check_tick:
@@ -189,7 +189,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0800
beq check_utx1
- ldr r0, =(VECTOR_TABLE + (4 * 11)) /* load the vector number */
+ mov r0, #BSP_TINT
b get_handler
check_utx1:
@@ -201,7 +201,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x1000
beq check_urx1
- ldr r0, =(VECTOR_TABLE + (4 * 12)) /* load the vector number */
+ mov r0, #BSP_UTXINT1
b get_handler
check_urx1:
@@ -213,7 +213,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x2000
beq check_ums
- ldr r0, =(VECTOR_TABLE + (4 * 13)) /* load the vector number */
+ mov r0, #BSP_URXINT1
b get_handler
check_ums:
@@ -225,7 +225,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x4000
beq check_sse
- ldr r0, =(VECTOR_TABLE + (4 * 14)) /* load the vector number */
+ mov r0, #BSP_UMSINT
b get_handler
check_sse:
@@ -237,7 +237,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x8000
beq check_kbd
- ldr r0, =(VECTOR_TABLE + (4 * 15)) /* load the vector number */
+ mov r0, #BSP_SSEOTI
b get_handler
/*
@@ -249,7 +249,7 @@ check_kbd:
and r6, r4, r5 /* only look at interrupts which are enabled */
tst r6, #0x0001
beq check_ss2rx
- ldr r0, =(VECTOR_TABLE + (4 * 16)) /* load the vector number */
+ mov r0, #BSP_KBDINT
b get_handler
check_ss2rx:
@@ -261,7 +261,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0002
beq check_ss2tx
- ldr r0, =(VECTOR_TABLE + (4 * 17)) /* load the vector number */
+ mov r0, #BSP_SS2RX
b get_handler
check_ss2tx:
@@ -273,7 +273,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x0004
beq check_utx2
- ldr r0, =(VECTOR_TABLE + (4 * 18)) /* load the vector number */
+ mov r0, #BSP_SS2TX
b get_handler
check_utx2:
@@ -285,7 +285,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x1000
beq check_urx2
- ldr r0, =(VECTOR_TABLE + (4 * 19)) /* load the vector number */
+ mov r0, #BSP_UTXINT2
b get_handler
check_urx2:
@@ -297,15 +297,13 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
#endif
tst r6, #0x2000
beq IRQ_NoInterrupt
- ldr r0, =(VECTOR_TABLE + (4 * 20)) /* load the vector number */
+ mov r0, #BSP_URXINT2
b get_handler
get_handler:
ldmia sp!,{r4, r5, r6}
- ldr r0, [r0] /* extract the IT handler @ */
-
/*
* re-enable interrupts at processor level as the current
* interrupt source is now masked via VEGA logic
@@ -316,12 +314,8 @@ get_handler:
msr cpsr, r1
*/
- stmdb sp!,{lr}
- ldr lr, =IRQ_return /* prepare the return from handler */
-
- mov pc, r0 /* EXECUTE INT HANDLER */
-
-IRQ_return:
+ stmdb sp!,{lr}
+ bl edb7312_interrupt_dispatch
ldmia sp!,{lr}
IRQ_NoInterrupt:
diff --git a/c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_init.c b/c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_init.c
deleted file mode 100644
index a9cc5f2171..0000000000
--- a/c/src/lib/libbsp/arm/edb7312/irq/bsp_irq_init.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Cirrus EP7312 Intererrupt handler
- *
- * Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
- *
- * Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- *
- * http://www.rtems.com/license/LICENSE.
- *
- *
- * $Id$
-*/
-#include <irq.h>
-#include <bsp.h>
-#include <ep7312.h>
-
-void BSP_rtems_irq_mngt_init(void)
-{
- long int_stat;
- long *vectorTable;
- int i;
-
- vectorTable = (long *) VECTOR_TABLE;
-
- /* Initialize the vector table contents with default handler */
- for (i=0; i<BSP_MAX_INT; i++) {
- *(vectorTable + i) = (long)(default_int_handler);
- }
-
- /* mask all interrupts */
- *EP7312_INTMR1 = 0x0;
- *EP7312_INTMR2 = 0x0;
- *EP7312_INTMR3 = 0x0;
-
- /* clear all pending interrupt status' */
- int_stat = *EP7312_INTSR1;
- if(int_stat & EP7312_INTR1_EXTFIQ)
- {
- }
- if(int_stat & EP7312_INTR1_BLINT)
- {
- *EP7312_BLEOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR1_WEINT)
- {
- *EP7312_TEOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR1_MCINT)
- {
- }
- if(int_stat & EP7312_INTR1_CSINT)
- {
- *EP7312_COEOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR1_EINT1)
- {
- }
- if(int_stat & EP7312_INTR1_EINT2)
- {
- }
- if(int_stat & EP7312_INTR1_EINT3)
- {
- }
- if(int_stat & EP7312_INTR1_TC1OI)
- {
- *EP7312_TC1EOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR1_TC2OI)
- {
- *EP7312_TC2EOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR1_RTCMI)
- {
- *EP7312_RTCEOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR1_TINT)
- {
- *EP7312_TEOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR1_URXINT1)
- {
- }
- if(int_stat & EP7312_INTR1_UTXINT1)
- {
- }
- if(int_stat & EP7312_INTR1_UMSINT)
- {
- *EP7312_UMSEOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR1_SSEOTI)
- {
- *EP7312_SYNCIO;
- }
- int_stat = *EP7312_INTSR1;
-
- int_stat = *EP7312_INTSR2;
- if(int_stat & EP7312_INTR2_KBDINT)
- {
- *EP7312_KBDEOI = 0xFFFFFFFF;
- }
- if(int_stat & EP7312_INTR2_SS2RX)
- {
- }
- if(int_stat & EP7312_INTR2_SS2TX)
- {
- }
- if(int_stat & EP7312_INTR2_URXINT2)
- {
- }
- if(int_stat & EP7312_INTR2_UTXINT2)
- {
- }
- int_stat = *EP7312_INTSR2;
-
- int_stat = *EP7312_INTSR3;
- if(int_stat & EP7312_INTR2_DAIINT)
- {
- }
- int_stat = *EP7312_INTSR3;
-}
diff --git a/c/src/lib/libbsp/arm/edb7312/irq/irq.c b/c/src/lib/libbsp/arm/edb7312/irq/irq.c
index 6232a1913c..1f3d1f7211 100644
--- a/c/src/lib/libbsp/arm/edb7312/irq/irq.c
+++ b/c/src/lib/libbsp/arm/edb7312/irq/irq.c
@@ -1,6 +1,8 @@
/*
* Cirrus EP7312 Intererrupt handler
*
+ * Copyright (c) 2010 embedded brains GmbH.
+ *
* Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
*
* Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
@@ -13,141 +15,171 @@
*
* $Id$
*/
+
#include <bsp.h>
-#include <irq.h>
-#include <rtems/score/thread.h>
-#include <rtems/score/apiext.h>
-#include <ep7312.h>
+#include <bsp/irq.h>
+#include <bsp/irq-generic.h>
-/*
- * This function check that the value given for the irq line
- * is valid.
- */
+#include <ep7312.h>
-static int isValidInterrupt(int irq)
+void edb7312_interrupt_dispatch(rtems_vector_number vector)
{
- if ( (irq < 0) || (irq > BSP_MAX_INT))
- return 0;
- return 1;
+ bsp_interrupt_handler_dispatch(vector);
}
-/*
- * -------------------- RTEMS Single Irq Handler Mngt Routines ----------------
- */
-
-int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq)
+rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
{
- rtems_irq_hdl *HdlTable;
- rtems_interrupt_level level;
-
- if (!isValidInterrupt(irq->name)) {
- return 0;
- }
- /*
- * Check if default handler is actually connected. If not issue an error.
- */
- HdlTable = (rtems_irq_hdl *) VECTOR_TABLE;
- if (*(HdlTable + irq->name) != default_int_handler) {
- return 0;
- }
-
- rtems_interrupt_disable(level);
-
- /*
- * store the new handler
- */
- *(HdlTable + irq->name) = irq->hdl;
-
- /*
- * unmask interrupt
- */
- if(irq->name >= BSP_EXTFIQ && irq->name <= BSP_SSEOTI)
+ if(vector >= BSP_EXTFIQ && vector <= BSP_SSEOTI)
{
/* interrupt managed by INTMR1 and INTSR1 */
- *EP7312_INTMR1 |= (1 << irq->name);
+ *EP7312_INTMR1 |= (1 << vector);
}
- else if(irq->name >= BSP_KBDINT && irq->name <= BSP_SS2TX)
+ else if(vector >= BSP_KBDINT && vector <= BSP_SS2TX)
{
/* interrupt managed by INTMR2 and INTSR2 */
- *EP7312_INTMR2 |= (1 << (irq->name - 16));
+ *EP7312_INTMR2 |= (1 << (vector - 16));
}
- else if(irq->name >= BSP_UTXINT2 && irq->name <= BSP_URXINT2)
+ else if(vector >= BSP_UTXINT2 && vector <= BSP_URXINT2)
{
/* interrupt managed by INTMR2 and INTSR2 */
- *EP7312_INTMR2 |= (1 << (irq->name - 7));
+ *EP7312_INTMR2 |= (1 << (vector - 7));
}
- else if(irq->name == BSP_DAIINT)
+ else if(vector == BSP_DAIINT)
{
/* interrupt managed by INTMR3 and INTSR3 */
- *EP7312_INTMR3 |= (1 << (irq->name - 21));
+ *EP7312_INTMR3 |= (1 << (vector - 21));
}
- /*
- * Enable interrupt on device
- */
- if(irq->on)
- {
- irq->on(irq);
- }
-
- rtems_interrupt_enable(level);
-
- return 1;
+ return RTEMS_SUCCESSFUL;
}
-int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq)
+rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
{
- rtems_irq_hdl *HdlTable;
- rtems_interrupt_level level;
-
- if (!isValidInterrupt(irq->name)) {
- return 0;
- }
- /*
- * Check if the handler is actually connected. If not issue an error.
- */
- HdlTable = (rtems_irq_hdl *) VECTOR_TABLE;
- if (*(HdlTable + irq->name) != irq->hdl) {
- return 0;
- }
- rtems_interrupt_disable(level);
-
- /*
- * mask interrupt
- */
- if(irq->name >= BSP_EXTFIQ && irq->name <= BSP_SSEOTI)
+ if(vector >= BSP_EXTFIQ && vector <= BSP_SSEOTI)
{
/* interrupt managed by INTMR1 and INTSR1 */
- *EP7312_INTMR1 &= ~(1 << irq->name);
+ *EP7312_INTMR1 &= ~(1 << vector);
}
- else if(irq->name >= BSP_KBDINT && irq->name <= BSP_SS2TX)
+ else if(vector >= BSP_KBDINT && vector <= BSP_SS2TX)
{
/* interrupt managed by INTMR2 and INTSR2 */
- *EP7312_INTMR2 &= ~(1 << (irq->name - 16));
+ *EP7312_INTMR2 &= ~(1 << (vector - 16));
}
- else if(irq->name >= BSP_UTXINT2 && irq->name <= BSP_URXINT2)
+ else if(vector >= BSP_UTXINT2 && vector <= BSP_URXINT2)
{
/* interrupt managed by INTMR2 and INTSR2 */
- *EP7312_INTMR2 &= ~(1 << (irq->name - 7));
+ *EP7312_INTMR2 &= ~(1 << (vector - 7));
}
- else if(irq->name == BSP_DAIINT)
+ else if(vector == BSP_DAIINT)
{
/* interrupt managed by INTMR3 and INTSR3 */
- *EP7312_INTMR3 &= ~(1 << (irq->name - 21));
+ *EP7312_INTMR3 &= ~(1 << (vector - 21));
}
- /*
- * Disable interrupt on device
- */
- if(irq->off)
- irq->off(irq);
-
- /*
- * restore the default irq value
- */
- *(HdlTable + irq->name) = default_int_handler;
+ return RTEMS_SUCCESSFUL;
+}
- rtems_interrupt_enable(level);
+rtems_status_code bsp_interrupt_facility_initialize(void)
+{
+ uint32_t int_stat = 0;
+
+ /* mask all interrupts */
+ *EP7312_INTMR1 = 0x0;
+ *EP7312_INTMR2 = 0x0;
+ *EP7312_INTMR3 = 0x0;
+
+ /* clear all pending interrupt status' */
+ int_stat = *EP7312_INTSR1;
+ if(int_stat & EP7312_INTR1_EXTFIQ)
+ {
+ }
+ if(int_stat & EP7312_INTR1_BLINT)
+ {
+ *EP7312_BLEOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR1_WEINT)
+ {
+ *EP7312_TEOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR1_MCINT)
+ {
+ }
+ if(int_stat & EP7312_INTR1_CSINT)
+ {
+ *EP7312_COEOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR1_EINT1)
+ {
+ }
+ if(int_stat & EP7312_INTR1_EINT2)
+ {
+ }
+ if(int_stat & EP7312_INTR1_EINT3)
+ {
+ }
+ if(int_stat & EP7312_INTR1_TC1OI)
+ {
+ *EP7312_TC1EOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR1_TC2OI)
+ {
+ *EP7312_TC2EOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR1_RTCMI)
+ {
+ *EP7312_RTCEOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR1_TINT)
+ {
+ *EP7312_TEOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR1_URXINT1)
+ {
+ }
+ if(int_stat & EP7312_INTR1_UTXINT1)
+ {
+ }
+ if(int_stat & EP7312_INTR1_UMSINT)
+ {
+ *EP7312_UMSEOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR1_SSEOTI)
+ {
+ *EP7312_SYNCIO;
+ }
+ int_stat = *EP7312_INTSR1;
+
+ int_stat = *EP7312_INTSR2;
+ if(int_stat & EP7312_INTR2_KBDINT)
+ {
+ *EP7312_KBDEOI = 0xFFFFFFFF;
+ }
+ if(int_stat & EP7312_INTR2_SS2RX)
+ {
+ }
+ if(int_stat & EP7312_INTR2_SS2TX)
+ {
+ }
+ if(int_stat & EP7312_INTR2_URXINT2)
+ {
+ }
+ if(int_stat & EP7312_INTR2_UTXINT2)
+ {
+ }
+ int_stat = *EP7312_INTSR2;
+
+ int_stat = *EP7312_INTSR3;
+ if(int_stat & EP7312_INTR2_DAIINT)
+ {
+ }
+ int_stat = *EP7312_INTSR3;
+
+ _CPU_ISR_install_vector(ARM_EXCEPTION_IRQ, arm_exc_interrupt, NULL);
+
+ return RTEMS_SUCCESSFUL;
+}
- return 1;
+void bsp_interrupt_handler_default(rtems_vector_number vector)
+{
+ printk("spurious interrupt: %u\n", vector);
}
diff --git a/c/src/lib/libbsp/arm/edb7312/irq/irq.h b/c/src/lib/libbsp/arm/edb7312/irq/irq.h
index 8debeaee74..28ffd1a9a7 100644
--- a/c/src/lib/libbsp/arm/edb7312/irq/irq.h
+++ b/c/src/lib/libbsp/arm/edb7312/irq/irq.h
@@ -1,6 +1,8 @@
/*
* Cirrus EP7312 Intererrupt handler
*
+ * Copyright (c) 2010 embedded brains GmbH.
+ *
* Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
*
* Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
@@ -17,29 +19,14 @@
#ifndef __IRQ_H__
#define __IRQ_H__
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* define that can be useful (the values are just examples) */
-#define VECTOR_TABLE 0x40
-
#ifndef __asm__
-/*
- * Include some preprocessor value also used by assember code
- */
-
-#include <rtems/irq.h>
#include <rtems.h>
+#include <rtems/irq.h>
+#include <rtems/irq-extension.h>
-extern void default_int_handler(rtems_irq_hdl_param unused);
-/*-------------------------------------------------------------------------+
-| Constants
-+--------------------------------------------------------------------------*/
+#endif /* __asm__ */
- /* enum of the possible interrupt sources */
-typedef unsigned int rtems_irq_number;
/* int interrupt status/mask register 1 */
#define BSP_EXTFIQ 0
#define BSP_BLINT 1
@@ -67,23 +54,8 @@ typedef unsigned int rtems_irq_number;
#define BSP_DAIINT 21
#define BSP_MAX_INT 22
-/*-------------------------------------------------------------------------+
-| Function Prototypes.
-+--------------------------------------------------------------------------*/
-/*
- * ------------------- RTEMS Single Irq Handler Mngt Routines ----------------
- */
-
-/*
- * function to initialize the interrupt for a specific BSP
- */
-void BSP_rtems_irq_mngt_init();
-
-
-#endif /* __asm__ */
+#define BSP_INTERRUPT_VECTOR_MIN 0
-#ifdef __cplusplus
-}
-#endif
+#define BSP_INTERRUPT_VECTOR_MAX (BSP_MAX_INT - 1)
#endif /* __IRQ_H__ */
diff --git a/c/src/lib/libbsp/arm/edb7312/network/network.c b/c/src/lib/libbsp/arm/edb7312/network/network.c
index 1ce1cae4ba..1db4d02dd2 100644
--- a/c/src/lib/libbsp/arm/edb7312/network/network.c
+++ b/c/src/lib/libbsp/arm/edb7312/network/network.c
@@ -1,6 +1,6 @@
#include <rtems.h>
#include <sys/mbuf.h>
-#include <irq.h>
+#include <bsp/irq.h>
#include <libchip/cs8900.h>
#define CS8900_BASE 0x20000300
diff --git a/c/src/lib/libbsp/arm/edb7312/preinstall.am b/c/src/lib/libbsp/arm/edb7312/preinstall.am
index f29fede048..59bd50a7f4 100644
--- a/c/src/lib/libbsp/arm/edb7312/preinstall.am
+++ b/c/src/lib/libbsp/arm/edb7312/preinstall.am
@@ -73,7 +73,15 @@ $(PROJECT_INCLUDE)/uart.h: ../../arm/shared/comm/uart.h $(PROJECT_INCLUDE)/$(dir
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/uart.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/uart.h
-$(PROJECT_INCLUDE)/irq.h: irq/irq.h $(PROJECT_INCLUDE)/$(dirstamp)
- $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/irq.h
-PREINSTALL_FILES += $(PROJECT_INCLUDE)/irq.h
+$(PROJECT_INCLUDE)/bsp/irq-generic.h: ../../shared/include/irq-generic.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-generic.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-generic.h
+
+$(PROJECT_INCLUDE)/bsp/irq-info.h: ../../shared/include/irq-info.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-info.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-info.h
+
+$(PROJECT_INCLUDE)/bsp/irq.h: irq/irq.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
diff --git a/c/src/lib/libbsp/arm/edb7312/startup/bspstart.c b/c/src/lib/libbsp/arm/edb7312/startup/bspstart.c
index 9189162d24..cfccaf3589 100644
--- a/c/src/lib/libbsp/arm/edb7312/startup/bspstart.c
+++ b/c/src/lib/libbsp/arm/edb7312/startup/bspstart.c
@@ -11,13 +11,13 @@
*/
#include <bsp.h>
+#include <bsp/irq-generic.h>
#include <ep7312.h>
#include <uart.h>
/*
* Function prototypes
*/
-extern void rtems_irq_mngt_init(void);
extern void rtems_exception_init_mngt(void);
/*
@@ -45,7 +45,9 @@ void bsp_start_default( void )
/*
* Init rtems interrupt management
*/
- rtems_irq_mngt_init();
+ if (bsp_interrupt_initialize() != RTEMS_SUCCESSFUL) {
+ _CPU_Fatal_halt(0xe);
+ }
} /* bsp_start */
/*