Ignore:
File:
1 edited

Legend:

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

    r0fe52ef r712c4ba  
    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)
    125 {
    126         list_foreach(dev->list, cur) {
     124static void stdout_write(outdev_t *dev, wchar_t ch, bool silent)
     125{
     126        link_t *cur;
     127       
     128        for (cur = dev->list.next; cur != &dev->list; cur = cur->next) {
    127129                outdev_t *sink = list_get_instance(cur, outdev_t, link);
    128130                if ((sink) && (sink->op->write))
    129                         sink->op->write(sink, ch);
     131                        sink->op->write(sink, ch, silent);
    130132        }
    131133}
     
    133135static void stdout_redraw(outdev_t *dev)
    134136{
    135         list_foreach(dev->list, cur) {
     137        link_t *cur;
     138       
     139        for (cur = dev->list.next; cur != &dev->list; cur = cur->next) {
    136140                outdev_t *sink = list_get_instance(cur, outdev_t, link);
    137141                if ((sink) && (sink->op->redraw))
     
    156160        klog_parea.frames = SIZE2FRAMES(sizeof(klog));
    157161        klog_parea.unpriv = false;
    158         klog_parea.mapped = false;
    159162        ddi_parea_register(&klog_parea);
    160163       
     
    168171void grab_console(void)
    169172{
    170         bool prev = console_override;
    171        
    172         console_override = true;
     173        bool prev = silent;
     174       
     175        silent = false;
    173176        if ((stdout) && (stdout->op->redraw))
    174177                stdout->op->redraw(stdout);
    175178       
    176         if ((stdin) && (!prev)) {
     179        if ((stdin) && (prev)) {
    177180                /*
    178181                 * Force the console to print the prompt.
     
    184187void release_console(void)
    185188{
    186         console_override = false;
    187 }
    188 
    189 /** Activate kernel console override */
    190 sysarg_t sys_debug_activate_console(void)
     189        // FIXME arch_release_console
     190        silent = true;
     191}
     192
     193/** Tell kernel to get keyboard/console access again */
     194sysarg_t sys_debug_enable_console(void)
    191195{
    192196#ifdef CONFIG_KCONSOLE
     
    196200        return false;
    197201#endif
     202}
     203
     204/** Tell kernel to relinquish keyboard/console access */
     205sysarg_t sys_debug_disable_console(void)
     206{
     207        release_console();
     208        return true;
    198209}
    199210
     
    248259}
    249260
    250 void klog_update(void *event)
     261void klog_update(void)
    251262{
    252263        if (!atomic_get(&klog_inited))
     
    282293                         */
    283294                        spinlock_unlock(&klog_lock);
    284                         stdout->op->write(stdout, tmp);
     295                        stdout->op->write(stdout, tmp, silent);
    285296                        spinlock_lock(&klog_lock);
    286297                }
     
    310321                 * it should be no longer buffered.
    311322                 */
    312                 stdout->op->write(stdout, ch);
     323                stdout->op->write(stdout, ch, silent);
    313324        } else {
    314325                /*
     
    327338        /* Force notification on newline */
    328339        if (ch == '\n')
    329                 klog_update(NULL);
     340                klog_update();
    330341}
    331342
     
    358369                free(data);
    359370        } else
    360                 klog_update(NULL);
     371                klog_update();
    361372       
    362373        return size;
Note: See TracChangeset for help on using the changeset viewer.