diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2005-03-15 18:40:18 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2005-03-15 18:40:18 +0000 |
commit | 9ff521fa82ed0cb58d169bbe3cdc21b0ba9051c4 (patch) | |
tree | 8627b05f1227caa70f0203386bf67205eacd8d55 /sys/arch | |
parent | 21a609c63ad15a12cd0ec640ee378bf1529aeb42 (diff) |
Take care of updating the PROMs view of the cursor position in the common fb
code, rather than doing this in only a subset of the fb drivers.
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/sparc/dev/fb.c | 22 | ||||
-rw-r--r-- | sys/arch/sparc64/dev/creator.c | 16 | ||||
-rw-r--r-- | sys/arch/sparc64/dev/fb.c | 28 | ||||
-rw-r--r-- | sys/arch/sparc64/dev/vgafb.c | 16 |
4 files changed, 45 insertions, 37 deletions
diff --git a/sys/arch/sparc/dev/fb.c b/sys/arch/sparc/dev/fb.c index 306a6e3b36a..c323338b8a2 100644 --- a/sys/arch/sparc/dev/fb.c +++ b/sys/arch/sparc/dev/fb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fb.c,v 1.32 2005/03/07 16:44:50 miod Exp $ */ +/* $OpenBSD: fb.c,v 1.33 2005/03/15 18:40:12 miod Exp $ */ /* $NetBSD: fb.c,v 1.23 1997/07/07 23:30:22 pk Exp $ */ /* @@ -84,7 +84,6 @@ #endif #include <dev/wscons/wsdisplayvar.h> -#include <dev/wscons/wscons_raster.h> #include <dev/rasops/rasops.h> #include <machine/fbvar.h> @@ -111,6 +110,7 @@ fb_unblank() static int a2int(char *, int); #endif static void fb_initwsd(struct sunfb *); +static void fb_updatecursor(struct rasops_info *); void fb_setsize(struct sunfb *sf, int def_depth, int def_width, int def_height, @@ -311,6 +311,17 @@ fb_initwsd(struct sunfb *sf) sf->sf_wsd.textops = &sf->sf_ro.ri_ops; } +static void +fb_updatecursor(struct rasops_info *ri) +{ + struct sunfb *sf = (struct sunfb *)ri->ri_hw; + + if (sf->sf_crowp != NULL) + *sf->sf_crowp = ri->ri_crow; + if (sf->sf_ccolp != NULL) + *sf->sf_ccolp = ri->ri_ccol; +} + void fbwscons_init(struct sunfb *sf, int flags) { @@ -389,6 +400,13 @@ fbwscons_console_init(struct sunfb *sf, int row) sf->sf_ro.ri_ccol = sf->sf_ro.ri_cols - 1; /* + * Take care of updating the PROM cursor position as well if we can. + */ + if (sf->sf_ro.ri_updatecursor == NULL && + (sf->sf_ccolp != NULL || sf->sf_crowp != NULL)) + sf->sf_ro.ri_updatecursor = fb_updatecursor; + + /* * Select appropriate color settings to mimic a * black on white Sun console. */ diff --git a/sys/arch/sparc64/dev/creator.c b/sys/arch/sparc64/dev/creator.c index aa234a112ae..03172058173 100644 --- a/sys/arch/sparc64/dev/creator.c +++ b/sys/arch/sparc64/dev/creator.c @@ -1,4 +1,4 @@ -/* $OpenBSD: creator.c,v 1.32 2005/03/07 16:44:52 miod Exp $ */ +/* $OpenBSD: creator.c,v 1.33 2005/03/15 18:40:15 miod Exp $ */ /* * Copyright (c) 2002 Jason L. Wright (jason@thought.net) @@ -60,7 +60,6 @@ void creator_ras_init(struct creator_softc *); void creator_ras_copyrows(void *, int, int, int); void creator_ras_erasecols(void *, int, int, int, long int); void creator_ras_eraserows(void *, int, int, long int); -void creator_ras_updatecursor(struct rasops_info *); void creator_ras_fill(struct creator_softc *); void creator_ras_setfg(struct creator_softc *, int32_t); int creator_setcursor(struct creator_softc *, struct wsdisplay_cursor *); @@ -137,7 +136,6 @@ creator_attach(struct creator_softc *sc) } if (sc->sc_console) { - sc->sc_sunfb.sf_ro.ri_updatecursor = creator_ras_updatecursor; fbwscons_console_init(&sc->sc_sunfb, -1); } @@ -674,15 +672,3 @@ creator_ras_setfg(sc, fg) FBC_WRITE(sc, FFB_FBC_FG, fg); creator_ras_wait(sc); } - -void -creator_ras_updatecursor(ri) - struct rasops_info *ri; -{ - struct creator_softc *sc = ri->ri_hw; - - if (sc->sc_sunfb.sf_crowp != NULL) - *sc->sc_sunfb.sf_crowp = ri->ri_crow; - if (sc->sc_sunfb.sf_ccolp != NULL) - *sc->sc_sunfb.sf_ccolp = ri->ri_ccol; -} diff --git a/sys/arch/sparc64/dev/fb.c b/sys/arch/sparc64/dev/fb.c index 90bd0f806f7..5601b299f85 100644 --- a/sys/arch/sparc64/dev/fb.c +++ b/sys/arch/sparc64/dev/fb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fb.c,v 1.7 2005/03/07 16:44:52 miod Exp $ */ +/* $OpenBSD: fb.c,v 1.8 2005/03/15 18:40:15 miod Exp $ */ /* $NetBSD: fb.c,v 1.23 1997/07/07 23:30:22 pk Exp $ */ /* @@ -80,15 +80,11 @@ #include <machine/conf.h> #include <dev/wscons/wsdisplayvar.h> -#include <dev/wscons/wscons_raster.h> #include <dev/rasops/rasops.h> #include <machine/fbvar.h> #include "wsdisplay.h" -static int a2int(char *, int); -static void fb_initwsd(struct sunfb *); - /* * emergency unblank code * XXX should be somewhat moved to wscons MI code @@ -106,6 +102,10 @@ fb_unblank() #if NWSDISPLAY > 0 +static int a2int(char *, int); +static void fb_initwsd(struct sunfb *); +static void fb_updatecursor(struct rasops_info *); + void fb_setsize(struct sunfb *sf, int def_depth, int def_width, int def_height, int node, int unused) @@ -155,6 +155,17 @@ fb_initwsd(struct sunfb *sf) sf->sf_wsd.textops = &sf->sf_ro.ri_ops; } +static void +fb_updatecursor(struct rasops_info *ri) +{ + struct sunfb *sf = (struct sunfb *)ri->ri_hw; + + if (sf->sf_crowp != NULL) + *sf->sf_crowp = ri->ri_crow; + if (sf->sf_ccolp != NULL) + *sf->sf_ccolp = ri->ri_ccol; +} + void fbwscons_init(struct sunfb *sf, int flags) { @@ -211,6 +222,13 @@ fbwscons_console_init(struct sunfb *sf, int row) sf->sf_ro.ri_ccol = sf->sf_ro.ri_cols - 1; /* + * Take care of updating the PROM cursor position as weel if we can. + */ + if (sf->sf_ro.ri_updatecursor != NULL && + (sf->sf_ccolp != NULL || sf->sf_crowp != NULL)) + sf->sf_ro.ri_updatecursor = fb_updatecursor; + + /* * Select appropriate color settings to mimic a * black on white Sun console. */ diff --git a/sys/arch/sparc64/dev/vgafb.c b/sys/arch/sparc64/dev/vgafb.c index 6bc930a5d84..4d560d3f6d7 100644 --- a/sys/arch/sparc64/dev/vgafb.c +++ b/sys/arch/sparc64/dev/vgafb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vgafb.c,v 1.39 2005/03/07 16:44:52 miod Exp $ */ +/* $OpenBSD: vgafb.c,v 1.40 2005/03/15 18:40:15 miod Exp $ */ /* * Copyright (c) 2001 Jason L. Wright (jason@thought.net) @@ -88,7 +88,6 @@ int vgafb_is_console(int); int vgafb_getcmap(struct vgafb_softc *, struct wsdisplay_cmap *); int vgafb_putcmap(struct vgafb_softc *, struct wsdisplay_cmap *); void vgafb_setcolor(void *, u_int, u_int8_t, u_int8_t, u_int8_t); -void vgafb_updatecursor(struct rasops_info *ri); struct wsdisplay_accessops vgafb_accessops = { vgafb_ioctl, @@ -171,7 +170,6 @@ vgafbattach(parent, self, aux) if (sc->sc_console) { sc->sc_ofhandle = OF_stdout(); fbwscons_setcolormap(&sc->sc_sunfb, vgafb_setcolor); - sc->sc_sunfb.sf_ro.ri_updatecursor = vgafb_updatecursor; fbwscons_console_init(&sc->sc_sunfb, -1); } else { /* sc->sc_ofhandle = XXX */ @@ -465,15 +463,3 @@ fail: bus_space_unmap(pa->pa_memt, sc->sc_mem_h, sc->sc_mem_size); return (1); } - -void -vgafb_updatecursor(ri) - struct rasops_info *ri; -{ - struct vgafb_softc *sc = ri->ri_hw; - - if (sc->sc_crowp != NULL) - *sc->sc_crowp = ri->ri_crow; - if (sc->sc_ccolp != NULL) - *sc->sc_ccolp = ri->ri_ccol; -} |