diff options
Diffstat (limited to 'c/src/exec/score/include')
-rw-r--r-- | c/src/exec/score/include/rtems/score/mppkt.h | 2 | ||||
-rw-r--r-- | c/src/exec/score/include/rtems/score/object.h | 26 | ||||
-rw-r--r-- | c/src/exec/score/include/rtems/score/objectmp.h | 21 | ||||
-rw-r--r-- | c/src/exec/score/include/rtems/score/priority.h | 14 | ||||
-rw-r--r-- | c/src/exec/score/include/rtems/score/thread.h | 123 | ||||
-rw-r--r-- | c/src/exec/score/include/rtems/score/threadq.h | 37 | ||||
-rw-r--r-- | c/src/exec/score/include/rtems/score/tqdata.h | 8 | ||||
-rw-r--r-- | c/src/exec/score/include/rtems/score/userext.h | 4 |
8 files changed, 193 insertions, 42 deletions
diff --git a/c/src/exec/score/include/rtems/score/mppkt.h b/c/src/exec/score/include/rtems/score/mppkt.h index 4e72d6930a..d63d587fca 100644 --- a/c/src/exec/score/include/rtems/score/mppkt.h +++ b/c/src/exec/score/include/rtems/score/mppkt.h @@ -64,7 +64,7 @@ typedef struct { rtems_mp_packet_classes the_class; Objects_Id id; Objects_Id source_tid; - rtems_task_priority source_priority; + Priority_Control source_priority; rtems_status_code return_code; unsigned32 length; unsigned32 to_convert; diff --git a/c/src/exec/score/include/rtems/score/object.h b/c/src/exec/score/include/rtems/score/object.h index 5c84868dc1..b1d422d3d4 100644 --- a/c/src/exec/score/include/rtems/score/object.h +++ b/c/src/exec/score/include/rtems/score/object.h @@ -349,6 +349,19 @@ Objects_Control *_Objects_Get_next( ); /* + * _Objects_Get_information + * + * DESCRIPTION: + * + * Returns the information control block for the class of objects + * corresponding to this id. + */ + +Objects_Information *_Objects_Get_information( + Objects_Id id +); + +/* * _Objects_Build_id * * DESCRIPTION: @@ -404,6 +417,19 @@ STATIC INLINE unsigned32 rtems_get_index( ); /* + * _Objects_Is_class_valid + * + * DESCRIPTION: + * + * This function returns TRUE if the class is valid. + * + */ + +STATIC INLINE boolean _Objects_Is_class_valid( + Objects_Classes the_class +); + +/* * _Objects_Is_local_node * * DESCRIPTION: diff --git a/c/src/exec/score/include/rtems/score/objectmp.h b/c/src/exec/score/include/rtems/score/objectmp.h index 6ec5ed1781..b15d5cbb43 100644 --- a/c/src/exec/score/include/rtems/score/objectmp.h +++ b/c/src/exec/score/include/rtems/score/objectmp.h @@ -81,18 +81,35 @@ STATIC INLINE boolean _Objects_MP_Is_null_global_object ( Objects_MP_Control *the_object ); -/* +/*PAGE + * * _Objects_MP_Open * * DESCRIPTION: * + * This routine place the specified global object in the + * specified information table. + */ + +void _Objects_MP_Open ( + Objects_Information *information, + Objects_MP_Control *the_global_object, + unsigned32 the_name, /* XXX -- wrong for variable */ + Objects_Id the_id +); + +/* + * _Objects_MP_Allocate_and_open + * + * DESCRIPTION: + * * This routine allocates a global object control block * and places it in the specified information table. If the * allocation fails, then is_fatal_error determines the * error processing actions taken. */ -boolean _Objects_MP_Open ( +boolean _Objects_MP_Allocate_and_open ( Objects_Information *information, unsigned32 the_name, /* XXX -- wrong for variable length */ Objects_Id the_id, diff --git a/c/src/exec/score/include/rtems/score/priority.h b/c/src/exec/score/include/rtems/score/priority.h index 823611b080..44397e7a8a 100644 --- a/c/src/exec/score/include/rtems/score/priority.h +++ b/c/src/exec/score/include/rtems/score/priority.h @@ -29,7 +29,7 @@ extern "C" { * NOTE: Priority 0 is reserved for internal threads only. */ -typedef unsigned32 rtems_task_priority; +typedef unsigned32 Priority_Control; #define RTEMS_MINIMUM_PRIORITY 1 /* highest thread priority */ #define RTEMS_MAXIMUM_PRIORITY 255 /* lowest thread priority */ @@ -92,7 +92,7 @@ STATIC INLINE void _Priority_Handler_initialization( void ); */ STATIC INLINE boolean _Priority_Is_valid ( - rtems_task_priority the_priority + Priority_Control the_priority ); /* @@ -104,7 +104,7 @@ STATIC INLINE boolean _Priority_Is_valid ( */ STATIC INLINE unsigned32 _Priority_Major ( - rtems_task_priority the_priority + Priority_Control the_priority ); /* @@ -116,7 +116,7 @@ STATIC INLINE unsigned32 _Priority_Major ( */ STATIC INLINE unsigned32 _Priority_Minor ( - rtems_task_priority the_priority + Priority_Control the_priority ); /* @@ -155,7 +155,7 @@ STATIC INLINE void _Priority_Remove_from_bit_map ( * ready thread. */ -STATIC INLINE rtems_task_priority _Priority_Get_highest( void ); +STATIC INLINE Priority_Control _Priority_Get_highest( void ); /* * _Priority_Initialize_information @@ -169,7 +169,7 @@ STATIC INLINE rtems_task_priority _Priority_Get_highest( void ); STATIC INLINE void _Priority_Initialize_information( Priority_Information *the_priority_map, - rtems_task_priority new_priority + Priority_Control new_priority ); /* @@ -182,7 +182,7 @@ STATIC INLINE void _Priority_Initialize_information( */ STATIC INLINE boolean _Priority_Is_group_empty ( - rtems_task_priority the_priority + Priority_Control the_priority ); #include <rtems/priority.inl> diff --git a/c/src/exec/score/include/rtems/score/thread.h b/c/src/exec/score/include/rtems/score/thread.h index 9c5d0b040b..37a5898d01 100644 --- a/c/src/exec/score/include/rtems/score/thread.h +++ b/c/src/exec/score/include/rtems/score/thread.h @@ -86,22 +86,30 @@ typedef rtems_task ( *rtems_task_entry )( rtems_task_argument ); -typedef Thread ( *Thread_Entry )( - Thread_Argument - ); +typedef Thread ( *Thread_Entry )( ); /* * The following structure contains the information which defines * the starting state of a thread. */ +typedef enum { + THREAD_START_NUMERIC, + THREAD_START_POINTER, + THREAD_START_BOTH_POINTER_FIRST, + THREAD_START_BOTH_NUMERIC_FIRST +} Thread_Start_types; + typedef struct { Thread_Entry entry_point; /* starting thread address */ - unsigned32 initial_argument; /* initial argument */ - rtems_mode initial_modes; /* initial mode */ - rtems_task_priority initial_priority; /* initial priority */ - void *fp_context; /* initial FP context area address */ + Thread_Start_types prototype; /* how task is invoked */ + void *pointer_argument; /* pointer argument */ + unsigned32 numeric_argument; /* numeric argument */ + Modes_Control initial_modes; /* initial mode */ + Priority_Control initial_priority; /* initial priority */ Stack_Control Initial_stack; /* stack information */ + void *fp_context; /* initial FP context area address */ + void *stack; /* initial FP context area address */ } Thread_Start_information; /* @@ -134,8 +142,8 @@ typedef struct { typedef struct { Objects_Control Object; States_Control current_state; - rtems_task_priority current_priority; - rtems_task_priority real_priority; + Priority_Control current_priority; + Priority_Control real_priority; unsigned32 resource_count; Thread_Wait_information Wait; Watchdog_Control Timer; @@ -153,11 +161,21 @@ typedef struct { * memory images for the shared part. */ +/* XXX structure in wrong file .. API .. not core */ + +typedef struct { + boolean is_global; + unsigned32 Notepads[ RTEMS_NUMBER_NOTEPADS ]; + rtems_event_set pending_events; + rtems_event_set events_out; + ASR_Information Signal; +} RTEMS_API_Control; + typedef struct { Objects_Control Object; States_Control current_state; - rtems_task_priority current_priority; - rtems_task_priority real_priority; + Priority_Control current_priority; + Priority_Control real_priority; unsigned32 resource_count; Thread_Wait_information Wait; Watchdog_Control Timer; @@ -165,15 +183,11 @@ typedef struct { /****************** end of common block ********************/ Chain_Control *ready; Priority_Information Priority_map; - rtems_event_set pending_events; - rtems_event_set events_out; Thread_Start_information Start; - ASR_Information Signal; - rtems_mode current_modes; - rtems_attribute attribute_set; + Modes_Control current_modes; Context_Control Registers; void *fp_context; - unsigned32 Notepads[ RTEMS_NUMBER_NOTEPADS ]; + RTEMS_API_Control *RTEMS_API; void *extension; } Thread_Control; @@ -305,6 +319,71 @@ STATIC INLINE void _Thread_Dispatch_initialization( void ); void _Thread_Dispatch( void ); /* + * _Thread_Initialize + * + * DESCRIPTION: + * + * XXX + */ + +boolean _Thread_Initialize( + Objects_Information *information, + Thread_Control *the_thread, + void *stack_area, /* NULL if to be allocated */ + unsigned32 stack_size, /* insure it is >= min */ + boolean is_fp, /* TRUE if thread uses FP */ + Priority_Control priority, + Modes_Control mode, + Objects_Name name + +); + +/* + * _Thread_Start + * + * DESCRIPTION: + * + * XXX + */ + +boolean _Thread_Start( + Thread_Control *the_thread, + Thread_Start_types the_prototype, + void *entry_point, + void *pointer_argument, + unsigned32 numeric_argument +); + +/* + * _Thread_Restart + * + * DESCRIPTION: + * + * XXX + */ + +/* XXX multiple task arg profiles */ + +boolean _Thread_Restart( + Thread_Control *the_thread, + void *pointer_argument, + unsigned32 numeric_argument +); + +/* + * _Thread_Close + * + * DESCRIPTION: + * + * XXX + */ + +void _Thread_Close( + Objects_Information *information, + Thread_Control *the_thread +); + +/* * _Thread_Ready * * DESCRIPTION: @@ -493,7 +572,7 @@ void _Thread_Delay_ended( void _Thread_Change_priority ( Thread_Control *the_thread, - rtems_task_priority new_priority + Priority_Control new_priority ); /* @@ -507,7 +586,7 @@ void _Thread_Change_priority ( void _Thread_Set_priority( Thread_Control *the_thread, - rtems_task_priority new_priority + Priority_Control new_priority ); /* @@ -524,9 +603,9 @@ void _Thread_Set_priority( */ boolean _Thread_Change_mode( - rtems_mode new_mode_set, - rtems_mode mask, - rtems_mode *old_mode_set + Modes_Control new_mode_set, + Modes_Control mask, + Modes_Control *old_mode_set ); /* diff --git a/c/src/exec/score/include/rtems/score/threadq.h b/c/src/exec/score/include/rtems/score/threadq.h index 291044ead1..27a36ab63e 100644 --- a/c/src/exec/score/include/rtems/score/threadq.h +++ b/c/src/exec/score/include/rtems/score/threadq.h @@ -37,6 +37,19 @@ typedef void ( *Thread_queue_Flush_callout )( ); /* + * The following type defines the callout used when a local task + * is extracted from a remote thread queue (i.e. it's proxy must + * extracted from the remote queue). + */ + +typedef void ( *Thread_queue_Extract_callout )( + Thread_Control * + ); + +EXTERN Thread_queue_Extract_callout + _Thread_queue_Extract_table[ OBJECTS_CLASSES_LAST + 1 ]; + +/* * _Thread_queue_Dequeue * * DESCRIPTION: @@ -62,7 +75,7 @@ Thread_Control *_Thread_queue_Dequeue( void _Thread_queue_Enqueue( Thread_queue_Control *the_thread_queue, - rtems_interval timeout + rtems_interval timeout ); /* @@ -80,6 +93,20 @@ void _Thread_queue_Extract( ); /* + * _Thread_queue_Extract_with_proxy + * + * DESCRIPTION: + * + * This routine extracts the_thread from the_thread_queue + * and insures that if there is a proxy for this task on + * another node, it is also dealt with. + */ + +boolean _Thread_queue_Extract_with_proxy( + Thread_Control *the_thread +); + +/* * _Thread_queue_First * * DESCRIPTION: @@ -118,9 +145,11 @@ void _Thread_queue_Flush( */ void _Thread_queue_Initialize( - Thread_queue_Control *the_thread_queue, - rtems_attribute attribute_set, - States_Control state + Thread_queue_Control *the_thread_queue, + Objects_Classes the_class, + Thread_queue_Disciplines the_discipline, + States_Control state, + Thread_queue_Extract_callout proxy_extract_callout ); /* diff --git a/c/src/exec/score/include/rtems/score/tqdata.h b/c/src/exec/score/include/rtems/score/tqdata.h index 37dd6853d7..f962f409d2 100644 --- a/c/src/exec/score/include/rtems/score/tqdata.h +++ b/c/src/exec/score/include/rtems/score/tqdata.h @@ -31,8 +31,8 @@ extern "C" { */ typedef enum { - THREAD_QUEUE_DATA_FIFO_DISCIPLINE, /* RTEMS_FIFO queue discipline */ - THREAD_QUEUE_DATA_PRIORITY_DISCIPLINE /* RTEMS_PRIORITY queue discipline */ + THREAD_QUEUE_DISCIPLINE_FIFO, /* RTEMS_FIFO queue discipline */ + THREAD_QUEUE_DISCIPLINE_PRIORITY /* RTEMS_PRIORITY queue discipline */ } Thread_queue_Disciplines; /* @@ -63,7 +63,7 @@ typedef struct { */ STATIC INLINE unsigned32 _Thread_queue_Header_number ( - rtems_task_priority the_priority + Priority_Control the_priority ); /* @@ -77,7 +77,7 @@ STATIC INLINE unsigned32 _Thread_queue_Header_number ( */ STATIC INLINE boolean _Thread_queue_Is_reverse_search ( - rtems_task_priority the_priority + Priority_Control the_priority ); #include <rtems/tqdata.inl> diff --git a/c/src/exec/score/include/rtems/score/userext.h b/c/src/exec/score/include/rtems/score/userext.h index 37131959d9..56fae9b7db 100644 --- a/c/src/exec/score/include/rtems/score/userext.h +++ b/c/src/exec/score/include/rtems/score/userext.h @@ -69,8 +69,8 @@ STATIC INLINE void _User_extensions_Handler_initialization ( */ STATIC INLINE void _User_extensions_Add_set ( - User_extensions_Control *the_extension, - rtems_extensions_table *extension_table + User_extensions_Control *the_extension, + rtems_extensions_table *extension_table ); /* |