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
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to