From 8a3b4abaf94708f6d6bd4208e6a1b47d1493bf5c Mon Sep 17 00:00:00 2001 From: jkim Date: Mon, 29 Nov 2010 22:19:19 +0000 Subject: [PATCH] Honor font size for the video mode when default fonts are compiled in kernel and VESA mode is enabled from loader. --- sys/dev/syscons/syscons.c | 44 +++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index 2f41f3a0f584..d2c3ba270f79 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -348,7 +348,9 @@ static void sc_set_vesa_mode(scr_stat *scp, sc_softc_t *sc, int unit) { video_info_t info; + u_char *font; int depth; + int font_size; int i; int vmode; @@ -377,9 +379,37 @@ sc_set_vesa_mode(scr_stat *scp, sc_softc_t *sc, int unit) vidd_get_info(sc->adp, vmode, &info); } +#if !defined(SC_NO_FONT_LOADING) && defined(SC_DFLT_FONT) + font_size = info.vi_cheight; +#else + font_size = 16; +#endif + if (font_size < 14) + font_size = 8; + else if (font_size >= 16) + font_size = 16; + else + font_size = 14; #ifndef SC_NO_FONT_LOADING - if ((sc->fonts_loaded & FONT_16) == 0) - return; + switch (font_size) { + case 8: + if ((sc->fonts_loaded & FONT_8) == 0) + return; + font = sc->font_8; + break; + case 14: + if ((sc->fonts_loaded & FONT_14) == 0) + return; + font = sc->font_14; + break; + case 16: + if ((sc->fonts_loaded & FONT_16) == 0) + return; + font = sc->font_16; + break; + } +#else + font = NULL; #endif #ifdef DEV_SPLASH if ((sc->flags & SC_SPLASH_SCRN) != 0) @@ -398,16 +428,12 @@ sc_set_vesa_mode(scr_stat *scp, sc_softc_t *sc, int unit) scp->xpixel = info.vi_width; scp->ypixel = info.vi_height; scp->xsize = scp->xpixel / 8; - scp->ysize = scp->ypixel / 16; + scp->ysize = scp->ypixel / font_size; scp->xpos = 0; scp->ypos = scp->ysize - 1; scp->xoff = scp->yoff = 0; -#ifndef SC_NO_FONT_LOADING - scp->font = sc->font_16; -#else - scp->font = NULL; -#endif - scp->font_size = 16; + scp->font = font; + scp->font_size = font_size; scp->font_width = 8; scp->start = scp->xsize * scp->ysize - 1; scp->end = 0;