diff options
author | mdodd <mdodd@FreeBSD.org> | 2003-01-15 03:45:27 +0000 |
---|---|---|
committer | mdodd <mdodd@FreeBSD.org> | 2003-01-15 03:45:27 +0000 |
commit | db133fc962e12c04a8ca0f71eaf06086957ee688 (patch) | |
tree | 45f534051069c1d253f9c7529c06fdd572bc231a /sys/isa/syscons_isa.c | |
parent | c0b6a66b88d47fff0836d952a931c4de260cd4b9 (diff) | |
download | FreeBSD-src-db133fc962e12c04a8ca0f71eaf06086957ee688.zip FreeBSD-src-db133fc962e12c04a8ca0f71eaf06086957ee688.tar.gz |
Make the SC_NO_SUSPEND_VTYSWITCH kernel option available as a loader
tunable and sysctl (hw.syscons.sc_no_suspend_vtswitch).
Diffstat (limited to 'sys/isa/syscons_isa.c')
-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); } |