summaryrefslogtreecommitdiffstats
path: root/sys/isa/syscons_isa.c
diff options
context:
space:
mode:
authormdodd <mdodd@FreeBSD.org>2003-01-15 03:45:27 +0000
committermdodd <mdodd@FreeBSD.org>2003-01-15 03:45:27 +0000
commitdb133fc962e12c04a8ca0f71eaf06086957ee688 (patch)
tree45f534051069c1d253f9c7529c06fdd572bc231a /sys/isa/syscons_isa.c
parentc0b6a66b88d47fff0836d952a931c4de260cd4b9 (diff)
downloadFreeBSD-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.c28
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);
}
OpenPOWER on IntegriCloud