summaryrefslogtreecommitdiffstats
path: root/sys/dev/syscons
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2005-09-28 14:54:07 +0000
committermarius <marius@FreeBSD.org>2005-09-28 14:54:07 +0000
commitfe0a34c8f15fa82e0fec35f34ee9c6efe4abdcc4 (patch)
treebb4b1851d014027e2b948702d0726e8539fa0e12 /sys/dev/syscons
parent2d942f188d24ea6077fd2e56a8676851b448c161 (diff)
downloadFreeBSD-src-fe0a34c8f15fa82e0fec35f34ee9c6efe4abdcc4.zip
FreeBSD-src-fe0a34c8f15fa82e0fec35f34ee9c6efe4abdcc4.tar.gz
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
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 32a9166..fa522f8 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 ef5c026..73455f3 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 3c52a24..81498ec 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 dff5d89..f2debe3 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 5c8b843..adba5a1 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 542f301..45e96ae 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);
OpenPOWER on IntegriCloud