|
@@ -477,10 +477,13 @@ static uint32_t cmos_ioport_read(void *opaque, uint32_t addr)
|
|
|
case RTC_REG_C:
|
|
|
ret = s->cmos_data[s->cmos_index];
|
|
|
qemu_irq_lower(s->irq);
|
|
|
+ s->cmos_data[RTC_REG_C] = 0x00;
|
|
|
#ifdef TARGET_I386
|
|
|
if(s->irq_coalesced &&
|
|
|
+ (s->cmos_data[RTC_REG_B] & REG_B_PIE) &&
|
|
|
s->irq_reinject_on_ack_count < RTC_REINJECT_ON_ACK_COUNT) {
|
|
|
s->irq_reinject_on_ack_count++;
|
|
|
+ s->cmos_data[RTC_REG_C] |= REG_C_IRQF | REG_C_PF;
|
|
|
apic_reset_irq_delivered();
|
|
|
DPRINTF_C("cmos: injecting on ack\n");
|
|
|
qemu_irq_raise(s->irq);
|
|
@@ -489,11 +492,8 @@ static uint32_t cmos_ioport_read(void *opaque, uint32_t addr)
|
|
|
DPRINTF_C("cmos: coalesced irqs decreased to %d\n",
|
|
|
s->irq_coalesced);
|
|
|
}
|
|
|
- break;
|
|
|
}
|
|
|
#endif
|
|
|
-
|
|
|
- s->cmos_data[RTC_REG_C] = 0x00;
|
|
|
break;
|
|
|
default:
|
|
|
ret = s->cmos_data[s->cmos_index];
|