source: anotherchoice/tags/jsp-1.4.4-full-UTF8/kernel/syslog.c@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 5.7 KB
Line 
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 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: syslog.c,v 1.9 2003/06/04 01:46:16 hiro Exp $
51 */
52
53/*
54 * システムログ機能
55 */
56
57#undef OMIT_SYSLOG
58#include "jsp_kernel.h"
59#include "time_event.h"
60#include "syslog.h"
61
62/*
63 * コンテキストに依らないCPUロック/ロック解除
64 */
65#define lock_cpu() (sense_context() ? i_lock_cpu() : t_lock_cpu())
66#define unlock_cpu() (sense_context() ? i_unlock_cpu() : t_unlock_cpu())
67
68#ifdef __logini
69
70/*
71 * ログバッファとそれにアクセスするためのポインタ
72 */
73SYSLOG syslog_buffer[TCNT_SYSLOG_BUFFER]; /* ログバッファ */
74UINT syslog_count; /* ログバッファ中のログの数 */
75UINT syslog_head; /* å…
76ˆé ­ã®ãƒ­ã‚°ã®æ ¼ç´ä½ç½® */
77UINT syslog_tail; /* 次のログの格納位置 */
78UINT syslog_lost; /* 失われたログの数 */
79
80/*
81 * 出力すべきログ情
82報の重要度(ビットマップ)
83 */
84UINT syslog_logmask; /* ログバッファに記録すべき重要度 */
85UINT syslog_lowmask; /* 低レベル出力すべき重要度 */
86
87/*
88 * システムログ機能の初期化
89 */
90void
91syslog_initialize()
92{
93 syslog_count = 0;
94 syslog_head = syslog_tail = 0;
95 syslog_lost = 0;
96
97 syslog_logmask = 0;
98 syslog_lowmask = LOG_UPTO(LOG_NOTICE);
99}
100
101#endif /* __logini */
102
103/*
104 * ログ情
105報の出力
106 *
107 * CPUロック状æ…
108‹ã‚„実行コンテキストによらず動作できるように実装
109してある.
110 */
111#ifdef __vwri_log
112
113SYSCALL ER
114vwri_log(UINT prio, SYSLOG *p_log)
115{
116 BOOL locked;
117
118 locked = sense_lock();
119 if (!locked) {
120 lock_cpu();
121 }
122
123 /*
124 * ログ時刻の設定
125 */
126 p_log->logtim = systim_offset + current_time;
127
128 /*
129 * ログバッファに記録
130 */
131 if ((syslog_logmask & LOG_MASK(prio)) != 0) {
132 syslog_buffer[syslog_tail] = *p_log;
133 syslog_tail++;
134 if (syslog_tail >= TCNT_SYSLOG_BUFFER) {
135 syslog_tail = 0;
136 }
137 if (syslog_count < TCNT_SYSLOG_BUFFER) {
138 syslog_count++;
139 }
140 else {
141 syslog_head = syslog_tail;
142 syslog_lost++;
143 }
144 }
145
146 /*
147 * 低レベル出力
148 */
149 if ((syslog_lowmask & LOG_MASK(prio)) != 0) {
150 syslog_print(p_log, sys_putc);
151 }
152
153 if (!locked) {
154 unlock_cpu();
155 }
156 return(E_OK);
157}
158
159#endif /* __vwri_log */
160
161/*
162 * ログバッファからの読出し
163 *
164 * CPUロック状æ…
165‹ã‚„実行コンテキストによらず動作できるように実装
166してある.
167 */
168#ifdef __vrea_log
169
170SYSCALL ER_UINT
171vrea_log(SYSLOG *p_log)
172{
173 BOOL locked;
174 ER_UINT ercd;
175
176 locked = sense_lock();
177 if (!locked) {
178 lock_cpu();
179 }
180 if (syslog_count > 0) {
181 *p_log = syslog_buffer[syslog_head];
182 syslog_count--;
183 syslog_head++;
184 if (syslog_head >= TCNT_SYSLOG_BUFFER) {
185 syslog_head = 0;
186 }
187 ercd = (ER_UINT) syslog_lost;
188 syslog_lost = 0;
189 }
190 else {
191 ercd = E_OBJ;
192 }
193 if (!locked) {
194 unlock_cpu();
195 }
196 return(ercd);
197}
198
199#endif /* __vrea_log */
200
201/*
202 * 出力すべきログ情
203報の重要度の設定
204 */
205#ifdef __vmsk_log
206
207SYSCALL ER
208vmsk_log(UINT logmask, UINT lowmask)
209{
210 syslog_logmask = logmask;
211 syslog_lowmask = lowmask;
212 return(E_OK);
213}
214
215#endif /* __vmsk_log */
216
217/*
218 * システムログ機能の終了処理
219 *
220 * ログバッファに記録されたログ情
221報を,低レベル出力機能を用いて出力す
222 * る.
223 */
224#ifdef __logter
225
226void
227syslog_terminate()
228{
229 syslog_printf("-- buffered messages --", NULL, sys_putc);
230 syslog_output(sys_putc);
231}
232
233#endif /* __logter */
Note: See TracBrowser for help on using the repository browser.