diff options
Diffstat (limited to 'sys/dev/wscons/wsdisplay.c')
-rw-r--r-- | sys/dev/wscons/wsdisplay.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/sys/dev/wscons/wsdisplay.c b/sys/dev/wscons/wsdisplay.c index 50ac76f1cd5..e83ad68a370 100644 --- a/sys/dev/wscons/wsdisplay.c +++ b/sys/dev/wscons/wsdisplay.c @@ -1,4 +1,4 @@ -/* $OpenBSD: wsdisplay.c,v 1.41 2002/03/27 18:54:09 jbm Exp $ */ +/* $OpenBSD: wsdisplay.c,v 1.42 2002/03/31 17:34:15 jason Exp $ */ /* $NetBSD: wsdisplay.c,v 1.37.4.1 2000/06/30 16:27:53 simonb Exp $ */ /* @@ -98,6 +98,7 @@ struct wsscreen { #define SCR_OPEN 1 /* is it open? */ #define SCR_WAITACTIVE 2 /* someone waiting on activation */ #define SCR_GRAPHICS 4 /* graphics mode, no text (emulation) output */ +#define SCR_DUMBFB 8 /* in use as dumb framebuffer (iff SCR_GRAPHICS) */ const struct wscons_syncops *scr_syncops; void *scr_synccookie; @@ -1066,19 +1067,30 @@ wsdisplay_internal_ioctl(sc, scr, cmd, data, flag, p) switch (cmd) { case WSDISPLAYIO_GMODE: - *(u_int *)data = (scr->scr_flags & SCR_GRAPHICS ? - WSDISPLAYIO_MODE_MAPPED : WSDISPLAYIO_MODE_EMUL); + if (scr->scr_flags & SCR_GRAPHICS) { + if (scr->scr_flags & SCR_DUMBFB) + *(u_int *)data = WSDISPLAYIO_MODE_DUMBFB; + else + *(u_int *)data = WSDISPLAYIO_MODE_MAPPED; + } else + *(u_int *)data = WSDISPLAYIO_MODE_EMUL; return (0); case WSDISPLAYIO_SMODE: #define d (*(int *)data) - if (d != WSDISPLAYIO_MODE_EMUL && d != WSDISPLAYIO_MODE_MAPPED) + if (d != WSDISPLAYIO_MODE_EMUL && + d != WSDISPLAYIO_MODE_MAPPED && + d != WSDISPLAYIO_MODE_DUMBFB) return (EINVAL); if (WSSCREEN_HAS_EMULATOR(scr)) { scr->scr_flags &= ~SCR_GRAPHICS; - if (d == WSDISPLAYIO_MODE_MAPPED) { - scr->scr_flags |= SCR_GRAPHICS; + if (d == WSDISPLAYIO_MODE_MAPPED || + d == WSDISPLAYIO_MODE_DUMBFB) { + scr->scr_flags |= SCR_GRAPHICS | + ((d == WSDISPLAYIO_MODE_DUMBFB) ? + SCR_DUMBFB : 0); + /* * wsmoused cohabitation with X-Window support * X-Window is starting |