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

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

initial

File size: 8.8 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 *
9 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: cpu_config.h,v 1.15 2003/12/15 07:19:22 takayuki Exp $
51 */
52
53
54/*
55 * プロセッサ依存モジュール(Windows用)
56 */
57
58#ifndef _CPU_CONFIG_H_
59#define _CPU_CONFIG_H_
60
61/*
62 * Windows-HAL独自のインクルードファイル
63 */
64
65
66/*
67 * Windows-HAL独自の定義
68 */
69
70#define FPU_CONTEXTSIZE 108 /* 浮動小数点ユニットが退避するコンテキストの大きさ */
71
72/*
73 * chg_ims/ref_ims をサポートするかどうかの定義
74 */
75#define SUPPORT_CHG_IMS
76
77/*
78 * TCB 関連の定義
79 *
80 * cpu_context.h にå…
81¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
82§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
83 * cpu_context.h にはå…
84¥ã‚Œã‚‰ã‚Œãªã„.
85 */
86
87/*
88 * TCB 中のフィールドのビット幅
89の定義
90 */
91#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
92 */
93#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
94 */
95
96
97#ifndef _MACRO_ONLY
98
99#include <s_services.h>
100
101/*
102 * タスクコンテキストブロックの定義
103 */
104typedef struct task_context_block {
105 HANDLE ThreadHandle; //タスクに割り当てられたスレッドのハンドル
106 DWORD ThreadID; //タスクに割り当てられたスレッドのID
107 unsigned int InterruptLevel; //このタスクが動いているときの割込みマスクレベル
108} CTXB;
109
110/*
111 * CPU状æ…
112‹ãƒ•ãƒ©ã‚°
113 */
114#define CPU_STAT_LOCK 0x01 //CPUロック状æ…
115‹ã§ã™
116#define CPU_STAT_EXC 0x02 //例外処理中です
117#define CPU_STAT_DOUBLEFAULT 0x04 //ダブルフォルトが起こってます
118
119extern volatile char CPUStatus;
120
121/*
122 * CPU例外ハンドラ
123 */
124
125/*#define EXCHNO_ZDIV EXCEPTION_INT_DIVIDE_BY_ZERO */
126
127/*
128 * システム状æ…
129‹å‚ç…
130§
131 */
132
133Inline BOOL
134sense_context()
135{
136 /* 割込みå…
137¨è¨±å¯ã§ãªã‘れば非タスクコンテキストです */
138 return (CurrentInterruptLevel != 0) ? TRUE : FALSE;
139}
140
141Inline BOOL
142sense_lock()
143{
144 /* 例外処理中 or ロック状æ…
145‹ãƒ•ãƒ©ã‚°ãŒç«‹ã£ã¦ã„れば CPUロック状æ…
146‹ã§ã™ */
147 return (CPUStatus & (CPU_STAT_LOCK|CPU_STAT_EXC)) != 0 ? TRUE : FALSE;
148}
149
150#define t_sense_lock sense_lock
151#define i_sense_lock sense_lock
152
153/*
154 * CPUロックとその解除(タスクコンテキスト用)
155 *
156 * task_intmask は,chg_ipm をサポートするための変数.chg_ipm をサポー
157 * トしない場合には,task_intmask が常に 0 になっていると考えればよい.
158 */
159
160#include "debugout.h"
161#include "device.h"
162
163unsigned long task_intmask;
164
165Inline void
166i_lock_cpu()
167{ dis_int(0); }
168
169Inline void
170i_unlock_cpu()
171{ ena_int(0); }
172
173#define t_lock_cpu i_lock_cpu
174#define t_unlock_cpu i_unlock_cpu
175
176/*
177 * タスクディスパッチャ
178 */
179
180/*
181 * 最高優å…
182ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ
183 *
184 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
185 * 内
186で,CPUロック状æ…
187‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
188 */
189extern void dispatch();
190extern void idispatch();
191
192/*
193 * 現在のコンテキストを捨ててディスパッチ
194 *
195 * exit_and_dispatch は,CPUロック状æ…
196‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
197 */
198
199extern void exit_and_dispatch(void);
200
201/*
202 * 割込みハンドラ/CPU例外ハンドラの設定
203 */
204
205
206/*
207 * 割込みハンドラの設定
208 *
209 * ベクトル番号 inhno の割込みハンドラの起動番地を inthdr に設定する.
210 */
211
212Inline void
213define_inh(INHNO inhno, FP inthdr)
214{ def_int((unsigned int)inhno,(void *)inthdr); }
215
216/*
217 * CPU例外ハンドラの設定
218 *
219 * ベクトル番号 excno のCPU例外ハンドラの起動番地を exchdr に設定する.
220 */
221Inline void
222define_exc(EXCNO excno, FP exchdr)
223{ def_exc( (DWORD)excno, (void *)exchdr); }
224
225/*
226 * 割込みハンドラ/CPU例外ハンドラの出å…
227¥å£å‡¦ç†
228 */
229
230/*
231 * 割込みハンドラの出å…
232¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
233 *
234 * å…
235¨ã¦ã®å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã¯ãƒ‡ã‚£ã‚¹ãƒ‘ッチャを起動するSIGUSR1をマスクして
236 * 動作する。
237 * reqflg をチェックする前に割込みを禁止しないと,reqflg をチェック後
238 * に起動された割込みハンドラ内
239でディスパッチが要求された場合に,ディ
240 * スパッチされない.
241 */
242
243 /* Windows-HALにおいてこの処理は割込みエミュレータに一任している */
244
245#define INT_ENTRY(hdr) hdr
246#define INTHDR_ENTRY(inthdr) extern void inthdr(void)
247
248/*
249 * CPU例外ハンドラの出å…
250¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
251 *
252 * CPU例外ハンドラは,非タスクコンテキストで実行する.そのため,CPU例
253 * 外ハンドラを呼び出す前に割込みモードに移行し,リターンしてきた後に
254 * å…
255ƒã®ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã™ï¼Žå…
256ƒã®ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã™ãŸã‚ã«ï¼Œå‰²è¾¼ã¿ãƒ¢ãƒ¼ãƒ‰ã«ç§»è¡Œã™ã‚‹å‰
257 * の SR を割込みスタック上に保存する.CPU例外がタスクコンテキストで
258 * 発生し,reqflg が TRUE になった時に,ret_exc へ分岐する.
259 * reqflg をチェックする前に割込みを禁止しないと,reqflg をチェック後
260 * に起動された割込みハンドラ内
261でディスパッチが要求された場合に,ディ
262 * スパッチされない.
263 */
264
265#define EXC_ENTRY(hdr) hdr
266#define EXCHDR_ENTRY(inthdr) extern void inthdr(void)
267
268/*
269 * CPU例外の発生した時のシステム状æ…
270‹ã®å‚ç…
271§
272 */
273
274/*
275 * CPU例外の発生した時のディスパッチ
276 *
277 * WindowsHALは専用フラグを持っているんで、割込み前の情
278報はそのまま
279 * 格納されている。
280 */
281#define exc_sense_context sense_context
282
283/*
284 * CPU例外の発生した時のCPUロック状æ…
285‹ã®å‚ç…
286§
287 */
288#define exc_sense_lock sense_lock
289
290/*
291 * プロセッサ依存の初期化
292 */
293extern void cpu_initialize(void);
294
295/*
296 * プロセッサ依存の終了時処理
297 */
298extern void cpu_terminate(void);
299
300/*
301 * atexitで登録された関数の読出し (Windowsは何もしない -> CRTに任せる)
302 */
303extern void call_atexit(void);
304
305/*
306 * Windows Dedicated Routines
307 */
308extern LONG WINAPI HALExceptionHandler( EXCEPTION_POINTERS * exc );
309
310/*
311 * 致命的な失敗に対する対処ルーチン
312 */
313extern void FatalAssertion(int exp, LPCSTR format, ... );
314
315
316/*
317 * ログの出力制御ルーチン
318 */
319extern void set_logcontrol(BOOL enable);
320
321/*
322 * カーネルデバッグ用printf
323 */
324
325#ifdef KERNEL_DEBUG_MODE
326# define kprintf(x) _kernel_debugprintf x
327#else
328# define kprintf(x)
329#endif
330
331extern void _kernel_debugprintf(const char * format, ... );
332
333#endif /* _MACRO_ONLY */
334#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.