1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Released under the GPLv2 only. |
4 | */ |
5 | |
6 | #include <linux/pm.h> |
7 | #include <linux/acpi.h> |
8 | |
9 | struct usb_hub_descriptor; |
10 | struct usb_dev_state; |
11 | |
12 | /* Functions local to drivers/usb/core/ */ |
13 | |
14 | extern int usb_create_sysfs_dev_files(struct usb_device *dev); |
15 | 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); |
18 | extern int usb_update_wireless_status_attr(struct usb_interface *intf); |
19 | extern int usb_create_ep_devs(struct device *parent, |
20 | struct usb_host_endpoint *endpoint, |
21 | struct usb_device *udev); |
22 | extern void usb_remove_ep_devs(struct usb_host_endpoint *endpoint); |
23 | |
24 | extern void usb_enable_endpoint(struct usb_device *dev, |
25 | struct usb_host_endpoint *ep, bool reset_toggle); |
26 | extern void usb_enable_interface(struct usb_device *dev, |
27 | struct usb_interface *intf, bool reset_toggles); |
28 | extern void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr, |
29 | bool reset_hardware); |
30 | extern void usb_disable_interface(struct usb_device *dev, |
31 | struct usb_interface *intf, bool reset_hardware); |
32 | extern void usb_release_interface_cache(struct kref *ref); |
33 | extern void usb_disable_device(struct usb_device *dev, int skip_ep0); |
34 | extern int usb_deauthorize_device(struct usb_device *); |
35 | extern int usb_authorize_device(struct usb_device *); |
36 | extern void usb_deauthorize_interface(struct usb_interface *); |
37 | extern void usb_authorize_interface(struct usb_interface *); |
38 | extern void usb_detect_quirks(struct usb_device *udev); |
39 | extern void usb_detect_interface_quirks(struct usb_device *udev); |
40 | extern void usb_release_quirk_list(void); |
41 | extern bool usb_endpoint_is_ignored(struct usb_device *udev, |
42 | struct usb_host_interface *intf, |
43 | struct usb_endpoint_descriptor *epd); |
44 | extern int usb_remove_device(struct usb_device *udev); |
45 | |
46 | extern struct usb_device_descriptor *usb_get_device_descriptor( |
47 | struct usb_device *udev); |
48 | extern int usb_set_isoch_delay(struct usb_device *dev); |
49 | extern int usb_get_bos_descriptor(struct usb_device *dev); |
50 | extern void usb_release_bos_descriptor(struct usb_device *dev); |
51 | extern int usb_set_configuration(struct usb_device *dev, int configuration); |
52 | extern int usb_choose_configuration(struct usb_device *udev); |
53 | extern int usb_generic_driver_probe(struct usb_device *udev); |
54 | extern void usb_generic_driver_disconnect(struct usb_device *udev); |
55 | extern int usb_generic_driver_suspend(struct usb_device *udev, |
56 | pm_message_t msg); |
57 | extern int usb_generic_driver_resume(struct usb_device *udev, |
58 | pm_message_t msg); |
59 | |
60 | static inline unsigned usb_get_max_power(struct usb_device *udev, |
61 | struct usb_host_config *c) |
62 | { |
63 | /* SuperSpeed power is in 8 mA units; others are in 2 mA units */ |
64 | unsigned mul = (udev->speed >= USB_SPEED_SUPER ? 8 : 2); |
65 | |
66 | return c->desc.bMaxPower * mul; |
67 | } |
68 | |
69 | extern void usb_kick_hub_wq(struct usb_device *dev); |
70 | extern int usb_match_one_id_intf(struct usb_device *dev, |
71 | struct usb_host_interface *intf, |
72 | const struct usb_device_id *id); |
73 | extern int usb_match_device(struct usb_device *dev, |
74 | const struct usb_device_id *id); |
75 | extern const struct usb_device_id *usb_device_match_id(struct usb_device *udev, |
76 | const struct usb_device_id *id); |
77 | extern bool usb_driver_applicable(struct usb_device *udev, |
78 | struct usb_device_driver *udrv); |
79 | extern void usb_forced_unbind_intf(struct usb_interface *intf); |
80 | extern void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev); |
81 | |
82 | extern void usb_hub_release_all_ports(struct usb_device *hdev, |
83 | struct usb_dev_state *owner); |
84 | extern bool usb_device_is_owned(struct usb_device *udev); |
85 | |
86 | extern int usb_hub_init(void); |
87 | extern void usb_hub_cleanup(void); |
88 | extern int usb_major_init(void); |
89 | extern void usb_major_cleanup(void); |
90 | extern int usb_device_supports_lpm(struct usb_device *udev); |
91 | extern int usb_port_disable(struct usb_device *udev); |
92 | |
93 | #ifdef CONFIG_PM |
94 | |
95 | extern int usb_suspend(struct device *dev, pm_message_t msg); |
96 | extern int usb_resume(struct device *dev, pm_message_t msg); |
97 | extern int usb_resume_complete(struct device *dev); |
98 | |
99 | extern int usb_port_suspend(struct usb_device *dev, pm_message_t msg); |
100 | extern int usb_port_resume(struct usb_device *dev, pm_message_t msg); |
101 | |
102 | extern void usb_autosuspend_device(struct usb_device *udev); |
103 | extern int usb_autoresume_device(struct usb_device *udev); |
104 | extern int usb_remote_wakeup(struct usb_device *dev); |
105 | extern int usb_runtime_suspend(struct device *dev); |
106 | extern int usb_runtime_resume(struct device *dev); |
107 | extern int usb_runtime_idle(struct device *dev); |
108 | extern int usb_enable_usb2_hardware_lpm(struct usb_device *udev); |
109 | extern int usb_disable_usb2_hardware_lpm(struct usb_device *udev); |
110 | |
111 | extern void usbfs_notify_suspend(struct usb_device *udev); |
112 | extern void usbfs_notify_resume(struct usb_device *udev); |
113 | |
114 | #else |
115 | |
116 | static inline int usb_port_suspend(struct usb_device *udev, pm_message_t msg) |
117 | { |
118 | return 0; |
119 | } |
120 | |
121 | static inline int usb_port_resume(struct usb_device *udev, pm_message_t msg) |
122 | { |
123 | return 0; |
124 | } |
125 | |
126 | #define usb_autosuspend_device(udev) do {} while (0) |
127 | static inline int usb_autoresume_device(struct usb_device *udev) |
128 | { |
129 | return 0; |
130 | } |
131 | |
132 | static inline int usb_enable_usb2_hardware_lpm(struct usb_device *udev) |
133 | { |
134 | return 0; |
135 | } |
136 | |
137 | static inline int usb_disable_usb2_hardware_lpm(struct usb_device *udev) |
138 | { |
139 | return 0; |
140 | } |
141 | |
142 | #endif |
143 | |
144 | extern const struct class usbmisc_class; |
145 | extern const struct bus_type usb_bus_type; |
146 | extern struct mutex usb_port_peer_mutex; |
147 | extern const struct device_type usb_device_type; |
148 | extern const struct device_type usb_if_device_type; |
149 | extern const struct device_type usb_ep_device_type; |
150 | extern const struct device_type usb_port_device_type; |
151 | extern struct usb_device_driver usb_generic_driver; |
152 | |
153 | static inline int is_usb_device(const struct device *dev) |
154 | { |
155 | return dev->type == &usb_device_type; |
156 | } |
157 | |
158 | static inline int is_usb_interface(const struct device *dev) |
159 | { |
160 | return dev->type == &usb_if_device_type; |
161 | } |
162 | |
163 | static inline int is_usb_endpoint(const struct device *dev) |
164 | { |
165 | return dev->type == &usb_ep_device_type; |
166 | } |
167 | |
168 | static inline int is_usb_port(const struct device *dev) |
169 | { |
170 | return dev->type == &usb_port_device_type; |
171 | } |
172 | |
173 | static inline int is_root_hub(struct usb_device *udev) |
174 | { |
175 | return (udev->parent == NULL); |
176 | } |
177 | |
178 | extern bool is_usb_device_driver(const struct device_driver *drv); |
179 | |
180 | /* for labeling diagnostics */ |
181 | extern const char *usbcore_name; |
182 | |
183 | /* sysfs stuff */ |
184 | extern const struct attribute_group *usb_device_groups[]; |
185 | extern const struct attribute_group *usb_interface_groups[]; |
186 | |
187 | /* usbfs stuff */ |
188 | extern struct usb_driver usbfs_driver; |
189 | extern const struct file_operations usbfs_devices_fops; |
190 | extern const struct file_operations usbdev_file_operations; |
191 | |
192 | extern int usb_devio_init(void); |
193 | extern void usb_devio_cleanup(void); |
194 | |
195 | /* |
196 | * Firmware specific cookie identifying a port's location. '0' == no location |
197 | * data available |
198 | */ |
199 | typedef u32 usb_port_location_t; |
200 | |
201 | /* internal notify stuff */ |
202 | extern void usb_notify_add_device(struct usb_device *udev); |
203 | extern void usb_notify_remove_device(struct usb_device *udev); |
204 | extern void usb_notify_add_bus(struct usb_bus *ubus); |
205 | extern void usb_notify_remove_bus(struct usb_bus *ubus); |
206 | extern void usb_hub_adjust_deviceremovable(struct usb_device *hdev, |
207 | struct usb_hub_descriptor *desc); |
208 | |
209 | #ifdef CONFIG_ACPI |
210 | extern int usb_acpi_register(void); |
211 | extern void usb_acpi_unregister(void); |
212 | extern acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev, |
213 | int port1); |
214 | #else |
215 | static inline int usb_acpi_register(void) { return 0; }; |
216 | static inline void usb_acpi_unregister(void) { }; |
217 | #endif |
218 | |