usb: xhci: cleanup xhci_hcd allocation
HCD core allocates memory for HCD private data in usb_create_[shared_]hcd() so make use of that mechanism to allocate the struct xhci_hcd. Introduce struct xhci_driver_overrides to provide the size of HCD private data and hc_driver operation overrides. As of now we only need to override the reset and start methods. Signed-off-by: Roger Quadros <rogerq@ti.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
2cfef79ddc
commit
cd33a32157
@@ -1591,10 +1591,24 @@ struct xhci_hcd {
|
||||
#define COMP_MODE_RCVRY_MSECS 2000
|
||||
};
|
||||
|
||||
/* Platform specific overrides to generic XHCI hc_driver ops */
|
||||
struct xhci_driver_overrides {
|
||||
size_t extra_priv_size;
|
||||
int (*reset)(struct usb_hcd *hcd);
|
||||
int (*start)(struct usb_hcd *hcd);
|
||||
};
|
||||
|
||||
/* convert between an HCD pointer and the corresponding EHCI_HCD */
|
||||
static inline struct xhci_hcd *hcd_to_xhci(struct usb_hcd *hcd)
|
||||
{
|
||||
return *((struct xhci_hcd **) (hcd->hcd_priv));
|
||||
struct usb_hcd *primary_hcd;
|
||||
|
||||
if (usb_hcd_is_primary_hcd(hcd))
|
||||
primary_hcd = hcd;
|
||||
else
|
||||
primary_hcd = hcd->primary_hcd;
|
||||
|
||||
return (struct xhci_hcd *) (primary_hcd->hcd_priv);
|
||||
}
|
||||
|
||||
static inline struct usb_hcd *xhci_to_hcd(struct xhci_hcd *xhci)
|
||||
@@ -1748,7 +1762,8 @@ int xhci_run(struct usb_hcd *hcd);
|
||||
void xhci_stop(struct usb_hcd *hcd);
|
||||
void xhci_shutdown(struct usb_hcd *hcd);
|
||||
int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks);
|
||||
void xhci_init_driver(struct hc_driver *drv, int (*setup_fn)(struct usb_hcd *));
|
||||
void xhci_init_driver(struct hc_driver *drv,
|
||||
const struct xhci_driver_overrides *over);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup);
|
||||
|
Reference in New Issue
Block a user