forked from Imagelibrary/rtems
Split Interrupt Manager into one routine per file.
This commit is contained in:
@@ -24,6 +24,13 @@ TASK_PIECES=\
|
||||
taskmode taskrestart taskresume tasksetnote tasksetpriority \
|
||||
taskstart tasksuspend taskwakeafter taskwakewhen
|
||||
|
||||
RATEMON_PIECES=\
|
||||
ratemon ratemoncancel ratemoncreate ratemondelete ratemongetstatus \
|
||||
ratemonident ratemonperiod ratemontimeout
|
||||
|
||||
INTR_PIECES=\
|
||||
intr intrbody intrcatch
|
||||
|
||||
CLOCK_PIECES=\
|
||||
clock clockget clockset clocktick
|
||||
|
||||
@@ -46,10 +53,6 @@ EVENT_PIECES=\
|
||||
SIGNAL_PIECES=\
|
||||
signal signalcatch signalsend
|
||||
|
||||
RATEMON_PIECES=\
|
||||
ratemon ratemoncancel ratemoncreate ratemondelete ratemongetstatus \
|
||||
ratemonident ratemonperiod ratemontimeout
|
||||
|
||||
REGION_PIECES=\
|
||||
region regioncreate regiondelete regionextend regiongetsegment \
|
||||
regiongetsegmentsize regionident regionreturnsegemnt regionreturnsegemnt
|
||||
@@ -63,7 +66,7 @@ DPMEM_PIECES=\
|
||||
|
||||
C_PIECES=\
|
||||
attr $(TASK_PIECES) $(RATEMON_PIECES) \
|
||||
intr intrbody \
|
||||
$(INTR_PIECES) \
|
||||
$(CLOCK_PIECES) $(TIMER_PIECES) \
|
||||
$(SEMAPHORE_PIECES) $(MESSAGE_QUEUE_PIECES) \
|
||||
$(EVENT_PIECES) $(SIGNAL_PIECES) \
|
||||
|
||||
@@ -30,39 +30,3 @@
|
||||
void _Interrupt_Manager_initialization( void )
|
||||
{
|
||||
}
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
55
c/src/exec/rtems/src/intrcatch.c
Normal file
55
c/src/exec/rtems/src/intrcatch.c
Normal file
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user