RTEMS: cpukit/include/rtems/score/thread.h Source File

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
thread.h
Go to the documentation of this file.
1
12/*
13 * COPYRIGHT (c) 1989-2014.
14 * On-Line Applications Research Corporation (OAR).
15 *
16 * Copyright (c) 2014, 2016 embedded brains GmbH.
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.org/license/LICENSE.
21 */
22
23#ifndef _RTEMS_SCORE_THREAD_H
24#define _RTEMS_SCORE_THREAD_H
25
26#include <rtems/score/atomic.h>
27#include <rtems/score/context.h>
28#if defined(RTEMS_MULTIPROCESSING)
29#include <rtems/score/mppkt.h>
30#endif
31#include <rtems/score/freechain.h>
32#include <rtems/score/isrlock.h>
33#include <rtems/score/objectdata.h>
34#include <rtems/score/priority.h>
35#include <rtems/score/schedulernode.h>
36#include <rtems/score/stack.h>
37#include <rtems/score/states.h>
38#include <rtems/score/threadq.h>
39#include <rtems/score/timestamp.h>
40#include <rtems/score/watchdog.h>
41
42#if defined(RTEMS_SMP)
43#include <rtems/score/processormask.h>
44#endif
45
46struct rtems_user_env_t;
47
48struct _pthread_cleanup_context;
49
50struct Per_CPU_Control;
51
52struct _Scheduler_Control;
53
54struct User_extensions_Iterator;
55
56#ifdef __cplusplus
57extern "C" {
58#endif
59
80#define RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE
81
82/*
83 * With the addition of the Constant Block Scheduler (CBS),
84 * this feature is needed even when POSIX is disabled.
85 */
86#define RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT
87
88#if defined(RTEMS_DEBUG)
89#define RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT
90#endif
91
92/*
93 * Only provided for backward compatiblity to not break application
94 * configurations.
95 */
96typedef void *Thread RTEMS_DEPRECATED;
97
107 typedef CPU_Uint32ptr Thread_Entry_numeric_type;
108
112 typedef struct {
113 void *( *entry )( uintptr_t argument );
114} Thread_Entry_idle;
115
119 typedef struct {
120 void ( *entry )( Thread_Entry_numeric_type argument );
121 Thread_Entry_numeric_type argument;
122} Thread_Entry_numeric;
123
128 typedef struct {
129 void *( *entry )( void *argument );
130 void *argument;
131} Thread_Entry_pointer;
132
136 typedef struct {
144 void ( *adaptor )( Thread_Control *executing );
145
150 union {
151 Thread_Entry_idle Idle;
152 Thread_Entry_numeric Numeric;
153 Thread_Entry_pointer Pointer;
154 } Kinds;
155} Thread_Entry_information;
156
164 typedef enum {
165 THREAD_CPU_BUDGET_ALGORITHM_NONE,
166 THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE,
167 #if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
168 THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE,
169 #endif
170 #if defined(RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT)
171 THREAD_CPU_BUDGET_ALGORITHM_CALLOUT
172 #endif
173} Thread_CPU_budget_algorithms;
174
178 typedef void (*Thread_CPU_budget_algorithm_callout )( Thread_Control * );
179
184 typedef struct {
186 Thread_Entry_information Entry;
187 /*-------------- initial execution modes ----------------- */
191 bool is_preemptible;
193 Thread_CPU_budget_algorithms budget_algorithm;
197 Thread_CPU_budget_algorithm_callout budget_callout;
199 uint32_t isr_level;
201 Priority_Control initial_priority;
206 void *allocated_stack;
208 Stack_Control Initial_stack;
209 #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
211 Context_Control_fp *fp_context;
212 #endif
214 void *tls_area;
215} Thread_Start_information;
216
217#if defined(RTEMS_SMP)
221typedef enum {
227 THREAD_SCHEDULER_BLOCKED,
228
236 THREAD_SCHEDULER_SCHEDULED,
237
243 THREAD_SCHEDULER_READY
244} Thread_Scheduler_state;
245#endif
246
250 typedef struct {
251#if defined(RTEMS_SMP)
255 ISR_lock_Control Lock;
256
260 Thread_Scheduler_state state;
261
265 const struct _Scheduler_Control *home_scheduler;
266
270 const struct _Scheduler_Control *pinned_scheduler;
271
275 struct Per_CPU_Control *cpu;
276
286 Chain_Control Wait_nodes;
287
301 Chain_Control Scheduler_nodes;
302
309 Chain_Node Help_node;
310
316 size_t helping_nodes;
317
323 Scheduler_Node *requests;
324
345 int pin_level;
346
350 Processor_mask Affinity;
351#endif
352
358 Scheduler_Node *nodes;
359} Thread_Scheduler_control;
360
371 typedef union {
372 void *mutable_object;
373 const void *immutable_object;
374} Thread_Wait_information_Object_argument_type;
375
390 typedef unsigned int Thread_Wait_flags;
391
398 typedef struct {
399#if defined(RTEMS_MULTIPROCESSING)
400 /*
401 * @brief This field is the identifier of the remote object this thread is
402 * waiting upon.
403 */
404 Objects_Id remote_id;
405#endif
407 uint32_t count;
409 void *return_argument;
411 Thread_Wait_information_Object_argument_type
412 return_argument_second;
414 uint32_t option;
420 uint32_t return_code;
421
426#if defined(RTEMS_SMP)
427 Atomic_Uint flags;
428#else
429 Thread_Wait_flags flags;
430#endif
431
432#if defined(RTEMS_SMP)
450 struct {
454 ISR_lock_Control Default;
455
460 Chain_Control Pending_requests;
461
471 Thread_queue_Gate Tranquilizer;
472 } Lock;
473
478 Thread_queue_Link Link;
479#endif
480
489 Thread_queue_Queue *queue;
490
498 const Thread_queue_Operations *operations;
499
500 Thread_queue_Heads *spare_heads;
501} Thread_Wait_information;
502
506 typedef struct {
507 ISR_LOCK_MEMBER( Lock )
508 Watchdog_Header *header;
509 Watchdog_Control Watchdog;
510} Thread_Timer_information;
511
519 typedef struct {
521 Objects_Control Object;
522
526 Thread_queue_Control Join_queue;
527
529 States_Control current_state;
530
534 Priority_Node Real_priority;
535
536#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT)
538 uint32_t resource_count;
539#endif
540
544 Thread_Scheduler_control Scheduler;
545
547 Thread_Wait_information Wait;
549 Thread_Timer_information Timer;
550#if defined(RTEMS_MULTIPROCESSING)
552 MP_packet_Prefix *receive_packet;
553 /****************** end of common block ********************/
554
558 Thread_queue_MP_callout thread_queue_callout;
559
563 RBTree_Node Active;
564
569 Scheduler_Node Scheduler_node;
570
578 Thread_queue_Heads Thread_queue_heads[ RTEMS_ZERO_LENGTH_ARRAY ];
579#endif
580} Thread_Proxy_control;
581
589 typedef enum {
591 THREAD_API_RTEMS,
593 THREAD_API_POSIX
594} Thread_APIs;
595
597#define THREAD_API_FIRST THREAD_API_RTEMS
598
600#define THREAD_API_LAST THREAD_API_POSIX
601
602typedef struct Thread_Action Thread_Action;
603
620 typedef void ( *Thread_Action_handler )(
621 Thread_Control *the_thread,
622 Thread_Action *action,
623 ISR_lock_Context *lock_context
624);
625
640 struct Thread_Action {
641 Chain_Node Node;
642 Thread_Action_handler handler;
643};
644
648 typedef struct {
652 RBTree_Control Key_value_pairs;
653
657 ISR_LOCK_MEMBER( Lock )
658} Thread_Keys_information;
659
665 typedef struct {
666 Chain_Control Chain;
667} Thread_Action_control;
668
679 typedef enum {
680 THREAD_LIFE_PROTECTED = 0x1,
681 THREAD_LIFE_RESTARTING = 0x2,
682 THREAD_LIFE_TERMINATING = 0x4,
683 THREAD_LIFE_CHANGE_DEFERRED = 0x8,
684 THREAD_LIFE_DETACHED = 0x10
685} Thread_Life_state;
686
690 typedef struct {
695 Thread_Action Action;
696
700 Thread_Life_state state;
701
705 uint32_t pending_life_change_requests;
706
715 void *exit_value;
716} Thread_Life_control;
717
718 typedef struct {
719 uint32_t flags;
720 void * control;
721}Thread_Capture_control;
722
732 struct _Thread_Control {
734 Objects_Control Object;
735
753 Thread_queue_Control Join_queue;
754
756 States_Control current_state;
757
761 Priority_Node Real_priority;
762
763#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT)
765 uint32_t resource_count;
766#endif
767
771 Thread_Scheduler_control Scheduler;
772
774 Thread_Wait_information Wait;
776 Thread_Timer_information Timer;
777#if defined(RTEMS_MULTIPROCESSING)
779 MP_packet_Prefix *receive_packet;
780#endif
781 /*================= end of common block =================*/
782
783#if defined(RTEMS_SMP) && defined(RTEMS_PROFILING)
792 SMP_lock_Stats Potpourri_stats;
793#endif
794
796 bool is_idle;
797#if defined(RTEMS_MULTIPROCESSING)
799 bool is_global;
800#endif
802 bool is_preemptible;
804 bool is_fp;
805
810 bool was_created_with_inherited_scheduler;
811
816 uint32_t cpu_time_budget;
821 Thread_CPU_budget_algorithms budget_algorithm;
823 Thread_CPU_budget_algorithm_callout budget_callout;
827 Timestamp_Control cpu_time_used;
828
832 Thread_Start_information Start;
833
834 Thread_Action_control Post_switch_actions;
835
837 Context_Control Registers;
838#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
842 Context_Control_fp *fp_context;
843#endif
845 struct _reent *libc_reent;
847 void *API_Extensions[ THREAD_API_LAST + 1 ];
848
852 Thread_Keys_information Keys;
853
859 Thread_Life_control Life;
860
861 Thread_Capture_control Capture;
862
866 struct rtems_user_env_t *user_environment;
867
871 struct _pthread_cleanup_context *last_cleanup_context;
872
876 struct User_extensions_Iterator *last_user_extensions_iterator;
877
883 void *extensions[ RTEMS_ZERO_LENGTH_ARRAY ];
884};
885
886typedef void (*rtems_per_thread_routine)( Thread_Control * );
887
893void rtems_iterate_over_all_threads(
894 rtems_per_thread_routine routine
895) RTEMS_DEPRECATED;
896
900 typedef struct {
906 size_t destination_offset;
907
912 size_t source_offset;
913} Thread_Control_add_on;
914
928extern const Thread_Control_add_on _Thread_Control_add_ons[];
929
937extern const size_t _Thread_Control_add_on_count;
938
944extern const size_t _Thread_Initial_thread_count;
945
953#define THREAD_DEFAULT_MAXIMUM_NAME_SIZE 16
954
961extern const size_t _Thread_Maximum_name_size;
962
969 typedef struct Thread_Configured_control Thread_Configured_control;
970
977#if defined(RTEMS_SMP)
978typedef struct Thread_queue_Configured_heads Thread_queue_Configured_heads;
979#else
980 typedef Thread_queue_Heads Thread_queue_Configured_heads;
981#endif
982
988#if defined(RTEMS_SMP)
989extern const size_t _Thread_queue_Heads_size;
990#else
991#define _Thread_queue_Heads_size sizeof(Thread_queue_Heads)
992#endif
993
997 typedef struct {
1001 Objects_Information Objects;
1002
1006 union {
1012 Thread_queue_Configured_heads *initial;
1013
1019 Freechain_Control Free;
1020 } Thread_queue_heads;
1021} Thread_Information;
1022
1026extern Thread_Information _Thread_Information;
1027
1028#define THREAD_INFORMATION_DEFINE_ZERO( name, api, cls ) \
1029Thread_Information name##_Information = { \
1030 { \
1031 _Objects_Build_id( api, cls, 1, 0 ), \
1032 NULL, \
1033 _Objects_Allocate_none, \
1034 NULL, \
1035 0, \
1036 0, \
1037 0, \
1038 0, \
1039 CHAIN_INITIALIZER_EMPTY( name##_Information.Objects.Inactive ), \
1040 NULL, \
1041 NULL, \
1042 NULL \
1043 OBJECTS_INFORMATION_MP( name##_Information.Objects, NULL ), \
1044 }, { \
1045 NULL \
1046 } \
1047}
1048
1055 Objects_Control *_Thread_Allocate_unlimited( Objects_Information *information );
1056
1057#define THREAD_INFORMATION_DEFINE( name, api, cls, max ) \
1058static Objects_Control * \
1059name##_Local_table[ _Objects_Maximum_per_allocation( max ) ]; \
1060static Thread_Configured_control \
1061name##_Objects[ _Objects_Maximum_per_allocation( max ) ]; \
1062static Thread_queue_Configured_heads \
1063name##_Heads[ _Objects_Maximum_per_allocation( max ) ]; \
1064Thread_Information name##_Information = { \
1065 { \
1066 _Objects_Build_id( api, cls, 1, _Objects_Maximum_per_allocation( max ) ), \
1067 name##_Local_table, \
1068 _Objects_Is_unlimited( max ) ? \
1069 _Thread_Allocate_unlimited : _Objects_Allocate_static, \
1070 _Objects_Is_unlimited( max ) ? \
1071 _Objects_Free_unlimited : _Objects_Free_static, \
1072 0, \
1073 _Objects_Is_unlimited( max ) ? _Objects_Maximum_per_allocation( max ) : 0, \
1074 sizeof( Thread_Configured_control ), \
1075 OBJECTS_NO_STRING_NAME, \
1076 CHAIN_INITIALIZER_EMPTY( name##_Information.Objects.Inactive ), \
1077 NULL, \
1078 NULL, \
1079 &name##_Objects[ 0 ].Control.Object \
1080 OBJECTS_INFORMATION_MP( name##_Information.Objects, NULL ) \
1081 }, { \
1082 &name##_Heads[ 0 ] \
1083 } \
1084}
1085
1091extern char _Thread_Idle_stacks[];
1092
1093#if defined(RTEMS_MULTIPROCESSING)
1100typedef struct Thread_Configured_proxy_control Thread_Configured_proxy_control;
1101
1107extern Thread_Configured_proxy_control * const _Thread_MP_Proxies;
1108#endif
1109
1112#ifdef __cplusplus
1113}
1114#endif
1115
1116#endif
1117/* end of include file */
context.h
Information About Each Thread's Context.
stack.h
Information About the Thread Stack Handler.
watchdog.h
Constants and Structures Associated with Watchdog Timers.
freechain.h
Freechain Handler API.
RTEMS_DEPRECATED
#define RTEMS_DEPRECATED
Public name for task floating point context area.
Definition: basedefs.h:141
CPU_Uint32ptr
uintptr_t CPU_Uint32ptr
Definition: cpu.h:662
ISR_LOCK_MEMBER
#define ISR_LOCK_MEMBER(_designator)
Defines an ISR lock member.
Definition: isrlock.h:89
Objects_Id
uint32_t Objects_Id
Definition: object.h:80
Priority_Control
uint64_t Priority_Control
The thread priority control.
Definition: priority.h:70
States_Control
uint32_t States_Control
Definition: states.h:46
Thread_Life_state
Thread_Life_state
Thread life states.
Definition: thread.h:679
_Thread_Initial_thread_count
const size_t _Thread_Initial_thread_count
Count of configured threads.
_Thread_Information
Thread_Information _Thread_Information
The internal thread objects information.
Thread_CPU_budget_algorithm_callout
void(* Thread_CPU_budget_algorithm_callout)(Thread_Control *)
Definition: thread.h:178
_Thread_queue_Heads_size
#define _Thread_queue_Heads_size
Size of the thread queue heads of a particular application.
Definition: thread.h:991
rtems_iterate_over_all_threads
void rtems_iterate_over_all_threads(rtems_per_thread_routine routine) RTEMS_DEPRECATED
Deprecated, use rtems_task_iterate() instead.
Definition: iterateoverthreads.c:36
_Thread_Control_add_ons
const Thread_Control_add_on _Thread_Control_add_ons[]
Thread control add-ons.
_Thread_Control_add_on_count
const size_t _Thread_Control_add_on_count
Thread control add-on count.
Thread_Wait_flags
unsigned int Thread_Wait_flags
This type is able to contain several flags used to control the wait class and state of a thread.
Definition: thread.h:390
Thread_Action_handler
void(* Thread_Action_handler)(Thread_Control *the_thread, Thread_Action *action, ISR_lock_Context *lock_context)
Thread action handler.
Definition: thread.h:620
Thread_Entry_numeric_type
CPU_Uint32ptr Thread_Entry_numeric_type
Type of the numeric argument of a thread entry function with at least one numeric argument.
Definition: thread.h:107
Thread_CPU_budget_algorithms
Thread_CPU_budget_algorithms
Definition: thread.h:164
_Thread_Allocate_unlimited
Objects_Control * _Thread_Allocate_unlimited(Objects_Information *information)
Return an inactive thread object or NULL.
Definition: threadallocateunlimited.c:66
Thread_queue_Configured_heads
Thread_queue_Heads Thread_queue_Configured_heads
The configured thread queue heads.
Definition: thread.h:980
_Thread_Idle_stacks
char _Thread_Idle_stacks[]
The idle thread stacks.
Thread_Configured_control
struct Thread_Configured_control Thread_Configured_control
The configured thread control block.
Definition: thread.h:969
_Thread_Maximum_name_size
const size_t _Thread_Maximum_name_size
Maximum size of a thread name in characters (including the terminating '\0' character).
THREAD_API_LAST
#define THREAD_API_LAST
Definition: thread.h:600
Thread_APIs
Thread_APIs
Definition: thread.h:589
THREAD_API_POSIX
@ THREAD_API_POSIX
Definition: thread.h:593
THREAD_API_RTEMS
@ THREAD_API_RTEMS
Definition: thread.h:591
Timestamp_Control
int64_t Timestamp_Control
Definition: timestamp.h:57
atomic.h
Atomic Operations API.
isrlock.h
ISR Locks.
mppkt.h
Specification for the Packet Handler.
objectdata.h
Object Handler Data Structures.
processormask.h
Processor Mask API.
priority.h
Priority Handler API.
schedulernode.h
Handles Scheduler Nodes.
states.h
Thread Execution State Information.
Chain_Node_struct
Definition: chain.h:68
Context_Control_fp
SPARC basic context.
Definition: cpu.h:194
Context_Control
Thread register context.
Definition: cpu.h:194
Freechain_Control
The freechain control.
Definition: freechain.h:48
ISR_lock_Context
Local ISR lock context for acquire and release pairs.
Definition: isrlock.h:65
ISR_lock_Control
ISR lock control.
Definition: isrlock.h:56
MP_packet_Prefix
Definition: mppkt.h:85
Objects_Control
Definition: objectdata.h:39
Objects_Information
The information structure used to manage each API class of objects.
Definition: objectdata.h:176
Per_CPU_Control
Per CPU Core Structure.
Definition: percpu.h:347
Priority_Node
The priority node to build up a priority aggregation.
Definition: priority.h:98
RBTree_Node
Red-black tree node.
Definition: rbtree.h:55
Scheduler_Node
Scheduler node for per-thread data.
Definition: schedulernode.h:79
Stack_Control
Definition: stack.h:53
Thread_Action_control
Control block to manage thread actions.
Definition: thread.h:665
Thread_Action
Thread action.
Definition: thread.h:640
Thread_Capture_control
Definition: thread.h:718
Thread_Control_add_on
Thread control add-on.
Definition: thread.h:900
Thread_Control_add_on::source_offset
size_t source_offset
Offset relative to the thread control block begin to an application configuration dependent memory ar...
Definition: thread.h:912
Thread_Control_add_on::destination_offset
size_t destination_offset
Offset of the pointer field in Thread_Control referencing an application configuration dependent memo...
Definition: thread.h:906
Thread_Entry_idle
Data for idle thread entry.
Definition: thread.h:112
Thread_Entry_information
Thread entry information.
Definition: thread.h:136
Thread_Entry_numeric
Data for thread entry with one numeric argument and no return value.
Definition: thread.h:119
Thread_Entry_pointer
Data for thread entry with one pointer argument and a pointer return value.
Definition: thread.h:128
Thread_Information
The thread object information.
Definition: thread.h:997
Thread_Information::Free
Freechain_Control Free
The free thread queue heads.
Definition: thread.h:1019
Thread_Information::Objects
Objects_Information Objects
The object information.
Definition: thread.h:1001
Thread_Information::initial
Thread_queue_Configured_heads * initial
Contains the initial set of thread queue heads.
Definition: thread.h:1012
Thread_Keys_information
Per-thread information for POSIX Keys.
Definition: thread.h:648
Thread_Keys_information::Key_value_pairs
RBTree_Control Key_value_pairs
Key value pairs registered for this thread.
Definition: thread.h:652
Thread_Life_control
Thread life control.
Definition: thread.h:690
Thread_Life_control::pending_life_change_requests
uint32_t pending_life_change_requests
The count of pending life change requests.
Definition: thread.h:705
Thread_Life_control::Action
Thread_Action Action
Thread life action used to react upon thread restart and delete requests.
Definition: thread.h:695
Thread_Life_control::state
Thread_Life_state state
The current thread life state.
Definition: thread.h:700
Thread_Life_control::exit_value
void * exit_value
The thread exit value.
Definition: thread.h:715
Thread_Proxy_control
Definition: thread.h:519
Thread_Proxy_control::current_state
States_Control current_state
Definition: thread.h:529
Thread_Proxy_control::Object
Objects_Control Object
Definition: thread.h:521
Thread_Proxy_control::Real_priority
Priority_Node Real_priority
The base priority of this thread in its home scheduler instance.
Definition: thread.h:534
Thread_Proxy_control::Timer
Thread_Timer_information Timer
Definition: thread.h:549
Thread_Proxy_control::Wait
Thread_Wait_information Wait
Definition: thread.h:547
Thread_Proxy_control::Scheduler
Thread_Scheduler_control Scheduler
Scheduler related control.
Definition: thread.h:544
Thread_Proxy_control::Join_queue
Thread_queue_Control Join_queue
Definition: thread.h:526
Thread_Scheduler_control
Thread scheduler control.
Definition: thread.h:250
Thread_Scheduler_control::nodes
Scheduler_Node * nodes
The scheduler nodes of this thread.
Definition: thread.h:358
Thread_Start_information
Definition: thread.h:184
Thread_Start_information::Initial_stack
Stack_Control Initial_stack
Definition: thread.h:208
Thread_Start_information::budget_callout
Thread_CPU_budget_algorithm_callout budget_callout
Definition: thread.h:197
Thread_Start_information::is_preemptible
bool is_preemptible
Definition: thread.h:191
Thread_Start_information::Entry
Thread_Entry_information Entry
Definition: thread.h:186
Thread_Start_information::tls_area
void * tls_area
Definition: thread.h:214
Thread_Start_information::isr_level
uint32_t isr_level
Definition: thread.h:199
Thread_Start_information::allocated_stack
void * allocated_stack
This field is a pointer to the allocated stack area, otherwise it is NULL.
Definition: thread.h:206
Thread_Start_information::budget_algorithm
Thread_CPU_budget_algorithms budget_algorithm
Definition: thread.h:193
Thread_Start_information::initial_priority
Priority_Control initial_priority
Definition: thread.h:201
Thread_Start_information::fp_context
Context_Control_fp * fp_context
Definition: thread.h:211
Thread_Timer_information
Information required to manage a thread timer.
Definition: thread.h:506
Thread_Wait_information
Information required to manage a thread while it is blocked.
Definition: thread.h:398
Thread_Wait_information::queue
Thread_queue_Queue * queue
The current thread queue.
Definition: thread.h:489
Thread_Wait_information::count
uint32_t count
Definition: thread.h:407
Thread_Wait_information::option
uint32_t option
Definition: thread.h:414
Thread_Wait_information::flags
Thread_Wait_flags flags
This field contains several flags used to control the wait class and state of a thread in case fine-g...
Definition: thread.h:429
Thread_Wait_information::return_argument_second
Thread_Wait_information_Object_argument_type return_argument_second
Definition: thread.h:412
Thread_Wait_information::operations
const Thread_queue_Operations * operations
The current thread queue operations.
Definition: thread.h:498
Thread_Wait_information::return_code
uint32_t return_code
Definition: thread.h:420
Thread_Wait_information::return_argument
void * return_argument
Definition: thread.h:409
Thread_queue_Control
Definition: threadq.h:553
Thread_queue_Operations
Thread queue operations.
Definition: threadq.h:518
Thread_queue_Queue
Definition: threadq.h:402
User_extensions_Iterator
Chain iterator for dynamic user extensions.
Definition: userextimpl.h:46
Watchdog_Control
The control block used to manage each watchdog timer.
Definition: watchdog.h:90
Watchdog_Header
The watchdog header to manage scheduled watchdogs.
Definition: watchdog.h:71
_Scheduler_Control
Scheduler control.
Definition: scheduler.h:269
_Thread_Control
Definition: thread.h:732
_Thread_Control::Registers
Context_Control Registers
Definition: thread.h:837
_Thread_Control::Object
Objects_Control Object
Definition: thread.h:734
_Thread_Control::last_user_extensions_iterator
struct User_extensions_Iterator * last_user_extensions_iterator
LIFO list of user extensions iterators.
Definition: thread.h:876
_Thread_Control::cpu_time_used
Timestamp_Control cpu_time_used
Definition: thread.h:827
_Thread_Control::Wait
Thread_Wait_information Wait
Definition: thread.h:774
_Thread_Control::fp_context
Context_Control_fp * fp_context
Definition: thread.h:842
_Thread_Control::Real_priority
Priority_Node Real_priority
The base priority of this thread in its home scheduler instance.
Definition: thread.h:761
_Thread_Control::cpu_time_budget
uint32_t cpu_time_budget
Definition: thread.h:816
_Thread_Control::Keys
Thread_Keys_information Keys
The POSIX Keys information.
Definition: thread.h:852
_Thread_Control::current_state
States_Control current_state
Definition: thread.h:756
_Thread_Control::is_fp
bool is_fp
Definition: thread.h:804
_Thread_Control::Scheduler
Thread_Scheduler_control Scheduler
Scheduler related control.
Definition: thread.h:771
_Thread_Control::Join_queue
Thread_queue_Control Join_queue
Thread queue for thread join operations and multi-purpose lock.
Definition: thread.h:753
_Thread_Control::API_Extensions
void * API_Extensions[THREAD_API_LAST+1]
Definition: thread.h:847
_Thread_Control::Timer
Thread_Timer_information Timer
Definition: thread.h:776
_Thread_Control::Life
Thread_Life_control Life
Thread life-cycle control.
Definition: thread.h:859
_Thread_Control::was_created_with_inherited_scheduler
bool was_created_with_inherited_scheduler
True, if the thread was created with an inherited scheduler (PTHREAD_INHERIT_SCHED),...
Definition: thread.h:810
_Thread_Control::last_cleanup_context
struct _pthread_cleanup_context * last_cleanup_context
LIFO list of POSIX cleanup contexts.
Definition: thread.h:871
_Thread_Control::is_preemptible
bool is_preemptible
Definition: thread.h:802
_Thread_Control::Start
Thread_Start_information Start
Definition: thread.h:832
_Thread_Control::extensions
void * extensions[RTEMS_ZERO_LENGTH_ARRAY]
Variable length array of user extension pointers.
Definition: thread.h:883
_Thread_Control::is_idle
bool is_idle
Definition: thread.h:796
_Thread_Control::user_environment
struct rtems_user_env_t * user_environment
Pointer to an optional thread-specific POSIX user environment.
Definition: thread.h:866
_Thread_Control::libc_reent
struct _reent * libc_reent
Definition: thread.h:845
_Thread_Control::budget_callout
Thread_CPU_budget_algorithm_callout budget_callout
Definition: thread.h:823
_Thread_Control::budget_algorithm
Thread_CPU_budget_algorithms budget_algorithm
Definition: thread.h:821
_Thread_queue_Heads
Thread queue heads.
Definition: threadq.h:360
control
Definition: intercom.c:74
entry
Definition: mmu-config.c:40
rtems_user_env_t
User environment.
Definition: userenv.h:61
threadq.h
Constants and Structures Needed to Declare a Thread Queue.
timestamp.h
Helpers for Manipulating Timestamps.
Chain_Control
Definition: chain.h:86
Thread_Wait_information_Object_argument_type
Union type to hold a pointer to an immutable or a mutable object.
Definition: thread.h:371