summaryrefslogtreecommitdiff
path: root/sys/dev/syscons/syscons.c
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2009-09-11 02:07:24 +0000
committerXin LI <delphij@FreeBSD.org>2009-09-11 02:07:24 +0000
commit493d6f54bc85aee304350c1a063994471d7c2d2c (patch)
tree3a59f57d6ab18584579943a2d00b9806f359f71d /sys/dev/syscons/syscons.c
parentac54649762aa1d6d323d1c4fd140d5a7e1668305 (diff)
Notes
Diffstat (limited to 'sys/dev/syscons/syscons.c')
-rw-r--r--sys/dev/syscons/syscons.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 653ff08274a9..4fcbf4173df6 100644
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -352,6 +352,7 @@ sc_attach_unit(int unit, int flags)
#endif
int vc;
struct cdev *dev;
+ u_int16_t vmode;
flags &= ~SC_KERNEL_CONSOLE;
@@ -372,16 +373,20 @@ sc_attach_unit(int unit, int flags)
if (sc_console == NULL) /* sc_console_unit < 0 */
sc_console = scp;
+ vmode = (flags >> 16) & 0x1fff;
+ if (vmode < M_VESA_BASE || vmode > M_VESA_MODE_MAX)
+ vmode = M_VESA_FULL_800;
+
#ifdef SC_PIXEL_MODE
- if ((sc->config & SC_VESA800X600)
- && (vidd_get_info(sc->adp, M_VESA_800x600, &info) == 0)) {
+ if ((sc->config & SC_VESAMODE)
+ && (vidd_get_info(sc->adp, vmode, &info) == 0)) {
#ifdef DEV_SPLASH
if (sc->flags & SC_SPLASH_SCRN)
splash_term(sc->adp);
#endif
- sc_set_graphics_mode(scp, NULL, M_VESA_800x600);
- sc_set_pixel_mode(scp, NULL, COL, ROW, 16, 8);
- sc->initial_mode = M_VESA_800x600;
+ sc_set_graphics_mode(scp, NULL, vmode);
+ sc_set_pixel_mode(scp, NULL, 0, 0, 16, 8);
+ sc->initial_mode = vmode;
#ifdef DEV_SPLASH
/* put up the splash again! */
if (sc->flags & SC_SPLASH_SCRN)
@@ -517,7 +522,7 @@ sctty_open(struct tty *tp)
if (scp == NULL) {
scp = SC_STAT(tp) = alloc_scp(sc, SC_VTY(tp));
if (ISGRAPHSC(scp))
- sc_set_pixel_mode(scp, NULL, COL, ROW, 16, 8);
+ sc_set_pixel_mode(scp, NULL, 0, 0, 16, 8);
}
if (!tp->t_winsize.ws_col && !tp->t_winsize.ws_row) {
tp->t_winsize.ws_col = scp->xsize;
@@ -2995,6 +3000,8 @@ init_scp(sc_softc_t *sc, int vty, scr_stat *scp)
scp->ysize = info.vi_height;
scp->xpixel = scp->xsize*info.vi_cwidth;
scp->ypixel = scp->ysize*info.vi_cheight;
+ }
+
scp->font_size = info.vi_cheight;
scp->font_width = info.vi_cwidth;
if (info.vi_cheight < 14) {
@@ -3016,7 +3023,7 @@ init_scp(sc_softc_t *sc, int vty, scr_stat *scp)
scp->font = NULL;
#endif
}
- }
+
sc_vtb_init(&scp->vtb, VTB_MEMORY, 0, 0, NULL, FALSE);
#ifndef __sparc64__
sc_vtb_init(&scp->scr, VTB_FRAMEBUFFER, 0, 0, NULL, FALSE);