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