summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/ada_intrsupp.c
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/posix/src/ada_intrsupp.c
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/posix/src/ada_intrsupp.c')
-rw-r--r--cpukit/posix/src/ada_intrsupp.c131
1 files changed, 131 insertions, 0 deletions
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;
+}
+