From dcb65c595d8d74cd3fc88513f8fc0ded86c03fd4 Mon Sep 17 00:00:00 2001 From: "Matthew N. Dodd" Date: Wed, 15 Jan 2003 03:45:27 +0000 Subject: [PATCH] Make the SC_NO_SUSPEND_VTYSWITCH kernel option available as a loader tunable and sysctl (hw.syscons.sc_no_suspend_vtswitch). --- sys/isa/syscons_isa.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/sys/isa/syscons_isa.c b/sys/isa/syscons_isa.c index c34eacb008b..2ae2947bf69 100644 --- a/sys/isa/syscons_isa.c +++ b/sys/isa/syscons_isa.c @@ -36,7 +36,7 @@ #include #include #include - +#include #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); }