OSDN Git Service

af5bfd5f24f16ba5e1d4157ff77aa6f8a2dce296
[nxt-jsp/etrobo-atk.git] / nxtOSEK / toppers_jsp / include / sil.h
1 /*
2  *  TOPPERS/JSP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Just 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,2006 by Embedded and Real-Time Systems Laboratory
9  *              Graduate School of Information Science, Nagoya Univ., JAPAN
10  * 
11  *  ¾åµ­Ãøºî¸¢¼Ô¤Ï¡¤°Ê²¼¤Î (1)¡Á(4) ¤Î¾ò·ï¤«¡¤Free Software Foundation 
12  *  ¤Ë¤è¤Ã¤Æ¸øɽ¤µ¤ì¤Æ¤¤¤ë GNU General Public License ¤Î Version 2 ¤Ëµ­
13  *  ½Ò¤µ¤ì¤Æ¤¤¤ë¾ò·ï¤òËþ¤¿¤¹¾ì¹ç¤Ë¸Â¤ê¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¡ÊËÜ¥½¥Õ¥È¥¦¥§¥¢
14  *  ¤ò²þÊѤ·¤¿¤â¤Î¤ò´Þ¤à¡¥°Ê²¼Æ±¤¸¡Ë¤ò»ÈÍÑ¡¦Ê£À½¡¦²þÊÑ¡¦ºÆÇÛÉۡʰʲ¼¡¤
15  *  ÍøÍѤȸƤ֡ˤ¹¤ë¤³¤È¤ò̵½þ¤ÇµöÂú¤¹¤ë¡¥
16  *  (1) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¥½¡¼¥¹¥³¡¼¥É¤Î·Á¤ÇÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¤¾åµ­¤ÎÃøºî
17  *      ¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­¤Î̵Êݾڵ¬Ä꤬¡¤¤½¤Î¤Þ¤Þ¤Î·Á¤Ç¥½¡¼
18  *      ¥¹¥³¡¼¥ÉÃæ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¤³¤È¡¥
19  *  (2) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¡¤¥é¥¤¥Ö¥é¥ê·Á¼°¤Ê¤É¡¤Â¾¤Î¥½¥Õ¥È¥¦¥§¥¢³«È¯¤Ë»È
20  *      ÍѤǤ­¤ë·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
21  *      ¼Ô¥Þ¥Ë¥å¥¢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ­¤ÎÃøºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­
22  *      ¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥
23  *  (3) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¡¤µ¡´ï¤ËÁȤ߹þ¤à¤Ê¤É¡¤Â¾¤Î¥½¥Õ¥È¥¦¥§¥¢³«È¯¤Ë»È
24  *      ÍѤǤ­¤Ê¤¤·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤¼¡¤Î¤¤¤º¤ì¤«¤Î¾ò·ï¤òËþ¤¿¤¹¤³
25  *      ¤È¡¥
26  *    (a) ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥­¥å¥á¥ó¥È¡ÊÍøÍѼԥޥ˥奢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ­¤ÎÃø
27  *        ºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥
28  *    (b) ºÆÇÛÉۤηÁÂÖ¤ò¡¤Ê̤ËÄê¤á¤ëÊýË¡¤Ë¤è¤Ã¤Æ¡¤TOPPERS¥×¥í¥¸¥§¥¯¥È¤Ë
29  *        Êó¹ð¤¹¤ë¤³¤È¡¥
30  *  (4) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤ë¤¤¤«¤Ê¤ë»
31  *      ³²¤«¤é¤â¡¤¾åµ­Ãøºî¸¢¼Ô¤ª¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤òÌÈÀÕ¤¹¤ë¤³¤È¡¥
32  * 
33  *  ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ï¡¤ÌµÊݾڤÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡¥¾åµ­Ãøºî¸¢¼Ô¤ª
34  *  ¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤Ï¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ë´Ø¤·¤Æ¡¤¤½¤ÎŬÍѲÄǽÀ­¤â
35  *  ´Þ¤á¤Æ¡¤¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤ï¤Ê¤¤¡¥¤Þ¤¿¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľ
36  *  ÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤¿¤¤¤«¤Ê¤ë»³²¤Ë´Ø¤·¤Æ¤â¡¤¤½¤ÎÀÕǤ¤òÉé¤ï¤Ê¤¤¡¥
37  * 
38  *  @(#) $Id: sil.h,v 1.9 2006/02/12 05:27:25 hiro Exp $
39  */
40
41 /*
42  *      ¥·¥¹¥Æ¥à¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥ì¥¤¥ä¡Ê¥¿¡¼¥²¥Ã¥È¶¦ÄÌÉô¡Ë
43  *
44  *  ¥¢¥»¥ó¥Ö¥ê¸À¸ì¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ä¥·¥¹¥Æ¥à¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¥Õ¥¡
45  *  ¥¤¥ë¤«¤é¤³¤Î¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë»þ¤Ï¡¤_MACRO_ONLY ¤òÄêµÁ¤·¤Æ
46  *  ¤ª¤¯¤³¤È¤Ç¡¤¥Þ¥¯¥íÄêµÁ°Ê³°¤Îµ­½Ò¤ò½ü¤¯¤³¤È¤¬¤Ç¤­¤ë¡¥
47  *
48  *  ¤³¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Ï¡¤É¸½à¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¡Ês_services.h¡Ë
49  *  ¤Ç¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¡¥¤Þ¤¿¡¤¥«¡¼¥Í¥ë¤«¤é¸Æ¤Ð¤ì¤ë¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Î
50  *  ¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Ç¡¤¥¤¥ó¥é¥¤¥ó´Ø¿ô¤Ê¤É¤Ç¥·¥¹¥Æ¥à¥¤¥ó¥¿¥Õ¥§¡¼¥¹
51  *  ¥ì¥¤¥ä¤òÍѤ¤¤Æ¤¤¤ë¾ì¹ç¤Ë¤â¡¤¤³¤Î¥Õ¥¡¥¤¥ë¤¬¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¡¥¤³¤Î
52  *  Îã³°¤ò½ü¤¤¤Æ¡¤Â¾¤Î¥Õ¥¡¥¤¥ë¤«¤éľÀÜ¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¤³¤È¤Ï¤Ê¤¤¡¥
53  *
54  *  ¤³¤ÎÃæ¤Ç¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ò½ü¤¤¤Æ¡¤Â¾¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡
55  *  ¥¤¥ë¤Ë°Í¸¤·¤Æ¤¤¤Ê¤¤¡¥
56  */
57
58 #ifndef _SIL_H_
59 #define _SIL_H_
60
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64
65 /*
66  *  ¥«¡¼¥Í¥ë¡¦¥¢¥×¥ê¥±¡¼¥·¥ç¥ó ¶¦ÄÌ¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë
67  */
68 #include <t_stddef.h>
69
70 /*
71  *  ITRON»ÅÍͶ¦Ä̵¬Äê¤Î¥Ç¡¼¥¿·¿¡¦Äê¿ô¡¦¥Þ¥¯¥í
72  */
73 #include <itron.h>
74
75 /*
76  *  ¥·¥¹¥Æ¥à¤ä¥×¥í¥»¥Ã¥µ¤Ë°Í¸¤¹¤ëÄêµÁ
77  */
78 #include <sys_defs.h>
79 #include <cpu_defs.h>
80
81 /*
82  *  ¥·¥¹¥Æ¥à¥í¥°¥µ¡¼¥Ó¥¹¤Î¤¿¤á¤ÎÄêµÁ
83  */
84 #include <t_syslog.h>
85
86 /*
87  *  ¥¨¥ó¥Ç¥£¥¢¥óÄê¿ô¤ÎÄêµÁ
88  */
89 #define SIL_ENDIAN_LITTLE       0       /* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó */
90 #define SIL_ENDIAN_BIG          1       /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó */
91
92 #ifndef _MACRO_ONLY
93
94 /*
95  *  ³ä¹þ¤ß¥í¥Ã¥¯¾õÂÖ¤ÎÀ©¸æ
96  */
97 #ifndef SIL_PRE_LOC
98 #include <kernel.h>
99 #define SIL_PRE_LOC     BOOL _sil_loc_ = sns_loc()
100 #define SIL_LOC_INT()   ((void)(!(_sil_loc_) \
101                                 && (sns_ctx() ? iloc_cpu() : loc_cpu())))
102 #define SIL_UNL_INT()   ((void)(!(_sil_loc_) \
103                                 && (sns_ctx() ? iunl_cpu() : unl_cpu())))
104 #endif /* SIL_PRE_LOC */
105
106 /*
107  *  Èù¾¯»þ´ÖÂÔ¤Á
108  */
109 extern void     sil_dly_nse(UINT dlytim) throw();
110
111 /*
112  *  ¥¨¥ó¥Ç¥£¥¢¥ó¤Îȿž
113  */
114 #ifndef SIL_REV_ENDIAN_H
115 #define SIL_REV_ENDIAN_H(data) \
116         ((VH)((((UH)(data) & 0xff) << 8) | (((UH)(data) >> 8) & 0xff)))
117 #endif /* SIL_REV_ENDIAN_H */
118
119 #ifndef SIL_REV_ENDIAN_W
120 #define SIL_REV_ENDIAN_W(data) \
121         ((VW)((((UW)(data) & 0xff) << 24) | (((UW)(data) & 0xff00) << 8) \
122                 | (((UW)(data)>> 8) & 0xff00) | (((UW)(data) >> 24) & 0xff)))
123 #endif /* SIL_REV_ENDIAN_H */
124
125 /*
126  *  ¥á¥â¥ê¶õ´Ö¥¢¥¯¥»¥¹´Ø¿ô
127  */
128 #ifndef OMIT_SIL_ACCESS
129
130 /*
131  *  8¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß
132  */
133 #ifdef _int8_
134
135 Inline VB
136 sil_reb_mem(VP mem)
137 {
138         VB      data;
139
140         data = *((volatile VB *) mem);
141         return(data);
142 }
143
144 Inline void
145 sil_wrb_mem(VP mem, VB data)
146 {
147         *((volatile VB *) mem) = data;
148 }
149
150 #endif /* _int8_ */
151
152 /*
153  *  16¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß
154  */
155 #ifdef _int16_
156
157 Inline VH
158 sil_reh_mem(VP mem)
159 {
160         VH      data;
161
162         data = *((volatile VH *) mem);
163         return(data);
164 }
165
166 Inline void
167 sil_wrh_mem(VP mem, VH data)
168 {
169         *((volatile VH *) mem) = data;
170 }
171
172 #if SIL_ENDIAN == SIL_ENDIAN_BIG        /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
173
174 #define sil_reh_bem(mem)        sil_reh_mem(mem)
175 #define sil_wrh_bem(mem, data)  sil_wrh_mem(mem, data)
176
177 #ifndef OMIT_SIL_REH_LEM
178
179 Inline VH
180 sil_reh_lem(VP mem)
181 {
182         VH      data;
183
184         data = *((volatile VH *) mem);
185         return(SIL_REV_ENDIAN_H(data));
186 }
187
188 #endif /* OMIT_SIL_REH_LEM */
189 #ifndef OMIT_SIL_WRH_LEM
190
191 Inline void
192 sil_wrh_lem(VP mem, VH data)
193 {
194         *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
195 }
196
197 #endif /* OMIT_SIL_WRH_LEM */
198 #else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
199
200 #define sil_reh_lem(mem)        sil_reh_mem(mem)
201 #define sil_wrh_lem(mem, data)  sil_wrh_mem(mem, data)
202
203 #ifndef OMIT_SIL_REH_BEM
204
205 Inline VH
206 sil_reh_bem(VP mem)
207 {
208         VH      data;
209
210         data = *((volatile VH *) mem);
211         return(SIL_REV_ENDIAN_H(data));
212 }
213
214 #endif /* OMIT_SIL_REH_BEM */
215 #ifndef OMIT_SIL_WRH_BEM
216
217 Inline void
218 sil_wrh_bem(VP mem, VH data)
219 {
220         *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
221 }
222
223 #endif /* OMIT_SIL_WRH_BEM */
224 #endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
225 #endif /* _int16_ */
226
227 /*
228  *  32¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß
229  */
230
231 Inline VW
232 sil_rew_mem(VP mem)
233 {
234         VW      data;
235
236         data = *((volatile VW *) mem);
237         return(data);
238 }
239
240 Inline void
241 sil_wrw_mem(VP mem, VW data)
242 {
243         *((volatile VW *) mem) = data;
244 }
245
246 #if SIL_ENDIAN == SIL_ENDIAN_BIG        /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
247
248 #define sil_rew_bem(mem)        sil_rew_mem(mem)
249 #define sil_wrw_bem(mem, data)  sil_wrw_mem(mem, data)
250
251 #ifndef OMIT_SIL_REW_LEM
252
253 Inline VW
254 sil_rew_lem(VP mem)
255 {
256         VW      data;
257
258         data = *((volatile VW *) mem);
259         return(SIL_REV_ENDIAN_W(data));
260 }
261
262 #endif /* OMIT_SIL_REW_LEM */
263 #ifndef OMIT_SIL_WRW_LEM
264
265 Inline void
266 sil_wrw_lem(VP mem, VW data)
267 {
268         *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
269 }
270
271 #endif /* OMIT_SIL_WRW_LEM */
272 #else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
273
274 #define sil_rew_lem(mem)        sil_rew_mem(mem)
275 #define sil_wrw_lem(mem, data)  sil_wrw_mem(mem, data)
276
277 #ifndef OMIT_SIL_REW_BEM
278
279 Inline VW
280 sil_rew_bem(VP mem)
281 {
282         VW      data;
283
284         data = *((volatile VW *) mem);
285         return(SIL_REV_ENDIAN_W(data));
286 }
287
288 #endif /* OMIT_SIL_REW_BEM */
289 #ifndef OMIT_SIL_WRW_BEM
290
291 Inline void
292 sil_wrw_bem(VP mem, VW data)
293 {
294         *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
295 }
296
297 #endif /* OMIT_SIL_WRW_BEM */
298 #endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
299 #endif /* OMIT_SIL_ACCESS */
300
301 #endif /* _MACRO_ONLY */
302
303 #ifdef __cplusplus
304 }
305 #endif
306
307 #endif /* _SIL_H_ */