Module Name:    src
Committed By:   tsutsui
Date:           Fri Mar 27 12:25:41 UTC 2009

Modified Files:
        src/sys/dev/sbus: zx.c zxreg.h zxvar.h

Log Message:
Use bus_space(9) to access registers.  SETREG() macro using bogus casts
against packed structures doesn't work on gcc4. (no character on screen)
See also:
http://mail-index.NetBSD.org/port-sparc/2003/11/11/0002.html

Should be pulled up to netbsd-4 and netbsd-5.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/sbus/zx.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/sbus/zxreg.h
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/sbus/zxvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/sbus/zx.c
diff -u src/sys/dev/sbus/zx.c:1.24 src/sys/dev/sbus/zx.c:1.25
--- src/sys/dev/sbus/zx.c:1.24	Wed Jun 11 21:25:31 2008
+++ src/sys/dev/sbus/zx.c	Fri Mar 27 12:25:41 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: zx.c,v 1.24 2008/06/11 21:25:31 drochner Exp $	*/
+/*	$NetBSD: zx.c,v 1.25 2009/03/27 12:25:41 tsutsui Exp $	*/
 
 /*
  *  Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -45,7 +45,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zx.c,v 1.24 2008/06/11 21:25:31 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zx.c,v 1.25 2009/03/27 12:25:41 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -76,9 +76,6 @@
 #error Sorry, this driver needs the RASTERCONSOLE option
 #endif
 
-/* Force 32-bit writes. */
-#define	SETREG(r, v)	(*((volatile u_int32_t *)&r) = (v))
-
 #define	ZX_STD_ROP	(ZX_ROP_NEW | ZX_ATTR_WE_ENABLE | \
     ZX_ATTR_OE_ENABLE | ZX_ATTR_FORCE_WID)
 
@@ -160,7 +157,6 @@
 	bus_space_tag_t bt;
 	struct fbdevice *fb;
 	struct rasops_info *ri;
-	volatile struct zx_command *zc;
 	int isconsole;
 
 	sc = device_private(self);
@@ -185,36 +181,35 @@
 		aprint_error_dev(self, "can't map zc\n");
 		return;
 	}
-	sc->sc_zc = (struct zx_command *)bus_space_vaddr(bt, bh);
+	sc->sc_bhzc = bh;
 
 	if (sbus_bus_map(bt, sa->sa_slot, sa->sa_offset + ZX_OFF_LD_SS0,
 	    PAGE_SIZE, BUS_SPACE_MAP_LINEAR, &bh) != 0) {
 		aprint_error_dev(self, "can't map ld/ss0\n");
 		return;
 	}
-	sc->sc_zd_ss0 = (struct zx_draw *)bus_space_vaddr(bt, bh);
+	sc->sc_bhzdss0 = bh;
 
 	if (sbus_bus_map(bt, sa->sa_slot, sa->sa_offset + ZX_OFF_LD_SS1,
 	    PAGE_SIZE, BUS_SPACE_MAP_LINEAR, &bh) != 0) {
 		aprint_error_dev(self, "can't map ld/ss1\n");
 		return;
 	}
-	sc->sc_zd_ss1 =
-	    (struct zx_draw_ss1 *)bus_space_vaddr(bt, bh);
+	sc->sc_bhzdss1 = bh;
 
 	if (sbus_bus_map(bt, sa->sa_slot, sa->sa_offset + ZX_OFF_LX_CROSS,
 	    PAGE_SIZE, BUS_SPACE_MAP_LINEAR, &bh) != 0) {
 		aprint_error_dev(self, "can't map zx\n");
 		return;
 	}
-	sc->sc_zx = (struct zx_cross *)bus_space_vaddr(bt, bh);
+	sc->sc_bhzx = bh;
 
 	if (sbus_bus_map(bt, sa->sa_slot, sa->sa_offset + ZX_OFF_LX_CURSOR,
 	    PAGE_SIZE, BUS_SPACE_MAP_LINEAR, &bh) != 0) {
 		aprint_error_dev(self, "can't map zcu\n");
 		return;
 	}
-	sc->sc_zcu = (struct zx_cursor *)bus_space_vaddr(bt, bh);
+	sc->sc_bhzcu = bh;
 
 	fb->fb_driver = &zx_fbdriver;
 	fb->fb_device = &sc->sc_dv;
@@ -248,14 +243,13 @@
 	 * called before we get our hooks in place.  So, we mask off access
 	 * to the framebuffer until it's done.
 	 */
-	zc = sc->sc_zc;
-	SETREG(zc->zc_fontt, 1);
-	SETREG(zc->zc_fontmsk, 0);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_fontt, 1);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_fontmsk, 0);
 
 	fbrcons_init(&sc->sc_fb);
 
-	SETREG(zc->zc_fontt, 0);
-	SETREG(zc->zc_fontmsk, 0xffffffff);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_fontt, 0);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_fontmsk, 0xffffffff);
 
 	ri->ri_hw = sc;
 	ri->ri_do_cursor = zx_do_cursor;
@@ -487,13 +481,9 @@
 void
 zx_reset(struct zx_softc *sc)
 {
-	volatile struct zx_draw *zd;
-	volatile struct zx_command *zc;
 	struct fbtype *fbt;
 	u_int i;
 
-	zd = sc->sc_zd_ss0;
-	zc = sc->sc_zc;
 	fbt = &sc->sc_fb.fb_type;
 
 	zx_cross_loadwid(sc, ZX_WID_DBL_8, 0, 0x2c0);
@@ -501,24 +491,25 @@
 	zx_cross_loadwid(sc, ZX_WID_DBL_8, 2, 0x20);
 	zx_cross_loadwid(sc, ZX_WID_DBL_24, 1, 0x30);
 
-	i = sc->sc_zd_ss1->zd_misc;
+	i = bus_space_read_4(sc->sc_bt, sc->sc_bhzdss1, zd_misc);
 	i |= ZX_SS1_MISC_ENABLE;
-	SETREG(sc->sc_zd_ss1->zd_misc, i);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss1, zd_misc, i);
 
-	SETREG(zd->zd_wid, 0xffffffff);
-	SETREG(zd->zd_widclip, 0);
-	SETREG(zd->zd_wmask, 0xffff);
-	SETREG(zd->zd_vclipmin, 0);
-	SETREG(zd->zd_vclipmax,
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_wid, 0xffffffff);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_widclip, 0);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_wmask, 0xffff);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_vclipmin, 0);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_vclipmax,
 	    (fbt->fb_width - 1) | ((fbt->fb_height - 1) << 16));
-	SETREG(zd->zd_fg, 0);
-	SETREG(zd->zd_planemask, 0xff000000);
-	SETREG(zd->zd_rop, ZX_STD_ROP);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_fg, 0);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_planemask, 0xff000000);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_rop, ZX_STD_ROP);
 
-	SETREG(zc->zc_extent,
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_extent,
 	    (fbt->fb_width - 1) | ((fbt->fb_height - 1) << 11));
-	SETREG(zc->zc_addrspace, ZX_ADDRSPC_FONT_OBGR);
-	SETREG(zc->zc_fontt, 0);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_addrspace,
+	    ZX_ADDRSPC_FONT_OBGR);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_fontt, 0);
 
 	for (i = 0; i < 256; i++) {
 		sc->sc_cmap[i] = rasops_cmap[i * 3];
@@ -532,13 +523,11 @@
 int
 zx_cross_wait(struct zx_softc *sc)
 {
-	volatile struct zx_cross *zx;
 	int i;
 
-	zx = sc->sc_zx;
-
 	for (i = 300000; i != 0; i--) {
-		if ((zx->zx_csr & ZX_CROSS_CSR_PROGRESS) == 0)
+		if ((bus_space_read_4(sc->sc_bt, sc->sc_bhzx, zx_csr) &
+		    ZX_CROSS_CSR_PROGRESS) == 0)
 			break;
 		DELAY(1);
 	}
@@ -552,11 +541,9 @@
 int
 zx_cross_loadwid(struct zx_softc *sc, u_int type, u_int index, u_int value)
 {
-	volatile struct zx_cross *zx;
 	u_int tmp = 0;
 
-	zx = sc->sc_zx;
-	SETREG(zx->zx_type, ZX_CROSS_TYPE_WID);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_type, ZX_CROSS_TYPE_WID);
 
 	if (zx_cross_wait(sc))
 		return (1);
@@ -566,10 +553,11 @@
 	else if (type == ZX_WID_DBL_24)
 		tmp = index & 0x3f;
 
-	SETREG(zx->zx_type, 0x5800 + tmp);
-	SETREG(zx->zx_value, value);
-	SETREG(zx->zx_type, ZX_CROSS_TYPE_WID);
-	SETREG(zx->zx_csr, ZX_CROSS_CSR_UNK | ZX_CROSS_CSR_UNK2);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_type, 0x5800 + tmp);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_value, value);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_type, ZX_CROSS_TYPE_WID);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_csr,
+	    ZX_CROSS_CSR_UNK | ZX_CROSS_CSR_UNK2);
 
 	return (0);
 }
@@ -577,41 +565,37 @@
 int
 zx_cmap_put(struct zx_softc *sc)
 {
-	volatile struct zx_cross *zx;
 	const u_char *b;
 	u_int i, t;
 
-	zx = sc->sc_zx;
-
-	SETREG(zx->zx_type, ZX_CROSS_TYPE_CLUT0);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_type, ZX_CROSS_TYPE_CLUT0);
 	if (zx_cross_wait(sc))
 		return (1);
 
-	SETREG(zx->zx_type, ZX_CROSS_TYPE_CLUTDATA);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_type,
+	    ZX_CROSS_TYPE_CLUTDATA);
 
 	for (i = 0, b = sc->sc_cmap; i < 256; i++) {
 		t = b[i];
 		t |= b[i + 256] << 8;
 		t |= b[i + 512] << 16;
-		SETREG(zx->zx_value, t);
+		bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_value, t);
 	}
 
-	SETREG(zx->zx_type, ZX_CROSS_TYPE_CLUT0);
-	i = zx->zx_csr;
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_type, ZX_CROSS_TYPE_CLUT0);
+	i = bus_space_read_4(sc->sc_bt, sc->sc_bhzx, zx_csr);
 	i = i | ZX_CROSS_CSR_UNK | ZX_CROSS_CSR_UNK2;
-	SETREG(zx->zx_csr, i);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_csr, i);
 	return (0);
 }
 
 void
 zx_cursor_move(struct zx_softc *sc)
 {
-	volatile struct zx_cursor *zcu;
 	int sx, sy, x, y;
 
 	x = sc->sc_curpos.x - sc->sc_curhot.x;
 	y = sc->sc_curpos.y - sc->sc_curhot.y;
-	zcu = sc->sc_zcu;
 
 	if (x < 0) {
 		sx = min(-x, 32);
@@ -631,85 +615,84 @@
 		zx_cursor_set(sc);
 	}
 
-	SETREG(zcu->zcu_sxy, ((y & 0x7ff) << 11) | (x & 0x7ff));
-	SETREG(zcu->zcu_misc, zcu->zcu_misc | 0x30);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_sxy,
+	    ((y & 0x7ff) << 11) | (x & 0x7ff));
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc,
+	    bus_space_read_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc) | 0x30);
 
 	/* XXX Necessary? */
-	SETREG(zcu->zcu_misc, zcu->zcu_misc | 0x80);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc,
+	    bus_space_read_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc) | 0x80);
 }
 
 void
 zx_cursor_set(struct zx_softc *sc)
 {
-	volatile struct zx_cursor *zcu;
 	int i, j, data;
 
-	zcu = sc->sc_zcu;
-
 	if ((sc->sc_flags & ZX_CURSOR) != 0)
-		SETREG(zcu->zcu_misc, zcu->zcu_misc & ~0x80);
+		bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc,
+		    bus_space_read_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc) &
+		    ~0x80);
 
 	for (j = 0; j < 2; j++) {
-		SETREG(zcu->zcu_type, 0x20 << j);
+		bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_type, 0x20 << j);
 
 		for (i = sc->sc_shifty; i < 32; i++) {
 			data = sc->sc_curbits[j][i];
-			SETREG(zcu->zcu_data, data >> sc->sc_shiftx);
+			bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_data,
+			    data >> sc->sc_shiftx);
 		}
 		for (i = sc->sc_shifty; i != 0; i--)
-			SETREG(zcu->zcu_data, 0);
+			bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_data, 0);
 	}
 
 	if ((sc->sc_flags & ZX_CURSOR) != 0)
-		SETREG(zcu->zcu_misc, zcu->zcu_misc | 0x80);
+		bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc,
+		    bus_space_read_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc) | 0x80);
 }
 
 void
 zx_cursor_blank(struct zx_softc *sc)
 {
-	volatile struct zx_cursor *zcu;
 
 	sc->sc_flags &= ~ZX_CURSOR;
-	zcu = sc->sc_zcu;
-	SETREG(zcu->zcu_misc, zcu->zcu_misc & ~0x80);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc,
+	    bus_space_read_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc) & ~0x80);
 }
 
 void
 zx_cursor_unblank(struct zx_softc *sc)
 {
-	volatile struct zx_cursor *zcu;
 
 	sc->sc_flags |= ZX_CURSOR;
-	zcu = sc->sc_zcu;
-	SETREG(zcu->zcu_misc, zcu->zcu_misc | 0x80);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc,
+	    bus_space_read_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc) | 0x80);
 }
 
 void
 zx_cursor_color(struct zx_softc *sc)
 {
-	volatile struct zx_cursor *zcu;
 	u_int8_t tmp;
 
-	zcu = sc->sc_zcu;
-
-	SETREG(zcu->zcu_type, 0x50);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_type, 0x50);
 
 	tmp = sc->sc_curcmap[0] | (sc->sc_curcmap[2] << 8) |
 	    (sc->sc_curcmap[4] << 16);
-	SETREG(zcu->zcu_data, tmp);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_data, tmp);
 
 	tmp = sc->sc_curcmap[1] | (sc->sc_curcmap[3] << 8) |
 	    (sc->sc_curcmap[5] << 16);
-	SETREG(zcu->zcu_data, sc->sc_curcmap[1]);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_data, sc->sc_curcmap[1]);
 
-	SETREG(zcu->zcu_misc, zcu->zcu_misc | 0x03);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc,
+	    bus_space_read_4(sc->sc_bt, sc->sc_bhzcu, zcu_misc) | 0x03);
 }
 
 void
 zx_blank(struct device *dv)
 {
 	struct zx_softc *sc;
-	volatile struct zx_cross *zx;
 
 	sc = device_private(dv);
 
@@ -717,16 +700,16 @@
 		return;
 	sc->sc_flags |= ZX_BLANKED;
 
-	zx = sc->sc_zx;
-	SETREG(zx->zx_type, ZX_CROSS_TYPE_VIDEO);
-	SETREG(zx->zx_csr, zx->zx_csr & ~ZX_CROSS_CSR_ENABLE);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_type, ZX_CROSS_TYPE_VIDEO);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_csr,
+	    bus_space_read_4(sc->sc_bt, sc->sc_bhzx, zx_csr) &
+	    ~ZX_CROSS_CSR_ENABLE);
 }
 
 void
 zx_unblank(struct device *dv)
 {
 	struct zx_softc *sc;
-	volatile struct zx_cross *zx;
 
 	sc = device_private(dv);
 
@@ -734,9 +717,10 @@
 		return;
 	sc->sc_flags &= ~ZX_BLANKED;
 
-	zx = sc->sc_zx;
-	SETREG(zx->zx_type, ZX_CROSS_TYPE_VIDEO);
-	SETREG(zx->zx_csr, zx->zx_csr | ZX_CROSS_CSR_ENABLE);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_type, ZX_CROSS_TYPE_VIDEO);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzx, zx_csr,
+	    bus_space_read_4(sc->sc_bt, sc->sc_bhzx, zx_csr) |
+	    ZX_CROSS_CSR_ENABLE);
 }
 
 paddr_t
@@ -765,13 +749,9 @@
 	    int rop)
 {
 	struct zx_softc *sc;
-	volatile struct zx_command *zc;
-	volatile struct zx_draw *zd;
 	int fg, bg;
 
 	sc = ri->ri_hw;
-	zc = sc->sc_zc;
-	zd = sc->sc_zd_ss0;
 
 	rasops_unpack_attr(attr, &fg, &bg, NULL);
 	x = x * sc->sc_fontw + ri->ri_xorigin;
@@ -779,13 +759,16 @@
 	w = sc->sc_fontw * w - 1;
 	h = sc->sc_fonth * h - 1;
 
-	while ((zc->zc_csr & ZX_CSR_BLT_BUSY) != 0)
+	while ((bus_space_read_4(sc->sc_bt, sc->sc_bhzc, zc_csr) &
+	    ZX_CSR_BLT_BUSY) != 0)
 		;
 
-	SETREG(zd->zd_rop, rop);
-	SETREG(zd->zd_fg, (bg & 7) ? 0x00000000 : 0xff000000);
-	SETREG(zc->zc_extent, w | (h << 11));
-	SETREG(zc->zc_fill, x | (y << 11) | 0x80000000);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_rop, rop);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_fg,
+	    (bg & 7) ? 0x00000000 : 0xff000000);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_extent, w | (h << 11));
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_fill,
+	    x | (y << 11) | 0x80000000);
 }
 
 void
@@ -793,13 +776,9 @@
 	    int h)
 {
 	struct zx_softc *sc;
-	volatile struct zx_command *zc;
-	volatile struct zx_draw *zd;
 	int dir;
 
 	sc = ri->ri_hw;
-	zc = sc->sc_zc;
-	zd = sc->sc_zd_ss0;
 
 	sx = sx * sc->sc_fontw + ri->ri_xorigin;
 	sy = sy * sc->sc_fonth + ri->ri_yorigin;
@@ -817,13 +796,15 @@
 	} else
 		dir = 0;
 
-	while ((zc->zc_csr & ZX_CSR_BLT_BUSY) != 0)
+	while ((bus_space_read_4(sc->sc_bt, sc->sc_bhzc, zc_csr) &
+	    ZX_CSR_BLT_BUSY) != 0)
 		;
 
-	SETREG(zd->zd_rop, ZX_STD_ROP);
-	SETREG(zc->zc_extent, w | (h << 11) | dir);
-	SETREG(zc->zc_src, sx | (sy << 11));
-	SETREG(zc->zc_copy, dx | (dy << 11));
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_rop, ZX_STD_ROP);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_extent,
+	    w | (h << 11) | dir);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_src, sx | (sy << 11));
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_copy, dx | (dy << 11));
 }
 
 void
@@ -881,8 +862,6 @@
 	struct rasops_info *ri;
 	struct zx_softc *sc;
 	struct wsdisplay_font *font;
-	volatile struct zx_command *zc;
-	volatile struct zx_draw *zd;
 	volatile u_int32_t *dp;
 	u_int8_t *fb;
 	int fs, i, fg, bg, ul;
@@ -896,8 +875,6 @@
 
 	sc = (struct zx_softc *)ri->ri_hw;
 	font = ri->ri_font;
-	zc = sc->sc_zc;
-	zd = sc->sc_zd_ss0;
 
 	dp = (volatile u_int32_t *)sc->sc_pixels +
 	    ((row * sc->sc_fonth + ri->ri_yorigin) << 11) +
@@ -907,13 +884,17 @@
 	fs = font->stride;
 	rasops_unpack_attr(attr, &fg, &bg, &ul);
 
-	while ((zc->zc_csr & ZX_CSR_BLT_BUSY) != 0)
+	while ((bus_space_read_4(sc->sc_bt, sc->sc_bhzc, zc_csr) &
+	    ZX_CSR_BLT_BUSY) != 0)
 		;
 
-	SETREG(zd->zd_rop, ZX_STD_ROP);
-	SETREG(zd->zd_fg, (fg & 7) ? 0x00000000 : 0xff000000);
-	SETREG(zd->zd_bg, (bg & 7) ? 0x00000000 : 0xff000000);
-	SETREG(zc->zc_fontmsk, 0xffffffff << (32 - sc->sc_fontw));
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_rop, ZX_STD_ROP);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_fg,
+	    (fg & 7) ? 0x00000000 : 0xff000000);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzdss0, zd_bg,
+	    (bg & 7) ? 0x00000000 : 0xff000000);
+	bus_space_write_4(sc->sc_bt, sc->sc_bhzc, zc_fontmsk,
+	    0xffffffff << (32 - sc->sc_fontw));
 
 	if (sc->sc_fontw <= 8) {
 		for (i = sc->sc_fonth; i != 0; i--, dp += 2048) {

Index: src/sys/dev/sbus/zxreg.h
diff -u src/sys/dev/sbus/zxreg.h:1.5 src/sys/dev/sbus/zxreg.h:1.6
--- src/sys/dev/sbus/zxreg.h:1.5	Mon Sep  8 23:36:54 2008
+++ src/sys/dev/sbus/zxreg.h	Fri Mar 27 12:25:41 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: zxreg.h,v 1.5 2008/09/08 23:36:54 gmcgarry Exp $	*/
+/*	$NetBSD: zxreg.h,v 1.6 2009/03/27 12:25:41 tsutsui Exp $	*/
 
 /*
  *  Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -164,48 +164,55 @@
 /* CSR */
 #define ZX_CSR_BLT_BUSY	0x20000000
 
-struct zx_draw {
-	u_int32_t	zd_pad0[896];
-	u_int32_t	zd_csr;
-	u_int32_t	zd_wid;
-	u_int32_t	zd_wmask;
-	u_int32_t	zd_widclip;
-	u_int32_t	zd_vclipmin;
-	u_int32_t	zd_vclipmax;
-	u_int32_t	zd_pickmin;	/* SS1 only */
-	u_int32_t	zd_pickmax;	/* SS1 only */
-	u_int32_t	zd_fg;
-	u_int32_t	zd_bg;
-	u_int32_t	zd_src;		/* Copy/Scroll (SS0 only) */
-	u_int32_t	zd_dst;		/* Copy/Scroll/Fill (SS0 only) */
-	u_int32_t	zd_extent;	/* Copy/Scroll/Fill size (SS0 only) */
-	u_int32_t	zd_pad1[3];
-	u_int32_t	zd_setsem;	/* SS1 only */
-	u_int32_t	zd_clrsem;	/* SS1 only */
-	u_int32_t	zd_clrpick;	/* SS1 only */
-	u_int32_t	zd_clrdat;	/* SS1 only */
-	u_int32_t	zd_alpha;	/* SS1 only */
-	u_int32_t	zd_pad2[11];
-	u_int32_t	zd_winbg;
-	u_int32_t	zd_planemask;
-	u_int32_t	zd_rop;
-	u_int32_t	zd_z;
-	u_int32_t	zd_dczf;	/* SS1 only */
-	u_int32_t	zd_dczb;	/* SS1 only */
-	u_int32_t	zd_dcs;		/* SS1 only */
-	u_int32_t	zd_dczs;	/* SS1 only */
-	u_int32_t	zd_pickfb;	/* SS1 only */
-	u_int32_t	zd_pickbb;	/* SS1 only */
-	u_int32_t	zd_dcfc;	/* SS1 only */
-	u_int32_t	zd_forcecol;	/* SS1 only */
-	u_int32_t	zd_door[8];	/* SS1 only */
-	u_int32_t	zd_pick[5];	/* SS1 only */
-} __packed;
-
-struct zx_draw_ss1 {
-	u_int32_t	zd_pad0[957];
-	u_int32_t	zd_misc;
-} __packed;
+/* draw ss0 ss1 */
+#define zd_csr		0x0e00
+#define zd_wid		0x0e04
+#define zd_wmask	0x0e08
+#define zd_widclip	0x0e0c
+#define zd_vclipmin	0x0e10
+#define zd_vclipmax	0x0e14
+#define zd_pickmin	0x0e18		/* SS1 only */
+#define zd_pickmax	0x0e1c		/* SS1 only */
+#define zd_fg		0x0e20
+#define zd_bg		0x0e24
+#define zd_src		0x0e28		/* Copy/Scroll (SS0 only) */
+#define zd_dst		0x0e2c		/* Copy/Scroll/Fill (SS0 only) */
+#define zd_extent	0x0e30		/* Copy/Scroll/Fill size (SS0 only) */
+
+#define zd_setsem	0x0e40		/* SS1 only */
+#define zd_clrsem	0x0e44		/* SS1 only */
+#define zd_clrpick	0x0e48		/* SS1 only */
+#define zd_clrdat	0x0e4c		/* SS1 only */
+#define zd_alpha	0x0e50		/* SS1 only */
+
+#define zd_winbg	0x0e80
+#define zd_planemask	0x0e84
+#define zd_rop		0x0e88
+#define zd_z		0x0e8c
+#define zd_dczf		0x0e90		/* SS1 only */
+#define zd_dczb		0x0e94		/* SS1 only */
+#define zd_dcs		0x0e98		/* SS1 only */
+#define zd_dczs		0x0e9c		/* SS1 only */
+#define zd_pickfb	0x0ea0		/* SS1 only */
+#define zd_pickbb	0x0ea4		/* SS1 only */
+#define zd_dcfc		0x0ea8		/* SS1 only */
+#define zd_forcecol	0x0eac		/* SS1 only */
+#define zd_door0	0x0eb0		/* SS1 only */
+#define zd_door1	0x0eb4		/* SS1 only */
+#define zd_door2	0x0eb8		/* SS1 only */
+#define zd_door3	0x0ebc		/* SS1 only */
+#define zd_door4	0x0ec0		/* SS1 only */
+#define zd_door5	0x0ec4		/* SS1 only */
+#define zd_door6	0x0ec8		/* SS1 only */
+#define zd_door7	0x0ecc		/* SS1 only */
+#define zd_pick0	0x0ed0		/* SS1 only */
+#define zd_pick1	0x0ed4		/* SS1 only */
+#define zd_pick2	0x0ed8		/* SS1 only */
+#define zd_pick3	0x0edc		/* SS1 only */
+#define zd_pick4	0x0ee0		/* SS1 only */
+
+#define zd_misc		0x0ef4		/* SS1 only */
+
 #define	ZX_SS1_MISC_ENABLE	0x00000001
 #define	ZX_SS1_MISC_STEREO	0x00000002
 
@@ -220,17 +227,16 @@
 #define ZX_ADDRSPC_G		0x0a
 #define ZX_ADDRSPC_R		0x0b
 
-struct zx_command {
-	u_int32_t	zc_csr;
-	u_int32_t	zc_addrspace;
-	u_int32_t 	zc_fontmsk;
-	u_int32_t	zc_fontt;
-	u_int32_t	zc_extent;
-	u_int32_t	zc_src;
-	u_int32_t	zc_dst;
-	u_int32_t	zc_copy;
-	u_int32_t	zc_fill;
-} __packed;
+/* command */
+#define zc_csr		0x00
+#define zc_addrspace	0x04
+#define zc_fontmsk	0x08
+#define zc_fontt	0x0c
+#define zc_extent	0x10
+#define zc_src		0x14
+#define zc_dst		0x18
+#define zc_copy		0x1c
+#define zc_fill		0x20
 
 #define ZX_CROSS_TYPE_CLUT0	0x00001000
 #define ZX_CROSS_TYPE_CLUT1	0x00001001
@@ -245,18 +251,15 @@
 #define ZX_CROSS_CSR_UNK	0x00000002
 #define ZX_CROSS_CSR_UNK2	0x00000001
 
-struct zx_cross {
-	u_int32_t	zx_type;
-	u_int32_t	zx_csr;
-	u_int32_t	zx_value;
-} __packed;
-
-struct zx_cursor {
-	u_int32_t	zcu_pad0[4];
-	u_int32_t	zcu_type;
-	u_int32_t	zcu_misc;
-	u_int32_t	zcu_sxy;
-	u_int32_t	zcu_data;
-} __packed;
+/* cross */
+#define zx_type		0x00
+#define zx_csr		0x04
+#define zx_value	0x08
+
+/* cursor */
+#define zcu_type	0x10
+#define zcu_misc	0x14
+#define zcu_sxy		0x18
+#define zcu_data	0x1c
 
 #endif	/* !_DEV_SBUS_ZXREG_H_ */

Index: src/sys/dev/sbus/zxvar.h
diff -u src/sys/dev/sbus/zxvar.h:1.2 src/sys/dev/sbus/zxvar.h:1.3
--- src/sys/dev/sbus/zxvar.h:1.2	Mon Apr 28 20:23:57 2008
+++ src/sys/dev/sbus/zxvar.h	Fri Mar 27 12:25:41 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: zxvar.h,v 1.2 2008/04/28 20:23:57 martin Exp $	*/
+/*	$NetBSD: zxvar.h,v 1.3 2009/03/27 12:25:41 tsutsui Exp $	*/
 
 /*
  *  Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -84,6 +84,12 @@
 	struct fbdevice	sc_fb;
 	bus_space_tag_t	sc_bt;
 
+	bus_space_handle_t sc_bhzc;
+	bus_space_handle_t sc_bhzx;
+	bus_space_handle_t sc_bhzdss0;
+	bus_space_handle_t sc_bhzdss1;
+	bus_space_handle_t sc_bhzcu;
+
 	int		sc_flags;
 	int		sc_fontw;
 	int		sc_fonth;
@@ -98,12 +104,6 @@
 	struct fbcurpos sc_cursize;
 	u_int8_t	sc_curcmap[8];
 	u_int32_t	sc_curbits[2][32];
-
-	volatile struct zx_command *sc_zc;
-	volatile struct zx_cross *sc_zx;
-	volatile struct zx_draw *sc_zd_ss0;
-	volatile struct zx_draw_ss1 *sc_zd_ss1;
-	volatile struct zx_cursor *sc_zcu;
 };
 #define	ZX_BLANKED	0x01
 #define	ZX_CURSOR	0x02

Reply via email to