diff options
author | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2009-05-05 12:25:35 +0200 |
---|---|---|
committer | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2009-05-05 12:25:35 +0200 |
commit | 7a3161bafbda89f08701601a7b6d27329548ce62 (patch) | |
tree | ff6a174cf6649d53c4010e307c40170f76ed931d | |
parent | 65a650c2a5ed2f33357ba9d29d0f56f6b131333a (diff) |
ETRAX: Simplify interrupt signaling.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
-rw-r--r-- | hw/etraxfs_dma.c | 6 | ||||
-rw-r--r-- | hw/etraxfs_ser.c | 16 | ||||
-rw-r--r-- | hw/etraxfs_timer.c | 5 |
3 files changed, 7 insertions, 20 deletions
diff --git a/hw/etraxfs_dma.c b/hw/etraxfs_dma.c index 47236378e0..e4bc82438b 100644 --- a/hw/etraxfs_dma.c +++ b/hw/etraxfs_dma.c @@ -392,10 +392,8 @@ static void channel_update_irq(struct fs_dma_ctrl *ctrl, int c) c, ctrl->channels[c].regs[R_MASKED_INTR])); - if (ctrl->channels[c].regs[R_MASKED_INTR]) - qemu_irq_raise(ctrl->channels[c].irq[0]); - else - qemu_irq_lower(ctrl->channels[c].irq[0]); + qemu_set_irq(ctrl->channels[c].irq[0], + !!ctrl->channels[c].regs[R_MASKED_INTR]); } static int channel_out_run(struct fs_dma_ctrl *ctrl, int c) diff --git a/hw/etraxfs_ser.c b/hw/etraxfs_ser.c index 8367386ed1..ab104ba0cc 100644 --- a/hw/etraxfs_ser.c +++ b/hw/etraxfs_ser.c @@ -67,24 +67,16 @@ struct etrax_serial_t static void ser_update_irq(struct etrax_serial_t *s) { - uint32_t o_irq = s->r_masked_intr; - s->r_intr &= ~(s->rw_ack_intr); s->r_masked_intr = s->r_intr & s->rw_intr_mask; - if (o_irq != s->r_masked_intr) { - D(printf("irq_mask=%x r_intr=%x rmi=%x airq=%x \n", - s->rw_intr_mask, s->r_intr, - s->r_masked_intr, s->rw_ack_intr)); - if (s->r_masked_intr) - qemu_irq_raise(s->irq[0]); - else - qemu_irq_lower(s->irq[0]); - } + D(printf("irq_mask=%x r_intr=%x rmi=%x airq=%x \n", + s->rw_intr_mask, s->r_intr, + s->r_masked_intr, s->rw_ack_intr)); + qemu_set_irq(s->irq[0], !!s->r_masked_intr); s->rw_ack_intr = 0; } - static uint32_t ser_readb (void *opaque, target_phys_addr_t addr) { D(CPUState *env = opaque); diff --git a/hw/etraxfs_timer.c b/hw/etraxfs_timer.c index 1144369b1c..6b3d17e355 100644 --- a/hw/etraxfs_timer.c +++ b/hw/etraxfs_timer.c @@ -178,10 +178,7 @@ static void timer_update_irq(struct fs_timer_t *t) t->r_masked_intr = t->r_intr & t->rw_intr_mask; D(printf("%s: masked_intr=%x\n", __func__, t->r_masked_intr)); - if (t->r_masked_intr) - qemu_irq_raise(t->irq[0]); - else - qemu_irq_lower(t->irq[0]); + qemu_set_irq(t->irq[0], !!t->r_masked_intr); } static void timer0_hit(void *opaque) |