From 9ff521fa82ed0cb58d169bbe3cdc21b0ba9051c4 Mon Sep 17 00:00:00 2001 From: Miod Vallat Date: Tue, 15 Mar 2005 18:40:18 +0000 Subject: 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. --- sys/arch/sparc/dev/fb.c | 22 ++++++++++++++++++++-- sys/arch/sparc64/dev/creator.c | 16 +--------------- sys/arch/sparc64/dev/fb.c | 28 +++++++++++++++++++++++----- sys/arch/sparc64/dev/vgafb.c | 16 +--------------- 4 files changed, 45 insertions(+), 37 deletions(-) (limited to 'sys/arch') 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 -#include #include #include @@ -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) { @@ -388,6 +399,13 @@ fbwscons_console_init(struct sunfb *sf, int row) if (sf->sf_ro.ri_ccol >= sf->sf_ro.ri_cols) 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 #include -#include #include #include #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) { @@ -210,6 +221,13 @@ fbwscons_console_init(struct sunfb *sf, int row) if (sf->sf_ro.ri_ccol >= sf->sf_ro.ri_cols) 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; -} -- cgit v1.2.3