[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[usb] Qhead processing in Host controller



Hi friends,

I have some doubts in the EHCI specs regarding the
Qhead processing.

This is related to Qhead processing. We could think
of the following two methods for its implementation.
I would appreciate if you could clarify which method
is appropriate one.

Method 1 :

I am referring to the page 46, section 3.6, in EHCI 1.0.
In our implementation, Host Controller  fetches first 4
double words from the Qhead structure (Page 46). The very
first time Host controller fetches "QTD" from the
"current QTD pointer" and performs overlay and
executes the transaction.

Q 1 ) When QH is fetched first time from the system memory,
whether "current QTD pointer" points to "first QTD"
in the QTD list ? ie., whether S/W writes the first
QTD memory location  in "current QTD pointer" ?

Here we are assuming  that, the very first
QTD is pointed by the "current QTD pointer" , then subsequent
QTD s are pointed by the "Next qTD pointer". Is our
understanding correct ?


Method 2 :

In this method, Host controller fetches all 12 double
words of the QH structure from the system memory .

The Host Controller then fetches the first QTD from the
"Next qTD pointer" and performs overlay and executes the
transaction."

In EHCI 1.0 spec, section 4.10 ( page 80 ), it is mentioned that :

" For the very first use of a queue head, software
may zero-out the queue head transfer overlay, then set the
Next qTD Pointer field value to reference a valid qTD".

The above statement also implies that S/W may not zero out
the queue head transfer overlay and set the "Next qTD Pointer".
In this case, For very first time  "Active bit" in the status
field may be one, and Host controller may end up executing
the transaction from the overlay area, which may not be the
correct action.


Q 2 ) Should the Host Controller fetch all 12 Dwords of QH
structure from the system memory at a stretch ? (Ref section
3.6 - QH structure - contiguous address from 00H ~ 2FH )

Q 3 ) Should the Host controller fetch the first QTD based
on the "Next qTD pointer" ?
Here we are assuming  that, the very first QTD is
pointed by the "Next QTD pointer" . Is this correct ?


Thanks for reading the long query.  Please share your thoughts
on above queries.

with regards,
Srinu
--
To unsubscribe from usb mailing list please visit http://www.opencores.org/mailinglists.shtml