summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/include/rtems')
-rw-r--r--cpukit/score/include/rtems/score/mppkt.h2
-rw-r--r--cpukit/score/include/rtems/score/object.h26
-rw-r--r--cpukit/score/include/rtems/score/objectmp.h21
-rw-r--r--cpukit/score/include/rtems/score/priority.h14
-rw-r--r--cpukit/score/include/rtems/score/thread.h123
-rw-r--r--cpukit/score/include/rtems/score/threadq.h37
-rw-r--r--cpukit/score/include/rtems/score/tqdata.h8
-rw-r--r--cpukit/score/include/rtems/score/userext.h4
8 files changed, 193 insertions, 42 deletions
diff --git a/cpukit/score/include/rtems/score/mppkt.h b/cpukit/score/include/rtems/score/mppkt.h
index 4e72d6930a..d63d587fca 100644
--- a/cpukit/score/include/rtems/score/mppkt.h
+++ b/cpukit/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/cpukit/score/include/rtems/score/object.h b/cpukit/score/include/rtems/score/object.h
index 5c84868dc1..b1d422d3d4 100644
--- a/cpukit/score/include/rtems/score/object.h
+++ b/cpukit/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/cpukit/score/include/rtems/score/objectmp.h b/cpukit/score/include/rtems/score/objectmp.h
index 6ec5ed1781..b15d5cbb43 100644
--- a/cpukit/score/include/rtems/score/objectmp.h
+++ b/cpukit/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/cpukit/score/include/rtems/score/priority.h b/cpukit/score/include/rtems/score/priority.h
index 823611b080..44397e7a8a 100644
--- a/cpukit/score/include/rtems/score/priority.h
+++ b/cpukit/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/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
index 9c5d0b040b..37a5898d01 100644
--- a/cpukit/score/include/rtems/score/thread.h
+++ b/cpukit/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/cpukit/score/include/rtems/score/threadq.h b/cpukit/score/include/rtems/score/threadq.h
index 291044ead1..27a36ab63e 100644
--- a/cpukit/score/include/rtems/score/threadq.h
+++ b/cpukit/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/cpukit/score/include/rtems/score/tqdata.h b/cpukit/score/include/rtems/score/tqdata.h
index 37dd6853d7..f962f409d2 100644
--- a/cpukit/score/include/rtems/score/tqdata.h
+++ b/cpukit/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/cpukit/score/include/rtems/score/userext.h b/cpukit/score/include/rtems/score/userext.h
index 37131959d9..56fae9b7db 100644
--- a/cpukit/score/include/rtems/score/userext.h
+++ b/cpukit/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
);
/*