|
|
cpu_config.h説明を見る。00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory 00007 * Graduate School of Information Science, Nagoya Univ., JAPAN 00008 * 00009 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00010 * によって公表されている GNU General Public License の Version 2 に記 00011 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00012 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00013 * 利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * 00031 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00032 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00033 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00034 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00035 * 00036 * @(#) $Id: cpu_config.h,v 1.1 2005/04/03 13:33:19 honda Exp $ 00037 */ 00038 00043 #ifndef _CPU_CONFIG_H_ 00044 #define _CPU_CONFIG_H_ 00045 00046 /* 00047 * カーネルの内部識別名のリネーム 00048 */ 00049 #include <cpu_rename.h> 00050 00051 00052 /* 00053 * プロセッサの特殊命令のインライン関数定義 00054 */ 00055 #ifndef _MACRO_ONLY 00056 #include <cpu_insn.h> 00057 #endif /* _MACRO_ONLY */ 00058 00059 00060 /* 00061 * TCB 関連の定義 00062 * 00063 * cpu_context.h に入れる方がエレガントだが,参照の依存性の関係で, 00064 * cpu_context.h には入れられない. 00065 */ 00066 00067 /* 00068 * TCB 中のフィールドのビット幅の定義 00069 */ 00070 #define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅 */ 00071 #define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅 */ 00072 00073 00074 #ifndef _MACRO_ONLY 00075 /* 00076 * タスクコンテキストブロックの定義 00077 */ 00078 typedef struct task_context_block { 00079 VP sp; /* スタックポインタ */ 00080 FP pc; /* プログラムカウンタ */ 00081 } CTXB; 00082 00083 00084 /* 00085 * 割り込みのネスト回数のカウント 00086 */ 00087 extern UW interrupt_count; 00088 00089 /* 00090 * システム状態参照 00091 */ 00092 Inline BOOL 00093 sense_context() 00094 { 00095 return(interrupt_count > 0); 00096 } 00097 00098 Inline BOOL 00099 sense_lock() 00100 { 00101 return((current_status() & STATUS_PIE) == 0); 00102 } 00103 00104 #define t_sense_lock sense_lock 00105 #define i_sense_lock sense_lock 00106 00107 00108 /* 00109 * CPUロックとその解除 00110 */ 00111 #define t_lock_cpu lock_cpu 00112 #define i_lock_cpu lock_cpu 00113 #define t_unlock_cpu unlock_cpu 00114 #define i_unlock_cpu unlock_cpu 00115 00116 Inline void 00117 lock_cpu() 00118 { 00119 disint(); 00120 } 00121 00122 Inline void 00123 unlock_cpu() 00124 { 00125 enaint(); 00126 } 00127 00132 Inline VP 00133 init_tsk_lock() 00134 { 00135 mutex_init(TSK_MUTEX, PRCID); 00136 return((VP)TSK_MUTEX); 00137 } 00138 00143 Inline VP 00144 init_obj_lock() 00145 { 00146 mutex_init(OBJ_MUTEX, PRCID); 00147 return((VP)OBJ_MUTEX); 00148 } 00149 00150 00151 /* 00152 * タスクディスパッチャ 00153 */ 00154 00155 /* 00156 * 最高優先順位タスクへのディスパッチ(cpu_support.S) 00157 * 00158 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理 00159 * 内で,CPUロック状態で呼び出さなければならない. 00160 */ 00161 extern void dispatch(void); 00162 00163 /* 00164 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S) 00165 * 00166 * exit_and_dispatch は,CPUロック状態で呼び出さなければならない. 00167 */ 00168 extern void exit_and_dispatch(void); 00169 00170 00171 /* 00172 * 割込みハンドラ/CPU例外ハンドラの設定 00173 */ 00174 00175 /* 00176 * 割り込みハンドラ/ビットマスクのテーブル 00177 * int_handler_table[] は割込みハンドラを登録するテーブル 00178 * int_bit_table[]は割込みの優先順位に応じたビットのテーブルであり, 00179 * 00180 */ 00181 extern FP int_handler_table[MAX_INT_NUM]; 00182 extern UW int_bit_table[MAX_INT_NUM]; 00183 00184 /* 00185 * CPU例外ハンドラの疑似テーブル 00186 */ 00187 extern FP exc_handler_table[]; 00188 00189 /* 00190 * 00191 * 割込みハンドラの設定 00192 * 00193 * 割込み優先度 inhno の割込みハンドラの起動番地を inthdr に設定する. 00194 * 疑似テーブルに登録する 00195 * 00196 */ 00197 00198 Inline void 00199 define_inh(INHNO inhno, FP inthdr) 00200 { 00201 int_handler_table[inhno] = inthdr; 00202 } 00203 00204 /* 00205 * CPU例外ハンドラの設定 00206 * 擬似ベクターテーブルに登録 00207 */ 00208 Inline void 00209 define_exc(EXCNO excno, FP exchdr) 00210 { 00211 exc_handler_table[excno] = exchdr; 00212 } 00213 00214 00215 /* 00216 * 割込みハンドラ/CPU例外ハンドラの出入口処理 00217 * 00218 */ 00219 00220 00221 /* 00222 * 割込みハンドラの出入口処理の生成マクロ 00223 */ 00224 00225 #define INTHDR_ENTRY(inthdr) extern void inthdr(void); 00226 00227 #define INT_ENTRY(inthdr) inthdr 00228 00229 /* 00230 * CPU例外ハンドラの出入口処理の生成マクロ 00231 * 00232 */ 00233 #define EXCHDR_ENTRY(exchdr) extern void exchdr(VP sp); 00234 00235 #define EXC_ENTRY(exchdr) exchdr 00236 00237 /* 00238 * CPU例外の発生した時のシステム状態の参照 00239 */ 00240 00241 /* 00242 * CPU例外の発生した時のコンテキスト判定 00243 */ 00244 Inline BOOL 00245 exc_sense_context(VP p_excinf) 00246 { 00247 return(interrupt_count > 1); 00248 } 00249 00250 /* 00251 * CPU例外の発生した時のCPUロック状態の参照 00252 */ 00253 Inline BOOL 00254 exc_sense_lock(VP p_excinf) 00255 { 00256 return((*(UW*)p_excinf & STATUS_PIE) == 0); 00257 } 00258 00259 00260 /* 00261 * プロセッサ依存の初期化 00262 */ 00263 extern void cpu_initialize(void); 00264 00265 /* 00266 * プロセッサ依存の終了時処理 00267 */ 00268 extern void cpu_terminate(void); 00269 00270 00271 /* 00272 * 未登録の割込み/例外発生時のログ出力 00273 */ 00274 extern void no_reg_interrupt(void); 00275 extern void no_reg_exception(void); 00276 00277 #endif /* _MACRO_ONLY_ */ 00278 00279 /* 00280 * vgxet_tim をサポートするかどうかの定義 00281 */ 00282 #define SUPPORT_VXGET_TIM 00283 00284 /* 00285 * シリアルポート番号に関する定義 00286 */ 00287 #define TNUM_PORT 1 /* サポートするシリアルポートの数 */ 00288 #define TNUM_SIOP 1 /* サポートするシリアルI/Oポートの数 */ 00289 00290 /* 00291 * システムタスクに関する定義 00292 */ 00293 #define LOGTASK_PORTID 1 /* システムログを出力するシリアルポート番号 */ 00294 00295 00296 #endif /* _CPU_CONFIG_H_ */ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:12 2006 に Doxygen によって生成されました。 |