diff options
Diffstat (limited to 'cpukit/rtems/src')
-rw-r--r-- | cpukit/rtems/src/event.c | 6 | ||||
-rw-r--r-- | cpukit/rtems/src/mp.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/msg.c | 12 | ||||
-rw-r--r-- | cpukit/rtems/src/msgmp.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/part.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/partmp.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/region.c | 8 | ||||
-rw-r--r-- | cpukit/rtems/src/regionmp.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/sem.c | 21 | ||||
-rw-r--r-- | cpukit/rtems/src/semmp.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/signal.c | 21 | ||||
-rw-r--r-- | cpukit/rtems/src/taskmp.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/tasks.c | 214 |
13 files changed, 157 insertions, 139 deletions
diff --git a/cpukit/rtems/src/event.c b/cpukit/rtems/src/event.c index 4390d3ee08..ec14c2aaa9 100644 --- a/cpukit/rtems/src/event.c +++ b/cpukit/rtems/src/event.c @@ -56,7 +56,7 @@ rtems_status_code rtems_event_send( ) ); case OBJECTS_LOCAL: - _Event_sets_Post( event_in, &the_thread->pending_events ); + _Event_sets_Post( event_in, &the_thread->RTEMS_API->pending_events ); _Event_Surrender( the_thread ); _Thread_Enable_dispatch(); return( RTEMS_SUCCESSFUL ); @@ -91,13 +91,13 @@ rtems_status_code rtems_event_receive( ) { if ( _Event_sets_Is_empty( event_in ) ) { - *event_out = _Thread_Executing->pending_events; + *event_out = _Thread_Executing->RTEMS_API->pending_events; return( RTEMS_SUCCESSFUL ); } _Thread_Disable_dispatch(); _Event_Seize( event_in, option_set, ticks ); _Thread_Enable_dispatch(); - *event_out = _Thread_Executing->events_out; + *event_out = _Thread_Executing->RTEMS_API->events_out; return( _Thread_Executing->Wait.return_code ); } diff --git a/cpukit/rtems/src/mp.c b/cpukit/rtems/src/mp.c index ffa53d1da7..c555ffb3f1 100644 --- a/cpukit/rtems/src/mp.c +++ b/cpukit/rtems/src/mp.c @@ -58,7 +58,7 @@ void rtems_multiprocessing_announce ( void ) _Thread_Disable_dispatch(); _Event_sets_Post( RTEMS_EVENT_0, - &_Internal_threads_System_initialization_thread->pending_events + &_Internal_threads_System_initialization_thread->RTEMS_API->pending_events ); _Event_Surrender( _Internal_threads_System_initialization_thread ); _Thread_Enable_dispatch(); diff --git a/cpukit/rtems/src/msg.c b/cpukit/rtems/src/msg.c index 6dfd26a8f0..ff4683f880 100644 --- a/cpukit/rtems/src/msg.c +++ b/cpukit/rtems/src/msg.c @@ -181,7 +181,7 @@ rtems_status_code rtems_message_queue_create( } if ( _Attributes_Is_global( attribute_set ) && - !( _Objects_MP_Open( &_Message_queue_Information, name, + !( _Objects_MP_Allocate_and_open( &_Message_queue_Information, name, the_message_queue->Object.id, FALSE ) ) ) { _Message_queue_Free( the_message_queue ); _Thread_Enable_dispatch(); @@ -195,8 +195,14 @@ rtems_status_code rtems_message_queue_create( _Chain_Initialize_empty( &the_message_queue->Pending_messages ); - _Thread_queue_Initialize( &the_message_queue->Wait_queue, attribute_set, - STATES_WAITING_FOR_MESSAGE ); + _Thread_queue_Initialize( + &the_message_queue->Wait_queue, + OBJECTS_RTEMS_MESSAGE_QUEUES, + _Attributes_Is_priority( attribute_set ) ? + THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, + STATES_WAITING_FOR_MESSAGE, + _Message_queue_MP_Send_extract_proxy + ); _Objects_Open( &_Message_queue_Information, diff --git a/cpukit/rtems/src/msgmp.c b/cpukit/rtems/src/msgmp.c index 37ce2c9453..48e572c43b 100644 --- a/cpukit/rtems/src/msgmp.c +++ b/cpukit/rtems/src/msgmp.c @@ -259,7 +259,7 @@ void _Message_queue_MP_Process_packet ( case MESSAGE_QUEUE_MP_ANNOUNCE_CREATE: - ignored = _Objects_MP_Open( + ignored = _Objects_MP_Allocate_and_open( &_Message_queue_Information, the_packet->name, the_packet->Prefix.id, diff --git a/cpukit/rtems/src/part.c b/cpukit/rtems/src/part.c index a7e4308a13..3d21eed416 100644 --- a/cpukit/rtems/src/part.c +++ b/cpukit/rtems/src/part.c @@ -107,7 +107,7 @@ rtems_status_code rtems_partition_create( } if ( _Attributes_Is_global( attribute_set ) && - !( _Objects_MP_Open( &_Partition_Information, name, + !( _Objects_MP_Allocate_and_open( &_Partition_Information, name, the_partition->Object.id, FALSE ) ) ) { _Partition_Free( the_partition ); _Thread_Enable_dispatch(); diff --git a/cpukit/rtems/src/partmp.c b/cpukit/rtems/src/partmp.c index 074165777b..0097844183 100644 --- a/cpukit/rtems/src/partmp.c +++ b/cpukit/rtems/src/partmp.c @@ -184,7 +184,7 @@ void _Partition_MP_Process_packet ( case PARTITION_MP_ANNOUNCE_CREATE: - ignored = _Objects_MP_Open( + ignored = _Objects_MP_Allocate_and_open( &_Partition_Information, the_packet->name, the_packet->Prefix.id, diff --git a/cpukit/rtems/src/region.c b/cpukit/rtems/src/region.c index b54493eec7..25aca9cda7 100644 --- a/cpukit/rtems/src/region.c +++ b/cpukit/rtems/src/region.c @@ -113,7 +113,13 @@ rtems_status_code rtems_region_create( the_region->number_of_used_blocks = 0; _Thread_queue_Initialize( - &the_region->Wait_queue, attribute_set, STATES_WAITING_FOR_SEGMENT ); + &the_region->Wait_queue, + OBJECTS_RTEMS_REGIONS, + _Attributes_Is_priority( attribute_set ) ? + THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, + STATES_WAITING_FOR_SEGMENT, + _Region_MP_Send_extract_proxy + ); _Objects_Open( &_Region_Information, &the_region->Object, &name ); diff --git a/cpukit/rtems/src/regionmp.c b/cpukit/rtems/src/regionmp.c index 07de556acc..b460e554fe 100644 --- a/cpukit/rtems/src/regionmp.c +++ b/cpukit/rtems/src/regionmp.c @@ -190,7 +190,7 @@ void _Region_MP_Process_packet ( case REGION_MP_ANNOUNCE_CREATE: - ignored = _Objects_MP_Open( + ignored = _Objects_MP_Allocate_and_open( &_Region_Information, the_packet->name, the_packet->Prefix.id, diff --git a/cpukit/rtems/src/sem.c b/cpukit/rtems/src/sem.c index d810c205ee..9e87550c31 100644 --- a/cpukit/rtems/src/sem.c +++ b/cpukit/rtems/src/sem.c @@ -87,10 +87,11 @@ void _Semaphore_Manager_initialization( */ rtems_status_code rtems_semaphore_create( - rtems_name name, - unsigned32 count, - rtems_attribute attribute_set, - Objects_Id *id + rtems_name name, + unsigned32 count, + rtems_attribute attribute_set, + rtems_task_priority priority_ceiling, + Objects_Id *id ) { register Semaphore_Control *the_semaphore; @@ -127,7 +128,7 @@ rtems_status_code rtems_semaphore_create( } if ( _Attributes_Is_global( attribute_set ) && - !( _Objects_MP_Open( &_Semaphore_Information, name, + !( _Objects_MP_Allocate_and_open( &_Semaphore_Information, name, the_semaphore->Object.id, FALSE ) ) ) { _Semaphore_Free( the_semaphore ); _Thread_Enable_dispatch(); @@ -148,8 +149,14 @@ rtems_status_code rtems_semaphore_create( the_semaphore->holder_id = 0; } - _Thread_queue_Initialize( &the_semaphore->Wait_queue, - attribute_set, STATES_WAITING_FOR_SEMAPHORE ); + _Thread_queue_Initialize( + &the_semaphore->Wait_queue, + OBJECTS_RTEMS_SEMAPHORES, + _Attributes_Is_priority( attribute_set ) ? + THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, + STATES_WAITING_FOR_SEMAPHORE, + _Semaphore_MP_Send_extract_proxy + ); _Objects_Open( &_Semaphore_Information, &the_semaphore->Object, &name ); diff --git a/cpukit/rtems/src/semmp.c b/cpukit/rtems/src/semmp.c index 3be9fafb5f..03ca51a228 100644 --- a/cpukit/rtems/src/semmp.c +++ b/cpukit/rtems/src/semmp.c @@ -187,7 +187,7 @@ void _Semaphore_MP_Process_packet ( case SEMAPHORE_MP_ANNOUNCE_CREATE: - ignored = _Objects_MP_Open( + ignored = _Objects_MP_Allocate_and_open( &_Semaphore_Information, the_packet->name, the_packet->Prefix.id, diff --git a/cpukit/rtems/src/signal.c b/cpukit/rtems/src/signal.c index 411df5d86c..8a300d2969 100644 --- a/cpukit/rtems/src/signal.c +++ b/cpukit/rtems/src/signal.c @@ -37,22 +37,23 @@ */ rtems_status_code rtems_signal_catch( - rtems_asr_entry handler, - rtems_mode mode_set + rtems_asr_entry asr_handler, + rtems_mode mode_set ) { Thread_Control *executing; +/* XXX normalize mode */ executing = _Thread_Executing; _Thread_Disable_dispatch(); /* cannot reschedule while */ /* the thread is inconsistent */ - if ( ! _ASR_Is_null_handler( handler ) ) { - executing->Signal.mode_set = mode_set; - executing->Signal.handler = handler; + if ( !_ASR_Is_null_handler( asr_handler ) ) { + executing->RTEMS_API->Signal.mode_set = mode_set; + executing->RTEMS_API->Signal.handler = asr_handler; } else - _ASR_Initialize( &executing->Signal ); + _ASR_Initialize( &executing->RTEMS_API->Signal ); _Thread_Enable_dispatch(); return( RTEMS_SUCCESSFUL ); } @@ -91,11 +92,13 @@ rtems_status_code rtems_signal_send( signal_set ); case OBJECTS_LOCAL: - if ( ! _ASR_Is_null_handler( the_thread->Signal.handler ) ) { + if ( ! _ASR_Is_null_handler( the_thread->RTEMS_API->Signal.handler ) ) { if ( _Modes_Is_asr_disabled( the_thread->current_modes ) ) - _ASR_Post_signals( signal_set, &the_thread->Signal.signals_pending ); + _ASR_Post_signals( + signal_set, &the_thread->RTEMS_API->Signal.signals_pending ); else { - _ASR_Post_signals( signal_set, &the_thread->Signal.signals_posted ); + _ASR_Post_signals( + signal_set, &the_thread->RTEMS_API->Signal.signals_posted ); if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) _ISR_Signals_to_thread_executing = TRUE; } diff --git a/cpukit/rtems/src/taskmp.c b/cpukit/rtems/src/taskmp.c index 003c543c5a..2b7fb214c6 100644 --- a/cpukit/rtems/src/taskmp.c +++ b/cpukit/rtems/src/taskmp.c @@ -193,7 +193,7 @@ void _RTEMS_tasks_MP_Process_packet ( case RTEMS_TASKS_MP_ANNOUNCE_CREATE: - ignored = _Objects_MP_Open( + ignored = _Objects_MP_Allocate_and_open( &_RTEMS_tasks_Information, the_packet->name, the_packet->Prefix.id, diff --git a/cpukit/rtems/src/tasks.c b/cpukit/rtems/src/tasks.c index 5574a6633e..62bc8c1995 100644 --- a/cpukit/rtems/src/tasks.c +++ b/cpukit/rtems/src/tasks.c @@ -86,27 +86,35 @@ rtems_status_code rtems_task_create( ) { register Thread_Control *the_thread; - unsigned32 actual_stack_size; - unsigned32 memory_needed; - void *memory; + Objects_MP_Control *the_global_object = NULL; + boolean is_fp; + boolean is_global; rtems_attribute the_attribute_set; + Priority_Control core_priority; + if ( !rtems_is_name_valid( name ) ) return ( RTEMS_INVALID_NAME ); + /* + * Core Thread Initialize insures we get the minimum amount of + * stack space. + */ + #if 0 if ( !_Stack_Is_enough( stack_size ) ) return( RTEMS_INVALID_SIZE ); #endif - if ( !_Stack_Is_enough( stack_size ) ) - actual_stack_size = RTEMS_MINIMUM_STACK_SIZE; - else - actual_stack_size = stack_size; + /* + * Validate the RTEMS API priority and convert it to the core priority range. + */ if ( !_Priority_Is_valid( initial_priority ) ) return( RTEMS_INVALID_PRIORITY ); + core_priority = _RTEMS_Tasks_Priority_to_Core( initial_priority ); + /* * Fix the attribute set to match the attributes which * this processor (1) requires and (2) is able to support. @@ -120,11 +128,40 @@ rtems_status_code rtems_task_create( the_attribute_set = _Attributes_Clear( the_attribute_set, ATTRIBUTES_NOT_SUPPORTED ); - if ( _Attributes_Is_global( the_attribute_set ) && - !_Configuration_Is_multiprocessing() ) - return( RTEMS_MP_NOT_CONFIGURED ); + if ( _Attributes_Is_floating_point( the_attribute_set ) ) + is_fp = TRUE; + else + is_fp = FALSE; + + if ( _Attributes_Is_global( the_attribute_set ) ) { + + is_global = TRUE; + + if ( !_Configuration_Is_multiprocessing() ) + return( RTEMS_MP_NOT_CONFIGURED ); - _Thread_Disable_dispatch(); /* to prevent deletion */ + } else + is_global = FALSE; + + /* + * Make sure system is MP if this task is global + */ + + /* + * Disable dispatch for protection + */ + + _Thread_Disable_dispatch(); + + /* + * Allocate the thread control block and -- if the task is global -- + * allocate a global object control block. + * + * NOTE: This routine does not use the combined allocate and open + * global object routine because this results in a lack of + * control over when memory is allocated and can be freed in + * the event of an error. + */ the_thread = _RTEMS_tasks_Allocate(); @@ -133,71 +170,71 @@ rtems_status_code rtems_task_create( return( RTEMS_TOO_MANY ); } - actual_stack_size = _Stack_Adjust_size( actual_stack_size ); - memory_needed = actual_stack_size; + if ( is_global ) { + the_global_object = _Objects_MP_Allocate_global_object(); - if ( _Attributes_Is_floating_point( the_attribute_set ) ) - memory_needed += CONTEXT_FP_SIZE; + if ( _Objects_MP_Is_null_global_object( the_global_object ) ) { + _RTEMS_tasks_Free( the_thread ); + _Thread_Enable_dispatch(); + return( RTEMS_TOO_MANY ); + } + } - memory = _Workspace_Allocate( memory_needed ); +#if 0 + /* + * Allocate and initialize the RTEMS API specific information + */ + + the_thread->RTEMS_API = _Workspace_Allocate( sizeof( RTEMS_API_Control ) ); - if ( !memory ) { + if ( !the_thread->RTEMS_API ) { _RTEMS_tasks_Free( the_thread ); + if ( is_global ) + _Objects_MP_Free_global_object( the_global_object ); _Thread_Enable_dispatch(); return( RTEMS_UNSATISFIED ); } + the_thread->RTEMS_API->pending_events = EVENT_SETS_NONE_PENDING; + _ASR_Initialize( &the_thread->RTEMS_API->Signal ); +#endif + /* - * Stack is put in the lower address regions of the allocated memory. - * The optional floating point context area goes into the higher part - * of the allocated memory. + * Initialize the core thread for this task. */ - _Stack_Initialize( - &the_thread->Start.Initial_stack, memory, actual_stack_size ); - - if ( _Attributes_Is_floating_point( the_attribute_set ) ) - the_thread->fp_context = _Context_Fp_start( memory, actual_stack_size ); - else - the_thread->fp_context = NULL; - - the_thread->Start.fp_context = the_thread->fp_context; +/* XXX normalize mode */ - if ( _Attributes_Is_global( the_attribute_set ) && - !( _Objects_MP_Open( &_RTEMS_tasks_Information, name, - the_thread->Object.id, FALSE ) ) ) { + if ( !_Thread_Initialize( &_RTEMS_tasks_Information, the_thread, + NULL, stack_size, is_fp, core_priority, initial_modes, &name ) ) { + if ( is_global ) + _Objects_MP_Free_global_object( the_global_object ); _RTEMS_tasks_Free( the_thread ); - (void) _Workspace_Free( memory ); _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return( RTEMS_UNSATISFIED ); } - the_thread->attribute_set = the_attribute_set; - the_thread->current_state = STATES_DORMANT; - the_thread->current_modes = initial_modes; - the_thread->pending_events = EVENT_SETS_NONE_PENDING; - the_thread->resource_count = 0; - the_thread->real_priority = initial_priority; - the_thread->Start.initial_priority = initial_priority; - the_thread->Start.initial_modes = initial_modes; - - _Thread_Set_priority( the_thread, initial_priority ); - - _ASR_Initialize( &the_thread->Signal ); + *id = the_thread->Object.id; - _Objects_Open( &_RTEMS_tasks_Information, &the_thread->Object, &name ); + if ( is_global ) { - *id = the_thread->Object.id; + the_thread->RTEMS_API->is_global = TRUE; - _User_extensions_Task_create( the_thread ); + _Objects_MP_Open( + &_RTEMS_tasks_Information, + the_global_object, + name, + the_thread->Object.id + ); - if ( _Attributes_Is_global( the_attribute_set ) ) _RTEMS_tasks_MP_Send_process_packet( RTEMS_TASKS_MP_ANNOUNCE_CREATE, the_thread->Object.id, name ); + } + _Thread_Enable_dispatch(); return( RTEMS_SUCCESSFUL ); } @@ -252,9 +289,9 @@ rtems_status_code rtems_task_ident( */ rtems_status_code rtems_task_start( - Objects_Id id, + rtems_id id, rtems_task_entry entry_point, - unsigned32 argument + unsigned32 argument ) { register Thread_Control *the_thread; @@ -271,17 +308,8 @@ rtems_status_code rtems_task_start( _Thread_Dispatch(); return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); case OBJECTS_LOCAL: - if ( _States_Is_dormant( the_thread->current_state ) ) { - - the_thread->Start.entry_point = entry_point; - the_thread->Start.initial_argument = argument; - - _Thread_Load_environment( the_thread ); - - _Thread_Ready( the_thread ); - - _User_extensions_Task_start( the_thread ); - + if ( _Thread_Start( + the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) { _Thread_Enable_dispatch(); return( RTEMS_SUCCESSFUL ); } @@ -316,7 +344,7 @@ rtems_status_code rtems_task_restart( ) { register Thread_Control *the_thread; - Objects_Locations location; + Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { @@ -326,32 +354,11 @@ rtems_status_code rtems_task_restart( _Thread_Dispatch(); return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); case OBJECTS_LOCAL: - if ( !_States_Is_dormant( the_thread->current_state ) ) { - - _Thread_Set_transient( the_thread ); - _ASR_Initialize( &the_thread->Signal ); - the_thread->pending_events = EVENT_SETS_NONE_PENDING; - the_thread->resource_count = 0; - the_thread->current_modes = the_thread->Start.initial_modes; - the_thread->Start.initial_argument = argument; - - _RTEMS_tasks_Cancel_wait( the_thread ); - - if ( the_thread->current_priority != - the_thread->Start.initial_priority ) { - the_thread->real_priority = the_thread->Start.initial_priority; - _Thread_Set_priority( the_thread, - the_thread->Start.initial_priority ); - } - - _Thread_Load_environment( the_thread ); + if ( _Thread_Restart( the_thread, NULL, argument ) ) { - _Thread_Ready( the_thread ); - - _User_extensions_Task_restart( the_thread ); - - if ( _Thread_Is_executing ( the_thread ) ) - _Thread_Restart_self(); + /* XXX until these are in an API extension they are too late. */ + _ASR_Initialize( &the_thread->RTEMS_API->Signal ); + the_thread->RTEMS_API->pending_events = EVENT_SETS_NONE_PENDING; _Thread_Enable_dispatch(); return( RTEMS_SUCCESSFUL ); @@ -396,25 +403,14 @@ rtems_status_code rtems_task_delete( _Thread_Dispatch(); return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); case OBJECTS_LOCAL: - _Objects_Close( &_RTEMS_tasks_Information, &the_thread->Object ); - - _Thread_Set_state( the_thread, STATES_TRANSIENT ); - - _User_extensions_Task_delete( the_thread ); - -#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE ) - if ( _Thread_Is_allocated_fp( the_thread ) ) - _Thread_Deallocate_fp(); -#endif - the_thread->fp_context = NULL; - - _RTEMS_tasks_Cancel_wait( the_thread ); + _Thread_Close( &_RTEMS_tasks_Information, the_thread ); - (void) _Workspace_Free( the_thread->Start.Initial_stack.area ); + /* XXX */ + (void) _Workspace_Free( the_thread->RTEMS_API ); _RTEMS_tasks_Free( the_thread ); - if ( _Attributes_Is_global( the_thread->attribute_set ) ) { + if ( _Attributes_Is_global( the_thread->RTEMS_API->is_global ) ) { _Objects_MP_Close( &_RTEMS_tasks_Information, the_thread->Object.id ); @@ -551,7 +547,7 @@ rtems_status_code rtems_task_resume( */ rtems_status_code rtems_task_set_priority( - Objects_Id id, + Objects_Id id, rtems_task_priority new_priority, rtems_task_priority *old_priority ) @@ -662,7 +658,7 @@ rtems_status_code rtems_task_get_note( if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { - *note = _Thread_Executing->Notepads[ notepad ]; + *note = _Thread_Executing->RTEMS_API->Notepads[ notepad ]; return( RTEMS_SUCCESSFUL ); } @@ -681,7 +677,7 @@ rtems_status_code rtems_task_get_note( 0 /* Not used */ ); case OBJECTS_LOCAL: - *note= the_thread->Notepads[ notepad ]; + *note= the_thread->RTEMS_API->Notepads[ notepad ]; _Thread_Enable_dispatch(); return( RTEMS_SUCCESSFUL ); } @@ -729,7 +725,7 @@ rtems_status_code rtems_task_set_note( if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { - _Thread_Executing->Notepads[ notepad ] = note; + _Thread_Executing->RTEMS_API->Notepads[ notepad ] = note; return( RTEMS_SUCCESSFUL ); } @@ -747,7 +743,7 @@ rtems_status_code rtems_task_set_note( ); case OBJECTS_LOCAL: - the_thread->Notepads[ notepad ] = note; + the_thread->RTEMS_API->Notepads[ notepad ] = note; _Thread_Enable_dispatch(); return( RTEMS_SUCCESSFUL ); } |