ehci: create ehci_update_frindex
Factor out code from ehci_frame_timer. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
863b474163
commit
6ceced0b2e
@ -2280,6 +2280,28 @@ static void ehci_advance_periodic_state(EHCIState *ehci)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ehci_update_frindex(EHCIState *ehci, int frames)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!ehci_enabled(ehci)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < frames; i++) {
|
||||||
|
ehci->frindex += 8;
|
||||||
|
|
||||||
|
if (ehci->frindex == 0x00002000) {
|
||||||
|
ehci_set_interrupt(ehci, USBSTS_FLR);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ehci->frindex == 0x00004000) {
|
||||||
|
ehci_set_interrupt(ehci, USBSTS_FLR);
|
||||||
|
ehci->frindex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void ehci_frame_timer(void *opaque)
|
static void ehci_frame_timer(void *opaque)
|
||||||
{
|
{
|
||||||
EHCIState *ehci = opaque;
|
EHCIState *ehci = opaque;
|
||||||
@ -2296,18 +2318,7 @@ static void ehci_frame_timer(void *opaque)
|
|||||||
frames = ns_elapsed / FRAME_TIMER_NS;
|
frames = ns_elapsed / FRAME_TIMER_NS;
|
||||||
|
|
||||||
for (i = 0; i < frames; i++) {
|
for (i = 0; i < frames; i++) {
|
||||||
if (ehci_enabled(ehci)) {
|
ehci_update_frindex(ehci, 1);
|
||||||
ehci->frindex += 8;
|
|
||||||
|
|
||||||
if (ehci->frindex == 0x00002000) {
|
|
||||||
ehci_set_interrupt(ehci, USBSTS_FLR);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ehci->frindex == 0x00004000) {
|
|
||||||
ehci_set_interrupt(ehci, USBSTS_FLR);
|
|
||||||
ehci->frindex = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (frames - i > ehci->maxframes) {
|
if (frames - i > ehci->maxframes) {
|
||||||
skipped_frames++;
|
skipped_frames++;
|
||||||
|
Loading…
Reference in New Issue
Block a user