aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/syscons
diff options
context:
space:
mode:
authorMarius Strobl <marius@FreeBSD.org>2005-09-28 14:54:07 +0000
committerMarius Strobl <marius@FreeBSD.org>2005-09-28 14:54:07 +0000
commitb7c96c0d0b372b3798941b96a78eb907c036a3f3 (patch)
treebb4b1851d014027e2b948702d0726e8539fa0e12 /sys/dev/syscons
parentce8bf81ff2dbeb594978a4d81ff47cafb5eebff3 (diff)
downloadsrc-b7c96c0d0b372b3798941b96a78eb907c036a3f3.tar.gz
src-b7c96c0d0b372b3798941b96a78eb907c036a3f3.zip
Add a font width argument to vi_load_font_t, vi_save_font_t and vi_putm_t
and do some preparations for handling 12x22 fonts (currently lots of code implies and/or hardcodes a font width of 8 pixels). This will be required on sparc64 which uses a default font size of 12x22 in order to add font loading and saving support as well as to use a syscons(4)-supplied mouse pointer image. This API breakage is committed now so it can be MFC'ed in time for 6.0 and later on upcoming framebuffer drivers destined for use on sparc64 and which are expected to rely on using font loading internally and on a syscons(4)-supplied mouse pointer image can be easily MFC'ed to RELENG_6 rather than requiring a backport. Tested on: i386, sparc64, make universe MFC after: 1 week
Notes
Notes: svn path=/head/; revision=150686
Diffstat (limited to 'sys/dev/syscons')
-rw-r--r--sys/dev/syscons/scgfbrndr.c2
-rw-r--r--sys/dev/syscons/scmouse.c1
-rw-r--r--sys/dev/syscons/scvgarndr.c4
-rw-r--r--sys/dev/syscons/scvidctl.c6
-rw-r--r--sys/dev/syscons/syscons.c34
-rw-r--r--sys/dev/syscons/syscons.h10
6 files changed, 31 insertions, 26 deletions
diff --git a/sys/dev/syscons/scgfbrndr.c b/sys/dev/syscons/scgfbrndr.c
index 32a9166892f5..fa522f8e5e8f 100644
--- a/sys/dev/syscons/scgfbrndr.c
+++ b/sys/dev/syscons/scgfbrndr.c
@@ -323,7 +323,7 @@ gfb_mouse(scr_stat *scp, int x, int y, int on)
/* Display the mouse pointer image... */
(*vidsw[scp->sc->adapter]->putm)(scp->sc->adp, x, y,
- mouse_pointer, 0xffffffff, 16);
+ mouse_pointer, 0xffffffff, 16, 8);
} else {
/*
diff --git a/sys/dev/syscons/scmouse.c b/sys/dev/syscons/scmouse.c
index ef5c0260cf0a..73455f315884 100644
--- a/sys/dev/syscons/scmouse.c
+++ b/sys/dev/syscons/scmouse.c
@@ -883,6 +883,7 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag,
#ifndef SC_NO_FONT_LOADING
if (ISTEXTSC(cur_scp) && (cur_scp->font != NULL))
sc_load_font(cur_scp, 0, cur_scp->font_size,
+ cur_scp->font_width,
cur_scp->font + cur_scp->font_size
* cur_scp->sc->mouse_char,
cur_scp->sc->mouse_char, 4);
diff --git a/sys/dev/syscons/scvgarndr.c b/sys/dev/syscons/scvgarndr.c
index 3c52a2483636..81498ecad167 100644
--- a/sys/dev/syscons/scvgarndr.c
+++ b/sys/dev/syscons/scvgarndr.c
@@ -312,7 +312,7 @@ draw_txtcharcursor(scr_stat *scp, int at, u_short c, u_short a, int flip)
font[i] ^= 0xff;
}
/* XXX */
- (*vidsw[sc->adapter]->load_font)(sc->adp, 0, h, font,
+ (*vidsw[sc->adapter]->load_font)(sc->adp, 0, h, 8, font,
sc->cursor_char, 1);
sc_vtb_putc(&scp->scr, at, sc->cursor_char, a);
} else
@@ -438,7 +438,7 @@ draw_txtmouse(scr_stat *scp, int x, int y)
while (!(inb(crtc_addr + 6) & 0x08)) /* idle */ ;
#endif
c = scp->sc->mouse_char;
- (*vidsw[scp->sc->adapter]->load_font)(scp->sc->adp, 0, 32, font_buf,
+ (*vidsw[scp->sc->adapter]->load_font)(scp->sc->adp, 0, 32, 8, font_buf,
c, 4);
sc_vtb_putc(&scp->scr, pos, c, sc_vtb_geta(&scp->scr, pos));
diff --git a/sys/dev/syscons/scvidctl.c b/sys/dev/syscons/scvidctl.c
index dff5d8923a18..f2debe35e824 100644
--- a/sys/dev/syscons/scvidctl.c
+++ b/sys/dev/syscons/scvidctl.c
@@ -694,11 +694,11 @@ sc_vid_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct thread *
* Don't load fonts for now... XXX
*/
if (scp->sc->fonts_loaded & FONT_8)
- sc_load_font(scp, 0, 8, scp->sc->font_8, 0, 256);
+ sc_load_font(scp, 0, 8, 8, scp->sc->font_8, 0, 256);
if (scp->sc->fonts_loaded & FONT_14)
- sc_load_font(scp, 0, 14, scp->sc->font_14, 0, 256);
+ sc_load_font(scp, 0, 14, 8, scp->sc->font_14, 0, 256);
if (scp->sc->fonts_loaded & FONT_16)
- sc_load_font(scp, 0, 16, scp->sc->font_16, 0, 256);
+ sc_load_font(scp, 0, 16, 8, scp->sc->font_16, 0, 256);
}
#endif /* SC_NO_FONT_LOADING */
#endif
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 5c8b843c2ac5..adba5a1009be 100644
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -1285,7 +1285,7 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
* Don't load if the current font size is not 8x8.
*/
if (ISTEXTSC(sc->cur_scp) && (sc->cur_scp->font_size < 14))
- sc_load_font(sc->cur_scp, 0, 8, sc->font_8, 0, 256);
+ sc_load_font(sc->cur_scp, 0, 8, 8, sc->font_8, 0, 256);
return 0;
case GIO_FONT8x8: /* get 8x8 dot font */
@@ -1311,7 +1311,7 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
if (ISTEXTSC(sc->cur_scp)
&& (sc->cur_scp->font_size >= 14)
&& (sc->cur_scp->font_size < 16))
- sc_load_font(sc->cur_scp, 0, 14, sc->font_14, 0, 256);
+ sc_load_font(sc->cur_scp, 0, 14, 8, sc->font_14, 0, 256);
return 0;
case GIO_FONT8x14: /* get 8x14 dot font */
@@ -1335,7 +1335,7 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
* Don't load if the current font size is not 8x16.
*/
if (ISTEXTSC(sc->cur_scp) && (sc->cur_scp->font_size >= 16))
- sc_load_font(sc->cur_scp, 0, 16, sc->font_16, 0, 256);
+ sc_load_font(sc->cur_scp, 0, 16, 8, sc->font_16, 0, 256);
return 0;
case GIO_FONT8x16: /* get 8x16 dot font */
@@ -2752,21 +2752,21 @@ scinit(int unit, int flags)
bcopy(dflt_font_16, sc->font_16, sizeof(dflt_font_16));
sc->fonts_loaded = FONT_16 | FONT_14 | FONT_8;
if (scp->font_size < 14) {
- sc_load_font(scp, 0, 8, sc->font_8, 0, 256);
+ sc_load_font(scp, 0, 8, 8, sc->font_8, 0, 256);
} else if (scp->font_size >= 16) {
- sc_load_font(scp, 0, 16, sc->font_16, 0, 256);
+ sc_load_font(scp, 0, 16, 8, sc->font_16, 0, 256);
} else {
- sc_load_font(scp, 0, 14, sc->font_14, 0, 256);
+ sc_load_font(scp, 0, 14, 8, sc->font_14, 0, 256);
}
#else /* !SC_DFLT_FONT */
if (scp->font_size < 14) {
- sc_save_font(scp, 0, 8, sc->font_8, 0, 256);
+ sc_save_font(scp, 0, 8, 8, sc->font_8, 0, 256);
sc->fonts_loaded = FONT_8;
} else if (scp->font_size >= 16) {
- sc_save_font(scp, 0, 16, sc->font_16, 0, 256);
+ sc_save_font(scp, 0, 16, 8, sc->font_16, 0, 256);
sc->fonts_loaded = FONT_16;
} else {
- sc_save_font(scp, 0, 14, sc->font_14, 0, 256);
+ sc_save_font(scp, 0, 14, 8, sc->font_14, 0, 256);
sc->fonts_loaded = FONT_14;
}
#endif /* SC_DFLT_FONT */
@@ -3444,13 +3444,13 @@ set_mode(scr_stat *scp)
if (!(scp->status & PIXEL_MODE) && ISFONTAVAIL(scp->sc->adp->va_flags)) {
if (scp->font_size < 14) {
if (scp->sc->fonts_loaded & FONT_8)
- sc_load_font(scp, 0, 8, scp->sc->font_8, 0, 256);
+ sc_load_font(scp, 0, 8, 8, scp->sc->font_8, 0, 256);
} else if (scp->font_size >= 16) {
if (scp->sc->fonts_loaded & FONT_16)
- sc_load_font(scp, 0, 16, scp->sc->font_16, 0, 256);
+ sc_load_font(scp, 0, 16, 8, scp->sc->font_16, 0, 256);
} else {
if (scp->sc->fonts_loaded & FONT_14)
- sc_load_font(scp, 0, 14, scp->sc->font_14, 0, 256);
+ sc_load_font(scp, 0, 14, 8, scp->sc->font_14, 0, 256);
}
/*
* FONT KLUDGE:
@@ -3481,26 +3481,28 @@ sc_set_border(scr_stat *scp, int color)
#ifndef SC_NO_FONT_LOADING
void
-sc_load_font(scr_stat *scp, int page, int size, u_char *buf,
+sc_load_font(scr_stat *scp, int page, int size, int width, u_char *buf,
int base, int count)
{
sc_softc_t *sc;
sc = scp->sc;
sc->font_loading_in_progress = TRUE;
- (*vidsw[sc->adapter]->load_font)(sc->adp, page, size, buf, base, count);
+ (*vidsw[sc->adapter]->load_font)(sc->adp, page, size, width, buf, base,
+ count);
sc->font_loading_in_progress = FALSE;
}
void
-sc_save_font(scr_stat *scp, int page, int size, u_char *buf,
+sc_save_font(scr_stat *scp, int page, int size, int width, u_char *buf,
int base, int count)
{
sc_softc_t *sc;
sc = scp->sc;
sc->font_loading_in_progress = TRUE;
- (*vidsw[sc->adapter]->save_font)(sc->adp, page, size, buf, base, count);
+ (*vidsw[sc->adapter]->save_font)(sc->adp, page, size, width, buf, base,
+ count);
sc->font_loading_in_progress = FALSE;
}
diff --git a/sys/dev/syscons/syscons.h b/sys/dev/syscons/syscons.h
index 542f301ecfce..45e96aec7a30 100644
--- a/sys/dev/syscons/syscons.h
+++ b/sys/dev/syscons/syscons.h
@@ -252,9 +252,11 @@ typedef struct sc_softc {
#define FONT_8 2
#define FONT_14 4
#define FONT_16 8
+#define FONT_22 8
u_char *font_8;
u_char *font_14;
u_char *font_16;
+ u_char *font_22;
#endif
u_char cursor_char;
@@ -542,10 +544,10 @@ int sc_attach_unit(int unit, int flags);
int set_mode(scr_stat *scp);
void sc_set_border(scr_stat *scp, int color);
-void sc_load_font(scr_stat *scp, int page, int size, u_char *font,
- int base, int count);
-void sc_save_font(scr_stat *scp, int page, int size, u_char *font,
- int base, int count);
+void sc_load_font(scr_stat *scp, int page, int size, int width,
+ u_char *font, int base, int count);
+void sc_save_font(scr_stat *scp, int page, int size, int width,
+ u_char *font, int base, int count);
void sc_show_font(scr_stat *scp, int page);
void sc_touch_scrn_saver(void);