Changeset b06e68ef in rtems for c/src/exec
- Timestamp:
- 08/17/95 19:51:51 (28 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 95fbca1
- Parents:
- 3b438fa
- Location:
- c/src/exec
- Files:
-
- 6 added
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/exec/libcsupport/include/clockdrv.h
r3b438fa rb06e68ef 24 24 25 25 extern volatile rtems_unsigned32 Clock_driver_ticks; 26 extern rtems_device_major_number rtems_clock_major; 27 extern rtems_device_minor_number rtems_clock_minor; 26 28 27 /* functions */ 28 29 rtems_task Exit_task(); 30 void exit_task_init(); 31 32 void Install_clock( rtems_isr_entry ); 33 void ReInstall_clock( rtems_isr_entry ); 34 void Clock_exit(); 35 36 rtems_isr Clock_isr( 37 rtems_vector_number 38 ); 39 40 /* driver entries */ 29 /* default clock driver entry */ 41 30 42 31 #define CLOCK_DRIVER_TABLE_ENTRY \ 43 { Clock_initialize, NULL, NULL, NULL, NULL, NULL}44 32 { Clock_initialize, NULL, NULL, NULL, NULL, Clock_control } 33 45 34 rtems_device_driver Clock_initialize( 46 35 rtems_device_major_number, 47 36 rtems_device_minor_number, 48 void *, 49 rtems_id, 50 rtems_unsigned32 * 37 void * 38 ); 39 40 rtems_device_driver Clock_control( 41 rtems_device_major_number major, 42 rtems_device_minor_number minor, 43 void *pargp 51 44 ); 52 45 -
c/src/exec/rtems/headers/message.h
r3b438fa rb06e68ef 42 42 * The following defines the data types needed to manipulate 43 43 * the contents of message buffers. 44 * Since msgs are variable length we just make a ptr to 1. 44 45 */ 45 46 46 47 typedef struct { 47 unsigned32 field1; 48 unsigned32 field2; 49 unsigned32 field3; 50 unsigned32 field4; 51 } Message_queue_Buffer; 48 unsigned32 size; 49 50 #ifndef __cplusplus 51 /* NOTE: [0] is gcc specific, 52 * but specifically disallowed by ANSI STD C++ 53 * g++ warns about it, so we #ifdef it out to 54 * get rid of warnings when compiled by g++. 55 */ 56 unsigned32 buffer[0]; 57 #endif 58 59 } Message_queue_Buffer; 52 60 53 61 /* … … 69 77 Objects_Control Object; 70 78 Thread_queue_Control Wait_queue; 71 rtems_attribute attribute_set;79 rtems_attribute attribute_set; 72 80 unsigned32 maximum_pending_messages; 73 81 unsigned32 number_of_pending_messages; 82 unsigned32 maximum_message_size; 74 83 Chain_Control Pending_messages; 84 Message_queue_Buffer *message_buffers; 85 Chain_Control Inactive_messages; 75 86 } Message_queue_Control; 76 87 … … 81 92 82 93 EXTERN Objects_Information _Message_queue_Information; 83 84 /*85 * The following defines the data structures used to86 * manage the pool of inactive message buffers.87 */88 89 EXTERN Chain_Control _Message_queue_Inactive_messages;90 94 91 95 /* … … 109 113 110 114 void _Message_queue_Manager_initialization( 111 unsigned32 maximum_message_queues, 112 unsigned32 maximum_messages 115 unsigned32 maximum_message_queues 113 116 ); 114 117 … … 127 130 128 131 rtems_status_code rtems_message_queue_create( 129 Objects_Name name, 130 unsigned32 count, 132 Objects_Name name, 133 unsigned32 count, 134 unsigned32 max_message_size, 131 135 rtems_attribute attribute_set, 132 Objects_Id 136 Objects_Id *id 133 137 ); 134 138 … … 184 188 rtems_status_code rtems_message_queue_send( 185 189 Objects_Id id, 186 void *buffer 190 void *buffer, 191 unsigned32 size 187 192 ); 188 193 … … 205 210 rtems_status_code rtems_message_queue_urgent( 206 211 Objects_Id id, 207 void *buffer 212 void *buffer, 213 unsigned32 size 208 214 ); 209 215 … … 227 233 Objects_Id id, 228 234 void *buffer, 235 unsigned32 size, 229 236 unsigned32 *count 230 237 ); … … 247 254 Objects_Id id, 248 255 void *buffer, 256 unsigned32 *size_p, 249 257 unsigned32 option_set, 250 rtems_interval timeout258 rtems_interval timeout 251 259 ); 252 260 … … 277 285 278 286 STATIC INLINE void _Message_queue_Copy_buffer ( 279 Message_queue_Buffer *source, 280 Message_queue_Buffer *destination 287 void *source, 288 void *destination, 289 unsigned32 size 281 290 ); 282 291 … … 296 305 Message_queue_Control *the_message_queue, 297 306 unsigned32 option_set, 298 Message_queue_Buffer *buffer 307 void *buffer, 308 unsigned32 *size_p 299 309 ); 300 310 … … 323 333 rtems_status_code _Message_queue_Submit( 324 334 Objects_Id id, 325 Message_queue_Buffer *buffer, 335 void *buffer, 336 unsigned32 size, 326 337 Message_queue_Submit_types submit_type 327 338 ); … … 337 348 338 349 STATIC INLINE Message_queue_Buffer_control * 339 _Message_queue_Allocate_message_buffer ( void ); 350 _Message_queue_Allocate_message_buffer ( 351 Message_queue_Control *the_message_queue 352 ); 340 353 341 354 /* … … 349 362 350 363 STATIC INLINE void _Message_queue_Free_message_buffer ( 364 Message_queue_Control *the_message_queue, 351 365 Message_queue_Buffer_control *the_message 352 366 ); … … 416 430 */ 417 431 418 STATIC INLINE Message_queue_Control *_Message_queue_Allocate ( void ); 432 Message_queue_Control *_Message_queue_Allocate ( 433 unsigned32 count, 434 unsigned32 max_message_size 435 ); 419 436 420 437 /* … … 423 440 * DESCRIPTION: 424 441 * 425 * This routine allocates a message queue control block from442 * This routine deallocates a message queue control block into 426 443 * the inactive chain of free message queue control blocks. 427 444 */ -
c/src/exec/rtems/headers/msgmp.h
r3b438fa rb06e68ef 56 56 57 57 typedef struct { 58 rtems_packet_prefix 58 rtems_packet_prefix Prefix; 59 59 Message_queue_MP_Remote_operations operation; 60 60 Objects_Name name; 61 rtems_option option_set;61 rtems_option option_set; 62 62 Objects_Id proxy_id; 63 63 unsigned32 count; 64 unsigned32 size; 64 65 unsigned32 pad0; 65 unsigned32 pad1;66 unsigned32 pad2;67 66 Message_queue_Buffer Buffer; 68 67 } Message_queue_MP_Packet; … … 96 95 Message_queue_MP_Remote_operations operation, 97 96 Objects_Id message_queue_id, 98 Message_queue_Buffer *buffer, 99 rtems_option option_set, 100 rtems_interval timeout 97 void *buffer, 98 unsigned32 *size_p, 99 rtems_option option_set, 100 rtems_interval timeout 101 101 ); 102 102 -
c/src/exec/rtems/include/rtems/rtems/message.h
r3b438fa rb06e68ef 42 42 * The following defines the data types needed to manipulate 43 43 * the contents of message buffers. 44 * Since msgs are variable length we just make a ptr to 1. 44 45 */ 45 46 46 47 typedef struct { 47 unsigned32 field1; 48 unsigned32 field2; 49 unsigned32 field3; 50 unsigned32 field4; 51 } Message_queue_Buffer; 48 unsigned32 size; 49 50 #ifndef __cplusplus 51 /* NOTE: [0] is gcc specific, 52 * but specifically disallowed by ANSI STD C++ 53 * g++ warns about it, so we #ifdef it out to 54 * get rid of warnings when compiled by g++. 55 */ 56 unsigned32 buffer[0]; 57 #endif 58 59 } Message_queue_Buffer; 52 60 53 61 /* … … 69 77 Objects_Control Object; 70 78 Thread_queue_Control Wait_queue; 71 rtems_attribute attribute_set;79 rtems_attribute attribute_set; 72 80 unsigned32 maximum_pending_messages; 73 81 unsigned32 number_of_pending_messages; 82 unsigned32 maximum_message_size; 74 83 Chain_Control Pending_messages; 84 Message_queue_Buffer *message_buffers; 85 Chain_Control Inactive_messages; 75 86 } Message_queue_Control; 76 87 … … 81 92 82 93 EXTERN Objects_Information _Message_queue_Information; 83 84 /*85 * The following defines the data structures used to86 * manage the pool of inactive message buffers.87 */88 89 EXTERN Chain_Control _Message_queue_Inactive_messages;90 94 91 95 /* … … 109 113 110 114 void _Message_queue_Manager_initialization( 111 unsigned32 maximum_message_queues, 112 unsigned32 maximum_messages 115 unsigned32 maximum_message_queues 113 116 ); 114 117 … … 127 130 128 131 rtems_status_code rtems_message_queue_create( 129 Objects_Name name, 130 unsigned32 count, 132 Objects_Name name, 133 unsigned32 count, 134 unsigned32 max_message_size, 131 135 rtems_attribute attribute_set, 132 Objects_Id 136 Objects_Id *id 133 137 ); 134 138 … … 184 188 rtems_status_code rtems_message_queue_send( 185 189 Objects_Id id, 186 void *buffer 190 void *buffer, 191 unsigned32 size 187 192 ); 188 193 … … 205 210 rtems_status_code rtems_message_queue_urgent( 206 211 Objects_Id id, 207 void *buffer 212 void *buffer, 213 unsigned32 size 208 214 ); 209 215 … … 227 233 Objects_Id id, 228 234 void *buffer, 235 unsigned32 size, 229 236 unsigned32 *count 230 237 ); … … 247 254 Objects_Id id, 248 255 void *buffer, 256 unsigned32 *size_p, 249 257 unsigned32 option_set, 250 rtems_interval timeout258 rtems_interval timeout 251 259 ); 252 260 … … 277 285 278 286 STATIC INLINE void _Message_queue_Copy_buffer ( 279 Message_queue_Buffer *source, 280 Message_queue_Buffer *destination 287 void *source, 288 void *destination, 289 unsigned32 size 281 290 ); 282 291 … … 296 305 Message_queue_Control *the_message_queue, 297 306 unsigned32 option_set, 298 Message_queue_Buffer *buffer 307 void *buffer, 308 unsigned32 *size_p 299 309 ); 300 310 … … 323 333 rtems_status_code _Message_queue_Submit( 324 334 Objects_Id id, 325 Message_queue_Buffer *buffer, 335 void *buffer, 336 unsigned32 size, 326 337 Message_queue_Submit_types submit_type 327 338 ); … … 337 348 338 349 STATIC INLINE Message_queue_Buffer_control * 339 _Message_queue_Allocate_message_buffer ( void ); 350 _Message_queue_Allocate_message_buffer ( 351 Message_queue_Control *the_message_queue 352 ); 340 353 341 354 /* … … 349 362 350 363 STATIC INLINE void _Message_queue_Free_message_buffer ( 364 Message_queue_Control *the_message_queue, 351 365 Message_queue_Buffer_control *the_message 352 366 ); … … 416 430 */ 417 431 418 STATIC INLINE Message_queue_Control *_Message_queue_Allocate ( void ); 432 Message_queue_Control *_Message_queue_Allocate ( 433 unsigned32 count, 434 unsigned32 max_message_size 435 ); 419 436 420 437 /* … … 423 440 * DESCRIPTION: 424 441 * 425 * This routine allocates a message queue control block from442 * This routine deallocates a message queue control block into 426 443 * the inactive chain of free message queue control blocks. 427 444 */ -
c/src/exec/rtems/include/rtems/rtems/msgmp.h
r3b438fa rb06e68ef 56 56 57 57 typedef struct { 58 rtems_packet_prefix 58 rtems_packet_prefix Prefix; 59 59 Message_queue_MP_Remote_operations operation; 60 60 Objects_Name name; 61 rtems_option option_set;61 rtems_option option_set; 62 62 Objects_Id proxy_id; 63 63 unsigned32 count; 64 unsigned32 size; 64 65 unsigned32 pad0; 65 unsigned32 pad1;66 unsigned32 pad2;67 66 Message_queue_Buffer Buffer; 68 67 } Message_queue_MP_Packet; … … 96 95 Message_queue_MP_Remote_operations operation, 97 96 Objects_Id message_queue_id, 98 Message_queue_Buffer *buffer, 99 rtems_option option_set, 100 rtems_interval timeout 97 void *buffer, 98 unsigned32 *size_p, 99 rtems_option option_set, 100 rtems_interval timeout 101 101 ); 102 102 -
c/src/exec/rtems/inline/attr.inl
r3b438fa rb06e68ef 85 85 /*PAGE 86 86 * 87 * _Attributes_Is_limit88 *89 */90 91 STATIC INLINE boolean _Attributes_Is_limit(92 rtems_attribute attribute_set93 )94 {95 return ( attribute_set & RTEMS_LIMIT );96 }97 98 /*PAGE99 *100 87 * _Attributes_Is_binary_semaphore 101 88 * -
c/src/exec/rtems/inline/message.inl
r3b438fa rb06e68ef 18 18 #define __MESSAGE_QUEUE_inl 19 19 20 #include <rtems/wkspace.h> 21 20 22 /*PAGE 21 23 * … … 25 27 26 28 STATIC INLINE void _Message_queue_Copy_buffer ( 27 Message_queue_Buffer *source, 28 Message_queue_Buffer *destination 29 void *source, 30 void *destination, 31 unsigned32 size 29 32 ) 30 33 { 31 *destination = *source;34 memcpy(destination, source, size); 32 35 } 33 36 … … 39 42 40 43 STATIC INLINE Message_queue_Buffer_control * 41 _Message_queue_Allocate_message_buffer ( void ) 44 _Message_queue_Allocate_message_buffer ( 45 Message_queue_Control *the_message_queue 46 ) 42 47 { 43 48 return (Message_queue_Buffer_control *) 44 _Chain_Get( & _Message_queue_Inactive_messages );49 _Chain_Get( &the_message_queue->Inactive_messages ); 45 50 } 46 51 … … 52 57 53 58 STATIC INLINE void _Message_queue_Free_message_buffer ( 54 Message_queue_Buffer_control *the_message 59 Message_queue_Control *the_message_queue, 60 Message_queue_Buffer_control *the_message 55 61 ) 56 62 { 57 _Chain_Append( &_Message_queue_Inactive_messages, &the_message->Node );63 _Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node ); 58 64 } 59 65 … … 117 123 } 118 124 119 /*PAGE120 *121 * _Message_queue_Allocate122 *123 */124 125 STATIC INLINE Message_queue_Control *_Message_queue_Allocate ( void )126 {127 return (Message_queue_Control *)128 _Objects_Allocate( &_Message_queue_Information );129 }130 125 131 126 /*PAGE … … 139 134 ) 140 135 { 136 if (the_message_queue->message_buffers) 137 { 138 _Workspace_Free((void *) the_message_queue->message_buffers); 139 the_message_queue->message_buffers = 0; 140 } 141 141 142 _Objects_Free( &_Message_queue_Information, &the_message_queue->Object ); 142 143 } -
c/src/exec/rtems/inline/rtems/rtems/attr.inl
r3b438fa rb06e68ef 85 85 /*PAGE 86 86 * 87 * _Attributes_Is_limit88 *89 */90 91 STATIC INLINE boolean _Attributes_Is_limit(92 rtems_attribute attribute_set93 )94 {95 return ( attribute_set & RTEMS_LIMIT );96 }97 98 /*PAGE99 *100 87 * _Attributes_Is_binary_semaphore 101 88 * -
c/src/exec/rtems/inline/rtems/rtems/message.inl
r3b438fa rb06e68ef 18 18 #define __MESSAGE_QUEUE_inl 19 19 20 #include <rtems/wkspace.h> 21 20 22 /*PAGE 21 23 * … … 25 27 26 28 STATIC INLINE void _Message_queue_Copy_buffer ( 27 Message_queue_Buffer *source, 28 Message_queue_Buffer *destination 29 void *source, 30 void *destination, 31 unsigned32 size 29 32 ) 30 33 { 31 *destination = *source;34 memcpy(destination, source, size); 32 35 } 33 36 … … 39 42 40 43 STATIC INLINE Message_queue_Buffer_control * 41 _Message_queue_Allocate_message_buffer ( void ) 44 _Message_queue_Allocate_message_buffer ( 45 Message_queue_Control *the_message_queue 46 ) 42 47 { 43 48 return (Message_queue_Buffer_control *) 44 _Chain_Get( & _Message_queue_Inactive_messages );49 _Chain_Get( &the_message_queue->Inactive_messages ); 45 50 } 46 51 … … 52 57 53 58 STATIC INLINE void _Message_queue_Free_message_buffer ( 54 Message_queue_Buffer_control *the_message 59 Message_queue_Control *the_message_queue, 60 Message_queue_Buffer_control *the_message 55 61 ) 56 62 { 57 _Chain_Append( &_Message_queue_Inactive_messages, &the_message->Node );63 _Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node ); 58 64 } 59 65 … … 117 123 } 118 124 119 /*PAGE120 *121 * _Message_queue_Allocate122 *123 */124 125 STATIC INLINE Message_queue_Control *_Message_queue_Allocate ( void )126 {127 return (Message_queue_Control *)128 _Objects_Allocate( &_Message_queue_Information );129 }130 125 131 126 /*PAGE … … 139 134 ) 140 135 { 136 if (the_message_queue->message_buffers) 137 { 138 _Workspace_Free((void *) the_message_queue->message_buffers); 139 the_message_queue->message_buffers = 0; 140 } 141 141 142 _Objects_Free( &_Message_queue_Information, &the_message_queue->Object ); 142 143 } -
c/src/exec/rtems/macros/attr.inl
r3b438fa rb06e68ef 63 63 /*PAGE 64 64 * 65 * _Attributes_Is_limit66 *67 */68 69 #define _Attributes_Is_limit( _attribute_set ) \70 ( (_attribute_set) & RTEMS_LIMIT )71 72 /*PAGE73 *74 65 * _Attributes_Is_binary_semaphore 75 66 * -
c/src/exec/rtems/macros/rtems/rtems/attr.inl
r3b438fa rb06e68ef 63 63 /*PAGE 64 64 * 65 * _Attributes_Is_limit66 *67 */68 69 #define _Attributes_Is_limit( _attribute_set ) \70 ( (_attribute_set) & RTEMS_LIMIT )71 72 /*PAGE73 *74 65 * _Attributes_Is_binary_semaphore 75 66 * -
c/src/exec/rtems/optman/no-msg.c
r3b438fa rb06e68ef 27 27 28 28 void _Message_queue_Manager_initialization( 29 unsigned32 maximum_message_queues, 30 unsigned32 maximum_messages 29 unsigned32 maximum_message_queues 31 30 ) 32 31 { … … 36 35 Objects_Name name, 37 36 unsigned32 count, 38 rtems_attribute attribute_set, 37 unsigned32 max_message_size, 38 rtems_attribute attribute_set, 39 39 Objects_Id *id 40 40 ) … … 61 61 rtems_status_code rtems_message_queue_send( 62 62 Objects_Id id, 63 void *buffer 63 void *buffer, 64 unsigned32 size 64 65 ) 65 66 { … … 69 70 rtems_status_code rtems_message_queue_urgent( 70 71 Objects_Id id, 71 void *buffer 72 void *buffer, 73 unsigned32 size 72 74 ) 73 75 { … … 78 80 Objects_Id id, 79 81 void *buffer, 82 unsigned32 size, 80 83 unsigned32 *count 81 84 ) … … 87 90 Objects_Id id, 88 91 void *buffer, 92 unsigned32 *size_p, 89 93 unsigned32 option_set, 90 rtems_interval timeout94 rtems_interval timeout 91 95 ) 92 96 { … … 111 115 boolean _Message_queue_Seize( 112 116 Message_queue_Control *the_message_queue, 113 rtems_option option_set, 114 Message_queue_Buffer *buffer 117 rtems_option option_set, 118 void *buffer, 119 unsigned32 *size_p 115 120 ) 116 121 { … … 121 126 rtems_status_code _Message_queue_Submit( 122 127 Objects_Id id, 123 Message_queue_Buffer *buffer, 128 void *buffer, 129 unsigned32 size, 124 130 Message_queue_Submit_types submit_type 125 131 ) -
c/src/exec/sapi/headers/config.h
r3b438fa rb06e68ef 33 33 34 34 typedef struct { 35 Objects_Name name; /* task name */36 unsigned32 stack_size; /* task stack size */35 Objects_Name name; /* task name */ 36 unsigned32 stack_size; /* task stack size */ 37 37 rtems_task_priority initial_priority; /* task priority */ 38 rtems_attribute attribute_set; /* task attributes */39 rtems_task_entry 40 rtems_mode mode_set; /* task initial mode */41 unsigned32 argument; /* task argument */42 } 38 rtems_attribute attribute_set; /* task attributes */ 39 rtems_task_entry entry_point; /* task entry point */ 40 rtems_mode mode_set; /* task initial mode */ 41 unsigned32 argument; /* task argument */ 42 } rtems_initialization_tasks_table; 43 43 44 44 /* … … 57 57 typedef unsigned32 rtems_device_minor_number; 58 58 59 typedef voidrtems_device_driver;59 typedef rtems_status_code rtems_device_driver; 60 60 61 61 typedef rtems_device_driver ( *rtems_device_driver_entry )( 62 62 rtems_device_major_number, 63 63 rtems_device_minor_number, 64 void *, 65 Objects_Id, 66 unsigned32 * 64 void * 67 65 ); 68 66 … … 174 172 typedef struct { 175 173 unsigned32 default_timeout; /* in ticks */ 174 unsigned32 maximum_packet_size; 176 175 rtems_mpci_initialization_entry initialization; 177 176 rtems_mpci_get_packet_entry get_packet; … … 179 178 rtems_mpci_send_entry send_packet; 180 179 rtems_mpci_receive_entry receive_packet; 181 } 180 } rtems_mpci_table; 182 181 183 182 /* … … 193 192 unsigned32 maximum_global_objects; /* maximum # global objects */ 194 193 unsigned32 maximum_proxies; /* maximum # proxies */ 195 rtems_mpci_table *User_mpci_table; 196 /* pointer to MPCI table */ 194 rtems_mpci_table *User_mpci_table; /* pointer to MPCI table */ 197 195 }; 198 196 … … 210 208 211 209 struct Configuration_Table { 212 void *work_space_start; 213 unsigned32 work_space_size; 214 unsigned32 maximum_tasks; 215 unsigned32 maximum_timers; 216 unsigned32 maximum_semaphores; 217 unsigned32 maximum_message_queues; 218 unsigned32 maximum_messages; 219 unsigned32 maximum_partitions; 220 unsigned32 maximum_regions; 221 unsigned32 maximum_ports; 222 unsigned32 maximum_periods; 223 unsigned32 maximum_extensions; 224 unsigned32 microseconds_per_tick; 225 unsigned32 ticks_per_timeslice; 226 unsigned32 number_of_initialization_tasks; 210 void *work_space_start; 211 unsigned32 work_space_size; 212 unsigned32 maximum_tasks; 213 unsigned32 maximum_timers; 214 unsigned32 maximum_semaphores; 215 unsigned32 maximum_message_queues; 216 unsigned32 maximum_partitions; 217 unsigned32 maximum_regions; 218 unsigned32 maximum_ports; 219 unsigned32 maximum_periods; 220 unsigned32 maximum_extensions; 221 unsigned32 microseconds_per_tick; 222 unsigned32 ticks_per_timeslice; 223 unsigned32 number_of_initialization_tasks; 227 224 rtems_initialization_tasks_table *User_initialization_tasks_table; 228 unsigned32 225 unsigned32 number_of_device_drivers; 229 226 rtems_driver_address_table *Device_driver_table; 230 rtems_extensions_table 227 rtems_extensions_table *User_extension_table; 231 228 rtems_multiprocessing_table *User_multiprocessing_table; 232 229 }; … … 245 242 */ 246 243 247 EXTERN rtems_configuration_table 244 EXTERN rtems_configuration_table *_Configuration_Table; 248 245 EXTERN rtems_multiprocessing_table *_Configuration_MP_table; 249 246 EXTERN rtems_mpci_table *_Configuration_MPCI_table; … … 259 256 260 257 STATIC INLINE void _Configuration_Handler_initialization( 261 rtems_configuration_table 258 rtems_configuration_table *configuration_table, 262 259 rtems_multiprocessing_table *multiprocessing_table, 263 260 rtems_mpci_table *users_mpci_table -
c/src/exec/sapi/headers/directives.h
r3b438fa rb06e68ef 11 11 * to the copyright license under the clause at DFARS 252.227-7013. This 12 12 * notice must appear in all copies of this file and its derivatives. 13 * 14 * $Id$ 13 15 */ 14 16 15 17 #ifndef __RTEMS_DIRECTIVES_h 16 #define RTEMS___DIRECTIVES_h18 #define __RTEMS_DIRECTIVES_h 17 19 18 20 #ifdef __cplusplus … … 86 88 #define RTEMS_DUAL_PORTED_MEMORY_INTERNAL_TO_EXTERNAL 64 87 89 #define RTEMS_IO_INITIALIZE 65 88 #define RTEMS_IO_OPEN 66 89 #define RTEMS_IO_CLOSE 67 90 #define RTEMS_IO_READ 68 91 #define RTEMS_IO_WRITE 69 92 #define RTEMS_IO_CONTROL 70 93 #define RTEMS_FATAL_ERROR_OCCURRED 71 94 #define RTEMS_RATE_MONOTONIC_CREATE 72 95 #define RTEMS_RATE_MONOTONIC_NAME_TO_ID 73 96 #define RTEMS_RATE_MONOTONIC_DELETE 74 97 #define RTEMS_RATE_MONOTONIC_CANCEL 75 98 #define RTEMS_RATE_MONOTONIC_PERIOD 76 99 #define RTEMS_MULTIPROCESSING_ANNOUNCE 77 100 #define RTEMS_DEBUG_ENABLE 78 101 #define RTEMS_DEBUG_DISABLE 79 90 #define RTEMS_IO_REGISTER_NAME 66 91 #define RTEMS_IO_LOOKUP_NAME 67 92 #define RTEMS_IO_OPEN 68 93 #define RTEMS_IO_CLOSE 69 94 #define RTEMS_IO_READ 70 95 #define RTEMS_IO_WRITE 71 96 #define RTEMS_IO_CONTROL 72 97 #define RTEMS_FATAL_ERROR_OCCURRED 73 98 #define RTEMS_RATE_MONOTONIC_CREATE 74 99 #define RTEMS_RATE_MONOTONIC_NAME_TO_ID 75 100 #define RTEMS_RATE_MONOTONIC_DELETE 76 101 #define RTEMS_RATE_MONOTONIC_CANCEL 77 102 #define RTEMS_RATE_MONOTONIC_PERIOD 78 103 #define RTEMS_MULTIPROCESSING_ANNOUNCE 79 104 #define RTEMS_DEBUG_ENABLE 80 105 #define RTEMS_DEBUG_DISABLE 81 106 107 #define RTEMS_NUMBER_OF_ENTRY_POINTS 82 102 108 103 109 #ifdef __cplusplus -
c/src/exec/sapi/headers/io.h
r3b438fa rb06e68ef 36 36 37 37 /* 38 * The following type defines the set of IO operations which are39 * recognized by _IO_Handler and can be supported by a RTEMS40 * device driver.41 */42 43 typedef enum {44 IO_INITIALIZE_OPERATION = 0,45 IO_OPEN_OPERATION = 1,46 IO_CLOSE_OPERATION = 2,47 IO_READ_OPERATION = 3,48 IO_WRITE_OPERATION = 4,49 IO_CONTROL_OPERATION = 550 } IO_operations;51 52 /*53 38 * The following declare the data required to manage the Device Driver 54 39 * Address Table. 55 40 */ 56 41 57 EXTERN unsigned32 42 EXTERN unsigned32 _IO_Number_of_drivers; 58 43 EXTERN rtems_driver_address_table *_IO_Driver_address_table; 44 45 /* 46 * Table for the io device names 47 */ 48 49 typedef struct { 50 char *device_name; 51 unsigned32 device_name_length; 52 rtems_device_major_number major; 53 rtems_device_minor_number minor; 54 } rtems_driver_name_t; 55 56 /*XXX this really should be allocated some better way... */ 57 /*XXX it should probably be a chain and use a 'maximum' drivers field 58 * in config table */ 59 #define RTEMS_MAX_DRIVER_NAMES 20 60 EXTERN rtems_driver_name_t rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; 61 59 62 60 63 /* … … 72 75 73 76 /* 77 * rtems_io_register_name 78 * 79 * DESCRIPTION: 80 * 81 * Associate a name with a driver. 82 * 83 */ 84 85 rtems_status_code rtems_io_register_name( 86 char *device_name, 87 rtems_device_major_number major, 88 rtems_device_minor_number minor 89 ); 90 91 92 /* 93 * rtems_io_lookup_name 94 * 95 * DESCRIPTION: 96 * 97 * Find what driver "owns" this name 98 */ 99 100 rtems_status_code rtems_io_lookup_name( 101 const char *pathname, 102 rtems_driver_name_t **rnp 103 ); 104 105 106 /* 74 107 * rtems_io_initialize 75 108 * … … 83 116 rtems_device_major_number major, 84 117 rtems_device_minor_number minor, 85 void *argument, 86 unsigned32 *return_value 118 void *argument 87 119 ); 88 120 … … 99 131 rtems_device_major_number major, 100 132 rtems_device_minor_number minor, 101 void *argument, 102 unsigned32 *return_value 133 void *argument 103 134 ); 104 135 … … 115 146 rtems_device_major_number major, 116 147 rtems_device_minor_number minor, 117 void *argument, 118 unsigned32 *return_value 148 void *argument 119 149 ); 120 150 … … 131 161 rtems_device_major_number major, 132 162 rtems_device_minor_number minor, 133 void *argument, 134 unsigned32 *return_value 163 void *argument 135 164 ); 136 165 … … 147 176 rtems_device_major_number major, 148 177 rtems_device_minor_number minor, 149 void *argument, 150 unsigned32 *return_value 178 void *argument 151 179 ); 152 180 … … 163 191 rtems_device_major_number major, 164 192 rtems_device_minor_number minor, 165 void *argument, 166 unsigned32 *return_value 193 void *argument 167 194 ); 168 195 … … 177 204 178 205 void _IO_Initialize_all_drivers( void ); 179 180 /*181 * _IO_Handler_routine182 *183 * DESCRIPTION:184 *185 * This routine provides the common foundation for all of the IO186 * Manager's directives.187 */188 189 rtems_status_code _IO_Handler_routine(190 IO_operations operation,191 rtems_device_major_number major,192 rtems_device_minor_number minor,193 void *argument,194 unsigned32 *return_value195 );196 206 197 207 #include <rtems/io.inl> -
c/src/exec/sapi/headers/sptables.h
r3b438fa rb06e68ef 50 50 */ 51 51 52 const void * _Entry_points[ NUMBER_OF_ENTRY_POINTS + 1] = {52 const void * _Entry_points[ RTEMS_NUMBER_OF_ENTRY_POINTS ] = { 53 53 (void *) rtems_initialize_executive, /* 0 */ 54 54 (void *) rtems_initialize_executive_early, /* 1 */ … … 117 117 (void *) rtems_port_internal_to_external, /* 64 */ 118 118 (void *) rtems_io_initialize, /* 65 */ 119 (void *) rtems_io_open, /* 66 */ 120 (void *) rtems_io_close, /* 67 */ 121 (void *) rtems_io_read, /* 68 */ 122 (void *) rtems_io_write, /* 69 */ 123 (void *) rtems_io_control, /* 70 */ 124 (void *) rtems_fatal_error_occurred, /* 71 */ 125 (void *) rtems_rate_monotonic_create, /* 72 */ 126 (void *) rtems_rate_monotonic_ident, /* 73 */ 127 (void *) rtems_rate_monotonic_delete, /* 74 */ 128 (void *) rtems_rate_monotonic_cancel, /* 75 */ 129 (void *) rtems_rate_monotonic_period, /* 76 */ 130 (void *) rtems_multiprocessing_announce, /* 77 */ 131 (void *) rtems_debug_enable, /* 78 */ 132 (void *) rtems_debug_disable /* 79 */ 119 (void *) rtems_io_register_name, /* 66 */ 120 (void *) rtems_io_lookup_name, /* 67 */ 121 (void *) rtems_io_open, /* 68 */ 122 (void *) rtems_io_close, /* 69 */ 123 (void *) rtems_io_read, /* 70 */ 124 (void *) rtems_io_write, /* 71 */ 125 (void *) rtems_io_control, /* 72 */ 126 (void *) rtems_fatal_error_occurred, /* 73 */ 127 (void *) rtems_rate_monotonic_create, /* 74 */ 128 (void *) rtems_rate_monotonic_ident, /* 75 */ 129 (void *) rtems_rate_monotonic_delete, /* 76 */ 130 (void *) rtems_rate_monotonic_cancel, /* 77 */ 131 (void *) rtems_rate_monotonic_period, /* 78 */ 132 (void *) rtems_multiprocessing_announce, /* 79 */ 133 (void *) rtems_debug_enable, /* 80 */ 134 (void *) rtems_debug_disable /* 81 */ 133 135 }; 134 136 -
c/src/exec/sapi/include/rtems/config.h
r3b438fa rb06e68ef 33 33 34 34 typedef struct { 35 Objects_Name name; /* task name */36 unsigned32 stack_size; /* task stack size */35 Objects_Name name; /* task name */ 36 unsigned32 stack_size; /* task stack size */ 37 37 rtems_task_priority initial_priority; /* task priority */ 38 rtems_attribute attribute_set; /* task attributes */39 rtems_task_entry 40 rtems_mode mode_set; /* task initial mode */41 unsigned32 argument; /* task argument */42 } 38 rtems_attribute attribute_set; /* task attributes */ 39 rtems_task_entry entry_point; /* task entry point */ 40 rtems_mode mode_set; /* task initial mode */ 41 unsigned32 argument; /* task argument */ 42 } rtems_initialization_tasks_table; 43 43 44 44 /* … … 57 57 typedef unsigned32 rtems_device_minor_number; 58 58 59 typedef voidrtems_device_driver;59 typedef rtems_status_code rtems_device_driver; 60 60 61 61 typedef rtems_device_driver ( *rtems_device_driver_entry )( 62 62 rtems_device_major_number, 63 63 rtems_device_minor_number, 64 void *, 65 Objects_Id, 66 unsigned32 * 64 void * 67 65 ); 68 66 … … 174 172 typedef struct { 175 173 unsigned32 default_timeout; /* in ticks */ 174 unsigned32 maximum_packet_size; 176 175 rtems_mpci_initialization_entry initialization; 177 176 rtems_mpci_get_packet_entry get_packet; … … 179 178 rtems_mpci_send_entry send_packet; 180 179 rtems_mpci_receive_entry receive_packet; 181 } 180 } rtems_mpci_table; 182 181 183 182 /* … … 193 192 unsigned32 maximum_global_objects; /* maximum # global objects */ 194 193 unsigned32 maximum_proxies; /* maximum # proxies */ 195 rtems_mpci_table *User_mpci_table; 196 /* pointer to MPCI table */ 194 rtems_mpci_table *User_mpci_table; /* pointer to MPCI table */ 197 195 }; 198 196 … … 210 208 211 209 struct Configuration_Table { 212 void *work_space_start; 213 unsigned32 work_space_size; 214 unsigned32 maximum_tasks; 215 unsigned32 maximum_timers; 216 unsigned32 maximum_semaphores; 217 unsigned32 maximum_message_queues; 218 unsigned32 maximum_messages; 219 unsigned32 maximum_partitions; 220 unsigned32 maximum_regions; 221 unsigned32 maximum_ports; 222 unsigned32 maximum_periods; 223 unsigned32 maximum_extensions; 224 unsigned32 microseconds_per_tick; 225 unsigned32 ticks_per_timeslice; 226 unsigned32 number_of_initialization_tasks; 210 void *work_space_start; 211 unsigned32 work_space_size; 212 unsigned32 maximum_tasks; 213 unsigned32 maximum_timers; 214 unsigned32 maximum_semaphores; 215 unsigned32 maximum_message_queues; 216 unsigned32 maximum_partitions; 217 unsigned32 maximum_regions; 218 unsigned32 maximum_ports; 219 unsigned32 maximum_periods; 220 unsigned32 maximum_extensions; 221 unsigned32 microseconds_per_tick; 222 unsigned32 ticks_per_timeslice; 223 unsigned32 number_of_initialization_tasks; 227 224 rtems_initialization_tasks_table *User_initialization_tasks_table; 228 unsigned32 225 unsigned32 number_of_device_drivers; 229 226 rtems_driver_address_table *Device_driver_table; 230 rtems_extensions_table 227 rtems_extensions_table *User_extension_table; 231 228 rtems_multiprocessing_table *User_multiprocessing_table; 232 229 }; … … 245 242 */ 246 243 247 EXTERN rtems_configuration_table 244 EXTERN rtems_configuration_table *_Configuration_Table; 248 245 EXTERN rtems_multiprocessing_table *_Configuration_MP_table; 249 246 EXTERN rtems_mpci_table *_Configuration_MPCI_table; … … 259 256 260 257 STATIC INLINE void _Configuration_Handler_initialization( 261 rtems_configuration_table 258 rtems_configuration_table *configuration_table, 262 259 rtems_multiprocessing_table *multiprocessing_table, 263 260 rtems_mpci_table *users_mpci_table -
c/src/exec/sapi/include/rtems/directives.h
r3b438fa rb06e68ef 11 11 * to the copyright license under the clause at DFARS 252.227-7013. This 12 12 * notice must appear in all copies of this file and its derivatives. 13 * 14 * $Id$ 13 15 */ 14 16 15 17 #ifndef __RTEMS_DIRECTIVES_h 16 #define RTEMS___DIRECTIVES_h18 #define __RTEMS_DIRECTIVES_h 17 19 18 20 #ifdef __cplusplus … … 86 88 #define RTEMS_DUAL_PORTED_MEMORY_INTERNAL_TO_EXTERNAL 64 87 89 #define RTEMS_IO_INITIALIZE 65 88 #define RTEMS_IO_OPEN 66 89 #define RTEMS_IO_CLOSE 67 90 #define RTEMS_IO_READ 68 91 #define RTEMS_IO_WRITE 69 92 #define RTEMS_IO_CONTROL 70 93 #define RTEMS_FATAL_ERROR_OCCURRED 71 94 #define RTEMS_RATE_MONOTONIC_CREATE 72 95 #define RTEMS_RATE_MONOTONIC_NAME_TO_ID 73 96 #define RTEMS_RATE_MONOTONIC_DELETE 74 97 #define RTEMS_RATE_MONOTONIC_CANCEL 75 98 #define RTEMS_RATE_MONOTONIC_PERIOD 76 99 #define RTEMS_MULTIPROCESSING_ANNOUNCE 77 100 #define RTEMS_DEBUG_ENABLE 78 101 #define RTEMS_DEBUG_DISABLE 79 90 #define RTEMS_IO_REGISTER_NAME 66 91 #define RTEMS_IO_LOOKUP_NAME 67 92 #define RTEMS_IO_OPEN 68 93 #define RTEMS_IO_CLOSE 69 94 #define RTEMS_IO_READ 70 95 #define RTEMS_IO_WRITE 71 96 #define RTEMS_IO_CONTROL 72 97 #define RTEMS_FATAL_ERROR_OCCURRED 73 98 #define RTEMS_RATE_MONOTONIC_CREATE 74 99 #define RTEMS_RATE_MONOTONIC_NAME_TO_ID 75 100 #define RTEMS_RATE_MONOTONIC_DELETE 76 101 #define RTEMS_RATE_MONOTONIC_CANCEL 77 102 #define RTEMS_RATE_MONOTONIC_PERIOD 78 103 #define RTEMS_MULTIPROCESSING_ANNOUNCE 79 104 #define RTEMS_DEBUG_ENABLE 80 105 #define RTEMS_DEBUG_DISABLE 81 106 107 #define RTEMS_NUMBER_OF_ENTRY_POINTS 82 102 108 103 109 #ifdef __cplusplus -
c/src/exec/sapi/include/rtems/io.h
r3b438fa rb06e68ef 36 36 37 37 /* 38 * The following type defines the set of IO operations which are39 * recognized by _IO_Handler and can be supported by a RTEMS40 * device driver.41 */42 43 typedef enum {44 IO_INITIALIZE_OPERATION = 0,45 IO_OPEN_OPERATION = 1,46 IO_CLOSE_OPERATION = 2,47 IO_READ_OPERATION = 3,48 IO_WRITE_OPERATION = 4,49 IO_CONTROL_OPERATION = 550 } IO_operations;51 52 /*53 38 * The following declare the data required to manage the Device Driver 54 39 * Address Table. 55 40 */ 56 41 57 EXTERN unsigned32 42 EXTERN unsigned32 _IO_Number_of_drivers; 58 43 EXTERN rtems_driver_address_table *_IO_Driver_address_table; 44 45 /* 46 * Table for the io device names 47 */ 48 49 typedef struct { 50 char *device_name; 51 unsigned32 device_name_length; 52 rtems_device_major_number major; 53 rtems_device_minor_number minor; 54 } rtems_driver_name_t; 55 56 /*XXX this really should be allocated some better way... */ 57 /*XXX it should probably be a chain and use a 'maximum' drivers field 58 * in config table */ 59 #define RTEMS_MAX_DRIVER_NAMES 20 60 EXTERN rtems_driver_name_t rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; 61 59 62 60 63 /* … … 72 75 73 76 /* 77 * rtems_io_register_name 78 * 79 * DESCRIPTION: 80 * 81 * Associate a name with a driver. 82 * 83 */ 84 85 rtems_status_code rtems_io_register_name( 86 char *device_name, 87 rtems_device_major_number major, 88 rtems_device_minor_number minor 89 ); 90 91 92 /* 93 * rtems_io_lookup_name 94 * 95 * DESCRIPTION: 96 * 97 * Find what driver "owns" this name 98 */ 99 100 rtems_status_code rtems_io_lookup_name( 101 const char *pathname, 102 rtems_driver_name_t **rnp 103 ); 104 105 106 /* 74 107 * rtems_io_initialize 75 108 * … … 83 116 rtems_device_major_number major, 84 117 rtems_device_minor_number minor, 85 void *argument, 86 unsigned32 *return_value 118 void *argument 87 119 ); 88 120 … … 99 131 rtems_device_major_number major, 100 132 rtems_device_minor_number minor, 101 void *argument, 102 unsigned32 *return_value 133 void *argument 103 134 ); 104 135 … … 115 146 rtems_device_major_number major, 116 147 rtems_device_minor_number minor, 117 void *argument, 118 unsigned32 *return_value 148 void *argument 119 149 ); 120 150 … … 131 161 rtems_device_major_number major, 132 162 rtems_device_minor_number minor, 133 void *argument, 134 unsigned32 *return_value 163 void *argument 135 164 ); 136 165 … … 147 176 rtems_device_major_number major, 148 177 rtems_device_minor_number minor, 149 void *argument, 150 unsigned32 *return_value 178 void *argument 151 179 ); 152 180 … … 163 191 rtems_device_major_number major, 164 192 rtems_device_minor_number minor, 165 void *argument, 166 unsigned32 *return_value 193 void *argument 167 194 ); 168 195 … … 177 204 178 205 void _IO_Initialize_all_drivers( void ); 179 180 /*181 * _IO_Handler_routine182 *183 * DESCRIPTION:184 *185 * This routine provides the common foundation for all of the IO186 * Manager's directives.187 */188 189 rtems_status_code _IO_Handler_routine(190 IO_operations operation,191 rtems_device_major_number major,192 rtems_device_minor_number minor,193 void *argument,194 unsigned32 *return_value195 );196 206 197 207 #include <rtems/io.inl> -
c/src/exec/sapi/include/rtems/sptables.h
r3b438fa rb06e68ef 50 50 */ 51 51 52 const void * _Entry_points[ NUMBER_OF_ENTRY_POINTS + 1] = {52 const void * _Entry_points[ RTEMS_NUMBER_OF_ENTRY_POINTS ] = { 53 53 (void *) rtems_initialize_executive, /* 0 */ 54 54 (void *) rtems_initialize_executive_early, /* 1 */ … … 117 117 (void *) rtems_port_internal_to_external, /* 64 */ 118 118 (void *) rtems_io_initialize, /* 65 */ 119 (void *) rtems_io_open, /* 66 */ 120 (void *) rtems_io_close, /* 67 */ 121 (void *) rtems_io_read, /* 68 */ 122 (void *) rtems_io_write, /* 69 */ 123 (void *) rtems_io_control, /* 70 */ 124 (void *) rtems_fatal_error_occurred, /* 71 */ 125 (void *) rtems_rate_monotonic_create, /* 72 */ 126 (void *) rtems_rate_monotonic_ident, /* 73 */ 127 (void *) rtems_rate_monotonic_delete, /* 74 */ 128 (void *) rtems_rate_monotonic_cancel, /* 75 */ 129 (void *) rtems_rate_monotonic_period, /* 76 */ 130 (void *) rtems_multiprocessing_announce, /* 77 */ 131 (void *) rtems_debug_enable, /* 78 */ 132 (void *) rtems_debug_disable /* 79 */ 119 (void *) rtems_io_register_name, /* 66 */ 120 (void *) rtems_io_lookup_name, /* 67 */ 121 (void *) rtems_io_open, /* 68 */ 122 (void *) rtems_io_close, /* 69 */ 123 (void *) rtems_io_read, /* 70 */ 124 (void *) rtems_io_write, /* 71 */ 125 (void *) rtems_io_control, /* 72 */ 126 (void *) rtems_fatal_error_occurred, /* 73 */ 127 (void *) rtems_rate_monotonic_create, /* 74 */ 128 (void *) rtems_rate_monotonic_ident, /* 75 */ 129 (void *) rtems_rate_monotonic_delete, /* 76 */ 130 (void *) rtems_rate_monotonic_cancel, /* 77 */ 131 (void *) rtems_rate_monotonic_period, /* 78 */ 132 (void *) rtems_multiprocessing_announce, /* 79 */ 133 (void *) rtems_debug_enable, /* 80 */ 134 (void *) rtems_debug_disable /* 81 */ 133 135 }; 134 136 -
c/src/exec/sapi/optman/no-io.c
r3b438fa rb06e68ef 24 24 } 25 25 26 rtems_status_code rtems_io_register_name( 27 char *device_name, 28 rtems_device_major_number major, 29 rtems_device_minor_number minor 30 ) 31 { 32 return RTEMS_NOT_CONFIGURED; 33 } 34 35 rtems_status_code rtems_io_lookup_name( 36 const char *pathname, 37 rtems_driver_name_t **rnp 38 ) 39 { 40 return RTEMS_NOT_CONFIGURED; 41 } 42 26 43 rtems_status_code rtems_io_initialize( 27 44 rtems_device_major_number major, 28 45 rtems_device_minor_number minor, 29 void *argument, 30 unsigned32 *return_value 46 void *argument 31 47 ) 32 48 { … … 37 53 rtems_device_major_number major, 38 54 rtems_device_minor_number minor, 39 void *argument, 40 unsigned32 *return_value 55 void *argument 41 56 ) 42 57 { … … 47 62 rtems_device_major_number major, 48 63 rtems_device_minor_number minor, 49 void *argument, 50 unsigned32 *return_value 64 void *argument 51 65 ) 52 66 { … … 57 71 rtems_device_major_number major, 58 72 rtems_device_minor_number minor, 59 void *argument, 60 unsigned32 *return_value 73 void *argument 61 74 ) 62 75 { … … 67 80 rtems_device_major_number major, 68 81 rtems_device_minor_number minor, 69 void *argument, 70 unsigned32 *return_value 82 void *argument 71 83 ) 72 84 { … … 77 89 rtems_device_major_number major, 78 90 rtems_device_minor_number minor, 79 void *argument, 80 unsigned32 *return_value 91 void *argument 81 92 ) 82 93 { 83 94 return( RTEMS_NOT_CONFIGURED ); 84 95 } 85 86 rtems_status_code _IO_Handler_routine(87 IO_operations operation,88 rtems_device_major_number major,89 rtems_device_minor_number minor,90 void *argument,91 unsigned32 *return_value92 )93 {94 return( RTEMS_NOT_CONFIGURED );95 } -
c/src/exec/sapi/src/exinit.c
r3b438fa rb06e68ef 178 178 179 179 _Message_queue_Manager_initialization( 180 configuration_table->maximum_message_queues, 181 configuration_table->maximum_messages 180 configuration_table->maximum_message_queues 182 181 ); 183 182 -
c/src/exec/sapi/src/io.c
r3b438fa rb06e68ef 19 19 #include <rtems/isr.h> 20 20 #include <rtems/thread.h> 21 #include <rtems/intr.h> 22 23 #include <string.h> 21 24 22 25 /*PAGE … … 34 37 { 35 38 rtems_device_major_number major; 36 unsigned32 ignored;37 39 38 40 for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) 39 (void) rtems_io_initialize( major, 0, _Configuration_Table, &ignored ); 40 } 41 (void) rtems_io_initialize( major, 0, _Configuration_Table); 42 } 43 44 /*PAGE 45 * 46 * rtems_io_register_name 47 * 48 * Associate a name with a driver 49 * 50 * Input Paramters: 51 * 52 * Output Parameters: 53 */ 54 55 rtems_status_code rtems_io_register_name( 56 char *device_name, 57 rtems_device_major_number major, 58 rtems_device_minor_number minor 59 ) 60 { 61 rtems_driver_name_t *np; 62 unsigned32 level; 63 64 /* find an empty slot */ 65 for (np = rtems_driver_name_table; np < &rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; np++) 66 { 67 rtems_interrupt_disable(level); 68 if (np->device_name == 0) 69 { 70 np->device_name = device_name; 71 np->device_name_length = strlen(device_name); 72 np->major = major; 73 np->minor = minor; 74 rtems_interrupt_enable(level); 75 76 return RTEMS_SUCCESSFUL; 77 } 78 rtems_interrupt_enable(level); 79 } 80 81 return RTEMS_TOO_MANY; 82 } 83 84 /*PAGE 85 * 86 * rtems_io_lookup_name 87 * 88 * Find what driver "owns" this name 89 * 90 * Input Paramters: 91 * 92 * Output Parameters: 93 */ 94 95 rtems_status_code rtems_io_lookup_name( 96 const char *pathname, 97 rtems_driver_name_t **rnp 98 ) 99 { 100 rtems_driver_name_t *np; 101 102 for (np = rtems_driver_name_table; np < &rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; np++) 103 if (np->device_name) 104 if (strncmp(np->device_name, pathname, np->device_name_length) == 0) 105 { 106 *rnp = np; 107 return RTEMS_SUCCESSFUL; 108 } 109 110 *rnp = 0; 111 return RTEMS_UNSATISFIED; 112 } 113 41 114 42 115 /*PAGE … … 50 123 * minor - device number 51 124 * argument - pointer to argument(s) 52 * return_value - pointer to driver's return value 53 * 54 * Output Parameters: 55 * returns - return code 56 * *return_value - driver's return code 125 * 126 * Output Parameters: 127 * returns - return code 57 128 */ 58 129 … … 60 131 rtems_device_major_number major, 61 132 rtems_device_minor_number minor, 62 void *argument, 63 unsigned32 *return_value 64 ) 65 { 66 return _IO_Handler_routine( 67 IO_INITIALIZE_OPERATION, 68 major, 69 minor, 70 argument, 71 return_value 72 ); 133 void *argument 134 ) 135 { 136 rtems_device_driver_entry callout; 137 138 if ( major >= _IO_Number_of_drivers ) 139 return RTEMS_INVALID_NUMBER; 140 141 callout = _IO_Driver_address_table[major].initialization; 142 return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 73 143 } 74 144 … … 83 153 * minor - device number 84 154 * argument - pointer to argument(s) 85 * return_value - pointer to driver's return value 86 * 87 * Output Parameters: 88 * returns - return code 89 * *return_value - driver's return code 155 * 156 * Output Parameters: 157 * returns - return code 90 158 */ 91 159 … … 93 161 rtems_device_major_number major, 94 162 rtems_device_minor_number minor, 95 void *argument, 96 unsigned32 *return_value 97 ) 98 { 99 return _IO_Handler_routine( 100 IO_OPEN_OPERATION, 101 major, 102 minor, 103 argument, 104 return_value 105 ); 163 void *argument 164 ) 165 { 166 rtems_device_driver_entry callout; 167 168 if ( major >= _IO_Number_of_drivers ) 169 return RTEMS_INVALID_NUMBER; 170 171 callout = _IO_Driver_address_table[major].open; 172 return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 106 173 } 107 174 … … 116 183 * minor - device number 117 184 * argument - pointer to argument(s) 118 * return_value - pointer to driver's return value 119 * 120 * Output Parameters: 121 * returns - return code 122 * *return_value - driver's return code 185 * 186 * Output Parameters: 187 * returns - return code 123 188 */ 124 189 … … 126 191 rtems_device_major_number major, 127 192 rtems_device_minor_number minor, 128 void *argument, 129 unsigned32 *return_value 130 ) 131 { 132 return _IO_Handler_routine( 133 IO_CLOSE_OPERATION, 134 major, 135 minor, 136 argument, 137 return_value 138 ); 193 void *argument 194 ) 195 { 196 rtems_device_driver_entry callout; 197 198 if ( major >= _IO_Number_of_drivers ) 199 return RTEMS_INVALID_NUMBER; 200 201 callout = _IO_Driver_address_table[major].close; 202 return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 139 203 } 140 204 … … 149 213 * minor - device number 150 214 * argument - pointer to argument(s) 151 * return_value - pointer to driver's return value 152 * 153 * Output Parameters: 154 * returns - return code 155 * *return_value - driver's return code 215 * 216 * Output Parameters: 217 * returns - return code 156 218 */ 157 219 … … 159 221 rtems_device_major_number major, 160 222 rtems_device_minor_number minor, 161 void *argument, 162 unsigned32 *return_value 163 ) 164 { 165 return _IO_Handler_routine( 166 IO_READ_OPERATION, 167 major, 168 minor, 169 argument, 170 return_value 171 ); 223 void *argument 224 ) 225 { 226 rtems_device_driver_entry callout; 227 228 if ( major >= _IO_Number_of_drivers ) 229 return RTEMS_INVALID_NUMBER; 230 231 callout = _IO_Driver_address_table[major].read; 232 return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 172 233 } 173 234 … … 182 243 * minor - device number 183 244 * argument - pointer to argument(s) 184 * return_value - pointer to driver's return value 185 * 186 * Output Parameters: 187 * returns - return code 188 * *return_value - driver's return code 245 * 246 * Output Parameters: 247 * returns - return code 189 248 */ 190 249 … … 192 251 rtems_device_major_number major, 193 252 rtems_device_minor_number minor, 194 void *argument, 195 unsigned32 *return_value 196 ) 197 { 198 return _IO_Handler_routine( 199 IO_WRITE_OPERATION, 200 major, 201 minor, 202 argument, 203 return_value 204 ); 253 void *argument 254 ) 255 { 256 rtems_device_driver_entry callout; 257 258 if ( major >= _IO_Number_of_drivers ) 259 return RTEMS_INVALID_NUMBER; 260 261 callout = _IO_Driver_address_table[major].write; 262 return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 205 263 } 206 264 … … 215 273 * minor - device number 216 274 * argument - pointer to argument(s) 217 * return_value - pointer to driver's return value 218 * 219 * Output Parameters: 220 * returns - return code 221 * *return_value - driver's return code 275 * 276 * Output Parameters: 277 * returns - return code 222 278 */ 223 279 … … 225 281 rtems_device_major_number major, 226 282 rtems_device_minor_number minor, 227 void *argument, 228 unsigned32 *return_value 229 ) 230 { 231 return _IO_Handler_routine( 232 IO_CONTROL_OPERATION, 233 major, 234 minor, 235 argument, 236 return_value 237 ); 238 } 239 240 /*PAGE 241 * 242 * _IO_Handler_routine 243 * 244 * This routine implements all IO manager directives. 245 * 246 * Input Paramters: 247 * operation - I/O operation to be performed 248 * major - device driver number 249 * minor - device number 250 * argument - pointer to argument(s) 251 * return_value - pointer to driver's return value 252 * 253 * Output Parameters: 254 * returns - return code 255 * *return_value - driver's return code 256 */ 257 258 rtems_status_code _IO_Handler_routine( 259 IO_operations operation, 260 rtems_device_major_number major, 261 rtems_device_minor_number minor, 262 void *argument, 263 unsigned32 *return_value 264 ) 265 { 266 rtems_device_driver_entry io_callout; 267 268 /* 269 * NOTE: There is no range checking as in Ada because: 270 * + arrays in Ada are not always zero based. 271 * + with zero based arrays, a comparison of an unsigned 272 * number being less than zero would be necessary to 273 * check it as a range. This would cause a warning for 274 * checking an unsigned number for being negative. 275 */ 276 277 if ( major >= _IO_Number_of_drivers ) 278 return ( RTEMS_INVALID_NUMBER ); 279 280 switch ( operation ) { 281 case IO_INITIALIZE_OPERATION: 282 io_callout = _IO_Driver_address_table[ major ].initialization; 283 break; 284 case IO_OPEN_OPERATION: 285 io_callout = _IO_Driver_address_table[ major ].open; 286 break; 287 case IO_CLOSE_OPERATION: 288 io_callout = _IO_Driver_address_table[ major ].close; 289 break; 290 case IO_READ_OPERATION: 291 io_callout = _IO_Driver_address_table[ major ].read; 292 break; 293 case IO_WRITE_OPERATION: 294 io_callout = _IO_Driver_address_table[ major ].write; 295 break; 296 case IO_CONTROL_OPERATION: 297 io_callout = _IO_Driver_address_table[ major ].control; 298 break; 299 default: /* unreached -- only to remove warnings */ 300 io_callout = NULL; 301 break; 302 } 303 304 if ( io_callout != NULL ) 305 (*io_callout)( 306 major, 307 minor, 308 argument, 309 _Thread_Executing->Object.id, 310 return_value 311 ); 312 else 313 *return_value = 0; 314 315 return( RTEMS_SUCCESSFUL ); 316 } 283 void *argument 284 ) 285 { 286 rtems_device_driver_entry callout; 287 288 if ( major >= _IO_Number_of_drivers ) 289 return RTEMS_INVALID_NUMBER; 290 291 callout = _IO_Driver_address_table[major].control; 292 return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; 293 } 294 -
c/src/exec/score/headers/object.h
r3b438fa rb06e68ef 101 101 102 102 /* 103 * Parameters and return id's for _Objects_Get_next 104 */ 105 106 #define RTEMS_OBJECT_ID_INITIAL_INDEX (0) 107 #define RTEMS_OBJECT_ID_FINAL_INDEX (0xffff) 108 109 #define RTEMS_OBJECT_ID_INITIAL(node) (_Objects_Build_id( \ 110 node, \ 111 RTEMS_OBJECT_ID_INITIAL_INDEX)) 112 #define RTEMS_OBJECT_ID_FINAL ((Objects_Id) ~0) 113 114 /* 103 115 * _Objects_Handler_initialization 104 116 * … … 180 192 181 193 /* 194 * _Objects_Get_next 195 * 196 * DESCRIPTION: 197 * 198 * Like _Objects_Get, but is used to find "next" open object. 199 * 200 */ 201 202 Objects_Control *_Objects_Get_next( 203 Objects_Information *information, 204 Objects_Id id, 205 unsigned32 *location_p, 206 Objects_Id *next_id_p 207 ); 208 209 /* 182 210 * _Objects_Is_name_valid 183 211 * -
c/src/exec/score/headers/system.h
r3b438fa rb06e68ef 79 79 #include <rtems/cpu.h> /* processor specific information */ 80 80 #include <rtems/status.h> /* RTEMS status codes */ 81 #include <rtems/directives.h> 81 82 82 83 /* … … 104 105 #define stringify( _x ) # _x 105 106 107 #define RTEMS_offsetof(type, field) \ 108 ((unsigned32) &(((type *) 0)->field)) 109 106 110 /* 107 111 * The following is the extern for the RTEMS version string. … … 116 120 */ 117 121 118 #define NUMBER_OF_ENTRY_POINTS 79 119 extern const void * _Entry_points[ NUMBER_OF_ENTRY_POINTS + 1 ]; 122 extern const void * _Entry_points[ RTEMS_NUMBER_OF_ENTRY_POINTS ]; 120 123 121 124 /* -
c/src/exec/score/headers/thread.h
r3b438fa rb06e68ef 116 116 unsigned32 segment_size; /* size of segment requested */ 117 117 rtems_event_set event_condition; 118 unsigned32 *message_size_p; /* ptr for return size of message */ 118 119 } Extra; 119 120 void *return_argument; /* address of user return param */ -
c/src/exec/score/include/rtems/score/object.h
r3b438fa rb06e68ef 101 101 102 102 /* 103 * Parameters and return id's for _Objects_Get_next 104 */ 105 106 #define RTEMS_OBJECT_ID_INITIAL_INDEX (0) 107 #define RTEMS_OBJECT_ID_FINAL_INDEX (0xffff) 108 109 #define RTEMS_OBJECT_ID_INITIAL(node) (_Objects_Build_id( \ 110 node, \ 111 RTEMS_OBJECT_ID_INITIAL_INDEX)) 112 #define RTEMS_OBJECT_ID_FINAL ((Objects_Id) ~0) 113 114 /* 103 115 * _Objects_Handler_initialization 104 116 * … … 180 192 181 193 /* 194 * _Objects_Get_next 195 * 196 * DESCRIPTION: 197 * 198 * Like _Objects_Get, but is used to find "next" open object. 199 * 200 */ 201 202 Objects_Control *_Objects_Get_next( 203 Objects_Information *information, 204 Objects_Id id, 205 unsigned32 *location_p, 206 Objects_Id *next_id_p 207 ); 208 209 /* 182 210 * _Objects_Is_name_valid 183 211 * -
c/src/exec/score/include/rtems/score/thread.h
r3b438fa rb06e68ef 116 116 unsigned32 segment_size; /* size of segment requested */ 117 117 rtems_event_set event_condition; 118 unsigned32 *message_size_p; /* ptr for return size of message */ 118 119 } Extra; 119 120 void *return_argument; /* address of user return param */ -
c/src/exec/score/include/rtems/system.h
r3b438fa rb06e68ef 79 79 #include <rtems/cpu.h> /* processor specific information */ 80 80 #include <rtems/status.h> /* RTEMS status codes */ 81 #include <rtems/directives.h> 81 82 82 83 /* … … 104 105 #define stringify( _x ) # _x 105 106 107 #define RTEMS_offsetof(type, field) \ 108 ((unsigned32) &(((type *) 0)->field)) 109 106 110 /* 107 111 * The following is the extern for the RTEMS version string. … … 116 120 */ 117 121 118 #define NUMBER_OF_ENTRY_POINTS 79 119 extern const void * _Entry_points[ NUMBER_OF_ENTRY_POINTS + 1 ]; 122 extern const void * _Entry_points[ RTEMS_NUMBER_OF_ENTRY_POINTS ]; 120 123 121 124 /* -
c/src/exec/score/src/object.c
r3b438fa rb06e68ef 13 13 * $Id$ 14 14 */ 15 15 16 #include <rtems/system.h> 16 17 #include <rtems/chain.h> … … 227 228 return the_object; 228 229 } 230 231 232 /*PAGE 233 * 234 * _Objects_Get_next 235 * 236 * Like _Objects_Get, but considers the 'id' as a "hint" and 237 * finds next valid one after that point. 238 * Mostly used for monitor and debug traversal of an object. 239 * 240 * Input parameters: 241 * information - pointer to entry in table for this class 242 * id - object id to search for 243 * location - address of where to store the location 244 * next_id - address to store next id to try 245 * 246 * Output parameters: 247 * returns - address of object if local 248 * location - one of the following: 249 * OBJECTS_ERROR - invalid object ID 250 * OBJECTS_REMOTE - remote object 251 * OBJECTS_LOCAL - local object 252 * next_id - will contain a reasonable "next" id to continue traversal 253 * 254 * NOTE: 255 * assumes can add '1' to an id to get to next index. 256 */ 257 258 Objects_Control * 259 _Objects_Get_next( 260 Objects_Information *information, 261 Objects_Id id, 262 unsigned32 *location_p, 263 Objects_Id *next_id_p 264 ) 265 { 266 Objects_Control *object; 267 Objects_Id next_id; 268 269 if (rtems_get_index(id) == RTEMS_OBJECT_ID_INITIAL_INDEX) 270 next_id = information->minimum_id; 271 else 272 next_id = id; 273 274 do { 275 /* walked off end of list? */ 276 if (next_id > information->maximum_id) 277 { 278 *location_p = OBJECTS_ERROR; 279 goto final; 280 } 281 282 /* try to grab one */ 283 object = _Objects_Get(information, next_id, location_p); 284 285 next_id++; 286 287 } while (*location_p != OBJECTS_LOCAL); 288 289 *next_id_p = next_id; 290 return object; 291 292 final: 293 *next_id_p = RTEMS_OBJECT_ID_FINAL; 294 return 0; 295 }
Note: See TracChangeset
for help on using the changeset viewer.