On Sat, 12 Mar 2011, Sarah Sharp wrote: > Introduce the notion of a PCI device that may be associated with more than > one USB host controller driver (struct usb_hcd). This patch is the start > of the work to separate the xHCI host controller into two roothubs: a USB > 3.0 roothub with SuperSpeed-only ports, and a USB 2.0 roothub with > HS/FS/LS ports. > > One usb_hcd structure is designated to be the "primary HCD", and a pointer > is added to the usb_hcd structure to keep track of that. A new function > call, usb_hcd_is_primary_hcd() is added to check whether the USB hcd is > marked as the primary HCD (or if it is not part of a roothub pair). To > allow the USB core and xHCI driver to access either roothub in a pair, a > "shared_hcd" pointer is added to the usb_hcd structure. > > Add a new function, usb_create_shared_hcd(), that does roothub allocation > for paired roothubs. It will act just like usb_create_hcd() did if the > primary_hcd pointer argument is NULL. If it is passed a non-NULL > primary_hcd pointer, it sets usb_hcd->shared_hcd and usb_hcd->primary_hcd > fields. It will also skip the bandwidth_mutex allocation, and set the > secondary hcd's bandwidth_mutex pointer to the primary HCD's mutex. > > IRQs are only allocated once for the primary roothub. > > Introduce a new usb_hcd driver flag that indicates the host controller > driver wants to create two roothubs. If the HCD_SHARED flag is set, then > the USB core PCI probe methods will allocate a second roothub, and make > sure that second roothub gets freed during rmmod and in initialization > error paths. > > When usb_hc_died() is called with the primary HCD, make sure that any > roothubs that share that host controller are also marked as being dead. > diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h > index b8bb693..5d8c0c8 100644 > --- a/include/linux/usb/hcd.h > +++ b/include/linux/usb/hcd.h > +extern inline int usb_hcd_is_primary_hcd(struct usb_hcd *hcd); Inline routines should be static, not external. Or to put it the other way, external routines should be out-of-line, not inline. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html