forked from Imagelibrary/rtems
* apiext.c, chain.c, coremsg.c, coremsgbroadcast.c, coremsgclose.c, coremsgflush.c, coremsgflushsupp.c, coremsgflushwait.c, coremsginsert.c, coremsgseize.c, coremsgsubmit.c, coremutex.c, coremutexflush.c, coremutexseize.c, coremutexsurrender.c, coresem.c, coresemflush.c, coresemseize.c, coresemsurrender.c, coretod.c, coretodset.c, coretodtickle.c, coretodtoseconds.c, coretodvalidate.c, heap.c, heapallocate.c, heapextend.c, heapfree.c, heapgetinfo.c, heapsizeofuserarea.c, heapwalk.c, interr.c, isr.c, mpci.c, object.c, objectallocate.c, objectallocatebyindex.c, objectclearname.c, objectcomparenameraw.c, objectcomparenamestring.c, objectcopynameraw.c, objectcopynamestring.c, objectextendinformation.c, objectfree.c, objectget.c, objectgetbyindex.c, objectgetisr.c, objectgetnext.c, objectgetnoprotection.c, objectinitializeinformation.c, objectmp.c, objectnametoid.c, objectshrinkinformation.c, thread.c, threadchangepriority.c, threadclearstate.c, threadclose.c, threadcreateidle.c, threaddelayended.c, threaddispatch.c, threadevaluatemode.c, threadget.c, threadhandler.c, threadidlebody.c, threadinitialize.c, threadloadenv.c, threadmp.c, threadq.c, threadqdequeue.c, threadqdequeuefifo.c, threadqdequeuepriority.c, threadqenqueue.c, threadqenqueuefifo.c, threadqenqueuepriority.c, threadqextract.c, threadqextractfifo.c, threadqextractpriority.c, threadqextractwithproxy.c, threadqfirst.c, threadqfirstfifo.c, threadqfirstpriority.c, threadqflush.c, threadqtimeout.c, threadready.c, threadreset.c, threadresettimeslice.c, threadrestart.c, threadresume.c, threadrotatequeue.c, threadsetpriority.c, threadsetstate.c, threadsettransient.c, threadstackallocate.c, threadstackfree.c, threadstart.c, threadstartmultitasking.c, threadsuspend.c, threadtickletimeslice.c, threadyieldprocessor.c, userext.c, watchdog.c, watchdogadjust.c, watchdoginsert.c, watchdogremove.c, watchdogtickle.c, wkspace.c: URL for license changed.
90 lines
2.3 KiB
C
90 lines
2.3 KiB
C
/*
|
|
* 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.rtems.com/license/LICENSE.
|
|
*
|
|
* $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;
|
|
|
|
#if defined(RTEMS_MULTIPROCESSING)
|
|
index = id - information->minimum_id + 1;
|
|
#else
|
|
/* index = _Objects_Get_index( id ); */
|
|
index = id & 0x0000ffff;
|
|
/* This should work but doesn't always :( */
|
|
/* index = (unsigned16) id; */
|
|
#endif
|
|
|
|
_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
|
|
}
|