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