source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/h8s/cpu_config.h@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

File size: 10.8 KB
RevLine 
[26]1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering
9 * Tomakomai National College of Technology, JAPAN
10 * Copyright (C) 2001-2004 by Industrial Technology Institute,
11 * Miyagi Prefectural Government, JAPAN
12 *
13 * 上記著作権者
14は,以下の (1)〜(4) の条件か,Free Software Foundation
15 * によってå…
16¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
17 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
18 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
19å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
20 * 利用と呼ぶ)することを無償で許諾する.
21 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
22 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
23 * スコード中に含まれていること.
24 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
25 * 用できる形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
28 * 者
29マニュアルなど)に,上記の著作権表示,この利用条件および下記
30 * の無保証規定を掲載すること.
31 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
32 * 用できない形で再é…
33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
34 * と.
35 * (a) 再é…
36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
37マニュアルなど)に,上記の著
38 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
39 * (b) 再é…
40å¸ƒã®å½¢æ…
41‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
42 * 報告すること.
43 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
44 * 害からも,上記著作権者
45およびTOPPERSプロジェクトをå…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
51 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
52 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
53 */
54
55/*
56 * プロセッサ依存モジュール(H8S用)
57 *
58 * このインクルードファイルは,t_config.h のみからインクルードされる.
59 * 他のファイルから直接インクルードしてはならない.
60 */
61
62#ifndef _CPU_CONFIG_H_
63#define _CPU_CONFIG_H_
64
65/*
66 * カーネルの内
67部識別名のリネーム
68 */
69#include <cpu_rename.h>
70
71/*
72 * プロセッサ関連の定義
73 */
74#include <h8s.h>
75#include <h8s_sil.h>
76
77/*
78 * 設定可能なカーネル管理下の最高許可割込みビットパターン
79 * (エクステンドレジスタへ設定;cpu_insn.h 内
80で利用するので、å…
81ˆã«å®šç¾©ã™ã‚‹ã€‚)
82 */
83#ifndef GDB_STUB
84#define MAX_IPM 7 /* = EXR_I2|EXR_I1|EXR_I0 (最高レベル) */
85#else /* GDB_STUB */
86#define MAX_IPM 6 /* レベル7の割り込みは、GDB_STUB が利用する */
87#endif /* GDB_STUB */
88
89#define str_MAX_IPM TO_STRING(MAX_IPM)
90 /* 割込みå…
91¥å£å‡¦ç†INTHDR_ENTRYマクロ用 (cpu_config.h) */
92
93/*
94 * プロセッサの特殊命令のインライン関数定義
95 * 内
96部で、MAX_IPMを利用しているので、定義後に読み込む
97 */
98#include <cpu_insn.h>
99
100/*
101 * chg_ipm/get_ipm をサポートするかどうかの定義
102 */
103#define SUPPORT_CHG_IPM
104
105/*
106 * タスクコンテキストブロックの定義
107 */
108#ifndef _MACRO_ONLY
109
110typedef struct task_context_block {
111 VP sp; /* スタックポインタ */
112 FP pc; /* プログラムカウンタ */
113} CTXB;
114
115#endif /* _MACRO_ONLY */
116
117/*
118 * システム状æ…
119‹å‚ç…
120§
121 */
122#ifndef _MACRO_ONLY
123
124/*
125 * 割込みネストカウンタ
126 * ネストカウンタの値でコンテキストの判断を行うので、コンテキスト参ç…
127§æ™‚に
128 * 利用する。
129 */
130
131extern UW intnest;
132
133/*
134 * コンテキスト参ç…
135§
136 * 割込みネストカウンタを読み出した直後に割込みが発生しても、戻ったときには
137 * コンテキストもå…
138ƒã«æˆ»ã£ã¦ã„ã‚‹
139 */
140
141Inline BOOL
142sense_context(void)
143{
144 return( intnest > 0 );
145}
146
147Inline BOOL
148sense_lock(void)
149{
150 return( current_intmask() == MAX_IPM );
151}
152
153#endif /* _MACRO_ONLY */
154
155#define t_sense_lock sense_lock
156#define i_sense_lock sense_lock
157
158#ifndef _MACRO_ONLY
159
160/*
161 * CPUロックとその解除(タスクコンテキスト用)
162 *
163 * task_intmask は、chg_ipm をサポートするための変数。chg_ipm をサポート
164 * しない場合には、t_unlock_cpu 中の task_intmask は 0 に置き換えてよい。
165 */
166
167#ifdef SUPPORT_CHG_IPM
168extern IPM task_intmask; /* タスクコンテキストでの割込みマスク */
169#endif /* SUPPORT_CHG_IPM */
170
171Inline void
172t_lock_cpu(void)
173{
174 disint(); /* cpu_insn.h */
175}
176
177Inline void
178t_unlock_cpu(void)
179{
180#ifdef SUPPORT_CHG_IPM
181 /*
182 * t_unlock_cpu が呼び出されるのは CPUロック状æ…
183‹ã®ã¿ã§ã‚るため。
184 * 処理の途中で task_intmask が書き換わることはない。
185 */
186 set_intmask(task_intmask);
187#else /* SUPPORT_CHG_IPM */
188 enaint(); /* cpu_insn.h */
189#endif /* SUPPORT_CHG_IPM */
190}
191
192/*
193 * CPUロックとその解除(非タスクコンテキスト用)
194 */
195
196extern IPM int_intmask; /* 非タスクコンテキストでの割込みマスク */
197
198Inline void
199i_lock_cpu(void)
200{
201 IPM intmask;
202
203 /*
204 * 一時変数 intmask を使っているのは、current_intmask()を呼んだ直後に
205 * 割込みが発生し、起動された割込みハンドラ内
206で int_intmask が変更
207 * される可能性があるためである。
208 */
209 intmask = current_intmask();
210 disint(); /* cpu_insn.h */
211 int_intmask = intmask;
212}
213
214Inline void
215i_unlock_cpu(void)
216{
217 set_intmask(int_intmask);
218}
219
220/*
221 * タスクディスパッチャ
222 */
223
224/*
225 * 最高優å…
226ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.S)
227 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理内
228で、
229 * CPUロック状æ…
230‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない。
231 */
232extern void dispatch(void);
233
234/*
235 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S)
236 * exit_and_dispatch は,CPUロック状æ…
237‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない。
238 */
239extern void exit_and_dispatch(void);
240
241/*
242 * 割込みハンドラの設定
243 * H8Sでは、割込みハンドラテーブルの設定はROMに直接行うため使用しない。
244 */
245
246Inline void define_inh(INHNO inhno, FP inthdr) {
247}
248
249/*
250 * CPU例外ハンドラの設定
251 * H8Sでは、割込みハンドラテーブルの設定はROMに直接行うため使用しない。
252 */
253
254Inline void define_exc(EXCNO excno, FP exchdr) {
255}
256
257#endif /* _MACRO_ONLY */
258
259/*
260 * 割込みハンドラの出å…
261¥å£å‡¦ç†
262 */
263
264/*
265 * 割込みハンドラのå…
266¥å£å‡¦ç†
267 * この処理に来るまでに、ハードウェアにて、当該割込みレベルまでの割込みを
268 * 禁止する処理が行われている。
269 * entry:å…
270¥å£å‡¦ç†ã®ãƒ©ãƒ™ãƒ«
271 * inthdr:C言語ルーチンのå…
272ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
273 */
274#define _INTHDR_ENTRY(entry, inthdr) \
275asm(" .text \n" \
276" .align 2 \n" \
277" .global _"#entry" \n" \
278" \n" \
279"_"#entry": \n" \
280" push.l er0 \n" \
281 /* CPUロックに必
282要なレジスタをタスクスタックに待
283避 */ \
284" stc.b exr, r0l \n" \
285 /* exr を r0l (er0) にコピー \
286" (_kernel_ret_main 内
287で、割込み禁止許可制御に使う) */ \
288" \n" \
289" ldc.b #"str_MAX_IPM", exr \n" \
290 /* lock_cpu 相当 (割込み禁止) */ \
291" \n" \
292" push.l er1 \n" \
293 /* er1 をタスクスタックに待
294避 */ \
295" mov.l #_"#inthdr", er1 \n" \
296 /* er1 = 割込みハンドラのアドレス */ \
297" jmp _kernel_ret_main \n" \
298 /* 割込みå…
299¥å£å‡¦ç†ã¸ã‚¸ãƒ£ãƒ³ãƒ— */ \
300)
301
302/*
303 * 割込みハンドラの出å…
304¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
305 */
306#define INTHDR_ENTRY(inthdr) \
307 extern void inthdr##_entry(void); \
308 _INTHDR_ENTRY(inthdr##_entry, inthdr) /* この処理は上記マクロで定義 */
309#define INT_ENTRY(inthdr) inthdr##_entry
310
311/* ベクタテーブル(sys_support.S)記述用ラベル取得マクロ */
312#define __INT_ENTRY(inthdr) _##inthdr##_entry
313#define _INT_ENTRY(inthdr) __INT_ENTRY(inthdr)
314
315/*
316 * CPU例外ハンドラの出å…
317¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
318 */
319#define EXCHDR_ENTRY(exchdr) INTHDR_ENTRY(exchdr)
320#define EXC_ENTRY(exchdr) exchdr##_entry
321
322/* ベクタテーブル(sys_support.S)記述用ラベル取得マクロ */
323#define __EXC_ENTRY(exchdr) _##exchdr##_entry
324#define _EXC_ENTRY(exchdr) __EXC_ENTRY(exchdr)
325
326/*
327 * CPU例外の発生した時のシステム状æ…
328‹ã®å‚ç…
329§
330 */
331#ifndef _MACRO_ONLY
332
333/*
334 * CPU例外の発生した時のコンテキスト判定
335 */
336Inline BOOL
337exc_sense_context(VP p_excinf)
338{
339 return(intnest > 1);
340 /* 1と比較するのは、現在実行中のCPU例外の分割込みネスト
341 カウンタがインクリメントされているため */
342}
343
344/*
345 * CPU例外の発生した時のCPUロック状æ…
346‹ã®å‚ç…
347§
348 * H8S版では、呼ばれることは無いが、ソースを比較する場合向けに設定する。
349 */
350Inline BOOL
351exc_sense_lock(VP p_excinf)
352{
353 return(TRUE);
354}
355
356/*
357 * プロセッサ依存の初期化
358 */
359extern void cpu_initialize(void);
360
361/*
362 * プロセッサ依存の終了時処理
363 */
364extern void cpu_terminate(void);
365
366#endif /* _MACRO_ONLY_ */
367
368/*============================================================================*/
369/* å…
370±é€šãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¯ãªã„、独自の部分 */
371
372/*
373 * 割込みレベル設定用マクロ(もしくは、インライン関数)
374 * ・x : インタラプトプライオリティレジスタ ( IPRA - IPRK )
375 * ・y : IPR設定用マスク(上位か下位の選択) ( IPR_UPR, IPR_LOW )
376 * ・z : 割込みレベル ( 0 - 7 )
377 */
378#ifndef _MACRO_ONLY
379
380Inline void icu_set_ilv( VP ipr, BOOL mask, INT level ) {
381
382 if( mask == IPR_UPR ) {
383 h8s_wrb_mem( ipr, ( h8s_reb_mem( ipr ) & ~IPR_UPR_MASK ) | TO_HI4((UB) level) );
384 } else if( mask == IPR_LOW ) {
385 h8s_wrb_mem( ipr, ( h8s_reb_mem( ipr ) & ~IPR_LOW_MASK ) | TO_LO4((UB) level) );
386 }
387}
388
389#endif /* _MACRO_ONLY_ */
390
391#ifndef _MACRO_ONLY
392/*
393 * 未定義割込み発生時のエラー出力 (cpu_config.c, cpu_support.S)
394 * 構造体 EXCSTACK は、h8s.h で定義
395 */
396extern void cpu_experr(EXCSTACK *sp);
397
398#endif /* _MACRO_ONLY_ */
399
400#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.