usb.h revision 60678b60d78cd268a3aed3044dfbbb85760b2c54
1cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm#include <linux/pm.h> 2cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 3cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm/* Functions local to drivers/usb/core/ */ 4cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 5cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern int usb_create_sysfs_dev_files(struct usb_device *dev); 6cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usb_remove_sysfs_dev_files(struct usb_device *dev); 7cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern int usb_create_sysfs_intf_files(struct usb_interface *intf); 8cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usb_remove_sysfs_intf_files(struct usb_interface *intf); 9cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern int usb_create_ep_devs(struct device *parent, 10cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm struct usb_host_endpoint *endpoint, 11f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart struct usb_device *udev); 12f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_remove_ep_devs(struct usb_host_endpoint *endpoint); 13cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 14f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_enable_endpoint(struct usb_device *dev, 15cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm struct usb_host_endpoint *ep, bool reset_toggle); 16f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_enable_interface(struct usb_device *dev, 17f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart struct usb_interface *intf, bool reset_toggles); 18f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr, 198564557a03c12adb9c4b76ae1e86db4113a04d13Magnus Damm bool reset_hardware); 2040331b21f5fdb746e80fc609ef60ef71b5cd47d9Phil Edworthyextern void usb_disable_interface(struct usb_device *dev, 21f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart struct usb_interface *intf, bool reset_hardware); 22f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_release_interface_cache(struct kref *ref); 23355b200bacdb6017669cdc5bc9e7b1037aac42a2Paul Gortmakerextern void usb_disable_device(struct usb_device *dev, int skip_ep0); 24f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_deauthorize_device(struct usb_device *); 25f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_authorize_device(struct usb_device *); 26f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_detect_quirks(struct usb_device *udev); 27f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_remove_device(struct usb_device *udev); 28f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart 29f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_get_device_descriptor(struct usb_device *dev, 30225c9a8d1da274bf23efec43ec28b1c9e45e12f8Paul Mundt unsigned int size); 318a20974f0370fe1b924704399e7ba327d894ef72Laurent Pinchartextern char *usb_cache_string(struct usb_device *udev, int index); 32cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern int usb_set_configuration(struct usb_device *dev, int configuration); 336de9edd5bde0cdfea12e9948690e53ec669c3018Guennadi Liakhovetskiextern int usb_choose_configuration(struct usb_device *udev); 346de9edd5bde0cdfea12e9948690e53ec669c3018Guennadi Liakhovetski 35a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthyextern void usb_kick_khubd(struct usb_device *dev); 36a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthyextern int usb_match_device(struct usb_device *dev, 37cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm const struct usb_device_id *id); 38d2ecbab5960d9814a269d36723647d6ef391ba8fGuennadi Liakhovetskiextern void usb_forced_unbind_intf(struct usb_interface *intf); 39d2ecbab5960d9814a269d36723647d6ef391ba8fGuennadi Liakhovetskiextern void usb_rebind_intf(struct usb_interface *intf); 40cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 41f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_hub_claim_port(struct usb_device *hdev, unsigned port, 42f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart void *owner); 43f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_hub_release_port(struct usb_device *hdev, unsigned port, 44f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart void *owner); 45f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_hub_release_all_ports(struct usb_device *hdev, void *owner); 46f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern bool usb_device_is_owned(struct usb_device *udev); 47f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart 48f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_hub_init(void); 49f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_hub_cleanup(void); 50f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_major_init(void); 51f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern void usb_major_cleanup(void); 52f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart 53f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart#ifdef CONFIG_PM 54f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart 55f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_suspend(struct device *dev, pm_message_t msg); 56f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_resume(struct device *dev, pm_message_t msg); 57f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart 58f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchartextern int usb_port_suspend(struct usb_device *dev, pm_message_t msg); 590246c4712c40294bd5e8335f0c15a38c8e52709fMagnus Dammextern int usb_port_resume(struct usb_device *dev, pm_message_t msg); 60cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 61cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm#else 62cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 63cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammstatic inline int usb_port_suspend(struct usb_device *udev, pm_message_t msg) 64cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm{ 65cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm return 0; 66cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm} 678564557a03c12adb9c4b76ae1e86db4113a04d13Magnus Damm 68cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammstatic inline int usb_port_resume(struct usb_device *udev, pm_message_t msg) 6953b5031430bb3a7941b340b453afe4eabeb5340cDamian Hobson-Garcia{ 70cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm return 0; 71cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm} 72cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 73cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm#endif 74cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 75cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm#ifdef CONFIG_USB_SUSPEND 766011bdeaa6089d49c02de69f05980da7bad314abGuennadi Liakhovetski 77cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usb_autosuspend_device(struct usb_device *udev); 78cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern int usb_autoresume_device(struct usb_device *udev); 790246c4712c40294bd5e8335f0c15a38c8e52709fMagnus Dammextern int usb_remote_wakeup(struct usb_device *dev); 80cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 81cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm#else 82cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 83cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm#define usb_autosuspend_device(udev) do {} while (0) 84cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammstatic inline int usb_autoresume_device(struct usb_device *udev) 85cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm{ 86cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm return 0; 878564557a03c12adb9c4b76ae1e86db4113a04d13Magnus Damm} 88cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 89cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammstatic inline int usb_remote_wakeup(struct usb_device *udev) 90cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm{ 91cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm return 0; 92cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm} 93cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 94cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm#endif 95cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 96cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern struct bus_type usb_bus_type; 97a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthyextern struct device_type usb_device_type; 98a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthyextern struct device_type usb_if_device_type; 99a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthyextern struct device_type usb_ep_device_type; 100a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthyextern struct usb_device_driver usb_generic_driver; 101a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy 102a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthystatic inline int is_usb_device(const struct device *dev) 103a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy{ 104a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy return dev->type == &usb_device_type; 105a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy} 10653b5031430bb3a7941b340b453afe4eabeb5340cDamian Hobson-Garcia 107a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthystatic inline int is_usb_interface(const struct device *dev) 108a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy{ 109a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy return dev->type == &usb_if_device_type; 110a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy} 111a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy 112a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthystatic inline int is_usb_endpoint(const struct device *dev) 113a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy{ 114a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy return dev->type == &usb_ep_device_type; 115a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy} 116a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy 117f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart/* Do the same for device drivers and interface drivers. */ 118f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart 119b5ef967df13d4d243a2954c32bdd9181a1ee7382Laurent Pinchartstatic inline int is_usb_device_driver(struct device_driver *drv) 120f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart{ 121f1f60b5f55099a658a5f79cc453b371a439864e6Laurent Pinchart return container_of(drv, struct usbdrv_wrap, driver)-> 122cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm for_devices; 123cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm} 124cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 125cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm/* translate USB error codes to codes user space understands */ 126a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthystatic inline int usb_translate_errors(int error_code) 127a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy{ 128a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy switch (error_code) { 129a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy case 0: 130a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy case -ENOMEM: 131a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy case -ENODEV: 132a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy return error_code; 133a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy default: 134a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy return -EIO; 135a6f15ade97989d414e9bf33874c9d5d1f39808ecPhil Edworthy } 136cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm} 137cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 138cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 139cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm/* for labeling diagnostics */ 140cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern const char *usbcore_name; 141cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 142cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm/* sysfs stuff */ 143cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern const struct attribute_group *usb_device_groups[]; 144cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern const struct attribute_group *usb_interface_groups[]; 145cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 146cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm/* usbfs stuff */ 147cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern struct mutex usbfs_mutex; 148cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern struct usb_driver usbfs_driver; 149cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern const struct file_operations usbfs_devices_fops; 150cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern const struct file_operations usbdev_file_operations; 151cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usbfs_conn_disc_event(void); 152cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 153cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern int usb_devio_init(void); 154cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usb_devio_cleanup(void); 155cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 156cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm/* internal notify stuff */ 157cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usb_notify_add_device(struct usb_device *udev); 158cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usb_notify_remove_device(struct usb_device *udev); 159cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usb_notify_add_bus(struct usb_bus *ubus); 160cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Dammextern void usb_notify_remove_bus(struct usb_bus *ubus); 161cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm 162cfb4f5d1750e05f43902197713c50c29e7dfbc99Magnus Damm