source: UsbWattMeter/trunk/asp_dcre/kernel/time_event.c@ 164

Last change on this file since 164 was 164, checked in by coas-nagasima, 6 years ago

TOPPERS/ECNLサンプルアプリ「USB充電器電力計」を追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 9.4 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2013 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
12 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
13 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
14 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
15 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
16 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
17 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
18 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
19ƒƒ“ƒgi—˜—p
20 * ŽÒƒ}ƒjƒ…
21ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
22 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
23 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
24 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
25 * ‚ƁD
26 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
27ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
28ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
29 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
30 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
31 * •ñ‚·‚邱‚ƁD
32 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
33 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
34 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
35 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
36 * –Ɛӂ·‚邱‚ƁD
37 *
38 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
39 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
40 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
41 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
42 * ‚̐ӔC‚𕉂í‚È‚¢D
43 *
44 * $Id: time_event.c 164 2016-03-07 11:33:50Z coas-nagasima $
45 */
46
47/*
48 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—ƒ‚ƒWƒ…
49[ƒ‹
50 */
51
52#include "kernel_impl.h"
53#include "time_event.h"
54
55/*
56 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‘€ìƒ}ƒNƒ
57 */
58#define PARENT(index) ((index) >> 1) /* eƒm[ƒh‚ð‹‚ß‚é */
59#define LCHILD(index) ((index) << 1) /* ¶‚ÌŽqƒm[ƒh‚ð‹‚ß‚é */
60#define TMEVT_NODE(index) (tmevt_heap[(index) - 1])
61
62/*
63 * ƒCƒxƒ“ƒg”­¶Žž”äŠrƒ}ƒNƒ
64 *
65 * ƒCƒxƒ“ƒg”­¶Žž‚́Cmin_time‚©‚ç‚Ì‘Š‘Î’l‚Å”äŠr‚·‚éD‚·‚È‚í‚¿C
66 * min_time‚ðÅ¬’liÅ‚à‹ß‚¢ŽžjCmit_time-1‚ªÅ‘å’liÅ‚à‰“‚¢Žžj
67 * ‚Æ‚Ý‚È‚µ‚Ä”äŠr‚·‚éD
68 */
69#define EVTTIM_LT(t1, t2) (((t1) - min_time) < ((t2) - min_time))
70#define EVTTIM_LE(t1, t2) (((t1) - min_time) <= ((t2) - min_time))
71
72#ifdef TOPPERS_tmeini
73
74/*
75 * Œ»Ý‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
76 *
77 * Œµ–§‚ɂ́C‘O‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€ŽžD
78 */
79EVTTIM current_time;
80
81/*
82 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv’†‚Å—LŒø‚ȍŏ¬‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
83 */
84EVTTIM min_time;
85
86/*
87 * ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
88 */
89EVTTIM next_time;
90
91/*
92 * ƒVƒXƒeƒ€ŽžÏŽZ—p•Ï”i’PˆÊ: 1/TIC_DENOƒ~ƒŠ•bj
93 */
94#if TIC_DENO != 1U
95uint_t next_subtime;
96#endif /* TIC_DENO != 1U */
97
98/*
99 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚̍Ōã‚ÌŽg—p—̈æ‚̃Cƒ“ƒfƒbƒNƒX
100 */
101uint_t last_index;
102
103/*
104 * ƒ^ƒCƒ}ƒ‚ƒWƒ…
105[ƒ‹‚̏‰Šú‰»
106 */
107void
108initialize_tmevt(void)
109{
110 current_time = 0U;
111 min_time = 0U;
112 next_time = current_time + TIC_NUME / TIC_DENO;
113#if TIC_DENO != 1U
114 next_subtime = TIC_NUME % TIC_DENO;
115#endif /* TIC_DENO != 1U */
116 last_index = 0U;
117}
118
119#endif /* TOPPERS_tmeini */
120
121/*
122 * ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ì‘}“üˆÊ’u‚ðãŒü‚«‚É’Tõ
123 *
124 * Žžtime‚É”­¶‚·‚éƒ^ƒCƒ€ƒCƒxƒ“ƒg‚ð‘}“ü‚·‚éƒm[ƒh‚ð‹ó‚¯‚邽‚߂ɁC
125 * ƒq[ƒv‚̏ã‚ÉŒü‚©‚Á‚Ä‹óƒm[ƒh‚ðˆÚ“®‚³‚¹‚éDˆÚ“®‘O‚Ì‹óƒm[ƒh‚̈ʒu‚ð
126 * index‚É“n‚·‚ƁCˆÚ“®Œã‚Ì‹óƒm[ƒh‚̈ʒui‚·‚È‚í‚¿‘}“üˆÊ’uj‚ð•Ô‚·D
127 */
128#ifdef TOPPERS_tmeup
129
130uint_t
131tmevt_up(uint_t index, EVTTIM time)
132{
133 uint_t parent;
134
135 while (index > 1) {
136 /*
137 * eƒm[ƒh‚̃Cƒxƒ“ƒg”­¶Žž‚Ì•û‚ª‘‚¢i‚Ü‚½‚Í“¯‚¶j‚È‚ç‚΁C
138 * index‚ª‘}“üˆÊ’u‚Ȃ̂Ń‹[ƒv‚𔲂¯‚éD
139 */
140 parent = PARENT(index);
141 if (EVTTIM_LE(TMEVT_NODE(parent).time, time)) {
142 break;
143 }
144
145 /*
146 * eƒm[ƒh‚ðindex‚̈ʒu‚Ɉړ®‚³‚¹‚éD
147 */
148 TMEVT_NODE(index) = TMEVT_NODE(parent);
149 TMEVT_NODE(index).p_tmevtb->index = index;
150
151 /*
152 * index‚ðeƒm[ƒh‚̈ʒu‚ɍXVD
153 */
154 index = parent;
155 }
156 return(index);
157}
158
159#endif /* TOPPERS_tmeup */
160
161/*
162 * ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ì‘}“üˆÊ’u‚ð‰ºŒü‚«‚É’Tõ
163 *
164 * Žžtime‚É”­¶‚·‚éƒ^ƒCƒ€ƒCƒxƒ“ƒg‚ð‘}“ü‚·‚éƒm[ƒh‚ð‹ó‚¯‚邽‚߂ɁC
165 * ƒq[ƒv‚̉º‚ÉŒü‚©‚Á‚Ä‹óƒm[ƒh‚ðˆÚ“®‚³‚¹‚éDˆÚ“®‘O‚Ì‹óƒm[ƒh‚̈ʒu‚ð
166 * index‚É“n‚·‚ƁCˆÚ“®Œã‚Ì‹óƒm[ƒh‚̈ʒui‚·‚È‚í‚¿‘}“üˆÊ’uj‚ð•Ô‚·D
167 */
168#ifdef TOPPERS_tmedown
169
170uint_t
171tmevt_down(uint_t index, EVTTIM time)
172{
173 uint_t child;
174
175 while ((child = LCHILD(index)) <= last_index) {
176 /*
177 * ¶‰E‚ÌŽqƒm[ƒh‚̃Cƒxƒ“ƒg”­¶Žž‚ð”äŠr‚µC‘‚¢•û‚ÌŽqƒm[ƒh
178 * ‚̈ʒu‚ðchild‚ɐݒ肷‚éDˆÈ‰º‚ÌŽqƒm[ƒh‚́C‚±‚±‚Å‘I‚΂ꂽ•û
179 * ‚ÌŽqƒm[ƒh‚Ì‚±‚ƁD
180 */
181 if (child + 1 <= last_index
182 && EVTTIM_LT(TMEVT_NODE(child + 1).time,
183 TMEVT_NODE(child).time)) {
184 child = child + 1;
185 }
186
187 /*
188 * Žqƒm[ƒh‚̃Cƒxƒ“ƒg”­¶Žž‚Ì•û‚ª’x‚¢i‚Ü‚½‚Í“¯‚¶j‚È‚ç‚΁C
189 * index‚ª‘}“üˆÊ’u‚Ȃ̂Ń‹[ƒv‚𔲂¯‚éD
190 */
191 if (EVTTIM_LE(time, TMEVT_NODE(child).time)) {
192 break;
193 }
194
195 /*
196 * Žqƒm[ƒh‚ðindex‚̈ʒu‚Ɉړ®‚³‚¹‚éD
197 */
198 TMEVT_NODE(index) = TMEVT_NODE(child);
199 TMEVT_NODE(index).p_tmevtb->index = index;
200
201 /*
202 * index‚ðŽqƒm[ƒh‚̈ʒu‚ɍXVD
203 */
204 index = child;
205 }
206 return(index);
207}
208
209#endif /* TOPPERS_tmedown */
210
211/*
212 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚Ö‚Ì“o˜^
213 *
214 * p_tmevtb‚ÅŽw’肵‚½ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚ðCtime‚ÅŽw’肵‚½ŽžŠÔ‚ªŒo
215 * ‰ßŒã‚ɃCƒxƒ“ƒg‚ª”­¶‚·‚é‚悤‚ɁCƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚É“o˜^‚·‚éD
216 */
217#ifdef TOPPERS_tmeins
218
219void
220tmevtb_insert(TMEVTB *p_tmevtb, EVTTIM time)
221{
222 uint_t index;
223
224 /*
225 * last_index‚ðƒCƒ“ƒNƒŠƒƒ“ƒg‚µC‚»‚±‚©‚çã‚É‘}“üˆÊ’u‚ð’T‚·D
226 */
227 index = tmevt_up(++last_index, time);
228
229 /*
230 * ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚ðindex‚̈ʒu‚É‘}“ü‚·‚éD
231 */
232 TMEVT_NODE(index).time = time;
233 TMEVT_NODE(index).p_tmevtb = p_tmevtb;
234 p_tmevtb->index = index;
235}
236
237#endif /* TOPPERS_tmeins */
238
239/*
240 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚©‚ç‚̍폜
241 */
242#ifdef TOPPERS_tmedel
243
244void
245tmevtb_delete(TMEVTB *p_tmevtb)
246{
247 uint_t index = p_tmevtb->index;
248 uint_t parent;
249 EVTTIM event_time = TMEVT_NODE(last_index).time;
250
251 /*
252 * íœ‚É‚æ‚èƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚ª‹ó‚É‚È‚éê‡‚͉½‚à‚µ‚È‚¢D
253 */
254 if (--last_index == 0) {
255 return;
256 }
257
258 /*
259 * íœ‚µ‚½ƒm[ƒh‚̈ʒu‚ɍŌã‚̃m[ƒhilast_index+1‚̈ʒu‚̃m[ƒhj
260 * ‚ð‘}“ü‚µC‚»‚ê‚ð“KØ‚Ȉʒu‚ÖˆÚ“®‚³‚¹‚éDŽÀÛ‚ɂ́CÅŒã‚̃m[ƒh
261 * ‚ðŽÀÛ‚É‘}“ü‚·‚é‚Ì‚Å‚Í‚È‚­Cíœ‚µ‚½ƒm[ƒh‚̈ʒu‚ª‹óƒm[ƒh‚É‚È
262 * ‚é‚̂ŁCÅŒã‚̃m[ƒh‚ð‘}“ü‚·‚ׂ«ˆÊ’u‚ÖŒü‚¯‚Ä‹óƒm[ƒh‚ðˆÚ“®‚³‚¹
263 * ‚éD
264 * ÅŒã‚̃m[ƒh‚̃Cƒxƒ“ƒg”­¶Žž‚ªCíœ‚µ‚½ƒm[ƒh‚̐eƒm[ƒh‚̃C
265 * ƒxƒ“ƒg”­¶Žž‚æ‚è‘O‚̏ꍇ‚ɂ́Cã‚ÉŒü‚©‚Á‚Ä‘}“üˆÊ’u‚ð’T‚·D‚»
266 * ‚¤‚Å‚È‚¢ê‡‚ɂ́C‰º‚ÉŒü‚©‚Á‚Ä’T‚·D
267 */
268 if (index > 1 && EVTTIM_LT(event_time,
269 TMEVT_NODE(parent = PARENT(index)).time)) {
270 /*
271 * eƒm[ƒh‚ðindex‚̈ʒu‚Ɉړ®‚³‚¹‚éD
272 */
273 TMEVT_NODE(index) = TMEVT_NODE(parent);
274 TMEVT_NODE(index).p_tmevtb->index = index;
275
276 /*
277 * íœ‚µ‚½ƒm[ƒh‚̐eƒm[ƒh‚©‚çã‚ÉŒü‚©‚Á‚Ä‘}“üˆÊ’u‚ð’T‚·D
278 */
279 index = tmevt_up(parent, event_time);
280 }
281 else {
282 /*
283 * íœ‚µ‚½ƒm[ƒh‚©‚牺‚ÉŒü‚©‚Á‚Ä‘}“üˆÊ’u‚ð’T‚·D
284 */
285 index = tmevt_down(index, event_time);
286 }
287
288 /*
289 * ÅŒã‚̃m[ƒh‚ðindex‚̈ʒu‚É‘}“ü‚·‚éD
290 */
291 TMEVT_NODE(index) = TMEVT_NODE(last_index + 1);
292 TMEVT_NODE(index).p_tmevtb->index = index;
293}
294
295#endif /* TOPPERS_tmedel */
296
297/*
298 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚̐擪‚̃m[ƒh‚̍폜
299 */
300Inline void
301tmevtb_delete_top(void)
302{
303 uint_t index;
304 EVTTIM event_time = TMEVT_NODE(last_index).time;
305
306 /*
307 * íœ‚É‚æ‚èƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚ª‹ó‚É‚È‚éê‡‚͉½‚à‚µ‚È‚¢D
308 */
309 if (--last_index == 0) {
310 return;
311 }
312
313 /*
314 * ƒ‹[ƒgƒm[ƒh‚ɍŌã‚̃m[ƒhilast_index + 1 ‚̈ʒu‚̃m[ƒhj‚ð
315 * ‘}“ü‚µC‚»‚ê‚ð“KØ‚Ȉʒu‚ÖˆÚ“®‚³‚¹‚éDŽÀÛ‚ɂ́CÅŒã‚̃m[ƒh‚ð
316 * ŽÀÛ‚É‘}“ü‚·‚é‚Ì‚Å‚Í‚È‚­Cƒ‹[ƒgƒm[ƒh‚ª‹óƒm[ƒh‚É‚È‚é‚̂ŁCÅ
317 * Œã‚̃m[ƒh‚ð‘}“ü‚·‚ׂ«ˆÊ’u‚ÖŒü‚¯‚Ä‹óƒm[ƒh‚ðˆÚ“®‚³‚¹‚éD
318 */
319 index = tmevt_down(1, event_time);
320
321 /*
322 * ÅŒã‚̃m[ƒh‚ðindex‚̈ʒu‚É‘}“ü‚·‚éD
323 */
324 TMEVT_NODE(index) = TMEVT_NODE(last_index + 1);
325 TMEVT_NODE(index).p_tmevtb->index = index;
326}
327
328/*
329 * ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ü‚Å‚ÌŽc‚莞ŠÔ‚ÌŒvŽZ
330 */
331#ifdef TOPPERS_tmeltim
332
333RELTIM
334tmevt_lefttim(TMEVTB *p_tmevtb)
335{
336 EVTTIM time;
337
338 time = TMEVT_NODE(p_tmevtb->index).time;
339 if (EVTTIM_LE(time, next_time)) {
340 /*
341 * ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚ŏˆ—‚³‚ê‚éê‡‚É‚Í0‚ð•Ô‚·D
342 */
343 return(0U);
344 }
345 else {
346 return((RELTIM)(time - base_time));
347 }
348}
349
350#endif /* TOPPERS_tmeltim */
351
352/*
353 * ƒ^ƒCƒ€ƒeƒBƒbƒN‚Ì‹Ÿ‹‹
354 */
355#ifdef TOPPERS_sigtim
356
357void
358signal_time(void)
359{
360 TMEVTB *p_tmevtb;
361
362 assert(sense_context());
363 assert(!i_sense_lock());
364
365 i_lock_cpu();
366
367 /*
368 * current_time‚ðXV‚·‚éD
369 */
370 current_time = next_time;
371
372 /*
373 * next_timeCnext_subtime‚ðXV‚·‚éD
374 */
375#if TIC_DENO == 1U
376 next_time = current_time + TIC_NUME;
377#else /* TIC_DENO == 1U */
378 next_subtime += TIC_NUME % TIC_DENO;
379 next_time = current_time + TIC_NUME / TIC_DENO;
380 if (next_subtime >= TIC_DENO) {
381 next_subtime -= TIC_DENO;
382 next_time += 1U;
383 }
384#endif /* TIC_DENO == 1U */
385
386 /*
387 * current_time‚æ‚èƒCƒxƒ“ƒg”­¶Žž‚Ì‘‚¢i‚Ü‚½‚Í“¯‚¶jƒ^ƒCƒ€ƒCƒx
388 * ƒ“ƒg‚ðCƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚©‚çíœ‚µCƒR[ƒ‹ƒoƒbƒNŠÖ”‚ðŒÄ‚Ñ
389 * o‚·D
390 */
391 while (last_index > 0 && EVTTIM_LE(TMEVT_NODE(1).time, current_time)) {
392 p_tmevtb = TMEVT_NODE(1).p_tmevtb;
393 tmevtb_delete_top();
394 (*(p_tmevtb->callback))(p_tmevtb->arg);
395 }
396
397 /*
398 * min_time‚ðXV‚·‚éD
399 */
400 min_time = current_time;
401
402 i_unlock_cpu();
403}
404
405#endif /* TOPPERS_sigtim */
Note: See TracBrowser for help on using the repository browser.