usb.h 6.4 KB
Newer Older
1 2 3 4 5
/*
 * Released under the GPLv2 only.
 * SPDX-License-Identifier: GPL-2.0
 */

A
Alan Stern 已提交
6
#include <linux/pm.h>
7
#include <linux/acpi.h>
A
Alan Stern 已提交
8

9
struct usb_hub_descriptor;
10
struct usb_dev_state;
11

L
Linus Torvalds 已提交
12 13
/* Functions local to drivers/usb/core/ */

14 15
extern int usb_create_sysfs_dev_files(struct usb_device *dev);
extern void usb_remove_sysfs_dev_files(struct usb_device *dev);
16
extern void usb_create_sysfs_intf_files(struct usb_interface *intf);
17
extern void usb_remove_sysfs_intf_files(struct usb_interface *intf);
A
Alan Stern 已提交
18
extern int usb_create_ep_devs(struct device *parent,
19
				struct usb_host_endpoint *endpoint,
20
				struct usb_device *udev);
A
Alan Stern 已提交
21
extern void usb_remove_ep_devs(struct usb_host_endpoint *endpoint);
L
Linus Torvalds 已提交
22

A
Alan Stern 已提交
23
extern void usb_enable_endpoint(struct usb_device *dev,
24 25 26
		struct usb_host_endpoint *ep, bool reset_toggle);
extern void usb_enable_interface(struct usb_device *dev,
		struct usb_interface *intf, bool reset_toggles);
27 28
extern void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr,
		bool reset_hardware);
29
extern void usb_disable_interface(struct usb_device *dev,
30
		struct usb_interface *intf, bool reset_hardware);
L
Linus Torvalds 已提交
31
extern void usb_release_interface_cache(struct kref *ref);
32 33 34
extern void usb_disable_device(struct usb_device *dev, int skip_ep0);
extern int usb_deauthorize_device(struct usb_device *);
extern int usb_authorize_device(struct usb_device *);
35 36
extern void usb_deauthorize_interface(struct usb_interface *);
extern void usb_authorize_interface(struct usb_interface *);
37
extern void usb_detect_quirks(struct usb_device *udev);
38
extern void usb_detect_interface_quirks(struct usb_device *udev);
39
extern int usb_remove_device(struct usb_device *udev);
L
Linus Torvalds 已提交
40 41 42

extern int usb_get_device_descriptor(struct usb_device *dev,
		unsigned int size);
A
Andiry Xu 已提交
43 44
extern int usb_get_bos_descriptor(struct usb_device *dev);
extern void usb_release_bos_descriptor(struct usb_device *dev);
45
extern char *usb_cache_string(struct usb_device *udev, int index);
L
Linus Torvalds 已提交
46
extern int usb_set_configuration(struct usb_device *dev, int configuration);
47
extern int usb_choose_configuration(struct usb_device *udev);
L
Linus Torvalds 已提交
48

49 50 51 52
static inline unsigned usb_get_max_power(struct usb_device *udev,
		struct usb_host_config *c)
{
	/* SuperSpeed power is in 8 mA units; others are in 2 mA units */
53
	unsigned mul = (udev->speed >= USB_SPEED_SUPER ? 8 : 2);
54 55 56 57

	return c->desc.bMaxPower * mul;
}

58
extern void usb_kick_hub_wq(struct usb_device *dev);
59 60 61
extern int usb_match_one_id_intf(struct usb_device *dev,
				 struct usb_host_interface *intf,
				 const struct usb_device_id *id);
62 63
extern int usb_match_device(struct usb_device *dev,
			    const struct usb_device_id *id);
64
extern void usb_forced_unbind_intf(struct usb_interface *intf);
65
extern void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev);
L
Linus Torvalds 已提交
66

67
extern void usb_hub_release_all_ports(struct usb_device *hdev,
68
		struct usb_dev_state *owner);
69 70
extern bool usb_device_is_owned(struct usb_device *udev);

71 72 73 74
extern int  usb_hub_init(void);
extern void usb_hub_cleanup(void);
extern int usb_major_init(void);
extern void usb_major_cleanup(void);
75
extern int usb_device_supports_lpm(struct usb_device *udev);
76
extern int usb_port_disable(struct usb_device *udev);
77

A
Alan Stern 已提交
78 79
#ifdef	CONFIG_PM

80
extern int usb_suspend(struct device *dev, pm_message_t msg);
A
Alan Stern 已提交
81
extern int usb_resume(struct device *dev, pm_message_t msg);
82
extern int usb_resume_complete(struct device *dev);
83

A
Alan Stern 已提交
84 85
extern int usb_port_suspend(struct usb_device *dev, pm_message_t msg);
extern int usb_port_resume(struct usb_device *dev, pm_message_t msg);
86

87 88 89 90 91 92 93 94
extern void usb_autosuspend_device(struct usb_device *udev);
extern int usb_autoresume_device(struct usb_device *udev);
extern int usb_remote_wakeup(struct usb_device *dev);
extern int usb_runtime_suspend(struct device *dev);
extern int usb_runtime_resume(struct device *dev);
extern int usb_runtime_idle(struct device *dev);
extern int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable);

A
Alan Stern 已提交
95 96
#else

A
Alan Stern 已提交
97
static inline int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
A
Alan Stern 已提交
98 99 100 101
{
	return 0;
}

A
Alan Stern 已提交
102
static inline int usb_port_resume(struct usb_device *udev, pm_message_t msg)
A
Alan Stern 已提交
103 104 105 106
{
	return 0;
}

107
#define usb_autosuspend_device(udev)		do {} while (0)
108
static inline int usb_autoresume_device(struct usb_device *udev)
109 110 111
{
	return 0;
}
112

A
Andiry Xu 已提交
113 114 115 116
static inline int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
{
	return 0;
}
117

118 119
#endif

120
extern struct bus_type usb_bus_type;
121
extern struct mutex usb_port_peer_mutex;
122 123
extern struct device_type usb_device_type;
extern struct device_type usb_if_device_type;
124
extern struct device_type usb_ep_device_type;
125
extern struct device_type usb_port_device_type;
126 127
extern struct usb_device_driver usb_generic_driver;

128
static inline int is_usb_device(const struct device *dev)
129
{
130
	return dev->type == &usb_device_type;
131 132
}

133 134 135 136 137 138 139 140 141 142
static inline int is_usb_interface(const struct device *dev)
{
	return dev->type == &usb_if_device_type;
}

static inline int is_usb_endpoint(const struct device *dev)
{
	return dev->type == &usb_ep_device_type;
}

143 144 145 146 147
static inline int is_usb_port(const struct device *dev)
{
	return dev->type == &usb_port_device_type;
}

148 149 150 151 152 153 154
/* Do the same for device drivers and interface drivers. */

static inline int is_usb_device_driver(struct device_driver *drv)
{
	return container_of(drv, struct usbdrv_wrap, driver)->
			for_devices;
}
155

L
Linus Torvalds 已提交
156 157 158
/* for labeling diagnostics */
extern const char *usbcore_name;

159
/* sysfs stuff */
160 161
extern const struct attribute_group *usb_device_groups[];
extern const struct attribute_group *usb_interface_groups[];
162

L
Linus Torvalds 已提交
163
/* usbfs stuff */
164
extern struct mutex usbfs_mutex;
L
Linus Torvalds 已提交
165
extern struct usb_driver usbfs_driver;
166
extern const struct file_operations usbfs_devices_fops;
167
extern const struct file_operations usbdev_file_operations;
L
Linus Torvalds 已提交
168 169
extern void usbfs_conn_disc_event(void);

170 171
extern int usb_devio_init(void);
extern void usb_devio_cleanup(void);
172

173 174 175 176 177 178
/*
 * Firmware specific cookie identifying a port's location. '0' == no location
 * data available
 */
typedef u32 usb_port_location_t;

179 180 181 182 183
/* internal notify stuff */
extern void usb_notify_add_device(struct usb_device *udev);
extern void usb_notify_remove_device(struct usb_device *udev);
extern void usb_notify_add_bus(struct usb_bus *ubus);
extern void usb_notify_remove_bus(struct usb_bus *ubus);
184 185
extern void usb_hub_adjust_deviceremovable(struct usb_device *hdev,
		struct usb_hub_descriptor *desc);
186

187 188 189
#ifdef CONFIG_ACPI
extern int usb_acpi_register(void);
extern void usb_acpi_unregister(void);
190 191
extern acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev,
	int port1);
192 193 194 195
#else
static inline int usb_acpi_register(void) { return 0; };
static inline void usb_acpi_unregister(void) { };
#endif