source: rtems/cpukit/score/macros/rtems/score/userext.inl @ 5072b07

4.104.114.84.95
Last change on this file since 5072b07 was ac7d5ef0, checked in by Joel Sherrill <joel.sherrill@…>, on 05/11/95 at 17:39:37

Initial revision

  • Property mode set to 100644
File size: 4.3 KB
Line 
1/*  userext.inl
2 *
3 *  This file contains the macro implementation of the inlined routines
4 *  from the User Extension Handler
5 *
6 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
7 *  On-Line Applications Research Corporation (OAR).
8 *  All rights assigned to U.S. Government, 1994.
9 *
10 *  This material may be reproduced by or for the U.S. Government pursuant
11 *  to the copyright license under the clause at DFARS 252.227-7013.  This
12 *  notice must appear in all copies of this file and its derivatives.
13 *
14 *  $Id$
15 */
16
17#ifndef __USER_EXTENSIONS_inl
18#define __USER_EXTENSIONS_inl
19
20/*PAGE
21 *
22 *  _User_extensions_Handler_initialization
23 *
24 */
25
26#define _User_extensions_Handler_initialization( _initial_extensions ) \
27  { \
28    _Chain_Initialize_empty( &_User_extensions_List ); \
29    \
30    if ( (_initial_extensions) ) { \
31      _User_extensions_Initial.Callouts = *(_initial_extensions); \
32      _Chain_Append( \
33        &_User_extensions_List, &_User_extensions_Initial.Node ); \
34    } \
35  }
36
37/*PAGE
38 *
39 *  _User_extensions_Add_set
40 */
41
42#define _User_extensions_Add_set( _the_extension, _extension_table ) \
43  { \
44    (_the_extension)->Callouts = *(_extension_table); \
45    \
46    _Chain_Append( &_User_extensions_List, &(_the_extension)->Node ); \
47  }
48
49/*PAGE
50 *
51 *  _User_extensions_Remove_set
52 */
53
54#define _User_extensions_Remove_set( _the_extension ) \
55  _Chain_Extract( &(_the_extension)->Node )
56
57/*PAGE
58 *
59 *  _User_extensions_Run_list_forward
60 *
61 *  NOTE:  No parentheses around macro names here to avoid
62 *         messing up the name and function call expansion.
63 */
64
65#define _User_extensions_Run_list_forward( _name, _arguments ) \
66  do { \
67    Chain_Node              *the_node; \
68    User_extensions_Control *the_extension; \
69    \
70    for ( the_node = _User_extensions_List.first ; \
71          !_Chain_Is_tail( &_User_extensions_List, the_node ) ; \
72          the_node = the_node->next ) { \
73      the_extension = (User_extensions_Control *) the_node; \
74      \
75      if ( the_extension->Callouts.## _name != NULL ) \
76        (*the_extension->Callouts.## _name) _arguments; \
77      \
78    } \
79    \
80  } while ( 0 )
81
82/*PAGE
83 *
84 *  _User_extensions_Run_list_backward
85 *
86 *  NOTE:  No parentheses around macro names here to avoid
87 *         messing up the name and function call expansion.
88 */
89
90#define _User_extensions_Run_list_backward( _name, _arguments ) \
91  do { \
92    Chain_Node              *the_node; \
93    User_extensions_Control *the_extension; \
94    \
95    for ( the_node = _User_extensions_List.last ; \
96          !_Chain_Is_head( &_User_extensions_List, the_node ) ; \
97          the_node = the_node->previous ) { \
98      the_extension = (User_extensions_Control *) the_node; \
99      \
100      if ( the_extension->Callouts.## _name != NULL ) \
101        (*the_extension->Callouts.## _name) _arguments; \
102      \
103    } \
104    \
105  } while ( 0 )
106
107/*PAGE
108 *
109 *  _User_extensions_Task_create
110 *
111 */
112
113#define _User_extensions_Task_create( _the_thread ) \
114  _User_extensions_Run_list_forward(rtems_task_create, \
115     (_Thread_Executing, _the_thread) )
116
117/*PAGE
118 *
119 *  _User_extensions_Task_delete
120 *
121 */
122
123#define _User_extensions_Task_delete( _the_thread ) \
124  _User_extensions_Run_list_backward(rtems_task_delete, \
125     (_Thread_Executing, _the_thread) )
126
127/*PAGE
128 *
129 *  _User_extensions_Task_start
130 *
131 */
132
133#define _User_extensions_Task_start( _the_thread ) \
134  _User_extensions_Run_list_forward(rtems_task_start, \
135     (_Thread_Executing, _the_thread) )
136
137/*PAGE
138 *
139 *  _User_extensions_Task_restart
140 *
141 */
142
143#define _User_extensions_Task_restart( _the_thread ) \
144  _User_extensions_Run_list_forward(rtems_task_restart,\
145      (_Thread_Executing, _the_thread) )
146
147/*PAGE
148 *
149 *  _User_extensions_Task_switch
150 *
151 */
152
153#define _User_extensions_Task_switch( _executing, _heir ) \
154  _User_extensions_Run_list_forward(task_switch, (_executing, _heir) )
155
156/*PAGE
157 *
158 *  _User_extensions_Task_begin
159 *
160 */
161
162#define _User_extensions_Task_begin( _executing ) \
163  _User_extensions_Run_list_forward(task_begin, (_executing) )
164
165/*PAGE
166 *
167 *  _User_extensions_Task_exitted
168 *
169 */
170
171#define _User_extensions_Task_exitted( _executing ) \
172  _User_extensions_Run_list_backward(task_exitted, (_executing) )
173
174/*PAGE
175 *
176 *  _User_extensions_Fatal
177 *
178 */
179
180#define _User_extensions_Fatal( _the_error ) \
181  _User_extensions_Run_list_backward(fatal, (_the_error) )
182
183#endif
184/* end of include file */
Note: See TracBrowser for help on using the repository browser.