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