summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-11-09 16:57:56 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-11-09 16:57:56 +0000
commitd9bae2489ad2aaee943f07a683fa5678d8650dc0 (patch)
tree7fb7a7983cb9fba6954fd262136677230a5dbdd5 /cpukit
parent2007-11-09 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-d9bae2489ad2aaee943f07a683fa5678d8650dc0.tar.bz2
2007-11-09 Joel Sherrill <joel.sherrill@oarcorp.com>
* posix/Makefile.am: Add support for Ada95 interrupt tasks. This will require gcc 4.3 or newer. * posix/src/ada_intrsupp.c: New file.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/ChangeLog6
-rw-r--r--cpukit/posix/Makefile.am2
-rw-r--r--cpukit/posix/src/ada_intrsupp.c131
3 files changed, 138 insertions, 1 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog
index 27aaf4b1c7..344fa09a97 100644
--- a/cpukit/ChangeLog
+++ b/cpukit/ChangeLog
@@ -1,3 +1,9 @@
+2007-11-09 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * posix/Makefile.am: Add support for Ada95 interrupt tasks. This
+ will require gcc 4.3 or newer.
+ * posix/src/ada_intrsupp.c: New file.
+
2007-11-09 Joel Sherrill <joel.sherrill@OARcorp.com>
* sapi/src/exinit.c, score/Makefile.am,
diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am
index c14dc4a58a..7f08a0f567 100644
--- a/cpukit/posix/Makefile.am
+++ b/cpukit/posix/Makefile.am
@@ -167,7 +167,7 @@ libposix_a_SOURCES += src/ptimer.c src/ptimer1.c
EXTRA_DIST += src/README.mqueue
-libposix_a_SOURCES += src/adasupp.c src/sched.c \
+libposix_a_SOURCES += src/adasupp.c src/ada_intrsupp.c src/sched.c \
src/sysconf.c src/types.c
endif
endif
diff --git a/cpukit/posix/src/ada_intrsupp.c b/cpukit/posix/src/ada_intrsupp.c
new file mode 100644
index 0000000000..9bec384127
--- /dev/null
+++ b/cpukit/posix/src/ada_intrsupp.c
@@ -0,0 +1,131 @@
+#include <rtems.h>
+#include <rtems/bspIo.h>
+
+rtems_id __gnat_binary_semaphore_create(void)
+{
+ rtems_status_code status;
+ rtems_id semaphore;
+
+ status = rtems_semaphore_create(
+ rtems_build_name( 'A', 'I', 'S', 'R' ),
+ 0,
+ RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO,
+ 0,
+ &semaphore
+ );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_create failed %d\n", status );
+
+ #if defined(GNAT_DEBUG)
+ printk( "__gnat_binary_semaphore_create\n" );
+ #endif
+ return semaphore;
+}
+
+int __gnat_binary_semaphore_delete(
+ rtems_id semaphore
+)
+{
+ rtems_status_code status;
+
+ #if defined(GNAT_DEBUG)
+ printk( "__gnat_binary_semaphore_delete\n" );
+ #endif
+
+ status = rtems_semaphore_delete( semaphore );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_delete failed %d\n", status );
+
+ return 0;
+}
+
+int __gnat_binary_semaphore_obtain(
+ rtems_id semaphore
+)
+{
+ rtems_status_code status;
+
+ #if defined(GNAT_DEBUG)
+ printk( "__gnat_binary_semaphore_obtain\n" );
+ #endif
+
+ status = rtems_semaphore_obtain( semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_obtain failed %d\n", status );
+
+ return 0;
+}
+
+int __gnat_binary_semaphore_release(
+ rtems_id semaphore
+)
+{
+ rtems_status_code status;
+
+ #if defined(GNAT_DEBUG)
+ printk( "__gnat_binary_semaphore_release\n" );
+ #endif
+
+ status = rtems_semaphore_release( semaphore );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_release failed %d\n", status );
+
+ return 0;
+}
+
+int __gnat_binary_semaphore_flush(
+ rtems_id semaphore
+)
+{
+ rtems_status_code status;
+
+ printk( "__gnat_binary_semaphore_flush\n" );
+
+ status = rtems_semaphore_flush( semaphore );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_flush failed %d\n", status );
+
+ return 0;
+}
+
+typedef void (*ISRHandler)(void*);
+ void *set_vector( void *, rtems_vector_number, int );
+
+int __gnat_interrupt_connect(
+ int vector,
+ ISRHandler handler,
+ void *parameter
+)
+{
+ printk( "__gnat_interrupt_connect( %d, %p, %p )\n", vector, handler, parameter );
+ set_vector( handler, vector, 1 );
+ return 0;
+}
+
+int __gnat_interrupt_set(
+ int vector,
+ ISRHandler handler
+)
+{
+ printk( "__gnat_interrupt_set( %d, %p )\n", vector, handler );
+
+ set_vector( handler, vector, 1 );
+ return 0;
+}
+
+ISRHandler __gnat_interrupt_get(
+ int vector
+)
+{
+ printk( "__gnat_interrupt_get( %d )\n", vector );
+ return 0;
+}
+
+int __gnat_interrupt_number_to_vector(
+ int intNum
+)
+{
+ printk( "__gnat_interrupt_number_to_vector( %d )\n", intNum );
+ return intNum;
+}
+