Date: Wed, 24 May 2006 03:04:11 +0000 (UTC) From: Ian Dowse <iedowse@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/dev/usb ehci.c ehcivar.h Message-ID: <200605240304.k4O34BKO038584@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200605240304.k4O34BKO038584>
