| 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 | static int new_loglevel = 10;
|
| 13 | static int orig_loglevel;
|
| 14 | #ifdef SUSPEND_CONSOLE
|
| 15 | static int orig_fgconsole, orig_kmsg;
|
| 16 | #endif
|
| 17 |
|
| 18 | int pm_prepare_console(void)
|
| 19 | {
|
| 20 | orig_loglevel = console_loglevel;
|
| 21 | console_loglevel = new_loglevel;
|
| 22 |
|
| 23 | #ifdef SUSPEND_CONSOLE
|
| 24 | acquire_console_sem();
|
| 25 |
|
| 26 | orig_fgconsole = fg_console;
|
| 27 |
|
| 28 | if (vc_allocate(SUSPEND_CONSOLE)) {
|
| 29 | |
| 30 | * we don't want to mess the screen for now.
|
| 31 | release_console_sem();
|
| 32 | return 1;
|
| 33 | }
|
| 34 |
|
| 35 | set_console(SUSPEND_CONSOLE);
|
| 36 | release_console_sem();
|
| 37 |
|
| 38 | if (vt_waitactive(SUSPEND_CONSOLE)) {
|
| 39 | pr_debug("Suspend: Can't switch VCs.");
|
| 40 | return 1;
|
| 41 | }
|
| 42 | orig_kmsg = kmsg_redirect;
|
| 43 | kmsg_redirect = SUSPEND_CONSOLE;
|
| 44 | #endif
|
| 45 | return 0;
|
| 46 | }
|
| 47 |
|
| 48 | void pm_restore_console(void)
|
| 49 | {
|
| 50 | console_loglevel = orig_loglevel;
|
| 51 | #ifdef SUSPEND_CONSOLE
|
| 52 | acquire_console_sem();
|
| 53 | set_console(orig_fgconsole);
|
| 54 | release_console_sem();
|
| 55 | kmsg_redirect = orig_kmsg;
|
| 56 | #endif
|
| 57 | return;
|
| 58 | }
|