[vbox-dev] USB EHCI support under Windows
Hans Petter Selasky
hselasky at c2i.net
Thu Aug 25 02:50:57 PDT 2011
On Wednesday 24 August 2011 18:06:32 Michael Thayer wrote:
> Hello Hans-Peter,
> On Fri, 2011-08-19 at 17:02 +0200, Hans Petter Selasky wrote:
> > On Friday 22 July 2011 18:06:00 Hans Petter Selasky wrote:
> > > There appears to be a bug when cancelling USB transactions (removing
> > > them from the EHCI schedule) on endpoints using the USB 2.0 mode, that
> > > the USB device is automatically re-enumerated. Who is responsible for
> > > this part? Is there any support available?
> > Investigating this issue more properly, I see that VirtualBOX returns an
> > error code when the Emulated OS tries to clear the stall on any
> > endpoints. This in turn cause the Emulated OS (FreeBSD) to re-enumerate
> > the device.
> > Is this a bug or feature in VirtualBOX. Shouldn't clear-stall allways
> > succeed, even if the data toggle value is not cared about?
> I'm afraid I am rather ECHI-illiterate, but would you be able to send a
> pointer to the relevant point in the spec? (Like a page number/whatever
> for version 1.0 of the spec).
Please see page 192 of usb11.pdf (This is also true for USB2.0)
The Halt feature is required to be implemented for all interrupt and bulk endpoint types. If the endpoint is
currently halted, then the Halt feature is set to one. Otherwise, the Halt feature is reset to zero. The Halt
feature may optionally be set with the SetFeature(ENDPOINT_HALT) request. When set by the
SetFeature() request, the endpoint exhibits the same stall behavior as if the field had been set by a hardware
condition. If the condition causing a halt has been removed, clearing the Halt feature via a
ClearFeature(ENDPOINT_HALT) request results in the endpoint no longer returning a STALL. For
endpoints using data toggle, regardless of whether an endpoint has the Halt feature set, a
ClearFeature(ENDPOINT_HALT) request always results in the data toggle being reinitialized to DATA0.
The Halt feature is reset to zero after either a SetConfiguration() or SetInterface() request even if the
requested configuration or interface is the same as the current configuration or interface.
It is neither required nor recommended that the Halt feature be implemented for the Default Control Pipe.
However, devices may set the Halt feature of the Default Control Pipe in order to reflect a functional error
condition. If the feature is set to one, the device will return STALL in the Data and Status stages of each
standard request to the pipe except GetStatus(), SetFeature(), and ClearFeature() requests. The device need
not return STALL for class-specific and vendor-specific requests.
More information about the vbox-dev