mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-31 14:02:05 -06:00
ehci: Fix setting of halt bit from usbcmd register updates
This fixes linux guests started without any USB devices not seeing newly plugged devices until "lsusb" is done inside the guest. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
6d3b6d3d2d
commit
47d073cc3b
1 changed files with 11 additions and 10 deletions
|
@ -1187,22 +1187,23 @@ static void ehci_mem_writel(void *ptr, target_phys_addr_t addr, uint32_t val)
|
|||
break;
|
||||
}
|
||||
|
||||
if (((USBCMD_RUNSTOP | USBCMD_PSE | USBCMD_ASE) & val) !=
|
||||
((USBCMD_RUNSTOP | USBCMD_PSE | USBCMD_ASE) & s->usbcmd)) {
|
||||
if (s->pstate == EST_INACTIVE) {
|
||||
SET_LAST_RUN_CLOCK(s);
|
||||
}
|
||||
ehci_update_halt(s);
|
||||
s->async_stepdown = 0;
|
||||
qemu_mod_timer(s->frame_timer, qemu_get_clock_ns(vm_clock));
|
||||
}
|
||||
|
||||
/* not supporting dynamic frame list size at the moment */
|
||||
if ((val & USBCMD_FLS) && !(s->usbcmd & USBCMD_FLS)) {
|
||||
fprintf(stderr, "attempt to set frame list size -- value %d\n",
|
||||
val & USBCMD_FLS);
|
||||
val &= ~USBCMD_FLS;
|
||||
}
|
||||
|
||||
if (((USBCMD_RUNSTOP | USBCMD_PSE | USBCMD_ASE) & val) !=
|
||||
((USBCMD_RUNSTOP | USBCMD_PSE | USBCMD_ASE) & s->usbcmd)) {
|
||||
if (s->pstate == EST_INACTIVE) {
|
||||
SET_LAST_RUN_CLOCK(s);
|
||||
}
|
||||
s->usbcmd = val; /* Set usbcmd for ehci_update_halt() */
|
||||
ehci_update_halt(s);
|
||||
s->async_stepdown = 0;
|
||||
qemu_mod_timer(s->frame_timer, qemu_get_clock_ns(vm_clock));
|
||||
}
|
||||
break;
|
||||
|
||||
case USBSTS:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue