Information
Universal Serial Bus Interface
MPC8308 PowerQUICC II Pro Processor Reference Manual, Rev. 1
13-84 Freescale Semiconductor
When the host controller observes that doorbell bit being set, it makes a note of the local reachable
schedule information. In this example, the local reachable schedule information includes both queue heads
(A & B). It is sufficient that the host controller can set the status bit (and clear the doorbell bit) as soon as
it has traversed beyond current reachable schedule information (that is, traversed beyond queue head (B)
in this example).
Figure 13-49. Generic Queue Head Unlink Scenario
Alternatively, a host controller implementation is allowed to traverse the entire asynchronous schedule list
(for example, observed the head of the queue (twice)) before setting USBSTS[AAI].
Software may re-use the memory associated with the removed queue heads after it observes
USBSTS[AAI] is set, following assertion of the doorbell. Software should acknowledge the interrupt on
async advance status as indicated in the USBSTS register, before using the doorbell handshake again
13.6.9.3 Empty Asynchronous Schedule Detection
EHCI uses two bits to detect when the asynchronous schedule is empty. The queue head data structure (see
Figure 13-41) defines an H-bit in the queue head, which allows software to mark a queue head as being
the head of the reclaim list. host controller also keeps a 1-bit flag in the USBSTS register (Reclamation)
that is cleared when the host controller observes a queue head with the H-bit set. The reclamation flag in
the status register is set when any USB transaction from the asynchronous schedule is executed (or
whenever the asynchronous schedule starts, see Section 13.6.9.4, “Asynchronous Schedule Traversal:
Start Event.”
If the controller ever encounters an H-bit of one and a Reclamation bit of zero, the controller simply stops
traversal of the asynchronous schedule.
Memory State
BACD
A
USBCMD Interrupt on
Async-Advance Doorbell = 0
Before Unlink
HC State
Memory State
B
AD
A
USBCMD Interrupt on
Async-Advance Doorbell = 1
After Unlink (B, C) and at Doorbell
HC State
C
USBSTS Interrupt on Async-Advance = 0
Memory State
B
AD
D
USBCMD Interrupt on
Async-Advance Doorbell = 0
After Doorbell
HC State
C
USBSTS Interrupt on Async-Advance = 1