Skip to content

Commit

Permalink
macfb: don't use special irq_state and irq_mask variables in MacfbState
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mcayland committed Mar 9, 2022
1 parent 580399c commit 4718125
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 10 deletions.
15 changes: 7 additions & 8 deletions hw/display/macfb.c
Expand Up @@ -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);
Expand All @@ -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 */
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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:
Expand Down
2 changes: 0 additions & 2 deletions include/hw/display/macfb.h
Expand Up @@ -66,8 +66,6 @@ typedef struct MacfbState {
uint32_t regs[MACFB_NUM_REGS];
MacFbMode *mode;

uint32_t irq_state;
uint32_t irq_mask;
QEMUTimer *vbl_timer;
qemu_irq irq;
} MacfbState;
Expand Down

0 comments on commit 4718125

Please sign in to comment.