diff options
| author | Xin LI <delphij@FreeBSD.org> | 2009-09-11 02:07:24 +0000 |
|---|---|---|
| committer | Xin LI <delphij@FreeBSD.org> | 2009-09-11 02:07:24 +0000 |
| commit | 493d6f54bc85aee304350c1a063994471d7c2d2c (patch) | |
| tree | 3a59f57d6ab18584579943a2d00b9806f359f71d /sys/dev/syscons/syscons.c | |
| parent | ac54649762aa1d6d323d1c4fd140d5a7e1668305 (diff) | |
Notes
Diffstat (limited to 'sys/dev/syscons/syscons.c')
| -rw-r--r-- | sys/dev/syscons/syscons.c | 21 |
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); |
