Subversion Repositories HelenOS

Rev

Rev 3707 | Rev 3906 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3707 Rev 3844
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
    }