Changeset 7f6a24ab in rtems for cpukit/rtems/src
- Timestamp:
- 08/28/95 15:30:29 (28 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 5072b07
- Parents:
- 5250ff39
- Location:
- cpukit/rtems/src
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/rtems/src/event.c
r5250ff39 r7f6a24ab 57 57 ); 58 58 case OBJECTS_LOCAL: 59 _Event_sets_Post( event_in, &the_thread-> pending_events );59 _Event_sets_Post( event_in, &the_thread->RTEMS_API->pending_events ); 60 60 _Event_Surrender( the_thread ); 61 61 _Thread_Enable_dispatch(); … … 92 92 { 93 93 if ( _Event_sets_Is_empty( event_in ) ) { 94 *event_out = _Thread_Executing-> pending_events;94 *event_out = _Thread_Executing->RTEMS_API->pending_events; 95 95 return( RTEMS_SUCCESSFUL ); 96 96 } … … 99 99 _Event_Seize( event_in, option_set, ticks ); 100 100 _Thread_Enable_dispatch(); 101 *event_out = _Thread_Executing-> events_out;101 *event_out = _Thread_Executing->RTEMS_API->events_out; 102 102 return( _Thread_Executing->Wait.return_code ); 103 103 } -
cpukit/rtems/src/mp.c
r5250ff39 r7f6a24ab 59 59 _Event_sets_Post( 60 60 RTEMS_EVENT_0, 61 &_Internal_threads_System_initialization_thread-> pending_events61 &_Internal_threads_System_initialization_thread->RTEMS_API->pending_events 62 62 ); 63 63 _Event_Surrender( _Internal_threads_System_initialization_thread ); -
cpukit/rtems/src/msg.c
r5250ff39 r7f6a24ab 182 182 183 183 if ( _Attributes_Is_global( attribute_set ) && 184 !( _Objects_MP_ Open( &_Message_queue_Information, name,184 !( _Objects_MP_Allocate_and_open( &_Message_queue_Information, name, 185 185 the_message_queue->Object.id, FALSE ) ) ) { 186 186 _Message_queue_Free( the_message_queue ); … … 196 196 _Chain_Initialize_empty( &the_message_queue->Pending_messages ); 197 197 198 _Thread_queue_Initialize( &the_message_queue->Wait_queue, attribute_set, 199 STATES_WAITING_FOR_MESSAGE ); 198 _Thread_queue_Initialize( 199 &the_message_queue->Wait_queue, 200 OBJECTS_RTEMS_MESSAGE_QUEUES, 201 _Attributes_Is_priority( attribute_set ) ? 202 THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, 203 STATES_WAITING_FOR_MESSAGE, 204 _Message_queue_MP_Send_extract_proxy 205 ); 200 206 201 207 _Objects_Open( -
cpukit/rtems/src/msgmp.c
r5250ff39 r7f6a24ab 260 260 case MESSAGE_QUEUE_MP_ANNOUNCE_CREATE: 261 261 262 ignored = _Objects_MP_ Open(262 ignored = _Objects_MP_Allocate_and_open( 263 263 &_Message_queue_Information, 264 264 the_packet->name, -
cpukit/rtems/src/part.c
r5250ff39 r7f6a24ab 108 108 109 109 if ( _Attributes_Is_global( attribute_set ) && 110 !( _Objects_MP_ Open( &_Partition_Information, name,110 !( _Objects_MP_Allocate_and_open( &_Partition_Information, name, 111 111 the_partition->Object.id, FALSE ) ) ) { 112 112 _Partition_Free( the_partition ); -
cpukit/rtems/src/partmp.c
r5250ff39 r7f6a24ab 185 185 case PARTITION_MP_ANNOUNCE_CREATE: 186 186 187 ignored = _Objects_MP_ Open(187 ignored = _Objects_MP_Allocate_and_open( 188 188 &_Partition_Information, 189 189 the_packet->name, -
cpukit/rtems/src/region.c
r5250ff39 r7f6a24ab 114 114 115 115 _Thread_queue_Initialize( 116 &the_region->Wait_queue, attribute_set, STATES_WAITING_FOR_SEGMENT ); 116 &the_region->Wait_queue, 117 OBJECTS_RTEMS_REGIONS, 118 _Attributes_Is_priority( attribute_set ) ? 119 THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, 120 STATES_WAITING_FOR_SEGMENT, 121 _Region_MP_Send_extract_proxy 122 ); 117 123 118 124 _Objects_Open( &_Region_Information, &the_region->Object, &name ); -
cpukit/rtems/src/regionmp.c
r5250ff39 r7f6a24ab 191 191 case REGION_MP_ANNOUNCE_CREATE: 192 192 193 ignored = _Objects_MP_ Open(193 ignored = _Objects_MP_Allocate_and_open( 194 194 &_Region_Information, 195 195 the_packet->name, -
cpukit/rtems/src/sem.c
r5250ff39 r7f6a24ab 88 88 89 89 rtems_status_code rtems_semaphore_create( 90 rtems_name name, 91 unsigned32 count, 92 rtems_attribute attribute_set, 93 Objects_Id *id 90 rtems_name name, 91 unsigned32 count, 92 rtems_attribute attribute_set, 93 rtems_task_priority priority_ceiling, 94 Objects_Id *id 94 95 ) 95 96 { … … 128 129 129 130 if ( _Attributes_Is_global( attribute_set ) && 130 !( _Objects_MP_ Open( &_Semaphore_Information, name,131 !( _Objects_MP_Allocate_and_open( &_Semaphore_Information, name, 131 132 the_semaphore->Object.id, FALSE ) ) ) { 132 133 _Semaphore_Free( the_semaphore ); … … 149 150 } 150 151 151 _Thread_queue_Initialize( &the_semaphore->Wait_queue, 152 attribute_set, STATES_WAITING_FOR_SEMAPHORE ); 152 _Thread_queue_Initialize( 153 &the_semaphore->Wait_queue, 154 OBJECTS_RTEMS_SEMAPHORES, 155 _Attributes_Is_priority( attribute_set ) ? 156 THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, 157 STATES_WAITING_FOR_SEMAPHORE, 158 _Semaphore_MP_Send_extract_proxy 159 ); 153 160 154 161 _Objects_Open( &_Semaphore_Information, &the_semaphore->Object, &name ); -
cpukit/rtems/src/semmp.c
r5250ff39 r7f6a24ab 188 188 case SEMAPHORE_MP_ANNOUNCE_CREATE: 189 189 190 ignored = _Objects_MP_ Open(190 ignored = _Objects_MP_Allocate_and_open( 191 191 &_Semaphore_Information, 192 192 the_packet->name, -
cpukit/rtems/src/signal.c
r5250ff39 r7f6a24ab 38 38 39 39 rtems_status_code rtems_signal_catch( 40 rtems_asr_entry handler,41 rtems_mode mode_set40 rtems_asr_entry asr_handler, 41 rtems_mode mode_set 42 42 ) 43 43 { 44 44 Thread_Control *executing; 45 45 46 /* XXX normalize mode */ 46 47 executing = _Thread_Executing; 47 48 _Thread_Disable_dispatch(); /* cannot reschedule while */ 48 49 /* the thread is inconsistent */ 49 50 50 if ( ! _ASR_Is_null_handler(handler ) ) {51 executing-> Signal.mode_set = mode_set;52 executing-> Signal.handler =handler;51 if ( !_ASR_Is_null_handler( asr_handler ) ) { 52 executing->RTEMS_API->Signal.mode_set = mode_set; 53 executing->RTEMS_API->Signal.handler = asr_handler; 53 54 } 54 55 else 55 _ASR_Initialize( &executing-> Signal );56 _ASR_Initialize( &executing->RTEMS_API->Signal ); 56 57 _Thread_Enable_dispatch(); 57 58 return( RTEMS_SUCCESSFUL ); … … 92 93 ); 93 94 case OBJECTS_LOCAL: 94 if ( ! _ASR_Is_null_handler( the_thread-> Signal.handler ) ) {95 if ( ! _ASR_Is_null_handler( the_thread->RTEMS_API->Signal.handler ) ) { 95 96 if ( _Modes_Is_asr_disabled( the_thread->current_modes ) ) 96 _ASR_Post_signals( signal_set, &the_thread->Signal.signals_pending ); 97 _ASR_Post_signals( 98 signal_set, &the_thread->RTEMS_API->Signal.signals_pending ); 97 99 else { 98 _ASR_Post_signals( signal_set, &the_thread->Signal.signals_posted ); 100 _ASR_Post_signals( 101 signal_set, &the_thread->RTEMS_API->Signal.signals_posted ); 99 102 if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) 100 103 _ISR_Signals_to_thread_executing = TRUE; -
cpukit/rtems/src/taskmp.c
r5250ff39 r7f6a24ab 194 194 case RTEMS_TASKS_MP_ANNOUNCE_CREATE: 195 195 196 ignored = _Objects_MP_ Open(196 ignored = _Objects_MP_Allocate_and_open( 197 197 &_RTEMS_tasks_Information, 198 198 the_packet->name, -
cpukit/rtems/src/tasks.c
r5250ff39 r7f6a24ab 87 87 { 88 88 register Thread_Control *the_thread; 89 unsigned32 actual_stack_size;90 unsigned32 memory_needed;91 void *memory;89 Objects_MP_Control *the_global_object = NULL; 90 boolean is_fp; 91 boolean is_global; 92 92 rtems_attribute the_attribute_set; 93 Priority_Control core_priority; 94 93 95 94 96 if ( !rtems_is_name_valid( name ) ) 95 97 return ( RTEMS_INVALID_NAME ); 98 99 /* 100 * Core Thread Initialize insures we get the minimum amount of 101 * stack space. 102 */ 96 103 97 104 #if 0 … … 100 107 #endif 101 108 102 if ( !_Stack_Is_enough( stack_size ) ) 103 actual_stack_size = RTEMS_MINIMUM_STACK_SIZE; 104 else 105 actual_stack_size = stack_size; 109 /* 110 * Validate the RTEMS API priority and convert it to the core priority range. 111 */ 106 112 107 113 if ( !_Priority_Is_valid( initial_priority ) ) 108 114 return( RTEMS_INVALID_PRIORITY ); 115 116 core_priority = _RTEMS_Tasks_Priority_to_Core( initial_priority ); 109 117 110 118 /* … … 121 129 _Attributes_Clear( the_attribute_set, ATTRIBUTES_NOT_SUPPORTED ); 122 130 123 if ( _Attributes_Is_global( the_attribute_set ) && 124 !_Configuration_Is_multiprocessing() ) 125 return( RTEMS_MP_NOT_CONFIGURED ); 126 127 _Thread_Disable_dispatch(); /* to prevent deletion */ 131 if ( _Attributes_Is_floating_point( the_attribute_set ) ) 132 is_fp = TRUE; 133 else 134 is_fp = FALSE; 135 136 if ( _Attributes_Is_global( the_attribute_set ) ) { 137 138 is_global = TRUE; 139 140 if ( !_Configuration_Is_multiprocessing() ) 141 return( RTEMS_MP_NOT_CONFIGURED ); 142 143 } else 144 is_global = FALSE; 145 146 /* 147 * Make sure system is MP if this task is global 148 */ 149 150 /* 151 * Disable dispatch for protection 152 */ 153 154 _Thread_Disable_dispatch(); 155 156 /* 157 * Allocate the thread control block and -- if the task is global -- 158 * allocate a global object control block. 159 * 160 * NOTE: This routine does not use the combined allocate and open 161 * global object routine because this results in a lack of 162 * control over when memory is allocated and can be freed in 163 * the event of an error. 164 */ 128 165 129 166 the_thread = _RTEMS_tasks_Allocate(); … … 134 171 } 135 172 136 actual_stack_size = _Stack_Adjust_size( actual_stack_size ); 137 memory_needed = actual_stack_size; 138 139 if ( _Attributes_Is_floating_point( the_attribute_set ) ) 140 memory_needed += CONTEXT_FP_SIZE; 141 142 memory = _Workspace_Allocate( memory_needed ); 143 144 if ( !memory ) { 173 if ( is_global ) { 174 the_global_object = _Objects_MP_Allocate_global_object(); 175 176 if ( _Objects_MP_Is_null_global_object( the_global_object ) ) { 177 _RTEMS_tasks_Free( the_thread ); 178 _Thread_Enable_dispatch(); 179 return( RTEMS_TOO_MANY ); 180 } 181 } 182 183 #if 0 184 /* 185 * Allocate and initialize the RTEMS API specific information 186 */ 187 188 the_thread->RTEMS_API = _Workspace_Allocate( sizeof( RTEMS_API_Control ) ); 189 190 if ( !the_thread->RTEMS_API ) { 191 _RTEMS_tasks_Free( the_thread ); 192 if ( is_global ) 193 _Objects_MP_Free_global_object( the_global_object ); 194 _Thread_Enable_dispatch(); 195 return( RTEMS_UNSATISFIED ); 196 } 197 198 the_thread->RTEMS_API->pending_events = EVENT_SETS_NONE_PENDING; 199 _ASR_Initialize( &the_thread->RTEMS_API->Signal ); 200 #endif 201 202 /* 203 * Initialize the core thread for this task. 204 */ 205 206 /* XXX normalize mode */ 207 208 if ( !_Thread_Initialize( &_RTEMS_tasks_Information, the_thread, 209 NULL, stack_size, is_fp, core_priority, initial_modes, &name ) ) { 210 if ( is_global ) 211 _Objects_MP_Free_global_object( the_global_object ); 145 212 _RTEMS_tasks_Free( the_thread ); 146 213 _Thread_Enable_dispatch(); … … 148 215 } 149 216 150 /*151 * Stack is put in the lower address regions of the allocated memory.152 * The optional floating point context area goes into the higher part153 * of the allocated memory.154 */155 156 _Stack_Initialize(157 &the_thread->Start.Initial_stack, memory, actual_stack_size );158 159 if ( _Attributes_Is_floating_point( the_attribute_set ) )160 the_thread->fp_context = _Context_Fp_start( memory, actual_stack_size );161 else162 the_thread->fp_context = NULL;163 164 the_thread->Start.fp_context = the_thread->fp_context;165 166 if ( _Attributes_Is_global( the_attribute_set ) &&167 !( _Objects_MP_Open( &_RTEMS_tasks_Information, name,168 the_thread->Object.id, FALSE ) ) ) {169 _RTEMS_tasks_Free( the_thread );170 (void) _Workspace_Free( memory );171 _Thread_Enable_dispatch();172 return( RTEMS_TOO_MANY );173 }174 175 the_thread->attribute_set = the_attribute_set;176 the_thread->current_state = STATES_DORMANT;177 the_thread->current_modes = initial_modes;178 the_thread->pending_events = EVENT_SETS_NONE_PENDING;179 the_thread->resource_count = 0;180 the_thread->real_priority = initial_priority;181 the_thread->Start.initial_priority = initial_priority;182 the_thread->Start.initial_modes = initial_modes;183 184 _Thread_Set_priority( the_thread, initial_priority );185 186 _ASR_Initialize( &the_thread->Signal );187 188 _Objects_Open( &_RTEMS_tasks_Information, &the_thread->Object, &name );189 190 217 *id = the_thread->Object.id; 191 218 192 _User_extensions_Task_create( the_thread ); 193 194 if ( _Attributes_Is_global( the_attribute_set ) ) 219 if ( is_global ) { 220 221 the_thread->RTEMS_API->is_global = TRUE; 222 223 _Objects_MP_Open( 224 &_RTEMS_tasks_Information, 225 the_global_object, 226 name, 227 the_thread->Object.id 228 ); 229 195 230 _RTEMS_tasks_MP_Send_process_packet( 196 231 RTEMS_TASKS_MP_ANNOUNCE_CREATE, … … 199 234 ); 200 235 236 } 237 201 238 _Thread_Enable_dispatch(); 202 239 return( RTEMS_SUCCESSFUL ); … … 253 290 254 291 rtems_status_code rtems_task_start( 255 Objects_Idid,292 rtems_id id, 256 293 rtems_task_entry entry_point, 257 unsigned32 argument294 unsigned32 argument 258 295 ) 259 296 { … … 272 309 return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); 273 310 case OBJECTS_LOCAL: 274 if ( _States_Is_dormant( the_thread->current_state ) ) { 275 276 the_thread->Start.entry_point = entry_point; 277 the_thread->Start.initial_argument = argument; 278 279 _Thread_Load_environment( the_thread ); 280 281 _Thread_Ready( the_thread ); 282 283 _User_extensions_Task_start( the_thread ); 284 311 if ( _Thread_Start( 312 the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) { 285 313 _Thread_Enable_dispatch(); 286 314 return( RTEMS_SUCCESSFUL ); … … 317 345 { 318 346 register Thread_Control *the_thread; 319 Objects_Locations 347 Objects_Locations location; 320 348 321 349 the_thread = _Thread_Get( id, &location ); … … 327 355 return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); 328 356 case OBJECTS_LOCAL: 329 if ( !_States_Is_dormant( the_thread->current_state ) ) { 330 331 _Thread_Set_transient( the_thread ); 332 _ASR_Initialize( &the_thread->Signal ); 333 the_thread->pending_events = EVENT_SETS_NONE_PENDING; 334 the_thread->resource_count = 0; 335 the_thread->current_modes = the_thread->Start.initial_modes; 336 the_thread->Start.initial_argument = argument; 337 338 _RTEMS_tasks_Cancel_wait( the_thread ); 339 340 if ( the_thread->current_priority != 341 the_thread->Start.initial_priority ) { 342 the_thread->real_priority = the_thread->Start.initial_priority; 343 _Thread_Set_priority( the_thread, 344 the_thread->Start.initial_priority ); 345 } 346 347 _Thread_Load_environment( the_thread ); 348 349 _Thread_Ready( the_thread ); 350 351 _User_extensions_Task_restart( the_thread ); 352 353 if ( _Thread_Is_executing ( the_thread ) ) 354 _Thread_Restart_self(); 357 if ( _Thread_Restart( the_thread, NULL, argument ) ) { 358 359 /* XXX until these are in an API extension they are too late. */ 360 _ASR_Initialize( &the_thread->RTEMS_API->Signal ); 361 the_thread->RTEMS_API->pending_events = EVENT_SETS_NONE_PENDING; 355 362 356 363 _Thread_Enable_dispatch(); … … 397 404 return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); 398 405 case OBJECTS_LOCAL: 399 _Objects_Close( &_RTEMS_tasks_Information, &the_thread->Object ); 400 401 _Thread_Set_state( the_thread, STATES_TRANSIENT ); 402 403 _User_extensions_Task_delete( the_thread ); 404 405 #if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE ) 406 if ( _Thread_Is_allocated_fp( the_thread ) ) 407 _Thread_Deallocate_fp(); 408 #endif 409 the_thread->fp_context = NULL; 410 411 _RTEMS_tasks_Cancel_wait( the_thread ); 412 413 (void) _Workspace_Free( the_thread->Start.Initial_stack.area ); 406 _Thread_Close( &_RTEMS_tasks_Information, the_thread ); 407 408 /* XXX */ 409 (void) _Workspace_Free( the_thread->RTEMS_API ); 414 410 415 411 _RTEMS_tasks_Free( the_thread ); 416 412 417 if ( _Attributes_Is_global( the_thread-> attribute_set) ) {413 if ( _Attributes_Is_global( the_thread->RTEMS_API->is_global ) ) { 418 414 419 415 _Objects_MP_Close( &_RTEMS_tasks_Information, the_thread->Object.id ); … … 552 548 553 549 rtems_status_code rtems_task_set_priority( 554 Objects_Id id,550 Objects_Id id, 555 551 rtems_task_priority new_priority, 556 552 rtems_task_priority *old_priority … … 663 659 if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || 664 660 _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { 665 *note = _Thread_Executing-> Notepads[ notepad ];661 *note = _Thread_Executing->RTEMS_API->Notepads[ notepad ]; 666 662 return( RTEMS_SUCCESSFUL ); 667 663 } … … 682 678 ); 683 679 case OBJECTS_LOCAL: 684 *note= the_thread-> Notepads[ notepad ];680 *note= the_thread->RTEMS_API->Notepads[ notepad ]; 685 681 _Thread_Enable_dispatch(); 686 682 return( RTEMS_SUCCESSFUL ); … … 730 726 if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || 731 727 _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { 732 _Thread_Executing-> Notepads[ notepad ] = note;728 _Thread_Executing->RTEMS_API->Notepads[ notepad ] = note; 733 729 return( RTEMS_SUCCESSFUL ); 734 730 } … … 748 744 749 745 case OBJECTS_LOCAL: 750 the_thread-> Notepads[ notepad ] = note;746 the_thread->RTEMS_API->Notepads[ notepad ] = note; 751 747 _Thread_Enable_dispatch(); 752 748 return( RTEMS_SUCCESSFUL );
Note: See TracChangeset
for help on using the changeset viewer.