summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/include/rtems/score/thread.h')
-rw-r--r--cpukit/score/include/rtems/score/thread.h935
1 files changed, 0 insertions, 935 deletions
diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
deleted file mode 100644
index 7e0e2722dd..0000000000
--- a/cpukit/score/include/rtems/score/thread.h
+++ /dev/null
@@ -1,935 +0,0 @@
-/**
- * @file rtems/score/thread.h
- *
- * @brief Constants and Structures Related with the Thread Control Block
- *
- * This include file contains all constants and structures associated
- * with the thread control block.
- */
-
-/*
- * COPYRIGHT (c) 1989-2014.
- * On-Line Applications Research Corporation (OAR).
- *
- * Copyright (c) 2014, 2016 embedded brains GmbH.
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef _RTEMS_SCORE_THREAD_H
-#define _RTEMS_SCORE_THREAD_H
-
-#include <rtems/score/atomic.h>
-#include <rtems/score/context.h>
-#if defined(RTEMS_MULTIPROCESSING)
-#include <rtems/score/mppkt.h>
-#endif
-#include <rtems/score/isrlock.h>
-#include <rtems/score/object.h>
-#include <rtems/score/priority.h>
-#include <rtems/score/schedulernode.h>
-#include <rtems/score/stack.h>
-#include <rtems/score/states.h>
-#include <rtems/score/threadq.h>
-#include <rtems/score/timestamp.h>
-#include <rtems/score/watchdog.h>
-
-#if defined(RTEMS_SMP)
-#include <rtems/score/processormask.h>
-#endif
-
-struct _pthread_cleanup_context;
-
-struct Per_CPU_Control;
-
-struct _Scheduler_Control;
-
-struct User_extensions_Iterator;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup ScoreThread Thread Handler
- *
- * @ingroup Score
- *
- * This handler encapsulates functionality related to the management of
- * threads. This includes the creation, deletion, and scheduling of threads.
- *
- * The following variables are maintained as part of the per cpu data
- * structure.
- *
- * + Idle thread pointer
- * + Executing thread pointer
- * + Heir thread pointer
- */
-/**@{*/
-
-#if defined(RTEMS_POSIX_API)
- #define RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE
-#endif
-
-/*
- * With the addition of the Constant Block Scheduler (CBS),
- * this feature is needed even when POSIX is disabled.
- */
-#define RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT
-
-#if defined(RTEMS_POSIX_API)
- #define RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API
-#endif
-
-#if defined(RTEMS_DEBUG)
-#define RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT
-#endif
-
-/*
- * Only provided for backward compatiblity to not break application
- * configurations.
- */
-typedef void *Thread RTEMS_DEPRECATED;
-
-/**
- * @brief Type of the numeric argument of a thread entry function with at
- * least one numeric argument.
- *
- * This numeric argument type designates an unsigned integer type with the
- * property that any valid pointer to void can be converted to this type and
- * then converted back to a pointer to void. The result will compare equal to
- * the original pointer.
- */
-typedef CPU_Uint32ptr Thread_Entry_numeric_type;
-
-/**
- * @brief Data for idle thread entry.
- */
-typedef struct {
- void *( *entry )( uintptr_t argument );
-} Thread_Entry_idle;
-
-/**
- * @brief Data for thread entry with one numeric argument and no return value.
- */
-typedef struct {
- void ( *entry )( Thread_Entry_numeric_type argument );
- Thread_Entry_numeric_type argument;
-} Thread_Entry_numeric;
-
-/**
- * @brief Data for thread entry with one pointer argument and a pointer return
- * value.
- */
-typedef struct {
- void *( *entry )( void *argument );
- void *argument;
-} Thread_Entry_pointer;
-
-/**
- * @brief Thread entry information.
- */
-typedef struct {
- /**
- * @brief Thread entry adaptor.
- *
- * Calls the corresponding thread entry with the right parameters.
- *
- * @param executing The executing thread.
- */
- void ( *adaptor )( Thread_Control *executing );
-
- /**
- * @brief Thread entry data used by the adaptor to call the thread entry
- * function with the right parameters.
- */
- union {
- Thread_Entry_idle Idle;
- Thread_Entry_numeric Numeric;
- Thread_Entry_pointer Pointer;
- } Kinds;
-} Thread_Entry_information;
-
-/**
- * The following lists the algorithms used to manage the thread cpu budget.
- *
- * Reset Timeslice: At each context switch, reset the time quantum.
- * Exhaust Timeslice: Only reset the quantum once it is consumed.
- * Callout: Execute routine when budget is consumed.
- */
-typedef enum {
- THREAD_CPU_BUDGET_ALGORITHM_NONE,
- THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE,
- #if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
- THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE,
- #endif
- #if defined(RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT)
- THREAD_CPU_BUDGET_ALGORITHM_CALLOUT
- #endif
-} Thread_CPU_budget_algorithms;
-
-/** This defines thes the entry point for the thread specific timeslice
- * budget management algorithm.
- */
-typedef void (*Thread_CPU_budget_algorithm_callout )( Thread_Control * );
-
-/**
- * The following structure contains the information which defines
- * the starting state of a thread.
- */
-typedef struct {
- /** This field contains the thread entry information. */
- Thread_Entry_information Entry;
- /*-------------- initial execution modes ----------------- */
- /** This field indicates whether the thread was preemptible when
- * it started.
- */
- bool is_preemptible;
- /** This field indicates the CPU budget algorith. */
- Thread_CPU_budget_algorithms budget_algorithm;
- /** This field is the routine to invoke when the CPU allotment is
- * consumed.
- */
- Thread_CPU_budget_algorithm_callout budget_callout;
- /** This field is the initial ISR disable level of this thread. */
- uint32_t isr_level;
- /** This field is the initial priority. */
- Priority_Control initial_priority;
- #if defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API)
- /** This field indicates whether the SuperCore allocated the stack. */
- bool core_allocated_stack;
- #endif
- /** This field is the stack information. */
- Stack_Control Initial_stack;
- #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
- /** This field is the initial FP context area address. */
- Context_Control_fp *fp_context;
- #endif
- /** This field is the initial stack area address. */
- void *stack;
- /** The thread-local storage (TLS) area */
- void *tls_area;
-} Thread_Start_information;
-
-#if defined(RTEMS_SMP)
-/**
- * @brief The thread state with respect to the scheduler.
- */
-typedef enum {
- /**
- * @brief This thread is blocked with respect to the scheduler.
- *
- * This thread uses no scheduler nodes.
- */
- THREAD_SCHEDULER_BLOCKED,
-
- /**
- * @brief This thread is scheduled with respect to the scheduler.
- *
- * This thread executes using one of its scheduler nodes. This could be its
- * own scheduler node or in case it owns resources taking part in the
- * scheduler helping protocol a scheduler node of another thread.
- */
- THREAD_SCHEDULER_SCHEDULED,
-
- /**
- * @brief This thread is ready with respect to the scheduler.
- *
- * None of the scheduler nodes of this thread is scheduled.
- */
- THREAD_SCHEDULER_READY
-} Thread_Scheduler_state;
-#endif
-
-/**
- * @brief Thread scheduler control.
- */
-typedef struct {
-#if defined(RTEMS_SMP)
- /**
- * @brief Lock to protect the scheduler node change requests.
- */
- ISR_lock_Control Lock;
-
- /**
- * @brief The current scheduler state of this thread.
- */
- Thread_Scheduler_state state;
-
- /**
- * @brief The home scheduler control of this thread.
- */
- const struct _Scheduler_Control *home;
-
- /**
- * @brief The processor assigned by the current scheduler.
- */
- struct Per_CPU_Control *cpu;
-
- /**
- * @brief Scheduler nodes immediately available to the thread by its home
- * scheduler instance and due to thread queue ownerships.
- *
- * This chain is protected by the thread wait lock.
- *
- * This chain is never empty. The first scheduler node on the chain is the
- * scheduler node of the home scheduler instance.
- */
- Chain_Control Wait_nodes;
-
- /**
- * @brief Scheduler nodes immediately available to the schedulers for this
- * thread.
- *
- * This chain is protected by the thread state lock.
- *
- * This chain is never empty. The first scheduler node on the chain is the
- * scheduler node of the home scheduler instance.
- */
- Chain_Control Scheduler_nodes;
-
- /**
- * @brief Node for the Per_CPU_Control::Threads_in_need_for_help chain.
- *
- * This chain is protected by the Per_CPU_Control::Lock lock of the assigned
- * processor.
- */
- Chain_Node Help_node;
-
- /**
- * @brief Count of nodes scheduler nodes minus one.
- *
- * This chain is protected by the thread state lock.
- */
- size_t helping_nodes;
-
- /**
- * @brief List of pending scheduler node requests.
- *
- * This list is protected by the thread scheduler lock.
- */
- Scheduler_Node *requests;
-
- /**
- * @brief The thread processor affinity set.
- */
- Processor_mask Affinity;
-#endif
-
- /**
- * @brief The scheduler nodes of this thread.
- *
- * Each thread has a scheduler node for each scheduler instance.
- */
- Scheduler_Node *nodes;
-} Thread_Scheduler_control;
-
-/**
- * @brief Union type to hold a pointer to an immutable or a mutable object.
- *
- * The main purpose is to enable passing of pointers to read-only send buffers
- * in the message passing subsystem. This approach is somewhat fragile since
- * it prevents the compiler to check if the operations on objects are valid
- * with respect to the constant qualifier. An alternative would be to add a
- * third pointer argument for immutable objects, but this would increase the
- * structure size.
- */
-typedef union {
- void *mutable_object;
- const void *immutable_object;
-} Thread_Wait_information_Object_argument_type;
-
-/**
- * @brief This type is able to contain several flags used to control the wait
- * class and state of a thread.
- *
- * The mutually exclusive wait class flags are
- * - @ref THREAD_WAIT_CLASS_EVENT,
- * - @ref THREAD_WAIT_CLASS_SYSTEM_EVENT, and
- * - @ref THREAD_WAIT_CLASS_OBJECT.
- *
- * The mutually exclusive wait state flags are
- * - @ref THREAD_WAIT_STATE_INTEND_TO_BLOCK,
- * - @ref THREAD_WAIT_STATE_BLOCKED, and
- * - @ref THREAD_WAIT_STATE_READY_AGAIN.
- */
-typedef unsigned int Thread_Wait_flags;
-
-/**
- * @brief Information required to manage a thread while it is blocked.
- *
- * This contains the information required to manage a thread while it is
- * blocked and to return information to it.
- */
-typedef struct {
-#if defined(RTEMS_MULTIPROCESSING)
- /*
- * @brief This field is the identifier of the remote object this thread is
- * waiting upon.
- */
- Objects_Id remote_id;
-#endif
- /** This field is used to return an integer while when blocked. */
- uint32_t count;
- /** This field is for a pointer to a user return argument. */
- void *return_argument;
- /** This field is for a pointer to a second user return argument. */
- Thread_Wait_information_Object_argument_type
- return_argument_second;
- /** This field contains any options in effect on this blocking operation. */
- uint32_t option;
- /** This field will contain the return status from a blocking operation.
- *
- * @note The following assumes that all API return codes can be
- * treated as an uint32_t.
- */
- uint32_t return_code;
-
- /**
- * @brief This field contains several flags used to control the wait class
- * and state of a thread in case fine-grained locking is used.
- */
-#if defined(RTEMS_SMP)
- Atomic_Uint flags;
-#else
- Thread_Wait_flags flags;
-#endif
-
-#if defined(RTEMS_SMP)
- /**
- * @brief Thread wait lock control block.
- *
- * Parts of the thread wait information are protected by the thread wait
- * default lock and additionally a thread queue lock in case the thread
- * is enqueued on a thread queue.
- *
- * The thread wait lock mechanism protects the following thread variables
- * - POSIX_API_Control::Attributes,
- * - Scheduler_Node::Wait,
- * - Thread_Control::Wait::Lock::Pending_requests,
- * - Thread_Control::Wait::queue, and
- * - Thread_Control::Wait::operations.
- *
- * @see _Thread_Wait_acquire(), _Thread_Wait_release(), _Thread_Wait_claim(),
- * _Thread_Wait_restore_default() and _Thread_Wait_tranquilize().
- */
- struct {
- /**
- * @brief Thread wait default lock.
- */
- ISR_lock_Control Default;
-
- /**
- * @brief The pending thread wait lock acquire or tranquilize requests in
- * case the thread is enqueued on a thread queue.
- */
- Chain_Control Pending_requests;
-
- /**
- * @brief Tranquilizer gate used by _Thread_Wait_tranquilize().
- *
- * This gate is closed by _Thread_Wait_claim(). In case there are no
- * pending requests during a _Thread_Wait_restore_default(), then this gate
- * is opened immediately, otherwise it is placed on the pending request
- * chain and opened by _Thread_Wait_remove_request_locked() as the last
- * gate on the chain to signal overall request completion.
- */
- Thread_queue_Gate Tranquilizer;
- } Lock;
-
- /**
- * @brief Thread queue link provided for use by the thread wait lock owner to
- * build a thread queue path.
- */
- Thread_queue_Link Link;
-#endif
-
- /**
- * @brief The current thread queue.
- *
- * If this field is NULL the thread is not enqueued on a thread queue. This
- * field is protected by the thread wait default lock.
- *
- * @see _Thread_Wait_claim().
- */
- Thread_queue_Queue *queue;
-
- /**
- * @brief The current thread queue operations.
- *
- * This field is protected by the thread lock wait default lock.
- *
- * @see _Thread_Wait_claim().
- */
- const Thread_queue_Operations *operations;
-
- Thread_queue_Heads *spare_heads;
-} Thread_Wait_information;
-
-/**
- * @brief Information required to manage a thread timer.
- */
-typedef struct {
- ISR_LOCK_MEMBER( Lock )
- Watchdog_Header *header;
- Watchdog_Control Watchdog;
-} Thread_Timer_information;
-
-/**
- * The following defines the control block used to manage
- * each thread proxy.
- *
- * @note It is critical that proxies and threads have identical
- * memory images for the shared part.
- */
-typedef struct {
- /** This field is the object management structure for each proxy. */
- Objects_Control Object;
-
- /**
- * @see Thread_Control::Join_queue
- */
- Thread_queue_Control Join_queue;
-
- /** This field is the current execution state of this proxy. */
- States_Control current_state;
-
- /**
- * @brief The base priority of this thread in its home scheduler instance.
- */
- Priority_Node Real_priority;
-
-#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT)
- /** This field is the number of mutexes currently held by this proxy. */
- uint32_t resource_count;
-#endif
-
- /**
- * @brief Scheduler related control.
- */
- Thread_Scheduler_control Scheduler;
-
- /** This field is the blocking information for this proxy. */
- Thread_Wait_information Wait;
- /** This field is the Watchdog used to manage proxy delays and timeouts. */
- Thread_Timer_information Timer;
-#if defined(RTEMS_MULTIPROCESSING)
- /** This field is the received response packet in an MP system. */
- MP_packet_Prefix *receive_packet;
- /****************** end of common block ********************/
-
- /**
- * @brief Thread queue callout for _Thread_queue_Enqueue().
- */
- Thread_queue_MP_callout thread_queue_callout;
-
- /**
- * @brief This field is used to manage the set of active proxies in the system.
- */
- RBTree_Node Active;
-
- /**
- * @brief The scheduler node providing the thread wait nodes used to enqueue
- * this thread proxy on a thread queue.
- */
- Scheduler_Node Scheduler_node;
-
- /**
- * @brief Provide thread queue heads for this thread proxy.
- *
- * The actual size of the thread queue heads depends on the application
- * configuration. Since thread proxies are never destroyed we can use the
- * same storage place for the thread queue heads.
- */
- Thread_queue_Heads Thread_queue_heads[ RTEMS_ZERO_LENGTH_ARRAY ];
-#endif
-} Thread_Proxy_control;
-
-/**
- * The following record defines the control block used
- * to manage each thread.
- *
- * @note It is critical that proxies and threads have identical
- * memory images for the shared part.
- */
-typedef enum {
- /** This value is for the Classic RTEMS API. */
- THREAD_API_RTEMS,
- /** This value is for the POSIX API. */
- THREAD_API_POSIX
-} Thread_APIs;
-
-/** This macro defines the first API which has threads. */
-#define THREAD_API_FIRST THREAD_API_RTEMS
-
-/** This macro defines the last API which has threads. */
-#define THREAD_API_LAST THREAD_API_POSIX
-
-typedef struct Thread_Action Thread_Action;
-
-/**
- * @brief Thread action handler.
- *
- * The thread action handler will be called with interrupts disabled and a
- * corresponding lock acquired, e.g. _Thread_State_acquire(). The handler must
- * release the corresponding lock, e.g. _Thread_State_release(). So, the
- * corresponding lock may be used to protect private data used by the
- * particular action.
- *
- * Since the action is passed to the handler additional data may be accessed
- * via RTEMS_CONTAINER_OF().
- *
- * @param[in] the_thread The thread performing the action.
- * @param[in] action The thread action.
- * @param[in] lock_context The lock context to use for the lock release.
- */
-typedef void ( *Thread_Action_handler )(
- Thread_Control *the_thread,
- Thread_Action *action,
- ISR_lock_Context *lock_context
-);
-
-/**
- * @brief Thread action.
- *
- * Thread actions can be chained together to trigger a set of actions on
- * particular events like for example a thread post-switch. Use
- * _Thread_Action_initialize() to initialize this structure.
- *
- * Thread actions are the building block for efficient implementation of
- * - Classic signals delivery,
- * - POSIX signals delivery, and
- * - thread life-cycle changes.
- *
- * @see _Thread_Add_post_switch_action() and _Thread_Run_post_switch_actions().
- */
-struct Thread_Action {
- Chain_Node Node;
- Thread_Action_handler handler;
-};
-
-/**
- * @brief Per-thread information for POSIX Keys.
- */
-typedef struct {
- /**
- * @brief Key value pairs registered for this thread.
- */
- RBTree_Control Key_value_pairs;
-
- /**
- * @brief Lock to protect the tree operations.
- */
- ISR_LOCK_MEMBER( Lock )
-} Thread_Keys_information;
-
-/**
- * @brief Control block to manage thread actions.
- *
- * Use _Thread_Action_control_initialize() to initialize this structure.
- */
-typedef struct {
- Chain_Control Chain;
-} Thread_Action_control;
-
-/**
- * @brief Thread life states.
- *
- * The thread life states are orthogonal to the thread states used for
- * synchronization primitives and blocking operations. They reflect the state
- * changes triggered with thread restart and delete requests.
- *
- * The individual state values must be a power of two to allow use of bit
- * operations to manipulate and evaluate the thread life state.
- */
-typedef enum {
- THREAD_LIFE_PROTECTED = 0x1,
- THREAD_LIFE_RESTARTING = 0x2,
- THREAD_LIFE_TERMINATING = 0x4,
- THREAD_LIFE_CHANGE_DEFERRED = 0x8,
- THREAD_LIFE_DETACHED = 0x10
-} Thread_Life_state;
-
-/**
- * @brief Thread life control.
- */
-typedef struct {
- /**
- * @brief Thread life action used to react upon thread restart and delete
- * requests.
- */
- Thread_Action Action;
-
- /**
- * @brief The current thread life state.
- */
- Thread_Life_state state;
-
- /**
- * @brief The count of pending life change requests.
- */
- uint32_t pending_life_change_requests;
-
-#if defined(RTEMS_POSIX_API)
- /**
- * @brief The thread exit value.
- *
- * It is,
- * - the value passed to pthread_exit(), or
- * - PTHREAD_CANCELED in case it is cancelled via pthread_cancel(), or
- * - NULL.
- */
- void *exit_value;
-#endif
-} Thread_Life_control;
-
-typedef struct {
- uint32_t flags;
- void * control;
-}Thread_Capture_control;
-
-/**
- * This structure defines the Thread Control Block (TCB).
- *
- * Uses a leading underscore in the structure name to allow forward
- * declarations in standard header files provided by Newlib and GCC.
- *
- * In case the second member changes (currently Join_queue), then the memset()
- * in _Thread_Initialize() must be adjusted.
- */
-struct _Thread_Control {
- /** This field is the object management structure for each thread. */
- Objects_Control Object;
-
- /**
- * @brief Thread queue for thread join operations and multi-purpose lock.
- *
- * The lock of this thread queue is used for various purposes. It protects
- * the following fields
- *
- * - RTEMS_API_Control::Signal,
- * - Thread_Control::budget_algorithm,
- * - Thread_Control::budget_callout,
- * - Thread_Control::cpu_time_budget,
- * - Thread_Control::current_state,
- * - Thread_Control::Post_switch_actions,
- * - Thread_Control::Scheduler::control, and
- * - Thread_Control::Scheduler::own_control.
- *
- * @see _Thread_State_acquire().
- */
- Thread_queue_Control Join_queue;
-
- /** This field is the current execution state of this thread. */
- States_Control current_state;
-
- /**
- * @brief The base priority of this thread in its home scheduler instance.
- */
- Priority_Node Real_priority;
-
-#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT)
- /** This field is the number of mutexes currently held by this thread. */
- uint32_t resource_count;
-#endif
-
- /**
- * @brief Scheduler related control.
- */
- Thread_Scheduler_control Scheduler;
-
- /** This field is the blocking information for this thread. */
- Thread_Wait_information Wait;
- /** This field is the Watchdog used to manage thread delays and timeouts. */
- Thread_Timer_information Timer;
-#if defined(RTEMS_MULTIPROCESSING)
- /** This field is the received response packet in an MP system. */
- MP_packet_Prefix *receive_packet;
-#endif
- /*================= end of common block =================*/
-
-#if defined(RTEMS_SMP) && defined(RTEMS_PROFILING)
- /**
- * @brief Potpourri lock statistics.
- *
- * These SMP lock statistics are used for all lock objects that lack a
- * storage space for the statistics. Examples are lock objects used in
- * external libraries which are independent of the actual RTEMS build
- * configuration.
- */
- SMP_lock_Stats Potpourri_stats;
-#endif
-
- /** This field is true if the thread is an idle thread. */
- bool is_idle;
-#if defined(RTEMS_MULTIPROCESSING)
- /** This field is true if the thread is offered globally */
- bool is_global;
-#endif
- /** This field is true if the thread is preemptible. */
- bool is_preemptible;
- /** This field is true if the thread uses the floating point unit. */
- bool is_fp;
-
- /**
- * @brief True, if the thread was created with an inherited scheduler
- * (PTHREAD_INHERIT_SCHED), and false otherwise.
- */
- bool was_created_with_inherited_scheduler;
-
- /** This field is the length of the time quantum that this thread is
- * allowed to consume. The algorithm used to manage limits on CPU usage
- * is specified by budget_algorithm.
- */
- uint32_t cpu_time_budget;
- /** This field is the algorithm used to manage this thread's time
- * quantum. The algorithm may be specified as none which case,
- * no limit is in place.
- */
- Thread_CPU_budget_algorithms budget_algorithm;
- /** This field is the method invoked with the budgeted time is consumed. */
- Thread_CPU_budget_algorithm_callout budget_callout;
- /** This field is the amount of CPU time consumed by this thread
- * since it was created.
- */
- Timestamp_Control cpu_time_used;
-
- /** This field contains information about the starting state of
- * this thread.
- */
- Thread_Start_information Start;
-
- Thread_Action_control Post_switch_actions;
-
- /** This field contains the context of this thread. */
- Context_Control Registers;
-#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
- /** This field points to the floating point context for this thread.
- * If NULL, the thread is integer only.
- */
- Context_Control_fp *fp_context;
-#endif
- /** This field points to the newlib reentrancy structure for this thread. */
- struct _reent *libc_reent;
- /** This array contains the API extension area pointers. */
- void *API_Extensions[ THREAD_API_LAST + 1 ];
-
- /**
- * @brief The POSIX Keys information.
- */
- Thread_Keys_information Keys;
-
- /**
- * @brief Thread life-cycle control.
- *
- * Control state changes triggered by thread restart and delete requests.
- */
- Thread_Life_control Life;
-
- Thread_Capture_control Capture;
-
- /**
- * @brief LIFO list of POSIX cleanup contexts.
- */
- struct _pthread_cleanup_context *last_cleanup_context;
-
- /**
- * @brief LIFO list of user extensions iterators.
- */
- struct User_extensions_Iterator *last_user_extensions_iterator;
-
- /**
- * @brief Variable length array of user extension pointers.
- *
- * The length is defined by the application via <rtems/confdefs.h>.
- */
- void *extensions[ RTEMS_ZERO_LENGTH_ARRAY ];
-};
-
-#if (CPU_PROVIDES_IDLE_THREAD_BODY == FALSE)
-/**
- * This routine is the body of the system idle thread.
- *
- * NOTE: This routine is actually instantiated by confdefs.h when needed.
- */
-void *_Thread_Idle_body(
- uintptr_t ignored
-);
-#endif
-
-typedef void (*rtems_per_thread_routine)( Thread_Control * );
-
-/* Use rtems_task_iterate() instead */
-void rtems_iterate_over_all_threads(
- rtems_per_thread_routine routine
-) RTEMS_DEPRECATED;
-
-/**
- * @brief Thread control add-on.
- */
-typedef struct {
- /**
- * @brief Offset of the pointer field in Thread_Control referencing an
- * application configuration dependent memory area in the thread control
- * block.
- */
- size_t destination_offset;
-
- /**
- * @brief Offset relative to the thread control block begin to an application
- * configuration dependent memory area.
- */
- size_t source_offset;
-} Thread_Control_add_on;
-
-/**
- * @brief Thread control add-ons.
- *
- * The thread control block contains fields that point to application
- * configuration dependent memory areas, like the scheduler information, the
- * API control blocks, the user extension context table, and the Newlib
- * re-entrancy support. Account for these areas in the configuration and
- * avoid extra workspace allocations for these areas.
- *
- * This array is provided via <rtems/confdefs.h>.
- *
- * @see _Thread_Control_add_on_count and _Thread_Control_size.
- */
-extern const Thread_Control_add_on _Thread_Control_add_ons[];
-
-/**
- * @brief Thread control add-on count.
- *
- * Count of entries in _Thread_Control_add_ons.
- *
- * This value is provided via <rtems/confdefs.h>.
- */
-extern const size_t _Thread_Control_add_on_count;
-
-/**
- * @brief Size of the thread control block of a particular application.
- *
- * This value is provided via <rtems/confdefs.h>.
- *
- * @see _Thread_Control_add_ons.
- */
-extern const size_t _Thread_Control_size;
-
-/**
- * @brief Maximum size of a thread name in characters (including the
- * terminating '\0' character).
- *
- * This value is provided via <rtems/confdefs.h>.
- */
-extern const size_t _Thread_Maximum_name_size;
-
-/**@}*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-/* end of include file */