Revision 6d3b6d3d hw/usb/hcd-ehci.c

b/hw/usb/hcd-ehci.c
575 575
/* flag interrupt condition */
576 576
static inline void ehci_raise_irq(EHCIState *s, int intr)
577 577
{
578
    s->usbsts_pending |= intr;
578
    if (intr & (USBSTS_PCD | USBSTS_FLR | USBSTS_HSE)) {
579
        s->usbsts |= intr;
580
        ehci_update_irq(s);
581
    } else {
582
        s->usbsts_pending |= intr;
583
    }
579 584
}
580 585

  
581 586
/*
......
2466 2471

  
2467 2472
static const VMStateDescription vmstate_ehci = {
2468 2473
    .name        = "ehci",
2469
    .version_id  = 1,
2474
    .version_id  = 2,
2475
    .minimum_version_id  = 1,
2470 2476
    .post_load   = usb_ehci_post_load,
2471 2477
    .fields      = (VMStateField[]) {
2472 2478
        VMSTATE_PCI_DEVICE(dev, EHCIState),
2473 2479
        /* mmio registers */
2474 2480
        VMSTATE_UINT32(usbcmd, EHCIState),
2475 2481
        VMSTATE_UINT32(usbsts, EHCIState),
2482
        VMSTATE_UINT32_V(usbsts_pending, EHCIState, 2),
2483
        VMSTATE_UINT32_V(usbsts_frindex, EHCIState, 2),
2476 2484
        VMSTATE_UINT32(usbintr, EHCIState),
2477 2485
        VMSTATE_UINT32(frindex, EHCIState),
2478 2486
        VMSTATE_UINT32(ctrldssegment, EHCIState),

Also available in: Unified diff