This source file includes following definitions.
- portspeed
- usb_hub_to_struct_hub
- usb_device_supports_lpm
- usb_set_lpm_mel
- usb_set_lpm_pel
- usb_set_lpm_sel
- usb_set_lpm_parameters
- get_hub_descriptor
- clear_hub_feature
- usb_clear_port_feature
- set_port_feature
- to_led_name
- set_port_led
- led_work
- get_hub_status
- get_port_status
- hub_ext_port_status
- hub_port_status
- hub_resubmit_irq_urb
- hub_retry_irq_urb
- kick_hub_wq
- usb_kick_hub_wq
- usb_wakeup_notification
- hub_irq
- hub_clear_tt_buffer
- hub_tt_work
- usb_hub_set_port_power
- usb_hub_clear_tt_buffer
- hub_power_on
- hub_hub_status
- hub_set_port_link_state
- hub_port_logical_disconnect
- usb_remove_device
- hub_activate
- hub_init_func2
- hub_init_func3
- hub_quiesce
- hub_pm_barrier_for_all_ports
- hub_pre_reset
- hub_post_reset
- hub_configure
- hub_release
- hub_disconnect
- hub_descriptor_is_sane
- hub_probe
- hub_ioctl
- find_port_owner
- usb_hub_claim_port
- usb_hub_release_port
- usb_hub_release_all_ports
- usb_device_is_owned
- recursively_mark_NOTATTACHED
- usb_set_device_state
- choose_devnum
- release_devnum
- update_devnum
- hub_free_dev
- hub_disconnect_children
- usb_disconnect
- show_string
- announce_device
- announce_device
- usb_enumerate_device_otg
- usb_enumerate_device
- set_usb_port_removable
- usb_new_device
- usb_deauthorize_device
- usb_authorize_device
- port_speed_is_ssp
- hub_is_wusb
- use_new_scheme
- hub_port_warm_reset_required
- hub_port_wait_reset
- hub_port_reset
- port_is_power_on
- usb_lock_port
- usb_unlock_port
- port_is_suspended
- check_port_resume_type
- usb_disable_ltm
- usb_enable_ltm
- usb_enable_remote_wakeup
- usb_disable_remote_wakeup
- usb_wakeup_enabled_descendants
- usb_port_suspend
- finish_port_resume
- wait_for_connected
- usb_port_resume
- usb_remote_wakeup
- hub_handle_remote_wakeup
- check_ports_changed
- hub_suspend
- report_wakeup_requests
- hub_resume
- hub_reset_resume
- usb_root_hub_lost_power
- usb_req_set_sel
- usb_set_device_initiated_lpm
- usb_set_lpm_timeout
- usb_enable_link_state
- usb_disable_link_state
- usb_disable_lpm
- usb_unlocked_disable_lpm
- usb_enable_lpm
- usb_unlocked_enable_lpm
- hub_usb3_port_prepare_disable
- hub_usb3_port_prepare_disable
- usb_disable_lpm
- usb_enable_lpm
- usb_unlocked_disable_lpm
- usb_unlocked_enable_lpm
- usb_disable_ltm
- usb_enable_ltm
- hub_handle_remote_wakeup
- hub_port_disable
- usb_port_disable
- hub_port_debounce
- usb_ep0_reinit
- hub_set_address
- hub_set_initial_usb2_lpm_policy
- hub_enable_device
- hub_port_init
- check_highspeed
- hub_power_remaining
- hub_port_connect
- hub_port_connect_change
- port_over_current_notify
- port_event
- hub_event
- usb_hub_init
- usb_hub_cleanup
- descriptors_changed
- usb_reset_and_verify_device
- usb_reset_device
- usb_queue_reset_device
- usb_hub_find_child
- usb_hub_adjust_deviceremovable
- usb_get_hub_port_acpi_handle
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <linux/kernel.h>
14 #include <linux/errno.h>
15 #include <linux/module.h>
16 #include <linux/moduleparam.h>
17 #include <linux/completion.h>
18 #include <linux/sched/mm.h>
19 #include <linux/list.h>
20 #include <linux/slab.h>
21 #include <linux/ioctl.h>
22 #include <linux/usb.h>
23 #include <linux/usbdevice_fs.h>
24 #include <linux/usb/hcd.h>
25 #include <linux/usb/otg.h>
26 #include <linux/usb/quirks.h>
27 #include <linux/workqueue.h>
28 #include <linux/mutex.h>
29 #include <linux/random.h>
30 #include <linux/pm_qos.h>
31 #include <linux/kobject.h>
32
33 #include <linux/uaccess.h>
34 #include <asm/byteorder.h>
35
36 #include "hub.h"
37 #include "otg_whitelist.h"
38
39 #define USB_VENDOR_GENESYS_LOGIC 0x05e3
40 #define USB_VENDOR_SMSC 0x0424
41 #define USB_PRODUCT_USB5534B 0x5534
42 #define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01
43 #define HUB_QUIRK_DISABLE_AUTOSUSPEND 0x02
44
45 #define USB_TP_TRANSMISSION_DELAY 40
46 #define USB_TP_TRANSMISSION_DELAY_MAX 65535
47
48
49
50
51 static DEFINE_SPINLOCK(device_state_lock);
52
53
54 static struct workqueue_struct *hub_wq;
55 static void hub_event(struct work_struct *work);
56
57
58 DEFINE_MUTEX(usb_port_peer_mutex);
59
60
61 static bool blinkenlights;
62 module_param(blinkenlights, bool, S_IRUGO);
63 MODULE_PARM_DESC(blinkenlights, "true to cycle leds on hubs");
64
65
66
67
68
69
70 static int initial_descriptor_timeout = USB_CTRL_GET_TIMEOUT;
71 module_param(initial_descriptor_timeout, int, S_IRUGO|S_IWUSR);
72 MODULE_PARM_DESC(initial_descriptor_timeout,
73 "initial 64-byte descriptor request timeout in milliseconds "
74 "(default 5000 - 5.0 seconds)");
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 static bool old_scheme_first;
91 module_param(old_scheme_first, bool, S_IRUGO | S_IWUSR);
92 MODULE_PARM_DESC(old_scheme_first,
93 "start with the old device initialization scheme");
94
95 static bool use_both_schemes = 1;
96 module_param(use_both_schemes, bool, S_IRUGO | S_IWUSR);
97 MODULE_PARM_DESC(use_both_schemes,
98 "try the other device initialization scheme if the "
99 "first one fails");
100
101
102
103
104 DECLARE_RWSEM(ehci_cf_port_reset_rwsem);
105 EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem);
106
107 #define HUB_DEBOUNCE_TIMEOUT 2000
108 #define HUB_DEBOUNCE_STEP 25
109 #define HUB_DEBOUNCE_STABLE 100
110
111 static void hub_release(struct kref *kref);
112 static int usb_reset_and_verify_device(struct usb_device *udev);
113 static int hub_port_disable(struct usb_hub *hub, int port1, int set_state);
114 static bool hub_port_warm_reset_required(struct usb_hub *hub, int port1,
115 u16 portstatus);
116
117 static inline char *portspeed(struct usb_hub *hub, int portstatus)
118 {
119 if (hub_is_superspeedplus(hub->hdev))
120 return "10.0 Gb/s";
121 if (hub_is_superspeed(hub->hdev))
122 return "5.0 Gb/s";
123 if (portstatus & USB_PORT_STAT_HIGH_SPEED)
124 return "480 Mb/s";
125 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
126 return "1.5 Mb/s";
127 else
128 return "12 Mb/s";
129 }
130
131
132 struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev)
133 {
134 if (!hdev || !hdev->actconfig || !hdev->maxchild)
135 return NULL;
136 return usb_get_intfdata(hdev->actconfig->interface[0]);
137 }
138
139 int usb_device_supports_lpm(struct usb_device *udev)
140 {
141
142 if (udev->quirks & USB_QUIRK_NO_LPM)
143 return 0;
144
145
146
147
148 if (udev->speed == USB_SPEED_HIGH || udev->speed == USB_SPEED_FULL) {
149 if (udev->bos->ext_cap &&
150 (USB_LPM_SUPPORT &
151 le32_to_cpu(udev->bos->ext_cap->bmAttributes)))
152 return 1;
153 return 0;
154 }
155
156
157
158
159
160
161 if (!udev->bos->ss_cap) {
162 dev_info(&udev->dev, "No LPM exit latency info found, disabling LPM.\n");
163 return 0;
164 }
165
166 if (udev->bos->ss_cap->bU1devExitLat == 0 &&
167 udev->bos->ss_cap->bU2DevExitLat == 0) {
168 if (udev->parent)
169 dev_info(&udev->dev, "LPM exit latency is zeroed, disabling LPM.\n");
170 else
171 dev_info(&udev->dev, "We don't know the algorithms for LPM for this host, disabling LPM.\n");
172 return 0;
173 }
174
175 if (!udev->parent || udev->parent->lpm_capable)
176 return 1;
177 return 0;
178 }
179
180
181
182
183
184 static void usb_set_lpm_mel(struct usb_device *udev,
185 struct usb3_lpm_parameters *udev_lpm_params,
186 unsigned int udev_exit_latency,
187 struct usb_hub *hub,
188 struct usb3_lpm_parameters *hub_lpm_params,
189 unsigned int hub_exit_latency)
190 {
191 unsigned int total_mel;
192 unsigned int device_mel;
193 unsigned int hub_mel;
194
195
196
197
198
199
200
201
202
203
204 total_mel = hub_lpm_params->mel +
205 (hub->descriptor->u.ss.bHubHdrDecLat * 100);
206
207
208
209
210
211
212
213
214
215 device_mel = udev_exit_latency * 1000;
216 hub_mel = hub_exit_latency * 1000;
217 if (device_mel > hub_mel)
218 total_mel += device_mel;
219 else
220 total_mel += hub_mel;
221
222 udev_lpm_params->mel = total_mel;
223 }
224
225
226
227
228
229 static void usb_set_lpm_pel(struct usb_device *udev,
230 struct usb3_lpm_parameters *udev_lpm_params,
231 unsigned int udev_exit_latency,
232 struct usb_hub *hub,
233 struct usb3_lpm_parameters *hub_lpm_params,
234 unsigned int hub_exit_latency,
235 unsigned int port_to_port_exit_latency)
236 {
237 unsigned int first_link_pel;
238 unsigned int hub_pel;
239
240
241
242
243
244
245 if (udev_exit_latency > hub_exit_latency)
246 first_link_pel = udev_exit_latency * 1000;
247 else
248 first_link_pel = hub_exit_latency * 1000;
249
250
251
252
253
254
255
256 hub_pel = port_to_port_exit_latency * 1000 + hub_lpm_params->pel;
257
258
259
260
261
262 if (first_link_pel > hub_pel)
263 udev_lpm_params->pel = first_link_pel;
264 else
265 udev_lpm_params->pel = hub_pel;
266 }
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283 static void usb_set_lpm_sel(struct usb_device *udev,
284 struct usb3_lpm_parameters *udev_lpm_params)
285 {
286 struct usb_device *parent;
287 unsigned int num_hubs;
288 unsigned int total_sel;
289
290
291 total_sel = udev_lpm_params->pel;
292
293 for (parent = udev->parent, num_hubs = 0; parent->parent;
294 parent = parent->parent)
295 num_hubs++;
296
297 if (num_hubs > 0)
298 total_sel += 2100 + 250 * (num_hubs - 1);
299
300
301 total_sel += 250 * num_hubs;
302
303 udev_lpm_params->sel = total_sel;
304 }
305
306 static void usb_set_lpm_parameters(struct usb_device *udev)
307 {
308 struct usb_hub *hub;
309 unsigned int port_to_port_delay;
310 unsigned int udev_u1_del;
311 unsigned int udev_u2_del;
312 unsigned int hub_u1_del;
313 unsigned int hub_u2_del;
314
315 if (!udev->lpm_capable || udev->speed < USB_SPEED_SUPER)
316 return;
317
318 hub = usb_hub_to_struct_hub(udev->parent);
319
320
321
322 if (!hub)
323 return;
324
325 udev_u1_del = udev->bos->ss_cap->bU1devExitLat;
326 udev_u2_del = le16_to_cpu(udev->bos->ss_cap->bU2DevExitLat);
327 hub_u1_del = udev->parent->bos->ss_cap->bU1devExitLat;
328 hub_u2_del = le16_to_cpu(udev->parent->bos->ss_cap->bU2DevExitLat);
329
330 usb_set_lpm_mel(udev, &udev->u1_params, udev_u1_del,
331 hub, &udev->parent->u1_params, hub_u1_del);
332
333 usb_set_lpm_mel(udev, &udev->u2_params, udev_u2_del,
334 hub, &udev->parent->u2_params, hub_u2_del);
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353 port_to_port_delay = 1;
354
355 usb_set_lpm_pel(udev, &udev->u1_params, udev_u1_del,
356 hub, &udev->parent->u1_params, hub_u1_del,
357 port_to_port_delay);
358
359 if (hub_u2_del > hub_u1_del)
360 port_to_port_delay = 1 + hub_u2_del - hub_u1_del;
361 else
362 port_to_port_delay = 1 + hub_u1_del;
363
364 usb_set_lpm_pel(udev, &udev->u2_params, udev_u2_del,
365 hub, &udev->parent->u2_params, hub_u2_del,
366 port_to_port_delay);
367
368
369 usb_set_lpm_sel(udev, &udev->u1_params);
370 usb_set_lpm_sel(udev, &udev->u2_params);
371 }
372
373
374 static int get_hub_descriptor(struct usb_device *hdev,
375 struct usb_hub_descriptor *desc)
376 {
377 int i, ret, size;
378 unsigned dtype;
379
380 if (hub_is_superspeed(hdev)) {
381 dtype = USB_DT_SS_HUB;
382 size = USB_DT_SS_HUB_SIZE;
383 } else {
384 dtype = USB_DT_HUB;
385 size = sizeof(struct usb_hub_descriptor);
386 }
387
388 for (i = 0; i < 3; i++) {
389 ret = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
390 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
391 dtype << 8, 0, desc, size,
392 USB_CTRL_GET_TIMEOUT);
393 if (hub_is_superspeed(hdev)) {
394 if (ret == size)
395 return ret;
396 } else if (ret >= USB_DT_HUB_NONVAR_SIZE + 2) {
397
398 size = USB_DT_HUB_NONVAR_SIZE + desc->bNbrPorts / 8 + 1;
399 if (ret < size)
400 return -EMSGSIZE;
401 return ret;
402 }
403 }
404 return -EINVAL;
405 }
406
407
408
409
410 static int clear_hub_feature(struct usb_device *hdev, int feature)
411 {
412 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
413 USB_REQ_CLEAR_FEATURE, USB_RT_HUB, feature, 0, NULL, 0, 1000);
414 }
415
416
417
418
419 int usb_clear_port_feature(struct usb_device *hdev, int port1, int feature)
420 {
421 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
422 USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, port1,
423 NULL, 0, 1000);
424 }
425
426
427
428
429 static int set_port_feature(struct usb_device *hdev, int port1, int feature)
430 {
431 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
432 USB_REQ_SET_FEATURE, USB_RT_PORT, feature, port1,
433 NULL, 0, 1000);
434 }
435
436 static char *to_led_name(int selector)
437 {
438 switch (selector) {
439 case HUB_LED_AMBER:
440 return "amber";
441 case HUB_LED_GREEN:
442 return "green";
443 case HUB_LED_OFF:
444 return "off";
445 case HUB_LED_AUTO:
446 return "auto";
447 default:
448 return "??";
449 }
450 }
451
452
453
454
455
456 static void set_port_led(struct usb_hub *hub, int port1, int selector)
457 {
458 struct usb_port *port_dev = hub->ports[port1 - 1];
459 int status;
460
461 status = set_port_feature(hub->hdev, (selector << 8) | port1,
462 USB_PORT_FEAT_INDICATOR);
463 dev_dbg(&port_dev->dev, "indicator %s status %d\n",
464 to_led_name(selector), status);
465 }
466
467 #define LED_CYCLE_PERIOD ((2*HZ)/3)
468
469 static void led_work(struct work_struct *work)
470 {
471 struct usb_hub *hub =
472 container_of(work, struct usb_hub, leds.work);
473 struct usb_device *hdev = hub->hdev;
474 unsigned i;
475 unsigned changed = 0;
476 int cursor = -1;
477
478 if (hdev->state != USB_STATE_CONFIGURED || hub->quiescing)
479 return;
480
481 for (i = 0; i < hdev->maxchild; i++) {
482 unsigned selector, mode;
483
484
485
486 switch (hub->indicator[i]) {
487
488 case INDICATOR_CYCLE:
489 cursor = i;
490 selector = HUB_LED_AUTO;
491 mode = INDICATOR_AUTO;
492 break;
493
494 case INDICATOR_GREEN_BLINK:
495 selector = HUB_LED_GREEN;
496 mode = INDICATOR_GREEN_BLINK_OFF;
497 break;
498 case INDICATOR_GREEN_BLINK_OFF:
499 selector = HUB_LED_OFF;
500 mode = INDICATOR_GREEN_BLINK;
501 break;
502
503 case INDICATOR_AMBER_BLINK:
504 selector = HUB_LED_AMBER;
505 mode = INDICATOR_AMBER_BLINK_OFF;
506 break;
507 case INDICATOR_AMBER_BLINK_OFF:
508 selector = HUB_LED_OFF;
509 mode = INDICATOR_AMBER_BLINK;
510 break;
511
512 case INDICATOR_ALT_BLINK:
513 selector = HUB_LED_GREEN;
514 mode = INDICATOR_ALT_BLINK_OFF;
515 break;
516 case INDICATOR_ALT_BLINK_OFF:
517 selector = HUB_LED_AMBER;
518 mode = INDICATOR_ALT_BLINK;
519 break;
520 default:
521 continue;
522 }
523 if (selector != HUB_LED_AUTO)
524 changed = 1;
525 set_port_led(hub, i + 1, selector);
526 hub->indicator[i] = mode;
527 }
528 if (!changed && blinkenlights) {
529 cursor++;
530 cursor %= hdev->maxchild;
531 set_port_led(hub, cursor + 1, HUB_LED_GREEN);
532 hub->indicator[cursor] = INDICATOR_CYCLE;
533 changed++;
534 }
535 if (changed)
536 queue_delayed_work(system_power_efficient_wq,
537 &hub->leds, LED_CYCLE_PERIOD);
538 }
539
540
541 #define USB_STS_TIMEOUT 1000
542 #define USB_STS_RETRIES 5
543
544
545
546
547 static int get_hub_status(struct usb_device *hdev,
548 struct usb_hub_status *data)
549 {
550 int i, status = -ETIMEDOUT;
551
552 for (i = 0; i < USB_STS_RETRIES &&
553 (status == -ETIMEDOUT || status == -EPIPE); i++) {
554 status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
555 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0,
556 data, sizeof(*data), USB_STS_TIMEOUT);
557 }
558 return status;
559 }
560
561
562
563
564
565 static int get_port_status(struct usb_device *hdev, int port1,
566 void *data, u16 value, u16 length)
567 {
568 int i, status = -ETIMEDOUT;
569
570 for (i = 0; i < USB_STS_RETRIES &&
571 (status == -ETIMEDOUT || status == -EPIPE); i++) {
572 status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
573 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, value,
574 port1, data, length, USB_STS_TIMEOUT);
575 }
576 return status;
577 }
578
579 static int hub_ext_port_status(struct usb_hub *hub, int port1, int type,
580 u16 *status, u16 *change, u32 *ext_status)
581 {
582 int ret;
583 int len = 4;
584
585 if (type != HUB_PORT_STATUS)
586 len = 8;
587
588 mutex_lock(&hub->status_mutex);
589 ret = get_port_status(hub->hdev, port1, &hub->status->port, type, len);
590 if (ret < len) {
591 if (ret != -ENODEV)
592 dev_err(hub->intfdev,
593 "%s failed (err = %d)\n", __func__, ret);
594 if (ret >= 0)
595 ret = -EIO;
596 } else {
597 *status = le16_to_cpu(hub->status->port.wPortStatus);
598 *change = le16_to_cpu(hub->status->port.wPortChange);
599 if (type != HUB_PORT_STATUS && ext_status)
600 *ext_status = le32_to_cpu(
601 hub->status->port.dwExtPortStatus);
602 ret = 0;
603 }
604 mutex_unlock(&hub->status_mutex);
605 return ret;
606 }
607
608 static int hub_port_status(struct usb_hub *hub, int port1,
609 u16 *status, u16 *change)
610 {
611 return hub_ext_port_status(hub, port1, HUB_PORT_STATUS,
612 status, change, NULL);
613 }
614
615 static void hub_resubmit_irq_urb(struct usb_hub *hub)
616 {
617 unsigned long flags;
618 int status;
619
620 spin_lock_irqsave(&hub->irq_urb_lock, flags);
621
622 if (hub->quiescing) {
623 spin_unlock_irqrestore(&hub->irq_urb_lock, flags);
624 return;
625 }
626
627 status = usb_submit_urb(hub->urb, GFP_ATOMIC);
628 if (status && status != -ENODEV && status != -EPERM &&
629 status != -ESHUTDOWN) {
630 dev_err(hub->intfdev, "resubmit --> %d\n", status);
631 mod_timer(&hub->irq_urb_retry, jiffies + HZ);
632 }
633
634 spin_unlock_irqrestore(&hub->irq_urb_lock, flags);
635 }
636
637 static void hub_retry_irq_urb(struct timer_list *t)
638 {
639 struct usb_hub *hub = from_timer(hub, t, irq_urb_retry);
640
641 hub_resubmit_irq_urb(hub);
642 }
643
644
645 static void kick_hub_wq(struct usb_hub *hub)
646 {
647 struct usb_interface *intf;
648
649 if (hub->disconnected || work_pending(&hub->events))
650 return;
651
652
653
654
655
656
657
658
659
660 intf = to_usb_interface(hub->intfdev);
661 usb_autopm_get_interface_no_resume(intf);
662 kref_get(&hub->kref);
663
664 if (queue_work(hub_wq, &hub->events))
665 return;
666
667
668 usb_autopm_put_interface_async(intf);
669 kref_put(&hub->kref, hub_release);
670 }
671
672 void usb_kick_hub_wq(struct usb_device *hdev)
673 {
674 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
675
676 if (hub)
677 kick_hub_wq(hub);
678 }
679
680
681
682
683
684
685
686
687
688 void usb_wakeup_notification(struct usb_device *hdev,
689 unsigned int portnum)
690 {
691 struct usb_hub *hub;
692 struct usb_port *port_dev;
693
694 if (!hdev)
695 return;
696
697 hub = usb_hub_to_struct_hub(hdev);
698 if (hub) {
699 port_dev = hub->ports[portnum - 1];
700 if (port_dev && port_dev->child)
701 pm_wakeup_event(&port_dev->child->dev, 0);
702
703 set_bit(portnum, hub->wakeup_bits);
704 kick_hub_wq(hub);
705 }
706 }
707 EXPORT_SYMBOL_GPL(usb_wakeup_notification);
708
709
710 static void hub_irq(struct urb *urb)
711 {
712 struct usb_hub *hub = urb->context;
713 int status = urb->status;
714 unsigned i;
715 unsigned long bits;
716
717 switch (status) {
718 case -ENOENT:
719 case -ECONNRESET:
720 case -ESHUTDOWN:
721 return;
722
723 default:
724
725 dev_dbg(hub->intfdev, "transfer --> %d\n", status);
726 if ((++hub->nerrors < 10) || hub->error)
727 goto resubmit;
728 hub->error = status;
729
730
731
732 case 0:
733 bits = 0;
734 for (i = 0; i < urb->actual_length; ++i)
735 bits |= ((unsigned long) ((*hub->buffer)[i]))
736 << (i*8);
737 hub->event_bits[0] = bits;
738 break;
739 }
740
741 hub->nerrors = 0;
742
743
744 kick_hub_wq(hub);
745
746 resubmit:
747 hub_resubmit_irq_urb(hub);
748 }
749
750
751 static inline int
752 hub_clear_tt_buffer(struct usb_device *hdev, u16 devinfo, u16 tt)
753 {
754
755 if (((devinfo >> 11) & USB_ENDPOINT_XFERTYPE_MASK) ==
756 USB_ENDPOINT_XFER_CONTROL) {
757 int status = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
758 HUB_CLEAR_TT_BUFFER, USB_RT_PORT,
759 devinfo ^ 0x8000, tt, NULL, 0, 1000);
760 if (status)
761 return status;
762 }
763 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
764 HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
765 tt, NULL, 0, 1000);
766 }
767
768
769
770
771
772
773
774 static void hub_tt_work(struct work_struct *work)
775 {
776 struct usb_hub *hub =
777 container_of(work, struct usb_hub, tt.clear_work);
778 unsigned long flags;
779
780 spin_lock_irqsave(&hub->tt.lock, flags);
781 while (!list_empty(&hub->tt.clear_list)) {
782 struct list_head *next;
783 struct usb_tt_clear *clear;
784 struct usb_device *hdev = hub->hdev;
785 const struct hc_driver *drv;
786 int status;
787
788 next = hub->tt.clear_list.next;
789 clear = list_entry(next, struct usb_tt_clear, clear_list);
790 list_del(&clear->clear_list);
791
792
793 spin_unlock_irqrestore(&hub->tt.lock, flags);
794 status = hub_clear_tt_buffer(hdev, clear->devinfo, clear->tt);
795 if (status && status != -ENODEV)
796 dev_err(&hdev->dev,
797 "clear tt %d (%04x) error %d\n",
798 clear->tt, clear->devinfo, status);
799
800
801 drv = clear->hcd->driver;
802 if (drv->clear_tt_buffer_complete)
803 (drv->clear_tt_buffer_complete)(clear->hcd, clear->ep);
804
805 kfree(clear);
806 spin_lock_irqsave(&hub->tt.lock, flags);
807 }
808 spin_unlock_irqrestore(&hub->tt.lock, flags);
809 }
810
811
812
813
814
815
816
817
818
819
820
821
822
823 int usb_hub_set_port_power(struct usb_device *hdev, struct usb_hub *hub,
824 int port1, bool set)
825 {
826 int ret;
827
828 if (set)
829 ret = set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
830 else
831 ret = usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
832
833 if (ret)
834 return ret;
835
836 if (set)
837 set_bit(port1, hub->power_bits);
838 else
839 clear_bit(port1, hub->power_bits);
840 return 0;
841 }
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857 int usb_hub_clear_tt_buffer(struct urb *urb)
858 {
859 struct usb_device *udev = urb->dev;
860 int pipe = urb->pipe;
861 struct usb_tt *tt = udev->tt;
862 unsigned long flags;
863 struct usb_tt_clear *clear;
864
865
866
867
868
869 clear = kmalloc(sizeof *clear, GFP_ATOMIC);
870 if (clear == NULL) {
871 dev_err(&udev->dev, "can't save CLEAR_TT_BUFFER state\n");
872
873 return -ENOMEM;
874 }
875
876
877 clear->tt = tt->multi ? udev->ttport : 1;
878 clear->devinfo = usb_pipeendpoint (pipe);
879 clear->devinfo |= ((u16)udev->devaddr) << 4;
880 clear->devinfo |= usb_pipecontrol(pipe)
881 ? (USB_ENDPOINT_XFER_CONTROL << 11)
882 : (USB_ENDPOINT_XFER_BULK << 11);
883 if (usb_pipein(pipe))
884 clear->devinfo |= 1 << 15;
885
886
887 clear->hcd = bus_to_hcd(udev->bus);
888 clear->ep = urb->ep;
889
890
891 spin_lock_irqsave(&tt->lock, flags);
892 list_add_tail(&clear->clear_list, &tt->clear_list);
893 schedule_work(&tt->clear_work);
894 spin_unlock_irqrestore(&tt->lock, flags);
895 return 0;
896 }
897 EXPORT_SYMBOL_GPL(usb_hub_clear_tt_buffer);
898
899 static void hub_power_on(struct usb_hub *hub, bool do_delay)
900 {
901 int port1;
902
903
904
905
906
907
908
909 if (hub_is_port_power_switchable(hub))
910 dev_dbg(hub->intfdev, "enabling power on all ports\n");
911 else
912 dev_dbg(hub->intfdev, "trying to enable port power on "
913 "non-switchable hub\n");
914 for (port1 = 1; port1 <= hub->hdev->maxchild; port1++)
915 if (test_bit(port1, hub->power_bits))
916 set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER);
917 else
918 usb_clear_port_feature(hub->hdev, port1,
919 USB_PORT_FEAT_POWER);
920 if (do_delay)
921 msleep(hub_power_on_good_delay(hub));
922 }
923
924 static int hub_hub_status(struct usb_hub *hub,
925 u16 *status, u16 *change)
926 {
927 int ret;
928
929 mutex_lock(&hub->status_mutex);
930 ret = get_hub_status(hub->hdev, &hub->status->hub);
931 if (ret < 0) {
932 if (ret != -ENODEV)
933 dev_err(hub->intfdev,
934 "%s failed (err = %d)\n", __func__, ret);
935 } else {
936 *status = le16_to_cpu(hub->status->hub.wHubStatus);
937 *change = le16_to_cpu(hub->status->hub.wHubChange);
938 ret = 0;
939 }
940 mutex_unlock(&hub->status_mutex);
941 return ret;
942 }
943
944 static int hub_set_port_link_state(struct usb_hub *hub, int port1,
945 unsigned int link_status)
946 {
947 return set_port_feature(hub->hdev,
948 port1 | (link_status << 3),
949 USB_PORT_FEAT_LINK_STATE);
950 }
951
952
953
954
955
956
957 static void hub_port_logical_disconnect(struct usb_hub *hub, int port1)
958 {
959 dev_dbg(&hub->ports[port1 - 1]->dev, "logical disconnect\n");
960 hub_port_disable(hub, port1, 1);
961
962
963
964
965
966
967
968
969
970
971 set_bit(port1, hub->change_bits);
972 kick_hub_wq(hub);
973 }
974
975
976
977
978
979
980
981
982
983
984
985
986
987 int usb_remove_device(struct usb_device *udev)
988 {
989 struct usb_hub *hub;
990 struct usb_interface *intf;
991 int ret;
992
993 if (!udev->parent)
994 return -EINVAL;
995 hub = usb_hub_to_struct_hub(udev->parent);
996 intf = to_usb_interface(hub->intfdev);
997
998 ret = usb_autopm_get_interface(intf);
999 if (ret < 0)
1000 return ret;
1001
1002 set_bit(udev->portnum, hub->removed_bits);
1003 hub_port_logical_disconnect(hub, udev->portnum);
1004 usb_autopm_put_interface(intf);
1005 return 0;
1006 }
1007
1008 enum hub_activation_type {
1009 HUB_INIT, HUB_INIT2, HUB_INIT3,
1010 HUB_POST_RESET, HUB_RESUME, HUB_RESET_RESUME,
1011 };
1012
1013 static void hub_init_func2(struct work_struct *ws);
1014 static void hub_init_func3(struct work_struct *ws);
1015
1016 static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
1017 {
1018 struct usb_device *hdev = hub->hdev;
1019 struct usb_hcd *hcd;
1020 int ret;
1021 int port1;
1022 int status;
1023 bool need_debounce_delay = false;
1024 unsigned delay;
1025
1026
1027 if (type == HUB_INIT2 || type == HUB_INIT3) {
1028 device_lock(&hdev->dev);
1029
1030
1031 if (hub->disconnected)
1032 goto disconnected;
1033 if (type == HUB_INIT2)
1034 goto init2;
1035 goto init3;
1036 }
1037 kref_get(&hub->kref);
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049 if (type != HUB_RESUME) {
1050 if (hdev->parent && hub_is_superspeed(hdev)) {
1051 ret = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
1052 HUB_SET_DEPTH, USB_RT_HUB,
1053 hdev->level - 1, 0, NULL, 0,
1054 USB_CTRL_SET_TIMEOUT);
1055 if (ret < 0)
1056 dev_err(hub->intfdev,
1057 "set hub depth failed\n");
1058 }
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072 if (type == HUB_INIT) {
1073 delay = hub_power_on_good_delay(hub);
1074
1075 hub_power_on(hub, false);
1076 INIT_DELAYED_WORK(&hub->init_work, hub_init_func2);
1077 queue_delayed_work(system_power_efficient_wq,
1078 &hub->init_work,
1079 msecs_to_jiffies(delay));
1080
1081
1082 usb_autopm_get_interface_no_resume(
1083 to_usb_interface(hub->intfdev));
1084 return;
1085 } else if (type == HUB_RESET_RESUME) {
1086
1087
1088
1089
1090 hcd = bus_to_hcd(hdev->bus);
1091 if (hcd->driver->update_hub_device) {
1092 ret = hcd->driver->update_hub_device(hcd, hdev,
1093 &hub->tt, GFP_NOIO);
1094 if (ret < 0) {
1095 dev_err(hub->intfdev,
1096 "Host not accepting hub info update\n");
1097 dev_err(hub->intfdev,
1098 "LS/FS devices and hubs may not work under this hub\n");
1099 }
1100 }
1101 hub_power_on(hub, true);
1102 } else {
1103 hub_power_on(hub, true);
1104 }
1105 }
1106 init2:
1107
1108
1109
1110
1111
1112 for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
1113 struct usb_port *port_dev = hub->ports[port1 - 1];
1114 struct usb_device *udev = port_dev->child;
1115 u16 portstatus, portchange;
1116
1117 portstatus = portchange = 0;
1118 status = hub_port_status(hub, port1, &portstatus, &portchange);
1119 if (status)
1120 goto abort;
1121
1122 if (udev || (portstatus & USB_PORT_STAT_CONNECTION))
1123 dev_dbg(&port_dev->dev, "status %04x change %04x\n",
1124 portstatus, portchange);
1125
1126
1127
1128
1129
1130
1131
1132 if ((portstatus & USB_PORT_STAT_ENABLE) && (
1133 type != HUB_RESUME ||
1134 !(portstatus & USB_PORT_STAT_CONNECTION) ||
1135 !udev ||
1136 udev->state == USB_STATE_NOTATTACHED)) {
1137
1138
1139
1140
1141
1142
1143 portstatus &= ~USB_PORT_STAT_ENABLE;
1144 if (!hub_is_superspeed(hdev))
1145 usb_clear_port_feature(hdev, port1,
1146 USB_PORT_FEAT_ENABLE);
1147 }
1148
1149
1150 if (type == HUB_RESUME &&
1151 hub_port_warm_reset_required(hub, port1, portstatus))
1152 set_bit(port1, hub->event_bits);
1153
1154
1155
1156
1157
1158
1159 if (hub_is_superspeed(hdev) &&
1160 ((portstatus & USB_PORT_STAT_LINK_STATE) ==
1161 USB_SS_PORT_LS_POLLING))
1162 need_debounce_delay = true;
1163
1164
1165 if (portchange & USB_PORT_STAT_C_CONNECTION) {
1166 need_debounce_delay = true;
1167 usb_clear_port_feature(hub->hdev, port1,
1168 USB_PORT_FEAT_C_CONNECTION);
1169 }
1170 if (portchange & USB_PORT_STAT_C_ENABLE) {
1171 need_debounce_delay = true;
1172 usb_clear_port_feature(hub->hdev, port1,
1173 USB_PORT_FEAT_C_ENABLE);
1174 }
1175 if (portchange & USB_PORT_STAT_C_RESET) {
1176 need_debounce_delay = true;
1177 usb_clear_port_feature(hub->hdev, port1,
1178 USB_PORT_FEAT_C_RESET);
1179 }
1180 if ((portchange & USB_PORT_STAT_C_BH_RESET) &&
1181 hub_is_superspeed(hub->hdev)) {
1182 need_debounce_delay = true;
1183 usb_clear_port_feature(hub->hdev, port1,
1184 USB_PORT_FEAT_C_BH_PORT_RESET);
1185 }
1186
1187
1188
1189 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
1190 (portchange & USB_PORT_STAT_C_CONNECTION))
1191 clear_bit(port1, hub->removed_bits);
1192
1193 if (!udev || udev->state == USB_STATE_NOTATTACHED) {
1194
1195
1196
1197
1198
1199
1200 if (udev || (portstatus & USB_PORT_STAT_CONNECTION) ||
1201 (portchange & USB_PORT_STAT_C_CONNECTION) ||
1202 (portstatus & USB_PORT_STAT_OVERCURRENT) ||
1203 (portchange & USB_PORT_STAT_C_OVERCURRENT))
1204 set_bit(port1, hub->change_bits);
1205
1206 } else if (portstatus & USB_PORT_STAT_ENABLE) {
1207 bool port_resumed = (portstatus &
1208 USB_PORT_STAT_LINK_STATE) ==
1209 USB_SS_PORT_LS_U0;
1210
1211
1212
1213
1214
1215
1216
1217
1218 if (portchange || (hub_is_superspeed(hub->hdev) &&
1219 port_resumed))
1220 set_bit(port1, hub->change_bits);
1221
1222 } else if (udev->persist_enabled) {
1223 #ifdef CONFIG_PM
1224 udev->reset_resume = 1;
1225 #endif
1226
1227
1228
1229 if (test_bit(port1, hub->power_bits))
1230 set_bit(port1, hub->change_bits);
1231
1232 } else {
1233
1234 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
1235 set_bit(port1, hub->change_bits);
1236 }
1237 }
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247 if (need_debounce_delay) {
1248 delay = HUB_DEBOUNCE_STABLE;
1249
1250
1251 if (type == HUB_INIT2) {
1252 INIT_DELAYED_WORK(&hub->init_work, hub_init_func3);
1253 queue_delayed_work(system_power_efficient_wq,
1254 &hub->init_work,
1255 msecs_to_jiffies(delay));
1256 device_unlock(&hdev->dev);
1257 return;
1258 } else {
1259 msleep(delay);
1260 }
1261 }
1262 init3:
1263 hub->quiescing = 0;
1264
1265 status = usb_submit_urb(hub->urb, GFP_NOIO);
1266 if (status < 0)
1267 dev_err(hub->intfdev, "activate --> %d\n", status);
1268 if (hub->has_indicators && blinkenlights)
1269 queue_delayed_work(system_power_efficient_wq,
1270 &hub->leds, LED_CYCLE_PERIOD);
1271
1272
1273 kick_hub_wq(hub);
1274 abort:
1275 if (type == HUB_INIT2 || type == HUB_INIT3) {
1276
1277 disconnected:
1278 usb_autopm_put_interface_async(to_usb_interface(hub->intfdev));
1279 device_unlock(&hdev->dev);
1280 }
1281
1282 kref_put(&hub->kref, hub_release);
1283 }
1284
1285
1286 static void hub_init_func2(struct work_struct *ws)
1287 {
1288 struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work);
1289
1290 hub_activate(hub, HUB_INIT2);
1291 }
1292
1293 static void hub_init_func3(struct work_struct *ws)
1294 {
1295 struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work);
1296
1297 hub_activate(hub, HUB_INIT3);
1298 }
1299
1300 enum hub_quiescing_type {
1301 HUB_DISCONNECT, HUB_PRE_RESET, HUB_SUSPEND
1302 };
1303
1304 static void hub_quiesce(struct usb_hub *hub, enum hub_quiescing_type type)
1305 {
1306 struct usb_device *hdev = hub->hdev;
1307 unsigned long flags;
1308 int i;
1309
1310
1311 spin_lock_irqsave(&hub->irq_urb_lock, flags);
1312 hub->quiescing = 1;
1313 spin_unlock_irqrestore(&hub->irq_urb_lock, flags);
1314
1315 if (type != HUB_SUSPEND) {
1316
1317 for (i = 0; i < hdev->maxchild; ++i) {
1318 if (hub->ports[i]->child)
1319 usb_disconnect(&hub->ports[i]->child);
1320 }
1321 }
1322
1323
1324 del_timer_sync(&hub->irq_urb_retry);
1325 usb_kill_urb(hub->urb);
1326 if (hub->has_indicators)
1327 cancel_delayed_work_sync(&hub->leds);
1328 if (hub->tt.hub)
1329 flush_work(&hub->tt.clear_work);
1330 }
1331
1332 static void hub_pm_barrier_for_all_ports(struct usb_hub *hub)
1333 {
1334 int i;
1335
1336 for (i = 0; i < hub->hdev->maxchild; ++i)
1337 pm_runtime_barrier(&hub->ports[i]->dev);
1338 }
1339
1340
1341 static int hub_pre_reset(struct usb_interface *intf)
1342 {
1343 struct usb_hub *hub = usb_get_intfdata(intf);
1344
1345 hub_quiesce(hub, HUB_PRE_RESET);
1346 hub->in_reset = 1;
1347 hub_pm_barrier_for_all_ports(hub);
1348 return 0;
1349 }
1350
1351
1352 static int hub_post_reset(struct usb_interface *intf)
1353 {
1354 struct usb_hub *hub = usb_get_intfdata(intf);
1355
1356 hub->in_reset = 0;
1357 hub_pm_barrier_for_all_ports(hub);
1358 hub_activate(hub, HUB_POST_RESET);
1359 return 0;
1360 }
1361
1362 static int hub_configure(struct usb_hub *hub,
1363 struct usb_endpoint_descriptor *endpoint)
1364 {
1365 struct usb_hcd *hcd;
1366 struct usb_device *hdev = hub->hdev;
1367 struct device *hub_dev = hub->intfdev;
1368 u16 hubstatus, hubchange;
1369 u16 wHubCharacteristics;
1370 unsigned int pipe;
1371 int maxp, ret, i;
1372 char *message = "out of memory";
1373 unsigned unit_load;
1374 unsigned full_load;
1375 unsigned maxchild;
1376
1377 hub->buffer = kmalloc(sizeof(*hub->buffer), GFP_KERNEL);
1378 if (!hub->buffer) {
1379 ret = -ENOMEM;
1380 goto fail;
1381 }
1382
1383 hub->status = kmalloc(sizeof(*hub->status), GFP_KERNEL);
1384 if (!hub->status) {
1385 ret = -ENOMEM;
1386 goto fail;
1387 }
1388 mutex_init(&hub->status_mutex);
1389
1390 hub->descriptor = kzalloc(sizeof(*hub->descriptor), GFP_KERNEL);
1391 if (!hub->descriptor) {
1392 ret = -ENOMEM;
1393 goto fail;
1394 }
1395
1396
1397
1398
1399
1400 ret = get_hub_descriptor(hdev, hub->descriptor);
1401 if (ret < 0) {
1402 message = "can't read hub descriptor";
1403 goto fail;
1404 }
1405
1406 maxchild = USB_MAXCHILDREN;
1407 if (hub_is_superspeed(hdev))
1408 maxchild = min_t(unsigned, maxchild, USB_SS_MAXPORTS);
1409
1410 if (hub->descriptor->bNbrPorts > maxchild) {
1411 message = "hub has too many ports!";
1412 ret = -ENODEV;
1413 goto fail;
1414 } else if (hub->descriptor->bNbrPorts == 0) {
1415 message = "hub doesn't have any ports!";
1416 ret = -ENODEV;
1417 goto fail;
1418 }
1419
1420
1421
1422
1423
1424 if (hub_is_superspeed(hdev) || hub_is_superspeedplus(hdev)) {
1425 u32 delay = __le16_to_cpu(hub->descriptor->u.ss.wHubDelay);
1426
1427 if (hdev->parent)
1428 delay += hdev->parent->hub_delay;
1429
1430 delay += USB_TP_TRANSMISSION_DELAY;
1431 hdev->hub_delay = min_t(u32, delay, USB_TP_TRANSMISSION_DELAY_MAX);
1432 }
1433
1434 maxchild = hub->descriptor->bNbrPorts;
1435 dev_info(hub_dev, "%d port%s detected\n", maxchild,
1436 (maxchild == 1) ? "" : "s");
1437
1438 hub->ports = kcalloc(maxchild, sizeof(struct usb_port *), GFP_KERNEL);
1439 if (!hub->ports) {
1440 ret = -ENOMEM;
1441 goto fail;
1442 }
1443
1444 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics);
1445 if (hub_is_superspeed(hdev)) {
1446 unit_load = 150;
1447 full_load = 900;
1448 } else {
1449 unit_load = 100;
1450 full_load = 500;
1451 }
1452
1453
1454 if ((wHubCharacteristics & HUB_CHAR_COMPOUND) &&
1455 !(hub_is_superspeed(hdev))) {
1456 char portstr[USB_MAXCHILDREN + 1];
1457
1458 for (i = 0; i < maxchild; i++)
1459 portstr[i] = hub->descriptor->u.hs.DeviceRemovable
1460 [((i + 1) / 8)] & (1 << ((i + 1) % 8))
1461 ? 'F' : 'R';
1462 portstr[maxchild] = 0;
1463 dev_dbg(hub_dev, "compound device; port removable status: %s\n", portstr);
1464 } else
1465 dev_dbg(hub_dev, "standalone hub\n");
1466
1467 switch (wHubCharacteristics & HUB_CHAR_LPSM) {
1468 case HUB_CHAR_COMMON_LPSM:
1469 dev_dbg(hub_dev, "ganged power switching\n");
1470 break;
1471 case HUB_CHAR_INDV_PORT_LPSM:
1472 dev_dbg(hub_dev, "individual port power switching\n");
1473 break;
1474 case HUB_CHAR_NO_LPSM:
1475 case HUB_CHAR_LPSM:
1476 dev_dbg(hub_dev, "no power switching (usb 1.0)\n");
1477 break;
1478 }
1479
1480 switch (wHubCharacteristics & HUB_CHAR_OCPM) {
1481 case HUB_CHAR_COMMON_OCPM:
1482 dev_dbg(hub_dev, "global over-current protection\n");
1483 break;
1484 case HUB_CHAR_INDV_PORT_OCPM:
1485 dev_dbg(hub_dev, "individual port over-current protection\n");
1486 break;
1487 case HUB_CHAR_NO_OCPM:
1488 case HUB_CHAR_OCPM:
1489 dev_dbg(hub_dev, "no over-current protection\n");
1490 break;
1491 }
1492
1493 spin_lock_init(&hub->tt.lock);
1494 INIT_LIST_HEAD(&hub->tt.clear_list);
1495 INIT_WORK(&hub->tt.clear_work, hub_tt_work);
1496 switch (hdev->descriptor.bDeviceProtocol) {
1497 case USB_HUB_PR_FS:
1498 break;
1499 case USB_HUB_PR_HS_SINGLE_TT:
1500 dev_dbg(hub_dev, "Single TT\n");
1501 hub->tt.hub = hdev;
1502 break;
1503 case USB_HUB_PR_HS_MULTI_TT:
1504 ret = usb_set_interface(hdev, 0, 1);
1505 if (ret == 0) {
1506 dev_dbg(hub_dev, "TT per port\n");
1507 hub->tt.multi = 1;
1508 } else
1509 dev_err(hub_dev, "Using single TT (err %d)\n",
1510 ret);
1511 hub->tt.hub = hdev;
1512 break;
1513 case USB_HUB_PR_SS:
1514
1515 break;
1516 default:
1517 dev_dbg(hub_dev, "Unrecognized hub protocol %d\n",
1518 hdev->descriptor.bDeviceProtocol);
1519 break;
1520 }
1521
1522
1523 switch (wHubCharacteristics & HUB_CHAR_TTTT) {
1524 case HUB_TTTT_8_BITS:
1525 if (hdev->descriptor.bDeviceProtocol != 0) {
1526 hub->tt.think_time = 666;
1527 dev_dbg(hub_dev, "TT requires at most %d "
1528 "FS bit times (%d ns)\n",
1529 8, hub->tt.think_time);
1530 }
1531 break;
1532 case HUB_TTTT_16_BITS:
1533 hub->tt.think_time = 666 * 2;
1534 dev_dbg(hub_dev, "TT requires at most %d "
1535 "FS bit times (%d ns)\n",
1536 16, hub->tt.think_time);
1537 break;
1538 case HUB_TTTT_24_BITS:
1539 hub->tt.think_time = 666 * 3;
1540 dev_dbg(hub_dev, "TT requires at most %d "
1541 "FS bit times (%d ns)\n",
1542 24, hub->tt.think_time);
1543 break;
1544 case HUB_TTTT_32_BITS:
1545 hub->tt.think_time = 666 * 4;
1546 dev_dbg(hub_dev, "TT requires at most %d "
1547 "FS bit times (%d ns)\n",
1548 32, hub->tt.think_time);
1549 break;
1550 }
1551
1552
1553 if (wHubCharacteristics & HUB_CHAR_PORTIND) {
1554 hub->has_indicators = 1;
1555 dev_dbg(hub_dev, "Port indicators are supported\n");
1556 }
1557
1558 dev_dbg(hub_dev, "power on to power good time: %dms\n",
1559 hub->descriptor->bPwrOn2PwrGood * 2);
1560
1561
1562
1563
1564 ret = usb_get_std_status(hdev, USB_RECIP_DEVICE, 0, &hubstatus);
1565 if (ret) {
1566 message = "can't get hub status";
1567 goto fail;
1568 }
1569 hcd = bus_to_hcd(hdev->bus);
1570 if (hdev == hdev->bus->root_hub) {
1571 if (hcd->power_budget > 0)
1572 hdev->bus_mA = hcd->power_budget;
1573 else
1574 hdev->bus_mA = full_load * maxchild;
1575 if (hdev->bus_mA >= full_load)
1576 hub->mA_per_port = full_load;
1577 else {
1578 hub->mA_per_port = hdev->bus_mA;
1579 hub->limited_power = 1;
1580 }
1581 } else if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
1582 int remaining = hdev->bus_mA -
1583 hub->descriptor->bHubContrCurrent;
1584
1585 dev_dbg(hub_dev, "hub controller current requirement: %dmA\n",
1586 hub->descriptor->bHubContrCurrent);
1587 hub->limited_power = 1;
1588
1589 if (remaining < maxchild * unit_load)
1590 dev_warn(hub_dev,
1591 "insufficient power available "
1592 "to use all downstream ports\n");
1593 hub->mA_per_port = unit_load;
1594
1595 } else {
1596
1597
1598 hub->mA_per_port = full_load;
1599 }
1600 if (hub->mA_per_port < full_load)
1601 dev_dbg(hub_dev, "%umA bus power budget for each child\n",
1602 hub->mA_per_port);
1603
1604 ret = hub_hub_status(hub, &hubstatus, &hubchange);
1605 if (ret < 0) {
1606 message = "can't get hub status";
1607 goto fail;
1608 }
1609
1610
1611 if (hdev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER)
1612 dev_dbg(hub_dev, "local power source is %s\n",
1613 (hubstatus & HUB_STATUS_LOCAL_POWER)
1614 ? "lost (inactive)" : "good");
1615
1616 if ((wHubCharacteristics & HUB_CHAR_OCPM) == 0)
1617 dev_dbg(hub_dev, "%sover-current condition exists\n",
1618 (hubstatus & HUB_STATUS_OVERCURRENT) ? "" : "no ");
1619
1620
1621
1622
1623
1624
1625
1626 pipe = usb_rcvintpipe(hdev, endpoint->bEndpointAddress);
1627 maxp = usb_maxpacket(hdev, pipe, usb_pipeout(pipe));
1628
1629 if (maxp > sizeof(*hub->buffer))
1630 maxp = sizeof(*hub->buffer);
1631
1632 hub->urb = usb_alloc_urb(0, GFP_KERNEL);
1633 if (!hub->urb) {
1634 ret = -ENOMEM;
1635 goto fail;
1636 }
1637
1638 usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq,
1639 hub, endpoint->bInterval);
1640
1641
1642 if (hub->has_indicators && blinkenlights)
1643 hub->indicator[0] = INDICATOR_CYCLE;
1644
1645 mutex_lock(&usb_port_peer_mutex);
1646 for (i = 0; i < maxchild; i++) {
1647 ret = usb_hub_create_port_device(hub, i + 1);
1648 if (ret < 0) {
1649 dev_err(hub->intfdev,
1650 "couldn't create port%d device.\n", i + 1);
1651 break;
1652 }
1653 }
1654 hdev->maxchild = i;
1655 for (i = 0; i < hdev->maxchild; i++) {
1656 struct usb_port *port_dev = hub->ports[i];
1657
1658 pm_runtime_put(&port_dev->dev);
1659 }
1660
1661 mutex_unlock(&usb_port_peer_mutex);
1662 if (ret < 0)
1663 goto fail;
1664
1665
1666
1667
1668 if (hcd->driver->update_hub_device) {
1669 ret = hcd->driver->update_hub_device(hcd, hdev,
1670 &hub->tt, GFP_KERNEL);
1671 if (ret < 0) {
1672 message = "can't update HCD hub info";
1673 goto fail;
1674 }
1675 }
1676
1677 usb_hub_adjust_deviceremovable(hdev, hub->descriptor);
1678
1679 hub_activate(hub, HUB_INIT);
1680 return 0;
1681
1682 fail:
1683 dev_err(hub_dev, "config failed, %s (err %d)\n",
1684 message, ret);
1685
1686 return ret;
1687 }
1688
1689 static void hub_release(struct kref *kref)
1690 {
1691 struct usb_hub *hub = container_of(kref, struct usb_hub, kref);
1692
1693 usb_put_dev(hub->hdev);
1694 usb_put_intf(to_usb_interface(hub->intfdev));
1695 kfree(hub);
1696 }
1697
1698 static unsigned highspeed_hubs;
1699
1700 static void hub_disconnect(struct usb_interface *intf)
1701 {
1702 struct usb_hub *hub = usb_get_intfdata(intf);
1703 struct usb_device *hdev = interface_to_usbdev(intf);
1704 int port1;
1705
1706
1707
1708
1709
1710 hub->disconnected = 1;
1711
1712
1713 hub->error = 0;
1714 hub_quiesce(hub, HUB_DISCONNECT);
1715
1716 mutex_lock(&usb_port_peer_mutex);
1717
1718
1719 spin_lock_irq(&device_state_lock);
1720 port1 = hdev->maxchild;
1721 hdev->maxchild = 0;
1722 usb_set_intfdata(intf, NULL);
1723 spin_unlock_irq(&device_state_lock);
1724
1725 for (; port1 > 0; --port1)
1726 usb_hub_remove_port_device(hub, port1);
1727
1728 mutex_unlock(&usb_port_peer_mutex);
1729
1730 if (hub->hdev->speed == USB_SPEED_HIGH)
1731 highspeed_hubs--;
1732
1733 usb_free_urb(hub->urb);
1734 kfree(hub->ports);
1735 kfree(hub->descriptor);
1736 kfree(hub->status);
1737 kfree(hub->buffer);
1738
1739 pm_suspend_ignore_children(&intf->dev, false);
1740
1741 if (hub->quirk_disable_autosuspend)
1742 usb_autopm_put_interface(intf);
1743
1744 kref_put(&hub->kref, hub_release);
1745 }
1746
1747 static bool hub_descriptor_is_sane(struct usb_host_interface *desc)
1748 {
1749
1750
1751 if (desc->desc.bInterfaceSubClass != 0 &&
1752 desc->desc.bInterfaceSubClass != 1)
1753 return false;
1754
1755
1756 if (desc->desc.bNumEndpoints != 1)
1757 return false;
1758
1759
1760 if (!usb_endpoint_is_int_in(&desc->endpoint[0].desc))
1761 return false;
1762
1763 return true;
1764 }
1765
1766 static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
1767 {
1768 struct usb_host_interface *desc;
1769 struct usb_device *hdev;
1770 struct usb_hub *hub;
1771
1772 desc = intf->cur_altsetting;
1773 hdev = interface_to_usbdev(intf);
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811 #ifdef CONFIG_PM
1812 if (hdev->dev.power.autosuspend_delay >= 0)
1813 pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
1814 #endif
1815
1816
1817
1818
1819
1820
1821 if (hdev->parent) {
1822 usb_enable_autosuspend(hdev);
1823 } else {
1824 const struct hc_driver *drv = bus_to_hcd(hdev->bus)->driver;
1825
1826 if (drv->bus_suspend && drv->bus_resume)
1827 usb_enable_autosuspend(hdev);
1828 }
1829
1830 if (hdev->level == MAX_TOPO_LEVEL) {
1831 dev_err(&intf->dev,
1832 "Unsupported bus topology: hub nested too deep\n");
1833 return -E2BIG;
1834 }
1835
1836 #ifdef CONFIG_USB_OTG_BLACKLIST_HUB
1837 if (hdev->parent) {
1838 dev_warn(&intf->dev, "ignoring external hub\n");
1839 return -ENODEV;
1840 }
1841 #endif
1842
1843 if (!hub_descriptor_is_sane(desc)) {
1844 dev_err(&intf->dev, "bad descriptor, ignoring hub\n");
1845 return -EIO;
1846 }
1847
1848
1849 dev_info(&intf->dev, "USB hub found\n");
1850
1851 hub = kzalloc(sizeof(*hub), GFP_KERNEL);
1852 if (!hub)
1853 return -ENOMEM;
1854
1855 kref_init(&hub->kref);
1856 hub->intfdev = &intf->dev;
1857 hub->hdev = hdev;
1858 INIT_DELAYED_WORK(&hub->leds, led_work);
1859 INIT_DELAYED_WORK(&hub->init_work, NULL);
1860 INIT_WORK(&hub->events, hub_event);
1861 spin_lock_init(&hub->irq_urb_lock);
1862 timer_setup(&hub->irq_urb_retry, hub_retry_irq_urb, 0);
1863 usb_get_intf(intf);
1864 usb_get_dev(hdev);
1865
1866 usb_set_intfdata(intf, hub);
1867 intf->needs_remote_wakeup = 1;
1868 pm_suspend_ignore_children(&intf->dev, true);
1869
1870 if (hdev->speed == USB_SPEED_HIGH)
1871 highspeed_hubs++;
1872
1873 if (id->driver_info & HUB_QUIRK_CHECK_PORT_AUTOSUSPEND)
1874 hub->quirk_check_port_auto_suspend = 1;
1875
1876 if (id->driver_info & HUB_QUIRK_DISABLE_AUTOSUSPEND) {
1877 hub->quirk_disable_autosuspend = 1;
1878 usb_autopm_get_interface_no_resume(intf);
1879 }
1880
1881 if (hub_configure(hub, &desc->endpoint[0].desc) >= 0)
1882 return 0;
1883
1884 hub_disconnect(intf);
1885 return -ENODEV;
1886 }
1887
1888 static int
1889 hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data)
1890 {
1891 struct usb_device *hdev = interface_to_usbdev(intf);
1892 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
1893
1894
1895 switch (code) {
1896 case USBDEVFS_HUB_PORTINFO: {
1897 struct usbdevfs_hub_portinfo *info = user_data;
1898 int i;
1899
1900 spin_lock_irq(&device_state_lock);
1901 if (hdev->devnum <= 0)
1902 info->nports = 0;
1903 else {
1904 info->nports = hdev->maxchild;
1905 for (i = 0; i < info->nports; i++) {
1906 if (hub->ports[i]->child == NULL)
1907 info->port[i] = 0;
1908 else
1909 info->port[i] =
1910 hub->ports[i]->child->devnum;
1911 }
1912 }
1913 spin_unlock_irq(&device_state_lock);
1914
1915 return info->nports + 1;
1916 }
1917
1918 default:
1919 return -ENOSYS;
1920 }
1921 }
1922
1923
1924
1925
1926
1927 static int find_port_owner(struct usb_device *hdev, unsigned port1,
1928 struct usb_dev_state ***ppowner)
1929 {
1930 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
1931
1932 if (hdev->state == USB_STATE_NOTATTACHED)
1933 return -ENODEV;
1934 if (port1 == 0 || port1 > hdev->maxchild)
1935 return -EINVAL;
1936
1937
1938
1939
1940 *ppowner = &(hub->ports[port1 - 1]->port_owner);
1941 return 0;
1942 }
1943
1944
1945 int usb_hub_claim_port(struct usb_device *hdev, unsigned port1,
1946 struct usb_dev_state *owner)
1947 {
1948 int rc;
1949 struct usb_dev_state **powner;
1950
1951 rc = find_port_owner(hdev, port1, &powner);
1952 if (rc)
1953 return rc;
1954 if (*powner)
1955 return -EBUSY;
1956 *powner = owner;
1957 return rc;
1958 }
1959 EXPORT_SYMBOL_GPL(usb_hub_claim_port);
1960
1961 int usb_hub_release_port(struct usb_device *hdev, unsigned port1,
1962 struct usb_dev_state *owner)
1963 {
1964 int rc;
1965 struct usb_dev_state **powner;
1966
1967 rc = find_port_owner(hdev, port1, &powner);
1968 if (rc)
1969 return rc;
1970 if (*powner != owner)
1971 return -ENOENT;
1972 *powner = NULL;
1973 return rc;
1974 }
1975 EXPORT_SYMBOL_GPL(usb_hub_release_port);
1976
1977 void usb_hub_release_all_ports(struct usb_device *hdev, struct usb_dev_state *owner)
1978 {
1979 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
1980 int n;
1981
1982 for (n = 0; n < hdev->maxchild; n++) {
1983 if (hub->ports[n]->port_owner == owner)
1984 hub->ports[n]->port_owner = NULL;
1985 }
1986
1987 }
1988
1989
1990 bool usb_device_is_owned(struct usb_device *udev)
1991 {
1992 struct usb_hub *hub;
1993
1994 if (udev->state == USB_STATE_NOTATTACHED || !udev->parent)
1995 return false;
1996 hub = usb_hub_to_struct_hub(udev->parent);
1997 return !!hub->ports[udev->portnum - 1]->port_owner;
1998 }
1999
2000 static void recursively_mark_NOTATTACHED(struct usb_device *udev)
2001 {
2002 struct usb_hub *hub = usb_hub_to_struct_hub(udev);
2003 int i;
2004
2005 for (i = 0; i < udev->maxchild; ++i) {
2006 if (hub->ports[i]->child)
2007 recursively_mark_NOTATTACHED(hub->ports[i]->child);
2008 }
2009 if (udev->state == USB_STATE_SUSPENDED)
2010 udev->active_duration -= jiffies;
2011 udev->state = USB_STATE_NOTATTACHED;
2012 }
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035 void usb_set_device_state(struct usb_device *udev,
2036 enum usb_device_state new_state)
2037 {
2038 unsigned long flags;
2039 int wakeup = -1;
2040
2041 spin_lock_irqsave(&device_state_lock, flags);
2042 if (udev->state == USB_STATE_NOTATTACHED)
2043 ;
2044 else if (new_state != USB_STATE_NOTATTACHED) {
2045
2046
2047
2048
2049 if (udev->parent) {
2050 if (udev->state == USB_STATE_SUSPENDED
2051 || new_state == USB_STATE_SUSPENDED)
2052 ;
2053 else if (new_state == USB_STATE_CONFIGURED)
2054 wakeup = (udev->quirks &
2055 USB_QUIRK_IGNORE_REMOTE_WAKEUP) ? 0 :
2056 udev->actconfig->desc.bmAttributes &
2057 USB_CONFIG_ATT_WAKEUP;
2058 else
2059 wakeup = 0;
2060 }
2061 if (udev->state == USB_STATE_SUSPENDED &&
2062 new_state != USB_STATE_SUSPENDED)
2063 udev->active_duration -= jiffies;
2064 else if (new_state == USB_STATE_SUSPENDED &&
2065 udev->state != USB_STATE_SUSPENDED)
2066 udev->active_duration += jiffies;
2067 udev->state = new_state;
2068 } else
2069 recursively_mark_NOTATTACHED(udev);
2070 spin_unlock_irqrestore(&device_state_lock, flags);
2071 if (wakeup >= 0)
2072 device_set_wakeup_capable(&udev->dev, wakeup);
2073 }
2074 EXPORT_SYMBOL_GPL(usb_set_device_state);
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105 static void choose_devnum(struct usb_device *udev)
2106 {
2107 int devnum;
2108 struct usb_bus *bus = udev->bus;
2109
2110
2111 mutex_lock(&bus->devnum_next_mutex);
2112 if (udev->wusb) {
2113 devnum = udev->portnum + 1;
2114 BUG_ON(test_bit(devnum, bus->devmap.devicemap));
2115 } else {
2116
2117
2118 devnum = find_next_zero_bit(bus->devmap.devicemap, 128,
2119 bus->devnum_next);
2120 if (devnum >= 128)
2121 devnum = find_next_zero_bit(bus->devmap.devicemap,
2122 128, 1);
2123 bus->devnum_next = (devnum >= 127 ? 1 : devnum + 1);
2124 }
2125 if (devnum < 128) {
2126 set_bit(devnum, bus->devmap.devicemap);
2127 udev->devnum = devnum;
2128 }
2129 mutex_unlock(&bus->devnum_next_mutex);
2130 }
2131
2132 static void release_devnum(struct usb_device *udev)
2133 {
2134 if (udev->devnum > 0) {
2135 clear_bit(udev->devnum, udev->bus->devmap.devicemap);
2136 udev->devnum = -1;
2137 }
2138 }
2139
2140 static void update_devnum(struct usb_device *udev, int devnum)
2141 {
2142
2143 if (!udev->wusb)
2144 udev->devnum = devnum;
2145 if (!udev->devaddr)
2146 udev->devaddr = (u8)devnum;
2147 }
2148
2149 static void hub_free_dev(struct usb_device *udev)
2150 {
2151 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2152
2153
2154 if (hcd->driver->free_dev && udev->parent)
2155 hcd->driver->free_dev(hcd, udev);
2156 }
2157
2158 static void hub_disconnect_children(struct usb_device *udev)
2159 {
2160 struct usb_hub *hub = usb_hub_to_struct_hub(udev);
2161 int i;
2162
2163
2164 for (i = 0; i < udev->maxchild; i++) {
2165 if (hub->ports[i]->child)
2166 usb_disconnect(&hub->ports[i]->child);
2167 }
2168 }
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186 void usb_disconnect(struct usb_device **pdev)
2187 {
2188 struct usb_port *port_dev = NULL;
2189 struct usb_device *udev = *pdev;
2190 struct usb_hub *hub = NULL;
2191 int port1 = 1;
2192
2193
2194
2195
2196
2197 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
2198 dev_info(&udev->dev, "USB disconnect, device number %d\n",
2199 udev->devnum);
2200
2201
2202
2203
2204
2205 pm_runtime_barrier(&udev->dev);
2206
2207 usb_lock_device(udev);
2208
2209 hub_disconnect_children(udev);
2210
2211
2212
2213
2214
2215 dev_dbg(&udev->dev, "unregistering device\n");
2216 usb_disable_device(udev, 0);
2217 usb_hcd_synchronize_unlinks(udev);
2218
2219 if (udev->parent) {
2220 port1 = udev->portnum;
2221 hub = usb_hub_to_struct_hub(udev->parent);
2222 port_dev = hub->ports[port1 - 1];
2223
2224 sysfs_remove_link(&udev->dev.kobj, "port");
2225 sysfs_remove_link(&port_dev->dev.kobj, "device");
2226
2227
2228
2229
2230
2231 if (!test_and_set_bit(port1, hub->child_usage_bits))
2232 pm_runtime_get_sync(&port_dev->dev);
2233 }
2234
2235 usb_remove_ep_devs(&udev->ep0);
2236 usb_unlock_device(udev);
2237
2238
2239
2240
2241
2242 device_del(&udev->dev);
2243
2244
2245
2246
2247 release_devnum(udev);
2248
2249
2250 spin_lock_irq(&device_state_lock);
2251 *pdev = NULL;
2252 spin_unlock_irq(&device_state_lock);
2253
2254 if (port_dev && test_and_clear_bit(port1, hub->child_usage_bits))
2255 pm_runtime_put(&port_dev->dev);
2256
2257 hub_free_dev(udev);
2258
2259 put_device(&udev->dev);
2260 }
2261
2262 #ifdef CONFIG_USB_ANNOUNCE_NEW_DEVICES
2263 static void show_string(struct usb_device *udev, char *id, char *string)
2264 {
2265 if (!string)
2266 return;
2267 dev_info(&udev->dev, "%s: %s\n", id, string);
2268 }
2269
2270 static void announce_device(struct usb_device *udev)
2271 {
2272 u16 bcdDevice = le16_to_cpu(udev->descriptor.bcdDevice);
2273
2274 dev_info(&udev->dev,
2275 "New USB device found, idVendor=%04x, idProduct=%04x, bcdDevice=%2x.%02x\n",
2276 le16_to_cpu(udev->descriptor.idVendor),
2277 le16_to_cpu(udev->descriptor.idProduct),
2278 bcdDevice >> 8, bcdDevice & 0xff);
2279 dev_info(&udev->dev,
2280 "New USB device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
2281 udev->descriptor.iManufacturer,
2282 udev->descriptor.iProduct,
2283 udev->descriptor.iSerialNumber);
2284 show_string(udev, "Product", udev->product);
2285 show_string(udev, "Manufacturer", udev->manufacturer);
2286 show_string(udev, "SerialNumber", udev->serial);
2287 }
2288 #else
2289 static inline void announce_device(struct usb_device *udev) { }
2290 #endif
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301 static int usb_enumerate_device_otg(struct usb_device *udev)
2302 {
2303 int err = 0;
2304
2305 #ifdef CONFIG_USB_OTG
2306
2307
2308
2309
2310
2311 if (!udev->bus->is_b_host
2312 && udev->config
2313 && udev->parent == udev->bus->root_hub) {
2314 struct usb_otg_descriptor *desc = NULL;
2315 struct usb_bus *bus = udev->bus;
2316 unsigned port1 = udev->portnum;
2317
2318
2319 err = __usb_get_extra_descriptor(udev->rawdescriptors[0],
2320 le16_to_cpu(udev->config[0].desc.wTotalLength),
2321 USB_DT_OTG, (void **) &desc, sizeof(*desc));
2322 if (err || !(desc->bmAttributes & USB_OTG_HNP))
2323 return 0;
2324
2325 dev_info(&udev->dev, "Dual-Role OTG device on %sHNP port\n",
2326 (port1 == bus->otg_port) ? "" : "non-");
2327
2328
2329 if (port1 == bus->otg_port) {
2330 bus->b_hnp_enable = 1;
2331 err = usb_control_msg(udev,
2332 usb_sndctrlpipe(udev, 0),
2333 USB_REQ_SET_FEATURE, 0,
2334 USB_DEVICE_B_HNP_ENABLE,
2335 0, NULL, 0,
2336 USB_CTRL_SET_TIMEOUT);
2337 if (err < 0) {
2338
2339
2340
2341
2342 dev_err(&udev->dev, "can't set HNP mode: %d\n",
2343 err);
2344 bus->b_hnp_enable = 0;
2345 }
2346 } else if (desc->bLength == sizeof
2347 (struct usb_otg_descriptor)) {
2348
2349 err = usb_control_msg(udev,
2350 usb_sndctrlpipe(udev, 0),
2351 USB_REQ_SET_FEATURE, 0,
2352 USB_DEVICE_A_ALT_HNP_SUPPORT,
2353 0, NULL, 0,
2354 USB_CTRL_SET_TIMEOUT);
2355 if (err < 0)
2356 dev_err(&udev->dev,
2357 "set a_alt_hnp_support failed: %d\n",
2358 err);
2359 }
2360 }
2361 #endif
2362 return err;
2363 }
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380 static int usb_enumerate_device(struct usb_device *udev)
2381 {
2382 int err;
2383 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2384
2385 if (udev->config == NULL) {
2386 err = usb_get_configuration(udev);
2387 if (err < 0) {
2388 if (err != -ENODEV)
2389 dev_err(&udev->dev, "can't read configurations, error %d\n",
2390 err);
2391 return err;
2392 }
2393 }
2394
2395
2396 udev->product = usb_cache_string(udev, udev->descriptor.iProduct);
2397 udev->manufacturer = usb_cache_string(udev,
2398 udev->descriptor.iManufacturer);
2399 udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber);
2400
2401 err = usb_enumerate_device_otg(udev);
2402 if (err < 0)
2403 return err;
2404
2405 if (IS_ENABLED(CONFIG_USB_OTG_WHITELIST) && hcd->tpl_support &&
2406 !is_targeted(udev)) {
2407
2408
2409
2410 if (IS_ENABLED(CONFIG_USB_OTG) && (udev->bus->b_hnp_enable
2411 || udev->bus->is_b_host)) {
2412 err = usb_port_suspend(udev, PMSG_AUTO_SUSPEND);
2413 if (err < 0)
2414 dev_dbg(&udev->dev, "HNP fail, %d\n", err);
2415 }
2416 return -ENOTSUPP;
2417 }
2418
2419 usb_detect_interface_quirks(udev);
2420
2421 return 0;
2422 }
2423
2424 static void set_usb_port_removable(struct usb_device *udev)
2425 {
2426 struct usb_device *hdev = udev->parent;
2427 struct usb_hub *hub;
2428 u8 port = udev->portnum;
2429 u16 wHubCharacteristics;
2430 bool removable = true;
2431
2432 if (!hdev)
2433 return;
2434
2435 hub = usb_hub_to_struct_hub(udev->parent);
2436
2437
2438
2439
2440
2441 switch (hub->ports[udev->portnum - 1]->connect_type) {
2442 case USB_PORT_CONNECT_TYPE_HOT_PLUG:
2443 udev->removable = USB_DEVICE_REMOVABLE;
2444 return;
2445 case USB_PORT_CONNECT_TYPE_HARD_WIRED:
2446 case USB_PORT_NOT_USED:
2447 udev->removable = USB_DEVICE_FIXED;
2448 return;
2449 default:
2450 break;
2451 }
2452
2453
2454
2455
2456
2457 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics);
2458
2459 if (!(wHubCharacteristics & HUB_CHAR_COMPOUND))
2460 return;
2461
2462 if (hub_is_superspeed(hdev)) {
2463 if (le16_to_cpu(hub->descriptor->u.ss.DeviceRemovable)
2464 & (1 << port))
2465 removable = false;
2466 } else {
2467 if (hub->descriptor->u.hs.DeviceRemovable[port / 8] & (1 << (port % 8)))
2468 removable = false;
2469 }
2470
2471 if (removable)
2472 udev->removable = USB_DEVICE_REMOVABLE;
2473 else
2474 udev->removable = USB_DEVICE_FIXED;
2475
2476 }
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499 int usb_new_device(struct usb_device *udev)
2500 {
2501 int err;
2502
2503 if (udev->parent) {
2504
2505
2506
2507
2508 device_init_wakeup(&udev->dev, 0);
2509 }
2510
2511
2512 pm_runtime_set_active(&udev->dev);
2513 pm_runtime_get_noresume(&udev->dev);
2514 pm_runtime_use_autosuspend(&udev->dev);
2515 pm_runtime_enable(&udev->dev);
2516
2517
2518
2519
2520 usb_disable_autosuspend(udev);
2521
2522 err = usb_enumerate_device(udev);
2523 if (err < 0)
2524 goto fail;
2525 dev_dbg(&udev->dev, "udev %d, busnum %d, minor = %d\n",
2526 udev->devnum, udev->bus->busnum,
2527 (((udev->bus->busnum-1) * 128) + (udev->devnum-1)));
2528
2529 udev->dev.devt = MKDEV(USB_DEVICE_MAJOR,
2530 (((udev->bus->busnum-1) * 128) + (udev->devnum-1)));
2531
2532
2533 announce_device(udev);
2534
2535 if (udev->serial)
2536 add_device_randomness(udev->serial, strlen(udev->serial));
2537 if (udev->product)
2538 add_device_randomness(udev->product, strlen(udev->product));
2539 if (udev->manufacturer)
2540 add_device_randomness(udev->manufacturer,
2541 strlen(udev->manufacturer));
2542
2543 device_enable_async_suspend(&udev->dev);
2544
2545
2546 if (udev->parent)
2547 set_usb_port_removable(udev);
2548
2549
2550
2551
2552
2553 err = device_add(&udev->dev);
2554 if (err) {
2555 dev_err(&udev->dev, "can't device_add, error %d\n", err);
2556 goto fail;
2557 }
2558
2559
2560 if (udev->parent) {
2561 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
2562 int port1 = udev->portnum;
2563 struct usb_port *port_dev = hub->ports[port1 - 1];
2564
2565 err = sysfs_create_link(&udev->dev.kobj,
2566 &port_dev->dev.kobj, "port");
2567 if (err)
2568 goto fail;
2569
2570 err = sysfs_create_link(&port_dev->dev.kobj,
2571 &udev->dev.kobj, "device");
2572 if (err) {
2573 sysfs_remove_link(&udev->dev.kobj, "port");
2574 goto fail;
2575 }
2576
2577 if (!test_and_set_bit(port1, hub->child_usage_bits))
2578 pm_runtime_get_sync(&port_dev->dev);
2579 }
2580
2581 (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
2582 usb_mark_last_busy(udev);
2583 pm_runtime_put_sync_autosuspend(&udev->dev);
2584 return err;
2585
2586 fail:
2587 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
2588 pm_runtime_disable(&udev->dev);
2589 pm_runtime_set_suspended(&udev->dev);
2590 return err;
2591 }
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606 int usb_deauthorize_device(struct usb_device *usb_dev)
2607 {
2608 usb_lock_device(usb_dev);
2609 if (usb_dev->authorized == 0)
2610 goto out_unauthorized;
2611
2612 usb_dev->authorized = 0;
2613 usb_set_configuration(usb_dev, -1);
2614
2615 out_unauthorized:
2616 usb_unlock_device(usb_dev);
2617 return 0;
2618 }
2619
2620
2621 int usb_authorize_device(struct usb_device *usb_dev)
2622 {
2623 int result = 0, c;
2624
2625 usb_lock_device(usb_dev);
2626 if (usb_dev->authorized == 1)
2627 goto out_authorized;
2628
2629 result = usb_autoresume_device(usb_dev);
2630 if (result < 0) {
2631 dev_err(&usb_dev->dev,
2632 "can't autoresume for authorization: %d\n", result);
2633 goto error_autoresume;
2634 }
2635
2636 if (usb_dev->wusb) {
2637 result = usb_get_device_descriptor(usb_dev, sizeof(usb_dev->descriptor));
2638 if (result < 0) {
2639 dev_err(&usb_dev->dev, "can't re-read device descriptor for "
2640 "authorization: %d\n", result);
2641 goto error_device_descriptor;
2642 }
2643 }
2644
2645 usb_dev->authorized = 1;
2646
2647
2648
2649 c = usb_choose_configuration(usb_dev);
2650 if (c >= 0) {
2651 result = usb_set_configuration(usb_dev, c);
2652 if (result) {
2653 dev_err(&usb_dev->dev,
2654 "can't set config #%d, error %d\n", c, result);
2655
2656
2657 }
2658 }
2659 dev_info(&usb_dev->dev, "authorized to connect\n");
2660
2661 error_device_descriptor:
2662 usb_autosuspend_device(usb_dev);
2663 error_autoresume:
2664 out_authorized:
2665 usb_unlock_device(usb_dev);
2666 return result;
2667 }
2668
2669
2670
2671
2672
2673
2674
2675 static int port_speed_is_ssp(struct usb_device *hdev, int speed_id)
2676 {
2677 int ssa_count;
2678 u32 ss_attr;
2679 int i;
2680 struct usb_ssp_cap_descriptor *ssp_cap = hdev->bos->ssp_cap;
2681
2682 if (!ssp_cap)
2683 return 0;
2684
2685 ssa_count = le32_to_cpu(ssp_cap->bmAttributes) &
2686 USB_SSP_SUBLINK_SPEED_ATTRIBS;
2687
2688 for (i = 0; i <= ssa_count; i++) {
2689 ss_attr = le32_to_cpu(ssp_cap->bmSublinkSpeedAttr[i]);
2690 if (speed_id == (ss_attr & USB_SSP_SUBLINK_SPEED_SSID))
2691 return !!(ss_attr & USB_SSP_SUBLINK_SPEED_LP);
2692 }
2693 return 0;
2694 }
2695
2696
2697 static unsigned hub_is_wusb(struct usb_hub *hub)
2698 {
2699 struct usb_hcd *hcd;
2700 if (hub->hdev->parent != NULL)
2701 return 0;
2702 hcd = bus_to_hcd(hub->hdev->bus);
2703 return hcd->wireless;
2704 }
2705
2706
2707 #define PORT_RESET_TRIES 5
2708 #define SET_ADDRESS_TRIES 2
2709 #define GET_DESCRIPTOR_TRIES 2
2710 #define SET_CONFIG_TRIES (2 * (use_both_schemes + 1))
2711 #define USE_NEW_SCHEME(i, scheme) ((i) / 2 == (int)(scheme))
2712
2713 #define HUB_ROOT_RESET_TIME 60
2714 #define HUB_SHORT_RESET_TIME 10
2715 #define HUB_BH_RESET_TIME 50
2716 #define HUB_LONG_RESET_TIME 200
2717 #define HUB_RESET_TIMEOUT 800
2718
2719
2720
2721
2722
2723
2724
2725
2726 static bool use_new_scheme(struct usb_device *udev, int retry,
2727 struct usb_port *port_dev)
2728 {
2729 int old_scheme_first_port =
2730 port_dev->quirks & USB_PORT_QUIRK_OLD_SCHEME;
2731
2732 if (udev->speed >= USB_SPEED_SUPER)
2733 return false;
2734
2735 return USE_NEW_SCHEME(retry, old_scheme_first_port || old_scheme_first);
2736 }
2737
2738
2739
2740
2741 static bool hub_port_warm_reset_required(struct usb_hub *hub, int port1,
2742 u16 portstatus)
2743 {
2744 u16 link_state;
2745
2746 if (!hub_is_superspeed(hub->hdev))
2747 return false;
2748
2749 if (test_bit(port1, hub->warm_reset_bits))
2750 return true;
2751
2752 link_state = portstatus & USB_PORT_STAT_LINK_STATE;
2753 return link_state == USB_SS_PORT_LS_SS_INACTIVE
2754 || link_state == USB_SS_PORT_LS_COMP_MOD;
2755 }
2756
2757 static int hub_port_wait_reset(struct usb_hub *hub, int port1,
2758 struct usb_device *udev, unsigned int delay, bool warm)
2759 {
2760 int delay_time, ret;
2761 u16 portstatus;
2762 u16 portchange;
2763 u32 ext_portstatus = 0;
2764
2765 for (delay_time = 0;
2766 delay_time < HUB_RESET_TIMEOUT;
2767 delay_time += delay) {
2768
2769 msleep(delay);
2770
2771
2772 if (hub_is_superspeedplus(hub->hdev))
2773 ret = hub_ext_port_status(hub, port1,
2774 HUB_EXT_PORT_STATUS,
2775 &portstatus, &portchange,
2776 &ext_portstatus);
2777 else
2778 ret = hub_port_status(hub, port1, &portstatus,
2779 &portchange);
2780 if (ret < 0)
2781 return ret;
2782
2783
2784
2785
2786
2787
2788
2789
2790 if (!(portstatus & USB_PORT_STAT_RESET) &&
2791 (portstatus & USB_PORT_STAT_CONNECTION))
2792 break;
2793
2794
2795 if (delay_time >= 2 * HUB_SHORT_RESET_TIME)
2796 delay = HUB_LONG_RESET_TIME;
2797
2798 dev_dbg(&hub->ports[port1 - 1]->dev,
2799 "not %sreset yet, waiting %dms\n",
2800 warm ? "warm " : "", delay);
2801 }
2802
2803 if ((portstatus & USB_PORT_STAT_RESET))
2804 return -EBUSY;
2805
2806 if (hub_port_warm_reset_required(hub, port1, portstatus))
2807 return -ENOTCONN;
2808
2809
2810 if (!(portstatus & USB_PORT_STAT_CONNECTION))
2811 return -ENOTCONN;
2812
2813
2814
2815
2816
2817 if (!hub_is_superspeed(hub->hdev) &&
2818 (portchange & USB_PORT_STAT_C_CONNECTION)) {
2819 usb_clear_port_feature(hub->hdev, port1,
2820 USB_PORT_FEAT_C_CONNECTION);
2821 return -EAGAIN;
2822 }
2823
2824 if (!(portstatus & USB_PORT_STAT_ENABLE))
2825 return -EBUSY;
2826
2827 if (!udev)
2828 return 0;
2829
2830 if (hub_is_superspeedplus(hub->hdev)) {
2831
2832 udev->rx_lanes = USB_EXT_PORT_RX_LANES(ext_portstatus) + 1;
2833 udev->tx_lanes = USB_EXT_PORT_TX_LANES(ext_portstatus) + 1;
2834 } else {
2835 udev->rx_lanes = 1;
2836 udev->tx_lanes = 1;
2837 }
2838 if (hub_is_wusb(hub))
2839 udev->speed = USB_SPEED_WIRELESS;
2840 else if (hub_is_superspeedplus(hub->hdev) &&
2841 port_speed_is_ssp(hub->hdev, ext_portstatus &
2842 USB_EXT_PORT_STAT_RX_SPEED_ID))
2843 udev->speed = USB_SPEED_SUPER_PLUS;
2844 else if (hub_is_superspeed(hub->hdev))
2845 udev->speed = USB_SPEED_SUPER;
2846 else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
2847 udev->speed = USB_SPEED_HIGH;
2848 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
2849 udev->speed = USB_SPEED_LOW;
2850 else
2851 udev->speed = USB_SPEED_FULL;
2852 return 0;
2853 }
2854
2855
2856 static int hub_port_reset(struct usb_hub *hub, int port1,
2857 struct usb_device *udev, unsigned int delay, bool warm)
2858 {
2859 int i, status;
2860 u16 portchange, portstatus;
2861 struct usb_port *port_dev = hub->ports[port1 - 1];
2862 int reset_recovery_time;
2863
2864 if (!hub_is_superspeed(hub->hdev)) {
2865 if (warm) {
2866 dev_err(hub->intfdev, "only USB3 hub support "
2867 "warm reset\n");
2868 return -EINVAL;
2869 }
2870
2871
2872
2873 down_read(&ehci_cf_port_reset_rwsem);
2874 } else if (!warm) {
2875
2876
2877
2878
2879 if (hub_port_status(hub, port1, &portstatus, &portchange) == 0)
2880 if (hub_port_warm_reset_required(hub, port1,
2881 portstatus))
2882 warm = true;
2883 }
2884 clear_bit(port1, hub->warm_reset_bits);
2885
2886
2887 for (i = 0; i < PORT_RESET_TRIES; i++) {
2888 status = set_port_feature(hub->hdev, port1, (warm ?
2889 USB_PORT_FEAT_BH_PORT_RESET :
2890 USB_PORT_FEAT_RESET));
2891 if (status == -ENODEV) {
2892 ;
2893 } else if (status) {
2894 dev_err(&port_dev->dev,
2895 "cannot %sreset (err = %d)\n",
2896 warm ? "warm " : "", status);
2897 } else {
2898 status = hub_port_wait_reset(hub, port1, udev, delay,
2899 warm);
2900 if (status && status != -ENOTCONN && status != -ENODEV)
2901 dev_dbg(hub->intfdev,
2902 "port_wait_reset: err = %d\n",
2903 status);
2904 }
2905
2906
2907 if (status == 0 || status == -ENOTCONN || status == -ENODEV) {
2908 usb_clear_port_feature(hub->hdev, port1,
2909 USB_PORT_FEAT_C_RESET);
2910
2911 if (!hub_is_superspeed(hub->hdev))
2912 goto done;
2913
2914 usb_clear_port_feature(hub->hdev, port1,
2915 USB_PORT_FEAT_C_BH_PORT_RESET);
2916 usb_clear_port_feature(hub->hdev, port1,
2917 USB_PORT_FEAT_C_PORT_LINK_STATE);
2918
2919 if (udev)
2920 usb_clear_port_feature(hub->hdev, port1,
2921 USB_PORT_FEAT_C_CONNECTION);
2922
2923
2924
2925
2926
2927 if (hub_port_status(hub, port1,
2928 &portstatus, &portchange) < 0)
2929 goto done;
2930
2931 if (!hub_port_warm_reset_required(hub, port1,
2932 portstatus))
2933 goto done;
2934
2935
2936
2937
2938
2939 if (!warm) {
2940 dev_dbg(&port_dev->dev,
2941 "hot reset failed, warm reset\n");
2942 warm = true;
2943 }
2944 }
2945
2946 dev_dbg(&port_dev->dev,
2947 "not enabled, trying %sreset again...\n",
2948 warm ? "warm " : "");
2949 delay = HUB_LONG_RESET_TIME;
2950 }
2951
2952 dev_err(&port_dev->dev, "Cannot enable. Maybe the USB cable is bad?\n");
2953
2954 done:
2955 if (status == 0) {
2956 if (port_dev->quirks & USB_PORT_QUIRK_FAST_ENUM)
2957 usleep_range(10000, 12000);
2958 else {
2959
2960 reset_recovery_time = 10 + 40;
2961
2962
2963 if (hub->hdev->quirks & USB_QUIRK_HUB_SLOW_RESET)
2964 reset_recovery_time += 100;
2965
2966 msleep(reset_recovery_time);
2967 }
2968
2969 if (udev) {
2970 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2971
2972 update_devnum(udev, 0);
2973
2974
2975
2976 if (hcd->driver->reset_device)
2977 hcd->driver->reset_device(hcd, udev);
2978
2979 usb_set_device_state(udev, USB_STATE_DEFAULT);
2980 }
2981 } else {
2982 if (udev)
2983 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
2984 }
2985
2986 if (!hub_is_superspeed(hub->hdev))
2987 up_read(&ehci_cf_port_reset_rwsem);
2988
2989 return status;
2990 }
2991
2992
2993 static int port_is_power_on(struct usb_hub *hub, unsigned portstatus)
2994 {
2995 int ret = 0;
2996
2997 if (hub_is_superspeed(hub->hdev)) {
2998 if (portstatus & USB_SS_PORT_STAT_POWER)
2999 ret = 1;
3000 } else {
3001 if (portstatus & USB_PORT_STAT_POWER)
3002 ret = 1;
3003 }
3004
3005 return ret;
3006 }
3007
3008 static void usb_lock_port(struct usb_port *port_dev)
3009 __acquires(&port_dev->status_lock)
3010 {
3011 mutex_lock(&port_dev->status_lock);
3012 __acquire(&port_dev->status_lock);
3013 }
3014
3015 static void usb_unlock_port(struct usb_port *port_dev)
3016 __releases(&port_dev->status_lock)
3017 {
3018 mutex_unlock(&port_dev->status_lock);
3019 __release(&port_dev->status_lock);
3020 }
3021
3022 #ifdef CONFIG_PM
3023
3024
3025 static int port_is_suspended(struct usb_hub *hub, unsigned portstatus)
3026 {
3027 int ret = 0;
3028
3029 if (hub_is_superspeed(hub->hdev)) {
3030 if ((portstatus & USB_PORT_STAT_LINK_STATE)
3031 == USB_SS_PORT_LS_U3)
3032 ret = 1;
3033 } else {
3034 if (portstatus & USB_PORT_STAT_SUSPEND)
3035 ret = 1;
3036 }
3037
3038 return ret;
3039 }
3040
3041
3042
3043
3044 static int check_port_resume_type(struct usb_device *udev,
3045 struct usb_hub *hub, int port1,
3046 int status, u16 portchange, u16 portstatus)
3047 {
3048 struct usb_port *port_dev = hub->ports[port1 - 1];
3049 int retries = 3;
3050
3051 retry:
3052
3053 if (status == 0 && udev->reset_resume
3054 && hub_port_warm_reset_required(hub, port1, portstatus)) {
3055 ;
3056 }
3057
3058 else if (status || port_is_suspended(hub, portstatus) ||
3059 !port_is_power_on(hub, portstatus)) {
3060 if (status >= 0)
3061 status = -ENODEV;
3062 } else if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
3063 if (retries--) {
3064 usleep_range(200, 300);
3065 status = hub_port_status(hub, port1, &portstatus,
3066 &portchange);
3067 goto retry;
3068 }
3069 status = -ENODEV;
3070 }
3071
3072
3073
3074
3075 else if (!(portstatus & USB_PORT_STAT_ENABLE) && !udev->reset_resume) {
3076 if (udev->persist_enabled)
3077 udev->reset_resume = 1;
3078 else
3079 status = -ENODEV;
3080 }
3081
3082 if (status) {
3083 dev_dbg(&port_dev->dev, "status %04x.%04x after resume, %d\n",
3084 portchange, portstatus, status);
3085 } else if (udev->reset_resume) {
3086
3087
3088 if (portchange & USB_PORT_STAT_C_CONNECTION)
3089 usb_clear_port_feature(hub->hdev, port1,
3090 USB_PORT_FEAT_C_CONNECTION);
3091 if (portchange & USB_PORT_STAT_C_ENABLE)
3092 usb_clear_port_feature(hub->hdev, port1,
3093 USB_PORT_FEAT_C_ENABLE);
3094
3095
3096
3097
3098
3099
3100
3101
3102 clear_bit(port1, hub->change_bits);
3103 }
3104
3105 return status;
3106 }
3107
3108 int usb_disable_ltm(struct usb_device *udev)
3109 {
3110 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3111
3112
3113 if (!usb_device_supports_ltm(hcd->self.root_hub) ||
3114 !usb_device_supports_ltm(udev))
3115 return 0;
3116
3117
3118
3119
3120 if (!udev->actconfig)
3121 return 0;
3122
3123 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3124 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
3125 USB_DEVICE_LTM_ENABLE, 0, NULL, 0,
3126 USB_CTRL_SET_TIMEOUT);
3127 }
3128 EXPORT_SYMBOL_GPL(usb_disable_ltm);
3129
3130 void usb_enable_ltm(struct usb_device *udev)
3131 {
3132 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3133
3134
3135 if (!usb_device_supports_ltm(hcd->self.root_hub) ||
3136 !usb_device_supports_ltm(udev))
3137 return;
3138
3139
3140
3141
3142 if (!udev->actconfig)
3143 return;
3144
3145 usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3146 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
3147 USB_DEVICE_LTM_ENABLE, 0, NULL, 0,
3148 USB_CTRL_SET_TIMEOUT);
3149 }
3150 EXPORT_SYMBOL_GPL(usb_enable_ltm);
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162 static int usb_enable_remote_wakeup(struct usb_device *udev)
3163 {
3164 if (udev->speed < USB_SPEED_SUPER)
3165 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3166 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
3167 USB_DEVICE_REMOTE_WAKEUP, 0, NULL, 0,
3168 USB_CTRL_SET_TIMEOUT);
3169 else
3170 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3171 USB_REQ_SET_FEATURE, USB_RECIP_INTERFACE,
3172 USB_INTRF_FUNC_SUSPEND,
3173 USB_INTRF_FUNC_SUSPEND_RW |
3174 USB_INTRF_FUNC_SUSPEND_LP,
3175 NULL, 0, USB_CTRL_SET_TIMEOUT);
3176 }
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188 static int usb_disable_remote_wakeup(struct usb_device *udev)
3189 {
3190 if (udev->speed < USB_SPEED_SUPER)
3191 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3192 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
3193 USB_DEVICE_REMOTE_WAKEUP, 0, NULL, 0,
3194 USB_CTRL_SET_TIMEOUT);
3195 else
3196 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3197 USB_REQ_SET_FEATURE, USB_RECIP_INTERFACE,
3198 USB_INTRF_FUNC_SUSPEND, 0, NULL, 0,
3199 USB_CTRL_SET_TIMEOUT);
3200 }
3201
3202
3203 unsigned usb_wakeup_enabled_descendants(struct usb_device *udev)
3204 {
3205 struct usb_hub *hub = usb_hub_to_struct_hub(udev);
3206
3207 return udev->do_remote_wakeup +
3208 (hub ? hub->wakeup_enabled_descendants : 0);
3209 }
3210 EXPORT_SYMBOL_GPL(usb_wakeup_enabled_descendants);
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260 int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
3261 {
3262 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
3263 struct usb_port *port_dev = hub->ports[udev->portnum - 1];
3264 int port1 = udev->portnum;
3265 int status;
3266 bool really_suspend = true;
3267
3268 usb_lock_port(port_dev);
3269
3270
3271
3272
3273
3274
3275
3276 if (udev->do_remote_wakeup) {
3277 status = usb_enable_remote_wakeup(udev);
3278 if (status) {
3279 dev_dbg(&udev->dev, "won't remote wakeup, status %d\n",
3280 status);
3281
3282 if (PMSG_IS_AUTO(msg))
3283 goto err_wakeup;
3284 }
3285 }
3286
3287
3288 usb_disable_usb2_hardware_lpm(udev);
3289
3290 if (usb_disable_ltm(udev)) {
3291 dev_err(&udev->dev, "Failed to disable LTM before suspend\n");
3292 status = -ENOMEM;
3293 if (PMSG_IS_AUTO(msg))
3294 goto err_ltm;
3295 }
3296
3297
3298 if (hub_is_superspeed(hub->hdev))
3299 status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3);
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312 else if (PMSG_IS_AUTO(msg) || usb_wakeup_enabled_descendants(udev) > 0)
3313 status = set_port_feature(hub->hdev, port1,
3314 USB_PORT_FEAT_SUSPEND);
3315 else {
3316 really_suspend = false;
3317 status = 0;
3318 }
3319 if (status) {
3320 dev_dbg(&port_dev->dev, "can't suspend, status %d\n", status);
3321
3322
3323 usb_enable_ltm(udev);
3324 err_ltm:
3325
3326 usb_enable_usb2_hardware_lpm(udev);
3327
3328 if (udev->do_remote_wakeup)
3329 (void) usb_disable_remote_wakeup(udev);
3330 err_wakeup:
3331
3332
3333 if (!PMSG_IS_AUTO(msg))
3334 status = 0;
3335 } else {
3336 dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n",
3337 (PMSG_IS_AUTO(msg) ? "auto-" : ""),
3338 udev->do_remote_wakeup);
3339 if (really_suspend) {
3340 udev->port_is_suspended = 1;
3341
3342
3343 msleep(10);
3344 }
3345 usb_set_device_state(udev, USB_STATE_SUSPENDED);
3346 }
3347
3348 if (status == 0 && !udev->do_remote_wakeup && udev->persist_enabled
3349 && test_and_clear_bit(port1, hub->child_usage_bits))
3350 pm_runtime_put_sync(&port_dev->dev);
3351
3352 usb_mark_last_busy(hub->hdev);
3353
3354 usb_unlock_port(port_dev);
3355 return status;
3356 }
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369 static int finish_port_resume(struct usb_device *udev)
3370 {
3371 int status = 0;
3372 u16 devstatus = 0;
3373
3374
3375 dev_dbg(&udev->dev, "%s\n",
3376 udev->reset_resume ? "finish reset-resume" : "finish resume");
3377
3378
3379
3380
3381
3382
3383 usb_set_device_state(udev, udev->actconfig
3384 ? USB_STATE_CONFIGURED
3385 : USB_STATE_ADDRESS);
3386
3387
3388
3389
3390
3391
3392 if (udev->reset_resume) {
3393
3394
3395
3396
3397
3398
3399 retry_reset_resume:
3400 if (udev->quirks & USB_QUIRK_RESET)
3401 status = -ENODEV;
3402 else
3403 status = usb_reset_and_verify_device(udev);
3404 }
3405
3406
3407
3408
3409
3410 if (status == 0) {
3411 devstatus = 0;
3412 status = usb_get_std_status(udev, USB_RECIP_DEVICE, 0, &devstatus);
3413
3414
3415 if (status && !udev->reset_resume && udev->persist_enabled) {
3416 dev_dbg(&udev->dev, "retry with reset-resume\n");
3417 udev->reset_resume = 1;
3418 goto retry_reset_resume;
3419 }
3420 }
3421
3422 if (status) {
3423 dev_dbg(&udev->dev, "gone after usb resume? status %d\n",
3424 status);
3425
3426
3427
3428
3429
3430
3431 } else if (udev->actconfig && !udev->reset_resume) {
3432 if (udev->speed < USB_SPEED_SUPER) {
3433 if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP))
3434 status = usb_disable_remote_wakeup(udev);
3435 } else {
3436 status = usb_get_std_status(udev, USB_RECIP_INTERFACE, 0,
3437 &devstatus);
3438 if (!status && devstatus & (USB_INTRF_STAT_FUNC_RW_CAP
3439 | USB_INTRF_STAT_FUNC_RW))
3440 status = usb_disable_remote_wakeup(udev);
3441 }
3442
3443 if (status)
3444 dev_dbg(&udev->dev,
3445 "disable remote wakeup, status %d\n",
3446 status);
3447 status = 0;
3448 }
3449 return status;
3450 }
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476 static int wait_for_connected(struct usb_device *udev,
3477 struct usb_hub *hub, int *port1,
3478 u16 *portchange, u16 *portstatus)
3479 {
3480 int status = 0, delay_ms = 0;
3481
3482 while (delay_ms < 2000) {
3483 if (status || *portstatus & USB_PORT_STAT_CONNECTION)
3484 break;
3485 if (!port_is_power_on(hub, *portstatus)) {
3486 status = -ENODEV;
3487 break;
3488 }
3489 msleep(20);
3490 delay_ms += 20;
3491 status = hub_port_status(hub, *port1, portstatus, portchange);
3492 }
3493 dev_dbg(&udev->dev, "Waited %dms for CONNECT\n", delay_ms);
3494 return status;
3495 }
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531 int usb_port_resume(struct usb_device *udev, pm_message_t msg)
3532 {
3533 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
3534 struct usb_port *port_dev = hub->ports[udev->portnum - 1];
3535 int port1 = udev->portnum;
3536 int status;
3537 u16 portchange, portstatus;
3538
3539 if (!test_and_set_bit(port1, hub->child_usage_bits)) {
3540 status = pm_runtime_get_sync(&port_dev->dev);
3541 if (status < 0) {
3542 dev_dbg(&udev->dev, "can't resume usb port, status %d\n",
3543 status);
3544 return status;
3545 }
3546 }
3547
3548 usb_lock_port(port_dev);
3549
3550
3551 status = hub_port_status(hub, port1, &portstatus, &portchange);
3552 if (status == 0 && !port_is_suspended(hub, portstatus)) {
3553 if (portchange & USB_PORT_STAT_C_SUSPEND)
3554 pm_wakeup_event(&udev->dev, 0);
3555 goto SuspendCleared;
3556 }
3557
3558
3559 if (hub_is_superspeed(hub->hdev))
3560 status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U0);
3561 else
3562 status = usb_clear_port_feature(hub->hdev,
3563 port1, USB_PORT_FEAT_SUSPEND);
3564 if (status) {
3565 dev_dbg(&port_dev->dev, "can't resume, status %d\n", status);
3566 } else {
3567
3568 dev_dbg(&udev->dev, "usb %sresume\n",
3569 (PMSG_IS_AUTO(msg) ? "auto-" : ""));
3570 msleep(USB_RESUME_TIMEOUT);
3571
3572
3573
3574
3575
3576 status = hub_port_status(hub, port1, &portstatus, &portchange);
3577
3578
3579 msleep(10);
3580 }
3581
3582 SuspendCleared:
3583 if (status == 0) {
3584 udev->port_is_suspended = 0;
3585 if (hub_is_superspeed(hub->hdev)) {
3586 if (portchange & USB_PORT_STAT_C_LINK_STATE)
3587 usb_clear_port_feature(hub->hdev, port1,
3588 USB_PORT_FEAT_C_PORT_LINK_STATE);
3589 } else {
3590 if (portchange & USB_PORT_STAT_C_SUSPEND)
3591 usb_clear_port_feature(hub->hdev, port1,
3592 USB_PORT_FEAT_C_SUSPEND);
3593 }
3594 }
3595
3596 if (udev->persist_enabled)
3597 status = wait_for_connected(udev, hub, &port1, &portchange,
3598 &portstatus);
3599
3600 status = check_port_resume_type(udev,
3601 hub, port1, status, portchange, portstatus);
3602 if (status == 0)
3603 status = finish_port_resume(udev);
3604 if (status < 0) {
3605 dev_dbg(&udev->dev, "can't resume, status %d\n", status);
3606 hub_port_logical_disconnect(hub, port1);
3607 } else {
3608
3609 usb_enable_usb2_hardware_lpm(udev);
3610
3611
3612 usb_enable_ltm(udev);
3613 }
3614
3615 usb_unlock_port(port_dev);
3616
3617 return status;
3618 }
3619
3620 int usb_remote_wakeup(struct usb_device *udev)
3621 {
3622 int status = 0;
3623
3624 usb_lock_device(udev);
3625 if (udev->state == USB_STATE_SUSPENDED) {
3626 dev_dbg(&udev->dev, "usb %sresume\n", "wakeup-");
3627 status = usb_autoresume_device(udev);
3628 if (status == 0) {
3629
3630 usb_autosuspend_device(udev);
3631 }
3632 }
3633 usb_unlock_device(udev);
3634 return status;
3635 }
3636
3637
3638 static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
3639 u16 portstatus, u16 portchange)
3640 __must_hold(&port_dev->status_lock)
3641 {
3642 struct usb_port *port_dev = hub->ports[port - 1];
3643 struct usb_device *hdev;
3644 struct usb_device *udev;
3645 int connect_change = 0;
3646 u16 link_state;
3647 int ret;
3648
3649 hdev = hub->hdev;
3650 udev = port_dev->child;
3651 if (!hub_is_superspeed(hdev)) {
3652 if (!(portchange & USB_PORT_STAT_C_SUSPEND))
3653 return 0;
3654 usb_clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND);
3655 } else {
3656 link_state = portstatus & USB_PORT_STAT_LINK_STATE;
3657 if (!udev || udev->state != USB_STATE_SUSPENDED ||
3658 (link_state != USB_SS_PORT_LS_U0 &&
3659 link_state != USB_SS_PORT_LS_U1 &&
3660 link_state != USB_SS_PORT_LS_U2))
3661 return 0;
3662 }
3663
3664 if (udev) {
3665
3666 msleep(10);
3667
3668 usb_unlock_port(port_dev);
3669 ret = usb_remote_wakeup(udev);
3670 usb_lock_port(port_dev);
3671 if (ret < 0)
3672 connect_change = 1;
3673 } else {
3674 ret = -ENODEV;
3675 hub_port_disable(hub, port, 1);
3676 }
3677 dev_dbg(&port_dev->dev, "resume, status %d\n", ret);
3678 return connect_change;
3679 }
3680
3681 static int check_ports_changed(struct usb_hub *hub)
3682 {
3683 int port1;
3684
3685 for (port1 = 1; port1 <= hub->hdev->maxchild; ++port1) {
3686 u16 portstatus, portchange;
3687 int status;
3688
3689 status = hub_port_status(hub, port1, &portstatus, &portchange);
3690 if (!status && portchange)
3691 return 1;
3692 }
3693 return 0;
3694 }
3695
3696 static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
3697 {
3698 struct usb_hub *hub = usb_get_intfdata(intf);
3699 struct usb_device *hdev = hub->hdev;
3700 unsigned port1;
3701
3702
3703
3704
3705
3706 hub->wakeup_enabled_descendants = 0;
3707 for (port1 = 1; port1 <= hdev->maxchild; port1++) {
3708 struct usb_port *port_dev = hub->ports[port1 - 1];
3709 struct usb_device *udev = port_dev->child;
3710
3711 if (udev && udev->can_submit) {
3712 dev_warn(&port_dev->dev, "device %s not suspended yet\n",
3713 dev_name(&udev->dev));
3714 if (PMSG_IS_AUTO(msg))
3715 return -EBUSY;
3716 }
3717 if (udev)
3718 hub->wakeup_enabled_descendants +=
3719 usb_wakeup_enabled_descendants(udev);
3720 }
3721
3722 if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) {
3723
3724 if (check_ports_changed(hub)) {
3725 if (PMSG_IS_AUTO(msg))
3726 return -EBUSY;
3727 pm_wakeup_event(&hdev->dev, 2000);
3728 }
3729 }
3730
3731 if (hub_is_superspeed(hdev) && hdev->do_remote_wakeup) {
3732
3733 for (port1 = 1; port1 <= hdev->maxchild; port1++) {
3734 set_port_feature(hdev,
3735 port1 |
3736 USB_PORT_FEAT_REMOTE_WAKE_CONNECT |
3737 USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT |
3738 USB_PORT_FEAT_REMOTE_WAKE_OVER_CURRENT,
3739 USB_PORT_FEAT_REMOTE_WAKE_MASK);
3740 }
3741 }
3742
3743 dev_dbg(&intf->dev, "%s\n", __func__);
3744
3745
3746 hub_quiesce(hub, HUB_SUSPEND);
3747 return 0;
3748 }
3749
3750
3751 static void report_wakeup_requests(struct usb_hub *hub)
3752 {
3753 struct usb_device *hdev = hub->hdev;
3754 struct usb_device *udev;
3755 struct usb_hcd *hcd;
3756 unsigned long resuming_ports;
3757 int i;
3758
3759 if (hdev->parent)
3760 return;
3761
3762 hcd = bus_to_hcd(hdev->bus);
3763 if (hcd->driver->get_resuming_ports) {
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773 resuming_ports = hcd->driver->get_resuming_ports(hcd);
3774 for (i = 0; i < hdev->maxchild; ++i) {
3775 if (test_bit(i, &resuming_ports)) {
3776 udev = hub->ports[i]->child;
3777 if (udev)
3778 pm_wakeup_event(&udev->dev, 0);
3779 }
3780 }
3781 }
3782 }
3783
3784 static int hub_resume(struct usb_interface *intf)
3785 {
3786 struct usb_hub *hub = usb_get_intfdata(intf);
3787
3788 dev_dbg(&intf->dev, "%s\n", __func__);
3789 hub_activate(hub, HUB_RESUME);
3790
3791
3792
3793
3794
3795
3796
3797 report_wakeup_requests(hub);
3798 return 0;
3799 }
3800
3801 static int hub_reset_resume(struct usb_interface *intf)
3802 {
3803 struct usb_hub *hub = usb_get_intfdata(intf);
3804
3805 dev_dbg(&intf->dev, "%s\n", __func__);
3806 hub_activate(hub, HUB_RESET_RESUME);
3807 return 0;
3808 }
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821 void usb_root_hub_lost_power(struct usb_device *rhdev)
3822 {
3823 dev_notice(&rhdev->dev, "root hub lost power or was reset\n");
3824 rhdev->reset_resume = 1;
3825 }
3826 EXPORT_SYMBOL_GPL(usb_root_hub_lost_power);
3827
3828 static const char * const usb3_lpm_names[] = {
3829 "U0",
3830 "U1",
3831 "U2",
3832 "U3",
3833 };
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844 static int usb_req_set_sel(struct usb_device *udev, enum usb3_link_state state)
3845 {
3846 struct usb_set_sel_req *sel_values;
3847 unsigned long long u1_sel;
3848 unsigned long long u1_pel;
3849 unsigned long long u2_sel;
3850 unsigned long long u2_pel;
3851 int ret;
3852
3853 if (udev->state != USB_STATE_CONFIGURED)
3854 return 0;
3855
3856
3857 u1_sel = DIV_ROUND_UP(udev->u1_params.sel, 1000);
3858 u1_pel = DIV_ROUND_UP(udev->u1_params.pel, 1000);
3859 u2_sel = DIV_ROUND_UP(udev->u2_params.sel, 1000);
3860 u2_pel = DIV_ROUND_UP(udev->u2_params.pel, 1000);
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870 if ((state == USB3_LPM_U1 &&
3871 (u1_sel > USB3_LPM_MAX_U1_SEL_PEL ||
3872 u1_pel > USB3_LPM_MAX_U1_SEL_PEL)) ||
3873 (state == USB3_LPM_U2 &&
3874 (u2_sel > USB3_LPM_MAX_U2_SEL_PEL ||
3875 u2_pel > USB3_LPM_MAX_U2_SEL_PEL))) {
3876 dev_dbg(&udev->dev, "Device-initiated %s disabled due to long SEL %llu us or PEL %llu us\n",
3877 usb3_lpm_names[state], u1_sel, u1_pel);
3878 return -EINVAL;
3879 }
3880
3881
3882
3883
3884
3885
3886 if (u1_sel > USB3_LPM_MAX_U1_SEL_PEL)
3887 u1_sel = USB3_LPM_MAX_U1_SEL_PEL;
3888
3889 if (u1_pel > USB3_LPM_MAX_U1_SEL_PEL)
3890 u1_pel = USB3_LPM_MAX_U1_SEL_PEL;
3891
3892 if (u2_sel > USB3_LPM_MAX_U2_SEL_PEL)
3893 u2_sel = USB3_LPM_MAX_U2_SEL_PEL;
3894
3895 if (u2_pel > USB3_LPM_MAX_U2_SEL_PEL)
3896 u2_pel = USB3_LPM_MAX_U2_SEL_PEL;
3897
3898
3899
3900
3901
3902
3903 sel_values = kmalloc(sizeof *(sel_values), GFP_NOIO);
3904 if (!sel_values)
3905 return -ENOMEM;
3906
3907 sel_values->u1_sel = u1_sel;
3908 sel_values->u1_pel = u1_pel;
3909 sel_values->u2_sel = cpu_to_le16(u2_sel);
3910 sel_values->u2_pel = cpu_to_le16(u2_pel);
3911
3912 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3913 USB_REQ_SET_SEL,
3914 USB_RECIP_DEVICE,
3915 0, 0,
3916 sel_values, sizeof *(sel_values),
3917 USB_CTRL_SET_TIMEOUT);
3918 kfree(sel_values);
3919 return ret;
3920 }
3921
3922
3923
3924
3925 static int usb_set_device_initiated_lpm(struct usb_device *udev,
3926 enum usb3_link_state state, bool enable)
3927 {
3928 int ret;
3929 int feature;
3930
3931 switch (state) {
3932 case USB3_LPM_U1:
3933 feature = USB_DEVICE_U1_ENABLE;
3934 break;
3935 case USB3_LPM_U2:
3936 feature = USB_DEVICE_U2_ENABLE;
3937 break;
3938 default:
3939 dev_warn(&udev->dev, "%s: Can't %s non-U1 or U2 state.\n",
3940 __func__, enable ? "enable" : "disable");
3941 return -EINVAL;
3942 }
3943
3944 if (udev->state != USB_STATE_CONFIGURED) {
3945 dev_dbg(&udev->dev, "%s: Can't %s %s state "
3946 "for unconfigured device.\n",
3947 __func__, enable ? "enable" : "disable",
3948 usb3_lpm_names[state]);
3949 return 0;
3950 }
3951
3952 if (enable) {
3953
3954
3955
3956
3957 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3958 USB_REQ_SET_FEATURE,
3959 USB_RECIP_DEVICE,
3960 feature,
3961 0, NULL, 0,
3962 USB_CTRL_SET_TIMEOUT);
3963 } else {
3964 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3965 USB_REQ_CLEAR_FEATURE,
3966 USB_RECIP_DEVICE,
3967 feature,
3968 0, NULL, 0,
3969 USB_CTRL_SET_TIMEOUT);
3970 }
3971 if (ret < 0) {
3972 dev_warn(&udev->dev, "%s of device-initiated %s failed.\n",
3973 enable ? "Enable" : "Disable",
3974 usb3_lpm_names[state]);
3975 return -EBUSY;
3976 }
3977 return 0;
3978 }
3979
3980 static int usb_set_lpm_timeout(struct usb_device *udev,
3981 enum usb3_link_state state, int timeout)
3982 {
3983 int ret;
3984 int feature;
3985
3986 switch (state) {
3987 case USB3_LPM_U1:
3988 feature = USB_PORT_FEAT_U1_TIMEOUT;
3989 break;
3990 case USB3_LPM_U2:
3991 feature = USB_PORT_FEAT_U2_TIMEOUT;
3992 break;
3993 default:
3994 dev_warn(&udev->dev, "%s: Can't set timeout for non-U1 or U2 state.\n",
3995 __func__);
3996 return -EINVAL;
3997 }
3998
3999 if (state == USB3_LPM_U1 && timeout > USB3_LPM_U1_MAX_TIMEOUT &&
4000 timeout != USB3_LPM_DEVICE_INITIATED) {
4001 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x, "
4002 "which is a reserved value.\n",
4003 usb3_lpm_names[state], timeout);
4004 return -EINVAL;
4005 }
4006
4007 ret = set_port_feature(udev->parent,
4008 USB_PORT_LPM_TIMEOUT(timeout) | udev->portnum,
4009 feature);
4010 if (ret < 0) {
4011 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x,"
4012 "error code %i\n", usb3_lpm_names[state],
4013 timeout, ret);
4014 return -EBUSY;
4015 }
4016 if (state == USB3_LPM_U1)
4017 udev->u1_params.timeout = timeout;
4018 else
4019 udev->u2_params.timeout = timeout;
4020 return 0;
4021 }
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038 static void usb_enable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
4039 enum usb3_link_state state)
4040 {
4041 int timeout, ret;
4042 __u8 u1_mel = udev->bos->ss_cap->bU1devExitLat;
4043 __le16 u2_mel = udev->bos->ss_cap->bU2DevExitLat;
4044
4045
4046
4047
4048
4049 if ((state == USB3_LPM_U1 && u1_mel == 0) ||
4050 (state == USB3_LPM_U2 && u2_mel == 0))
4051 return;
4052
4053
4054
4055
4056
4057 ret = usb_req_set_sel(udev, state);
4058 if (ret < 0) {
4059 dev_warn(&udev->dev, "Set SEL for device-initiated %s failed.\n",
4060 usb3_lpm_names[state]);
4061 return;
4062 }
4063
4064
4065
4066
4067
4068
4069 timeout = hcd->driver->enable_usb3_lpm_timeout(hcd, udev, state);
4070
4071
4072 if (timeout == 0)
4073 return;
4074
4075 if (timeout < 0) {
4076 dev_warn(&udev->dev, "Could not enable %s link state, "
4077 "xHCI error %i.\n", usb3_lpm_names[state],
4078 timeout);
4079 return;
4080 }
4081
4082 if (usb_set_lpm_timeout(udev, state, timeout)) {
4083
4084
4085
4086
4087 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
4088 return;
4089 }
4090
4091
4092
4093
4094 if (udev->actconfig &&
4095 usb_set_device_initiated_lpm(udev, state, true) == 0) {
4096 if (state == USB3_LPM_U1)
4097 udev->usb3_lpm_u1_enabled = 1;
4098 else if (state == USB3_LPM_U2)
4099 udev->usb3_lpm_u2_enabled = 1;
4100 } else {
4101
4102
4103
4104 usb_set_lpm_timeout(udev, state, 0);
4105 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
4106 }
4107 }
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124 static int usb_disable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
4125 enum usb3_link_state state)
4126 {
4127 switch (state) {
4128 case USB3_LPM_U1:
4129 case USB3_LPM_U2:
4130 break;
4131 default:
4132 dev_warn(&udev->dev, "%s: Can't disable non-U1 or U2 state.\n",
4133 __func__);
4134 return -EINVAL;
4135 }
4136
4137 if (usb_set_lpm_timeout(udev, state, 0))
4138 return -EBUSY;
4139
4140 usb_set_device_initiated_lpm(udev, state, false);
4141
4142 if (hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state))
4143 dev_warn(&udev->dev, "Could not disable xHCI %s timeout, "
4144 "bus schedule bandwidth may be impacted.\n",
4145 usb3_lpm_names[state]);
4146
4147
4148
4149
4150
4151
4152
4153 if (state == USB3_LPM_U1)
4154 udev->usb3_lpm_u1_enabled = 0;
4155 else if (state == USB3_LPM_U2)
4156 udev->usb3_lpm_u2_enabled = 0;
4157
4158 return 0;
4159 }
4160
4161
4162
4163
4164
4165
4166
4167
4168 int usb_disable_lpm(struct usb_device *udev)
4169 {
4170 struct usb_hcd *hcd;
4171
4172 if (!udev || !udev->parent ||
4173 udev->speed < USB_SPEED_SUPER ||
4174 !udev->lpm_capable ||
4175 udev->state < USB_STATE_CONFIGURED)
4176 return 0;
4177
4178 hcd = bus_to_hcd(udev->bus);
4179 if (!hcd || !hcd->driver->disable_usb3_lpm_timeout)
4180 return 0;
4181
4182 udev->lpm_disable_count++;
4183 if ((udev->u1_params.timeout == 0 && udev->u2_params.timeout == 0))
4184 return 0;
4185
4186
4187 if (usb_disable_link_state(hcd, udev, USB3_LPM_U1))
4188 goto enable_lpm;
4189 if (usb_disable_link_state(hcd, udev, USB3_LPM_U2))
4190 goto enable_lpm;
4191
4192 return 0;
4193
4194 enable_lpm:
4195 usb_enable_lpm(udev);
4196 return -EBUSY;
4197 }
4198 EXPORT_SYMBOL_GPL(usb_disable_lpm);
4199
4200
4201 int usb_unlocked_disable_lpm(struct usb_device *udev)
4202 {
4203 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4204 int ret;
4205
4206 if (!hcd)
4207 return -EINVAL;
4208
4209 mutex_lock(hcd->bandwidth_mutex);
4210 ret = usb_disable_lpm(udev);
4211 mutex_unlock(hcd->bandwidth_mutex);
4212
4213 return ret;
4214 }
4215 EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225 void usb_enable_lpm(struct usb_device *udev)
4226 {
4227 struct usb_hcd *hcd;
4228 struct usb_hub *hub;
4229 struct usb_port *port_dev;
4230
4231 if (!udev || !udev->parent ||
4232 udev->speed < USB_SPEED_SUPER ||
4233 !udev->lpm_capable ||
4234 udev->state < USB_STATE_CONFIGURED)
4235 return;
4236
4237 udev->lpm_disable_count--;
4238 hcd = bus_to_hcd(udev->bus);
4239
4240
4241
4242 if (!hcd || !hcd->driver->enable_usb3_lpm_timeout ||
4243 !hcd->driver->disable_usb3_lpm_timeout)
4244 return;
4245
4246 if (udev->lpm_disable_count > 0)
4247 return;
4248
4249 hub = usb_hub_to_struct_hub(udev->parent);
4250 if (!hub)
4251 return;
4252
4253 port_dev = hub->ports[udev->portnum - 1];
4254
4255 if (port_dev->usb3_lpm_u1_permit)
4256 usb_enable_link_state(hcd, udev, USB3_LPM_U1);
4257
4258 if (port_dev->usb3_lpm_u2_permit)
4259 usb_enable_link_state(hcd, udev, USB3_LPM_U2);
4260 }
4261 EXPORT_SYMBOL_GPL(usb_enable_lpm);
4262
4263
4264 void usb_unlocked_enable_lpm(struct usb_device *udev)
4265 {
4266 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4267
4268 if (!hcd)
4269 return;
4270
4271 mutex_lock(hcd->bandwidth_mutex);
4272 usb_enable_lpm(udev);
4273 mutex_unlock(hcd->bandwidth_mutex);
4274 }
4275 EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm);
4276
4277
4278 static void hub_usb3_port_prepare_disable(struct usb_hub *hub,
4279 struct usb_port *port_dev)
4280 {
4281 struct usb_device *udev = port_dev->child;
4282 int ret;
4283
4284 if (udev && udev->port_is_suspended && udev->do_remote_wakeup) {
4285 ret = hub_set_port_link_state(hub, port_dev->portnum,
4286 USB_SS_PORT_LS_U0);
4287 if (!ret) {
4288 msleep(USB_RESUME_TIMEOUT);
4289 ret = usb_disable_remote_wakeup(udev);
4290 }
4291 if (ret)
4292 dev_warn(&udev->dev,
4293 "Port disable: can't disable remote wake\n");
4294 udev->do_remote_wakeup = 0;
4295 }
4296 }
4297
4298 #else
4299
4300 #define hub_suspend NULL
4301 #define hub_resume NULL
4302 #define hub_reset_resume NULL
4303
4304 static inline void hub_usb3_port_prepare_disable(struct usb_hub *hub,
4305 struct usb_port *port_dev) { }
4306
4307 int usb_disable_lpm(struct usb_device *udev)
4308 {
4309 return 0;
4310 }
4311 EXPORT_SYMBOL_GPL(usb_disable_lpm);
4312
4313 void usb_enable_lpm(struct usb_device *udev) { }
4314 EXPORT_SYMBOL_GPL(usb_enable_lpm);
4315
4316 int usb_unlocked_disable_lpm(struct usb_device *udev)
4317 {
4318 return 0;
4319 }
4320 EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
4321
4322 void usb_unlocked_enable_lpm(struct usb_device *udev) { }
4323 EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm);
4324
4325 int usb_disable_ltm(struct usb_device *udev)
4326 {
4327 return 0;
4328 }
4329 EXPORT_SYMBOL_GPL(usb_disable_ltm);
4330
4331 void usb_enable_ltm(struct usb_device *udev) { }
4332 EXPORT_SYMBOL_GPL(usb_enable_ltm);
4333
4334 static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
4335 u16 portstatus, u16 portchange)
4336 {
4337 return 0;
4338 }
4339
4340 #endif
4341
4342
4343
4344
4345
4346
4347 static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
4348 {
4349 struct usb_port *port_dev = hub->ports[port1 - 1];
4350 struct usb_device *hdev = hub->hdev;
4351 int ret = 0;
4352
4353 if (!hub->error) {
4354 if (hub_is_superspeed(hub->hdev)) {
4355 hub_usb3_port_prepare_disable(hub, port_dev);
4356 ret = hub_set_port_link_state(hub, port_dev->portnum,
4357 USB_SS_PORT_LS_U3);
4358 } else {
4359 ret = usb_clear_port_feature(hdev, port1,
4360 USB_PORT_FEAT_ENABLE);
4361 }
4362 }
4363 if (port_dev->child && set_state)
4364 usb_set_device_state(port_dev->child, USB_STATE_NOTATTACHED);
4365 if (ret && ret != -ENODEV)
4366 dev_err(&port_dev->dev, "cannot disable (err = %d)\n", ret);
4367 return ret;
4368 }
4369
4370
4371
4372
4373
4374
4375
4376
4377 int usb_port_disable(struct usb_device *udev)
4378 {
4379 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
4380
4381 return hub_port_disable(hub, udev->portnum, 0);
4382 }
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399 int hub_port_debounce(struct usb_hub *hub, int port1, bool must_be_connected)
4400 {
4401 int ret;
4402 u16 portchange, portstatus;
4403 unsigned connection = 0xffff;
4404 int total_time, stable_time = 0;
4405 struct usb_port *port_dev = hub->ports[port1 - 1];
4406
4407 for (total_time = 0; ; total_time += HUB_DEBOUNCE_STEP) {
4408 ret = hub_port_status(hub, port1, &portstatus, &portchange);
4409 if (ret < 0)
4410 return ret;
4411
4412 if (!(portchange & USB_PORT_STAT_C_CONNECTION) &&
4413 (portstatus & USB_PORT_STAT_CONNECTION) == connection) {
4414 if (!must_be_connected ||
4415 (connection == USB_PORT_STAT_CONNECTION))
4416 stable_time += HUB_DEBOUNCE_STEP;
4417 if (stable_time >= HUB_DEBOUNCE_STABLE)
4418 break;
4419 } else {
4420 stable_time = 0;
4421 connection = portstatus & USB_PORT_STAT_CONNECTION;
4422 }
4423
4424 if (portchange & USB_PORT_STAT_C_CONNECTION) {
4425 usb_clear_port_feature(hub->hdev, port1,
4426 USB_PORT_FEAT_C_CONNECTION);
4427 }
4428
4429 if (total_time >= HUB_DEBOUNCE_TIMEOUT)
4430 break;
4431 msleep(HUB_DEBOUNCE_STEP);
4432 }
4433
4434 dev_dbg(&port_dev->dev, "debounce total %dms stable %dms status 0x%x\n",
4435 total_time, stable_time, portstatus);
4436
4437 if (stable_time < HUB_DEBOUNCE_STABLE)
4438 return -ETIMEDOUT;
4439 return portstatus;
4440 }
4441
4442 void usb_ep0_reinit(struct usb_device *udev)
4443 {
4444 usb_disable_endpoint(udev, 0 + USB_DIR_IN, true);
4445 usb_disable_endpoint(udev, 0 + USB_DIR_OUT, true);
4446 usb_enable_endpoint(udev, &udev->ep0, true);
4447 }
4448 EXPORT_SYMBOL_GPL(usb_ep0_reinit);
4449
4450 #define usb_sndaddr0pipe() (PIPE_CONTROL << 30)
4451 #define usb_rcvaddr0pipe() ((PIPE_CONTROL << 30) | USB_DIR_IN)
4452
4453 static int hub_set_address(struct usb_device *udev, int devnum)
4454 {
4455 int retval;
4456 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4457
4458
4459
4460
4461
4462 if (!hcd->driver->address_device && devnum <= 1)
4463 return -EINVAL;
4464 if (udev->state == USB_STATE_ADDRESS)
4465 return 0;
4466 if (udev->state != USB_STATE_DEFAULT)
4467 return -EINVAL;
4468 if (hcd->driver->address_device)
4469 retval = hcd->driver->address_device(hcd, udev);
4470 else
4471 retval = usb_control_msg(udev, usb_sndaddr0pipe(),
4472 USB_REQ_SET_ADDRESS, 0, devnum, 0,
4473 NULL, 0, USB_CTRL_SET_TIMEOUT);
4474 if (retval == 0) {
4475 update_devnum(udev, devnum);
4476
4477 usb_set_device_state(udev, USB_STATE_ADDRESS);
4478 usb_ep0_reinit(udev);
4479 }
4480 return retval;
4481 }
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492 static void hub_set_initial_usb2_lpm_policy(struct usb_device *udev)
4493 {
4494 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
4495 int connect_type = USB_PORT_CONNECT_TYPE_UNKNOWN;
4496
4497 if (!udev->usb2_hw_lpm_capable || !udev->bos)
4498 return;
4499
4500 if (hub)
4501 connect_type = hub->ports[udev->portnum - 1]->connect_type;
4502
4503 if ((udev->bos->ext_cap->bmAttributes & cpu_to_le32(USB_BESL_SUPPORT)) ||
4504 connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
4505 udev->usb2_hw_lpm_allowed = 1;
4506 usb_enable_usb2_hardware_lpm(udev);
4507 }
4508 }
4509
4510 static int hub_enable_device(struct usb_device *udev)
4511 {
4512 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4513
4514 if (!hcd->driver->enable_device)
4515 return 0;
4516 if (udev->state == USB_STATE_ADDRESS)
4517 return 0;
4518 if (udev->state != USB_STATE_DEFAULT)
4519 return -EINVAL;
4520
4521 return hcd->driver->enable_device(hcd, udev);
4522 }
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534 static int
4535 hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
4536 int retry_counter)
4537 {
4538 struct usb_device *hdev = hub->hdev;
4539 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
4540 struct usb_port *port_dev = hub->ports[port1 - 1];
4541 int retries, operations, retval, i;
4542 unsigned delay = HUB_SHORT_RESET_TIME;
4543 enum usb_device_speed oldspeed = udev->speed;
4544 const char *speed;
4545 int devnum = udev->devnum;
4546 const char *driver_name;
4547
4548
4549
4550
4551 if (!hdev->parent) {
4552 delay = HUB_ROOT_RESET_TIME;
4553 if (port1 == hdev->bus->otg_port)
4554 hdev->bus->b_hnp_enable = 0;
4555 }
4556
4557
4558
4559 if (oldspeed == USB_SPEED_LOW)
4560 delay = HUB_LONG_RESET_TIME;
4561
4562 mutex_lock(hcd->address0_mutex);
4563
4564
4565
4566 retval = hub_port_reset(hub, port1, udev, delay, false);
4567 if (retval < 0)
4568 goto fail;
4569
4570
4571 retval = -ENODEV;
4572
4573
4574 if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed &&
4575 !(oldspeed == USB_SPEED_SUPER && udev->speed > oldspeed)) {
4576 dev_dbg(&udev->dev, "device reset changed speed!\n");
4577 goto fail;
4578 }
4579 oldspeed = udev->speed;
4580
4581
4582
4583
4584
4585
4586 switch (udev->speed) {
4587 case USB_SPEED_SUPER_PLUS:
4588 case USB_SPEED_SUPER:
4589 case USB_SPEED_WIRELESS:
4590 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(512);
4591 break;
4592 case USB_SPEED_HIGH:
4593 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
4594 break;
4595 case USB_SPEED_FULL:
4596
4597
4598
4599
4600 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
4601 break;
4602 case USB_SPEED_LOW:
4603 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(8);
4604 break;
4605 default:
4606 goto fail;
4607 }
4608
4609 if (udev->speed == USB_SPEED_WIRELESS)
4610 speed = "variable speed Wireless";
4611 else
4612 speed = usb_speed_string(udev->speed);
4613
4614
4615
4616
4617
4618
4619
4620
4621 if (udev->bus->controller->driver)
4622 driver_name = udev->bus->controller->driver->name;
4623 else
4624 driver_name = udev->bus->sysdev->driver->name;
4625
4626 if (udev->speed < USB_SPEED_SUPER)
4627 dev_info(&udev->dev,
4628 "%s %s USB device number %d using %s\n",
4629 (udev->config) ? "reset" : "new", speed,
4630 devnum, driver_name);
4631
4632
4633 if (hdev->tt) {
4634 udev->tt = hdev->tt;
4635 udev->ttport = hdev->ttport;
4636 } else if (udev->speed != USB_SPEED_HIGH
4637 && hdev->speed == USB_SPEED_HIGH) {
4638 if (!hub->tt.hub) {
4639 dev_err(&udev->dev, "parent hub has no TT\n");
4640 retval = -EINVAL;
4641 goto fail;
4642 }
4643 udev->tt = &hub->tt;
4644 udev->ttport = port1;
4645 }
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659 for (retries = 0; retries < GET_DESCRIPTOR_TRIES; (++retries, msleep(100))) {
4660 bool did_new_scheme = false;
4661
4662 if (use_new_scheme(udev, retry_counter, port_dev)) {
4663 struct usb_device_descriptor *buf;
4664 int r = 0;
4665
4666 did_new_scheme = true;
4667 retval = hub_enable_device(udev);
4668 if (retval < 0) {
4669 dev_err(&udev->dev,
4670 "hub failed to enable device, error %d\n",
4671 retval);
4672 goto fail;
4673 }
4674
4675 #define GET_DESCRIPTOR_BUFSIZE 64
4676 buf = kmalloc(GET_DESCRIPTOR_BUFSIZE, GFP_NOIO);
4677 if (!buf) {
4678 retval = -ENOMEM;
4679 continue;
4680 }
4681
4682
4683
4684
4685
4686 for (operations = 0; operations < 3; ++operations) {
4687 buf->bMaxPacketSize0 = 0;
4688 r = usb_control_msg(udev, usb_rcvaddr0pipe(),
4689 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
4690 USB_DT_DEVICE << 8, 0,
4691 buf, GET_DESCRIPTOR_BUFSIZE,
4692 initial_descriptor_timeout);
4693 switch (buf->bMaxPacketSize0) {
4694 case 8: case 16: case 32: case 64: case 255:
4695 if (buf->bDescriptorType ==
4696 USB_DT_DEVICE) {
4697 r = 0;
4698 break;
4699 }
4700
4701 default:
4702 if (r == 0)
4703 r = -EPROTO;
4704 break;
4705 }
4706
4707
4708
4709
4710
4711
4712 if (r == 0 || (r == -ETIMEDOUT &&
4713 retries == 0 &&
4714 udev->speed > USB_SPEED_FULL))
4715 break;
4716 }
4717 udev->descriptor.bMaxPacketSize0 =
4718 buf->bMaxPacketSize0;
4719 kfree(buf);
4720
4721 retval = hub_port_reset(hub, port1, udev, delay, false);
4722 if (retval < 0)
4723 goto fail;
4724 if (oldspeed != udev->speed) {
4725 dev_dbg(&udev->dev,
4726 "device reset changed speed!\n");
4727 retval = -ENODEV;
4728 goto fail;
4729 }
4730 if (r) {
4731 if (r != -ENODEV)
4732 dev_err(&udev->dev, "device descriptor read/64, error %d\n",
4733 r);
4734 retval = -EMSGSIZE;
4735 continue;
4736 }
4737 #undef GET_DESCRIPTOR_BUFSIZE
4738 }
4739
4740
4741
4742
4743
4744
4745 if (udev->wusb == 0) {
4746 for (operations = 0; operations < SET_ADDRESS_TRIES; ++operations) {
4747 retval = hub_set_address(udev, devnum);
4748 if (retval >= 0)
4749 break;
4750 msleep(200);
4751 }
4752 if (retval < 0) {
4753 if (retval != -ENODEV)
4754 dev_err(&udev->dev, "device not accepting address %d, error %d\n",
4755 devnum, retval);
4756 goto fail;
4757 }
4758 if (udev->speed >= USB_SPEED_SUPER) {
4759 devnum = udev->devnum;
4760 dev_info(&udev->dev,
4761 "%s SuperSpeed%s%s USB device number %d using %s\n",
4762 (udev->config) ? "reset" : "new",
4763 (udev->speed == USB_SPEED_SUPER_PLUS) ?
4764 "Plus Gen 2" : " Gen 1",
4765 (udev->rx_lanes == 2 && udev->tx_lanes == 2) ?
4766 "x2" : "",
4767 devnum, driver_name);
4768 }
4769
4770
4771
4772
4773
4774 msleep(10);
4775
4776
4777
4778
4779 if (did_new_scheme)
4780 break;
4781 }
4782
4783 retval = usb_get_device_descriptor(udev, 8);
4784 if (retval < 8) {
4785 if (retval != -ENODEV)
4786 dev_err(&udev->dev,
4787 "device descriptor read/8, error %d\n",
4788 retval);
4789 if (retval >= 0)
4790 retval = -EMSGSIZE;
4791 } else {
4792 u32 delay;
4793
4794 retval = 0;
4795
4796 delay = udev->parent->hub_delay;
4797 udev->hub_delay = min_t(u32, delay,
4798 USB_TP_TRANSMISSION_DELAY_MAX);
4799 retval = usb_set_isoch_delay(udev);
4800 if (retval) {
4801 dev_dbg(&udev->dev,
4802 "Failed set isoch delay, error %d\n",
4803 retval);
4804 retval = 0;
4805 }
4806 break;
4807 }
4808 }
4809 if (retval)
4810 goto fail;
4811
4812
4813
4814
4815
4816
4817
4818 if ((udev->speed >= USB_SPEED_SUPER) &&
4819 (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0300)) {
4820 dev_err(&udev->dev, "got a wrong device descriptor, "
4821 "warm reset device\n");
4822 hub_port_reset(hub, port1, udev,
4823 HUB_BH_RESET_TIME, true);
4824 retval = -EINVAL;
4825 goto fail;
4826 }
4827
4828 if (udev->descriptor.bMaxPacketSize0 == 0xff ||
4829 udev->speed >= USB_SPEED_SUPER)
4830 i = 512;
4831 else
4832 i = udev->descriptor.bMaxPacketSize0;
4833 if (usb_endpoint_maxp(&udev->ep0.desc) != i) {
4834 if (udev->speed == USB_SPEED_LOW ||
4835 !(i == 8 || i == 16 || i == 32 || i == 64)) {
4836 dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", i);
4837 retval = -EMSGSIZE;
4838 goto fail;
4839 }
4840 if (udev->speed == USB_SPEED_FULL)
4841 dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
4842 else
4843 dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i);
4844 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i);
4845 usb_ep0_reinit(udev);
4846 }
4847
4848 retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
4849 if (retval < (signed)sizeof(udev->descriptor)) {
4850 if (retval != -ENODEV)
4851 dev_err(&udev->dev, "device descriptor read/all, error %d\n",
4852 retval);
4853 if (retval >= 0)
4854 retval = -ENOMSG;
4855 goto fail;
4856 }
4857
4858 usb_detect_quirks(udev);
4859
4860 if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) {
4861 retval = usb_get_bos_descriptor(udev);
4862 if (!retval) {
4863 udev->lpm_capable = usb_device_supports_lpm(udev);
4864 usb_set_lpm_parameters(udev);
4865 }
4866 }
4867
4868 retval = 0;
4869
4870 if (hcd->driver->update_device)
4871 hcd->driver->update_device(hcd, udev);
4872 hub_set_initial_usb2_lpm_policy(udev);
4873 fail:
4874 if (retval) {
4875 hub_port_disable(hub, port1, 0);
4876 update_devnum(udev, devnum);
4877 }
4878 mutex_unlock(hcd->address0_mutex);
4879 return retval;
4880 }
4881
4882 static void
4883 check_highspeed(struct usb_hub *hub, struct usb_device *udev, int port1)
4884 {
4885 struct usb_qualifier_descriptor *qual;
4886 int status;
4887
4888 if (udev->quirks & USB_QUIRK_DEVICE_QUALIFIER)
4889 return;
4890
4891 qual = kmalloc(sizeof *qual, GFP_KERNEL);
4892 if (qual == NULL)
4893 return;
4894
4895 status = usb_get_descriptor(udev, USB_DT_DEVICE_QUALIFIER, 0,
4896 qual, sizeof *qual);
4897 if (status == sizeof *qual) {
4898 dev_info(&udev->dev, "not running at top speed; "
4899 "connect to a high speed hub\n");
4900
4901 if (hub->has_indicators) {
4902 hub->indicator[port1-1] = INDICATOR_GREEN_BLINK;
4903 queue_delayed_work(system_power_efficient_wq,
4904 &hub->leds, 0);
4905 }
4906 }
4907 kfree(qual);
4908 }
4909
4910 static unsigned
4911 hub_power_remaining(struct usb_hub *hub)
4912 {
4913 struct usb_device *hdev = hub->hdev;
4914 int remaining;
4915 int port1;
4916
4917 if (!hub->limited_power)
4918 return 0;
4919
4920 remaining = hdev->bus_mA - hub->descriptor->bHubContrCurrent;
4921 for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
4922 struct usb_port *port_dev = hub->ports[port1 - 1];
4923 struct usb_device *udev = port_dev->child;
4924 unsigned unit_load;
4925 int delta;
4926
4927 if (!udev)
4928 continue;
4929 if (hub_is_superspeed(udev))
4930 unit_load = 150;
4931 else
4932 unit_load = 100;
4933
4934
4935
4936
4937
4938 if (udev->actconfig)
4939 delta = usb_get_max_power(udev, udev->actconfig);
4940 else if (port1 != udev->bus->otg_port || hdev->parent)
4941 delta = unit_load;
4942 else
4943 delta = 8;
4944 if (delta > hub->mA_per_port)
4945 dev_warn(&port_dev->dev, "%dmA is over %umA budget!\n",
4946 delta, hub->mA_per_port);
4947 remaining -= delta;
4948 }
4949 if (remaining < 0) {
4950 dev_warn(hub->intfdev, "%dmA over power budget!\n",
4951 -remaining);
4952 remaining = 0;
4953 }
4954 return remaining;
4955 }
4956
4957 static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
4958 u16 portchange)
4959 {
4960 int status = -ENODEV;
4961 int i;
4962 unsigned unit_load;
4963 struct usb_device *hdev = hub->hdev;
4964 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
4965 struct usb_port *port_dev = hub->ports[port1 - 1];
4966 struct usb_device *udev = port_dev->child;
4967 static int unreliable_port = -1;
4968
4969
4970 if (udev) {
4971 if (hcd->usb_phy && !hdev->parent)
4972 usb_phy_notify_disconnect(hcd->usb_phy, udev->speed);
4973 usb_disconnect(&port_dev->child);
4974 }
4975
4976
4977
4978
4979 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
4980 (portchange & USB_PORT_STAT_C_CONNECTION))
4981 clear_bit(port1, hub->removed_bits);
4982
4983 if (portchange & (USB_PORT_STAT_C_CONNECTION |
4984 USB_PORT_STAT_C_ENABLE)) {
4985 status = hub_port_debounce_be_stable(hub, port1);
4986 if (status < 0) {
4987 if (status != -ENODEV &&
4988 port1 != unreliable_port &&
4989 printk_ratelimit())
4990 dev_err(&port_dev->dev, "connect-debounce failed\n");
4991 portstatus &= ~USB_PORT_STAT_CONNECTION;
4992 unreliable_port = port1;
4993 } else {
4994 portstatus = status;
4995 }
4996 }
4997
4998
4999
5000
5001 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
5002 test_bit(port1, hub->removed_bits)) {
5003
5004
5005
5006
5007
5008 if (hub_is_port_power_switchable(hub)
5009 && !port_is_power_on(hub, portstatus)
5010 && !port_dev->port_owner)
5011 set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
5012
5013 if (portstatus & USB_PORT_STAT_ENABLE)
5014 goto done;
5015 return;
5016 }
5017 if (hub_is_superspeed(hub->hdev))
5018 unit_load = 150;
5019 else
5020 unit_load = 100;
5021
5022 status = 0;
5023 for (i = 0; i < SET_CONFIG_TRIES; i++) {
5024
5025
5026
5027
5028 udev = usb_alloc_dev(hdev, hdev->bus, port1);
5029 if (!udev) {
5030 dev_err(&port_dev->dev,
5031 "couldn't allocate usb_device\n");
5032 goto done;
5033 }
5034
5035 usb_set_device_state(udev, USB_STATE_POWERED);
5036 udev->bus_mA = hub->mA_per_port;
5037 udev->level = hdev->level + 1;
5038 udev->wusb = hub_is_wusb(hub);
5039
5040
5041 if (hub_is_superspeed(hub->hdev))
5042 udev->speed = USB_SPEED_SUPER;
5043 else
5044 udev->speed = USB_SPEED_UNKNOWN;
5045
5046 choose_devnum(udev);
5047 if (udev->devnum <= 0) {
5048 status = -ENOTCONN;
5049 goto loop;
5050 }
5051
5052
5053 usb_lock_port(port_dev);
5054 status = hub_port_init(hub, udev, port1, i);
5055 usb_unlock_port(port_dev);
5056 if (status < 0)
5057 goto loop;
5058
5059 if (udev->quirks & USB_QUIRK_DELAY_INIT)
5060 msleep(2000);
5061
5062
5063
5064
5065
5066
5067
5068 if (udev->descriptor.bDeviceClass == USB_CLASS_HUB
5069 && udev->bus_mA <= unit_load) {
5070 u16 devstat;
5071
5072 status = usb_get_std_status(udev, USB_RECIP_DEVICE, 0,
5073 &devstat);
5074 if (status) {
5075 dev_dbg(&udev->dev, "get status %d ?\n", status);
5076 goto loop_disable;
5077 }
5078 if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
5079 dev_err(&udev->dev,
5080 "can't connect bus-powered hub "
5081 "to this port\n");
5082 if (hub->has_indicators) {
5083 hub->indicator[port1-1] =
5084 INDICATOR_AMBER_BLINK;
5085 queue_delayed_work(
5086 system_power_efficient_wq,
5087 &hub->leds, 0);
5088 }
5089 status = -ENOTCONN;
5090 goto loop_disable;
5091 }
5092 }
5093
5094
5095 if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0200
5096 && udev->speed == USB_SPEED_FULL
5097 && highspeed_hubs != 0)
5098 check_highspeed(hub, udev, port1);
5099
5100
5101
5102
5103
5104 status = 0;
5105
5106 mutex_lock(&usb_port_peer_mutex);
5107
5108
5109
5110
5111
5112 spin_lock_irq(&device_state_lock);
5113 if (hdev->state == USB_STATE_NOTATTACHED)
5114 status = -ENOTCONN;
5115 else
5116 port_dev->child = udev;
5117 spin_unlock_irq(&device_state_lock);
5118 mutex_unlock(&usb_port_peer_mutex);
5119
5120
5121 if (!status) {
5122 status = usb_new_device(udev);
5123 if (status) {
5124 mutex_lock(&usb_port_peer_mutex);
5125 spin_lock_irq(&device_state_lock);
5126 port_dev->child = NULL;
5127 spin_unlock_irq(&device_state_lock);
5128 mutex_unlock(&usb_port_peer_mutex);
5129 } else {
5130 if (hcd->usb_phy && !hdev->parent)
5131 usb_phy_notify_connect(hcd->usb_phy,
5132 udev->speed);
5133 }
5134 }
5135
5136 if (status)
5137 goto loop_disable;
5138
5139 status = hub_power_remaining(hub);
5140 if (status)
5141 dev_dbg(hub->intfdev, "%dmA power budget left\n", status);
5142
5143 return;
5144
5145 loop_disable:
5146 hub_port_disable(hub, port1, 1);
5147 loop:
5148 usb_ep0_reinit(udev);
5149 release_devnum(udev);
5150 hub_free_dev(udev);
5151 usb_put_dev(udev);
5152 if ((status == -ENOTCONN) || (status == -ENOTSUPP))
5153 break;
5154
5155
5156 if (i == (SET_CONFIG_TRIES / 2) - 1) {
5157 dev_info(&port_dev->dev, "attempt power cycle\n");
5158 usb_hub_set_port_power(hdev, hub, port1, false);
5159 msleep(2 * hub_power_on_good_delay(hub));
5160 usb_hub_set_port_power(hdev, hub, port1, true);
5161 msleep(hub_power_on_good_delay(hub));
5162 }
5163 }
5164 if (hub->hdev->parent ||
5165 !hcd->driver->port_handed_over ||
5166 !(hcd->driver->port_handed_over)(hcd, port1)) {
5167 if (status != -ENOTCONN && status != -ENODEV)
5168 dev_err(&port_dev->dev,
5169 "unable to enumerate USB device\n");
5170 }
5171
5172 done:
5173 hub_port_disable(hub, port1, 1);
5174 if (hcd->driver->relinquish_port && !hub->hdev->parent) {
5175 if (status != -ENOTCONN && status != -ENODEV)
5176 hcd->driver->relinquish_port(hcd, port1);
5177 }
5178 }
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188 static void hub_port_connect_change(struct usb_hub *hub, int port1,
5189 u16 portstatus, u16 portchange)
5190 __must_hold(&port_dev->status_lock)
5191 {
5192 struct usb_port *port_dev = hub->ports[port1 - 1];
5193 struct usb_device *udev = port_dev->child;
5194 int status = -ENODEV;
5195
5196 dev_dbg(&port_dev->dev, "status %04x, change %04x, %s\n", portstatus,
5197 portchange, portspeed(hub, portstatus));
5198
5199 if (hub->has_indicators) {
5200 set_port_led(hub, port1, HUB_LED_AUTO);
5201 hub->indicator[port1-1] = INDICATOR_AUTO;
5202 }
5203
5204 #ifdef CONFIG_USB_OTG
5205
5206 if (hub->hdev->bus->is_b_host)
5207 portchange &= ~(USB_PORT_STAT_C_CONNECTION |
5208 USB_PORT_STAT_C_ENABLE);
5209 #endif
5210
5211
5212 if ((portstatus & USB_PORT_STAT_CONNECTION) && udev &&
5213 udev->state != USB_STATE_NOTATTACHED) {
5214 if (portstatus & USB_PORT_STAT_ENABLE) {
5215 status = 0;
5216 #ifdef CONFIG_PM
5217 } else if (udev->state == USB_STATE_SUSPENDED &&
5218 udev->persist_enabled) {
5219
5220
5221
5222 usb_unlock_port(port_dev);
5223 status = usb_remote_wakeup(udev);
5224 usb_lock_port(port_dev);
5225 #endif
5226 } else {
5227 ;
5228 }
5229 }
5230 clear_bit(port1, hub->change_bits);
5231
5232
5233 if (status == 0)
5234 return;
5235
5236 usb_unlock_port(port_dev);
5237 hub_port_connect(hub, port1, portstatus, portchange);
5238 usb_lock_port(port_dev);
5239 }
5240
5241
5242 static void port_over_current_notify(struct usb_port *port_dev)
5243 {
5244 char *envp[3];
5245 struct device *hub_dev;
5246 char *port_dev_path;
5247
5248 sysfs_notify(&port_dev->dev.kobj, NULL, "over_current_count");
5249
5250 hub_dev = port_dev->dev.parent;
5251
5252 if (!hub_dev)
5253 return;
5254
5255 port_dev_path = kobject_get_path(&port_dev->dev.kobj, GFP_KERNEL);
5256 if (!port_dev_path)
5257 return;
5258
5259 envp[0] = kasprintf(GFP_KERNEL, "OVER_CURRENT_PORT=%s", port_dev_path);
5260 if (!envp[0])
5261 goto exit_path;
5262
5263 envp[1] = kasprintf(GFP_KERNEL, "OVER_CURRENT_COUNT=%u",
5264 port_dev->over_current_count);
5265 if (!envp[1])
5266 goto exit;
5267
5268 envp[2] = NULL;
5269 kobject_uevent_env(&hub_dev->kobj, KOBJ_CHANGE, envp);
5270
5271 kfree(envp[1]);
5272 exit:
5273 kfree(envp[0]);
5274 exit_path:
5275 kfree(port_dev_path);
5276 }
5277
5278 static void port_event(struct usb_hub *hub, int port1)
5279 __must_hold(&port_dev->status_lock)
5280 {
5281 int connect_change;
5282 struct usb_port *port_dev = hub->ports[port1 - 1];
5283 struct usb_device *udev = port_dev->child;
5284 struct usb_device *hdev = hub->hdev;
5285 u16 portstatus, portchange;
5286
5287 connect_change = test_bit(port1, hub->change_bits);
5288 clear_bit(port1, hub->event_bits);
5289 clear_bit(port1, hub->wakeup_bits);
5290
5291 if (hub_port_status(hub, port1, &portstatus, &portchange) < 0)
5292 return;
5293
5294 if (portchange & USB_PORT_STAT_C_CONNECTION) {
5295 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_CONNECTION);
5296 connect_change = 1;
5297 }
5298
5299 if (portchange & USB_PORT_STAT_C_ENABLE) {
5300 if (!connect_change)
5301 dev_dbg(&port_dev->dev, "enable change, status %08x\n",
5302 portstatus);
5303 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE);
5304
5305
5306
5307
5308
5309
5310 if (!(portstatus & USB_PORT_STAT_ENABLE)
5311 && !connect_change && udev) {
5312 dev_err(&port_dev->dev, "disabled by hub (EMI?), re-enabling...\n");
5313 connect_change = 1;
5314 }
5315 }
5316
5317 if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
5318 u16 status = 0, unused;
5319 port_dev->over_current_count++;
5320 port_over_current_notify(port_dev);
5321
5322 dev_dbg(&port_dev->dev, "over-current change #%u\n",
5323 port_dev->over_current_count);
5324 usb_clear_port_feature(hdev, port1,
5325 USB_PORT_FEAT_C_OVER_CURRENT);
5326 msleep(100);
5327 hub_power_on(hub, true);
5328 hub_port_status(hub, port1, &status, &unused);
5329 if (status & USB_PORT_STAT_OVERCURRENT)
5330 dev_err(&port_dev->dev, "over-current condition\n");
5331 }
5332
5333 if (portchange & USB_PORT_STAT_C_RESET) {
5334 dev_dbg(&port_dev->dev, "reset change\n");
5335 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_RESET);
5336 }
5337 if ((portchange & USB_PORT_STAT_C_BH_RESET)
5338 && hub_is_superspeed(hdev)) {
5339 dev_dbg(&port_dev->dev, "warm reset change\n");
5340 usb_clear_port_feature(hdev, port1,
5341 USB_PORT_FEAT_C_BH_PORT_RESET);
5342 }
5343 if (portchange & USB_PORT_STAT_C_LINK_STATE) {
5344 dev_dbg(&port_dev->dev, "link state change\n");
5345 usb_clear_port_feature(hdev, port1,
5346 USB_PORT_FEAT_C_PORT_LINK_STATE);
5347 }
5348 if (portchange & USB_PORT_STAT_C_CONFIG_ERROR) {
5349 dev_warn(&port_dev->dev, "config error\n");
5350 usb_clear_port_feature(hdev, port1,
5351 USB_PORT_FEAT_C_PORT_CONFIG_ERROR);
5352 }
5353
5354
5355 if (!pm_runtime_active(&port_dev->dev))
5356 return;
5357
5358 if (hub_handle_remote_wakeup(hub, port1, portstatus, portchange))
5359 connect_change = 1;
5360
5361
5362
5363
5364
5365 if (hub_port_warm_reset_required(hub, port1, portstatus)) {
5366 dev_dbg(&port_dev->dev, "do warm reset\n");
5367 if (!udev || !(portstatus & USB_PORT_STAT_CONNECTION)
5368 || udev->state == USB_STATE_NOTATTACHED) {
5369 if (hub_port_reset(hub, port1, NULL,
5370 HUB_BH_RESET_TIME, true) < 0)
5371 hub_port_disable(hub, port1, 1);
5372 } else {
5373 usb_unlock_port(port_dev);
5374 usb_lock_device(udev);
5375 usb_reset_device(udev);
5376 usb_unlock_device(udev);
5377 usb_lock_port(port_dev);
5378 connect_change = 0;
5379 }
5380 }
5381
5382 if (connect_change)
5383 hub_port_connect_change(hub, port1, portstatus, portchange);
5384 }
5385
5386 static void hub_event(struct work_struct *work)
5387 {
5388 struct usb_device *hdev;
5389 struct usb_interface *intf;
5390 struct usb_hub *hub;
5391 struct device *hub_dev;
5392 u16 hubstatus;
5393 u16 hubchange;
5394 int i, ret;
5395
5396 hub = container_of(work, struct usb_hub, events);
5397 hdev = hub->hdev;
5398 hub_dev = hub->intfdev;
5399 intf = to_usb_interface(hub_dev);
5400
5401 dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
5402 hdev->state, hdev->maxchild,
5403
5404 (u16) hub->change_bits[0],
5405 (u16) hub->event_bits[0]);
5406
5407
5408
5409 usb_lock_device(hdev);
5410 if (unlikely(hub->disconnected))
5411 goto out_hdev_lock;
5412
5413
5414 if (hdev->state == USB_STATE_NOTATTACHED) {
5415 hub->error = -ENODEV;
5416 hub_quiesce(hub, HUB_DISCONNECT);
5417 goto out_hdev_lock;
5418 }
5419
5420
5421 ret = usb_autopm_get_interface(intf);
5422 if (ret) {
5423 dev_dbg(hub_dev, "Can't autoresume: %d\n", ret);
5424 goto out_hdev_lock;
5425 }
5426
5427
5428 if (hub->quiescing)
5429 goto out_autopm;
5430
5431 if (hub->error) {
5432 dev_dbg(hub_dev, "resetting for error %d\n", hub->error);
5433
5434 ret = usb_reset_device(hdev);
5435 if (ret) {
5436 dev_dbg(hub_dev, "error resetting hub: %d\n", ret);
5437 goto out_autopm;
5438 }
5439
5440 hub->nerrors = 0;
5441 hub->error = 0;
5442 }
5443
5444
5445 for (i = 1; i <= hdev->maxchild; i++) {
5446 struct usb_port *port_dev = hub->ports[i - 1];
5447
5448 if (test_bit(i, hub->event_bits)
5449 || test_bit(i, hub->change_bits)
5450 || test_bit(i, hub->wakeup_bits)) {
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460 pm_runtime_get_noresume(&port_dev->dev);
5461 pm_runtime_barrier(&port_dev->dev);
5462 usb_lock_port(port_dev);
5463 port_event(hub, i);
5464 usb_unlock_port(port_dev);
5465 pm_runtime_put_sync(&port_dev->dev);
5466 }
5467 }
5468
5469
5470 if (test_and_clear_bit(0, hub->event_bits) == 0)
5471 ;
5472 else if (hub_hub_status(hub, &hubstatus, &hubchange) < 0)
5473 dev_err(hub_dev, "get_hub_status failed\n");
5474 else {
5475 if (hubchange & HUB_CHANGE_LOCAL_POWER) {
5476 dev_dbg(hub_dev, "power change\n");
5477 clear_hub_feature(hdev, C_HUB_LOCAL_POWER);
5478 if (hubstatus & HUB_STATUS_LOCAL_POWER)
5479
5480 hub->limited_power = 1;
5481 else
5482 hub->limited_power = 0;
5483 }
5484 if (hubchange & HUB_CHANGE_OVERCURRENT) {
5485 u16 status = 0;
5486 u16 unused;
5487
5488 dev_dbg(hub_dev, "over-current change\n");
5489 clear_hub_feature(hdev, C_HUB_OVER_CURRENT);
5490 msleep(500);
5491 hub_power_on(hub, true);
5492 hub_hub_status(hub, &status, &unused);
5493 if (status & HUB_STATUS_OVERCURRENT)
5494 dev_err(hub_dev, "over-current condition\n");
5495 }
5496 }
5497
5498 out_autopm:
5499
5500 usb_autopm_put_interface_no_suspend(intf);
5501 out_hdev_lock:
5502 usb_unlock_device(hdev);
5503
5504
5505 usb_autopm_put_interface(intf);
5506 kref_put(&hub->kref, hub_release);
5507 }
5508
5509 static const struct usb_device_id hub_id_table[] = {
5510 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR
5511 | USB_DEVICE_ID_MATCH_PRODUCT
5512 | USB_DEVICE_ID_MATCH_INT_CLASS,
5513 .idVendor = USB_VENDOR_SMSC,
5514 .idProduct = USB_PRODUCT_USB5534B,
5515 .bInterfaceClass = USB_CLASS_HUB,
5516 .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND},
5517 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR
5518 | USB_DEVICE_ID_MATCH_INT_CLASS,
5519 .idVendor = USB_VENDOR_GENESYS_LOGIC,
5520 .bInterfaceClass = USB_CLASS_HUB,
5521 .driver_info = HUB_QUIRK_CHECK_PORT_AUTOSUSPEND},
5522 { .match_flags = USB_DEVICE_ID_MATCH_DEV_CLASS,
5523 .bDeviceClass = USB_CLASS_HUB},
5524 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
5525 .bInterfaceClass = USB_CLASS_HUB},
5526 { }
5527 };
5528
5529 MODULE_DEVICE_TABLE(usb, hub_id_table);
5530
5531 static struct usb_driver hub_driver = {
5532 .name = "hub",
5533 .probe = hub_probe,
5534 .disconnect = hub_disconnect,
5535 .suspend = hub_suspend,
5536 .resume = hub_resume,
5537 .reset_resume = hub_reset_resume,
5538 .pre_reset = hub_pre_reset,
5539 .post_reset = hub_post_reset,
5540 .unlocked_ioctl = hub_ioctl,
5541 .id_table = hub_id_table,
5542 .supports_autosuspend = 1,
5543 };
5544
5545 int usb_hub_init(void)
5546 {
5547 if (usb_register(&hub_driver) < 0) {
5548 printk(KERN_ERR "%s: can't register hub driver\n",
5549 usbcore_name);
5550 return -1;
5551 }
5552
5553
5554
5555
5556
5557
5558
5559 hub_wq = alloc_workqueue("usb_hub_wq", WQ_FREEZABLE, 0);
5560 if (hub_wq)
5561 return 0;
5562
5563
5564 usb_deregister(&hub_driver);
5565 pr_err("%s: can't allocate workqueue for usb hub\n", usbcore_name);
5566
5567 return -1;
5568 }
5569
5570 void usb_hub_cleanup(void)
5571 {
5572 destroy_workqueue(hub_wq);
5573
5574
5575
5576
5577
5578
5579
5580
5581 usb_deregister(&hub_driver);
5582 }
5583
5584 static int descriptors_changed(struct usb_device *udev,
5585 struct usb_device_descriptor *old_device_descriptor,
5586 struct usb_host_bos *old_bos)
5587 {
5588 int changed = 0;
5589 unsigned index;
5590 unsigned serial_len = 0;
5591 unsigned len;
5592 unsigned old_length;
5593 int length;
5594 char *buf;
5595
5596 if (memcmp(&udev->descriptor, old_device_descriptor,
5597 sizeof(*old_device_descriptor)) != 0)
5598 return 1;
5599
5600 if ((old_bos && !udev->bos) || (!old_bos && udev->bos))
5601 return 1;
5602 if (udev->bos) {
5603 len = le16_to_cpu(udev->bos->desc->wTotalLength);
5604 if (len != le16_to_cpu(old_bos->desc->wTotalLength))
5605 return 1;
5606 if (memcmp(udev->bos->desc, old_bos->desc, len))
5607 return 1;
5608 }
5609
5610
5611
5612
5613
5614
5615
5616 if (udev->serial)
5617 serial_len = strlen(udev->serial) + 1;
5618
5619 len = serial_len;
5620 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
5621 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
5622 len = max(len, old_length);
5623 }
5624
5625 buf = kmalloc(len, GFP_NOIO);
5626 if (!buf)
5627
5628 return 1;
5629
5630 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
5631 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
5632 length = usb_get_descriptor(udev, USB_DT_CONFIG, index, buf,
5633 old_length);
5634 if (length != old_length) {
5635 dev_dbg(&udev->dev, "config index %d, error %d\n",
5636 index, length);
5637 changed = 1;
5638 break;
5639 }
5640 if (memcmp(buf, udev->rawdescriptors[index], old_length)
5641 != 0) {
5642 dev_dbg(&udev->dev, "config index %d changed (#%d)\n",
5643 index,
5644 ((struct usb_config_descriptor *) buf)->
5645 bConfigurationValue);
5646 changed = 1;
5647 break;
5648 }
5649 }
5650
5651 if (!changed && serial_len) {
5652 length = usb_string(udev, udev->descriptor.iSerialNumber,
5653 buf, serial_len);
5654 if (length + 1 != serial_len) {
5655 dev_dbg(&udev->dev, "serial string error %d\n",
5656 length);
5657 changed = 1;
5658 } else if (memcmp(buf, udev->serial, length) != 0) {
5659 dev_dbg(&udev->dev, "serial string changed\n");
5660 changed = 1;
5661 }
5662 }
5663
5664 kfree(buf);
5665 return changed;
5666 }
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702 static int usb_reset_and_verify_device(struct usb_device *udev)
5703 {
5704 struct usb_device *parent_hdev = udev->parent;
5705 struct usb_hub *parent_hub;
5706 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
5707 struct usb_device_descriptor descriptor = udev->descriptor;
5708 struct usb_host_bos *bos;
5709 int i, j, ret = 0;
5710 int port1 = udev->portnum;
5711
5712 if (udev->state == USB_STATE_NOTATTACHED ||
5713 udev->state == USB_STATE_SUSPENDED) {
5714 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
5715 udev->state);
5716 return -EINVAL;
5717 }
5718
5719 if (!parent_hdev)
5720 return -EISDIR;
5721
5722 parent_hub = usb_hub_to_struct_hub(parent_hdev);
5723
5724
5725
5726
5727 usb_disable_usb2_hardware_lpm(udev);
5728
5729
5730
5731
5732
5733 ret = usb_unlocked_disable_lpm(udev);
5734 if (ret) {
5735 dev_err(&udev->dev, "%s Failed to disable LPM\n", __func__);
5736 goto re_enumerate_no_bos;
5737 }
5738
5739 bos = udev->bos;
5740 udev->bos = NULL;
5741
5742 for (i = 0; i < SET_CONFIG_TRIES; ++i) {
5743
5744
5745
5746 usb_ep0_reinit(udev);
5747 ret = hub_port_init(parent_hub, udev, port1, i);
5748 if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV)
5749 break;
5750 }
5751
5752 if (ret < 0)
5753 goto re_enumerate;
5754
5755
5756 if (descriptors_changed(udev, &descriptor, bos)) {
5757 dev_info(&udev->dev, "device firmware changed\n");
5758 udev->descriptor = descriptor;
5759 goto re_enumerate;
5760 }
5761
5762
5763 if (!udev->actconfig)
5764 goto done;
5765
5766 mutex_lock(hcd->bandwidth_mutex);
5767 ret = usb_hcd_alloc_bandwidth(udev, udev->actconfig, NULL, NULL);
5768 if (ret < 0) {
5769 dev_warn(&udev->dev,
5770 "Busted HC? Not enough HCD resources for "
5771 "old configuration.\n");
5772 mutex_unlock(hcd->bandwidth_mutex);
5773 goto re_enumerate;
5774 }
5775 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
5776 USB_REQ_SET_CONFIGURATION, 0,
5777 udev->actconfig->desc.bConfigurationValue, 0,
5778 NULL, 0, USB_CTRL_SET_TIMEOUT);
5779 if (ret < 0) {
5780 dev_err(&udev->dev,
5781 "can't restore configuration #%d (error=%d)\n",
5782 udev->actconfig->desc.bConfigurationValue, ret);
5783 mutex_unlock(hcd->bandwidth_mutex);
5784 goto re_enumerate;
5785 }
5786 mutex_unlock(hcd->bandwidth_mutex);
5787 usb_set_device_state(udev, USB_STATE_CONFIGURED);
5788
5789
5790
5791
5792
5793
5794
5795 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
5796 struct usb_host_config *config = udev->actconfig;
5797 struct usb_interface *intf = config->interface[i];
5798 struct usb_interface_descriptor *desc;
5799
5800 desc = &intf->cur_altsetting->desc;
5801 if (desc->bAlternateSetting == 0) {
5802 usb_disable_interface(udev, intf, true);
5803 usb_enable_interface(udev, intf, true);
5804 ret = 0;
5805 } else {
5806
5807
5808
5809
5810 intf->resetting_device = 1;
5811 ret = usb_set_interface(udev, desc->bInterfaceNumber,
5812 desc->bAlternateSetting);
5813 intf->resetting_device = 0;
5814 }
5815 if (ret < 0) {
5816 dev_err(&udev->dev, "failed to restore interface %d "
5817 "altsetting %d (error=%d)\n",
5818 desc->bInterfaceNumber,
5819 desc->bAlternateSetting,
5820 ret);
5821 goto re_enumerate;
5822 }
5823
5824 for (j = 0; j < intf->cur_altsetting->desc.bNumEndpoints; j++)
5825 intf->cur_altsetting->endpoint[j].streams = 0;
5826 }
5827
5828 done:
5829
5830 usb_enable_usb2_hardware_lpm(udev);
5831 usb_unlocked_enable_lpm(udev);
5832 usb_enable_ltm(udev);
5833 usb_release_bos_descriptor(udev);
5834 udev->bos = bos;
5835 return 0;
5836
5837 re_enumerate:
5838 usb_release_bos_descriptor(udev);
5839 udev->bos = bos;
5840 re_enumerate_no_bos:
5841
5842 hub_port_logical_disconnect(parent_hub, port1);
5843 return -ENODEV;
5844 }
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867 int usb_reset_device(struct usb_device *udev)
5868 {
5869 int ret;
5870 int i;
5871 unsigned int noio_flag;
5872 struct usb_port *port_dev;
5873 struct usb_host_config *config = udev->actconfig;
5874 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
5875
5876 if (udev->state == USB_STATE_NOTATTACHED) {
5877 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
5878 udev->state);
5879 return -EINVAL;
5880 }
5881
5882 if (!udev->parent) {
5883
5884 dev_dbg(&udev->dev, "%s for root hub!\n", __func__);
5885 return -EISDIR;
5886 }
5887
5888 port_dev = hub->ports[udev->portnum - 1];
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899 noio_flag = memalloc_noio_save();
5900
5901
5902 usb_autoresume_device(udev);
5903
5904 if (config) {
5905 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
5906 struct usb_interface *cintf = config->interface[i];
5907 struct usb_driver *drv;
5908 int unbind = 0;
5909
5910 if (cintf->dev.driver) {
5911 drv = to_usb_driver(cintf->dev.driver);
5912 if (drv->pre_reset && drv->post_reset)
5913 unbind = (drv->pre_reset)(cintf);
5914 else if (cintf->condition ==
5915 USB_INTERFACE_BOUND)
5916 unbind = 1;
5917 if (unbind)
5918 usb_forced_unbind_intf(cintf);
5919 }
5920 }
5921 }
5922
5923 usb_lock_port(port_dev);
5924 ret = usb_reset_and_verify_device(udev);
5925 usb_unlock_port(port_dev);
5926
5927 if (config) {
5928 for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) {
5929 struct usb_interface *cintf = config->interface[i];
5930 struct usb_driver *drv;
5931 int rebind = cintf->needs_binding;
5932
5933 if (!rebind && cintf->dev.driver) {
5934 drv = to_usb_driver(cintf->dev.driver);
5935 if (drv->post_reset)
5936 rebind = (drv->post_reset)(cintf);
5937 else if (cintf->condition ==
5938 USB_INTERFACE_BOUND)
5939 rebind = 1;
5940 if (rebind)
5941 cintf->needs_binding = 1;
5942 }
5943 }
5944
5945
5946 if (ret == 0)
5947 usb_unbind_and_rebind_marked_interfaces(udev);
5948 }
5949
5950 usb_autosuspend_device(udev);
5951 memalloc_noio_restore(noio_flag);
5952 return ret;
5953 }
5954 EXPORT_SYMBOL_GPL(usb_reset_device);
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985 void usb_queue_reset_device(struct usb_interface *iface)
5986 {
5987 if (schedule_work(&iface->reset_ws))
5988 usb_get_intf(iface);
5989 }
5990 EXPORT_SYMBOL_GPL(usb_queue_reset_device);
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005 struct usb_device *usb_hub_find_child(struct usb_device *hdev,
6006 int port1)
6007 {
6008 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
6009
6010 if (port1 < 1 || port1 > hdev->maxchild)
6011 return NULL;
6012 return hub->ports[port1 - 1]->child;
6013 }
6014 EXPORT_SYMBOL_GPL(usb_hub_find_child);
6015
6016 void usb_hub_adjust_deviceremovable(struct usb_device *hdev,
6017 struct usb_hub_descriptor *desc)
6018 {
6019 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
6020 enum usb_port_connect_type connect_type;
6021 int i;
6022
6023 if (!hub)
6024 return;
6025
6026 if (!hub_is_superspeed(hdev)) {
6027 for (i = 1; i <= hdev->maxchild; i++) {
6028 struct usb_port *port_dev = hub->ports[i - 1];
6029
6030 connect_type = port_dev->connect_type;
6031 if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
6032 u8 mask = 1 << (i%8);
6033
6034 if (!(desc->u.hs.DeviceRemovable[i/8] & mask)) {
6035 dev_dbg(&port_dev->dev, "DeviceRemovable is changed to 1 according to platform information.\n");
6036 desc->u.hs.DeviceRemovable[i/8] |= mask;
6037 }
6038 }
6039 }
6040 } else {
6041 u16 port_removable = le16_to_cpu(desc->u.ss.DeviceRemovable);
6042
6043 for (i = 1; i <= hdev->maxchild; i++) {
6044 struct usb_port *port_dev = hub->ports[i - 1];
6045
6046 connect_type = port_dev->connect_type;
6047 if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
6048 u16 mask = 1 << i;
6049
6050 if (!(port_removable & mask)) {
6051 dev_dbg(&port_dev->dev, "DeviceRemovable is changed to 1 according to platform information.\n");
6052 port_removable |= mask;
6053 }
6054 }
6055 }
6056
6057 desc->u.ss.DeviceRemovable = cpu_to_le16(port_removable);
6058 }
6059 }
6060
6061 #ifdef CONFIG_ACPI
6062
6063
6064
6065
6066
6067
6068
6069
6070 acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev,
6071 int port1)
6072 {
6073 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
6074
6075 if (!hub)
6076 return NULL;
6077
6078 return ACPI_HANDLE(&hub->ports[port1 - 1]->dev);
6079 }
6080 #endif