OSDN Git Service

Sメーター周りを修正
[trx-305dsp/dsp.git] / trx305 / kernel / kernel / check.h
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  * 
9  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
10  *  によって公表されている GNU General Public License の Version 2 に記
11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
13  *  利用と呼ぶ)することを無償で許諾する.
14  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16  *      スコード中に含まれていること.
17  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20  *      の無保証規定を掲載すること.
21  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23  *      と.
24  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
26  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27  *        報告すること.
28  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30  * 
31  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
33  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
34  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
35  * 
36  *  @(#) $Id: check.h,v 1.1 2009/01/31 05:27:37 suikan Exp $
37  */
38
39 /*
40  *  エラーチェック用マクロ
41  */
42
43 #ifndef _CHECK_H_
44 #define _CHECK_H_
45
46 /*
47  *  優先度の範囲の判定
48  */
49 #define VALID_TPRI(tpri) \
50     (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI)
51
52 /*
53  *  タスク優先度のチェック(E_PAR)
54  */
55 #define CHECK_TPRI(tpri) {                  \
56     if (!VALID_TPRI(tpri)) {                \
57         ercd = E_PAR;                   \
58         goto exit;                  \
59     }                           \
60 }
61
62 #define CHECK_TPRI_INI(tpri) {                  \
63     if (!(VALID_TPRI(tpri) || (tpri) == TPRI_INI)) {    \
64         ercd = E_PAR;                   \
65         goto exit;                  \
66     }                           \
67 }
68
69 #define CHECK_TPRI_SELF(tpri) {                 \
70     if (!(VALID_TPRI(tpri) || (tpri) == TPRI_SELF)) {   \
71         ercd = E_PAR;                   \
72         goto exit;                  \
73     }                           \
74 }
75
76 /*
77  *  タイムアウト指定値のチェック(E_PAR)
78  */
79 #define CHECK_TMOUT(tmout) {                    \
80     if (!(TMO_FEVR <= (tmout))) {               \
81         ercd = E_PAR;                   \
82         goto exit;                  \
83     }                           \
84 }
85
86 /*
87  *  その他のパラメータエラーのチェック(E_PAR)
88  */
89 #define CHECK_PAR(exp) {                    \
90     if (!(exp)) {                       \
91         ercd = E_PAR;                   \
92         goto exit;                  \
93     }                           \
94 }
95
96 /*
97  *  オブジェクトIDの範囲の判定
98  */
99 #define VALID_TSKID(tskid) \
100     (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid)
101
102 #define VALID_SEMID(semid) \
103     (TMIN_SEMID <= (semid) && (semid) <= tmax_semid)
104
105 #define VALID_FLGID(flgid) \
106     (TMIN_FLGID <= (flgid) && (flgid) <= tmax_flgid)
107
108 #define VALID_DTQID(dtqid) \
109     (TMIN_DTQID <= (dtqid) && (dtqid) <= tmax_dtqid)
110
111 #define VALID_MBXID(mbxid) \
112     (TMIN_MBXID <= (mbxid) && (mbxid) <= tmax_mbxid)
113
114 #define VALID_MPFID(mpfid) \
115     (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid)
116
117 #define VALID_CYCID(cycid) \
118     (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid)
119
120 /*
121  *  オブジェクトIDのチェック(E_ID)
122  */
123 #define CHECK_TSKID(tskid) {                    \
124     if (!VALID_TSKID(tskid)) {              \
125         ercd = E_ID;                    \
126         goto exit;                  \
127     }                           \
128 }
129
130 #define CHECK_TSKID_SELF(tskid) {               \
131     if (!(VALID_TSKID(tskid) || (tskid) == TSK_SELF)) { \
132         ercd = E_ID;                    \
133         goto exit;                  \
134     }                           \
135 }
136
137 #define CHECK_SEMID(semid) {                    \
138     if (!VALID_SEMID(semid)) {              \
139         ercd = E_ID;                    \
140         goto exit;                  \
141     }                           \
142 }
143
144 #define CHECK_FLGID(flgid) {                    \
145     if (!VALID_FLGID(flgid)) {              \
146         ercd = E_ID;                    \
147         goto exit;                  \
148     }                           \
149 }
150
151 #define CHECK_DTQID(dtqid) {                    \
152     if (!VALID_DTQID(dtqid)) {              \
153         ercd = E_ID;                    \
154         goto exit;                  \
155     }                           \
156 }
157
158 #define CHECK_MBXID(mbxid) {                    \
159     if (!VALID_MBXID(mbxid)) {              \
160         ercd = E_ID;                    \
161         goto exit;                  \
162     }                           \
163 }
164
165 #define CHECK_MPFID(mpfid) {                    \
166     if (!VALID_MPFID(mpfid)) {              \
167         ercd = E_ID;                    \
168         goto exit;                  \
169     }                           \
170 }
171
172 #define CHECK_CYCID(cycid) {                    \
173     if (!VALID_CYCID(cycid)) {              \
174         ercd = E_ID;                    \
175         goto exit;                  \
176     }                           \
177 }
178
179 /*
180  *  呼出しコンテキストのチェック(E_CTX)
181  */
182 #define CHECK_TSKCTX() {                    \
183     if (sense_context()) {                  \
184         ercd = E_CTX;                   \
185         goto exit;                  \
186     }                           \
187 }
188
189 #define CHECK_INTCTX() {                    \
190     if (!sense_context()) {                 \
191         ercd = E_CTX;                   \
192         goto exit;                  \
193     }                           \
194 }
195
196 /*
197  *  呼出しコンテキストとCPUロック状態のチェック(E_CTX)
198  */
199 #define CHECK_TSKCTX_UNL() {                    \
200     if (sense_context() || t_sense_lock()) {        \
201         ercd = E_CTX;                   \
202         goto exit;                  \
203     }                           \
204 }
205
206 #define CHECK_INTCTX_UNL() {                    \
207     if (!sense_context() || i_sense_lock()) {       \
208         ercd = E_CTX;                   \
209         goto exit;                  \
210     }                           \
211 }
212
213 /*
214  *  ディスパッチ保留状態でないかのチェック(E_CTX)
215  */
216 #define CHECK_DISPATCH() {                  \
217     if (sense_context() || t_sense_lock() || !(enadsp)) {   \
218         ercd = E_CTX;                   \
219         goto exit;                  \
220     }                           \
221 }
222
223 /*
224  *  その他のコンテキストエラーのチェック(E_CTX)
225  */
226 #define CHECK_CTX(exp) {                    \
227     if (!(exp)) {                       \
228         ercd = E_CTX;                   \
229         goto exit;                  \
230     }                           \
231 }
232
233 /*
234  *  自タスクを指定していないかのチェック(E_ILUSE)
235  */
236 #define CHECK_NONSELF(tcb) {                    \
237     if ((tcb) == runtsk) {                  \
238         ercd = E_ILUSE;                 \
239         goto exit;                  \
240     }                           \
241 }
242
243 /*
244  *  その他の不正使用エラーのチェック(E_ILUSE)
245  */
246 #define CHECK_ILUSE(exp) {                  \
247     if (!(exp)) {                       \
248         ercd = E_ILUSE;                 \
249         goto exit;                  \
250     }                           \
251 }
252
253 #endif /* _CHECK_H_ */