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