don't include ehci-pci.c into ehci.c but compile it and link it. Most parts. The largest part of the patch defines prototypes. Signed-off-by: Sebastian Andrzej Siewior <sebastian@xxxxxxxxxxxxx> --- drivers/usb/host/Makefile | 1 + drivers/usb/host/ehci-dbg.c | 39 ++------------------- drivers/usb/host/ehci-hub.c | 26 ++++---------- drivers/usb/host/ehci-lpm.c | 5 +-- drivers/usb/host/ehci-pci.c | 19 +++++++++- drivers/usb/host/ehci-q.c | 10 ++++- drivers/usb/host/ehci-sched.c | 2 - drivers/usb/host/ehci.c | 65 ++++++++++++------------------------ drivers/usb/host/ehci.h | 74 ++++++++++++++++++++++++++++++++++------ include/linux/usb/hcd.h | 1 + 10 files changed, 126 insertions(+), 116 deletions(-) diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile index 92dbded..23fb76c 100644 --- a/drivers/usb/host/Makefile +++ b/drivers/usb/host/Makefile @@ -19,6 +19,7 @@ obj-$(CONFIG_USB_WHCI_HCD) += whci/ obj-$(CONFIG_PCI) += pci-quirks.o ehci-hcd-y := ehci.o +ehci-hcd-$(CONFIG_PCI) += ehci-pci.o obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o obj-$(CONFIG_USB_OXU210HP_HCD) += oxu210hp-hcd.o obj-$(CONFIG_USB_ISP116X_HCD) += isp116x-hcd.o diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c index 9952505d..4c3608b 100644 --- a/drivers/usb/host/ehci-dbg.c +++ b/drivers/usb/host/ehci-dbg.c @@ -16,30 +16,13 @@ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* this file is part of ehci-hcd.c */ - -#define ehci_dbg(ehci, fmt, args...) \ - dev_dbg (ehci_to_hcd(ehci)->self.controller , fmt , ## args ) -#define ehci_err(ehci, fmt, args...) \ - dev_err (ehci_to_hcd(ehci)->self.controller , fmt , ## args ) -#define ehci_info(ehci, fmt, args...) \ - dev_info (ehci_to_hcd(ehci)->self.controller , fmt , ## args ) -#define ehci_warn(ehci, fmt, args...) \ - dev_warn (ehci_to_hcd(ehci)->self.controller , fmt , ## args ) - -#ifdef VERBOSE_DEBUG -# define ehci_vdbg ehci_dbg -#else - static inline void ehci_vdbg(struct ehci_hcd *ehci, ...) {} -#endif - -#ifdef DEBUG - /* check the values in the HCSPARAMS register * (host controller _Structural_ parameters) * see EHCI spec, Table 2-4 for each value */ -static void dbg_hcs_params (struct ehci_hcd *ehci, char *label) + +#ifdef DEBUG +void dbg_hcs_params(struct ehci_hcd *ehci, char *label) { u32 params = ehci_readl(ehci, &ehci->caps->hcs_params); @@ -71,19 +54,12 @@ static void dbg_hcs_params (struct ehci_hcd *ehci, char *label) label, buf); } } -#else - -static inline void dbg_hcs_params (struct ehci_hcd *ehci, char *label) {} - -#endif - -#ifdef DEBUG /* check the values in the HCCPARAMS register * (host controller _Capability_ parameters) * see EHCI Spec, Table 2-5 for each value * */ -static void dbg_hcc_params (struct ehci_hcd *ehci, char *label) +void dbg_hcc_params(struct ehci_hcd *ehci, char *label) { u32 params = ehci_readl(ehci, &ehci->caps->hcc_params); @@ -110,13 +86,6 @@ static void dbg_hcc_params (struct ehci_hcd *ehci, char *label) " 32 peridic list" : ""); } } -#else - -static inline void dbg_hcc_params (struct ehci_hcd *ehci, char *label) {} - -#endif - -#ifdef DEBUG static void __maybe_unused dbg_qtd (const char *label, struct ehci_hcd *ehci, struct ehci_qtd *qtd) diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index 77bbb23..86264ea 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c @@ -33,15 +33,6 @@ #ifdef CONFIG_PM -static int ehci_hub_control( - struct usb_hcd *hcd, - u16 typeReq, - u16 wValue, - u16 wIndex, - char *buf, - u16 wLength -); - /* After a power loss, ports that were owned by the companion must be * reset so that the companion can still own them. */ @@ -128,8 +119,8 @@ static int ehci_port_change(struct ehci_hcd *ehci) return 0; } -static __maybe_unused void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci, - bool suspending, bool do_wakeup) +void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci, bool suspending, + bool do_wakeup) { int port; u32 temp; @@ -201,7 +192,7 @@ static __maybe_unused void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci, spin_unlock_irqrestore(&ehci->lock, flags); } -static int ehci_bus_suspend (struct usb_hcd *hcd) +int ehci_bus_suspend(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); int port; @@ -335,7 +326,7 @@ static int ehci_bus_suspend (struct usb_hcd *hcd) /* caller has locked the root hub, and should reset/reinit on error */ -static int ehci_bus_resume (struct usb_hcd *hcd) +int ehci_bus_resume(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); u32 temp; @@ -550,8 +541,7 @@ static int check_reset_complete ( /* build "status change" packet (one or two bytes) from HC registers */ -static int -ehci_hub_status_data (struct usb_hcd *hcd, char *buf) +int ehci_hub_status_data(struct usb_hcd *hcd, char *buf) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); u32 temp, status = 0; @@ -658,7 +648,7 @@ ehci_hub_descriptor ( /*-------------------------------------------------------------------------*/ -static int ehci_hub_control ( +int ehci_hub_control( struct usb_hcd *hcd, u16 typeReq, u16 wValue, @@ -1076,7 +1066,7 @@ error_exit: return retval; } -static void ehci_relinquish_port(struct usb_hcd *hcd, int portnum) +void ehci_relinquish_port(struct usb_hcd *hcd, int portnum) { struct ehci_hcd *ehci = hcd_to_ehci(hcd); @@ -1085,7 +1075,7 @@ static void ehci_relinquish_port(struct usb_hcd *hcd, int portnum) set_owner(ehci, --portnum, PORT_OWNER); } -static int ehci_port_handed_over(struct usb_hcd *hcd, int portnum) +int ehci_port_handed_over(struct usb_hcd *hcd, int portnum) { struct ehci_hcd *ehci = hcd_to_ehci(hcd); u32 __iomem *reg; diff --git a/drivers/usb/host/ehci-lpm.c b/drivers/usb/host/ehci-lpm.c index 2111627..086a54a 100644 --- a/drivers/usb/host/ehci-lpm.c +++ b/drivers/usb/host/ehci-lpm.c @@ -17,8 +17,7 @@ */ /* this file is part of ehci-hcd.c */ -static int __maybe_unused ehci_lpm_set_da(struct ehci_hcd *ehci, - int dev_addr, int port_num) +int ehci_lpm_set_da(struct ehci_hcd *ehci, int dev_addr, int port_num) { u32 __iomem portsc; @@ -38,7 +37,7 @@ static int __maybe_unused ehci_lpm_set_da(struct ehci_hcd *ehci, * this function is used to check if the device support LPM * if yes, mark the PORTSC register with PORT_LPM bit */ -static int __maybe_unused ehci_lpm_check(struct ehci_hcd *ehci, int port) +int ehci_lpm_check(struct ehci_hcd *ehci, int port) { u32 __iomem *portsc ; u32 val32; diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 8311de7..c8c933c 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c @@ -18,6 +18,11 @@ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <linux/pci.h> +#include <linux/usb/hcd.h> +#include "ehci.h" +#include "pci-quirks.h" + #ifndef CONFIG_PCI #error "This file is PCI bus glue. CONFIG_PCI must be defined." #endif @@ -461,7 +466,7 @@ static int ehci_update_device(struct usb_hcd *hcd, struct usb_device *udev) } static const struct hc_driver ehci_pci_hc_driver = { - .description = hcd_name, + .description = "ehci_hcd", .product_desc = "EHCI Host Controller", .hcd_priv_size = sizeof(struct ehci_hcd), @@ -528,7 +533,7 @@ MODULE_DEVICE_TABLE(pci, pci_ids); /* pci driver glue; this is a "new style" PCI driver module */ static struct pci_driver ehci_pci_driver = { - .name = (char *) hcd_name, + .name = "ehci_hcd", .id_table = pci_ids, .probe = usb_hcd_pci_probe, @@ -541,3 +546,13 @@ static struct pci_driver ehci_pci_driver = { }, #endif }; + +__init int ehci_register_pci(void) +{ + return pci_register_driver(&ehci_pci_driver); +} + +void ehci_unregister_pci(void) +{ + pci_unregister_driver(&ehci_pci_driver); +} diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c index 6ce0b3a..c7cfe93 100644 --- a/drivers/usb/host/ehci-q.c +++ b/drivers/usb/host/ehci-q.c @@ -143,7 +143,7 @@ qh_refresh (struct ehci_hcd *ehci, struct ehci_qh *qh) static void qh_link_async(struct ehci_hcd *ehci, struct ehci_qh *qh); -static void ehci_clear_tt_buffer_complete(struct usb_hcd *hcd, +void ehci_clear_tt_buffer_complete(struct usb_hcd *hcd, struct usb_host_endpoint *ep) { struct ehci_hcd *ehci = hcd_to_ehci(hcd); @@ -1145,10 +1145,16 @@ submit_async ( } /*-------------------------------------------------------------------------*/ +static inline void iaa_watchdog_start(struct ehci_hcd *ehci) +{ + WARN_ON(timer_pending(&ehci->iaa_watchdog)); + mod_timer(&ehci->iaa_watchdog, + jiffies + msecs_to_jiffies(EHCI_IAA_MSECS)); +} /* the async qh for the qtds being reclaimed are now unlinked from the HC */ -static void end_unlink_async (struct ehci_hcd *ehci) +void end_unlink_async(struct ehci_hcd *ehci) { struct ehci_qh *qh = ehci->reclaim; struct ehci_qh *next; diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index 488151b..f046fad 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c @@ -34,8 +34,6 @@ * pre-calculated schedule data to make appending to the queue be quick. */ -static int ehci_get_frame (struct usb_hcd *hcd); - /*-------------------------------------------------------------------------*/ /* diff --git a/drivers/usb/host/ehci.c b/drivers/usb/host/ehci.c index 8696489..9a857be 100644 --- a/drivers/usb/host/ehci.c +++ b/drivers/usb/host/ehci.c @@ -21,7 +21,7 @@ */ #include <linux/module.h> -#include <linux/pci.h> +#include <linux/device.h> #include <linux/dmapool.h> #include <linux/kernel.h> #include <linux/delay.h> @@ -34,7 +34,6 @@ #include <linux/ktime.h> #include <linux/list.h> #include <linux/interrupt.h> -#include <linux/usb.h> #include <linux/usb/hcd.h> #include <linux/moduleparam.h> #include <linux/dma-mapping.h> @@ -117,8 +116,6 @@ static unsigned int hird; module_param(hird, int, S_IRUGO); MODULE_PARM_DESC(hird, "host initiated resume duration, +1 for each 75us"); -#define INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT) - /*-------------------------------------------------------------------------*/ #include "ehci.h" @@ -209,7 +206,7 @@ static int tdi_in_host_mode (struct ehci_hcd *ehci) } /* force HC to halt state from unknown (EHCI spec section 2.3) */ -static int ehci_halt (struct ehci_hcd *ehci) +int ehci_halt(struct ehci_hcd *ehci) { u32 temp = ehci_readl(ehci, &ehci->regs->status); @@ -247,7 +244,7 @@ static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr, } /* put TDI/ARC silicon into EHCI mode */ -static void tdi_reset (struct ehci_hcd *ehci) +void tdi_reset(struct ehci_hcd *ehci) { u32 __iomem *reg_ptr; u32 tmp; @@ -265,7 +262,7 @@ static void tdi_reset (struct ehci_hcd *ehci) } /* reset a non-running (STS_HALT == 1) controller */ -static int ehci_reset (struct ehci_hcd *ehci) +int ehci_reset(struct ehci_hcd *ehci) { int retval; u32 command = ehci_readl(ehci, &ehci->regs->command); @@ -329,9 +326,7 @@ static void ehci_quiesce (struct ehci_hcd *ehci) } /*-------------------------------------------------------------------------*/ - -static void end_unlink_async(struct ehci_hcd *ehci); -static void ehci_work(struct ehci_hcd *ehci); +static void free_cached_lists(struct ehci_hcd *ehci); #include "ehci-hub.c" #include "ehci-lpm.c" @@ -440,7 +435,7 @@ static void ehci_silence_controller(struct ehci_hcd *ehci) * This forcibly disables dma and IRQs, helping kexec and other cases * where the next system software may expect clean state. */ -static void ehci_shutdown(struct usb_hcd *hcd) +void ehci_shutdown(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci(hcd); @@ -452,7 +447,7 @@ static void ehci_shutdown(struct usb_hcd *hcd) spin_unlock_irq(&ehci->lock); } -static void ehci_port_power (struct ehci_hcd *ehci, int is_on) +void ehci_port_power(struct ehci_hcd *ehci, int is_on) { unsigned port; @@ -476,7 +471,7 @@ static void ehci_port_power (struct ehci_hcd *ehci, int is_on) * ehci_work is called from some interrupts, timers, and so on. * it calls driver completion functions, after dropping ehci->lock. */ -static void ehci_work (struct ehci_hcd *ehci) +void ehci_work(struct ehci_hcd *ehci) { timer_action_done (ehci, TIMER_IO_WATCHDOG); @@ -505,7 +500,7 @@ static void ehci_work (struct ehci_hcd *ehci) /* * Called when the ehci_hcd module is removed. */ -static void ehci_stop (struct usb_hcd *hcd) +void ehci_stop(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); @@ -549,7 +544,7 @@ static void ehci_stop (struct usb_hcd *hcd) } /* one-time init, only for memory state */ -static int ehci_init(struct usb_hcd *hcd) +int ehci_init(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci(hcd); u32 temp; @@ -674,7 +669,7 @@ static int ehci_init(struct usb_hcd *hcd) } /* start HC running; it's halted, ehci_init() has been run (once) */ -static int ehci_run (struct usb_hcd *hcd) +int ehci_run(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); int retval; @@ -770,7 +765,7 @@ static int ehci_run (struct usb_hcd *hcd) /*-------------------------------------------------------------------------*/ -static irqreturn_t ehci_irq (struct usb_hcd *hcd) +irqreturn_t ehci_irq(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); u32 status, masked_status, pcd_status = 0, cmd; @@ -912,11 +907,8 @@ dead: * NOTE: control, bulk, and interrupt share the same code to append TDs * to a (possibly active) QH, and the same QH scanning code. */ -static int ehci_urb_enqueue ( - struct usb_hcd *hcd, - struct urb *urb, - gfp_t mem_flags -) { +int ehci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags) +{ struct ehci_hcd *ehci = hcd_to_ehci (hcd); struct list_head qtd_list; @@ -985,7 +977,7 @@ static void unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh) * completions normally happen asynchronously */ -static int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) +int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); struct ehci_qh *qh; @@ -1055,8 +1047,7 @@ done: // bulk qh holds the data toggle -static void -ehci_endpoint_disable (struct usb_hcd *hcd, struct usb_host_endpoint *ep) +void ehci_endpoint_disable(struct usb_hcd *hcd, struct usb_host_endpoint *ep) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); unsigned long flags; @@ -1122,8 +1113,7 @@ done: spin_unlock_irqrestore (&ehci->lock, flags); } -static void -ehci_endpoint_reset(struct usb_hcd *hcd, struct usb_host_endpoint *ep) +void ehci_endpoint_reset(struct usb_hcd *hcd, struct usb_host_endpoint *ep) { struct ehci_hcd *ehci = hcd_to_ehci(hcd); struct ehci_qh *qh; @@ -1163,7 +1153,7 @@ ehci_endpoint_reset(struct usb_hcd *hcd, struct usb_host_endpoint *ep) spin_unlock_irqrestore(&ehci->lock, flags); } -static int ehci_get_frame (struct usb_hcd *hcd) +int ehci_get_frame(struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); return (ehci_readl(ehci, &ehci->regs->frame_index) >> 3) % @@ -1176,11 +1166,6 @@ MODULE_DESCRIPTION(DRIVER_DESC); MODULE_AUTHOR (DRIVER_AUTHOR); MODULE_LICENSE ("GPL"); -#ifdef CONFIG_PCI -#include "ehci-pci.c" -#define PCI_DRIVER ehci_pci_driver -#endif - #ifdef CONFIG_USB_EHCI_FSL #include "ehci-fsl.c" #define PLATFORM_DRIVER ehci_fsl_driver @@ -1301,7 +1286,7 @@ MODULE_LICENSE ("GPL"); #define PLATFORM_DRIVER ehci_xls_driver #endif -#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \ +#if !defined(CONFIG_PCI) && !defined(PLATFORM_DRIVER) && \ !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER) && \ !defined(XILINX_OF_PLATFORM_DRIVER) #error "missing bus glue for ehci-hcd" @@ -1340,11 +1325,9 @@ static int __init ehci_hcd_init(void) goto clean0; #endif -#ifdef PCI_DRIVER - retval = pci_register_driver(&PCI_DRIVER); + retval = ehci_register_pci(); if (retval < 0) goto clean1; -#endif #ifdef PS3_SYSTEM_BUS_DRIVER retval = ps3_ehci_driver_register(&PS3_SYSTEM_BUS_DRIVER); @@ -1377,10 +1360,8 @@ clean3: ps3_ehci_driver_unregister(&PS3_SYSTEM_BUS_DRIVER); clean2: #endif -#ifdef PCI_DRIVER - pci_unregister_driver(&PCI_DRIVER); + ehci_unregister_pci(); clean1: -#endif #ifdef PLATFORM_DRIVER platform_driver_unregister(&PLATFORM_DRIVER); clean0: @@ -1406,9 +1387,7 @@ static void __exit ehci_hcd_cleanup(void) #ifdef PLATFORM_DRIVER platform_driver_unregister(&PLATFORM_DRIVER); #endif -#ifdef PCI_DRIVER - pci_unregister_driver(&PCI_DRIVER); -#endif + ehci_unregister_pci(); #ifdef PS3_SYSTEM_BUS_DRIVER ps3_ehci_driver_unregister(&PS3_SYSTEM_BUS_DRIVER); #endif diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index c161d97..3d53c53 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h @@ -188,15 +188,6 @@ static inline struct usb_hcd *ehci_to_hcd (struct ehci_hcd *ehci) return container_of ((void *) ehci, struct usb_hcd, hcd_priv); } - -static inline void -iaa_watchdog_start(struct ehci_hcd *ehci) -{ - WARN_ON(timer_pending(&ehci->iaa_watchdog)); - mod_timer(&ehci->iaa_watchdog, - jiffies + msecs_to_jiffies(EHCI_IAA_MSECS)); -} - static inline void iaa_watchdog_done(struct ehci_hcd *ehci) { del_timer(&ehci->iaa_watchdog); @@ -214,8 +205,6 @@ timer_action_done (struct ehci_hcd *ehci, enum ehci_timer_action action) clear_bit (action, &ehci->actions); } -static void free_cached_lists(struct ehci_hcd *ehci); - /*-------------------------------------------------------------------------*/ #include <linux/usb/ehci_def.h> @@ -745,6 +734,69 @@ static inline u32 hc32_to_cpup (const struct ehci_hcd *ehci, const __hc32 *x) #endif +#define INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT) + +#define ehci_dbg(ehci, fmt, args...) \ + dev_dbg(ehci_to_hcd(ehci)->self.controller, fmt, ## args) +#define ehci_err(ehci, fmt, args...) \ + dev_err(ehci_to_hcd(ehci)->self.controller, fmt, ## args) +#define ehci_info(ehci, fmt, args...) \ + dev_info(ehci_to_hcd(ehci)->self.controller, fmt, ## args) +#define ehci_warn(ehci, fmt, args...) \ + dev_warn(ehci_to_hcd(ehci)->self.controller, fmt, ## args) + +#ifdef VERBOSE_DEBUG +#define ehci_vdbg ehci_dbg +#else +static inline void ehci_vdbg(struct ehci_hcd *ehci, ...) {} +#endif + +#ifdef DEBUG +void dbg_hcs_params(struct ehci_hcd *ehci, char *label); +void dbg_hcc_params(struct ehci_hcd *ehci, char *label); +#else +static inline void dbg_hcs_params(struct ehci_hcd *ehci, char *label) {} +static inline void dbg_hcc_params(struct ehci_hcd *ehci, char *label) {} +#endif + +int ehci_bus_suspend(struct usb_hcd *hcd); +int ehci_bus_resume(struct usb_hcd *hcd); +int ehci_hub_status_data(struct usb_hcd *hcd, char *buf); +int ehci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex, + char *buf, u16 wLength); +void ehci_relinquish_port(struct usb_hcd *hcd, int portnum); +int ehci_port_handed_over(struct usb_hcd *hcd, int portnum); +void ehci_clear_tt_buffer_complete(struct usb_hcd *hcd, + struct usb_host_endpoint *ep); +int ehci_get_frame(struct usb_hcd *hcd); +void ehci_shutdown(struct usb_hcd *hcd); +void ehci_port_power(struct ehci_hcd *ehci, int is_on); +void ehci_stop(struct usb_hcd *hcd); +int ehci_init(struct usb_hcd *hcd); +int ehci_run(struct usb_hcd *hcd); +irqreturn_t ehci_irq(struct usb_hcd *hcd); +int ehci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags); +int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status); +void ehci_endpoint_disable(struct usb_hcd *hcd, struct usb_host_endpoint *ep); +void ehci_endpoint_reset(struct usb_hcd *hcd, struct usb_host_endpoint *ep); +int ehci_halt(struct ehci_hcd *ehci); +void tdi_reset(struct ehci_hcd *ehci); +int ehci_reset(struct ehci_hcd *ehci); +void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci, bool suspending, + bool do_wakeup); +void end_unlink_async(struct ehci_hcd *ehci); +void ehci_work(struct ehci_hcd *ehci); +int ehci_lpm_set_da(struct ehci_hcd *ehci, int dev_addr, int port_num); +int ehci_lpm_check(struct ehci_hcd *ehci, int port); + +#ifdef CONFIG_PCI +int ehci_register_pci(void); +void ehci_unregister_pci(void); +#else +static inline int ehci_register_pci(void) { return 0; } +static inline void ehci_unregister_pci(void) {}; +#endif + /*-------------------------------------------------------------------------*/ #ifndef DEBUG diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index 0097136..d29a8a0 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h @@ -22,6 +22,7 @@ #ifdef __KERNEL__ #include <linux/rwsem.h> +#include <linux/usb.h> #define MAX_TOPO_LEVEL 6 -- 1.7.5.4 -- 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