1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * drivers/usb/generic.c - generic driver for USB devices (not interfaces) 4 * 5 * (C) Copyright 2005 Greg Kroah-Hartman <gregkh@suse.de> 6 * 7 * based on drivers/usb/usb.c which had the following copyrights: 8 * (C) Copyright Linus Torvalds 1999 9 * (C) Copyright Johannes Erdfelt 1999-2001 10 * (C) Copyright Andreas Gal 1999 11 * (C) Copyright Gregory P. Smith 1999 12 * (C) Copyright Deti Fliegl 1999 (new USB architecture) 13 * (C) Copyright Randy Dunlap 2000 14 * (C) Copyright David Brownell 2000-2004 15 * (C) Copyright Yggdrasil Computing, Inc. 2000 16 * (usb_device_id matching changes by Adam J. Richter) 17 * (C) Copyright Greg Kroah-Hartman 2002-2003 18 * 19 * Released under the GPLv2 only. 20 */ 21 22 #include <linux/usb.h> 23 #include <linux/usb/hcd.h> 24 #include <uapi/linux/usb/audio.h> 25 #include "usb.h" 26 27 static inline const char *plural(int n) 28 { 29 return (n == 1 ? "" : "s"); 30 } 31 32 static int is_rndis(struct usb_interface_descriptor *desc) 33 { 34 return desc->bInterfaceClass == USB_CLASS_COMM 35 && desc->bInterfaceSubClass == 2 36 && desc->bInterfaceProtocol == 0xff; 37 } 38 39 static int is_activesync(struct usb_interface_descriptor *desc) 40 { 41 return desc->bInterfaceClass == USB_CLASS_MISC 42 && desc->bInterfaceSubClass == 1 43 && desc->bInterfaceProtocol == 1; 44 } 45 46 static bool is_audio(struct usb_interface_descriptor *desc) 47 { 48 return desc->bInterfaceClass == USB_CLASS_AUDIO; 49 } 50 51 static bool is_uac3_config(struct usb_interface_descriptor *desc) 52 { 53 return desc->bInterfaceProtocol == UAC_VERSION_3; 54 } 55 56 int usb_choose_configuration(struct usb_device *udev) 57 { 58 int i; 59 int num_configs; 60 int insufficient_power = 0; 61 struct usb_host_config *c, *best; 62 63 if (usb_device_is_owned(udev)) 64 return 0; 65 66 best = NULL; 67 c = udev->config; 68 num_configs = udev->descriptor.bNumConfigurations; 69 for (i = 0; i < num_configs; (i++, c++)) { 70 struct usb_interface_descriptor *desc = NULL; 71 72 /* It's possible that a config has no interfaces! */ 73 if (c->desc.bNumInterfaces > 0) 74 desc = &c->intf_cache[0]->altsetting->desc; 75 76 /* 77 * HP's USB bus-powered keyboard has only one configuration 78 * and it claims to be self-powered; other devices may have 79 * similar errors in their descriptors. If the next test 80 * were allowed to execute, such configurations would always 81 * be rejected and the devices would not work as expected. 82 * In the meantime, we run the risk of selecting a config 83 * that requires external power at a time when that power 84 * isn't available. It seems to be the lesser of two evils. 85 * 86 * Bugzilla #6448 reports a device that appears to crash 87 * when it receives a GET_DEVICE_STATUS request! We don't 88 * have any other way to tell whether a device is self-powered, 89 * but since we don't use that information anywhere but here, 90 * the call has been removed. 91 * 92 * Maybe the GET_DEVICE_STATUS call and the test below can 93 * be reinstated when device firmwares become more reliable. 94 * Don't hold your breath. 95 */ 96 #if 0 97 /* Rule out self-powered configs for a bus-powered device */ 98 if (bus_powered && (c->desc.bmAttributes & 99 USB_CONFIG_ATT_SELFPOWER)) 100 continue; 101 #endif 102 103 /* 104 * The next test may not be as effective as it should be. 105 * Some hubs have errors in their descriptor, claiming 106 * to be self-powered when they are really bus-powered. 107 * We will overestimate the amount of current such hubs 108 * make available for each port. 109 * 110 * This is a fairly benign sort of failure. It won't 111 * cause us to reject configurations that we should have 112 * accepted. 113 */ 114 115 /* Rule out configs that draw too much bus current */ 116 if (usb_get_max_power(udev, c) > udev->bus_mA) { 117 insufficient_power++; 118 continue; 119 } 120 121 /* When the first config's first interface is one of Microsoft's 122 * pet nonstandard Ethernet-over-USB protocols, ignore it unless 123 * this kernel has enabled the necessary host side driver. 124 * But: Don't ignore it if it's the only config. 125 */ 126 if (i == 0 && num_configs > 1 && desc && 127 (is_rndis(desc) || is_activesync(desc))) { 128 #if !defined(CONFIG_USB_NET_RNDIS_HOST) && !defined(CONFIG_USB_NET_RNDIS_HOST_MODULE) 129 continue; 130 #else 131 best = c; 132 #endif 133 } 134 135 /* 136 * Select first configuration as default for audio so that 137 * devices that don't comply with UAC3 protocol are supported. 138 * But, still iterate through other configurations and 139 * select UAC3 compliant config if present. 140 */ 141 if (i == 0 && num_configs > 1 && desc && is_audio(desc)) { 142 best = c; 143 continue; 144 } 145 146 if (i > 0 && desc && is_audio(desc)) { 147 if (is_uac3_config(desc)) { 148 best = c; 149 break; 150 } 151 continue; 152 } 153 154 /* From the remaining configs, choose the first one whose 155 * first interface is for a non-vendor-specific class. 156 * Reason: Linux is more likely to have a class driver 157 * than a vendor-specific driver. */ 158 else if (udev->descriptor.bDeviceClass != 159 USB_CLASS_VENDOR_SPEC && 160 (desc && desc->bInterfaceClass != 161 USB_CLASS_VENDOR_SPEC)) { 162 best = c; 163 break; 164 } 165 166 /* If all the remaining configs are vendor-specific, 167 * choose the first one. */ 168 else if (!best) 169 best = c; 170 } 171 172 if (insufficient_power > 0) 173 dev_info(&udev->dev, "rejected %d configuration%s " 174 "due to insufficient available bus power\n", 175 insufficient_power, plural(insufficient_power)); 176 177 if (best) { 178 i = best->desc.bConfigurationValue; 179 dev_dbg(&udev->dev, 180 "configuration #%d chosen from %d choice%s\n", 181 i, num_configs, plural(num_configs)); 182 } else { 183 i = -1; 184 dev_warn(&udev->dev, 185 "no configuration chosen from %d choice%s\n", 186 num_configs, plural(num_configs)); 187 } 188 return i; 189 } 190 EXPORT_SYMBOL_GPL(usb_choose_configuration); 191 192 static int generic_probe(struct usb_device *udev) 193 { 194 int err, c; 195 196 /* Choose and set the configuration. This registers the interfaces 197 * with the driver core and lets interface drivers bind to them. 198 */ 199 if (udev->authorized == 0) 200 dev_err(&udev->dev, "Device is not authorized for usage\n"); 201 else { 202 c = usb_choose_configuration(udev); 203 if (c >= 0) { 204 err = usb_set_configuration(udev, c); 205 if (err && err != -ENODEV) { 206 dev_err(&udev->dev, "can't set config #%d, error %d\n", 207 c, err); 208 /* This need not be fatal. The user can try to 209 * set other configurations. */ 210 } 211 } 212 } 213 /* USB device state == configured ... usable */ 214 usb_notify_add_device(udev); 215 216 return 0; 217 } 218 219 static void generic_disconnect(struct usb_device *udev) 220 { 221 usb_notify_remove_device(udev); 222 223 /* if this is only an unbind, not a physical disconnect, then 224 * unconfigure the device */ 225 if (udev->actconfig) 226 usb_set_configuration(udev, -1); 227 } 228 229 #ifdef CONFIG_PM 230 231 static int generic_suspend(struct usb_device *udev, pm_message_t msg) 232 { 233 int rc; 234 235 /* Normal USB devices suspend through their upstream port. 236 * Root hubs don't have upstream ports to suspend, 237 * so we have to shut down their downstream HC-to-USB 238 * interfaces manually by doing a bus (or "global") suspend. 239 */ 240 if (!udev->parent) 241 rc = hcd_bus_suspend(udev, msg); 242 243 /* 244 * Non-root USB2 devices don't need to do anything for FREEZE 245 * or PRETHAW. USB3 devices don't support global suspend and 246 * needs to be selectively suspended. 247 */ 248 else if ((msg.event == PM_EVENT_FREEZE || msg.event == PM_EVENT_PRETHAW) 249 && (udev->speed < USB_SPEED_SUPER)) 250 rc = 0; 251 else 252 rc = usb_port_suspend(udev, msg); 253 254 return rc; 255 } 256 257 static int generic_resume(struct usb_device *udev, pm_message_t msg) 258 { 259 int rc; 260 261 /* Normal USB devices resume/reset through their upstream port. 262 * Root hubs don't have upstream ports to resume or reset, 263 * so we have to start up their downstream HC-to-USB 264 * interfaces manually by doing a bus (or "global") resume. 265 */ 266 if (!udev->parent) 267 rc = hcd_bus_resume(udev, msg); 268 else 269 rc = usb_port_resume(udev, msg); 270 return rc; 271 } 272 273 #endif /* CONFIG_PM */ 274 275 struct usb_device_driver usb_generic_driver = { 276 .name = "usb", 277 .probe = generic_probe, 278 .disconnect = generic_disconnect, 279 #ifdef CONFIG_PM 280 .suspend = generic_suspend, 281 .resume = generic_resume, 282 #endif 283 .supports_autosuspend = 1, 284 }; 285