Hi, On Thursday 17 May 2007 21:26, David Brownell wrote: > On Thursday 17 May 2007, Hans Petter Selasky wrote: > > On Thursday 17 May 2007 19:44, David Brownell wrote: > > > On Thursday 17 May 2007, Hans Petter Selasky wrote: > > > > I would like introduce a new USB API call, so that my pre-allocate > > > > model will work better with your USB API. ... > > > > > > int usb_setup_endpoint(struct usb_host_endpoint *hep, size_t bufsize); > > > > To save the "hep" to "struct usb_device" pointer, I would like to have > > "struct usb_device *dev" as an argument. > > Introducing new error paths ... why? As a rule we remove redudancy. > > > > What would such a call do, though? Who would use it, and why? > > > > The call will setup one or two pre-allocated USB transfers for the > > emulation layer between the Linux USB stack and the FreeBSD USB stack. > > So what's a "transfer" ... just a bunch of TDs? And what would be > the advantage to a Linux driver, since the TDs are allocated on > demand in any case?
A "USB transfer" on FreeBSD is equivalent to an URB on Linux. The difference is that on FreeBSD the "USB transfer", struct usbd_xfer, has pointers to pre-allocated TD's, QH's and data-buffers. I want to use one or two USB transfers to move all the USB data from the Linux's URB to a FreeBSD USB transfer. > > The reason for this is to allow Linux USB drivers to tell the FreeBSD USB > > stack that they want larger/smaller buffers. > > > > On Linux this information can be used to reserve EHCI/UHCI/OHCI USB > > transfer descriptors. > > I still don't get it. What's the advantage to Linux? That the Linux USB stack can pre-allocate TD's and QH's on a per-endpoint basis. > > I could imagine a new HCD entry, parallel to endpoint_disable(), > called by usbcore. It could initialize HCD-internal state like > a QH, and maybe ensure that the relevant TD pool isn't empty. > It'd be nice to have a task context for that in all cases. But > that wouldn't be visible outside usbcore... > > > > > On FreeBSD this function will pre-allocate one or two USB transfers > > > > for an endpoint using the given "bufsize" argument. Those FreeBSD USB > > > > transfers will then be used to do all the Linux USB transfers. This > > > > function can block and must have a context. > > > > > > So what's the model ... GPL'd Linux drivers will be modified to > > > incorporate that call, so they'd work better on FreeBSD? > > > > Yes, and under Linux. > > > > As you can see, it is not possible to emulate an on-the-fly allocation > > model by a pre-allocation model. That's why I suggest this API addition. > > All Linux drivers are allowed to assume on-the-fly allocation though. > That's a simpler model than mandatory pre-allocation. In this context, > simpler is better. Why is it simpler than pre-allocation? > > Seems to me that your "Linux emulation" is missing some important > characteristics! --HPS ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel