summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/shared
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-10-21 13:24:35 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-10-21 13:24:35 +0000
commit60e5832e232bb788b67bc1f7678dbde6bdf9f306 (patch)
tree44c0c807bd09ebad3a3924d0738a6201f0b575c3 /c/src/lib/libbsp/shared
parent * rtems/powerpc/registers.h: Added defines DEAR_BOOKE and DEAR_405. (diff)
downloadrtems-60e5832e232bb788b67bc1f7678dbde6bdf9f306.tar.bz2
interrupt handler type change
Diffstat (limited to 'c/src/lib/libbsp/shared')
-rw-r--r--c/src/lib/libbsp/shared/ChangeLog5
-rw-r--r--c/src/lib/libbsp/shared/include/irq-generic.h2
-rw-r--r--c/src/lib/libbsp/shared/src/irq-generic.c5
-rw-r--r--c/src/lib/libbsp/shared/src/irq-legacy.c98
4 files changed, 20 insertions, 90 deletions
diff --git a/c/src/lib/libbsp/shared/ChangeLog b/c/src/lib/libbsp/shared/ChangeLog
index 7043dac3a7..f0d3427e7c 100644
--- a/c/src/lib/libbsp/shared/ChangeLog
+++ b/c/src/lib/libbsp/shared/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-21 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * include/irq-generic.h, src/irq-generic.c, src/irq-legacy.c: Update
+ for interrupt handler type change.
+
2009-10-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
* bootcard: Update for heap API changes.
diff --git a/c/src/lib/libbsp/shared/include/irq-generic.h b/c/src/lib/libbsp/shared/include/irq-generic.h
index 2386587ccb..555e3e3ed5 100644
--- a/c/src/lib/libbsp/shared/include/irq-generic.h
+++ b/c/src/lib/libbsp/shared/include/irq-generic.h
@@ -226,7 +226,7 @@ static inline void bsp_interrupt_handler_dispatch(rtems_vector_number vector)
&bsp_interrupt_handler_table [bsp_interrupt_handler_index(vector)];
do {
- (*e->handler)(vector, e->arg);
+ (*e->handler)(e->arg);
e = e->next;
} while (e != NULL);
} else {
diff --git a/c/src/lib/libbsp/shared/src/irq-generic.c b/c/src/lib/libbsp/shared/src/irq-generic.c
index 8356728f41..2acd6b81f1 100644
--- a/c/src/lib/libbsp/shared/src/irq-generic.c
+++ b/c/src/lib/libbsp/shared/src/irq-generic.c
@@ -39,8 +39,10 @@ static uint8_t bsp_interrupt_handler_unique_table
static rtems_id bsp_interrupt_mutex = RTEMS_ID_NONE;
-static void bsp_interrupt_handler_empty(rtems_vector_number vector, void *arg)
+static void bsp_interrupt_handler_empty(void *arg)
{
+ rtems_vector_number vector = (rtems_vector_number) arg;
+
bsp_interrupt_handler_default(vector);
}
@@ -219,6 +221,7 @@ rtems_status_code bsp_interrupt_initialize(void)
/* Initialize handler table */
for (i = 0; i < BSP_INTERRUPT_HANDLER_TABLE_SIZE; ++i) {
bsp_interrupt_handler_table [i].handler = bsp_interrupt_handler_empty;
+ bsp_interrupt_handler_table [i].arg = (void *) i;
}
sc = bsp_interrupt_facility_initialize();
diff --git a/c/src/lib/libbsp/shared/src/irq-legacy.c b/c/src/lib/libbsp/shared/src/irq-legacy.c
index b864541b8b..37853bae3d 100644
--- a/c/src/lib/libbsp/shared/src/irq-legacy.c
+++ b/c/src/lib/libbsp/shared/src/irq-legacy.c
@@ -19,62 +19,21 @@
* http://www.rtems.com/license/LICENSE.
*/
-#include <stdbool.h>
-#include <stdlib.h>
+#include <string.h>
#define BSP_SHARED_HANDLER_SUPPORT
+#include <rtems.h>
#include <rtems/irq.h>
#include <bsp/irq-generic.h>
-typedef struct {
- rtems_irq_hdl handler;
- void *arg;
-} bsp_interrupt_legacy_entry;
-
-typedef struct {
- rtems_irq_hdl handler;
- void *handler_arg;
- bsp_interrupt_legacy_entry *legacy_handler_arg;
-} bsp_interrupt_legacy_iterate_entry;
-
-static void bsp_interrupt_legacy_dispatch(rtems_vector_number vector, void *arg)
-{
- bsp_interrupt_legacy_entry *e = (bsp_interrupt_legacy_entry *) arg;
- e->handler(e->arg);
-}
-
-static void bsp_interrupt_legacy_per_handler_routine(
- void *arg,
- const char *info,
- rtems_option options,
- rtems_interrupt_handler handler,
- void *handler_arg
-)
-{
- bsp_interrupt_legacy_iterate_entry *ie =
- (bsp_interrupt_legacy_iterate_entry *) arg;
- bsp_interrupt_legacy_entry *e = NULL;
-
- if (handler == bsp_interrupt_legacy_dispatch) {
- e = (bsp_interrupt_legacy_entry *) handler_arg;
- if (e->handler == ie->handler && e->arg == ie->handler_arg) {
- ie->legacy_handler_arg = e;
- }
- }
-}
-
/**
* @deprecated Obsolete.
*/
int BSP_get_current_rtems_irq_handler(rtems_irq_connect_data *cd)
{
- cd->hdl = NULL;
- cd->handle = NULL;
- cd->on = NULL;
- cd->off = NULL;
- cd->isOn = NULL;
+ memset(cd, 0, sizeof(*cd));
return 1;
}
@@ -85,24 +44,15 @@ int BSP_get_current_rtems_irq_handler(rtems_irq_connect_data *cd)
int BSP_install_rtems_irq_handler(const rtems_irq_connect_data *cd)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- bsp_interrupt_legacy_entry *e = malloc(sizeof(bsp_interrupt_legacy_entry));
-
- if (e == NULL) {
- return 0;
- }
-
- e->handler = cd->hdl;
- e->arg = cd->handle;
sc = rtems_interrupt_handler_install(
cd->name,
"LEGACY INSTALLED",
RTEMS_INTERRUPT_UNIQUE,
- bsp_interrupt_legacy_dispatch,
- e
+ cd->hdl,
+ cd->handle
);
if (sc != RTEMS_SUCCESSFUL) {
- free(e);
return 0;
}
@@ -119,29 +69,20 @@ int BSP_install_rtems_irq_handler(const rtems_irq_connect_data *cd)
int BSP_install_rtems_shared_irq_handler(const rtems_irq_connect_data *cd)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- bsp_interrupt_legacy_entry *e = malloc(sizeof(bsp_interrupt_legacy_entry));
-
- if (e == NULL) {
- return 0;
- }
-
- e->handler = cd->hdl;
- e->arg = cd->handle;
sc = rtems_interrupt_handler_install(
cd->name,
"LEGACY INSTALLED",
RTEMS_INTERRUPT_SHARED,
- bsp_interrupt_legacy_dispatch,
- e
+ cd->hdl,
+ cd->handle
);
if (sc != RTEMS_SUCCESSFUL) {
- free(e);
return 0;
}
if (cd->on != NULL) {
- cd->on(cd);
+ (*cd->on)(cd);
}
return 1;
@@ -153,31 +94,12 @@ int BSP_install_rtems_shared_irq_handler(const rtems_irq_connect_data *cd)
int BSP_remove_rtems_irq_handler(const rtems_irq_connect_data *cd)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- bsp_interrupt_legacy_iterate_entry e = {
- .handler = cd->hdl,
- .handler_arg = cd->handle,
- .legacy_handler_arg = NULL
- };
-
- sc = rtems_interrupt_handler_iterate(
- cd->name, bsp_interrupt_legacy_per_handler_routine, &e);
- if (sc != RTEMS_SUCCESSFUL) {
- return 0;
- }
-
- if (e.legacy_handler_arg == NULL) {
- return 0;
- }
if (cd->off != NULL) {
- cd->off(cd);
+ (*cd->off)(cd);
}
- sc = rtems_interrupt_handler_remove(
- cd->name, bsp_interrupt_legacy_dispatch, e.legacy_handler_arg);
-
- free(e.legacy_handler_arg);
-
+ sc = rtems_interrupt_handler_remove(cd->name, cd->hdl, cd->handle);
if (sc != RTEMS_SUCCESSFUL) {
return 0;
}