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

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

initial

File size: 10.6 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-2004 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2001-2004 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 * @(#) $Id: cpu_config.h,v 1.2 2004/10/07 17:10:56 honda Exp $
53 */
54
55/*
56 * プロセッサ依存モジュール(PowerPC用)
57 *     カーネル内
58部で使用する定義
59 *      データ型、マクロ、関数のプロトタイプ宣言
60 *
61 * このインクルードファイルは,t_config.h のみからインクルードされる.
62 * 他のファイルから直接インクルードしてはならない.
63 */
64
65#ifndef _CPU_CONFIG_H_
66#define _CPU_CONFIG_H_
67
68/*
69 * カーネルの内
70部識別名のリネーム
71 */
72#include <cpu_rename.h>
73
74/*
75 * PowerPCプロセッサの内
76部レジスタの定義
77 */
78#include <powerpc.h>
79
80
81/*
82 * プロセッサの特殊命令のインライン関数定義
83 */
84#ifndef _MACRO_ONLY
85#include <cpu_insn.h>
86#endif /* _MACRO_ONLY */
87
88
89/*
90 * TCB 中のフィールドのビット幅
91の定義
92 *
93 * cpu_context.h にå…
94¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
95§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
96 * cpu_context.h にはå…
97¥ã‚Œã‚‰ã‚Œãªã„.
98 */
99#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
100 */
101#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
102 */
103
104/*
105 * スタックに必
106要なマージン
107 *
108 * PowerPC EABIで規定されているコーリング・コンベンションでは関数呼び
109 * 出し時のフレームスタックポインタが指している8バイトå…
110ˆ(sp+4)〜
111 * (sp+7)番地に呼ばれた側の情
112報が待
113避される。そのため、アセンブラルー
114 * チンからC言語ルーチンを呼び出す箇所(特に割込みコントローラ依存
115 * 部)では注意が必
116要である。
117 * å…
118·ä½“的には以下の箇所が該当する。
119 *  (1) スタートアップルーチン
120 *  (2) タスク起動
121 *   (2-1) タスク例外処理ルーチン起動
122 *  (3) 割込みハンドラ起動
123 *  (4) CPU例外ルーチン起動
124 *
125 *              スタックが伸びる方向
126 *                  ↑
127 *   関数呼び出し前のsp→ ----------------------
128 *         | |
129 *        +4 ---------------------- 
130 *        | |←C言語ルーチンの呼び出し
131 *        +8 ---------------------- により書き込まれる
132 *  
133 *  備考
134 *   64ビット化の際には注意が必
135要である。
136 *  
137 */
138#define STACK_MARGIN 8
139
140
141#ifndef _MACRO_ONLY
142/*
143 * タスクコンテキストブロックの定義
144 *  spが4バイト境界であることを明示するため、
145 *  UW*型で宣言している。
146 */
147
148typedef struct task_context_block {
149 UW *sp; /* スタックポインタ */
150 FP pc; /* プログラムカウンタ */
151} CTXB;
152
153/*
154 * システム状æ…
155‹å‚ç…
156§
157 */
158
159/*
160 * コンテキスト参ç…
161§
162 *
163 * 戻り値
164 *  TRUE :非タスクコンテキスト
165 *  FALSE:タスクコンテキスト
166 *
167 * SPRG0を割込みネストカウンタに用いている
168 * 割込みネストカウンタを読み出した直後に割込みが発生しても、
169 * 戻ったときにはコンテキストもå…
170ƒã«æˆ»ã£ã¦ã„ã‚‹
171 *
172 */
173Inline BOOL
174sense_context()
175{
176 UW intnest;
177
178 intnest = current_sprg0(); /* intnest ← SPRG0 */
179 return(intnest > 0);
180}
181
182/*
183 * CPUロック状æ…
184‹å‚ç…
185§
186 *
187 * 戻り値
188 *  TRUE :CPUロック状æ…
189‹
190 *  FALSE:CPUロック解除状æ…
191‹
192 *
193 * MSRを読み出した直後に割込みが発生しても、戻ったときには
194 * MSRもå…
195ƒã«æˆ»ã£ã¦ã„ã‚‹
196 *
197 */
198Inline BOOL
199sense_lock()
200{
201 return(!(current_msr() & MSR_EE));
202}
203
204#define t_sense_lock sense_lock
205#define i_sense_lock sense_lock
206
207
208
209/*
210 * CPUロックとその解除
211 *
212 *  MSRのEEビットでCPUロックを実現している。
213 *  割込みマスクは割込みコントローラにある。
214 *  割込みå…
215¨ç¦æ­¢ã¨å‰²è¾¼ã¿ãƒžã‚¹ã‚¯ãŒç‹¬ç«‹ã—ているため、
216 *  単純に実装
217できる。
218 */
219
220/* タスクコンテキスト用 */
221#define t_lock_cpu disint /* cpu_insn.h */
222#define t_unlock_cpu enaint /* cpu_insn.h */
223
224/* 非タスクコンテキスト用 */
225#define i_lock_cpu disint /* cpu_insn.h */
226#define i_unlock_cpu enaint /* cpu_insn.h */
227
228
229/*
230 * タスクディスパッチャ
231 */
232
233/*
234 * 最高優å…
235ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.S)
236 *
237 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
238 * 内
239で,CPUロック状æ…
240‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
241 */
242extern void dispatch(void);
243
244/*
245 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S)
246 *
247 * exit_and_dispatch は,CPUロック状æ…
248‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
249 */
250extern void exit_and_dispatch(void);
251
252/*
253 * 割込みハンドラ/CPU例外ハンドラの設定
254 */
255
256/*
257 * 割込みハンドラの擬似テーブル
258 */
259extern FP int_table[];
260
261/*
262 * 例外ベクタの擬似テーブル
263 */
264extern FP exc_table[];
265
266
267Inline void
268define_inh(INHNO intno, FP inthdr)
269{
270 int_table[intno] = inthdr;
271
272#ifdef GDB_STUB /* 保留 */
273
274#endif
275}
276
277/*
278 * CPU例外ハンドラの設定
279 */
280
281Inline void
282define_exc(EXCNO excno, FP exchdr)
283{
284 exc_table[excno] = exchdr;
285
286#ifdef GDB_STUB /* 保留 */
287
288#endif
289}
290
291
292/*
293 * 割込みハンドラの出å…
294¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
295 */
296
297#define INTHDR_ENTRY(inthdr) extern void inthdr(void)
298
299#define INT_ENTRY(inthdr) inthdr
300
301/*
302 * CPU例外ハンドラの出å…
303¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
304 *
305 */
306#define EXCHDR_ENTRY(exchdr) extern void exchdr(VP sp)
307
308#define EXC_ENTRY(exchdr) exchdr
309
310/*
311 * CPU例外の発生した時のシステム状æ…
312‹ã®å‚ç…
313§
314 */
315
316/*
317 * CPU例外の発生した時のコンテキスト判別
318 *
319 * 戻り値
320 *  TRUE :CPU例外発生時に非タスクコンテキスト
321 *  FALSE:CPU例外発生時にタスクコンテキスト
322 *
323 */
324Inline BOOL
325exc_sense_context(VP p_excinf)
326{
327 UW intnest;
328
329 intnest = current_sprg0(); /* intnest ← SPRG0 */
330
331 /*
332 * 1と比較するのは、現在実行中のCPU例外の分
333 * 割込みネストカウンタがインクリメントされているため
334 */
335 return(intnest > 1);
336}
337
338
339/*
340 * 例外ハンドラの引数p_excinfが指し示す番地から
341 *             SSR1レジスタまでのオフセット
342 *
343 *   MSRのコピーSSR1レジスタは、スタックに(OFFSET_SSR1+1)番目に
344 *   積まれている。
345 *   support.SのSAVE_GPR0_12_SPRGを参ç…
346§
347 */
348#define OFFSET_SSR1 12
349
350/*
351 * CPU例外の発生した時のCPUロック状æ…
352‹ã®å‚ç…
353§
354 *
355 * 戻り値
356 *  TRUE :CPU例外発生時にCPUロック状æ…
357‹
358 *  FALSE:CPU例外発生時にCPUロック解除状æ…
359‹
360 *
361 */
362Inline BOOL
363exc_sense_lock(VP p_excinf)
364{
365 UW ssr1;
366
367 ssr1 = *((volatile UW *)p_excinf + OFFSET_SSR1);
368 return( !(ssr1 & MSR_EE) );
369}
370
371/*
372 * プロセッサ依存の初期化
373 */
374extern void cpu_initialize(void);
375
376/*
377 * プロセッサ依存の終了時処理
378 */
379extern void cpu_terminate(void);
380
381/*
382 * 下記のログ出力時のスタック構造の定義
383 */
384typedef struct exc_stack {
385 UW r0;
386 UW r3;
387 UW r4;
388 UW r5;
389 UW r6;
390 UW r7;
391 UW r8;
392 UW r9;
393 UW r10;
394 UW r11;
395 UW r12;
396 UW srr0; /* 待
397避/復帰レジスタ0 */
398 UW srr1; /* 待
399避/復帰レジスタ1 */
400 UW lr; /* リンク・レジスタ */
401 UW ctr; /* カウント・レジスタ */
402 UW cr; /* コンディション・レジスタ */
403 UW xer; /* 整数オペレーションの条件識別レジスタ */
404 /*  (キャリーやオーバフローなど) */
405 UW exc_no; /* 例外番号 */
406} EXCSTACK;
407
408/* スタック上のデータの表示 */
409void syslog_data_on_stack(EXCSTACK *sp);
410
411/*
412 * 登録されていない例外発生時のログ出力 (cpu_config.c)
413 */
414extern void no_reg_exception(EXCSTACK *);
415
416
417
418#endif /* _MACRO_ONLY */
419#endif /* _CPU_CONFIG_H_ */
420
421/* end of file */
Note: See TracBrowser for help on using the repository browser.