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

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

initial

File size: 8.1 KB
Line 
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) 2000-2003 by Industrial Technology Institute,
9 * Miyagi Prefectural Government, JAPAN
10 *
11 * 上記著作権者
12は,以下の (1)〜(4) の条件か,Free Software Foundation
13 * によってå…
14¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
15 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
16 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
18 * 利用と呼ぶ)することを無償で許諾する.
19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * スコード中に含まれていること.
22 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23 * 用できる形で再é…
24å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
25å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
26 * 者
27マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
32 * と.
33 * (a) 再é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
35マニュアルなど)に,上記の著
36 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
37 * (b) 再é…
38å¸ƒã®å½¢æ…
39‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
40 * 報告すること.
41 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
42 * 害からも,上記著作権者
43およびTOPPERSプロジェクトをå…
44è²¬ã™ã‚‹ã“と.
45 *
46 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
49 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
50 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
51 */
52
53#ifndef _CPU_CONFIG_H_
54#define _CPU_CONFIG_H_
55
56/*
57 * カーネルの内
58部識別名のリネーム
59 */
60#include <cpu_rename.h>
61
62/*
63 * プロセッサの特殊命令のインライン関数定義
64 */
65#include <cpu_insn.h>
66
67/*
68 * chg_ipm/get_ipm をサポートするかどうかの定義
69 */
70#define SUPPORT_CHG_IPM
71
72/*
73 * TCB 関連の定義
74 *
75 * cpu_context.h にå…
76¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
77§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
78 * cpu_context.h にはå…
79¥ã‚Œã‚‰ã‚Œãªã„.
80 */
81#ifndef _MACRO_ONLY
82
83/* タスクコンテキストブロックの定義 */
84typedef struct task_context_block {
85 VP sp; /* スタックポインタ */
86 FP pc; /* プログラムカウンタ */
87} CTXB;
88
89#endif /* _MACRO_ONLY */
90
91/* TCB 中のフィールドのビット幅
92の定義 */
93#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
94 */
95#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
96 */
97
98/*
99 * システム状æ…
100‹å‚ç…
101§
102 */
103
104#ifndef _MACRO_ONLY
105
106/*
107 * コンテキスト参ç…
108§
109 * 割込みネストカウンタを読み出した直後に割込みが発生しても、戻ったときには
110 * コンテキストもå…
111ƒã«æˆ»ã£ã¦ã„る。
112 */
113Inline BOOL sense_context() {
114
115 UW intnest;
116
117 Asm("move %0, "str_k0 :"=r"(intnest));
118
119 return(intnest > 0);
120}
121
122Inline BOOL sense_lock() {
123
124 return(!(current_sr() & SR_IE));
125}
126
127#endif /* _MACRO_ONLY */
128
129#define t_sense_lock sense_lock
130#define i_sense_lock sense_lock
131
132/*
133 * CPUロックとその解除(タスクコンテキスト用)
134 * CPUロック状æ…
135‹ã®åˆ¤æ–­ã¯ã€ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒ¬ã‚¸ã‚¹ã‚¿ã®IEビットを用いて判断している。
136 */
137
138#ifndef _MACRO_ONLY
139
140Inline void t_lock_cpu() {
141
142 disint(); /* cpu_insn.h */
143}
144
145Inline void t_unlock_cpu() {
146
147 enaint(); /* cpu_insn.h */
148}
149
150#endif /* _MACRO_ONLY */
151
152/*
153 * CPUロックとその解除(非タスクコンテキスト用)
154 */
155
156#define i_lock_cpu t_lock_cpu
157#define i_unlock_cpu t_unlock_cpu
158
159/*
160 * タスクディスパッチャ
161 */
162
163#ifndef _MACRO_ONLY
164
165/*
166 * 最高優å…
167ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.S)
168 * dispatch は、タスクコンテキストから呼び出されたサービスコール処理内
169で、
170 * CPUロック状æ…
171‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない。
172 */
173extern void dispatch(void);
174
175/*
176 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S)
177 * exit_and_dispatch は、CPUロック状æ…
178‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない。
179 */
180extern void exit_and_dispatch(void);
181
182/*
183 * 割込みハンドラ/CPU例外ハンドラの設定
184 */
185
186/* 割込みハンドラ/割込みマスク擬似テーブル */
187extern INT_TABLE int_table[ TMAX_ALL_INTNO ];
188
189/* 例外ハンドラ擬似テーブル */
190extern FP exc_table[ TMAX_CORE_EXCNO ];
191
192/*
193 * 割込みハンドラの設定
194 *
195 * ベクトル番号(割込み要因番号)intno の割込みハンドラの起動番地をinthdrに設定。
196 */
197
198Inline void define_inh(INTNO intno, FP inthdr) {
199
200 int_table[intno].inthdr = inthdr;
201}
202
203/*
204 * CPU例外ハンドラの設定
205 */
206
207Inline void define_exc(EXCNO excno, FP exchdr) {
208
209 exc_table[excno] = exchdr;
210}
211
212#endif /* _MACRO_ONLY */
213
214/*
215 * 割込みハンドラの出å…
216¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
217 */
218
219#define INTHDR_ENTRY(inthdr) extern void inthdr(void)
220#define INT_ENTRY(inthdr) inthdr
221
222/*
223 * CPU例外ハンドラの出å…
224¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
225 *
226 */
227#define EXCHDR_ENTRY(exchdr) extern void exchdr(VP sp)
228#define EXC_ENTRY(exchdr) exchdr
229
230/*
231 * CPU例外の発生した時のシステム状æ…
232‹ã®å‚ç…
233§
234 */
235
236#ifndef _MACRO_ONLY
237
238/*
239 * CPU例外の発生した時のコンテキスト判別
240 */
241Inline BOOL exc_sense_context(VP p_excinf) {
242
243 UW nest;
244
245 Asm( "move %0, "str_k0 : "=r"(nest) );
246
247 return( nest > 1 );
248 /* 1と比較するのは、現在実行中のCPU例外の分だけ割込みネスト
249 カウンタがインクリメントされているため */
250}
251
252/*
253 * CPU例外の発生した時のCPUロック状æ…
254‹ã®å‚ç…
255§
256 */
257Inline BOOL exc_sense_lock(VP p_excinf) {
258
259 /* Statusレジスタは、スタックに22番目に積まれている。
260 exc_stack(mips3.h), cpu_support.S 参ç…
261§ */
262 return( !( *((UW *)p_excinf + 21) & SR_IE) );
263}
264
265/*
266 * プロセッサ依存の初期化
267 */
268extern void cpu_initialize(void);
269
270/*
271 * プロセッサ依存の終了時処理
272 */
273extern void cpu_terminate(void);
274
275#endif /* _MACRO_ONLY */
276
277/*============================================================================*/
278/* å…
279±é€šãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¯ãªã„、独自の部分 */
280
281/* プロセッサコア+割込みコントローラに設定する割込みマスクのチェック */
282#define CHECK_IPM(ipm) CHECK_CORE_IPM( (ipm.core >> 8) & 0xff ); \
283 CHECK_ICU_IPM( ipm.icu )
284
285#ifndef _MACRO_ONLY
286
287/*
288 * 割り込みレベルの設定(å…
289±é€šéƒ¨ã‹ã‚‰ã¯å‘¼ã³å‡ºã•ã‚Œãªã„)
290 */
291
292Inline void all_set_ilv(INTNO intno, IPM *ipm) {
293
294 /* MIPSコアの intmask テーブルの設定 */
295 int_table[intno].intmask = SR_BEV | (ipm->core) | SR_IE;
296 /* 割込みベクタを、kseg1に持ってくるため、BEV=1 */
297
298 /* 割込みコントローラの割込みマスクテーブルの設定 */
299 /* (割込みレベルの設定) */
300 icu_set_ilv( intno, &(ipm->icu) );
301}
302
303#endif /* _MACRO_ONLY */
304
305/*
306 * ログ出力用の関数
307 */
308
309#ifndef _MACRO_ONLY
310
311/* 登録されていない割込み・例外発生時のログ出力 (cpu_config.c, cpu_support.S) */
312extern void cpu_experr( EXCSTACK *sp, UW SR, UW CR );
313
314#endif /* _MACRO_ONLY */
315
316#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.