165bfd2967c906ca322a4bb69a285fe0de8916ac6Alan Stern#include <linux/pm.h> 265bfd2967c906ca322a4bb69a285fe0de8916ac6Alan Stern 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Functions local to drivers/usb/core/ */ 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 584cca820ee798a6bc8b01a4ccc9548943bc41f7fGreg Kroah-Hartmanextern int usb_create_sysfs_dev_files(struct usb_device *dev); 684cca820ee798a6bc8b01a4ccc9548943bc41f7fGreg Kroah-Hartmanextern void usb_remove_sysfs_dev_files(struct usb_device *dev); 7643de6240b0b59c420ad71dfeeb3125a3607af92Michal Nazarewiczextern void usb_create_sysfs_intf_files(struct usb_interface *intf); 884cca820ee798a6bc8b01a4ccc9548943bc41f7fGreg Kroah-Hartmanextern void usb_remove_sysfs_intf_files(struct usb_interface *intf); 93b23dd6f8a718e5339de4f7d86ce76a078b5f771Alan Sternextern int usb_create_ep_devs(struct device *parent, 1084cca820ee798a6bc8b01a4ccc9548943bc41f7fGreg Kroah-Hartman struct usb_host_endpoint *endpoint, 1184412f6291b50690febd81899e46f0f0ef7a13e0Greg Kroah-Hartman struct usb_device *udev); 123b23dd6f8a718e5339de4f7d86ce76a078b5f771Alan Sternextern void usb_remove_ep_devs(struct usb_host_endpoint *endpoint); 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 14bdd016ba64d909329cb4bacacc8443901c00e112Alan Sternextern void usb_enable_endpoint(struct usb_device *dev, 152caf7fcdb8532045680f06b67b9e63f0c9613aaaAlan Stern struct usb_host_endpoint *ep, bool reset_toggle); 162caf7fcdb8532045680f06b67b9e63f0c9613aaaAlan Sternextern void usb_enable_interface(struct usb_device *dev, 172caf7fcdb8532045680f06b67b9e63f0c9613aaaAlan Stern struct usb_interface *intf, bool reset_toggles); 18ddeac4e75f2527a340f9dc655bde49bb2429b39bAlan Sternextern void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr, 19ddeac4e75f2527a340f9dc655bde49bb2429b39bAlan Stern bool reset_hardware); 2084cca820ee798a6bc8b01a4ccc9548943bc41f7fGreg Kroah-Hartmanextern void usb_disable_interface(struct usb_device *dev, 21ddeac4e75f2527a340f9dc655bde49bb2429b39bAlan Stern struct usb_interface *intf, bool reset_hardware); 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void usb_release_interface_cache(struct kref *ref); 2384cca820ee798a6bc8b01a4ccc9548943bc41f7fGreg Kroah-Hartmanextern void usb_disable_device(struct usb_device *dev, int skip_ep0); 2484cca820ee798a6bc8b01a4ccc9548943bc41f7fGreg Kroah-Hartmanextern int usb_deauthorize_device(struct usb_device *); 2584cca820ee798a6bc8b01a4ccc9548943bc41f7fGreg Kroah-Hartmanextern int usb_authorize_device(struct usb_device *); 267ceec1f1d26f966c0816b86a1aab1e0b3b208757Oliver Neukumextern void usb_detect_quirks(struct usb_device *udev); 27253e05724f9230910344357b1142ad8642ff9f5aAlan Sternextern int usb_remove_device(struct usb_device *udev); 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int usb_get_device_descriptor(struct usb_device *dev, 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int size); 313148bf041d169a083aa31bd69bedd5bfb7ffe215Andiry Xuextern int usb_get_bos_descriptor(struct usb_device *dev); 323148bf041d169a083aa31bd69bedd5bfb7ffe215Andiry Xuextern void usb_release_bos_descriptor(struct usb_device *dev); 334f62efe67f077db17dad03a1d4c9665000a3eb45Alan Sternextern char *usb_cache_string(struct usb_device *udev, int index); 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int usb_set_configuration(struct usb_device *dev, int configuration); 35b5ea060f1e19c6a3f409d3472c723da4517547b8Greg Kroah-Hartmanextern int usb_choose_configuration(struct usb_device *udev); 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void usb_kick_khubd(struct usb_device *dev); 38bb417020ba8c559eb52f57379ba17f669f8f72cdGreg Kroah-Hartmanextern int usb_match_device(struct usb_device *dev, 39bb417020ba8c559eb52f57379ba17f669f8f72cdGreg Kroah-Hartman const struct usb_device_id *id); 4078d9a487ee961c356e1a934d9a92eca38ffb3a70Alan Sternextern void usb_forced_unbind_intf(struct usb_interface *intf); 4178d9a487ee961c356e1a934d9a92eca38ffb3a70Alan Sternextern void usb_rebind_intf(struct usb_interface *intf); 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 437cbe5dca399a50ce8aa74314b1d276e2fb904e1bAlan Sternextern int usb_hub_claim_port(struct usb_device *hdev, unsigned port, 447cbe5dca399a50ce8aa74314b1d276e2fb904e1bAlan Stern void *owner); 457cbe5dca399a50ce8aa74314b1d276e2fb904e1bAlan Sternextern int usb_hub_release_port(struct usb_device *hdev, unsigned port, 467cbe5dca399a50ce8aa74314b1d276e2fb904e1bAlan Stern void *owner); 477cbe5dca399a50ce8aa74314b1d276e2fb904e1bAlan Sternextern void usb_hub_release_all_ports(struct usb_device *hdev, void *owner); 487cbe5dca399a50ce8aa74314b1d276e2fb904e1bAlan Sternextern bool usb_device_is_owned(struct usb_device *udev); 497cbe5dca399a50ce8aa74314b1d276e2fb904e1bAlan Stern 506d5e8254bf488a40b7ae2faafbffa232ab19d541Greg Kroah-Hartmanextern int usb_hub_init(void); 516d5e8254bf488a40b7ae2faafbffa232ab19d541Greg Kroah-Hartmanextern void usb_hub_cleanup(void); 526d5e8254bf488a40b7ae2faafbffa232ab19d541Greg Kroah-Hartmanextern int usb_major_init(void); 536d5e8254bf488a40b7ae2faafbffa232ab19d541Greg Kroah-Hartmanextern void usb_major_cleanup(void); 546d5e8254bf488a40b7ae2faafbffa232ab19d541Greg Kroah-Hartman 55d388dab7b562b76525761f89702246686747ba30Alan Stern#ifdef CONFIG_PM 56d388dab7b562b76525761f89702246686747ba30Alan Stern 57f2189c477c986db47ac7f9cc32d05f6df18bfe9eAlan Sternextern int usb_suspend(struct device *dev, pm_message_t msg); 5865bfd2967c906ca322a4bb69a285fe0de8916ac6Alan Sternextern int usb_resume(struct device *dev, pm_message_t msg); 5998d9a82e5f753a2483d7b4638802d60e94e5d2e4Oliver Neukumextern int usb_resume_complete(struct device *dev); 60f2189c477c986db47ac7f9cc32d05f6df18bfe9eAlan Stern 6165bfd2967c906ca322a4bb69a285fe0de8916ac6Alan Sternextern int usb_port_suspend(struct usb_device *dev, pm_message_t msg); 6265bfd2967c906ca322a4bb69a285fe0de8916ac6Alan Sternextern int usb_port_resume(struct usb_device *dev, pm_message_t msg); 63e0318ebff4d96131bb3524308b845f642e64df81Alan Stern 64d388dab7b562b76525761f89702246686747ba30Alan Stern#else 65d388dab7b562b76525761f89702246686747ba30Alan Stern 6665bfd2967c906ca322a4bb69a285fe0de8916ac6Alan Sternstatic inline int usb_port_suspend(struct usb_device *udev, pm_message_t msg) 674956eccdd6101c5abb71966079e8183d12796d6cAlan Stern{ 684956eccdd6101c5abb71966079e8183d12796d6cAlan Stern return 0; 694956eccdd6101c5abb71966079e8183d12796d6cAlan Stern} 704956eccdd6101c5abb71966079e8183d12796d6cAlan Stern 7165bfd2967c906ca322a4bb69a285fe0de8916ac6Alan Sternstatic inline int usb_port_resume(struct usb_device *udev, pm_message_t msg) 724956eccdd6101c5abb71966079e8183d12796d6cAlan Stern{ 734956eccdd6101c5abb71966079e8183d12796d6cAlan Stern return 0; 744956eccdd6101c5abb71966079e8183d12796d6cAlan Stern} 754956eccdd6101c5abb71966079e8183d12796d6cAlan Stern 76d388dab7b562b76525761f89702246686747ba30Alan Stern#endif 77d388dab7b562b76525761f89702246686747ba30Alan Stern 78645daaab0b6adc35c1838df2a82f9d729fdb1767Alan Stern#ifdef CONFIG_USB_SUSPEND 79645daaab0b6adc35c1838df2a82f9d729fdb1767Alan Stern 8094fcda1f8ab5e0cacc381c5ca1cc9aa6ad523576Alan Sternextern void usb_autosuspend_device(struct usb_device *udev); 8194fcda1f8ab5e0cacc381c5ca1cc9aa6ad523576Alan Sternextern int usb_autoresume_device(struct usb_device *udev); 829bbdf1e0afe771ca7650f9f476769310bee9d8f3Alan Sternextern int usb_remote_wakeup(struct usb_device *dev); 83e1620d591a75a10b15cf61dbf8243a0b7e6731a2Rafael J. Wysockiextern int usb_runtime_suspend(struct device *dev); 84e1620d591a75a10b15cf61dbf8243a0b7e6731a2Rafael J. Wysockiextern int usb_runtime_resume(struct device *dev); 85e1620d591a75a10b15cf61dbf8243a0b7e6731a2Rafael J. Wysockiextern int usb_runtime_idle(struct device *dev); 8665580b4321eb36f16ae8b5987bfa1bb948fc5112Andiry Xuextern int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable); 87645daaab0b6adc35c1838df2a82f9d729fdb1767Alan Stern 88645daaab0b6adc35c1838df2a82f9d729fdb1767Alan Stern#else 89645daaab0b6adc35c1838df2a82f9d729fdb1767Alan Stern 9019c262391c4741b012a5031fc438fb694e77c385Alan Stern#define usb_autosuspend_device(udev) do {} while (0) 9194fcda1f8ab5e0cacc381c5ca1cc9aa6ad523576Alan Sternstatic inline int usb_autoresume_device(struct usb_device *udev) 92e0318ebff4d96131bb3524308b845f642e64df81Alan Stern{ 93e0318ebff4d96131bb3524308b845f642e64df81Alan Stern return 0; 94e0318ebff4d96131bb3524308b845f642e64df81Alan Stern} 95645daaab0b6adc35c1838df2a82f9d729fdb1767Alan Stern 969bbdf1e0afe771ca7650f9f476769310bee9d8f3Alan Sternstatic inline int usb_remote_wakeup(struct usb_device *udev) 979bbdf1e0afe771ca7650f9f476769310bee9d8f3Alan Stern{ 989bbdf1e0afe771ca7650f9f476769310bee9d8f3Alan Stern return 0; 999bbdf1e0afe771ca7650f9f476769310bee9d8f3Alan Stern} 1009bbdf1e0afe771ca7650f9f476769310bee9d8f3Alan Stern 10165580b4321eb36f16ae8b5987bfa1bb948fc5112Andiry Xustatic inline int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable) 10265580b4321eb36f16ae8b5987bfa1bb948fc5112Andiry Xu{ 10365580b4321eb36f16ae8b5987bfa1bb948fc5112Andiry Xu return 0; 10465580b4321eb36f16ae8b5987bfa1bb948fc5112Andiry Xu} 105645daaab0b6adc35c1838df2a82f9d729fdb1767Alan Stern#endif 106645daaab0b6adc35c1838df2a82f9d729fdb1767Alan Stern 10736e56a34586783c7986ce09d39db80b27c95ce24Alan Sternextern struct bus_type usb_bus_type; 1089f8b17e643fe6aa505629658445849397bda4e4fKay Sieversextern struct device_type usb_device_type; 1099f8b17e643fe6aa505629658445849397bda4e4fKay Sieversextern struct device_type usb_if_device_type; 1105512966643adb17483efc5f61481a38fc33088bbKay Sieversextern struct device_type usb_ep_device_type; 1118bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Sternextern struct usb_device_driver usb_generic_driver; 1128bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern 113095bc335360a51623dd8571839bbf465851a7f4bLuiz Fernando N. Capitulinostatic inline int is_usb_device(const struct device *dev) 1148bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern{ 1159f8b17e643fe6aa505629658445849397bda4e4fKay Sievers return dev->type == &usb_device_type; 1168bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern} 1178bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern 1185512966643adb17483efc5f61481a38fc33088bbKay Sieversstatic inline int is_usb_interface(const struct device *dev) 1195512966643adb17483efc5f61481a38fc33088bbKay Sievers{ 1205512966643adb17483efc5f61481a38fc33088bbKay Sievers return dev->type == &usb_if_device_type; 1215512966643adb17483efc5f61481a38fc33088bbKay Sievers} 1225512966643adb17483efc5f61481a38fc33088bbKay Sievers 1235512966643adb17483efc5f61481a38fc33088bbKay Sieversstatic inline int is_usb_endpoint(const struct device *dev) 1245512966643adb17483efc5f61481a38fc33088bbKay Sievers{ 1255512966643adb17483efc5f61481a38fc33088bbKay Sievers return dev->type == &usb_ep_device_type; 1265512966643adb17483efc5f61481a38fc33088bbKay Sievers} 1275512966643adb17483efc5f61481a38fc33088bbKay Sievers 1288bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern/* Do the same for device drivers and interface drivers. */ 1298bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern 1308bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Sternstatic inline int is_usb_device_driver(struct device_driver *drv) 1318bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern{ 1328bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern return container_of(drv, struct usbdrv_wrap, driver)-> 1338bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern for_devices; 1348bb54ab573ecd1b4fe2ed66416a8d99a86e65316Alan Stern} 1355edbfb7c8af0577097dae87cdd4dfdba82bb9579David Brownell 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* for labeling diagnostics */ 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern const char *usbcore_name; 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1392e5f10e4f0a9649186d8a8c793822b2e0dae8373Alan Stern/* sysfs stuff */ 140a4dbd6740df0872cdf0a86841f75beec8381964dDavid Brownellextern const struct attribute_group *usb_device_groups[]; 141a4dbd6740df0872cdf0a86841f75beec8381964dDavid Brownellextern const struct attribute_group *usb_interface_groups[]; 1422e5f10e4f0a9649186d8a8c793822b2e0dae8373Alan Stern 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* usbfs stuff */ 1444a2a8a2cce86b9d001378cc25acb5c61e6ca7d63Alan Sternextern struct mutex usbfs_mutex; 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct usb_driver usbfs_driver; 146066202dd48cf3296b6cc22b5fcf89aef33fa0efcLuiz Fernando N. Capitulinoextern const struct file_operations usbfs_devices_fops; 1479f8b17e643fe6aa505629658445849397bda4e4fKay Sieversextern const struct file_operations usbdev_file_operations; 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void usbfs_conn_disc_event(void); 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1509f8b17e643fe6aa505629658445849397bda4e4fKay Sieversextern int usb_devio_init(void); 1519f8b17e643fe6aa505629658445849397bda4e4fKay Sieversextern void usb_devio_cleanup(void); 1526d5e8254bf488a40b7ae2faafbffa232ab19d541Greg Kroah-Hartman 1533099e75a7ccc3c5b0a4cf988a76d9c4a7fa5e91aGreg Kroah-Hartman/* internal notify stuff */ 1543099e75a7ccc3c5b0a4cf988a76d9c4a7fa5e91aGreg Kroah-Hartmanextern void usb_notify_add_device(struct usb_device *udev); 1553099e75a7ccc3c5b0a4cf988a76d9c4a7fa5e91aGreg Kroah-Hartmanextern void usb_notify_remove_device(struct usb_device *udev); 1563099e75a7ccc3c5b0a4cf988a76d9c4a7fa5e91aGreg Kroah-Hartmanextern void usb_notify_add_bus(struct usb_bus *ubus); 1573099e75a7ccc3c5b0a4cf988a76d9c4a7fa5e91aGreg Kroah-Hartmanextern void usb_notify_remove_bus(struct usb_bus *ubus); 1583099e75a7ccc3c5b0a4cf988a76d9c4a7fa5e91aGreg Kroah-Hartman 159