Re: [linux-usb-devel] Re: [Bluetooth] HCI USB driver update.

Max Krasnyansky (maxk@qualcomm.com)
09 May 2003 15:35:36 -0700


On Fri, 2003-05-09 at 12:06, David Brownell wrote:
> Hi Max,
>
> > Do you think we can add this
> > struct urb {
> > ...
> > struct list_head drv_list;
> > char drv_cb[X];
> > char hcd_cb[X];
> > ...
> > };
>
> Only with kerneldoc ... :)
>
:)

> I'd certainly like the list_head. Patch attached,
> in case Greg agrees enough. On x86, this makes
> sizeof(struct urb) == 120, so it's using space
> that was previously wasted.
>
>
> As for the skb->cb analogue(s), details need working.
>
> - What should "X" be? skb->cb is 48 bytes.
I'd say 16 will be enough for drivers.

> - Should the cb[] arrays be "long"? They tend to
> be used for pointers...
Probably doesn't matter as long as ->cb is aligned.

> - The HCDs want different amounts of per-urb data.
> Sizes on x86:
> * UHCI wants a lot -- 60 bytes!
> * OHCI typically uses 16 bytes, but more for
> multi-TD urbs (control 24 bytes, ISO often 36).
> * EHCI doesn't allocate such extra data.
>
> - The HCDs would need conversion to use hcd_cb[].
> I once had a patch that did that, but it's not
> current. It made urb->cb replace urb->hcpriv.
>
> I suppose X=60 for hcd_cb[] will be enough, at least
> on 32 bit CPUs. But you start to see why in the
> new "USB Gadget" API, the analogue of "urb" gets
> allocated by the USB (device) controller rather
> than by generic code: so that in typical cases,
> no additional per-request allocations are needed.

Ok. Sounds like it should be
uint32_t hcd_cb[16]; // 64 bytes for internal use by HCD
uint32_t drv_cb[2]; // 8 bytes for internal use by USB driver

?

Max

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/