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

Reply via email to