NO:
W90P710 Programming Guide
VERSION:
2.1
PAGE:
88
The above information is the exclusive intellectual property of Winbond Electronics and shall not be disclosed,
distributed or reproduced without permission from Winbond.
Table No.: 1200-0003-07-A
(readl(&ohci->regs->HcCommandStatus) >> 16) & 0x3);
writel(OHCI_INTR_SO, ®s->HcInterruptEnable);
}
if (ints & OHCI_INTR_SF)
{
UINT32 frame = ohci->hcca->frame_no & 1;
writel(OHCI_INTR_SF, ®s->HcInterruptDisable);
if (ohci->ed_rm_list[!frame] != NULL)
{
dl_del_list(ohci, !frame);
}
if (ohci->ed_rm_list[frame] != NULL)
writel(OHCI_INTR_SF, ®s->HcInterruptEnable);
}
writel(ints, ®s->HcInterruptStatus);
writel(OHCI_INTR_MIE, ®s->HcInterruptEnable);
_InUsbInterrupt = 0;
}
6.5.7 Done Queue Processing
The
Done Queue
is built by the
Host Controller
and referred to by the
HcDoneHead
register. No
matter successful or failed, the retired
Transfer Descriptor
s must be put into the
Done Queue
by
Host
Controller
. When
Host Controller
reaches the end of a frame (1ms) and its internal deferred interrupt
register is 0, it writes the location of
Done Queue
to
HccaDoneHead
and raises a
WritebackDoneHead
interrupt.
HCD
can take the
Done Queue
by servicing the
WritebackDoneHead
interrupt.
6.5.7.1
Reverse Done Queue
Note that the
TD
s are queued into the
Done Queue
in stack order. The latest queued
TD
is linked
at the head of the
Done Queue
, while the earliest queued
TD
is linked at the end of the
Done Queue
.
HCD
must reverse the
Done Queue
before it can start to process the retired
TD
s. The following is an
example routine of reversing
Done Queue
:
static TD_T *dl_reverse_done_list(OHCI_T * ohci)
{