diff options
-rw-r--r-- | sys/isa/syscons_isa.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/sys/isa/syscons_isa.c b/sys/isa/syscons_isa.c index c34eacb..2ae2947 100644 --- a/sys/isa/syscons_isa.c +++ b/sys/isa/syscons_isa.c @@ -36,7 +36,7 @@ #include <sys/cons.h> #include <sys/kbio.h> #include <sys/consio.h> - +#include <sys/sysctl.h> #ifdef __i386__ @@ -64,6 +64,17 @@ static devclass_t sc_devclass; static sc_softc_t main_softc; +#ifdef SC_NO_SUSPEND_VTYSWITCH +static int sc_no_suspend_vtswitch = 1; +#else +static int sc_no_suspend_vtswitch = 0; +#endif +static int sc_cur_scr; + +TUNABLE_INT("hw.syscons.sc_no_suspend_vtswitch", (int *)&sc_no_suspend_vtswitch); +SYSCTL_DECL(_hw_syscons); +SYSCTL_INT(_hw_syscons, OID_AUTO, sc_no_suspend_vtswitch, CTLFLAG_RW, + &sc_no_suspend_vtswitch, 0, "Disable VT switch before suspend."); static void scidentify (driver_t *driver, device_t parent) @@ -88,20 +99,19 @@ scattach(device_t dev) return sc_attach_unit(device_get_unit(dev), device_get_flags(dev)); } -#ifndef SC_NO_SUSPEND_VTYSWITCH -static int sc_cur_scr; -#endif - static int scsuspend(device_t dev) { -#ifndef SC_NO_SUSPEND_VTYSWITCH int retry = 10; static int dummy; sc_softc_t *sc; sc = &main_softc; sc_cur_scr = sc->cur_scp->index; + + if (sc_no_suspend_vtswitch) + return (0); + do { sc_switch_scr(sc, 0); if (!sc->switch_in_progress) { @@ -110,20 +120,20 @@ scsuspend(device_t dev) tsleep(&dummy, 0, "scsuspend", 100); } while (retry--); -#endif return (0); } static int scresume(device_t dev) { -#ifndef SC_NO_SUSPEND_VTYSWITCH sc_softc_t *sc; + if (sc_no_suspend_vtswitch) + return (0); + sc = &main_softc; sc_switch_scr(sc, sc_cur_scr); -#endif return (0); } |