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

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

initial

File size: 7.2 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,2001 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2002 by Monami software, Limited Partners.
9 * Copyright (C) 2008- by Monami Software Limited Partnership, JAPAN
10 *
11 * 上記著作権者
12は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18 * スコード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再é…
21å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
22å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
23 * 者
24マニュアルなど)に,上記の著作権表示,この利用条件および下記
25 * の無保証規定を掲載すること.
26 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
27 * 用できない形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
29 * と.
30 * (a) 再é…
31å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
32マニュアルなど)に,上記の著
33 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 * (b) 再é…
35å¸ƒã®å½¢æ…
36‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
37 * 報告すること.
38 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
39 * 害からも,上記著作権者
40およびTOPPERSプロジェクトをå…
41è²¬ã™ã‚‹ã“と.
42 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
43 * 由に基づく請求からも,上記著作権者
44およびTOPPERSプロジェクトを
45 * å…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
51 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
52 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
53 * の責任を負わない.
54 *
55 * @(#) $Id: cpu_config.h,v 1.1 2004/07/21 02:49:36 monaka Exp $
56 */
57
58/*
59 * プロセッサ依存モジュール(i386用)
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#ifndef _MACRO_ONLY
75#include <cpu_insn.h>
76#endif /* _MACRO_ONLY */
77
78/*
79 * TCB 関連の定義
80 *
81 * cpu_context.h にå…
82¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
83§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
84 * cpu_context.h にはå…
85¥ã‚Œã‚‰ã‚Œãªã„.
86 */
87
88/*
89 * TCB 中のフィールドのビット幅
90の定義
91 */
92#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
93 */
94#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
95 */
96#define TBIT_TCB_TWAIT 8 /* twait フィールドのビット幅
97 */
98
99#ifndef _MACRO_ONLY
100/*
101 * タスクコンテキストブロックの定義
102 */
103typedef struct task_context_block {
104 VP esp; /* スタックポインタ */
105 FP eip; /* プログラムカウンタ */
106} CTXB;
107
108/*
109 * 割り込みのネスト回数
110 *
111 * 1以上の時は非タスクコンテキストになる。割り込みハンドラや例外ハンドラの
112 * 出å…
113¥å£ã§ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆãƒ»ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã•ã‚Œã‚‹ã€‚
114 */
115extern UW nest;
116
117/*
118 * システム状æ…
119‹å‚ç…
120§
121 */
122
123Inline BOOL
124sense_context()
125{
126 return (nest != 0);
127}
128
129Inline BOOL
130sense_lock()
131{
132 unsigned _int32_ eflag;
133
134 Asm("pushf");
135 Asm("popl %0" : "=g"(eflag));
136
137 return ((eflag & 0x200) == 0);
138}
139
140#define t_sense_lock sense_lock
141#define i_sense_lock sense_lock
142
143/*
144 * CPUロックとその解除
145 *
146 */
147
148Inline void x_lock_cpu(void) {
149 disint();
150 Asm("":::"memory");
151}
152
153#define i_lock_cpu() x_lock_cpu()
154#define t_lock_cpu() x_lock_cpu()
155
156Inline void x_unlock_cpu(void) {
157 Asm("":::"memory");
158 enaint();
159}
160
161#define i_unlock_cpu() x_unlock_cpu()
162#define t_unlock_cpu() x_unlock_cpu()
163
164/*
165 * タスクディスパッチャ
166 */
167
168/*
169 * 最高優å…
170ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.S)
171 *
172 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
173 * 内
174で,CPUロック状æ…
175‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
176 */
177extern void dispatch(void);
178
179/*
180 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S)
181 *
182 * exit_and_dispatch は,CPUロック状æ…
183‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
184 */
185extern void exit_and_dispatch(void);
186
187/*
188 * CPU例外ハンドラの設定
189 */
190
191/*
192 * 例外ハンドラの出å…
193¥å£å‡¦ç†ï¼ˆcpu_support.S)
194 */
195extern void exception0(void);
196extern void exception1(void);
197extern void exception2(void);
198extern void exception3(void);
199extern void exception4(void);
200extern void exception5(void);
201extern void exception6(void);
202extern void exception7(void);
203extern void exception8(void);
204extern void exception9(void);
205extern void exception10(void);
206extern void exception11(void);
207extern void exception12(void);
208extern void exception13(void);
209extern void exception14(void);
210extern void exception16(void);
211extern void exception17(void);
212extern void exception18(void);
213extern void exception19(void);
214
215/*
216 * CPU例外ハンドラのテーブル(cpu_config.c)
217 *
218 * CPU例外ハンドラは一旦このテーブルに登録され、別に用意された出å…
219¥å£å‡¦ç†
220 * を呼び出す。
221 */
222extern FP exc_table[0x20];
223
224/*
225 * CPU例外ハンドラの設定
226 * ベクトル番号 excno のCPU例外ハンドラの起動番地を exchdr に設定
227 */
228extern void define_exc(EXCNO excno, FP exchdr);
229
230/*
231 * CPU例外ハンドラの出å…
232¥å£å‡¦ç†
233 */
234
235/*
236 * CPU例外ハンドラの出å…
237¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
238 */
239
240#define EXCHDR_ENTRY(exchdr) extern void exchdr(VP p_excinf)
241
242#define EXC_ENTRY(exchdr) exchdr
243
244/*
245 * CPU例外の発生した時のシステム状æ…
246‹ã®å‚ç…
247§
248 */
249
250/*
251 * CPU例外の発生した時のコンテキストの参ç…
252§
253 */
254Inline BOOL
255exc_sense_context(VP p_excinf)
256{
257 return (nest > 1);
258}
259
260/*
261 * CPU例外の発生した時のCPUロック状æ…
262‹ã®å‚ç…
263§
264 */
265Inline BOOL
266exc_sense_lock(VP p_excinf)
267{
268 return ((((UW *)p_excinf)[3] & 0x200) == 0);
269}
270
271/*
272 * プロセッサ依存の初期化
273 */
274extern void cpu_initialize(void);
275
276/*
277 * プロセッサ依存の終了時処理
278 */
279extern void cpu_terminate(void);
280
281/*
282 * i386セグメントデスクリプタの設定
283 */
284extern void set_segment_descriptor(int sel, unsigned addr, unsigned limit, unsigned type, unsigned dpl);
285extern void set_gate_descriptor(int sel, unsigned selector, void *func, unsigned type, unsigned dpl);
286
287#endif /* _MACRO_ONLY */
288#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.