summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1995-08-28 15:30:29 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1995-08-28 15:30:29 +0000
commit7f6a24abdd1793e394e4d5d49de1f4ca0e00297a (patch)
treefbdb1ec31289dabb5bf41ed769d4b40ca8cf9a9a /cpukit/score/include
parentMoved _Thread_Information -> _RTEMS_tasks_Information. (diff)
downloadrtems-7f6a24abdd1793e394e4d5d49de1f4ca0e00297a.tar.bz2
Added unused priority ceiling parameter to rtems_semaphore_create.
Rearranged code to created thread handler routines to initialize, start, restart, and "close/delete" a thread. Made internal threads their own object class. This now uses the thread support routines for starting and initializing a thread. Insured deleted tasks are freed to the Inactive pool associated with the correct Information block. Added an RTEMS API specific data area to the thread control block. Beginnings of removing the word "rtems" from the core.
Diffstat (limited to '')
-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
);
/*