summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/userext.h
blob: 8215eb5f4504c02771fcabebd8d6f6e29e289c52 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
/** 
 *  @file userext.h
 *
 *  This include file contains all information about user extensions.  This
 *  Handler provides mechanisms which can be used to initialize and manipulate
 *  all user extensions.
 */

/*
 *  COPYRIGHT (c) 1989-2004.
 *  On-Line Applications Research Corporation (OAR).
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.com/license/LICENSE.
 *
 *  $Id$
 */

#ifndef __USER_EXTENSIONS_h
#define __USER_EXTENSIONS_h

/**
 *  @defgroup ScoreUserExt User Extension Handler
 *
 *  This group contains functionality which XXX
 */
/**@{*/

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/score/interr.h>
#include <rtems/score/chain.h>
#include <rtems/score/thread.h>

/** @defgroup ScoreUserExtStruct User Extension Handler Structures
 *
 *  The following records defines the User Extension Table.
 *  This table defines the application dependent routines which
 *  are invoked at critical points in the life of each thread and
 *  the system as a whole.
 */
/*@{*/

/**
 *  XXX
 */
typedef void User_extensions_routine;

/**
 *  XXX
 */
typedef boolean ( *User_extensions_thread_create_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_delete_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_start_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_restart_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_switch_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine (
                                *User_extensions_thread_post_switch_extension )(
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_begin_extension )(
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_exitted_extension )(
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_fatal_extension )(
                 Internal_errors_Source  /* the_source  */,
                 boolean                 /* is_internal */,
                 uint32_t                /* the_error   */
             );

/**
 *  XXX
 */
typedef struct {
  /** This field is XXX */
  User_extensions_thread_create_extension       thread_create;
  /** This field is XXX */
  User_extensions_thread_start_extension        thread_start;
  /** This field is XXX */
  User_extensions_thread_restart_extension      thread_restart;
  /** This field is XXX */
  User_extensions_thread_delete_extension       thread_delete;
  /** This field is XXX */
  User_extensions_thread_switch_extension       thread_switch;
  /** This field is XXX */
  User_extensions_thread_begin_extension        thread_begin;
  /** This field is XXX */
  User_extensions_thread_exitted_extension      thread_exitted;
  /** This field is XXX */
  User_extensions_fatal_extension               fatal;
}   User_extensions_Table;

/*@}*/

/**
 *  This is used to manage the list of switch handlers.
 */
typedef struct {
  /** This field is XXX */
  Chain_Node                              Node;
  /** This field is XXX */
  User_extensions_thread_switch_extension thread_switch;
}   User_extensions_Switch_control;

/**
 *  This is used to manage each user extension set.
 *  The switch control is part of the extensions control even
 *  if not used due to the extension not having a switch
 *  handler.
 */
typedef struct {
  /** This field is XXX */
  Chain_Node                     Node;
  /** This field is XXX */
  User_extensions_Switch_control Switch;
  /** This field is XXX */
  User_extensions_Table          Callouts;
}   User_extensions_Control;

/**
 *  This is used to manage the list of active extensions.
 */
SCORE_EXTERN Chain_Control _User_extensions_List;

/**
 *  This is used to manage a chain of user extension task
 *  switch nodes.
 */
SCORE_EXTERN Chain_Control _User_extensions_Switches_list;

/** @brief  User extensions Thread create
 *
 *  This routine is used to invoke the user extension for
 *  the thread creation operate.
 */
boolean _User_extensions_Thread_create (
  Thread_Control *the_thread
);

/** @brief  User extensions Thread delete
 *
 *  This routine is used to invoke the user extension for
 *  the thread deletion operation.
 */
void _User_extensions_Thread_delete (
  Thread_Control *the_thread
);

/** @brief  User extensions Thread start
 *
 *  This routine is used to invoke the user extension for
 *  the thread start operation.
 */
void _User_extensions_Thread_start (
  Thread_Control *the_thread
);

/** @brief  User extensions Thread restart
 *
 *  This routine is used to invoke the user extension for
 *  the thread restart operation.
 */
void _User_extensions_Thread_restart (
  Thread_Control *the_thread
);

/** @brief  User extensions Thread begin
 *
 *  This routine is used to invoke the user extension which
 *  is invoked when a thread begins.
 */
void _User_extensions_Thread_begin (
  Thread_Control *executing
);

/** @brief  User extensions Thread exitted
 *
 *  This routine is used to invoke the user extension which
 *  is invoked when a thread exits.
 */
void _User_extensions_Thread_exitted (
  Thread_Control *executing
);

/** @brief  User extensions Fatal
 *
 *  This routine is used to invoke the user extension invoked
 *  when a fatal error occurs.
 */
void _User_extensions_Fatal (
  Internal_errors_Source  the_source,
  boolean                 is_internal,
  uint32_t                the_error
);

#ifndef __RTEMS_APPLICATION__
#include <rtems/score/userext.inl>
#endif

#ifdef __cplusplus
}
#endif

/**@}*/

#endif
/* end of include file */