diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-11-09 16:57:56 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-11-09 16:57:56 +0000 |
commit | d9bae2489ad2aaee943f07a683fa5678d8650dc0 (patch) | |
tree | 7fb7a7983cb9fba6954fd262136677230a5dbdd5 /cpukit/posix | |
parent | 2007-11-09 Joel Sherrill <joel.sherrill@OARcorp.com> (diff) | |
download | rtems-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')
-rw-r--r-- | cpukit/posix/Makefile.am | 2 | ||||
-rw-r--r-- | cpukit/posix/src/ada_intrsupp.c | 131 |
2 files changed, 132 insertions, 1 deletions
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; +} + |