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 によって生成されました。