OSDN Git Service

Sメーター周りを修正
[trx-305dsp/dsp.git] / trx305 / kernel / include / t_syslog.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  *  Copyright (C) 2004 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: t_syslog.h,v 1.1 2009/01/31 05:27:37 suikan Exp $
39  */
40
41 /*
42  *  システムログ機能
43  *
44  *  システムログサービスは,システムのログ情報を出力するためのサービス
45  *  である.カーネルからのログ情報の出力にも用いるため,内部で待ち状態
46  *  にはいることはない.
47  *
48  *  ログ情報は,カーネル内のログバッファに書き込むか,低レベルの文字出
49  *  力関数を用いて出力する.どちらを使うかは,拡張サービスコールで切り
50  *  換えることができる.
51  *
52  *  ログバッファ領域がオーバフローした場合には,古いログ情報を消して上
53  *  書きする.
54  *
55  *  アセンブリ言語のソースファイルやシステムコンフィギュレーションファ
56  *  イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して
57  *  おくことで,マクロ定義以外の記述を除くことができる.
58  *
59  *  このインクルードファイルは,kernel.h と sil.h でインクルードされる.
60  *  他のファイルから直接インクルードされることはない.
61  *
62  *  このファイルをインクルードする前に,t_stddef.h と itron.h をインク
63  *  ルードしておくことが必要である.
64  */
65
66 #ifndef _T_SYSLOG_H_
67 #define _T_SYSLOG_H_
68
69 /*
70  *  ログ情報の種別の定義
71  *
72  *  LOG_TYPE_CYC,LOG_TYPE_ASSERT 以外は,デバッギングインタフェース仕
73  *  様と合致している.
74  */
75 #define LOG_TYPE_INH        0x01u   /* 割込みハンドラ */
76 #define LOG_TYPE_ISR        0x02u   /* 割込みサービスルーチン */
77 #define LOG_TYPE_CYC        0x03u   /* 周期ハンドラ */
78 #define LOG_TYPE_EXC        0x04u   /* CPU例外ハンドラ */
79 #define LOG_TYPE_TEX        0x05u   /* タスク例外処理ルーチン */
80 #define LOG_TYPE_TSKSTAT    0x06u   /* タスク状態変化 */
81 #define LOG_TYPE_DSP        0x07u   /* ディスパッチャ */
82 #define LOG_TYPE_SVC        0x08u   /* サービスコール */
83 #define LOG_TYPE_COMMENT    0x09u   /* コメント */
84 #define LOG_TYPE_ASSERT     0x0au   /* アサーションの失敗 */
85
86 #define LOG_ENTER       0x00u   /* 入口/開始 */
87 #define LOG_LEAVE       0x80u   /* 出口/終了 */
88
89 /*
90  *  ログ情報の重要度の定義
91  */
92 #define LOG_EMERG   0u      /* シャットダウンに値するエラー */
93 #define LOG_ALERT   1u
94 #define LOG_CRIT    2u
95 #define LOG_ERROR   3u      /* システムエラー */
96 #define LOG_WARNING 4u      /* 警告メッセージ */
97 #define LOG_NOTICE  5u
98 #define LOG_INFO    6u
99 #define LOG_DEBUG   7u      /* デバッグ用メッセージ */
100
101 #ifndef _MACRO_ONLY
102
103 /*
104  *  ログ情報のデータ構造
105  */
106
107 #define TMAX_LOGINFO    6
108
109 typedef struct {
110         UINT    logtype;        /* ログ情報の種別 */
111         SYSTIM  logtim;         /* ログ時刻 */
112         VP_INT  loginfo[TMAX_LOGINFO];  /* その他のログ情報 */
113     } SYSLOG;
114
115 /*
116  *  ログ情報の重要度のビットマップを作るためのマクロ
117  */
118 #define LOG_MASK(prio)  (1u << (prio))
119 #define LOG_UPTO(prio)  ((1u << ((prio) + 1)) - 1)
120
121 #ifndef OMIT_SYSLOG
122
123 /*
124  *  ログ情報の出力
125  */
126 extern ER   vwri_log(UINT prio, SYSLOG *p_log) throw();
127
128 /*
129  *  ログバッファからのログ情報の読出し
130  */
131 extern ER_UINT  vrea_log(SYSLOG *p_log) throw();
132
133 /* 
134  *  出力すべきログ情報の重要度の設定
135  */
136 extern ER   vmsk_log(UINT logmask, UINT lowmask) throw();
137
138 /*
139  *  ログ情報を出力するためのライブラリ関数
140  */
141
142 Inline ER
143 _syslog_0(UINT prio, UINT type)
144 {
145     SYSLOG  log;
146
147     log.logtype = type;
148     return(vwri_log(prio, &log));
149 }
150
151 Inline ER
152 _syslog_1(UINT prio, UINT type, VP_INT arg1)
153 {
154     SYSLOG  log;
155
156     log.logtype = type;
157     log.loginfo[0] = arg1;
158     return(vwri_log(prio, &log));
159 }
160
161 Inline ER
162 _syslog_2(UINT prio, UINT type, VP_INT arg1, VP_INT arg2)
163 {
164     SYSLOG  log;
165
166     log.logtype = type;
167     log.loginfo[0] = arg1;
168     log.loginfo[1] = arg2;
169     return(vwri_log(prio, &log));
170 }
171
172 Inline ER
173 _syslog_3(UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3)
174 {
175     SYSLOG  log;
176
177     log.logtype = type;
178     log.loginfo[0] = arg1;
179     log.loginfo[1] = arg2;
180     log.loginfo[2] = arg3;
181     return(vwri_log(prio, &log));
182 }
183
184 Inline ER
185 _syslog_4(UINT prio, UINT type, VP_INT arg1, VP_INT arg2,
186                 VP_INT arg3, VP_INT arg4)
187 {
188     SYSLOG  log;
189
190     log.logtype = type;
191     log.loginfo[0] = arg1;
192     log.loginfo[1] = arg2;
193     log.loginfo[2] = arg3;
194     log.loginfo[3] = arg4;
195     return(vwri_log(prio, &log));
196 }
197
198 Inline ER
199 _syslog_5(UINT prio, UINT type, VP_INT arg1, VP_INT arg2,
200                 VP_INT arg3, VP_INT arg4, VP_INT arg5)
201 {
202     SYSLOG  log;
203
204     log.logtype = type;
205     log.loginfo[0] = arg1;
206     log.loginfo[1] = arg2;
207     log.loginfo[2] = arg3;
208     log.loginfo[3] = arg4;
209     log.loginfo[4] = arg5;
210     return(vwri_log(prio, &log));
211 }
212
213 Inline ER
214 _syslog_6(UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3,
215                 VP_INT arg4, VP_INT arg5, VP_INT arg6)
216 {
217     SYSLOG  log;
218
219     log.logtype = type;
220     log.loginfo[0] = arg1;
221     log.loginfo[1] = arg2;
222     log.loginfo[2] = arg3;
223     log.loginfo[3] = arg4;
224     log.loginfo[4] = arg5;
225     log.loginfo[5] = arg6;
226     return(vwri_log(prio, &log));
227 }
228
229 #else /* OMIT_SYSLOG */
230
231 #define vwri_log(prio, p_log)       E_OK
232 #define vrea_log(p_log)         E_OK
233 #define vmsk_log(logmask, lowmask)  E_OK
234
235 #define _syslog_0(prio, type)                       E_OK
236 #define _syslog_1(prio, type, arg1)                 E_OK
237 #define _syslog_2(prio, type, arg1, arg2)               E_OK
238 #define _syslog_3(prio, type, arg1, arg2, arg3)             E_OK
239 #define _syslog_4(prio, type, arg1, arg2, arg3, arg4)           E_OK
240 #define _syslog_5(prio, type, arg1, arg2, arg3, arg4, arg5)     E_OK
241 #define _syslog_6(prio, type, arg1, arg2, arg3, arg4, arg5, arg6)   E_OK
242
243 #endif /* OMIT_SYSLOG */
244
245 /*
246  *  ログ情報(コメント)を出力するためのマクロ
247  *
248  *  format および後続の引数から作成したメッセージを,重大度 prio で
249  *  ログ情報として出力するためのマクロ.arg1〜argn は VP_INT型にキャ
250  *  ストするため,VP_INT型に型変換できる任意の型でよい.
251  */
252
253 #define syslog_0(prio, format) \
254         _syslog_1(prio, LOG_TYPE_COMMENT, (VP_INT) format)
255
256 #define syslog_1(prio, format, arg1) \
257         _syslog_2(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
258                             (VP_INT)(arg1))
259
260 #define syslog_2(prio, format, arg1, arg2) \
261         _syslog_3(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
262                     (VP_INT)(arg1), (VP_INT)(arg2))
263
264 #define syslog_3(prio, format, arg1, arg2, arg3) \
265         _syslog_4(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
266             (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3))
267
268 #define syslog_4(prio, format, arg1, arg2, arg3, arg4) \
269         _syslog_5(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
270             (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3), \
271                             (VP_INT)(arg4))
272
273 #define syslog_5(prio, format, arg1, arg2, arg3, arg4, arg5) \
274         _syslog_6(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
275             (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3), \
276                     (VP_INT)(arg4), (VP_INT)(arg5))
277
278 /*
279  *  ログ情報(コメント)を出力するためのライブラリ関数(vasyslog.c)
280  */
281 extern ER   syslog(UINT prio, const char *format, ...) throw();
282
283 /* 
284  *  ログ情報のフォーマット出力(log_output.c)
285  */
286 extern void syslog_printf(const char *format, VP_INT *args,
287                         void (*putc)(char)) throw();
288 extern void syslog_print(SYSLOG *p_log, void (*putc)(char)) throw();
289 extern void syslog_output(void (*putc)(char)) throw();
290
291 #endif /* _MACRO_ONLY */
292 #endif /* _T_SYSLOG_H_ */