diff options
Diffstat (limited to 'sys/arch/sparc64/dev')
-rw-r--r-- | sys/arch/sparc64/dev/creator.c | 37 | ||||
-rw-r--r-- | sys/arch/sparc64/dev/creatorvar.h | 24 |
2 files changed, 38 insertions, 23 deletions
diff --git a/sys/arch/sparc64/dev/creator.c b/sys/arch/sparc64/dev/creator.c index 01f4872afd1..c4e4f51d4eb 100644 --- a/sys/arch/sparc64/dev/creator.c +++ b/sys/arch/sparc64/dev/creator.c @@ -1,4 +1,4 @@ -/* $OpenBSD: creator.c,v 1.13 2002/07/25 19:04:43 miod Exp $ */ +/* $OpenBSD: creator.c,v 1.14 2002/07/26 16:57:16 jason Exp $ */ /* * Copyright (c) 2002 Jason L. Wright (jason@thought.net) @@ -48,6 +48,7 @@ #include <dev/wscons/wscons_raster.h> #include <dev/rasops/rasops.h> +#include <sparc64/dev/creatorreg.h> #include <sparc64/dev/creatorvar.h> struct wsscreen_descr creator_stdscreen = { @@ -76,6 +77,8 @@ int creator_show_screen(void *, void *, int, void (*cb)(void *, int, int), void *); paddr_t creator_mmap(void *, off_t, int); static int a2int(char *, int); +void creator_ras_fifo_wait(struct creator_softc *, int); +void creator_ras_wait(struct creator_softc *); struct wsdisplay_accessops creator_accessops = { creator_ioctl, @@ -308,3 +311,35 @@ a2int(char *cp, int deflt) i = i * 10 + *cp++ - '0'; return (i); } + +void +creator_ras_fifo_wait(sc, n) + struct creator_softc *sc; + int n; +{ + int32_t cache = sc->sc_fifo_cache; + + if (cache < n) { + do { + cache = FBC_READ(sc, FFB_FBC_UCSR); + cache = (cache & FBC_UCSR_FIFO_MASK) - 8; + } while (cache < n); + } + sc->sc_fifo_cache = cache - n; +} + +void +creator_ras_wait(sc) + struct creator_softc *sc; +{ + u_int32_t ucsr, r; + + while (1) { + ucsr = FBC_READ(sc, FFB_FBC_UCSR); + if ((ucsr & (FBC_UCSR_FB_BUSY|FBC_UCSR_RP_BUSY)) == 0) + break; + r = ucsr & (FFB_UCSR_READ_ERR | FFB_UCSR_FIFO_OVFL); + if (r != 0) + FBC_WRITE(sc, FFB_FBC_UCSR, r); + } +} diff --git a/sys/arch/sparc64/dev/creatorvar.h b/sys/arch/sparc64/dev/creatorvar.h index b00775defe5..9ce4fe80f8c 100644 --- a/sys/arch/sparc64/dev/creatorvar.h +++ b/sys/arch/sparc64/dev/creatorvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: creatorvar.h,v 1.3 2002/07/26 16:39:04 jason Exp $ */ +/* $OpenBSD: creatorvar.h,v 1.4 2002/07/26 16:57:16 jason Exp $ */ /* * Copyright (c) 2002 Jason L. Wright (jason@thought.net), @@ -32,27 +32,6 @@ * POSSIBILITY OF SUCH DAMAGE. */ -/* Number of register sets */ -#define FFB_NREGS 24 - -/* Register set numbers */ -#define FFB_REG_PROM 0 -#define FFB_REG_DAC 1 -#define FFB_REG_FBC 2 -#define FFB_REG_DFB8R 3 -#define FFB_REG_DFB8G 4 -#define FFB_REG_DFB8B 5 -#define FFB_REG_DFB8X 6 -#define FFB_REG_DFB24 7 -#define FFB_REG_DFB32 8 -#define FFB_REG_SFB8R 9 -#define FFB_REG_SFB8G 10 -#define FFB_REG_SFB8B 11 -#define FFB_REG_SFB8X 12 -#define FFB_REG_SFB32 13 -#define FFB_REG_SFB64 14 -#define FFB_REG_DFB422A 15 - #define FFB_CREATOR 0 #define FFB_AFB 1 @@ -70,6 +49,7 @@ struct creator_softc { int sc_type; u_int sc_mode; struct rasops_info sc_rasops; + int32_t sc_fifo_cache; }; #define FBC_WRITE(sc,r,v) \ |