3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
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
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 * ÍѤǤ¤Ê¤¤·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤¼¡¤Î¤¤¤º¤ì¤«¤Î¾ò·ï¤òËþ¤¿¤¹¤³
26 * (a) ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥¥å¥á¥ó¥È¡ÊÍøÍѼԥޥ˥奢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ¤ÎÃø
27 * ºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥
28 * (b) ºÆÇÛÉۤηÁÂÖ¤ò¡¤Ê̤ËÄê¤á¤ëÊýË¡¤Ë¤è¤Ã¤Æ¡¤TOPPERS¥×¥í¥¸¥§¥¯¥È¤Ë
30 * (4) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤ë¤¤¤«¤Ê¤ë»
31 * ³²¤«¤é¤â¡¤¾åµÃøºî¸¢¼Ô¤ª¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤òÌÈÀÕ¤¹¤ë¤³¤È¡¥
33 * ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ï¡¤ÌµÊݾڤÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡¥¾åµÃøºî¸¢¼Ô¤ª
34 * ¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤Ï¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ë´Ø¤·¤Æ¡¤¤½¤ÎŬÍѲÄǽÀ¤â
35 * ´Þ¤á¤Æ¡¤¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤ï¤Ê¤¤¡¥¤Þ¤¿¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľ
36 * ÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤¿¤¤¤«¤Ê¤ë»³²¤Ë´Ø¤·¤Æ¤â¡¤¤½¤ÎÀÕǤ¤òÉé¤ï¤Ê¤¤¡¥
38 * @(#) $Id: sil.h,v 1.9 2006/02/12 05:27:25 hiro Exp $
42 * ¥·¥¹¥Æ¥à¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥ì¥¤¥ä¡Ê¥¿¡¼¥²¥Ã¥È¶¦ÄÌÉô¡Ë
44 * ¥¢¥»¥ó¥Ö¥ê¸À¸ì¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ä¥·¥¹¥Æ¥à¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¥Õ¥¡
45 * ¥¤¥ë¤«¤é¤³¤Î¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë»þ¤Ï¡¤_MACRO_ONLY ¤òÄêµÁ¤·¤Æ
46 * ¤ª¤¯¤³¤È¤Ç¡¤¥Þ¥¯¥íÄêµÁ°Ê³°¤Îµ½Ò¤ò½ü¤¯¤³¤È¤¬¤Ç¤¤ë¡¥
48 * ¤³¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Ï¡¤É¸½à¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¡Ês_services.h¡Ë
49 * ¤Ç¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¡¥¤Þ¤¿¡¤¥«¡¼¥Í¥ë¤«¤é¸Æ¤Ð¤ì¤ë¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Î
50 * ¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Ç¡¤¥¤¥ó¥é¥¤¥ó´Ø¿ô¤Ê¤É¤Ç¥·¥¹¥Æ¥à¥¤¥ó¥¿¥Õ¥§¡¼¥¹
51 * ¥ì¥¤¥ä¤òÍѤ¤¤Æ¤¤¤ë¾ì¹ç¤Ë¤â¡¤¤³¤Î¥Õ¥¡¥¤¥ë¤¬¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¡¥¤³¤Î
52 * Îã³°¤ò½ü¤¤¤Æ¡¤Â¾¤Î¥Õ¥¡¥¤¥ë¤«¤éľÀÜ¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¤³¤È¤Ï¤Ê¤¤¡¥
54 * ¤³¤ÎÃæ¤Ç¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ò½ü¤¤¤Æ¡¤Â¾¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡
55 * ¥¤¥ë¤Ë°Í¸¤·¤Æ¤¤¤Ê¤¤¡¥
66 * ¥«¡¼¥Í¥ë¡¦¥¢¥×¥ê¥±¡¼¥·¥ç¥ó ¶¦ÄÌ¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë
71 * ITRON»ÅÍͶ¦Ä̵¬Äê¤Î¥Ç¡¼¥¿·¿¡¦Äê¿ô¡¦¥Þ¥¯¥í
76 * ¥·¥¹¥Æ¥à¤ä¥×¥í¥»¥Ã¥µ¤Ë°Í¸¤¹¤ëÄêµÁ
82 * ¥·¥¹¥Æ¥à¥í¥°¥µ¡¼¥Ó¥¹¤Î¤¿¤á¤ÎÄêµÁ
87 * ¥¨¥ó¥Ç¥£¥¢¥óÄê¿ô¤ÎÄêµÁ
89 #define SIL_ENDIAN_LITTLE 0 /* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó */
90 #define SIL_ENDIAN_BIG 1 /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó */
95 * ³ä¹þ¤ß¥í¥Ã¥¯¾õÂÖ¤ÎÀ©¸æ
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 */
109 extern void sil_dly_nse(UINT dlytim) throw();
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 */
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 */
126 * ¥á¥â¥ê¶õ´Ö¥¢¥¯¥»¥¹´Ø¿ô
128 #ifndef OMIT_SIL_ACCESS
131 * 8¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß
140 data = *((volatile VB *) mem);
145 sil_wrb_mem(VP mem, VB data)
147 *((volatile VB *) mem) = data;
153 * 16¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß
162 data = *((volatile VH *) mem);
167 sil_wrh_mem(VP mem, VH data)
169 *((volatile VH *) mem) = data;
172 #if SIL_ENDIAN == SIL_ENDIAN_BIG /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
174 #define sil_reh_bem(mem) sil_reh_mem(mem)
175 #define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data)
177 #ifndef OMIT_SIL_REH_LEM
184 data = *((volatile VH *) mem);
185 return(SIL_REV_ENDIAN_H(data));
188 #endif /* OMIT_SIL_REH_LEM */
189 #ifndef OMIT_SIL_WRH_LEM
192 sil_wrh_lem(VP mem, VH data)
194 *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
197 #endif /* OMIT_SIL_WRH_LEM */
198 #else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
200 #define sil_reh_lem(mem) sil_reh_mem(mem)
201 #define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data)
203 #ifndef OMIT_SIL_REH_BEM
210 data = *((volatile VH *) mem);
211 return(SIL_REV_ENDIAN_H(data));
214 #endif /* OMIT_SIL_REH_BEM */
215 #ifndef OMIT_SIL_WRH_BEM
218 sil_wrh_bem(VP mem, VH data)
220 *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
223 #endif /* OMIT_SIL_WRH_BEM */
224 #endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
228 * 32¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß
236 data = *((volatile VW *) mem);
241 sil_wrw_mem(VP mem, VW data)
243 *((volatile VW *) mem) = data;
246 #if SIL_ENDIAN == SIL_ENDIAN_BIG /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
248 #define sil_rew_bem(mem) sil_rew_mem(mem)
249 #define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data)
251 #ifndef OMIT_SIL_REW_LEM
258 data = *((volatile VW *) mem);
259 return(SIL_REV_ENDIAN_W(data));
262 #endif /* OMIT_SIL_REW_LEM */
263 #ifndef OMIT_SIL_WRW_LEM
266 sil_wrw_lem(VP mem, VW data)
268 *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
271 #endif /* OMIT_SIL_WRW_LEM */
272 #else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
274 #define sil_rew_lem(mem) sil_rew_mem(mem)
275 #define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data)
277 #ifndef OMIT_SIL_REW_BEM
284 data = *((volatile VW *) mem);
285 return(SIL_REV_ENDIAN_W(data));
288 #endif /* OMIT_SIL_REW_BEM */
289 #ifndef OMIT_SIL_WRW_BEM
292 sil_wrw_bem(VP mem, VW data)
294 *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
297 #endif /* OMIT_SIL_WRW_BEM */
298 #endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
299 #endif /* OMIT_SIL_ACCESS */
301 #endif /* _MACRO_ONLY */