| 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 |
|
| 15 | static int orig_fgconsole, orig_kmsg;
|
| 16 |
|
| 17 | int pm_prepare_console(void)
|
| 18 | {
|
| 19 | acquire_console_sem();
|
| 20 |
|
| 21 | orig_fgconsole = fg_console;
|
| 22 |
|
| 23 | if (vc_allocate(SUSPEND_CONSOLE)) {
|
| 24 | |
| 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 |
|
| 50 | void 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
|