aboutsummaryrefslogtreecommitdiff
path: root/hw/display
diff options
context:
space:
mode:
authorMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>2022-03-05 15:55:22 +0000
committerMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>2022-03-09 09:29:10 +0000
commit4718125192875085e6b1104e8286dbda7d4db682 (patch)
treeb254d8ee99d06b9ab2499fc5c91bdb7c7cfa3967 /hw/display
parent580399c2775717ef8329f63ca1bdf26047147609 (diff)
downloadqemu-4718125192875085e6b1104e8286dbda7d4db682.zip
qemu-4718125192875085e6b1104e8286dbda7d4db682.tar.gz
qemu-4718125192875085e6b1104e8286dbda7d4db682.tar.bz2
macfb: don't use special irq_state and irq_mask variables in MacfbState
The current IRQ state and IRQ mask are handled exactly the same as standard register accesses, so store these values directly in the regs array rather than having separate variables for them. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20220305155530.9265-3-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Diffstat (limited to 'hw/display')
-rw-r--r--hw/display/macfb.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/hw/display/macfb.c b/hw/display/macfb.c
index 66ceacf..fb54b46 100644
--- a/hw/display/macfb.c
+++ b/hw/display/macfb.c
@@ -476,7 +476,8 @@ static void macfb_update_display(void *opaque)
static void macfb_update_irq(MacfbState *s)
{
- uint32_t irq_state = s->irq_state & s->irq_mask;
+ uint32_t irq_state = s->regs[DAFB_INTR_STAT >> 2] &
+ s->regs[DAFB_INTR_MASK >> 2];
if (irq_state) {
qemu_irq_raise(s->irq);
@@ -496,7 +497,7 @@ static void macfb_vbl_timer(void *opaque)
MacfbState *s = opaque;
int64_t next_vbl;
- s->irq_state |= DAFB_INTR_VBL;
+ s->regs[DAFB_INTR_STAT >> 2] |= DAFB_INTR_VBL;
macfb_update_irq(s);
/* 60 Hz irq */
@@ -530,10 +531,8 @@ static uint64_t macfb_ctrl_read(void *opaque,
case DAFB_MODE_VADDR2:
case DAFB_MODE_CTRL1:
case DAFB_MODE_CTRL2:
- val = s->regs[addr >> 2];
- break;
case DAFB_INTR_STAT:
- val = s->irq_state;
+ val = s->regs[addr >> 2];
break;
case DAFB_MODE_SENSE:
val = macfb_sense_read(s);
@@ -568,7 +567,7 @@ static void macfb_ctrl_write(void *opaque,
macfb_sense_write(s, val);
break;
case DAFB_INTR_MASK:
- s->irq_mask = val;
+ s->regs[addr >> 2] = val;
if (val & DAFB_INTR_VBL) {
next_vbl = macfb_next_vbl();
timer_mod(s->vbl_timer, next_vbl);
@@ -577,12 +576,12 @@ static void macfb_ctrl_write(void *opaque,
}
break;
case DAFB_INTR_CLEAR:
- s->irq_state &= ~DAFB_INTR_VBL;
+ s->regs[DAFB_INTR_STAT >> 2] &= ~DAFB_INTR_VBL;
macfb_update_irq(s);
break;
case DAFB_RESET:
s->palette_current = 0;
- s->irq_state &= ~DAFB_INTR_VBL;
+ s->regs[DAFB_INTR_STAT >> 2] &= ~DAFB_INTR_VBL;
macfb_update_irq(s);
break;
case DAFB_LUT: