diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-05-17 23:22:45 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-05-17 23:22:45 +0000 |
commit | c9973bbc5425e879c4f64f401a08d386a4e5790b (patch) | |
tree | 9a64ea365b585c45c4a297809e697c760338e29d /cpukit/rtems/src/intrcatch.c | |
parent | Split Signal Manager into one routine per file. (diff) | |
download | rtems-c9973bbc5425e879c4f64f401a08d386a4e5790b.tar.bz2 |
Split Interrupt Manager into one routine per file.
Diffstat (limited to '')
-rw-r--r-- | cpukit/rtems/src/intrcatch.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/cpukit/rtems/src/intrcatch.c b/cpukit/rtems/src/intrcatch.c new file mode 100644 index 0000000000..6ceedd7069 --- /dev/null +++ b/cpukit/rtems/src/intrcatch.c @@ -0,0 +1,55 @@ +/* + * Interrupt Manager + * + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <rtems/system.h> +#include <rtems/rtems/status.h> +#include <rtems/score/isr.h> +#include <rtems/rtems/intr.h> + +/* rtems_interrupt_catch + * + * This directive allows a thread to specify what action to take when + * catching signals. + * + * Input parameters: + * new_isr_handler - address of interrupt service routine (isr) + * vector - interrupt vector number + * old_isr_handler - address at which to store previous ISR address + * + * Output parameters: + * RTEMS_SUCCESSFUL - always succeeds + * *old_isr_handler - previous ISR address + */ + +rtems_status_code rtems_interrupt_catch( + rtems_isr_entry new_isr_handler, + rtems_vector_number vector, + rtems_isr_entry *old_isr_handler +) +{ + if ( !_ISR_Is_vector_number_valid( vector ) ) + return RTEMS_INVALID_NUMBER; + + if ( !_ISR_Is_valid_user_handler( (void *) new_isr_handler ) ) + return RTEMS_INVALID_ADDRESS; + + if ( !_ISR_Is_valid_user_handler( (void *) old_isr_handler ) ) + return RTEMS_INVALID_ADDRESS; + + _ISR_Install_vector( + vector, (proc_ptr)new_isr_handler, (proc_ptr *)old_isr_handler ); + + return RTEMS_SUCCESSFUL; +} |