00001
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _RTEMS_SCORE_USEREXT_H
00021 #define _RTEMS_SCORE_USEREXT_H
00022
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034
00035 #include <rtems/score/interr.h>
00036 #include <rtems/score/chain.h>
00037 #include <rtems/score/thread.h>
00038
00049
00053 typedef void User_extensions_routine;
00054
00059 typedef boolean ( *User_extensions_thread_create_extension )(
00060 Thread_Control *,
00061 Thread_Control *
00062 );
00063
00068 typedef User_extensions_routine ( *User_extensions_thread_delete_extension )(
00069 Thread_Control *,
00070 Thread_Control *
00071 );
00072
00077 typedef User_extensions_routine ( *User_extensions_thread_start_extension )(
00078 Thread_Control *,
00079 Thread_Control *
00080 );
00081
00086 typedef User_extensions_routine ( *User_extensions_thread_restart_extension )(
00087 Thread_Control *,
00088 Thread_Control *
00089 );
00090
00096 typedef User_extensions_routine ( *User_extensions_thread_switch_extension )(
00097 Thread_Control *,
00098 Thread_Control *
00099 );
00100
00105 typedef User_extensions_routine (*User_extensions_thread_post_switch_extension)(
00106 Thread_Control *
00107 );
00108
00114 typedef User_extensions_routine ( *User_extensions_thread_begin_extension )(
00115 Thread_Control *
00116 );
00117
00122 typedef User_extensions_routine ( *User_extensions_thread_exitted_extension )(
00123 Thread_Control *
00124 );
00125
00131 typedef User_extensions_routine ( *User_extensions_fatal_extension )(
00132 Internal_errors_Source ,
00133 boolean ,
00134 uint32_t
00135 );
00136
00140 typedef struct {
00142 User_extensions_thread_create_extension thread_create;
00144 User_extensions_thread_start_extension thread_start;
00146 User_extensions_thread_restart_extension thread_restart;
00148 User_extensions_thread_delete_extension thread_delete;
00150 User_extensions_thread_switch_extension thread_switch;
00152 User_extensions_thread_begin_extension thread_begin;
00154 User_extensions_thread_exitted_extension thread_exitted;
00156 User_extensions_fatal_extension fatal;
00157 } User_extensions_Table;
00158
00163 typedef struct {
00167 Chain_Node Node;
00169 User_extensions_thread_switch_extension thread_switch;
00170 } User_extensions_Switch_control;
00171
00178 typedef struct {
00182 Chain_Node Node;
00184 User_extensions_Switch_control Switch;
00186 User_extensions_Table Callouts;
00187 } User_extensions_Control;
00188
00192 SCORE_EXTERN Chain_Control _User_extensions_List;
00193
00198 SCORE_EXTERN Chain_Control _User_extensions_Switches_list;
00199
00204
00212 void _User_extensions_Handler_initialization (
00213 uint32_t number_of_extensions,
00214 User_extensions_Table *initial_extensions
00215 );
00216
00223 void _User_extensions_Add_API_set (
00224 User_extensions_Control *the_extension
00225 );
00226
00234 void _User_extensions_Add_set (
00235 User_extensions_Control *the_extension,
00236 User_extensions_Table *extension_table
00237 );
00238
00242 void _User_extensions_Remove_set (
00243 User_extensions_Control *the_extension
00244 );
00245
00256 boolean _User_extensions_Thread_create (
00257 Thread_Control *the_thread
00258 );
00259
00267 void _User_extensions_Thread_delete (
00268 Thread_Control *the_thread
00269 );
00270
00278 void _User_extensions_Thread_start (
00279 Thread_Control *the_thread
00280 );
00281
00289 void _User_extensions_Thread_restart (
00290 Thread_Control *the_thread
00291 );
00292
00300 void _User_extensions_Thread_begin (
00301 Thread_Control *executing
00302 );
00303
00304
00313 void _User_extensions_Thread_switch (
00314 Thread_Control *executing,
00315 Thread_Control *heir
00316 );
00317
00325 void _User_extensions_Thread_exitted (
00326 Thread_Control *executing
00327 );
00328
00338 void _User_extensions_Fatal (
00339 Internal_errors_Source the_source,
00340 boolean is_internal,
00341 uint32_t the_error
00342 );
00343
00344 #ifdef __cplusplus
00345 }
00346 #endif
00347
00350 #endif
00351