forked from Imagelibrary/rtems
New file. Convert ID to pointer and return with interrupts -- not
dispatching -- disabled.
This commit is contained in:
83
c/src/exec/score/src/objectgetisr.c
Normal file
83
c/src/exec/score/src/objectgetisr.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Object Handler
|
||||
*
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* 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/score/address.h>
|
||||
#include <rtems/score/chain.h>
|
||||
#include <rtems/score/object.h>
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
#include <rtems/score/objectmp.h>
|
||||
#endif
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/wkspace.h>
|
||||
#include <rtems/score/sysstate.h>
|
||||
#include <rtems/score/isr.h>
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Objects_Get_isr_disable
|
||||
*
|
||||
* This routine sets the object pointer for the given
|
||||
* object id based on the given object information structure.
|
||||
*
|
||||
* Input parameters:
|
||||
* information - pointer to entry in table for this class
|
||||
* id - object id to search for
|
||||
* location - address of where to store the location
|
||||
* level - pointer to previous interrupt level
|
||||
*
|
||||
* Output parameters:
|
||||
* returns - address of object if local
|
||||
* location - one of the following:
|
||||
* OBJECTS_ERROR - invalid object ID
|
||||
* OBJECTS_REMOTE - remote object
|
||||
* OBJECTS_LOCAL - local object
|
||||
* *level - previous interrupt level
|
||||
*/
|
||||
|
||||
Objects_Control *_Objects_Get_isr_disable(
|
||||
Objects_Information *information,
|
||||
Objects_Id id,
|
||||
Objects_Locations *location,
|
||||
ISR_Level *level_p
|
||||
)
|
||||
{
|
||||
Objects_Control *the_object;
|
||||
unsigned32 index;
|
||||
ISR_Level level;
|
||||
|
||||
/* index = _Objects_Get_index( id ); */
|
||||
index = (unsigned16) id;
|
||||
|
||||
_ISR_Disable( level );
|
||||
if ( information->maximum >= index ) {
|
||||
if ( (the_object = information->local_table[ index ]) != NULL ) {
|
||||
*location = OBJECTS_LOCAL;
|
||||
*level_p = level;
|
||||
return the_object;
|
||||
}
|
||||
_ISR_Enable( level );
|
||||
*location = OBJECTS_ERROR;
|
||||
return NULL;
|
||||
}
|
||||
_ISR_Enable( level );
|
||||
*location = OBJECTS_ERROR;
|
||||
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
_Objects_MP_Is_remote( information, id, location, &the_object );
|
||||
return the_object;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user