diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-30 16:18:36 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-30 18:00:33 +0100 |
commit | 990575c57f82b8b8ad5c2b8abc53796830fee59a (patch) | |
tree | 70f48369e6882c4ca231534e4143b80d2994cef5 /cpukit/rtems/src/eventsend.c | |
parent | rtems: Remove unused event_condition member (diff) | |
download | rtems-990575c57f82b8b8ad5c2b8abc53796830fee59a.tar.bz2 |
rtems: Reusable event implementation
Change event implementation to enable reuse for system events.
Diffstat (limited to 'cpukit/rtems/src/eventsend.c')
-rw-r--r-- | cpukit/rtems/src/eventsend.c | 71 |
1 files changed, 27 insertions, 44 deletions
diff --git a/cpukit/rtems/src/eventsend.c b/cpukit/rtems/src/eventsend.c index cc06cfaca1..8f0b027ecf 100644 --- a/cpukit/rtems/src/eventsend.c +++ b/cpukit/rtems/src/eventsend.c @@ -10,66 +10,49 @@ */ #if HAVE_CONFIG_H -#include "config.h" + #include "config.h" #endif -#include <rtems/system.h> -#include <rtems/rtems/status.h> #include <rtems/rtems/event.h> -#include <rtems/score/isr.h> -#include <rtems/score/object.h> -#include <rtems/rtems/options.h> -#include <rtems/score/states.h> -#include <rtems/score/thread.h> #include <rtems/rtems/tasks.h> -/* - * rtems_event_send - * - * This directive allows a thread send an event set to another thread. - * - * Input parameters: - * id - thread id - * event - event set - * - * Output parameters: - * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful - */ - rtems_status_code rtems_event_send( - rtems_id id, - rtems_event_set event_in + rtems_id id, + rtems_event_set event_in ) { - register Thread_Control *the_thread; - Objects_Locations location; - RTEMS_API_Control *api; + rtems_status_code sc; + Thread_Control *thread; + Objects_Locations location; + RTEMS_API_Control *api; - the_thread = _Thread_Get( id, &location ); + thread = _Thread_Get( id, &location ); switch ( location ) { - case OBJECTS_LOCAL: - api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; - _Event_sets_Post( event_in, &api->pending_events ); - _Event_Surrender( the_thread ); + api = thread->API_Extensions[ THREAD_API_RTEMS ]; + _Event_Surrender( + thread, + event_in, + &api->Event, + &_Event_Sync_state, + STATES_WAITING_FOR_EVENT + ); _Thread_Enable_dispatch(); - return RTEMS_SUCCESSFUL; - -#if defined(RTEMS_MULTIPROCESSING) + sc = RTEMS_SUCCESSFUL; + break; +#ifdef RTEMS_MULTIPROCESSING case OBJECTS_REMOTE: - return( - _Event_MP_Send_request_packet( - EVENT_MP_SEND_REQUEST, - id, - event_in - ) + sc = _Event_MP_Send_request_packet( + EVENT_MP_SEND_REQUEST, + id, + event_in ); + break; #endif - - case OBJECTS_ERROR: + default: + sc = RTEMS_INVALID_ID; break; } - return RTEMS_INVALID_ID; + return sc; } |