blob: 579d239d129fd5dd03458f8889577400b3b56aa1 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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
Linus Torvalds1da177e2005-04-16 15:20:36 -070012#ifdef SUSPEND_CONSOLE
13static int orig_fgconsole, orig_kmsg;
Linus Torvalds1da177e2005-04-16 15:20:36 -070014
15int pm_prepare_console(void)
16{
Linus Torvalds1da177e2005-04-16 15:20:36 -070017 acquire_console_sem();
18
19 orig_fgconsole = fg_console;
20
21 if (vc_allocate(SUSPEND_CONSOLE)) {
22 /* we can't have a free VC for now. Too bad,
23 * we don't want to mess the screen for now. */
24 release_console_sem();
25 return 1;
26 }
27
28 set_console(SUSPEND_CONSOLE);
29 release_console_sem();
30
31 if (vt_waitactive(SUSPEND_CONSOLE)) {
32 pr_debug("Suspend: Can't switch VCs.");
33 return 1;
34 }
35 orig_kmsg = kmsg_redirect;
36 kmsg_redirect = SUSPEND_CONSOLE;
Linus Torvalds1da177e2005-04-16 15:20:36 -070037 return 0;
38}
39
40void pm_restore_console(void)
41{
Linus Torvalds1da177e2005-04-16 15:20:36 -070042 acquire_console_sem();
43 set_console(orig_fgconsole);
44 release_console_sem();
45 kmsg_redirect = orig_kmsg;
Linus Torvalds1da177e2005-04-16 15:20:36 -070046 return;
47}
Rafael J. Wysockif7b89882006-02-01 03:05:21 -080048#endif