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>