On Thursday 28 December 2006 4:41 pm, Vivek Dharmadhikari wrote: > Hello David > > > > Is the Asynclistaddr register updated by the host controller after > > > unlinking a queue head ? > > > > No, since it always holds the queue head. What happens > > instead is that the controler is told to stop scanning the > > async ring once it becomes empty, and stays empty for a while. > > I am confused. Section 4.8 of echi specs says that " When the host > controller completes processing of asynchronous schedule,it retains the > value of last accessed queue head's horizontal pointer in the > ASYNCLISTADDR register. Next time the asynchronous schedule is accessed, > this is the first data structure that will be serviced" > > I interpret the above to mean that ASYNCLISTADDR is updated by the > hardware. In other words, ASYNCLISTADDR may not always hold ehci->async. > Is it correct ?
Right, so what's the confusion, and why did you ask the first question? The HCD doesn't touch that register after initialization, and the only thing that's always _known_ to be in the async ring is a QH that never holds transactions and is marked as the queue head. Even an "empty" ring will hold that QH. - Dave > > Regards > Vivek > > > -----Original Message----- > > From: David Brownell [mailto:[EMAIL PROTECTED] > > Sent: Wednesday, December 20, 2006 6:41 PM > > To: linux-usb-devel@lists.sourceforge.net > > Cc: Vivek Dharmadhikari > > Subject: Re: [linux-usb-devel] Linking and unlinking queue head > > > > On Wednesday 20 December 2006 4:40 pm, Vivek Dharmadhikari wrote: > > > Hello > > > > > > I want to understand how the queue heads are linked and unlinked in > > > the ehci driver. I interpret following after reading the ehci code > > > > After you understand that, what will you do with that knowledge? > > > > > > > 1. The class drivers such usb-stroage submit urb using > > > usb_submit_urb() > > > > Yes, but not all USB device drivers are class drivers... > > > > > > > 2. The usb core driver chops the urb into qtds. > > > > No, EHCI does that in qh_urb_transaction(). > > > > > > > 3. The qtds are then linked into an existing queue head if any or > > > otherwise a new queue head is created and then the qtds are linked > > > into it. > > > > Yes, EHCI does this in submit_async() and qh_append_tds(); > > the last step will be qh_link_async() if the QH is newly > > created, or is otherwise in the IDLE state (controller > > doesn't see it). > > > > Note that appending to an active queue head is tricky and racey. > > > > That's especially true given certain bugs in older EHCI > > silicon, and the fact that the queue head may be in the > > middle of fault cleanup (including cleanup from a > > software-induced "unlink TDs associated with this URB" fault). > > > > > > > 4. The host controller execute the transactions defined by the each > > > qtd and generate QTD_IOC interrupt. > > > > Not every QTD involves an IOC though ... only the last TD > > associated with an URB needs one. > > > > Also, getting a STS_INT completion interrupt just means > > _some_ qtd (or itd) completed. The driver scans the schedule > > and collects all the completed transfers. Many of those will > > imply a completed URB; and taking the completed transfers off > > the schedules is only slightly racey, that's actually pretty > > easy. (What's harder is cleanup after faults, which can mean > > putting a modified QH back on the async ring...) > > > > > > > Is the above interpretation correct ? > > > > > > I am not sure how unlinking queue head happens though. I > > suppose the > > > queue head is unlinked after queue head scan reveals that > > there are no > > > pending qtds. Is that a fair assumption ? > > > > See what scan_async() does. It turns out to be a bad idea to > > unlink a queue head (using the IAA mechanism) immediately > > after its last QTD gets collected, since it takes time to > > unlink and it's routine to submit a new URB to an endpoint > > soon after the last one gets given back to the driver. So > > instead of immediately unlinking, there's a delay. > > > > > > > I understand that the queue heads are unlinked to reduce > > memory chatter. > > > Is there a way whereby the queue heads stays forever and are not > > > unlinked at all ? > > > > Not in this driver. > > > > > > > Is the Asynclistaddr register updated by the host controller after > > > unlinking a queue head ? > > > > No, since it always holds the queue head. What happens > > instead is that the controler is told to stop scanning the > > async ring once it becomes empty, and stays empty for a while. > > > > - Dave > > > > > > > > > > Thanks. > > > > > > > > > > > ---------------------------------------------------------------------- > > > --- Take Surveys. Earn Cash. Influence the Future of IT Join > > > SourceForge.net's Techsay panel and you'll get the chance to share > > > your opinions on IT & business topics through brief surveys > > - and earn > > > cash > > > > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEV > > > DEV _______________________________________________ > > > linux-usb-devel@lists.sourceforge.net > > > To unsubscribe, use the last form field at: > > > https://lists.sourceforge.net/lists/listinfo/linux-usb-devel > > > > > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > linux-usb-devel@lists.sourceforge.net > To unsubscribe, use the last form field at: > https://lists.sourceforge.net/lists/listinfo/linux-usb-devel > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel