linux/kernel/power/console.c
<<
>>
Prefs
   1/*
   2 * drivers/power/process.c - Functions for saving/restoring console.
   3 *
   4 * Originally from swsusp.
   5 */
   6
   7#include <linux/vt_kern.h>
   8#include <linux/kbd_kern.h>
   9#include <linux/console.h>
  10#include "power.h"
  11
  12#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
  13#define SUSPEND_CONSOLE (MAX_NR_CONSOLES-1)
  14
  15static int orig_fgconsole, orig_kmsg;
  16
  17int pm_prepare_console(void)
  18{
  19        acquire_console_sem();
  20
  21        orig_fgconsole = fg_console;
  22
  23        if (vc_allocate(SUSPEND_CONSOLE)) {
  24          /* we can't have a free VC for now. Too bad,
  25           * we don't want to mess the screen for now. */
  26                release_console_sem();
  27                return 1;
  28        }
  29
  30        if (set_console(SUSPEND_CONSOLE)) {
  31                /*
  32                 * We're unable to switch to the SUSPEND_CONSOLE.
  33                 * Let the calling function know so it can decide
  34                 * what to do.
  35                 */
  36                release_console_sem();
  37                return 1;
  38        }
  39        release_console_sem();
  40
  41        if (vt_waitactive(SUSPEND_CONSOLE)) {
  42                pr_debug("Suspend: Can't switch VCs.");
  43                return 1;
  44        }
  45        orig_kmsg = kmsg_redirect;
  46        kmsg_redirect = SUSPEND_CONSOLE;
  47        return 0;
  48}
  49
  50void pm_restore_console(void)
  51{
  52        acquire_console_sem();
  53        set_console(orig_fgconsole);
  54        release_console_sem();
  55        kmsg_redirect = orig_kmsg;
  56        return;
  57}
  58#endif
  59