cvs commit: src/sys/dev/usb ehci.c ehcivar.h
Ian Dowse
iedowse at FreeBSD.org
Tue May 23 20:05:03 PDT 2006
iedowse 2006-05-24 03:04:11 UTC
FreeBSD src repository
Modified files:
sys/dev/usb ehci.c ehcivar.h
Log:
Attempt to follow the procedure described in section 4.10 of the
EHCI spec for linking in new qTDs into an asynchronous QH. This
requires that there is a qTD marked as not active and not halted
at the start of the QH's list, and the hardware will know to re-fetch
the qTD on each pass rather than just looking at the overlay qTD:
"The host controller must be able to advance the queue from the
Fetch QH state in order to avoid all hardware/software race
conditions. This simple mechanism allows software to simply link
qTDs to the queue head and activate them, then the host controller
will always find them if/when they are reachable."
This is achieved by keeping an "inactivesqtd" entry on the QH list,
and re-using it each time as the start of the next transfer, and
allocating a new qTD to become the next inactivesqtd. Then a new
transfer can be activated by just setting its "active" flag, which
avoids all the previous messing with overlay qTD state in
ehci_set_qh_qtd().
Revision Changes Path
1.45 +223 -94 src/sys/dev/usb/ehci.c
1.14 +1 -0 src/sys/dev/usb/ehcivar.h
More information about the cvs-src
mailing list