usb_interrupt_read speed different on USB 2 vs 3 port.
Hans Petter Selasky
hps at bitfrost.no
Fri Jan 3 13:47:53 UTC 2014
Hi,
For USB 3.0, sys/dev/usb/controller/xhci.c, the interval is set by:
switch (type) {
case UE_INTERRUPT:
if (fps_shift > 3)
fps_shift--;
temp |= XHCI_EPCTX_0_IVAL_SET(fps_shift);
break;
case UE_ISOCHRONOUS:
Add some prints to the kernel and print "fps_shift" in the UE_INTERRUPT
case. The value has unit 125 * (2**fps_shift) us.
The call is:
usb_interrupt_read(devh, 0x00000083, buf, 0x000002a, 1000);
BTW:
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0083 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x002a
bInterval = 0x000a
^^^^ 10ms I think for FULL speed (XHCI will use 16ms interval)
bRefresh = 0x0000
bSynchAddress = 0x0000
Endpoint 1
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0004 <OUT>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0040
bInterval = 0x000a
^^^^ 10ms I think for FULL speed
bRefresh = 0x0000
bSynchAddress = 0x0000
So a round trip of 20ms is like expected. Maybe the EHCI driver will
schedule a bit differently.
If in the kernel, it is possible to override this value.
--HPS
More information about the freebsd-usb
mailing list