| 1 | // SPDX-License-Identifier: GPL-2.0 | 
|---|
| 2 | /* | 
|---|
| 3 | * drivers/usb/core/usb.c | 
|---|
| 4 | * | 
|---|
| 5 | * (C) Copyright Linus Torvalds 1999 | 
|---|
| 6 | * (C) Copyright Johannes Erdfelt 1999-2001 | 
|---|
| 7 | * (C) Copyright Andreas Gal 1999 | 
|---|
| 8 | * (C) Copyright Gregory P. Smith 1999 | 
|---|
| 9 | * (C) Copyright Deti Fliegl 1999 (new USB architecture) | 
|---|
| 10 | * (C) Copyright Randy Dunlap 2000 | 
|---|
| 11 | * (C) Copyright David Brownell 2000-2004 | 
|---|
| 12 | * (C) Copyright Yggdrasil Computing, Inc. 2000 | 
|---|
| 13 | *     (usb_device_id matching changes by Adam J. Richter) | 
|---|
| 14 | * (C) Copyright Greg Kroah-Hartman 2002-2003 | 
|---|
| 15 | * | 
|---|
| 16 | * Released under the GPLv2 only. | 
|---|
| 17 | * | 
|---|
| 18 | * NOTE! This is not actually a driver at all, rather this is | 
|---|
| 19 | * just a collection of helper routines that implement the | 
|---|
| 20 | * generic USB things that the real drivers can use.. | 
|---|
| 21 | * | 
|---|
| 22 | * Think of this as a "USB library" rather than anything else, | 
|---|
| 23 | * with no callbacks.  Callbacks are evil. | 
|---|
| 24 | */ | 
|---|
| 25 |  | 
|---|
| 26 | #include <linux/module.h> | 
|---|
| 27 | #include <linux/moduleparam.h> | 
|---|
| 28 | #include <linux/of.h> | 
|---|
| 29 | #include <linux/string.h> | 
|---|
| 30 | #include <linux/bitops.h> | 
|---|
| 31 | #include <linux/slab.h> | 
|---|
| 32 | #include <linux/kmod.h> | 
|---|
| 33 | #include <linux/init.h> | 
|---|
| 34 | #include <linux/spinlock.h> | 
|---|
| 35 | #include <linux/errno.h> | 
|---|
| 36 | #include <linux/usb.h> | 
|---|
| 37 | #include <linux/usb/hcd.h> | 
|---|
| 38 | #include <linux/mutex.h> | 
|---|
| 39 | #include <linux/workqueue.h> | 
|---|
| 40 | #include <linux/debugfs.h> | 
|---|
| 41 | #include <linux/usb/of.h> | 
|---|
| 42 |  | 
|---|
| 43 | #include <asm/io.h> | 
|---|
| 44 | #include <linux/scatterlist.h> | 
|---|
| 45 | #include <linux/mm.h> | 
|---|
| 46 | #include <linux/dma-mapping.h> | 
|---|
| 47 |  | 
|---|
| 48 | #include "hub.h" | 
|---|
| 49 |  | 
|---|
| 50 | const char *usbcore_name = "usbcore"; | 
|---|
| 51 |  | 
|---|
| 52 | static bool nousb;	/* Disable USB when built into kernel image */ | 
|---|
| 53 |  | 
|---|
| 54 | module_param(nousb, bool, 0444); | 
|---|
| 55 |  | 
|---|
| 56 | /* | 
|---|
| 57 | * for external read access to <nousb> | 
|---|
| 58 | */ | 
|---|
| 59 | int usb_disabled(void) | 
|---|
| 60 | { | 
|---|
| 61 | return nousb; | 
|---|
| 62 | } | 
|---|
| 63 | EXPORT_SYMBOL_GPL(usb_disabled); | 
|---|
| 64 |  | 
|---|
| 65 | #ifdef	CONFIG_PM | 
|---|
| 66 | /* Default delay value, in seconds */ | 
|---|
| 67 | static int usb_autosuspend_delay = CONFIG_USB_AUTOSUSPEND_DELAY; | 
|---|
| 68 | module_param_named(autosuspend, usb_autosuspend_delay, int, 0644); | 
|---|
| 69 | MODULE_PARM_DESC(autosuspend, "default autosuspend delay"); | 
|---|
| 70 |  | 
|---|
| 71 | #else | 
|---|
| 72 | #define usb_autosuspend_delay		0 | 
|---|
| 73 | #endif | 
|---|
| 74 |  | 
|---|
| 75 | static bool match_endpoint(struct usb_endpoint_descriptor *epd, | 
|---|
| 76 | struct usb_endpoint_descriptor **bulk_in, | 
|---|
| 77 | struct usb_endpoint_descriptor **bulk_out, | 
|---|
| 78 | struct usb_endpoint_descriptor **int_in, | 
|---|
| 79 | struct usb_endpoint_descriptor **int_out) | 
|---|
| 80 | { | 
|---|
| 81 | switch (usb_endpoint_type(epd)) { | 
|---|
| 82 | case USB_ENDPOINT_XFER_BULK: | 
|---|
| 83 | if (usb_endpoint_dir_in(epd)) { | 
|---|
| 84 | if (bulk_in && !*bulk_in) { | 
|---|
| 85 | *bulk_in = epd; | 
|---|
| 86 | break; | 
|---|
| 87 | } | 
|---|
| 88 | } else { | 
|---|
| 89 | if (bulk_out && !*bulk_out) { | 
|---|
| 90 | *bulk_out = epd; | 
|---|
| 91 | break; | 
|---|
| 92 | } | 
|---|
| 93 | } | 
|---|
| 94 |  | 
|---|
| 95 | return false; | 
|---|
| 96 | case USB_ENDPOINT_XFER_INT: | 
|---|
| 97 | if (usb_endpoint_dir_in(epd)) { | 
|---|
| 98 | if (int_in && !*int_in) { | 
|---|
| 99 | *int_in = epd; | 
|---|
| 100 | break; | 
|---|
| 101 | } | 
|---|
| 102 | } else { | 
|---|
| 103 | if (int_out && !*int_out) { | 
|---|
| 104 | *int_out = epd; | 
|---|
| 105 | break; | 
|---|
| 106 | } | 
|---|
| 107 | } | 
|---|
| 108 |  | 
|---|
| 109 | return false; | 
|---|
| 110 | default: | 
|---|
| 111 | return false; | 
|---|
| 112 | } | 
|---|
| 113 |  | 
|---|
| 114 | return (!bulk_in || *bulk_in) && (!bulk_out || *bulk_out) && | 
|---|
| 115 | (!int_in || *int_in) && (!int_out || *int_out); | 
|---|
| 116 | } | 
|---|
| 117 |  | 
|---|
| 118 | /** | 
|---|
| 119 | * usb_find_common_endpoints() -- look up common endpoint descriptors | 
|---|
| 120 | * @alt:	alternate setting to search | 
|---|
| 121 | * @bulk_in:	pointer to descriptor pointer, or NULL | 
|---|
| 122 | * @bulk_out:	pointer to descriptor pointer, or NULL | 
|---|
| 123 | * @int_in:	pointer to descriptor pointer, or NULL | 
|---|
| 124 | * @int_out:	pointer to descriptor pointer, or NULL | 
|---|
| 125 | * | 
|---|
| 126 | * Search the alternate setting's endpoint descriptors for the first bulk-in, | 
|---|
| 127 | * bulk-out, interrupt-in and interrupt-out endpoints and return them in the | 
|---|
| 128 | * provided pointers (unless they are NULL). | 
|---|
| 129 | * | 
|---|
| 130 | * If a requested endpoint is not found, the corresponding pointer is set to | 
|---|
| 131 | * NULL. | 
|---|
| 132 | * | 
|---|
| 133 | * Return: Zero if all requested descriptors were found, or -ENXIO otherwise. | 
|---|
| 134 | */ | 
|---|
| 135 | int usb_find_common_endpoints(struct usb_host_interface *alt, | 
|---|
| 136 | struct usb_endpoint_descriptor **bulk_in, | 
|---|
| 137 | struct usb_endpoint_descriptor **bulk_out, | 
|---|
| 138 | struct usb_endpoint_descriptor **int_in, | 
|---|
| 139 | struct usb_endpoint_descriptor **int_out) | 
|---|
| 140 | { | 
|---|
| 141 | struct usb_endpoint_descriptor *epd; | 
|---|
| 142 | int i; | 
|---|
| 143 |  | 
|---|
| 144 | if (bulk_in) | 
|---|
| 145 | *bulk_in = NULL; | 
|---|
| 146 | if (bulk_out) | 
|---|
| 147 | *bulk_out = NULL; | 
|---|
| 148 | if (int_in) | 
|---|
| 149 | *int_in = NULL; | 
|---|
| 150 | if (int_out) | 
|---|
| 151 | *int_out = NULL; | 
|---|
| 152 |  | 
|---|
| 153 | for (i = 0; i < alt->desc.bNumEndpoints; ++i) { | 
|---|
| 154 | epd = &alt->endpoint[i].desc; | 
|---|
| 155 |  | 
|---|
| 156 | if (match_endpoint(epd, bulk_in, bulk_out, int_in, int_out)) | 
|---|
| 157 | return 0; | 
|---|
| 158 | } | 
|---|
| 159 |  | 
|---|
| 160 | return -ENXIO; | 
|---|
| 161 | } | 
|---|
| 162 | EXPORT_SYMBOL_GPL(usb_find_common_endpoints); | 
|---|
| 163 |  | 
|---|
| 164 | /** | 
|---|
| 165 | * usb_find_common_endpoints_reverse() -- look up common endpoint descriptors | 
|---|
| 166 | * @alt:	alternate setting to search | 
|---|
| 167 | * @bulk_in:	pointer to descriptor pointer, or NULL | 
|---|
| 168 | * @bulk_out:	pointer to descriptor pointer, or NULL | 
|---|
| 169 | * @int_in:	pointer to descriptor pointer, or NULL | 
|---|
| 170 | * @int_out:	pointer to descriptor pointer, or NULL | 
|---|
| 171 | * | 
|---|
| 172 | * Search the alternate setting's endpoint descriptors for the last bulk-in, | 
|---|
| 173 | * bulk-out, interrupt-in and interrupt-out endpoints and return them in the | 
|---|
| 174 | * provided pointers (unless they are NULL). | 
|---|
| 175 | * | 
|---|
| 176 | * If a requested endpoint is not found, the corresponding pointer is set to | 
|---|
| 177 | * NULL. | 
|---|
| 178 | * | 
|---|
| 179 | * Return: Zero if all requested descriptors were found, or -ENXIO otherwise. | 
|---|
| 180 | */ | 
|---|
| 181 | int usb_find_common_endpoints_reverse(struct usb_host_interface *alt, | 
|---|
| 182 | struct usb_endpoint_descriptor **bulk_in, | 
|---|
| 183 | struct usb_endpoint_descriptor **bulk_out, | 
|---|
| 184 | struct usb_endpoint_descriptor **int_in, | 
|---|
| 185 | struct usb_endpoint_descriptor **int_out) | 
|---|
| 186 | { | 
|---|
| 187 | struct usb_endpoint_descriptor *epd; | 
|---|
| 188 | int i; | 
|---|
| 189 |  | 
|---|
| 190 | if (bulk_in) | 
|---|
| 191 | *bulk_in = NULL; | 
|---|
| 192 | if (bulk_out) | 
|---|
| 193 | *bulk_out = NULL; | 
|---|
| 194 | if (int_in) | 
|---|
| 195 | *int_in = NULL; | 
|---|
| 196 | if (int_out) | 
|---|
| 197 | *int_out = NULL; | 
|---|
| 198 |  | 
|---|
| 199 | for (i = alt->desc.bNumEndpoints - 1; i >= 0; --i) { | 
|---|
| 200 | epd = &alt->endpoint[i].desc; | 
|---|
| 201 |  | 
|---|
| 202 | if (match_endpoint(epd, bulk_in, bulk_out, int_in, int_out)) | 
|---|
| 203 | return 0; | 
|---|
| 204 | } | 
|---|
| 205 |  | 
|---|
| 206 | return -ENXIO; | 
|---|
| 207 | } | 
|---|
| 208 | EXPORT_SYMBOL_GPL(usb_find_common_endpoints_reverse); | 
|---|
| 209 |  | 
|---|
| 210 | /** | 
|---|
| 211 | * usb_find_endpoint() - Given an endpoint address, search for the endpoint's | 
|---|
| 212 | * usb_host_endpoint structure in an interface's current altsetting. | 
|---|
| 213 | * @intf: the interface whose current altsetting should be searched | 
|---|
| 214 | * @ep_addr: the endpoint address (number and direction) to find | 
|---|
| 215 | * | 
|---|
| 216 | * Search the altsetting's list of endpoints for one with the specified address. | 
|---|
| 217 | * | 
|---|
| 218 | * Return: Pointer to the usb_host_endpoint if found, %NULL otherwise. | 
|---|
| 219 | */ | 
|---|
| 220 | static const struct usb_host_endpoint *usb_find_endpoint( | 
|---|
| 221 | const struct usb_interface *intf, unsigned int ep_addr) | 
|---|
| 222 | { | 
|---|
| 223 | int n; | 
|---|
| 224 | const struct usb_host_endpoint *ep; | 
|---|
| 225 |  | 
|---|
| 226 | n = intf->cur_altsetting->desc.bNumEndpoints; | 
|---|
| 227 | ep = intf->cur_altsetting->endpoint; | 
|---|
| 228 | for (; n > 0; (--n, ++ep)) { | 
|---|
| 229 | if (ep->desc.bEndpointAddress == ep_addr) | 
|---|
| 230 | return ep; | 
|---|
| 231 | } | 
|---|
| 232 | return NULL; | 
|---|
| 233 | } | 
|---|
| 234 |  | 
|---|
| 235 | /** | 
|---|
| 236 | * usb_check_bulk_endpoints - Check whether an interface's current altsetting | 
|---|
| 237 | * contains a set of bulk endpoints with the given addresses. | 
|---|
| 238 | * @intf: the interface whose current altsetting should be searched | 
|---|
| 239 | * @ep_addrs: 0-terminated array of the endpoint addresses (number and | 
|---|
| 240 | * direction) to look for | 
|---|
| 241 | * | 
|---|
| 242 | * Search for endpoints with the specified addresses and check their types. | 
|---|
| 243 | * | 
|---|
| 244 | * Return: %true if all the endpoints are found and are bulk, %false otherwise. | 
|---|
| 245 | */ | 
|---|
| 246 | bool usb_check_bulk_endpoints( | 
|---|
| 247 | const struct usb_interface *intf, const u8 *ep_addrs) | 
|---|
| 248 | { | 
|---|
| 249 | const struct usb_host_endpoint *ep; | 
|---|
| 250 |  | 
|---|
| 251 | for (; *ep_addrs; ++ep_addrs) { | 
|---|
| 252 | ep = usb_find_endpoint(intf, ep_addr: *ep_addrs); | 
|---|
| 253 | if (!ep || !usb_endpoint_xfer_bulk(epd: &ep->desc)) | 
|---|
| 254 | return false; | 
|---|
| 255 | } | 
|---|
| 256 | return true; | 
|---|
| 257 | } | 
|---|
| 258 | EXPORT_SYMBOL_GPL(usb_check_bulk_endpoints); | 
|---|
| 259 |  | 
|---|
| 260 | /** | 
|---|
| 261 | * usb_check_int_endpoints - Check whether an interface's current altsetting | 
|---|
| 262 | * contains a set of interrupt endpoints with the given addresses. | 
|---|
| 263 | * @intf: the interface whose current altsetting should be searched | 
|---|
| 264 | * @ep_addrs: 0-terminated array of the endpoint addresses (number and | 
|---|
| 265 | * direction) to look for | 
|---|
| 266 | * | 
|---|
| 267 | * Search for endpoints with the specified addresses and check their types. | 
|---|
| 268 | * | 
|---|
| 269 | * Return: %true if all the endpoints are found and are interrupt, | 
|---|
| 270 | * %false otherwise. | 
|---|
| 271 | */ | 
|---|
| 272 | bool usb_check_int_endpoints( | 
|---|
| 273 | const struct usb_interface *intf, const u8 *ep_addrs) | 
|---|
| 274 | { | 
|---|
| 275 | const struct usb_host_endpoint *ep; | 
|---|
| 276 |  | 
|---|
| 277 | for (; *ep_addrs; ++ep_addrs) { | 
|---|
| 278 | ep = usb_find_endpoint(intf, ep_addr: *ep_addrs); | 
|---|
| 279 | if (!ep || !usb_endpoint_xfer_int(epd: &ep->desc)) | 
|---|
| 280 | return false; | 
|---|
| 281 | } | 
|---|
| 282 | return true; | 
|---|
| 283 | } | 
|---|
| 284 | EXPORT_SYMBOL_GPL(usb_check_int_endpoints); | 
|---|
| 285 |  | 
|---|
| 286 | /** | 
|---|
| 287 | * usb_find_alt_setting() - Given a configuration, find the alternate setting | 
|---|
| 288 | * for the given interface. | 
|---|
| 289 | * @config: the configuration to search (not necessarily the current config). | 
|---|
| 290 | * @iface_num: interface number to search in | 
|---|
| 291 | * @alt_num: alternate interface setting number to search for. | 
|---|
| 292 | * | 
|---|
| 293 | * Search the configuration's interface cache for the given alt setting. | 
|---|
| 294 | * | 
|---|
| 295 | * Return: The alternate setting, if found. %NULL otherwise. | 
|---|
| 296 | */ | 
|---|
| 297 | struct usb_host_interface *usb_find_alt_setting( | 
|---|
| 298 | struct usb_host_config *config, | 
|---|
| 299 | unsigned int iface_num, | 
|---|
| 300 | unsigned int alt_num) | 
|---|
| 301 | { | 
|---|
| 302 | struct usb_interface_cache *intf_cache = NULL; | 
|---|
| 303 | int i; | 
|---|
| 304 |  | 
|---|
| 305 | if (!config) | 
|---|
| 306 | return NULL; | 
|---|
| 307 | for (i = 0; i < config->desc.bNumInterfaces; i++) { | 
|---|
| 308 | if (config->intf_cache[i]->altsetting[0].desc.bInterfaceNumber | 
|---|
| 309 | == iface_num) { | 
|---|
| 310 | intf_cache = config->intf_cache[i]; | 
|---|
| 311 | break; | 
|---|
| 312 | } | 
|---|
| 313 | } | 
|---|
| 314 | if (!intf_cache) | 
|---|
| 315 | return NULL; | 
|---|
| 316 | for (i = 0; i < intf_cache->num_altsetting; i++) | 
|---|
| 317 | if (intf_cache->altsetting[i].desc.bAlternateSetting == alt_num) | 
|---|
| 318 | return &intf_cache->altsetting[i]; | 
|---|
| 319 |  | 
|---|
| 320 | printk(KERN_DEBUG "Did not find alt setting %u for intf %u, " | 
|---|
| 321 | "config %u\n", alt_num, iface_num, | 
|---|
| 322 | config->desc.bConfigurationValue); | 
|---|
| 323 | return NULL; | 
|---|
| 324 | } | 
|---|
| 325 | EXPORT_SYMBOL_GPL(usb_find_alt_setting); | 
|---|
| 326 |  | 
|---|
| 327 | /** | 
|---|
| 328 | * usb_ifnum_to_if - get the interface object with a given interface number | 
|---|
| 329 | * @dev: the device whose current configuration is considered | 
|---|
| 330 | * @ifnum: the desired interface | 
|---|
| 331 | * | 
|---|
| 332 | * This walks the device descriptor for the currently active configuration | 
|---|
| 333 | * to find the interface object with the particular interface number. | 
|---|
| 334 | * | 
|---|
| 335 | * Note that configuration descriptors are not required to assign interface | 
|---|
| 336 | * numbers sequentially, so that it would be incorrect to assume that | 
|---|
| 337 | * the first interface in that descriptor corresponds to interface zero. | 
|---|
| 338 | * This routine helps device drivers avoid such mistakes. | 
|---|
| 339 | * However, you should make sure that you do the right thing with any | 
|---|
| 340 | * alternate settings available for this interfaces. | 
|---|
| 341 | * | 
|---|
| 342 | * Don't call this function unless you are bound to one of the interfaces | 
|---|
| 343 | * on this device or you have locked the device! | 
|---|
| 344 | * | 
|---|
| 345 | * Return: A pointer to the interface that has @ifnum as interface number, | 
|---|
| 346 | * if found. %NULL otherwise. | 
|---|
| 347 | */ | 
|---|
| 348 | struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev, | 
|---|
| 349 | unsigned ifnum) | 
|---|
| 350 | { | 
|---|
| 351 | struct usb_host_config *config = dev->actconfig; | 
|---|
| 352 | int i; | 
|---|
| 353 |  | 
|---|
| 354 | if (!config) | 
|---|
| 355 | return NULL; | 
|---|
| 356 | for (i = 0; i < config->desc.bNumInterfaces; i++) | 
|---|
| 357 | if (config->interface[i]->altsetting[0] | 
|---|
| 358 | .desc.bInterfaceNumber == ifnum) | 
|---|
| 359 | return config->interface[i]; | 
|---|
| 360 |  | 
|---|
| 361 | return NULL; | 
|---|
| 362 | } | 
|---|
| 363 | EXPORT_SYMBOL_GPL(usb_ifnum_to_if); | 
|---|
| 364 |  | 
|---|
| 365 | /** | 
|---|
| 366 | * usb_altnum_to_altsetting - get the altsetting structure with a given alternate setting number. | 
|---|
| 367 | * @intf: the interface containing the altsetting in question | 
|---|
| 368 | * @altnum: the desired alternate setting number | 
|---|
| 369 | * | 
|---|
| 370 | * This searches the altsetting array of the specified interface for | 
|---|
| 371 | * an entry with the correct bAlternateSetting value. | 
|---|
| 372 | * | 
|---|
| 373 | * Note that altsettings need not be stored sequentially by number, so | 
|---|
| 374 | * it would be incorrect to assume that the first altsetting entry in | 
|---|
| 375 | * the array corresponds to altsetting zero.  This routine helps device | 
|---|
| 376 | * drivers avoid such mistakes. | 
|---|
| 377 | * | 
|---|
| 378 | * Don't call this function unless you are bound to the intf interface | 
|---|
| 379 | * or you have locked the device! | 
|---|
| 380 | * | 
|---|
| 381 | * Return: A pointer to the entry of the altsetting array of @intf that | 
|---|
| 382 | * has @altnum as the alternate setting number. %NULL if not found. | 
|---|
| 383 | */ | 
|---|
| 384 | struct usb_host_interface *usb_altnum_to_altsetting( | 
|---|
| 385 | const struct usb_interface *intf, | 
|---|
| 386 | unsigned int altnum) | 
|---|
| 387 | { | 
|---|
| 388 | int i; | 
|---|
| 389 |  | 
|---|
| 390 | for (i = 0; i < intf->num_altsetting; i++) { | 
|---|
| 391 | if (intf->altsetting[i].desc.bAlternateSetting == altnum) | 
|---|
| 392 | return &intf->altsetting[i]; | 
|---|
| 393 | } | 
|---|
| 394 | return NULL; | 
|---|
| 395 | } | 
|---|
| 396 | EXPORT_SYMBOL_GPL(usb_altnum_to_altsetting); | 
|---|
| 397 |  | 
|---|
| 398 | struct find_interface_arg { | 
|---|
| 399 | int minor; | 
|---|
| 400 | struct device_driver *drv; | 
|---|
| 401 | }; | 
|---|
| 402 |  | 
|---|
| 403 | static int __find_interface(struct device *dev, const void *data) | 
|---|
| 404 | { | 
|---|
| 405 | const struct find_interface_arg *arg = data; | 
|---|
| 406 | struct usb_interface *intf; | 
|---|
| 407 |  | 
|---|
| 408 | if (!is_usb_interface(dev)) | 
|---|
| 409 | return 0; | 
|---|
| 410 |  | 
|---|
| 411 | if (dev->driver != arg->drv) | 
|---|
| 412 | return 0; | 
|---|
| 413 | intf = to_usb_interface(dev); | 
|---|
| 414 | return intf->minor == arg->minor; | 
|---|
| 415 | } | 
|---|
| 416 |  | 
|---|
| 417 | /** | 
|---|
| 418 | * usb_find_interface - find usb_interface pointer for driver and device | 
|---|
| 419 | * @drv: the driver whose current configuration is considered | 
|---|
| 420 | * @minor: the minor number of the desired device | 
|---|
| 421 | * | 
|---|
| 422 | * This walks the bus device list and returns a pointer to the interface | 
|---|
| 423 | * with the matching minor and driver.  Note, this only works for devices | 
|---|
| 424 | * that share the USB major number. | 
|---|
| 425 | * | 
|---|
| 426 | * Return: A pointer to the interface with the matching major and @minor. | 
|---|
| 427 | */ | 
|---|
| 428 | struct usb_interface *usb_find_interface(struct usb_driver *drv, int minor) | 
|---|
| 429 | { | 
|---|
| 430 | struct find_interface_arg argb; | 
|---|
| 431 | struct device *dev; | 
|---|
| 432 |  | 
|---|
| 433 | argb.minor = minor; | 
|---|
| 434 | argb.drv = &drv->driver; | 
|---|
| 435 |  | 
|---|
| 436 | dev = bus_find_device(bus: &usb_bus_type, NULL, data: &argb, match: __find_interface); | 
|---|
| 437 |  | 
|---|
| 438 | /* Drop reference count from bus_find_device */ | 
|---|
| 439 | put_device(dev); | 
|---|
| 440 |  | 
|---|
| 441 | return dev ? to_usb_interface(dev) : NULL; | 
|---|
| 442 | } | 
|---|
| 443 | EXPORT_SYMBOL_GPL(usb_find_interface); | 
|---|
| 444 |  | 
|---|
| 445 | struct each_dev_arg { | 
|---|
| 446 | void *data; | 
|---|
| 447 | int (*fn)(struct usb_device *, void *); | 
|---|
| 448 | }; | 
|---|
| 449 |  | 
|---|
| 450 | static int __each_dev(struct device *dev, void *data) | 
|---|
| 451 | { | 
|---|
| 452 | struct each_dev_arg *arg = (struct each_dev_arg *)data; | 
|---|
| 453 |  | 
|---|
| 454 | /* There are struct usb_interface on the same bus, filter them out */ | 
|---|
| 455 | if (!is_usb_device(dev)) | 
|---|
| 456 | return 0; | 
|---|
| 457 |  | 
|---|
| 458 | return arg->fn(to_usb_device(dev), arg->data); | 
|---|
| 459 | } | 
|---|
| 460 |  | 
|---|
| 461 | /** | 
|---|
| 462 | * usb_for_each_dev - iterate over all USB devices in the system | 
|---|
| 463 | * @data: data pointer that will be handed to the callback function | 
|---|
| 464 | * @fn: callback function to be called for each USB device | 
|---|
| 465 | * | 
|---|
| 466 | * Iterate over all USB devices and call @fn for each, passing it @data. If it | 
|---|
| 467 | * returns anything other than 0, we break the iteration prematurely and return | 
|---|
| 468 | * that value. | 
|---|
| 469 | */ | 
|---|
| 470 | int usb_for_each_dev(void *data, int (*fn)(struct usb_device *, void *)) | 
|---|
| 471 | { | 
|---|
| 472 | struct each_dev_arg arg = {data, fn}; | 
|---|
| 473 |  | 
|---|
| 474 | return bus_for_each_dev(bus: &usb_bus_type, NULL, data: &arg, fn: __each_dev); | 
|---|
| 475 | } | 
|---|
| 476 | EXPORT_SYMBOL_GPL(usb_for_each_dev); | 
|---|
| 477 |  | 
|---|
| 478 | /** | 
|---|
| 479 | * usb_release_dev - free a usb device structure when all users of it are finished. | 
|---|
| 480 | * @dev: device that's been disconnected | 
|---|
| 481 | * | 
|---|
| 482 | * Will be called only by the device core when all users of this usb device are | 
|---|
| 483 | * done. | 
|---|
| 484 | */ | 
|---|
| 485 | static void usb_release_dev(struct device *dev) | 
|---|
| 486 | { | 
|---|
| 487 | struct usb_device *udev; | 
|---|
| 488 | struct usb_hcd *hcd; | 
|---|
| 489 |  | 
|---|
| 490 | udev = to_usb_device(dev); | 
|---|
| 491 | hcd = bus_to_hcd(bus: udev->bus); | 
|---|
| 492 |  | 
|---|
| 493 | usb_destroy_configuration(dev: udev); | 
|---|
| 494 | usb_release_bos_descriptor(dev: udev); | 
|---|
| 495 | of_node_put(node: dev->of_node); | 
|---|
| 496 | usb_put_hcd(hcd); | 
|---|
| 497 | kfree(objp: udev->product); | 
|---|
| 498 | kfree(objp: udev->manufacturer); | 
|---|
| 499 | kfree(objp: udev->serial); | 
|---|
| 500 | kfree(objp: udev); | 
|---|
| 501 | } | 
|---|
| 502 |  | 
|---|
| 503 | static int usb_dev_uevent(const struct device *dev, struct kobj_uevent_env *env) | 
|---|
| 504 | { | 
|---|
| 505 | const struct usb_device *usb_dev; | 
|---|
| 506 |  | 
|---|
| 507 | usb_dev = to_usb_device(dev); | 
|---|
| 508 |  | 
|---|
| 509 | if (add_uevent_var(env, format: "BUSNUM=%03d", usb_dev->bus->busnum)) | 
|---|
| 510 | return -ENOMEM; | 
|---|
| 511 |  | 
|---|
| 512 | if (add_uevent_var(env, format: "DEVNUM=%03d", usb_dev->devnum)) | 
|---|
| 513 | return -ENOMEM; | 
|---|
| 514 |  | 
|---|
| 515 | return 0; | 
|---|
| 516 | } | 
|---|
| 517 |  | 
|---|
| 518 | #ifdef	CONFIG_PM | 
|---|
| 519 |  | 
|---|
| 520 | /* USB device Power-Management thunks. | 
|---|
| 521 | * There's no need to distinguish here between quiescing a USB device | 
|---|
| 522 | * and powering it down; the generic_suspend() routine takes care of | 
|---|
| 523 | * it by skipping the usb_port_suspend() call for a quiesce.  And for | 
|---|
| 524 | * USB interfaces there's no difference at all. | 
|---|
| 525 | */ | 
|---|
| 526 |  | 
|---|
| 527 | static int usb_dev_prepare(struct device *dev) | 
|---|
| 528 | { | 
|---|
| 529 | return 0;		/* Implement eventually? */ | 
|---|
| 530 | } | 
|---|
| 531 |  | 
|---|
| 532 | static void usb_dev_complete(struct device *dev) | 
|---|
| 533 | { | 
|---|
| 534 | /* Currently used only for rebinding interfaces */ | 
|---|
| 535 | usb_resume_complete(dev); | 
|---|
| 536 | } | 
|---|
| 537 |  | 
|---|
| 538 | static int usb_dev_suspend(struct device *dev) | 
|---|
| 539 | { | 
|---|
| 540 | return usb_suspend(dev, PMSG_SUSPEND); | 
|---|
| 541 | } | 
|---|
| 542 |  | 
|---|
| 543 | static int usb_dev_resume(struct device *dev) | 
|---|
| 544 | { | 
|---|
| 545 | return usb_resume(dev, PMSG_RESUME); | 
|---|
| 546 | } | 
|---|
| 547 |  | 
|---|
| 548 | static int usb_dev_freeze(struct device *dev) | 
|---|
| 549 | { | 
|---|
| 550 | return usb_suspend(dev, PMSG_FREEZE); | 
|---|
| 551 | } | 
|---|
| 552 |  | 
|---|
| 553 | static int usb_dev_thaw(struct device *dev) | 
|---|
| 554 | { | 
|---|
| 555 | return usb_resume(dev, PMSG_THAW); | 
|---|
| 556 | } | 
|---|
| 557 |  | 
|---|
| 558 | static int usb_dev_poweroff(struct device *dev) | 
|---|
| 559 | { | 
|---|
| 560 | return usb_suspend(dev, PMSG_HIBERNATE); | 
|---|
| 561 | } | 
|---|
| 562 |  | 
|---|
| 563 | static int usb_dev_restore(struct device *dev) | 
|---|
| 564 | { | 
|---|
| 565 | return usb_resume(dev, PMSG_RESTORE); | 
|---|
| 566 | } | 
|---|
| 567 |  | 
|---|
| 568 | static const struct dev_pm_ops usb_device_pm_ops = { | 
|---|
| 569 | .prepare =	usb_dev_prepare, | 
|---|
| 570 | .complete =	usb_dev_complete, | 
|---|
| 571 | .suspend =	usb_dev_suspend, | 
|---|
| 572 | .resume =	usb_dev_resume, | 
|---|
| 573 | .freeze =	usb_dev_freeze, | 
|---|
| 574 | .thaw =		usb_dev_thaw, | 
|---|
| 575 | .poweroff =	usb_dev_poweroff, | 
|---|
| 576 | .restore =	usb_dev_restore, | 
|---|
| 577 | .runtime_suspend =	usb_runtime_suspend, | 
|---|
| 578 | .runtime_resume =	usb_runtime_resume, | 
|---|
| 579 | .runtime_idle =		usb_runtime_idle, | 
|---|
| 580 | }; | 
|---|
| 581 |  | 
|---|
| 582 | #endif	/* CONFIG_PM */ | 
|---|
| 583 |  | 
|---|
| 584 |  | 
|---|
| 585 | static char *usb_devnode(const struct device *dev, | 
|---|
| 586 | umode_t *mode, kuid_t *uid, kgid_t *gid) | 
|---|
| 587 | { | 
|---|
| 588 | const struct usb_device *usb_dev; | 
|---|
| 589 |  | 
|---|
| 590 | usb_dev = to_usb_device(dev); | 
|---|
| 591 | return kasprintf(GFP_KERNEL, fmt: "bus/usb/%03d/%03d", | 
|---|
| 592 | usb_dev->bus->busnum, usb_dev->devnum); | 
|---|
| 593 | } | 
|---|
| 594 |  | 
|---|
| 595 | const struct device_type usb_device_type = { | 
|---|
| 596 | .name = "usb_device", | 
|---|
| 597 | .release =	usb_release_dev, | 
|---|
| 598 | .uevent =	usb_dev_uevent, | 
|---|
| 599 | .devnode = 	usb_devnode, | 
|---|
| 600 | #ifdef CONFIG_PM | 
|---|
| 601 | .pm =		&usb_device_pm_ops, | 
|---|
| 602 | #endif | 
|---|
| 603 | }; | 
|---|
| 604 |  | 
|---|
| 605 | static bool usb_dev_authorized(struct usb_device *dev, struct usb_hcd *hcd) | 
|---|
| 606 | { | 
|---|
| 607 | struct usb_hub *hub; | 
|---|
| 608 |  | 
|---|
| 609 | if (!dev->parent) | 
|---|
| 610 | return true; /* Root hub always ok [and always wired] */ | 
|---|
| 611 |  | 
|---|
| 612 | switch (hcd->dev_policy) { | 
|---|
| 613 | case USB_DEVICE_AUTHORIZE_NONE: | 
|---|
| 614 | default: | 
|---|
| 615 | return false; | 
|---|
| 616 |  | 
|---|
| 617 | case USB_DEVICE_AUTHORIZE_ALL: | 
|---|
| 618 | return true; | 
|---|
| 619 |  | 
|---|
| 620 | case USB_DEVICE_AUTHORIZE_INTERNAL: | 
|---|
| 621 | hub = usb_hub_to_struct_hub(hdev: dev->parent); | 
|---|
| 622 | return hub->ports[dev->portnum - 1]->connect_type == | 
|---|
| 623 | USB_PORT_CONNECT_TYPE_HARD_WIRED; | 
|---|
| 624 | } | 
|---|
| 625 | } | 
|---|
| 626 |  | 
|---|
| 627 | /** | 
|---|
| 628 | * usb_alloc_dev - usb device constructor (usbcore-internal) | 
|---|
| 629 | * @parent: hub to which device is connected; null to allocate a root hub | 
|---|
| 630 | * @bus: bus used to access the device | 
|---|
| 631 | * @port1: one-based index of port; ignored for root hubs | 
|---|
| 632 | * | 
|---|
| 633 | * Context: task context, might sleep. | 
|---|
| 634 | * | 
|---|
| 635 | * Only hub drivers (including virtual root hub drivers for host | 
|---|
| 636 | * controllers) should ever call this. | 
|---|
| 637 | * | 
|---|
| 638 | * This call may not be used in a non-sleeping context. | 
|---|
| 639 | * | 
|---|
| 640 | * Return: On success, a pointer to the allocated usb device. %NULL on | 
|---|
| 641 | * failure. | 
|---|
| 642 | */ | 
|---|
| 643 | struct usb_device *usb_alloc_dev(struct usb_device *parent, | 
|---|
| 644 | struct usb_bus *bus, unsigned port1) | 
|---|
| 645 | { | 
|---|
| 646 | struct usb_device *dev; | 
|---|
| 647 | struct usb_hcd *usb_hcd = bus_to_hcd(bus); | 
|---|
| 648 | unsigned raw_port = port1; | 
|---|
| 649 |  | 
|---|
| 650 | dev = kzalloc(sizeof(*dev), GFP_KERNEL); | 
|---|
| 651 | if (!dev) | 
|---|
| 652 | return NULL; | 
|---|
| 653 |  | 
|---|
| 654 | if (!usb_get_hcd(hcd: usb_hcd)) { | 
|---|
| 655 | kfree(objp: dev); | 
|---|
| 656 | return NULL; | 
|---|
| 657 | } | 
|---|
| 658 | /* Root hubs aren't true devices, so don't allocate HCD resources */ | 
|---|
| 659 | if (usb_hcd->driver->alloc_dev && parent && | 
|---|
| 660 | !usb_hcd->driver->alloc_dev(usb_hcd, dev)) { | 
|---|
| 661 | usb_put_hcd(hcd: bus_to_hcd(bus)); | 
|---|
| 662 | kfree(objp: dev); | 
|---|
| 663 | return NULL; | 
|---|
| 664 | } | 
|---|
| 665 |  | 
|---|
| 666 | device_initialize(dev: &dev->dev); | 
|---|
| 667 | dev->dev.bus = &usb_bus_type; | 
|---|
| 668 | dev->dev.type = &usb_device_type; | 
|---|
| 669 | dev->dev.groups = usb_device_groups; | 
|---|
| 670 | set_dev_node(dev: &dev->dev, node: dev_to_node(dev: bus->sysdev)); | 
|---|
| 671 | dev->state = USB_STATE_ATTACHED; | 
|---|
| 672 | dev->lpm_disable_count = 1; | 
|---|
| 673 | dev->offload_usage = 0; | 
|---|
| 674 | atomic_set(v: &dev->urbnum, i: 0); | 
|---|
| 675 |  | 
|---|
| 676 | INIT_LIST_HEAD(list: &dev->ep0.urb_list); | 
|---|
| 677 | dev->ep0.desc.bLength = USB_DT_ENDPOINT_SIZE; | 
|---|
| 678 | dev->ep0.desc.bDescriptorType = USB_DT_ENDPOINT; | 
|---|
| 679 | /* ep0 maxpacket comes later, from device descriptor */ | 
|---|
| 680 | usb_enable_endpoint(dev, ep: &dev->ep0, reset_toggle: false); | 
|---|
| 681 | dev->can_submit = 1; | 
|---|
| 682 |  | 
|---|
| 683 | /* Save readable and stable topology id, distinguishing devices | 
|---|
| 684 | * by location for diagnostics, tools, driver model, etc.  The | 
|---|
| 685 | * string is a path along hub ports, from the root.  Each device's | 
|---|
| 686 | * dev->devpath will be stable until USB is re-cabled, and hubs | 
|---|
| 687 | * are often labeled with these port numbers.  The name isn't | 
|---|
| 688 | * as stable:  bus->busnum changes easily from modprobe order, | 
|---|
| 689 | * cardbus or pci hotplugging, and so on. | 
|---|
| 690 | */ | 
|---|
| 691 | if (unlikely(!parent)) { | 
|---|
| 692 | dev->devpath[0] = '0'; | 
|---|
| 693 | dev->route = 0; | 
|---|
| 694 |  | 
|---|
| 695 | dev->dev.parent = bus->controller; | 
|---|
| 696 | device_set_of_node_from_dev(dev: &dev->dev, dev2: bus->sysdev); | 
|---|
| 697 | dev_set_name(dev: &dev->dev, name: "usb%d", bus->busnum); | 
|---|
| 698 | } else { | 
|---|
| 699 | int n; | 
|---|
| 700 |  | 
|---|
| 701 | /* match any labeling on the hubs; it's one-based */ | 
|---|
| 702 | if (parent->devpath[0] == '0') { | 
|---|
| 703 | n = snprintf(buf: dev->devpath, size: sizeof(dev->devpath), fmt: "%d", port1); | 
|---|
| 704 | /* Root ports are not counted in route string */ | 
|---|
| 705 | dev->route = 0; | 
|---|
| 706 | } else { | 
|---|
| 707 | n = snprintf(buf: dev->devpath, size: sizeof(dev->devpath), fmt: "%s.%d", | 
|---|
| 708 | parent->devpath, port1); | 
|---|
| 709 | /* Route string assumes hubs have less than 16 ports */ | 
|---|
| 710 | if (port1 < 15) | 
|---|
| 711 | dev->route = parent->route + | 
|---|
| 712 | (port1 << ((parent->level - 1)*4)); | 
|---|
| 713 | else | 
|---|
| 714 | dev->route = parent->route + | 
|---|
| 715 | (15 << ((parent->level - 1)*4)); | 
|---|
| 716 | } | 
|---|
| 717 | if (n >= sizeof(dev->devpath)) { | 
|---|
| 718 | usb_put_hcd(hcd: bus_to_hcd(bus)); | 
|---|
| 719 | usb_put_dev(dev); | 
|---|
| 720 | return NULL; | 
|---|
| 721 | } | 
|---|
| 722 |  | 
|---|
| 723 | dev->dev.parent = &parent->dev; | 
|---|
| 724 | dev_set_name(dev: &dev->dev, name: "%d-%s", bus->busnum, dev->devpath); | 
|---|
| 725 |  | 
|---|
| 726 | if (!parent->parent) { | 
|---|
| 727 | /* device under root hub's port */ | 
|---|
| 728 | raw_port = usb_hcd_find_raw_port_number(hcd: usb_hcd, | 
|---|
| 729 | port1); | 
|---|
| 730 | } | 
|---|
| 731 | dev->dev.of_node = usb_of_get_device_node(hub: parent, port1: raw_port); | 
|---|
| 732 |  | 
|---|
| 733 | /* hub driver sets up TT records */ | 
|---|
| 734 | } | 
|---|
| 735 |  | 
|---|
| 736 | dev->portnum = port1; | 
|---|
| 737 | dev->bus = bus; | 
|---|
| 738 | dev->parent = parent; | 
|---|
| 739 | INIT_LIST_HEAD(list: &dev->filelist); | 
|---|
| 740 |  | 
|---|
| 741 | #ifdef	CONFIG_PM | 
|---|
| 742 | pm_runtime_set_autosuspend_delay(dev: &dev->dev, | 
|---|
| 743 | delay: usb_autosuspend_delay * 1000); | 
|---|
| 744 | dev->connect_time = jiffies; | 
|---|
| 745 | dev->active_duration = -jiffies; | 
|---|
| 746 | #endif | 
|---|
| 747 |  | 
|---|
| 748 | dev->authorized = usb_dev_authorized(dev, hcd: usb_hcd); | 
|---|
| 749 | return dev; | 
|---|
| 750 | } | 
|---|
| 751 | EXPORT_SYMBOL_GPL(usb_alloc_dev); | 
|---|
| 752 |  | 
|---|
| 753 | /** | 
|---|
| 754 | * usb_get_dev - increments the reference count of the usb device structure | 
|---|
| 755 | * @dev: the device being referenced | 
|---|
| 756 | * | 
|---|
| 757 | * Each live reference to a device should be refcounted. | 
|---|
| 758 | * | 
|---|
| 759 | * Drivers for USB interfaces should normally record such references in | 
|---|
| 760 | * their probe() methods, when they bind to an interface, and release | 
|---|
| 761 | * them by calling usb_put_dev(), in their disconnect() methods. | 
|---|
| 762 | * However, if a driver does not access the usb_device structure after | 
|---|
| 763 | * its disconnect() method returns then refcounting is not necessary, | 
|---|
| 764 | * because the USB core guarantees that a usb_device will not be | 
|---|
| 765 | * deallocated until after all of its interface drivers have been unbound. | 
|---|
| 766 | * | 
|---|
| 767 | * Return: A pointer to the device with the incremented reference counter. | 
|---|
| 768 | */ | 
|---|
| 769 | struct usb_device *usb_get_dev(struct usb_device *dev) | 
|---|
| 770 | { | 
|---|
| 771 | if (dev) | 
|---|
| 772 | get_device(dev: &dev->dev); | 
|---|
| 773 | return dev; | 
|---|
| 774 | } | 
|---|
| 775 | EXPORT_SYMBOL_GPL(usb_get_dev); | 
|---|
| 776 |  | 
|---|
| 777 | /** | 
|---|
| 778 | * usb_put_dev - release a use of the usb device structure | 
|---|
| 779 | * @dev: device that's been disconnected | 
|---|
| 780 | * | 
|---|
| 781 | * Must be called when a user of a device is finished with it.  When the last | 
|---|
| 782 | * user of the device calls this function, the memory of the device is freed. | 
|---|
| 783 | */ | 
|---|
| 784 | void usb_put_dev(struct usb_device *dev) | 
|---|
| 785 | { | 
|---|
| 786 | if (dev) | 
|---|
| 787 | put_device(dev: &dev->dev); | 
|---|
| 788 | } | 
|---|
| 789 | EXPORT_SYMBOL_GPL(usb_put_dev); | 
|---|
| 790 |  | 
|---|
| 791 | /** | 
|---|
| 792 | * usb_get_intf - increments the reference count of the usb interface structure | 
|---|
| 793 | * @intf: the interface being referenced | 
|---|
| 794 | * | 
|---|
| 795 | * Each live reference to a interface must be refcounted. | 
|---|
| 796 | * | 
|---|
| 797 | * Drivers for USB interfaces should normally record such references in | 
|---|
| 798 | * their probe() methods, when they bind to an interface, and release | 
|---|
| 799 | * them by calling usb_put_intf(), in their disconnect() methods. | 
|---|
| 800 | * However, if a driver does not access the usb_interface structure after | 
|---|
| 801 | * its disconnect() method returns then refcounting is not necessary, | 
|---|
| 802 | * because the USB core guarantees that a usb_interface will not be | 
|---|
| 803 | * deallocated until after its driver has been unbound. | 
|---|
| 804 | * | 
|---|
| 805 | * Return: A pointer to the interface with the incremented reference counter. | 
|---|
| 806 | */ | 
|---|
| 807 | struct usb_interface *usb_get_intf(struct usb_interface *intf) | 
|---|
| 808 | { | 
|---|
| 809 | if (intf) | 
|---|
| 810 | get_device(dev: &intf->dev); | 
|---|
| 811 | return intf; | 
|---|
| 812 | } | 
|---|
| 813 | EXPORT_SYMBOL_GPL(usb_get_intf); | 
|---|
| 814 |  | 
|---|
| 815 | /** | 
|---|
| 816 | * usb_put_intf - release a use of the usb interface structure | 
|---|
| 817 | * @intf: interface that's been decremented | 
|---|
| 818 | * | 
|---|
| 819 | * Must be called when a user of an interface is finished with it.  When the | 
|---|
| 820 | * last user of the interface calls this function, the memory of the interface | 
|---|
| 821 | * is freed. | 
|---|
| 822 | */ | 
|---|
| 823 | void usb_put_intf(struct usb_interface *intf) | 
|---|
| 824 | { | 
|---|
| 825 | if (intf) | 
|---|
| 826 | put_device(dev: &intf->dev); | 
|---|
| 827 | } | 
|---|
| 828 | EXPORT_SYMBOL_GPL(usb_put_intf); | 
|---|
| 829 |  | 
|---|
| 830 | /** | 
|---|
| 831 | * usb_intf_get_dma_device - acquire a reference on the usb interface's DMA endpoint | 
|---|
| 832 | * @intf: the usb interface | 
|---|
| 833 | * | 
|---|
| 834 | * While a USB device cannot perform DMA operations by itself, many USB | 
|---|
| 835 | * controllers can. A call to usb_intf_get_dma_device() returns the DMA endpoint | 
|---|
| 836 | * for the given USB interface, if any. The returned device structure must be | 
|---|
| 837 | * released with put_device(). | 
|---|
| 838 | * | 
|---|
| 839 | * See also usb_get_dma_device(). | 
|---|
| 840 | * | 
|---|
| 841 | * Returns: A reference to the usb interface's DMA endpoint; or NULL if none | 
|---|
| 842 | *          exists. | 
|---|
| 843 | */ | 
|---|
| 844 | struct device *usb_intf_get_dma_device(struct usb_interface *intf) | 
|---|
| 845 | { | 
|---|
| 846 | struct usb_device *udev = interface_to_usbdev(intf); | 
|---|
| 847 | struct device *dmadev; | 
|---|
| 848 |  | 
|---|
| 849 | if (!udev->bus) | 
|---|
| 850 | return NULL; | 
|---|
| 851 |  | 
|---|
| 852 | dmadev = get_device(dev: udev->bus->sysdev); | 
|---|
| 853 | if (!dmadev || !dmadev->dma_mask) { | 
|---|
| 854 | put_device(dev: dmadev); | 
|---|
| 855 | return NULL; | 
|---|
| 856 | } | 
|---|
| 857 |  | 
|---|
| 858 | return dmadev; | 
|---|
| 859 | } | 
|---|
| 860 | EXPORT_SYMBOL_GPL(usb_intf_get_dma_device); | 
|---|
| 861 |  | 
|---|
| 862 | /*			USB device locking | 
|---|
| 863 | * | 
|---|
| 864 | * USB devices and interfaces are locked using the semaphore in their | 
|---|
| 865 | * embedded struct device.  The hub driver guarantees that whenever a | 
|---|
| 866 | * device is connected or disconnected, drivers are called with the | 
|---|
| 867 | * USB device locked as well as their particular interface. | 
|---|
| 868 | * | 
|---|
| 869 | * Complications arise when several devices are to be locked at the same | 
|---|
| 870 | * time.  Only hub-aware drivers that are part of usbcore ever have to | 
|---|
| 871 | * do this; nobody else needs to worry about it.  The rule for locking | 
|---|
| 872 | * is simple: | 
|---|
| 873 | * | 
|---|
| 874 | *	When locking both a device and its parent, always lock the | 
|---|
| 875 | *	parent first. | 
|---|
| 876 | */ | 
|---|
| 877 |  | 
|---|
| 878 | /** | 
|---|
| 879 | * usb_lock_device_for_reset - cautiously acquire the lock for a usb device structure | 
|---|
| 880 | * @udev: device that's being locked | 
|---|
| 881 | * @iface: interface bound to the driver making the request (optional) | 
|---|
| 882 | * | 
|---|
| 883 | * Attempts to acquire the device lock, but fails if the device is | 
|---|
| 884 | * NOTATTACHED or SUSPENDED, or if iface is specified and the interface | 
|---|
| 885 | * is neither BINDING nor BOUND.  Rather than sleeping to wait for the | 
|---|
| 886 | * lock, the routine polls repeatedly.  This is to prevent deadlock with | 
|---|
| 887 | * disconnect; in some drivers (such as usb-storage) the disconnect() | 
|---|
| 888 | * or suspend() method will block waiting for a device reset to complete. | 
|---|
| 889 | * | 
|---|
| 890 | * Return: A negative error code for failure, otherwise 0. | 
|---|
| 891 | */ | 
|---|
| 892 | int usb_lock_device_for_reset(struct usb_device *udev, | 
|---|
| 893 | const struct usb_interface *iface) | 
|---|
| 894 | { | 
|---|
| 895 | unsigned long jiffies_expire = jiffies + HZ; | 
|---|
| 896 |  | 
|---|
| 897 | if (udev->state == USB_STATE_NOTATTACHED) | 
|---|
| 898 | return -ENODEV; | 
|---|
| 899 | if (udev->state == USB_STATE_SUSPENDED) | 
|---|
| 900 | return -EHOSTUNREACH; | 
|---|
| 901 | if (iface && (iface->condition == USB_INTERFACE_UNBINDING || | 
|---|
| 902 | iface->condition == USB_INTERFACE_UNBOUND)) | 
|---|
| 903 | return -EINTR; | 
|---|
| 904 |  | 
|---|
| 905 | while (!usb_trylock_device(udev)) { | 
|---|
| 906 |  | 
|---|
| 907 | /* If we can't acquire the lock after waiting one second, | 
|---|
| 908 | * we're probably deadlocked */ | 
|---|
| 909 | if (time_after(jiffies, jiffies_expire)) | 
|---|
| 910 | return -EBUSY; | 
|---|
| 911 |  | 
|---|
| 912 | msleep(msecs: 15); | 
|---|
| 913 | if (udev->state == USB_STATE_NOTATTACHED) | 
|---|
| 914 | return -ENODEV; | 
|---|
| 915 | if (udev->state == USB_STATE_SUSPENDED) | 
|---|
| 916 | return -EHOSTUNREACH; | 
|---|
| 917 | if (iface && (iface->condition == USB_INTERFACE_UNBINDING || | 
|---|
| 918 | iface->condition == USB_INTERFACE_UNBOUND)) | 
|---|
| 919 | return -EINTR; | 
|---|
| 920 | } | 
|---|
| 921 | return 0; | 
|---|
| 922 | } | 
|---|
| 923 | EXPORT_SYMBOL_GPL(usb_lock_device_for_reset); | 
|---|
| 924 |  | 
|---|
| 925 | /** | 
|---|
| 926 | * usb_get_current_frame_number - return current bus frame number | 
|---|
| 927 | * @dev: the device whose bus is being queried | 
|---|
| 928 | * | 
|---|
| 929 | * Return: The current frame number for the USB host controller used | 
|---|
| 930 | * with the given USB device. This can be used when scheduling | 
|---|
| 931 | * isochronous requests. | 
|---|
| 932 | * | 
|---|
| 933 | * Note: Different kinds of host controller have different "scheduling | 
|---|
| 934 | * horizons". While one type might support scheduling only 32 frames | 
|---|
| 935 | * into the future, others could support scheduling up to 1024 frames | 
|---|
| 936 | * into the future. | 
|---|
| 937 | * | 
|---|
| 938 | */ | 
|---|
| 939 | int usb_get_current_frame_number(struct usb_device *dev) | 
|---|
| 940 | { | 
|---|
| 941 | return usb_hcd_get_frame_number(udev: dev); | 
|---|
| 942 | } | 
|---|
| 943 | EXPORT_SYMBOL_GPL(usb_get_current_frame_number); | 
|---|
| 944 |  | 
|---|
| 945 | /*-------------------------------------------------------------------*/ | 
|---|
| 946 | /* | 
|---|
| 947 | * __usb_get_extra_descriptor() finds a descriptor of specific type in the | 
|---|
| 948 | * extra field of the interface and endpoint descriptor structs. | 
|---|
| 949 | */ | 
|---|
| 950 |  | 
|---|
| 951 | int (char *buffer, unsigned size, | 
|---|
| 952 | unsigned char type, void **ptr, size_t minsize) | 
|---|
| 953 | { | 
|---|
| 954 | struct usb_descriptor_header *; | 
|---|
| 955 |  | 
|---|
| 956 | while (size >= sizeof(struct usb_descriptor_header)) { | 
|---|
| 957 | header = (struct usb_descriptor_header *)buffer; | 
|---|
| 958 |  | 
|---|
| 959 | if (header->bLength < 2 || header->bLength > size) { | 
|---|
| 960 | printk(KERN_ERR | 
|---|
| 961 | "%s: bogus descriptor, type %d length %d\n", | 
|---|
| 962 | usbcore_name, | 
|---|
| 963 | header->bDescriptorType, | 
|---|
| 964 | header->bLength); | 
|---|
| 965 | return -1; | 
|---|
| 966 | } | 
|---|
| 967 |  | 
|---|
| 968 | if (header->bDescriptorType == type && header->bLength >= minsize) { | 
|---|
| 969 | *ptr = header; | 
|---|
| 970 | return 0; | 
|---|
| 971 | } | 
|---|
| 972 |  | 
|---|
| 973 | buffer += header->bLength; | 
|---|
| 974 | size -= header->bLength; | 
|---|
| 975 | } | 
|---|
| 976 | return -1; | 
|---|
| 977 | } | 
|---|
| 978 | EXPORT_SYMBOL_GPL(__usb_get_extra_descriptor); | 
|---|
| 979 |  | 
|---|
| 980 | /** | 
|---|
| 981 | * usb_alloc_coherent - allocate dma-consistent buffer for URB_NO_xxx_DMA_MAP | 
|---|
| 982 | * @dev: device the buffer will be used with | 
|---|
| 983 | * @size: requested buffer size | 
|---|
| 984 | * @mem_flags: affect whether allocation may block | 
|---|
| 985 | * @dma: used to return DMA address of buffer | 
|---|
| 986 | * | 
|---|
| 987 | * Return: Either null (indicating no buffer could be allocated), or the | 
|---|
| 988 | * cpu-space pointer to a buffer that may be used to perform DMA to the | 
|---|
| 989 | * specified device.  Such cpu-space buffers are returned along with the DMA | 
|---|
| 990 | * address (through the pointer provided). | 
|---|
| 991 | * | 
|---|
| 992 | * Note: | 
|---|
| 993 | * These buffers are used with URB_NO_xxx_DMA_MAP set in urb->transfer_flags | 
|---|
| 994 | * to avoid behaviors like using "DMA bounce buffers", or thrashing IOMMU | 
|---|
| 995 | * hardware during URB completion/resubmit.  The implementation varies between | 
|---|
| 996 | * platforms, depending on details of how DMA will work to this device. | 
|---|
| 997 | * Using these buffers also eliminates cacheline sharing problems on | 
|---|
| 998 | * architectures where CPU caches are not DMA-coherent.  On systems without | 
|---|
| 999 | * bus-snooping caches, these buffers are uncached. | 
|---|
| 1000 | * | 
|---|
| 1001 | * When the buffer is no longer used, free it with usb_free_coherent(). | 
|---|
| 1002 | */ | 
|---|
| 1003 | void *usb_alloc_coherent(struct usb_device *dev, size_t size, gfp_t mem_flags, | 
|---|
| 1004 | dma_addr_t *dma) | 
|---|
| 1005 | { | 
|---|
| 1006 | if (!dev || !dev->bus) | 
|---|
| 1007 | return NULL; | 
|---|
| 1008 | return hcd_buffer_alloc(bus: dev->bus, size, mem_flags, dma); | 
|---|
| 1009 | } | 
|---|
| 1010 | EXPORT_SYMBOL_GPL(usb_alloc_coherent); | 
|---|
| 1011 |  | 
|---|
| 1012 | /** | 
|---|
| 1013 | * usb_free_coherent - free memory allocated with usb_alloc_coherent() | 
|---|
| 1014 | * @dev: device the buffer was used with | 
|---|
| 1015 | * @size: requested buffer size | 
|---|
| 1016 | * @addr: CPU address of buffer | 
|---|
| 1017 | * @dma: DMA address of buffer | 
|---|
| 1018 | * | 
|---|
| 1019 | * This reclaims an I/O buffer, letting it be reused.  The memory must have | 
|---|
| 1020 | * been allocated using usb_alloc_coherent(), and the parameters must match | 
|---|
| 1021 | * those provided in that allocation request. | 
|---|
| 1022 | */ | 
|---|
| 1023 | void usb_free_coherent(struct usb_device *dev, size_t size, void *addr, | 
|---|
| 1024 | dma_addr_t dma) | 
|---|
| 1025 | { | 
|---|
| 1026 | if (!dev || !dev->bus) | 
|---|
| 1027 | return; | 
|---|
| 1028 | if (!addr) | 
|---|
| 1029 | return; | 
|---|
| 1030 | hcd_buffer_free(bus: dev->bus, size, addr, dma); | 
|---|
| 1031 | } | 
|---|
| 1032 | EXPORT_SYMBOL_GPL(usb_free_coherent); | 
|---|
| 1033 |  | 
|---|
| 1034 | /** | 
|---|
| 1035 | * usb_alloc_noncoherent - allocate dma-noncoherent buffer for URB_NO_xxx_DMA_MAP | 
|---|
| 1036 | * @dev: device the buffer will be used with | 
|---|
| 1037 | * @size: requested buffer size | 
|---|
| 1038 | * @mem_flags: affect whether allocation may block | 
|---|
| 1039 | * @dma: used to return DMA address of buffer | 
|---|
| 1040 | * @dir: DMA transfer direction | 
|---|
| 1041 | * @table: used to return sg_table of allocated memory | 
|---|
| 1042 | * | 
|---|
| 1043 | * To explicit manage the memory ownership for the kernel vs the device by | 
|---|
| 1044 | * USB core, the user needs save sg_table to urb->sgt. Then USB core will | 
|---|
| 1045 | * do DMA sync for CPU and device properly. | 
|---|
| 1046 | * | 
|---|
| 1047 | * When the buffer is no longer used, free it with usb_free_noncoherent(). | 
|---|
| 1048 | * | 
|---|
| 1049 | * Return: Either null (indicating no buffer could be allocated), or the | 
|---|
| 1050 | * cpu-space pointer to a buffer that may be used to perform DMA to the | 
|---|
| 1051 | * specified device.  Such cpu-space buffers are returned along with the DMA | 
|---|
| 1052 | * address (through the pointer provided). | 
|---|
| 1053 | */ | 
|---|
| 1054 | void *usb_alloc_noncoherent(struct usb_device *dev, size_t size, | 
|---|
| 1055 | gfp_t mem_flags, dma_addr_t *dma, | 
|---|
| 1056 | enum dma_data_direction dir, | 
|---|
| 1057 | struct sg_table **table) | 
|---|
| 1058 | { | 
|---|
| 1059 | struct device *dmadev; | 
|---|
| 1060 | struct sg_table *sgt; | 
|---|
| 1061 | void *buffer; | 
|---|
| 1062 |  | 
|---|
| 1063 | if (!dev || !dev->bus) | 
|---|
| 1064 | return NULL; | 
|---|
| 1065 |  | 
|---|
| 1066 | dmadev = bus_to_hcd(bus: dev->bus)->self.sysdev; | 
|---|
| 1067 |  | 
|---|
| 1068 | sgt = dma_alloc_noncontiguous(dev: dmadev, size, dir, gfp: mem_flags, attrs: 0); | 
|---|
| 1069 | if (!sgt) | 
|---|
| 1070 | return NULL; | 
|---|
| 1071 |  | 
|---|
| 1072 | buffer = dma_vmap_noncontiguous(dev: dmadev, size, sgt); | 
|---|
| 1073 | if (!buffer) { | 
|---|
| 1074 | dma_free_noncontiguous(dev: dmadev, size, sgt, dir); | 
|---|
| 1075 | return NULL; | 
|---|
| 1076 | } | 
|---|
| 1077 |  | 
|---|
| 1078 | *table = sgt; | 
|---|
| 1079 | *dma = sg_dma_address(sgt->sgl); | 
|---|
| 1080 |  | 
|---|
| 1081 | return buffer; | 
|---|
| 1082 | } | 
|---|
| 1083 | EXPORT_SYMBOL_GPL(usb_alloc_noncoherent); | 
|---|
| 1084 |  | 
|---|
| 1085 | /** | 
|---|
| 1086 | * usb_free_noncoherent - free memory allocated with usb_alloc_noncoherent() | 
|---|
| 1087 | * @dev: device the buffer was used with | 
|---|
| 1088 | * @size: requested buffer size | 
|---|
| 1089 | * @addr: CPU address of buffer | 
|---|
| 1090 | * @dir: DMA transfer direction | 
|---|
| 1091 | * @table: describe the allocated and DMA mapped memory, | 
|---|
| 1092 | * | 
|---|
| 1093 | * This reclaims an I/O buffer, letting it be reused.  The memory must have | 
|---|
| 1094 | * been allocated using usb_alloc_noncoherent(), and the parameters must match | 
|---|
| 1095 | * those provided in that allocation request. | 
|---|
| 1096 | */ | 
|---|
| 1097 | void usb_free_noncoherent(struct usb_device *dev, size_t size, | 
|---|
| 1098 | void *addr, enum dma_data_direction dir, | 
|---|
| 1099 | struct sg_table *table) | 
|---|
| 1100 | { | 
|---|
| 1101 | struct device *dmadev; | 
|---|
| 1102 |  | 
|---|
| 1103 | if (!dev || !dev->bus) | 
|---|
| 1104 | return; | 
|---|
| 1105 | if (!addr) | 
|---|
| 1106 | return; | 
|---|
| 1107 |  | 
|---|
| 1108 | dmadev = bus_to_hcd(bus: dev->bus)->self.sysdev; | 
|---|
| 1109 | dma_vunmap_noncontiguous(dev: dmadev, vaddr: addr); | 
|---|
| 1110 | dma_free_noncontiguous(dev: dmadev, size, sgt: table, dir); | 
|---|
| 1111 | } | 
|---|
| 1112 | EXPORT_SYMBOL_GPL(usb_free_noncoherent); | 
|---|
| 1113 |  | 
|---|
| 1114 | /** | 
|---|
| 1115 | * usb_endpoint_max_periodic_payload - Get maximum payload bytes per service | 
|---|
| 1116 | *				       interval | 
|---|
| 1117 | * @udev: The USB device | 
|---|
| 1118 | * @ep: The endpoint | 
|---|
| 1119 | * | 
|---|
| 1120 | * Returns: the maximum number of bytes isochronous or interrupt endpoint @ep | 
|---|
| 1121 | * can transfer during a service interval, or 0 for other endpoints. | 
|---|
| 1122 | */ | 
|---|
| 1123 | u32 usb_endpoint_max_periodic_payload(struct usb_device *udev, | 
|---|
| 1124 | const struct usb_host_endpoint *ep) | 
|---|
| 1125 | { | 
|---|
| 1126 | if (!usb_endpoint_xfer_isoc(epd: &ep->desc) && | 
|---|
| 1127 | !usb_endpoint_xfer_int(epd: &ep->desc)) | 
|---|
| 1128 | return 0; | 
|---|
| 1129 |  | 
|---|
| 1130 | switch (udev->speed) { | 
|---|
| 1131 | case USB_SPEED_SUPER_PLUS: | 
|---|
| 1132 | if (USB_SS_SSP_ISOC_COMP(ep->ss_ep_comp.bmAttributes)) | 
|---|
| 1133 | return le32_to_cpu(ep->ssp_isoc_ep_comp.dwBytesPerInterval); | 
|---|
| 1134 | fallthrough; | 
|---|
| 1135 | case USB_SPEED_SUPER: | 
|---|
| 1136 | return le16_to_cpu(ep->ss_ep_comp.wBytesPerInterval); | 
|---|
| 1137 | default: | 
|---|
| 1138 | if (usb_endpoint_is_hs_isoc_double(udev, ep)) | 
|---|
| 1139 | return le32_to_cpu(ep->eusb2_isoc_ep_comp.dwBytesPerInterval); | 
|---|
| 1140 | return usb_endpoint_maxp(epd: &ep->desc) * usb_endpoint_maxp_mult(epd: &ep->desc); | 
|---|
| 1141 | } | 
|---|
| 1142 | } | 
|---|
| 1143 | EXPORT_SYMBOL_GPL(usb_endpoint_max_periodic_payload); | 
|---|
| 1144 |  | 
|---|
| 1145 | /** | 
|---|
| 1146 | * usb_endpoint_is_hs_isoc_double - Tell whether an endpoint uses USB 2 | 
|---|
| 1147 | *                                  Isochronous Double IN Bandwidth | 
|---|
| 1148 | * @udev: The USB device | 
|---|
| 1149 | * @ep: The endpoint | 
|---|
| 1150 | * | 
|---|
| 1151 | * Returns: true if an endpoint @ep conforms to USB 2 Isochronous Double IN | 
|---|
| 1152 | * Bandwidth ECN, false otherwise. | 
|---|
| 1153 | */ | 
|---|
| 1154 | bool usb_endpoint_is_hs_isoc_double(struct usb_device *udev, | 
|---|
| 1155 | const struct usb_host_endpoint *ep) | 
|---|
| 1156 | { | 
|---|
| 1157 | return ep->eusb2_isoc_ep_comp.bDescriptorType && | 
|---|
| 1158 | le16_to_cpu(udev->descriptor.bcdUSB) == 0x220 && | 
|---|
| 1159 | usb_endpoint_is_isoc_in(epd: &ep->desc) && | 
|---|
| 1160 | !le16_to_cpu(ep->desc.wMaxPacketSize); | 
|---|
| 1161 | } | 
|---|
| 1162 | EXPORT_SYMBOL_GPL(usb_endpoint_is_hs_isoc_double); | 
|---|
| 1163 |  | 
|---|
| 1164 | /* | 
|---|
| 1165 | * Notifications of device and interface registration | 
|---|
| 1166 | */ | 
|---|
| 1167 | static int usb_bus_notify(struct notifier_block *nb, unsigned long action, | 
|---|
| 1168 | void *data) | 
|---|
| 1169 | { | 
|---|
| 1170 | struct device *dev = data; | 
|---|
| 1171 |  | 
|---|
| 1172 | switch (action) { | 
|---|
| 1173 | case BUS_NOTIFY_ADD_DEVICE: | 
|---|
| 1174 | if (dev->type == &usb_device_type) | 
|---|
| 1175 | (void) usb_create_sysfs_dev_files(to_usb_device(dev)); | 
|---|
| 1176 | else if (dev->type == &usb_if_device_type) | 
|---|
| 1177 | usb_create_sysfs_intf_files(to_usb_interface(dev)); | 
|---|
| 1178 | break; | 
|---|
| 1179 |  | 
|---|
| 1180 | case BUS_NOTIFY_DEL_DEVICE: | 
|---|
| 1181 | if (dev->type == &usb_device_type) | 
|---|
| 1182 | usb_remove_sysfs_dev_files(to_usb_device(dev)); | 
|---|
| 1183 | else if (dev->type == &usb_if_device_type) | 
|---|
| 1184 | usb_remove_sysfs_intf_files(to_usb_interface(dev)); | 
|---|
| 1185 | break; | 
|---|
| 1186 | } | 
|---|
| 1187 | return 0; | 
|---|
| 1188 | } | 
|---|
| 1189 |  | 
|---|
| 1190 | static struct notifier_block usb_bus_nb = { | 
|---|
| 1191 | .notifier_call = usb_bus_notify, | 
|---|
| 1192 | }; | 
|---|
| 1193 |  | 
|---|
| 1194 | static void usb_debugfs_init(void) | 
|---|
| 1195 | { | 
|---|
| 1196 | debugfs_create_file( "devices", 0444, usb_debug_root, NULL, | 
|---|
| 1197 | &usbfs_devices_fops); | 
|---|
| 1198 | } | 
|---|
| 1199 |  | 
|---|
| 1200 | static void usb_debugfs_cleanup(void) | 
|---|
| 1201 | { | 
|---|
| 1202 | debugfs_lookup_and_remove(name: "devices", parent: usb_debug_root); | 
|---|
| 1203 | } | 
|---|
| 1204 |  | 
|---|
| 1205 | /* | 
|---|
| 1206 | * Init | 
|---|
| 1207 | */ | 
|---|
| 1208 | static int __init usb_init(void) | 
|---|
| 1209 | { | 
|---|
| 1210 | int retval; | 
|---|
| 1211 | if (usb_disabled()) { | 
|---|
| 1212 | pr_info( "%s: USB support disabled\n", usbcore_name); | 
|---|
| 1213 | return 0; | 
|---|
| 1214 | } | 
|---|
| 1215 | usb_init_pool_max(); | 
|---|
| 1216 |  | 
|---|
| 1217 | usb_debugfs_init(); | 
|---|
| 1218 |  | 
|---|
| 1219 | usb_acpi_register(); | 
|---|
| 1220 | retval = bus_register(bus: &usb_bus_type); | 
|---|
| 1221 | if (retval) | 
|---|
| 1222 | goto bus_register_failed; | 
|---|
| 1223 | retval = bus_register_notifier(bus: &usb_bus_type, nb: &usb_bus_nb); | 
|---|
| 1224 | if (retval) | 
|---|
| 1225 | goto bus_notifier_failed; | 
|---|
| 1226 | retval = usb_major_init(); | 
|---|
| 1227 | if (retval) | 
|---|
| 1228 | goto major_init_failed; | 
|---|
| 1229 | retval = class_register(class: &usbmisc_class); | 
|---|
| 1230 | if (retval) | 
|---|
| 1231 | goto class_register_failed; | 
|---|
| 1232 | retval = usb_register(&usbfs_driver); | 
|---|
| 1233 | if (retval) | 
|---|
| 1234 | goto driver_register_failed; | 
|---|
| 1235 | retval = usb_devio_init(); | 
|---|
| 1236 | if (retval) | 
|---|
| 1237 | goto usb_devio_init_failed; | 
|---|
| 1238 | retval = usb_hub_init(); | 
|---|
| 1239 | if (retval) | 
|---|
| 1240 | goto hub_init_failed; | 
|---|
| 1241 | retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE); | 
|---|
| 1242 | if (!retval) | 
|---|
| 1243 | goto out; | 
|---|
| 1244 |  | 
|---|
| 1245 | usb_hub_cleanup(); | 
|---|
| 1246 | hub_init_failed: | 
|---|
| 1247 | usb_devio_cleanup(); | 
|---|
| 1248 | usb_devio_init_failed: | 
|---|
| 1249 | usb_deregister(&usbfs_driver); | 
|---|
| 1250 | driver_register_failed: | 
|---|
| 1251 | class_unregister(class: &usbmisc_class); | 
|---|
| 1252 | class_register_failed: | 
|---|
| 1253 | usb_major_cleanup(); | 
|---|
| 1254 | major_init_failed: | 
|---|
| 1255 | bus_unregister_notifier(bus: &usb_bus_type, nb: &usb_bus_nb); | 
|---|
| 1256 | bus_notifier_failed: | 
|---|
| 1257 | bus_unregister(bus: &usb_bus_type); | 
|---|
| 1258 | bus_register_failed: | 
|---|
| 1259 | usb_acpi_unregister(); | 
|---|
| 1260 | usb_debugfs_cleanup(); | 
|---|
| 1261 | out: | 
|---|
| 1262 | return retval; | 
|---|
| 1263 | } | 
|---|
| 1264 |  | 
|---|
| 1265 | /* | 
|---|
| 1266 | * Cleanup | 
|---|
| 1267 | */ | 
|---|
| 1268 | static void __exit usb_exit(void) | 
|---|
| 1269 | { | 
|---|
| 1270 | /* This will matter if shutdown/reboot does exitcalls. */ | 
|---|
| 1271 | if (usb_disabled()) | 
|---|
| 1272 | return; | 
|---|
| 1273 |  | 
|---|
| 1274 | usb_release_quirk_list(); | 
|---|
| 1275 | usb_deregister_device_driver(&usb_generic_driver); | 
|---|
| 1276 | usb_major_cleanup(); | 
|---|
| 1277 | usb_deregister(&usbfs_driver); | 
|---|
| 1278 | usb_devio_cleanup(); | 
|---|
| 1279 | usb_hub_cleanup(); | 
|---|
| 1280 | class_unregister(class: &usbmisc_class); | 
|---|
| 1281 | bus_unregister_notifier(bus: &usb_bus_type, nb: &usb_bus_nb); | 
|---|
| 1282 | bus_unregister(bus: &usb_bus_type); | 
|---|
| 1283 | usb_acpi_unregister(); | 
|---|
| 1284 | usb_debugfs_cleanup(); | 
|---|
| 1285 | idr_destroy(&usb_bus_idr); | 
|---|
| 1286 | } | 
|---|
| 1287 |  | 
|---|
| 1288 | subsys_initcall(usb_init); | 
|---|
| 1289 | module_exit(usb_exit); | 
|---|
| 1290 | MODULE_DESCRIPTION( "USB core host-side support"); | 
|---|
| 1291 | MODULE_LICENSE( "GPL"); | 
|---|
| 1292 |  | 
|---|