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