summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/eventsend.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-10-30 16:18:36 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-10-30 18:00:33 +0100
commit990575c57f82b8b8ad5c2b8abc53796830fee59a (patch)
tree70f48369e6882c4ca231534e4143b80d2994cef5 /cpukit/rtems/src/eventsend.c
parentrtems: Remove unused event_condition member (diff)
downloadrtems-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.c71
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;
}