Rev 4337 | Rev 4343 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4337 | Rev 4341 | ||
---|---|---|---|
Line 63... | Line 63... | ||
63 | /**< Number of stored (not printed) kernel log characters */ |
63 | /**< Number of stored (not printed) kernel log characters */ |
64 | static size_t klog_stored = 0; |
64 | static size_t klog_stored = 0; |
65 | /**< Number of stored kernel log characters for uspace */ |
65 | /**< Number of stored kernel log characters for uspace */ |
66 | static size_t klog_uspace = 0; |
66 | static size_t klog_uspace = 0; |
67 | 67 | ||
- | 68 | /**< Silent output */ |
|
- | 69 | static bool silent = false; |
|
- | 70 | ||
68 | /**< Kernel log spinlock */ |
71 | /**< Kernel log spinlock */ |
69 | SPINLOCK_INITIALIZE(klog_lock); |
72 | SPINLOCK_INITIALIZE(klog_lock); |
70 | 73 | ||
71 | /** Physical memory area used for klog buffer */ |
74 | /** Physical memory area used for klog buffer */ |
72 | static parea_t klog_parea; |
75 | static parea_t klog_parea; |
Line 142... | Line 145... | ||
142 | spinlock_lock(&klog_lock); |
145 | spinlock_lock(&klog_lock); |
143 | klog_inited = true; |
146 | klog_inited = true; |
144 | spinlock_unlock(&klog_lock); |
147 | spinlock_unlock(&klog_lock); |
145 | } |
148 | } |
146 | 149 | ||
- | 150 | void grab_console(void) |
|
- | 151 | { |
|
- | 152 | silent = false; |
|
- | 153 | arch_grab_console(); |
|
- | 154 | } |
|
- | 155 | ||
- | 156 | void release_console(void) |
|
- | 157 | { |
|
- | 158 | silent = true; |
|
- | 159 | arch_release_console(); |
|
- | 160 | } |
|
- | 161 | ||
147 | /** Get character from character device. Do not echo character. |
162 | /** Get character from character device. Do not echo character. |
148 | * |
163 | * |
149 | * @param chardev Character device. |
164 | * @param chardev Character device. |
150 | * |
165 | * |
151 | * @return Character read. |
166 | * @return Character read. |
Line 251... | Line 266... | ||
251 | 266 | ||
252 | if ((klog_stored > 0) && (stdout->op->write)) { |
267 | if ((klog_stored > 0) && (stdout->op->write)) { |
253 | /* Print charaters stored in kernel log */ |
268 | /* Print charaters stored in kernel log */ |
254 | index_t i; |
269 | index_t i; |
255 | for (i = klog_len - klog_stored; i < klog_len; i++) |
270 | for (i = klog_len - klog_stored; i < klog_len; i++) |
256 | stdout->op->write(stdout, klog[(klog_start + i) % KLOG_SIZE]); |
271 | stdout->op->write(stdout, klog[(klog_start + i) % KLOG_SIZE], silent); |
257 | klog_stored = 0; |
272 | klog_stored = 0; |
258 | } |
273 | } |
259 | 274 | ||
260 | /* Store character in the cyclic kernel log */ |
275 | /* Store character in the cyclic kernel log */ |
261 | klog[(klog_start + klog_len) % KLOG_SIZE] = c; |
276 | klog[(klog_start + klog_len) % KLOG_SIZE] = c; |
Line 263... | Line 278... | ||
263 | klog_len++; |
278 | klog_len++; |
264 | else |
279 | else |
265 | klog_start = (klog_start + 1) % KLOG_SIZE; |
280 | klog_start = (klog_start + 1) % KLOG_SIZE; |
266 | 281 | ||
267 | if (stdout->op->write) |
282 | if (stdout->op->write) |
268 | stdout->op->write(stdout, c); |
283 | stdout->op->write(stdout, c, silent); |
269 | else { |
284 | else { |
270 | /* The character is just in the kernel log */ |
285 | /* The character is just in the kernel log */ |
271 | if (klog_stored < klog_len) |
286 | if (klog_stored < klog_len) |
272 | klog_stored++; |
287 | klog_stored++; |
273 | } |
288 | } |