summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2005-01-27 21:24:49 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2005-01-27 21:24:49 +0000
commit408476badc11d3e80fd0f3c575d00aa650bfdc61 (patch)
treed59b22ecfe60920937ebac31da8be2b201b95842
parent94b0fdaf55d0e1863ae8079b84ab5f66ba3a380a (diff)
In windowmove(), put another hardware blitter synchronization before
returning, so that rasops bursts including non-accelerated operations do not have side effects.
-rw-r--r--sys/arch/hp300/dev/dvbox.c5
-rw-r--r--sys/arch/hp300/dev/gbox.c5
-rw-r--r--sys/arch/hp300/dev/rbox.c5
3 files changed, 12 insertions, 3 deletions
diff --git a/sys/arch/hp300/dev/dvbox.c b/sys/arch/hp300/dev/dvbox.c
index f4d125b44a1..ea78867a9f1 100644
--- a/sys/arch/hp300/dev/dvbox.c
+++ b/sys/arch/hp300/dev/dvbox.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dvbox.c,v 1.7 2005/01/24 21:36:39 miod Exp $ */
+/* $OpenBSD: dvbox.c,v 1.8 2005/01/27 21:24:48 miod Exp $ */
/*
* Copyright (c) 2005, Miodrag Vallat
@@ -403,6 +403,7 @@ dvbox_windowmove(struct diofb *fb, u_int16_t sx, u_int16_t sy,
volatile struct dvboxfb *db = (struct dvboxfb *)fb->regkva;
db_waitbusy(db);
+
db->rep_rule = DVBOX_DUALROP(rop);
db->source_y = sy;
db->source_x = sx;
@@ -411,6 +412,8 @@ dvbox_windowmove(struct diofb *fb, u_int16_t sx, u_int16_t sy,
db->wheight = cy;
db->wwidth = cx;
db->wmove = 1;
+
+ db_waitbusy(db);
}
/*
diff --git a/sys/arch/hp300/dev/gbox.c b/sys/arch/hp300/dev/gbox.c
index 25f61d008b6..d67f9ce1356 100644
--- a/sys/arch/hp300/dev/gbox.c
+++ b/sys/arch/hp300/dev/gbox.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: gbox.c,v 1.8 2005/01/24 21:36:39 miod Exp $ */
+/* $OpenBSD: gbox.c,v 1.9 2005/01/27 21:24:48 miod Exp $ */
/*
* Copyright (c) 2005, Miodrag Vallat
@@ -418,6 +418,7 @@ gbox_windowmove(struct diofb *fb, u_int16_t sx, u_int16_t sy,
dest = (dy * 1024) + dx;
tile_mover_waitbusy(gb);
+
gb->width = -(cx / 4);
gb->height = -(cy / 4);
if (src < dest)
@@ -431,6 +432,8 @@ gbox_windowmove(struct diofb *fb, u_int16_t sx, u_int16_t sy,
dest= dest + ((cy - 4) * 1024) + (cx - 4);
}
FBBASE(fb)[dest] = FBBASE(fb)[src];
+
+ tile_mover_waitbusy(gb);
}
/*
diff --git a/sys/arch/hp300/dev/rbox.c b/sys/arch/hp300/dev/rbox.c
index 2607a28a6db..d6dde534539 100644
--- a/sys/arch/hp300/dev/rbox.c
+++ b/sys/arch/hp300/dev/rbox.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rbox.c,v 1.7 2005/01/24 21:36:39 miod Exp $ */
+/* $OpenBSD: rbox.c,v 1.8 2005/01/27 21:24:48 miod Exp $ */
/*
* Copyright (c) 2005, Miodrag Vallat
@@ -366,6 +366,7 @@ rbox_windowmove(struct diofb *fb, u_int16_t sx, u_int16_t sy,
volatile struct rboxfb *rb = (struct rboxfb *)fb->regkva;
rb_waitbusy(rb);
+
rb->rep_rule = RBOX_DUALROP(rop);
rb->source_y = sy;
rb->source_x = sx;
@@ -374,6 +375,8 @@ rbox_windowmove(struct diofb *fb, u_int16_t sx, u_int16_t sy,
rb->wheight = cy;
rb->wwidth = cx;
rb->wmove = 1;
+
+ rb_waitbusy(rb);
}
/*