[Nut-upsdev] bcmxcp_usb / kernel 2.4.32-rc2

Kjell Claesson kjell.claesson at telia.com
Thu Nov 10 19:46:06 UTC 2005


Hi.

I'm not an expert on usb, but i have been (is) involved in a driver
for a webcam, and have read the usb papers.

The endpoints used from the device can not be switched between bulk
and interrupt. If you have an interrupt endpoint that is used for
data transmission you have to handle it as an interrupt endpoint.

It involves reading the timing and handle the ack. I think it is
false to call it interrupt as it is not a real interrupt but timed
transfer. It gives the benefit of knowing the real speed.
Packet timing and size.

And i think this is why the 2.4 kernel can't handle it. In 2.4 it is
not possible to queue the interrupt transfer, and can only handle one 
frame.

It think was possible inside a kernel driver but not when interfacing
trough the usblib.

Some reference:
http://lwn.net/Articles/39249/

Bulk transfer can be hold if you have many transfers over the control
and interrupt endpoints, but handle more data.

So many devices that need the  data to be read at a constant rate and
not delayed, uses interrupt endpoints.

The interrupt endpoint can exist on both low , full and high speed.
8<-----------------------------------------------------------------------
All Host Controllers are required to support maximum data payload sizes
from 0 to 64 bytes for full-speed
interrupt endpoints, from 0 to 8 bytes for low-speed interrupt
endpoints, and from 0 to 1024 bytes for high-
speed interrupt endpoints. See Section 5.9 for more information about
the details of multiple transactions
per microframe for high bandwidth high-speed endpoints. No Host
Controller is required to support larger
maximum data payload sizes.
8<------------------------------------------------------------------------

Regards
Kjell

ons 2005-11-09 klockan 23:43 -0500 skrev Charles Lepple:
> On 11/5/05, Kjell Claesson <kjell.claesson at telia.com> wrote:
> > Hi Kalle.
> >
> > Yes this is normal ;-( The usblib that is used for the bcmxcp-usb driver
> > use interrupt endpoints, and this is not normal with the 2.4 usblib.
> >
> > The usblib used with 2.4 is only able to do bulk-transfer and is not
> > usable with the bcmxcp-usb driver. You may find some patch for this
> > as i know something going on. But you have to search the net for
> > libusb and 2.4 kernal and interrupt endpoint.
> 
> my understanding of the 2.4 interrupt issue was that it only affected
> low-speed devices, and the workaround was to simply try the interrupt
> transfer, and fall back to bulk transfers if that produced an error.
> 
> Technically, bulk transfers are not allowed at low-speed, but I
> believe the 2.4 kernels translate bulk transfers to interrupt
> transfers.
> 
> --
> - Charles Lepple
> 
> _______________________________________________
> Nut-upsdev mailing list
> Nut-upsdev at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/nut-upsdev




More information about the Nut-upsdev mailing list