static void pic_reset(DeviceState *dev) { PICCommonState *s = PIC_COMMON(dev); s->elcr = 0; pic_init_reset(s); }
static void kvm_pic_reset(DeviceState *dev) { PICCommonState *s = PIC_COMMON(dev); s->elcr = 0; pic_reset_common(s); kvm_pic_put(s); }
static void pic_common_realize(DeviceState *dev, Error **errp) { PICCommonState *s = PIC_COMMON(dev); isa_register_ioport(NULL, &s->base_io, s->iobase); if (s->elcr_addr != -1) { isa_register_ioport(NULL, &s->elcr_io, s->elcr_addr); } qdev_set_legacy_instance_id(dev, s->iobase, 1); }
int pic_read_irq(DeviceState *d) { PICCommonState *s = PIC_COMMON(d); int irq, irq2, intno; irq = pic_get_irq(s); if (irq >= 0) { if (irq == 2) { irq2 = pic_get_irq(slave_pic); if (irq2 >= 0) { pic_intack(slave_pic, irq2); } else { /* spurious IRQ on slave controller */ irq2 = 7; } intno = slave_pic->irq_base + irq2; } else { intno = s->irq_base + irq; } pic_intack(s, irq); } else { /* spurious IRQ on host controller */ irq = 7; intno = s->irq_base + irq; } #if defined(DEBUG_PIC) || defined(DEBUG_IRQ_LATENCY) if (irq == 2) { irq = irq2 + 8; } #endif #ifdef DEBUG_IRQ_LATENCY printf("IRQ%d latency=%0.3fus\n", irq, (double)(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - irq_time[irq]) * 1000000.0 / NANOSECONDS_PER_SECOND); #endif DPRINTF("pic_interrupt: irq=%d\n", irq); return intno; }