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

Last change on this file since 26 was 26, checked in by ykominami, 10 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) 2006 by Monami Software Limited Partnership, JAPAN
9 * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory
10 * Graduate School of Information Science, Nagoya Univ., JAPAN
11 *
12 * 上記著作権者
13は,以下の (1)〜(4) の条件か,Free Software Foundation
14 * によってå…
15¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
16 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
17 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
18å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
19 * 利用と呼ぶ)することを無償で許諾する.
20 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
21 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
22 * スコード中に含まれていること.
23 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
24 * 用できる形で再é…
25å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
26å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
27 * 者
28マニュアルなど)に,上記の著作権表示,この利用条件および下記
29 * の無保証規定を掲載すること.
30 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
31 * 用できない形で再é…
32å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
33 * と.
34 * (a) 再é…
35å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
36マニュアルなど)に,上記の著
37 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
38 * (b) 再é…
39å¸ƒã®å½¢æ…
40‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
41 * 報告すること.
42 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
43 * 害からも,上記著作権者
44およびTOPPERSプロジェクトをå…
45è²¬ã™ã‚‹ã“と.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
48お
49 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
50 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
51 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
52 *
53 * @(#) $Id: cpu_config.h,v 1.11 2007/05/30 03:56:47 honda Exp $
54 */
55
56//#include <sys_config.h>
57
58/*
59 * プロセッサ依存モジュール(M32R用)
60 */
61
62#ifndef _CPU_CONFIG_H_
63#define _CPU_CONFIG_H_
64
65#include <cpu_rename.h>
66
67#include "m32r.h"
68
69/*
70 * chg_ipm/get_ipm をサポートするかどうかの定義
71 */
72/*#define SUPPORT_CHG_IPM*/
73
74/*
75 * TCB 関連の定義
76 *
77 * cpu_context.h にå…
78¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
79§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
80 * cpu_context.h にはå…
81¥ã‚Œã‚‰ã‚Œãªã„.
82 */
83
84/*
85 * TCB 中のフィールドのビット幅
86の定義
87 */
88#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
89 */
90#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
91 */
92
93#ifndef _MACRO_ONLY
94/*
95 * タスクコンテキストブロックの定義
96 */
97typedef struct task_context_block {
98 unsigned long sp; /* スタックポインタ */
99 FP pc; /* プログラムカウンタ */
100} CTXB;
101
102#define t_sense_lock sense_lock
103#define i_sense_lock sense_lock
104
105/*
106 * CPUロックとその解除
107 *
108 * CPUロックはCPUが持つ割込み要求許可/禁止に対応付ける。PSWのIEビット
109 * を操作する。
110 */
111
112#define t_lock_cpu lock_cpu
113#define i_lock_cpu lock_cpu
114#define t_unlock_cpu unlock_cpu
115#define i_unlock_cpu unlock_cpu
116#define ena_int lock_cpu
117#define dis_int unlock_cpu
118
119Inline void
120lock_cpu()
121{
122 __asm("mvfc r0, psw \n"
123 "and3 r0, r0, 0xffbf \n"
124 "mvtc r0, psw " : : : "r0");
125}
126
127Inline void
128unlock_cpu()
129{
130 __asm("mvfc r0, psw \n"
131 "or3 r0, r0, 0x40 \n"
132 "mvtc r0, psw " : : : "r0");
133}
134
135/*
136 * sense_context
137 *
138 * ユーザスタックを使っているならタスクコンテキスト
139 */
140
141Inline BOOL
142sense_context(void)
143{
144 int psw;
145 __asm("mvfc %0, psw" : "=r"(psw));
146 return (psw & 0x80) != 0 ? FALSE : TRUE;
147}
148
149/*
150 * sense_lock
151 *
152 * 割込み禁止ならCPUロック状æ…
153‹
154 */
155Inline BOOL
156sense_lock(void)
157{
158 int psw;
159 __asm("mvfc %0, psw" : "=r"(psw));
160 return (psw & 0x40) != 0 ? FALSE : TRUE;
161}
162
163/*
164 * タスクディスパッチャ
165 */
166
167/*
168 * 最高優å…
169ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.S)
170 *
171 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
172 * 内
173で,CPUロック状æ…
174‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
175 */
176extern void dispatch(void);
177
178/*
179 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S)
180 *
181 * exit_and_dispatch は,CPUロック状æ…
182‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
183 */
184extern void exit_and_dispatch(void);
185
186/*
187 * 割込みハンドラ/CPU例外ハンドラの設定
188 */
189
190extern FP InterruptHandlerEntry[NUM_INTERRUPT];
191extern FP ExceptionHandlerEntry[NUM_EXCEPTION];
192
193/*
194 * 割込みハンドラの設定
195 *
196 * ベクトル番号 inhno の割込みハンドラの起動番地を inthdr に設定する.
197 */
198Inline void
199define_inh(INHNO inhno, FP inthdr)
200{
201 InterruptHandlerEntry[inhno-1] = inthdr;
202}
203
204/*
205 * CPU例外ハンドラの設定
206 *
207 * ベクトル番号 excno のCPU例外ハンドラの起動番地を exchdr に設定する.
208 */
209Inline void
210define_exc(EXCNO excno, FP exchdr)
211{
212 ExceptionHandlerEntry[excno-1] = exchdr;
213}
214
215/*
216 * 割込みハンドラ/CPU例外ハンドラの出å…
217¥å£å‡¦ç†
218 */
219
220
221/*
222 * 割込みハンドラの出å…
223¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
224 *
225 * reqflg をチェックする前に割込みを禁止しないと,reqflg をチェック後
226 * に起動された割込みハンドラ内
227でディスパッチが要求された場合に,ディ
228 * スパッチされない.
229 */
230#define INT_ENTRY(hdr) hdr
231#define INTHDR_ENTRY(entry) extern void entry();
232
233/*
234 * CPU例外ハンドラの出å…
235¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
236 *
237 * CPU例外ハンドラは,非タスクコンテキストで実行する.そのため,CPU例
238 * 外ハンドラを呼び出す前に割込みモードに移行し,リターンしてきた後に
239 * å…
240ƒã®ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã™ï¼Žå…
241ƒã®ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã™ãŸã‚ã«ï¼Œå‰²è¾¼ã¿ãƒ¢ãƒ¼ãƒ‰ã«ç§»è¡Œã™ã‚‹å‰
242 * の SR を割込みスタック上に保存する.CPU例外がタスクコンテキストで
243 * 発生し,reqflg が TRUE になった時に,ret_exc へ分岐する.
244 * reqflg をチェックする前に割込みを禁止しないと,reqflg をチェック後
245 * に起動された割込みハンドラ内
246でディスパッチが要求された場合に,ディ
247 * スパッチされない.
248 */
249#define EXC_ENTRY(hdr) hdr
250#define EXCHDR_ENTRY(entry) extern void entry();
251
252/*
253 * CPU例外の発生した時のシステム状æ…
254‹ã®å‚ç…
255§
256 */
257
258/*
259 * CPU例外の発生した時のコンテキスト
260 *
261 * 非タスクコンテキストの場合にTRUEを返す.p_excinfに例外ハンドラを呼
262 * び出す際のスタックポインタが格納されている(cpu_support.S)ので,
263 * そこから例外発生時のpswを取得しコンテキストを判断する.
264 */
265Inline BOOL
266exc_sense_context(VP p_excinf)
267{
268 return (((unsigned int*)p_excinf)[1] & 0x8000) == 0;
269}
270
271/*
272 * CPU例外の発生した時のCPUロック状æ…
273‹ã®å‚ç…
274§
275 */
276Inline BOOL
277exc_sense_lock(VP p_excinf)
278{
279 return (((unsigned int*)p_excinf)[1] & 0x4000) == 0;
280}
281
282/*
283 * プロセッサ依存の初期化
284 */
285extern void cpu_initialize(void);
286
287/*
288 * プロセッサ依存の終了時処理
289 */
290extern void cpu_terminate(void);
291
292/*
293 * 現在処理中の割込み優å…
294ˆåº¦
295 */
296extern ER get_ipr(IPR *);
297
298#endif /* _MACRO_ONLY */
299#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.