OSDN Git Service

release_3.3.0
[toppersjsp4bf/jsp.git] / jsp / config / m68k / cpu_config.c
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) 2005 by Embedded and Real-Time Systems Laboratory
9  *              Graduate School of Information Science, Nagoya Univ., JAPAN
10  * 
11  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
12  *  によって公表されている GNU General Public License の Version 2 に記
13  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
15  *  利用と呼ぶ)することを無償で許諾する.
16  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18  *      スコード中に含まれていること.
19  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22  *      の無保証規定を掲載すること.
23  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25  *      と.
26  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
28  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29  *        報告すること.
30  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32  * 
33  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
37  * 
38  *  @(#) $Id: cpu_config.c,v 1.1 2009/01/31 05:27:37 suikan Exp $
39  */
40
41 /*
42  *  プロセッサ依存モジュール(M68040用)
43  */
44
45 #include "jsp_kernel.h"
46 #include "check.h"
47 #include "task.h"
48
49 /*
50  *  タスクコンテキストでの割込みマスク
51  */
52 #ifdef SUPPORT_CHG_IPM
53 UH  task_intmask;
54 #endif /* SUPPORT_CHG_IPM */
55
56 /*
57  *  非タスクコンテキストでの割込みマスク
58  */
59 UH  int_intmask;
60
61 /*
62  *  プロセッサ依存の初期化
63  */
64 void
65 cpu_initialize()
66 {
67     /*
68      *  タスクコンテキストでの割込みマスクの初期化
69      */
70 #ifdef SUPPORT_CHG_IPM
71     task_intmask = 0x0000;
72 #endif /* SUPPORT_CHG_IPM */
73
74     /*
75      *  例外ベクタテーブルの初期化
76      */
77 #ifdef EXCVT_KERNEL
78     memcpy(EXCVT_KERNEL, EXCVT_ORIG, EXCVT_LEN);
79     set_vbr(EXCVT_KERNEL);
80 #endif /* EXCVT_KERNEL */
81 }
82
83 /*
84  *  プロセッサ依存の終了処理
85  */
86 void
87 cpu_terminate()
88 {
89 #ifdef EXCVT_KERNEL
90     set_vbr(EXCVT_ORIG);
91 #endif /* EXCVT_KERNEL */
92 }
93
94 #ifdef SUPPORT_CHG_IPM
95
96 /*
97  *  割込みマスクの変更
98  *
99  *  chg_ipm を使って IPM を 7(NMI 以外のすべての割込みを禁止)に変更
100  *  することはできない.NMI 以外のすべての割込みを禁止したい場合には,
101  *  loc_cpu によりCPUロック状態にすればよい.
102  *  IPM が 0 以外の時にも,タスクディスパッチは保留されない.IPM は,
103  *  タスクディスパッチによって,新しく実行状態になったタスクへ引き継が
104  *  れる.そのため,タスクが実行中に,別のタスクによって IPM が変更さ
105  *  れる場合がある.JSPカーネルでは,IPM の変更はタスク例外処理ルーチ
106  *  ンによっても起こるので,別のタスクによって IPM が変更されることに
107  *  よって,扱いが難しくなる状況は少ないと思われる.IPM の値によってタ
108  *  スクディスパッチを禁止したい場合には,dis_dsp を併用すればよい.
109  */
110 SYSCALL ER
111 chg_ipm(IPM ipm)
112 {
113     ER  ercd;
114
115     LOG_CHG_IPM_ENTER(ipm);
116     CHECK_TSKCTX_UNL();
117     CHECK_PAR(0 <= ipm && ipm <= 6);
118
119     t_lock_cpu();
120     task_intmask = (ipm << 8);
121     ercd = E_OK;
122     t_unlock_cpu();
123
124     exit:
125     LOG_CHG_IPM_LEAVE(ercd);
126     return(ercd);
127 }
128
129 /*
130  *  割込みマスクの参照
131  */
132 SYSCALL ER
133 get_ipm(IPM *p_ipm)
134 {
135     ER  ercd;
136
137     LOG_GET_IPM_ENTER(p_ipm);
138     CHECK_TSKCTX_UNL();
139
140     t_lock_cpu();
141     *p_ipm = (task_intmask >> 8);
142     ercd = E_OK;
143     t_unlock_cpu();
144
145     exit:
146     LOG_GET_IPM_LEAVE(ercd, *p_ipm);
147     return(ercd);
148 }
149
150 #endif /* SUPPORT_CHG_IPM */