Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/console/console.c

    r0fe52ef r55b77d9  
    8787};
    8888
    89 static void stdout_write(outdev_t *, wchar_t);
     89static void stdout_write(outdev_t *, wchar_t, bool);
    9090static void stdout_redraw(outdev_t *);
    9191
     
    9595};
    9696
    97 /** Override kernel console lockout */
    98 bool console_override = false;
     97/** Silence output */
     98bool silent = false;
    9999
    100100/** Standard input and output character devices */
     
    122122}
    123123
    124 static void stdout_write(outdev_t *dev, wchar_t ch)
     124static void stdout_write(outdev_t *dev, wchar_t ch, bool silent)
    125125{
    126126        list_foreach(dev->list, cur) {
    127127                outdev_t *sink = list_get_instance(cur, outdev_t, link);
    128128                if ((sink) && (sink->op->write))
    129                         sink->op->write(sink, ch);
     129                        sink->op->write(sink, ch, silent);
    130130        }
    131131}
     
    156156        klog_parea.frames = SIZE2FRAMES(sizeof(klog));
    157157        klog_parea.unpriv = false;
    158         klog_parea.mapped = false;
    159158        ddi_parea_register(&klog_parea);
    160159       
     
    168167void grab_console(void)
    169168{
    170         bool prev = console_override;
    171        
    172         console_override = true;
     169        bool prev = silent;
     170       
     171        silent = false;
    173172        if ((stdout) && (stdout->op->redraw))
    174173                stdout->op->redraw(stdout);
    175174       
    176         if ((stdin) && (!prev)) {
     175        if ((stdin) && (prev)) {
    177176                /*
    178177                 * Force the console to print the prompt.
     
    184183void release_console(void)
    185184{
    186         console_override = false;
    187 }
    188 
    189 /** Activate kernel console override */
    190 sysarg_t sys_debug_activate_console(void)
     185        // FIXME arch_release_console
     186        silent = true;
     187}
     188
     189/** Tell kernel to get keyboard/console access again */
     190sysarg_t sys_debug_enable_console(void)
    191191{
    192192#ifdef CONFIG_KCONSOLE
     
    196196        return false;
    197197#endif
     198}
     199
     200/** Tell kernel to relinquish keyboard/console access */
     201sysarg_t sys_debug_disable_console(void)
     202{
     203        release_console();
     204        return true;
    198205}
    199206
     
    248255}
    249256
    250 void klog_update(void *event)
     257void klog_update(void)
    251258{
    252259        if (!atomic_get(&klog_inited))
     
    282289                         */
    283290                        spinlock_unlock(&klog_lock);
    284                         stdout->op->write(stdout, tmp);
     291                        stdout->op->write(stdout, tmp, silent);
    285292                        spinlock_lock(&klog_lock);
    286293                }
     
    310317                 * it should be no longer buffered.
    311318                 */
    312                 stdout->op->write(stdout, ch);
     319                stdout->op->write(stdout, ch, silent);
    313320        } else {
    314321                /*
     
    327334        /* Force notification on newline */
    328335        if (ch == '\n')
    329                 klog_update(NULL);
     336                klog_update();
    330337}
    331338
     
    358365                free(data);
    359366        } else
    360                 klog_update(NULL);
     367                klog_update();
    361368       
    362369        return size;
Note: See TracChangeset for help on using the changeset viewer.