NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/54070: urtwn(4) does not work on OHCI



The following reply was made to PR kern/54070; it has been noted by GNATS.

From: Nick Hudson <nick.hudson%gmx.co.uk@localhost>
To: gnats-bugs%netbsd.org@localhost, kern-bug-people%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost,
 Andreas Gustafsson <gson%gson.org@localhost>
Cc: 
Subject: Re: kern/54070: urtwn(4) does not work on OHCI
Date: Tue, 26 Nov 2019 20:35:27 +0000

 On 26/11/2019 14:45, Andreas Gustafsson wrote:
 > The following reply was made to PR kern/54070; it has been noted by GNAT=
 S.
 >
 > From: Andreas Gustafsson <gson%gson.org@localhost>
 > To: gnats-bugs%netbsd.org@localhost
 > Cc:
 > Subject: Re: kern/54070: urtwn(4) does not work on OHCI
 > Date: Tue, 26 Nov 2019 16:42:26 +0200
 >
 >   Investigating this with a USB protocol analyzer showed that the
 >   first USB bulk IN transfer processed by urtwn_rxeof() was correct,
 >   but in the second transfer, the first 64 bytes were missing from
 >   the data received by urtwn_rxeof() even though they were present
 >   on the wire.
 >
 >   I believe what is happening is that the first transfer ends with a
 >   zero-length packet, which is expected.  The code path in the OHCI
 >   driver that handles short transfers then resets the TD Queue Head
 >   Pointer in the Endpoint Descriptor by writing the entire 32-bit word
 >   containing it, which has the desired side effect of clearing the
 >   Halted bit, but also the undesired side effect of clearing the
 >   toggleCarry bit.  If the first packet of the next transfer then
 >   happens to have a data toggle of "1", it is considered to have a
 >   toggle mismatch and is ignored, causing one packet's worth of data
 >   (64 bytes) to be lost.  The following packet then has the expected
 >   toggle and the remainder of the transfer is received normally.
 >
 >   With the following patch, urtwn at ochi works much better. I intend
 >   to commit it soon unless someone has a really good objection.
 
 The patch adjusts the "endpoint is halted" error handling code path.
 
 http://src.illumos.org/source/xref/netbsd-src/sys/dev/usb/ohci.c#1500
 
 What is the error code OHCI_CC_DATA_UNDERRUN?
 
 Maybe OHCI_TD_R should be used more?
 
 http://src.illumos.org/source/xref/netbsd-src/sys/dev/usb/ohci.c#666
 
 Nick
 


Home | Main Index | Thread Index | Old Index