we were usug both IHCI and UHCI which is why we didn't mention it.
we DID have a problem one one of them (which seemed unrelated)
but I can't remember which. It was reported by other people around the
same time so we didn't connect it with our driver.


On Tue, 21 Dec 1999, Bill Paul wrote:

> Previously I mentioned that I was having trouble sending full sized
> ethernet frames (1500 bytes) over USB using my ADMtek AN986 Pegasus
> eval board. The problem turned out to be in the uhci driver, however
> I'm not certain exactly how to incorporate my fix.
> 
> The problem I was seeing was that large frames would trigger babble
> errors, which would cause an endpoint halt and wedge the RX or TX pipe.
> Julian brought up another driver written by Doug Ambrisko which appeared
> to be able to transfer 1500-byte frames without any trouble. However,
> neither he nor Doug bothered to mention if their test machines had UHCI
> or OHCI hubs. Given what I've learned, I suspect they were OHCI.
> I downloaded a copy of the Intel UHCI spec document from
> ftp://download.intel.com/design/usb/UHCI11D.PDF and scrutinized it
> for a while. On page 17, it describes the MAXP bit in the command
> register. The description reads:
> 
>       Max Packet (MAXP). 1=64 bytes, 0=32 bytes. This bit selects the
>       maximum packet size that can be used for full speed bandwitdh
>       reclamation at the end of a frame. This value is used by the
>       Host Controller to determine whether it should initiate another
>       transaction based on the time remaining in the SOF counter. Use
>       of reclamation packets larger than the programmed size will 
>       cause a Babble error if executed during the critical window at
>       frame end. The Babble error results in the offending endpoint
>       being stalled. Software is responsible for ensuring that any
>       packet which could be executed under bandwidth reclamation be
>       within this size limit.
> 
> The ADMtek part is documented to use 64-byte USB packets for frame
> transfers. However, /sys/dev/usb/uhci.c:uhci_run() never sets the
> MAXP bit in the command register when it starts the controller running.
> I modified uhci_run() to include the UHCI_CMD_MAXP bit and now the
> ADMtek ethernet controller sends and receives 1500-byte frames with
> no problems.
> 
> The question is, how should this be handled? Should the UHCI_CMD_MAXP
> bit be set all the time, or just when high speed devices are attached
> to the bus? The Intel manual seems to imply that it's safe to leave this
> bit enabled all the time, however I can't test this since I only have
> the one USB device. Also, should something similar be done with OHCI
> controllers, or do they handle this sort of thing correctly?
> 
> -Bill
> 
> 



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to