summaryrefslogtreecommitdiffstats
path: root/sys/dev/syscons
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2010-11-29 22:19:19 +0000
committerjkim <jkim@FreeBSD.org>2010-11-29 22:19:19 +0000
commit8a3b4abaf94708f6d6bd4208e6a1b47d1493bf5c (patch)
treeb9908ba7d3839c31ebd211c2636238046dfdad35 /sys/dev/syscons
parent94ee7fc25d93799cea14429b89c5fe0febf3a174 (diff)
downloadFreeBSD-src-8a3b4abaf94708f6d6bd4208e6a1b47d1493bf5c.zip
FreeBSD-src-8a3b4abaf94708f6d6bd4208e6a1b47d1493bf5c.tar.gz
Honor font size for the video mode when default fonts are compiled in kernel
and VESA mode is enabled from loader.
Diffstat (limited to 'sys/dev/syscons')
-rw-r--r--sys/dev/syscons/syscons.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 2f41f3a..d2c3ba2 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;
OpenPOWER on IntegriCloud