usb.h revision 78d9a487ee961c356e1a934d9a92eca38ffb3a70
1/* Functions local to drivers/usb/core/ */
2
3extern int usb_create_sysfs_dev_files(struct usb_device *dev);
4extern void usb_remove_sysfs_dev_files(struct usb_device *dev);
5extern int usb_create_sysfs_intf_files(struct usb_interface *intf);
6extern void usb_remove_sysfs_intf_files(struct usb_interface *intf);
7extern int usb_create_ep_files(struct device *parent,
8				struct usb_host_endpoint *endpoint,
9				struct usb_device *udev);
10extern void usb_remove_ep_files(struct usb_host_endpoint *endpoint);
11
12extern void usb_enable_endpoint(struct usb_device *dev,
13		struct usb_host_endpoint *ep);
14extern void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr);
15extern void usb_disable_interface(struct usb_device *dev,
16		struct usb_interface *intf);
17extern void usb_release_interface_cache(struct kref *ref);
18extern void usb_disable_device(struct usb_device *dev, int skip_ep0);
19extern int usb_deauthorize_device(struct usb_device *);
20extern int usb_authorize_device(struct usb_device *);
21extern void usb_detect_quirks(struct usb_device *udev);
22
23extern int usb_get_device_descriptor(struct usb_device *dev,
24		unsigned int size);
25extern char *usb_cache_string(struct usb_device *udev, int index);
26extern int usb_set_configuration(struct usb_device *dev, int configuration);
27extern int usb_choose_configuration(struct usb_device *udev);
28
29extern void usb_kick_khubd(struct usb_device *dev);
30extern int usb_match_device(struct usb_device *dev,
31			    const struct usb_device_id *id);
32extern void usb_forced_unbind_intf(struct usb_interface *intf);
33extern void usb_rebind_intf(struct usb_interface *intf);
34
35extern int  usb_hub_init(void);
36extern void usb_hub_cleanup(void);
37extern int usb_major_init(void);
38extern void usb_major_cleanup(void);
39extern int usb_host_init(void);
40extern void usb_host_cleanup(void);
41
42#ifdef	CONFIG_PM
43
44extern void usb_autosuspend_work(struct work_struct *work);
45extern int usb_port_suspend(struct usb_device *dev);
46extern int usb_port_resume(struct usb_device *dev);
47extern int usb_external_suspend_device(struct usb_device *udev,
48		pm_message_t msg);
49extern int usb_external_resume_device(struct usb_device *udev);
50
51static inline void usb_pm_lock(struct usb_device *udev)
52{
53	mutex_lock_nested(&udev->pm_mutex, udev->level);
54}
55
56static inline void usb_pm_unlock(struct usb_device *udev)
57{
58	mutex_unlock(&udev->pm_mutex);
59}
60
61#else
62
63static inline int usb_port_suspend(struct usb_device *udev)
64{
65	return 0;
66}
67
68static inline int usb_port_resume(struct usb_device *udev)
69{
70	return 0;
71}
72
73static inline void usb_pm_lock(struct usb_device *udev) {}
74static inline void usb_pm_unlock(struct usb_device *udev) {}
75
76#endif
77
78#ifdef CONFIG_USB_SUSPEND
79
80extern void usb_autosuspend_device(struct usb_device *udev);
81extern void usb_try_autosuspend_device(struct usb_device *udev);
82extern int usb_autoresume_device(struct usb_device *udev);
83
84#else
85
86#define usb_autosuspend_device(udev)		do {} while (0)
87#define usb_try_autosuspend_device(udev)	do {} while (0)
88static inline int usb_autoresume_device(struct usb_device *udev)
89{
90	return 0;
91}
92
93#endif
94
95extern struct workqueue_struct *ksuspend_usb_wq;
96extern struct bus_type usb_bus_type;
97extern struct device_type usb_device_type;
98extern struct device_type usb_if_device_type;
99extern struct usb_device_driver usb_generic_driver;
100
101static inline int is_usb_device(const struct device *dev)
102{
103	return dev->type == &usb_device_type;
104}
105
106/* Do the same for device drivers and interface drivers. */
107
108static inline int is_usb_device_driver(struct device_driver *drv)
109{
110	return container_of(drv, struct usbdrv_wrap, driver)->
111			for_devices;
112}
113
114/* Interfaces and their "power state" are owned by usbcore */
115
116static inline void mark_active(struct usb_interface *f)
117{
118	f->is_active = 1;
119}
120
121static inline void mark_quiesced(struct usb_interface *f)
122{
123	f->is_active = 0;
124}
125
126static inline int is_active(const struct usb_interface *f)
127{
128	return f->is_active;
129}
130
131
132/* for labeling diagnostics */
133extern const char *usbcore_name;
134
135/* sysfs stuff */
136extern struct attribute_group *usb_device_groups[];
137extern struct attribute_group *usb_interface_groups[];
138
139/* usbfs stuff */
140extern struct mutex usbfs_mutex;
141extern struct usb_driver usbfs_driver;
142extern const struct file_operations usbfs_devices_fops;
143extern const struct file_operations usbdev_file_operations;
144extern void usbfs_conn_disc_event(void);
145
146extern int usb_devio_init(void);
147extern void usb_devio_cleanup(void);
148
149struct dev_state {
150	struct list_head list;      /* state list */
151	struct usb_device *dev;
152	struct file *file;
153	spinlock_t lock;            /* protects the async urb lists */
154	struct list_head async_pending;
155	struct list_head async_completed;
156	wait_queue_head_t wait;     /* wake up if a request completed */
157	unsigned int discsignr;
158	struct pid *disc_pid;
159	uid_t disc_uid, disc_euid;
160	void __user *disccontext;
161	unsigned long ifclaimed;
162	u32 secid;
163};
164
165/* internal notify stuff */
166extern void usb_notify_add_device(struct usb_device *udev);
167extern void usb_notify_remove_device(struct usb_device *udev);
168extern void usb_notify_add_bus(struct usb_bus *ubus);
169extern void usb_notify_remove_bus(struct usb_bus *ubus);
170
171