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_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 50
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 return -ENOTCONN;
2720
2721 if (!(portstatus & USB_PORT_STAT_ENABLE))
2722 return -EBUSY;
2723
2724 if (!udev)
2725 return 0;
2726
2727 if (hub_is_wusb(hub))
2728 udev->speed = USB_SPEED_WIRELESS;
2729 else if (hub_is_superspeedplus(hub->hdev) &&
2730 port_speed_is_ssp(hub->hdev, ext_portstatus &
2731 USB_EXT_PORT_STAT_RX_SPEED_ID))
2732 udev->speed = USB_SPEED_SUPER_PLUS;
2733 else if (hub_is_superspeed(hub->hdev))
2734 udev->speed = USB_SPEED_SUPER;
2735 else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
2736 udev->speed = USB_SPEED_HIGH;
2737 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
2738 udev->speed = USB_SPEED_LOW;
2739 else
2740 udev->speed = USB_SPEED_FULL;
2741 return 0;
2742}
2743
2744
2745static int hub_port_reset(struct usb_hub *hub, int port1,
2746 struct usb_device *udev, unsigned int delay, bool warm)
2747{
2748 int i, status;
2749 u16 portchange, portstatus;
2750 struct usb_port *port_dev = hub->ports[port1 - 1];
2751
2752 if (!hub_is_superspeed(hub->hdev)) {
2753 if (warm) {
2754 dev_err(hub->intfdev, "only USB3 hub support "
2755 "warm reset\n");
2756 return -EINVAL;
2757 }
2758
2759
2760
2761 down_read(&ehci_cf_port_reset_rwsem);
2762 } else if (!warm) {
2763
2764
2765
2766
2767 if (hub_port_status(hub, port1, &portstatus, &portchange) == 0)
2768 if (hub_port_warm_reset_required(hub, port1,
2769 portstatus))
2770 warm = true;
2771 }
2772 clear_bit(port1, hub->warm_reset_bits);
2773
2774
2775 for (i = 0; i < PORT_RESET_TRIES; i++) {
2776 status = set_port_feature(hub->hdev, port1, (warm ?
2777 USB_PORT_FEAT_BH_PORT_RESET :
2778 USB_PORT_FEAT_RESET));
2779 if (status == -ENODEV) {
2780 ;
2781 } else if (status) {
2782 dev_err(&port_dev->dev,
2783 "cannot %sreset (err = %d)\n",
2784 warm ? "warm " : "", status);
2785 } else {
2786 status = hub_port_wait_reset(hub, port1, udev, delay,
2787 warm);
2788 if (status && status != -ENOTCONN && status != -ENODEV)
2789 dev_dbg(hub->intfdev,
2790 "port_wait_reset: err = %d\n",
2791 status);
2792 }
2793
2794
2795 if (status == 0 || status == -ENOTCONN || status == -ENODEV) {
2796 usb_clear_port_feature(hub->hdev, port1,
2797 USB_PORT_FEAT_C_RESET);
2798
2799 if (!hub_is_superspeed(hub->hdev))
2800 goto done;
2801
2802 usb_clear_port_feature(hub->hdev, port1,
2803 USB_PORT_FEAT_C_BH_PORT_RESET);
2804 usb_clear_port_feature(hub->hdev, port1,
2805 USB_PORT_FEAT_C_PORT_LINK_STATE);
2806 usb_clear_port_feature(hub->hdev, port1,
2807 USB_PORT_FEAT_C_CONNECTION);
2808
2809
2810
2811
2812
2813 if (hub_port_status(hub, port1,
2814 &portstatus, &portchange) < 0)
2815 goto done;
2816
2817 if (!hub_port_warm_reset_required(hub, port1,
2818 portstatus))
2819 goto done;
2820
2821
2822
2823
2824
2825 if (!warm) {
2826 dev_dbg(&port_dev->dev,
2827 "hot reset failed, warm reset\n");
2828 warm = true;
2829 }
2830 }
2831
2832 dev_dbg(&port_dev->dev,
2833 "not enabled, trying %sreset again...\n",
2834 warm ? "warm " : "");
2835 delay = HUB_LONG_RESET_TIME;
2836 }
2837
2838 dev_err(&port_dev->dev, "Cannot enable. Maybe the USB cable is bad?\n");
2839
2840done:
2841 if (status == 0) {
2842
2843 msleep(10 + 40);
2844 if (udev) {
2845 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2846
2847 update_devnum(udev, 0);
2848
2849
2850
2851 if (hcd->driver->reset_device)
2852 hcd->driver->reset_device(hcd, udev);
2853
2854 usb_set_device_state(udev, USB_STATE_DEFAULT);
2855 }
2856 } else {
2857 if (udev)
2858 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
2859 }
2860
2861 if (!hub_is_superspeed(hub->hdev))
2862 up_read(&ehci_cf_port_reset_rwsem);
2863
2864 return status;
2865}
2866
2867
2868static int port_is_power_on(struct usb_hub *hub, unsigned portstatus)
2869{
2870 int ret = 0;
2871
2872 if (hub_is_superspeed(hub->hdev)) {
2873 if (portstatus & USB_SS_PORT_STAT_POWER)
2874 ret = 1;
2875 } else {
2876 if (portstatus & USB_PORT_STAT_POWER)
2877 ret = 1;
2878 }
2879
2880 return ret;
2881}
2882
2883static void usb_lock_port(struct usb_port *port_dev)
2884 __acquires(&port_dev->status_lock)
2885{
2886 mutex_lock(&port_dev->status_lock);
2887 __acquire(&port_dev->status_lock);
2888}
2889
2890static void usb_unlock_port(struct usb_port *port_dev)
2891 __releases(&port_dev->status_lock)
2892{
2893 mutex_unlock(&port_dev->status_lock);
2894 __release(&port_dev->status_lock);
2895}
2896
2897#ifdef CONFIG_PM
2898
2899
2900static int port_is_suspended(struct usb_hub *hub, unsigned portstatus)
2901{
2902 int ret = 0;
2903
2904 if (hub_is_superspeed(hub->hdev)) {
2905 if ((portstatus & USB_PORT_STAT_LINK_STATE)
2906 == USB_SS_PORT_LS_U3)
2907 ret = 1;
2908 } else {
2909 if (portstatus & USB_PORT_STAT_SUSPEND)
2910 ret = 1;
2911 }
2912
2913 return ret;
2914}
2915
2916
2917
2918
2919static int check_port_resume_type(struct usb_device *udev,
2920 struct usb_hub *hub, int port1,
2921 int status, u16 portchange, u16 portstatus)
2922{
2923 struct usb_port *port_dev = hub->ports[port1 - 1];
2924 int retries = 3;
2925
2926 retry:
2927
2928 if (status == 0 && udev->reset_resume
2929 && hub_port_warm_reset_required(hub, port1, portstatus)) {
2930 ;
2931 }
2932
2933 else if (status || port_is_suspended(hub, portstatus) ||
2934 !port_is_power_on(hub, portstatus)) {
2935 if (status >= 0)
2936 status = -ENODEV;
2937 } else if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
2938 if (retries--) {
2939 usleep_range(200, 300);
2940 status = hub_port_status(hub, port1, &portstatus,
2941 &portchange);
2942 goto retry;
2943 }
2944 status = -ENODEV;
2945 }
2946
2947
2948
2949
2950 else if (!(portstatus & USB_PORT_STAT_ENABLE) && !udev->reset_resume) {
2951 if (udev->persist_enabled)
2952 udev->reset_resume = 1;
2953 else
2954 status = -ENODEV;
2955 }
2956
2957 if (status) {
2958 dev_dbg(&port_dev->dev, "status %04x.%04x after resume, %d\n",
2959 portchange, portstatus, status);
2960 } else if (udev->reset_resume) {
2961
2962
2963 if (portchange & USB_PORT_STAT_C_CONNECTION)
2964 usb_clear_port_feature(hub->hdev, port1,
2965 USB_PORT_FEAT_C_CONNECTION);
2966 if (portchange & USB_PORT_STAT_C_ENABLE)
2967 usb_clear_port_feature(hub->hdev, port1,
2968 USB_PORT_FEAT_C_ENABLE);
2969 }
2970
2971 return status;
2972}
2973
2974int usb_disable_ltm(struct usb_device *udev)
2975{
2976 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2977
2978
2979 if (!usb_device_supports_ltm(hcd->self.root_hub) ||
2980 !usb_device_supports_ltm(udev))
2981 return 0;
2982
2983
2984
2985
2986 if (!udev->actconfig)
2987 return 0;
2988
2989 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2990 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
2991 USB_DEVICE_LTM_ENABLE, 0, NULL, 0,
2992 USB_CTRL_SET_TIMEOUT);
2993}
2994EXPORT_SYMBOL_GPL(usb_disable_ltm);
2995
2996void usb_enable_ltm(struct usb_device *udev)
2997{
2998 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2999
3000
3001 if (!usb_device_supports_ltm(hcd->self.root_hub) ||
3002 !usb_device_supports_ltm(udev))
3003 return;
3004
3005
3006
3007
3008 if (!udev->actconfig)
3009 return;
3010
3011 usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3012 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
3013 USB_DEVICE_LTM_ENABLE, 0, NULL, 0,
3014 USB_CTRL_SET_TIMEOUT);
3015}
3016EXPORT_SYMBOL_GPL(usb_enable_ltm);
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028static int usb_enable_remote_wakeup(struct usb_device *udev)
3029{
3030 if (udev->speed < USB_SPEED_SUPER)
3031 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3032 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
3033 USB_DEVICE_REMOTE_WAKEUP, 0, NULL, 0,
3034 USB_CTRL_SET_TIMEOUT);
3035 else
3036 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3037 USB_REQ_SET_FEATURE, USB_RECIP_INTERFACE,
3038 USB_INTRF_FUNC_SUSPEND,
3039 USB_INTRF_FUNC_SUSPEND_RW |
3040 USB_INTRF_FUNC_SUSPEND_LP,
3041 NULL, 0, USB_CTRL_SET_TIMEOUT);
3042}
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054static int usb_disable_remote_wakeup(struct usb_device *udev)
3055{
3056 if (udev->speed < USB_SPEED_SUPER)
3057 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3058 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
3059 USB_DEVICE_REMOTE_WAKEUP, 0, NULL, 0,
3060 USB_CTRL_SET_TIMEOUT);
3061 else
3062 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3063 USB_REQ_SET_FEATURE, USB_RECIP_INTERFACE,
3064 USB_INTRF_FUNC_SUSPEND, 0, NULL, 0,
3065 USB_CTRL_SET_TIMEOUT);
3066}
3067
3068
3069static unsigned wakeup_enabled_descendants(struct usb_device *udev)
3070{
3071 struct usb_hub *hub = usb_hub_to_struct_hub(udev);
3072
3073 return udev->do_remote_wakeup +
3074 (hub ? hub->wakeup_enabled_descendants : 0);
3075}
3076
3077
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
3125int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
3126{
3127 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
3128 struct usb_port *port_dev = hub->ports[udev->portnum - 1];
3129 int port1 = udev->portnum;
3130 int status;
3131 bool really_suspend = true;
3132
3133 usb_lock_port(port_dev);
3134
3135
3136
3137
3138
3139
3140
3141 if (udev->do_remote_wakeup) {
3142 status = usb_enable_remote_wakeup(udev);
3143 if (status) {
3144 dev_dbg(&udev->dev, "won't remote wakeup, status %d\n",
3145 status);
3146
3147 if (PMSG_IS_AUTO(msg))
3148 goto err_wakeup;
3149 }
3150 }
3151
3152
3153 if (udev->usb2_hw_lpm_enabled == 1)
3154 usb_set_usb2_hardware_lpm(udev, 0);
3155
3156 if (usb_disable_ltm(udev)) {
3157 dev_err(&udev->dev, "Failed to disable LTM before suspend\n.");
3158 status = -ENOMEM;
3159 if (PMSG_IS_AUTO(msg))
3160 goto err_ltm;
3161 }
3162
3163
3164 if (hub_is_superspeed(hub->hdev))
3165 status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3);
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178 else if (PMSG_IS_AUTO(msg) || wakeup_enabled_descendants(udev) > 0)
3179 status = set_port_feature(hub->hdev, port1,
3180 USB_PORT_FEAT_SUSPEND);
3181 else {
3182 really_suspend = false;
3183 status = 0;
3184 }
3185 if (status) {
3186 dev_dbg(&port_dev->dev, "can't suspend, status %d\n", status);
3187
3188
3189 usb_enable_ltm(udev);
3190 err_ltm:
3191
3192 if (udev->usb2_hw_lpm_capable == 1)
3193 usb_set_usb2_hardware_lpm(udev, 1);
3194
3195 if (udev->do_remote_wakeup)
3196 (void) usb_disable_remote_wakeup(udev);
3197 err_wakeup:
3198
3199
3200 if (!PMSG_IS_AUTO(msg))
3201 status = 0;
3202 } else {
3203 dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n",
3204 (PMSG_IS_AUTO(msg) ? "auto-" : ""),
3205 udev->do_remote_wakeup);
3206 if (really_suspend) {
3207 udev->port_is_suspended = 1;
3208
3209
3210 msleep(10);
3211 }
3212 usb_set_device_state(udev, USB_STATE_SUSPENDED);
3213 }
3214
3215 if (status == 0 && !udev->do_remote_wakeup && udev->persist_enabled
3216 && test_and_clear_bit(port1, hub->child_usage_bits))
3217 pm_runtime_put_sync(&port_dev->dev);
3218
3219 usb_mark_last_busy(hub->hdev);
3220
3221 usb_unlock_port(port_dev);
3222 return status;
3223}
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236static int finish_port_resume(struct usb_device *udev)
3237{
3238 int status = 0;
3239 u16 devstatus = 0;
3240
3241
3242 dev_dbg(&udev->dev, "%s\n",
3243 udev->reset_resume ? "finish reset-resume" : "finish resume");
3244
3245
3246
3247
3248
3249
3250 usb_set_device_state(udev, udev->actconfig
3251 ? USB_STATE_CONFIGURED
3252 : USB_STATE_ADDRESS);
3253
3254
3255
3256
3257
3258
3259 if (udev->reset_resume) {
3260
3261
3262
3263
3264
3265
3266 retry_reset_resume:
3267 if (udev->quirks & USB_QUIRK_RESET)
3268 status = -ENODEV;
3269 else
3270 status = usb_reset_and_verify_device(udev);
3271 }
3272
3273
3274
3275
3276
3277 if (status == 0) {
3278 devstatus = 0;
3279 status = usb_get_status(udev, USB_RECIP_DEVICE, 0, &devstatus);
3280
3281
3282 if (status && !udev->reset_resume && udev->persist_enabled) {
3283 dev_dbg(&udev->dev, "retry with reset-resume\n");
3284 udev->reset_resume = 1;
3285 goto retry_reset_resume;
3286 }
3287 }
3288
3289 if (status) {
3290 dev_dbg(&udev->dev, "gone after usb resume? status %d\n",
3291 status);
3292
3293
3294
3295
3296
3297
3298 } else if (udev->actconfig && !udev->reset_resume) {
3299 if (udev->speed < USB_SPEED_SUPER) {
3300 if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP))
3301 status = usb_disable_remote_wakeup(udev);
3302 } else {
3303 status = usb_get_status(udev, USB_RECIP_INTERFACE, 0,
3304 &devstatus);
3305 if (!status && devstatus & (USB_INTRF_STAT_FUNC_RW_CAP
3306 | USB_INTRF_STAT_FUNC_RW))
3307 status = usb_disable_remote_wakeup(udev);
3308 }
3309
3310 if (status)
3311 dev_dbg(&udev->dev,
3312 "disable remote wakeup, status %d\n",
3313 status);
3314 status = 0;
3315 }
3316 return status;
3317}
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343static int wait_for_connected(struct usb_device *udev,
3344 struct usb_hub *hub, int *port1,
3345 u16 *portchange, u16 *portstatus)
3346{
3347 int status = 0, delay_ms = 0;
3348
3349 while (delay_ms < 2000) {
3350 if (status || *portstatus & USB_PORT_STAT_CONNECTION)
3351 break;
3352 msleep(20);
3353 delay_ms += 20;
3354 status = hub_port_status(hub, *port1, portstatus, portchange);
3355 }
3356 dev_dbg(&udev->dev, "Waited %dms for CONNECT\n", delay_ms);
3357 return status;
3358}
3359
3360
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
3394int usb_port_resume(struct usb_device *udev, pm_message_t msg)
3395{
3396 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
3397 struct usb_port *port_dev = hub->ports[udev->portnum - 1];
3398 int port1 = udev->portnum;
3399 int status;
3400 u16 portchange, portstatus;
3401
3402 if (!test_and_set_bit(port1, hub->child_usage_bits)) {
3403 status = pm_runtime_get_sync(&port_dev->dev);
3404 if (status < 0) {
3405 dev_dbg(&udev->dev, "can't resume usb port, status %d\n",
3406 status);
3407 return status;
3408 }
3409 }
3410
3411 usb_lock_port(port_dev);
3412
3413
3414 status = hub_port_status(hub, port1, &portstatus, &portchange);
3415 if (status == 0 && !port_is_suspended(hub, portstatus))
3416 goto SuspendCleared;
3417
3418
3419 if (hub_is_superspeed(hub->hdev))
3420 status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U0);
3421 else
3422 status = usb_clear_port_feature(hub->hdev,
3423 port1, USB_PORT_FEAT_SUSPEND);
3424 if (status) {
3425 dev_dbg(&port_dev->dev, "can't resume, status %d\n", status);
3426 } else {
3427
3428 dev_dbg(&udev->dev, "usb %sresume\n",
3429 (PMSG_IS_AUTO(msg) ? "auto-" : ""));
3430 msleep(USB_RESUME_TIMEOUT);
3431
3432
3433
3434
3435
3436 status = hub_port_status(hub, port1, &portstatus, &portchange);
3437
3438
3439 msleep(10);
3440 }
3441
3442 SuspendCleared:
3443 if (status == 0) {
3444 udev->port_is_suspended = 0;
3445 if (hub_is_superspeed(hub->hdev)) {
3446 if (portchange & USB_PORT_STAT_C_LINK_STATE)
3447 usb_clear_port_feature(hub->hdev, port1,
3448 USB_PORT_FEAT_C_PORT_LINK_STATE);
3449 } else {
3450 if (portchange & USB_PORT_STAT_C_SUSPEND)
3451 usb_clear_port_feature(hub->hdev, port1,
3452 USB_PORT_FEAT_C_SUSPEND);
3453 }
3454 }
3455
3456 if (udev->persist_enabled)
3457 status = wait_for_connected(udev, hub, &port1, &portchange,
3458 &portstatus);
3459
3460 status = check_port_resume_type(udev,
3461 hub, port1, status, portchange, portstatus);
3462 if (status == 0)
3463 status = finish_port_resume(udev);
3464 if (status < 0) {
3465 dev_dbg(&udev->dev, "can't resume, status %d\n", status);
3466 hub_port_logical_disconnect(hub, port1);
3467 } else {
3468
3469 if (udev->usb2_hw_lpm_capable == 1)
3470 usb_set_usb2_hardware_lpm(udev, 1);
3471
3472
3473 usb_enable_ltm(udev);
3474 }
3475
3476 usb_unlock_port(port_dev);
3477
3478 return status;
3479}
3480
3481int usb_remote_wakeup(struct usb_device *udev)
3482{
3483 int status = 0;
3484
3485 usb_lock_device(udev);
3486 if (udev->state == USB_STATE_SUSPENDED) {
3487 dev_dbg(&udev->dev, "usb %sresume\n", "wakeup-");
3488 status = usb_autoresume_device(udev);
3489 if (status == 0) {
3490
3491 usb_autosuspend_device(udev);
3492 }
3493 }
3494 usb_unlock_device(udev);
3495 return status;
3496}
3497
3498
3499static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
3500 u16 portstatus, u16 portchange)
3501 __must_hold(&port_dev->status_lock)
3502{
3503 struct usb_port *port_dev = hub->ports[port - 1];
3504 struct usb_device *hdev;
3505 struct usb_device *udev;
3506 int connect_change = 0;
3507 int ret;
3508
3509 hdev = hub->hdev;
3510 udev = port_dev->child;
3511 if (!hub_is_superspeed(hdev)) {
3512 if (!(portchange & USB_PORT_STAT_C_SUSPEND))
3513 return 0;
3514 usb_clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND);
3515 } else {
3516 if (!udev || udev->state != USB_STATE_SUSPENDED ||
3517 (portstatus & USB_PORT_STAT_LINK_STATE) !=
3518 USB_SS_PORT_LS_U0)
3519 return 0;
3520 }
3521
3522 if (udev) {
3523
3524 msleep(10);
3525
3526 usb_unlock_port(port_dev);
3527 ret = usb_remote_wakeup(udev);
3528 usb_lock_port(port_dev);
3529 if (ret < 0)
3530 connect_change = 1;
3531 } else {
3532 ret = -ENODEV;
3533 hub_port_disable(hub, port, 1);
3534 }
3535 dev_dbg(&port_dev->dev, "resume, status %d\n", ret);
3536 return connect_change;
3537}
3538
3539static int check_ports_changed(struct usb_hub *hub)
3540{
3541 int port1;
3542
3543 for (port1 = 1; port1 <= hub->hdev->maxchild; ++port1) {
3544 u16 portstatus, portchange;
3545 int status;
3546
3547 status = hub_port_status(hub, port1, &portstatus, &portchange);
3548 if (!status && portchange)
3549 return 1;
3550 }
3551 return 0;
3552}
3553
3554static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
3555{
3556 struct usb_hub *hub = usb_get_intfdata(intf);
3557 struct usb_device *hdev = hub->hdev;
3558 unsigned port1;
3559 int status;
3560
3561
3562
3563
3564
3565 hub->wakeup_enabled_descendants = 0;
3566 for (port1 = 1; port1 <= hdev->maxchild; port1++) {
3567 struct usb_port *port_dev = hub->ports[port1 - 1];
3568 struct usb_device *udev = port_dev->child;
3569
3570 if (udev && udev->can_submit) {
3571 dev_warn(&port_dev->dev, "device %s not suspended yet\n",
3572 dev_name(&udev->dev));
3573 if (PMSG_IS_AUTO(msg))
3574 return -EBUSY;
3575 }
3576 if (udev)
3577 hub->wakeup_enabled_descendants +=
3578 wakeup_enabled_descendants(udev);
3579 }
3580
3581 if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) {
3582
3583 if (check_ports_changed(hub)) {
3584 if (PMSG_IS_AUTO(msg))
3585 return -EBUSY;
3586 pm_wakeup_event(&hdev->dev, 2000);
3587 }
3588 }
3589
3590 if (hub_is_superspeed(hdev) && hdev->do_remote_wakeup) {
3591
3592 for (port1 = 1; port1 <= hdev->maxchild; port1++) {
3593 status = set_port_feature(hdev,
3594 port1 |
3595 USB_PORT_FEAT_REMOTE_WAKE_CONNECT |
3596 USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT |
3597 USB_PORT_FEAT_REMOTE_WAKE_OVER_CURRENT,
3598 USB_PORT_FEAT_REMOTE_WAKE_MASK);
3599 }
3600 }
3601
3602 dev_dbg(&intf->dev, "%s\n", __func__);
3603
3604
3605 hub_quiesce(hub, HUB_SUSPEND);
3606 return 0;
3607}
3608
3609static int hub_resume(struct usb_interface *intf)
3610{
3611 struct usb_hub *hub = usb_get_intfdata(intf);
3612
3613 dev_dbg(&intf->dev, "%s\n", __func__);
3614 hub_activate(hub, HUB_RESUME);
3615 return 0;
3616}
3617
3618static int hub_reset_resume(struct usb_interface *intf)
3619{
3620 struct usb_hub *hub = usb_get_intfdata(intf);
3621
3622 dev_dbg(&intf->dev, "%s\n", __func__);
3623 hub_activate(hub, HUB_RESET_RESUME);
3624 return 0;
3625}
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638void usb_root_hub_lost_power(struct usb_device *rhdev)
3639{
3640 dev_warn(&rhdev->dev, "root hub lost power or was reset\n");
3641 rhdev->reset_resume = 1;
3642}
3643EXPORT_SYMBOL_GPL(usb_root_hub_lost_power);
3644
3645static const char * const usb3_lpm_names[] = {
3646 "U0",
3647 "U1",
3648 "U2",
3649 "U3",
3650};
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661static int usb_req_set_sel(struct usb_device *udev, enum usb3_link_state state)
3662{
3663 struct usb_set_sel_req *sel_values;
3664 unsigned long long u1_sel;
3665 unsigned long long u1_pel;
3666 unsigned long long u2_sel;
3667 unsigned long long u2_pel;
3668 int ret;
3669
3670 if (udev->state != USB_STATE_CONFIGURED)
3671 return 0;
3672
3673
3674 u1_sel = DIV_ROUND_UP(udev->u1_params.sel, 1000);
3675 u1_pel = DIV_ROUND_UP(udev->u1_params.pel, 1000);
3676 u2_sel = DIV_ROUND_UP(udev->u2_params.sel, 1000);
3677 u2_pel = DIV_ROUND_UP(udev->u2_params.pel, 1000);
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687 if ((state == USB3_LPM_U1 &&
3688 (u1_sel > USB3_LPM_MAX_U1_SEL_PEL ||
3689 u1_pel > USB3_LPM_MAX_U1_SEL_PEL)) ||
3690 (state == USB3_LPM_U2 &&
3691 (u2_sel > USB3_LPM_MAX_U2_SEL_PEL ||
3692 u2_pel > USB3_LPM_MAX_U2_SEL_PEL))) {
3693 dev_dbg(&udev->dev, "Device-initiated %s disabled due to long SEL %llu us or PEL %llu us\n",
3694 usb3_lpm_names[state], u1_sel, u1_pel);
3695 return -EINVAL;
3696 }
3697
3698
3699
3700
3701
3702
3703 if (u1_sel > USB3_LPM_MAX_U1_SEL_PEL)
3704 u1_sel = USB3_LPM_MAX_U1_SEL_PEL;
3705
3706 if (u1_pel > USB3_LPM_MAX_U1_SEL_PEL)
3707 u1_pel = USB3_LPM_MAX_U1_SEL_PEL;
3708
3709 if (u2_sel > USB3_LPM_MAX_U2_SEL_PEL)
3710 u2_sel = USB3_LPM_MAX_U2_SEL_PEL;
3711
3712 if (u2_pel > USB3_LPM_MAX_U2_SEL_PEL)
3713 u2_pel = USB3_LPM_MAX_U2_SEL_PEL;
3714
3715
3716
3717
3718
3719
3720 sel_values = kmalloc(sizeof *(sel_values), GFP_NOIO);
3721 if (!sel_values)
3722 return -ENOMEM;
3723
3724 sel_values->u1_sel = u1_sel;
3725 sel_values->u1_pel = u1_pel;
3726 sel_values->u2_sel = cpu_to_le16(u2_sel);
3727 sel_values->u2_pel = cpu_to_le16(u2_pel);
3728
3729 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3730 USB_REQ_SET_SEL,
3731 USB_RECIP_DEVICE,
3732 0, 0,
3733 sel_values, sizeof *(sel_values),
3734 USB_CTRL_SET_TIMEOUT);
3735 kfree(sel_values);
3736 return ret;
3737}
3738
3739
3740
3741
3742static int usb_set_device_initiated_lpm(struct usb_device *udev,
3743 enum usb3_link_state state, bool enable)
3744{
3745 int ret;
3746 int feature;
3747
3748 switch (state) {
3749 case USB3_LPM_U1:
3750 feature = USB_DEVICE_U1_ENABLE;
3751 break;
3752 case USB3_LPM_U2:
3753 feature = USB_DEVICE_U2_ENABLE;
3754 break;
3755 default:
3756 dev_warn(&udev->dev, "%s: Can't %s non-U1 or U2 state.\n",
3757 __func__, enable ? "enable" : "disable");
3758 return -EINVAL;
3759 }
3760
3761 if (udev->state != USB_STATE_CONFIGURED) {
3762 dev_dbg(&udev->dev, "%s: Can't %s %s state "
3763 "for unconfigured device.\n",
3764 __func__, enable ? "enable" : "disable",
3765 usb3_lpm_names[state]);
3766 return 0;
3767 }
3768
3769 if (enable) {
3770
3771
3772
3773
3774 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3775 USB_REQ_SET_FEATURE,
3776 USB_RECIP_DEVICE,
3777 feature,
3778 0, NULL, 0,
3779 USB_CTRL_SET_TIMEOUT);
3780 } else {
3781 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3782 USB_REQ_CLEAR_FEATURE,
3783 USB_RECIP_DEVICE,
3784 feature,
3785 0, NULL, 0,
3786 USB_CTRL_SET_TIMEOUT);
3787 }
3788 if (ret < 0) {
3789 dev_warn(&udev->dev, "%s of device-initiated %s failed.\n",
3790 enable ? "Enable" : "Disable",
3791 usb3_lpm_names[state]);
3792 return -EBUSY;
3793 }
3794 return 0;
3795}
3796
3797static int usb_set_lpm_timeout(struct usb_device *udev,
3798 enum usb3_link_state state, int timeout)
3799{
3800 int ret;
3801 int feature;
3802
3803 switch (state) {
3804 case USB3_LPM_U1:
3805 feature = USB_PORT_FEAT_U1_TIMEOUT;
3806 break;
3807 case USB3_LPM_U2:
3808 feature = USB_PORT_FEAT_U2_TIMEOUT;
3809 break;
3810 default:
3811 dev_warn(&udev->dev, "%s: Can't set timeout for non-U1 or U2 state.\n",
3812 __func__);
3813 return -EINVAL;
3814 }
3815
3816 if (state == USB3_LPM_U1 && timeout > USB3_LPM_U1_MAX_TIMEOUT &&
3817 timeout != USB3_LPM_DEVICE_INITIATED) {
3818 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x, "
3819 "which is a reserved value.\n",
3820 usb3_lpm_names[state], timeout);
3821 return -EINVAL;
3822 }
3823
3824 ret = set_port_feature(udev->parent,
3825 USB_PORT_LPM_TIMEOUT(timeout) | udev->portnum,
3826 feature);
3827 if (ret < 0) {
3828 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x,"
3829 "error code %i\n", usb3_lpm_names[state],
3830 timeout, ret);
3831 return -EBUSY;
3832 }
3833 if (state == USB3_LPM_U1)
3834 udev->u1_params.timeout = timeout;
3835 else
3836 udev->u2_params.timeout = timeout;
3837 return 0;
3838}
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852static void usb_enable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
3853 enum usb3_link_state state)
3854{
3855 int timeout, ret;
3856 __u8 u1_mel = udev->bos->ss_cap->bU1devExitLat;
3857 __le16 u2_mel = udev->bos->ss_cap->bU2DevExitLat;
3858
3859
3860
3861
3862
3863 if ((state == USB3_LPM_U1 && u1_mel == 0) ||
3864 (state == USB3_LPM_U2 && u2_mel == 0))
3865 return;
3866
3867
3868
3869
3870
3871 ret = usb_req_set_sel(udev, state);
3872 if (ret < 0) {
3873 dev_warn(&udev->dev, "Set SEL for device-initiated %s failed.\n",
3874 usb3_lpm_names[state]);
3875 return;
3876 }
3877
3878
3879
3880
3881
3882
3883 timeout = hcd->driver->enable_usb3_lpm_timeout(hcd, udev, state);
3884
3885
3886 if (timeout == 0)
3887 return;
3888
3889 if (timeout < 0) {
3890 dev_warn(&udev->dev, "Could not enable %s link state, "
3891 "xHCI error %i.\n", usb3_lpm_names[state],
3892 timeout);
3893 return;
3894 }
3895
3896 if (usb_set_lpm_timeout(udev, state, timeout)) {
3897
3898
3899
3900
3901 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
3902 } else {
3903
3904
3905
3906 if (udev->actconfig)
3907 usb_set_device_initiated_lpm(udev, state, true);
3908
3909
3910
3911
3912
3913
3914
3915 if (state == USB3_LPM_U1)
3916 udev->usb3_lpm_u1_enabled = 1;
3917 else if (state == USB3_LPM_U2)
3918 udev->usb3_lpm_u2_enabled = 1;
3919 }
3920}
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937static int usb_disable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
3938 enum usb3_link_state state)
3939{
3940 switch (state) {
3941 case USB3_LPM_U1:
3942 case USB3_LPM_U2:
3943 break;
3944 default:
3945 dev_warn(&udev->dev, "%s: Can't disable non-U1 or U2 state.\n",
3946 __func__);
3947 return -EINVAL;
3948 }
3949
3950 if (usb_set_lpm_timeout(udev, state, 0))
3951 return -EBUSY;
3952
3953 usb_set_device_initiated_lpm(udev, state, false);
3954
3955 if (hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state))
3956 dev_warn(&udev->dev, "Could not disable xHCI %s timeout, "
3957 "bus schedule bandwidth may be impacted.\n",
3958 usb3_lpm_names[state]);
3959
3960
3961
3962
3963
3964
3965
3966 if (state == USB3_LPM_U1)
3967 udev->usb3_lpm_u1_enabled = 0;
3968 else if (state == USB3_LPM_U2)
3969 udev->usb3_lpm_u2_enabled = 0;
3970
3971 return 0;
3972}
3973
3974
3975
3976
3977
3978
3979
3980
3981int usb_disable_lpm(struct usb_device *udev)
3982{
3983 struct usb_hcd *hcd;
3984
3985 if (!udev || !udev->parent ||
3986 udev->speed < USB_SPEED_SUPER ||
3987 !udev->lpm_capable ||
3988 udev->state < USB_STATE_DEFAULT)
3989 return 0;
3990
3991 hcd = bus_to_hcd(udev->bus);
3992 if (!hcd || !hcd->driver->disable_usb3_lpm_timeout)
3993 return 0;
3994
3995 udev->lpm_disable_count++;
3996 if ((udev->u1_params.timeout == 0 && udev->u2_params.timeout == 0))
3997 return 0;
3998
3999
4000 if (usb_disable_link_state(hcd, udev, USB3_LPM_U1))
4001 goto enable_lpm;
4002 if (usb_disable_link_state(hcd, udev, USB3_LPM_U2))
4003 goto enable_lpm;
4004
4005 return 0;
4006
4007enable_lpm:
4008 usb_enable_lpm(udev);
4009 return -EBUSY;
4010}
4011EXPORT_SYMBOL_GPL(usb_disable_lpm);
4012
4013
4014int usb_unlocked_disable_lpm(struct usb_device *udev)
4015{
4016 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4017 int ret;
4018
4019 if (!hcd)
4020 return -EINVAL;
4021
4022 mutex_lock(hcd->bandwidth_mutex);
4023 ret = usb_disable_lpm(udev);
4024 mutex_unlock(hcd->bandwidth_mutex);
4025
4026 return ret;
4027}
4028EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038void usb_enable_lpm(struct usb_device *udev)
4039{
4040 struct usb_hcd *hcd;
4041 struct usb_hub *hub;
4042 struct usb_port *port_dev;
4043
4044 if (!udev || !udev->parent ||
4045 udev->speed < USB_SPEED_SUPER ||
4046 !udev->lpm_capable ||
4047 udev->state < USB_STATE_DEFAULT)
4048 return;
4049
4050 udev->lpm_disable_count--;
4051 hcd = bus_to_hcd(udev->bus);
4052
4053
4054
4055 if (!hcd || !hcd->driver->enable_usb3_lpm_timeout ||
4056 !hcd->driver->disable_usb3_lpm_timeout)
4057 return;
4058
4059 if (udev->lpm_disable_count > 0)
4060 return;
4061
4062 hub = usb_hub_to_struct_hub(udev->parent);
4063 if (!hub)
4064 return;
4065
4066 port_dev = hub->ports[udev->portnum - 1];
4067
4068 if (port_dev->usb3_lpm_u1_permit)
4069 usb_enable_link_state(hcd, udev, USB3_LPM_U1);
4070
4071 if (port_dev->usb3_lpm_u2_permit)
4072 usb_enable_link_state(hcd, udev, USB3_LPM_U2);
4073}
4074EXPORT_SYMBOL_GPL(usb_enable_lpm);
4075
4076
4077void usb_unlocked_enable_lpm(struct usb_device *udev)
4078{
4079 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4080
4081 if (!hcd)
4082 return;
4083
4084 mutex_lock(hcd->bandwidth_mutex);
4085 usb_enable_lpm(udev);
4086 mutex_unlock(hcd->bandwidth_mutex);
4087}
4088EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm);
4089
4090
4091static void hub_usb3_port_prepare_disable(struct usb_hub *hub,
4092 struct usb_port *port_dev)
4093{
4094 struct usb_device *udev = port_dev->child;
4095 int ret;
4096
4097 if (udev && udev->port_is_suspended && udev->do_remote_wakeup) {
4098 ret = hub_set_port_link_state(hub, port_dev->portnum,
4099 USB_SS_PORT_LS_U0);
4100 if (!ret) {
4101 msleep(USB_RESUME_TIMEOUT);
4102 ret = usb_disable_remote_wakeup(udev);
4103 }
4104 if (ret)
4105 dev_warn(&udev->dev,
4106 "Port disable: can't disable remote wake\n");
4107 udev->do_remote_wakeup = 0;
4108 }
4109}
4110
4111#else
4112
4113#define hub_suspend NULL
4114#define hub_resume NULL
4115#define hub_reset_resume NULL
4116
4117static inline void hub_usb3_port_prepare_disable(struct usb_hub *hub,
4118 struct usb_port *port_dev) { }
4119
4120int usb_disable_lpm(struct usb_device *udev)
4121{
4122 return 0;
4123}
4124EXPORT_SYMBOL_GPL(usb_disable_lpm);
4125
4126void usb_enable_lpm(struct usb_device *udev) { }
4127EXPORT_SYMBOL_GPL(usb_enable_lpm);
4128
4129int usb_unlocked_disable_lpm(struct usb_device *udev)
4130{
4131 return 0;
4132}
4133EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
4134
4135void usb_unlocked_enable_lpm(struct usb_device *udev) { }
4136EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm);
4137
4138int usb_disable_ltm(struct usb_device *udev)
4139{
4140 return 0;
4141}
4142EXPORT_SYMBOL_GPL(usb_disable_ltm);
4143
4144void usb_enable_ltm(struct usb_device *udev) { }
4145EXPORT_SYMBOL_GPL(usb_enable_ltm);
4146
4147static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
4148 u16 portstatus, u16 portchange)
4149{
4150 return 0;
4151}
4152
4153#endif
4154
4155
4156
4157
4158
4159
4160static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
4161{
4162 struct usb_port *port_dev = hub->ports[port1 - 1];
4163 struct usb_device *hdev = hub->hdev;
4164 int ret = 0;
4165
4166 if (!hub->error) {
4167 if (hub_is_superspeed(hub->hdev)) {
4168 hub_usb3_port_prepare_disable(hub, port_dev);
4169 ret = hub_set_port_link_state(hub, port_dev->portnum,
4170 USB_SS_PORT_LS_U3);
4171 } else {
4172 ret = usb_clear_port_feature(hdev, port1,
4173 USB_PORT_FEAT_ENABLE);
4174 }
4175 }
4176 if (port_dev->child && set_state)
4177 usb_set_device_state(port_dev->child, USB_STATE_NOTATTACHED);
4178 if (ret && ret != -ENODEV)
4179 dev_err(&port_dev->dev, "cannot disable (err = %d)\n", ret);
4180 return ret;
4181}
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199int hub_port_debounce(struct usb_hub *hub, int port1, bool must_be_connected)
4200{
4201 int ret;
4202 u16 portchange, portstatus;
4203 unsigned connection = 0xffff;
4204 int total_time, stable_time = 0;
4205 struct usb_port *port_dev = hub->ports[port1 - 1];
4206
4207 for (total_time = 0; ; total_time += HUB_DEBOUNCE_STEP) {
4208 ret = hub_port_status(hub, port1, &portstatus, &portchange);
4209 if (ret < 0)
4210 return ret;
4211
4212 if (!(portchange & USB_PORT_STAT_C_CONNECTION) &&
4213 (portstatus & USB_PORT_STAT_CONNECTION) == connection) {
4214 if (!must_be_connected ||
4215 (connection == USB_PORT_STAT_CONNECTION))
4216 stable_time += HUB_DEBOUNCE_STEP;
4217 if (stable_time >= HUB_DEBOUNCE_STABLE)
4218 break;
4219 } else {
4220 stable_time = 0;
4221 connection = portstatus & USB_PORT_STAT_CONNECTION;
4222 }
4223
4224 if (portchange & USB_PORT_STAT_C_CONNECTION) {
4225 usb_clear_port_feature(hub->hdev, port1,
4226 USB_PORT_FEAT_C_CONNECTION);
4227 }
4228
4229 if (total_time >= HUB_DEBOUNCE_TIMEOUT)
4230 break;
4231 msleep(HUB_DEBOUNCE_STEP);
4232 }
4233
4234 dev_dbg(&port_dev->dev, "debounce total %dms stable %dms status 0x%x\n",
4235 total_time, stable_time, portstatus);
4236
4237 if (stable_time < HUB_DEBOUNCE_STABLE)
4238 return -ETIMEDOUT;
4239 return portstatus;
4240}
4241
4242void usb_ep0_reinit(struct usb_device *udev)
4243{
4244 usb_disable_endpoint(udev, 0 + USB_DIR_IN, true);
4245 usb_disable_endpoint(udev, 0 + USB_DIR_OUT, true);
4246 usb_enable_endpoint(udev, &udev->ep0, true);
4247}
4248EXPORT_SYMBOL_GPL(usb_ep0_reinit);
4249
4250#define usb_sndaddr0pipe() (PIPE_CONTROL << 30)
4251#define usb_rcvaddr0pipe() ((PIPE_CONTROL << 30) | USB_DIR_IN)
4252
4253static int hub_set_address(struct usb_device *udev, int devnum)
4254{
4255 int retval;
4256 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4257
4258
4259
4260
4261
4262 if (!hcd->driver->address_device && devnum <= 1)
4263 return -EINVAL;
4264 if (udev->state == USB_STATE_ADDRESS)
4265 return 0;
4266 if (udev->state != USB_STATE_DEFAULT)
4267 return -EINVAL;
4268 if (hcd->driver->address_device)
4269 retval = hcd->driver->address_device(hcd, udev);
4270 else
4271 retval = usb_control_msg(udev, usb_sndaddr0pipe(),
4272 USB_REQ_SET_ADDRESS, 0, devnum, 0,
4273 NULL, 0, USB_CTRL_SET_TIMEOUT);
4274 if (retval == 0) {
4275 update_devnum(udev, devnum);
4276
4277 usb_set_device_state(udev, USB_STATE_ADDRESS);
4278 usb_ep0_reinit(udev);
4279 }
4280 return retval;
4281}
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292static void hub_set_initial_usb2_lpm_policy(struct usb_device *udev)
4293{
4294 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
4295 int connect_type = USB_PORT_CONNECT_TYPE_UNKNOWN;
4296
4297 if (!udev->usb2_hw_lpm_capable || !udev->bos)
4298 return;
4299
4300 if (hub)
4301 connect_type = hub->ports[udev->portnum - 1]->connect_type;
4302
4303 if ((udev->bos->ext_cap->bmAttributes & cpu_to_le32(USB_BESL_SUPPORT)) ||
4304 connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
4305 udev->usb2_hw_lpm_allowed = 1;
4306 usb_set_usb2_hardware_lpm(udev, 1);
4307 }
4308}
4309
4310static int hub_enable_device(struct usb_device *udev)
4311{
4312 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4313
4314 if (!hcd->driver->enable_device)
4315 return 0;
4316 if (udev->state == USB_STATE_ADDRESS)
4317 return 0;
4318 if (udev->state != USB_STATE_DEFAULT)
4319 return -EINVAL;
4320
4321 return hcd->driver->enable_device(hcd, udev);
4322}
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334static int
4335hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
4336 int retry_counter)
4337{
4338 struct usb_device *hdev = hub->hdev;
4339 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
4340 int retries, operations, retval, i;
4341 unsigned delay = HUB_SHORT_RESET_TIME;
4342 enum usb_device_speed oldspeed = udev->speed;
4343 const char *speed;
4344 int devnum = udev->devnum;
4345
4346
4347
4348
4349 if (!hdev->parent) {
4350 delay = HUB_ROOT_RESET_TIME;
4351 if (port1 == hdev->bus->otg_port)
4352 hdev->bus->b_hnp_enable = 0;
4353 }
4354
4355
4356
4357 if (oldspeed == USB_SPEED_LOW)
4358 delay = HUB_LONG_RESET_TIME;
4359
4360 mutex_lock(hcd->address0_mutex);
4361
4362
4363
4364 retval = hub_port_reset(hub, port1, udev, delay, false);
4365 if (retval < 0)
4366 goto fail;
4367
4368
4369 retval = -ENODEV;
4370
4371
4372 if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed &&
4373 !(oldspeed == USB_SPEED_SUPER && udev->speed > oldspeed)) {
4374 dev_dbg(&udev->dev, "device reset changed speed!\n");
4375 goto fail;
4376 }
4377 oldspeed = udev->speed;
4378
4379
4380
4381
4382
4383
4384 switch (udev->speed) {
4385 case USB_SPEED_SUPER_PLUS:
4386 case USB_SPEED_SUPER:
4387 case USB_SPEED_WIRELESS:
4388 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(512);
4389 break;
4390 case USB_SPEED_HIGH:
4391 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
4392 break;
4393 case USB_SPEED_FULL:
4394
4395
4396
4397
4398 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
4399 break;
4400 case USB_SPEED_LOW:
4401 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(8);
4402 break;
4403 default:
4404 goto fail;
4405 }
4406
4407 if (udev->speed == USB_SPEED_WIRELESS)
4408 speed = "variable speed Wireless";
4409 else
4410 speed = usb_speed_string(udev->speed);
4411
4412 if (udev->speed < USB_SPEED_SUPER)
4413 dev_info(&udev->dev,
4414 "%s %s USB device number %d using %s\n",
4415 (udev->config) ? "reset" : "new", speed,
4416 devnum, udev->bus->controller->driver->name);
4417
4418
4419 if (hdev->tt) {
4420 udev->tt = hdev->tt;
4421 udev->ttport = hdev->ttport;
4422 } else if (udev->speed != USB_SPEED_HIGH
4423 && hdev->speed == USB_SPEED_HIGH) {
4424 if (!hub->tt.hub) {
4425 dev_err(&udev->dev, "parent hub has no TT\n");
4426 retval = -EINVAL;
4427 goto fail;
4428 }
4429 udev->tt = &hub->tt;
4430 udev->ttport = port1;
4431 }
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445 for (retries = 0; retries < GET_DESCRIPTOR_TRIES; (++retries, msleep(100))) {
4446 bool did_new_scheme = false;
4447
4448 if (use_new_scheme(udev, retry_counter)) {
4449 struct usb_device_descriptor *buf;
4450 int r = 0;
4451
4452 did_new_scheme = true;
4453 retval = hub_enable_device(udev);
4454 if (retval < 0) {
4455 dev_err(&udev->dev,
4456 "hub failed to enable device, error %d\n",
4457 retval);
4458 goto fail;
4459 }
4460
4461#define GET_DESCRIPTOR_BUFSIZE 64
4462 buf = kmalloc(GET_DESCRIPTOR_BUFSIZE, GFP_NOIO);
4463 if (!buf) {
4464 retval = -ENOMEM;
4465 continue;
4466 }
4467
4468
4469
4470
4471
4472 for (operations = 0; operations < 3; ++operations) {
4473 buf->bMaxPacketSize0 = 0;
4474 r = usb_control_msg(udev, usb_rcvaddr0pipe(),
4475 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
4476 USB_DT_DEVICE << 8, 0,
4477 buf, GET_DESCRIPTOR_BUFSIZE,
4478 initial_descriptor_timeout);
4479 switch (buf->bMaxPacketSize0) {
4480 case 8: case 16: case 32: case 64: case 255:
4481 if (buf->bDescriptorType ==
4482 USB_DT_DEVICE) {
4483 r = 0;
4484 break;
4485 }
4486
4487 default:
4488 if (r == 0)
4489 r = -EPROTO;
4490 break;
4491 }
4492
4493
4494
4495
4496
4497
4498 if (r == 0 || (r == -ETIMEDOUT && retries == 0))
4499 break;
4500 }
4501 udev->descriptor.bMaxPacketSize0 =
4502 buf->bMaxPacketSize0;
4503 kfree(buf);
4504
4505 retval = hub_port_reset(hub, port1, udev, delay, false);
4506 if (retval < 0)
4507 goto fail;
4508 if (oldspeed != udev->speed) {
4509 dev_dbg(&udev->dev,
4510 "device reset changed speed!\n");
4511 retval = -ENODEV;
4512 goto fail;
4513 }
4514 if (r) {
4515 if (r != -ENODEV)
4516 dev_err(&udev->dev, "device descriptor read/64, error %d\n",
4517 r);
4518 retval = -EMSGSIZE;
4519 continue;
4520 }
4521#undef GET_DESCRIPTOR_BUFSIZE
4522 }
4523
4524
4525
4526
4527
4528
4529 if (udev->wusb == 0) {
4530 for (operations = 0; operations < SET_ADDRESS_TRIES; ++operations) {
4531 retval = hub_set_address(udev, devnum);
4532 if (retval >= 0)
4533 break;
4534 msleep(200);
4535 }
4536 if (retval < 0) {
4537 if (retval != -ENODEV)
4538 dev_err(&udev->dev, "device not accepting address %d, error %d\n",
4539 devnum, retval);
4540 goto fail;
4541 }
4542 if (udev->speed >= USB_SPEED_SUPER) {
4543 devnum = udev->devnum;
4544 dev_info(&udev->dev,
4545 "%s SuperSpeed%s USB device number %d using %s\n",
4546 (udev->config) ? "reset" : "new",
4547 (udev->speed == USB_SPEED_SUPER_PLUS) ? "Plus" : "",
4548 devnum, udev->bus->controller->driver->name);
4549 }
4550
4551
4552
4553
4554
4555 msleep(10);
4556
4557
4558
4559
4560 if (did_new_scheme)
4561 break;
4562 }
4563
4564 retval = usb_get_device_descriptor(udev, 8);
4565 if (retval < 8) {
4566 if (retval != -ENODEV)
4567 dev_err(&udev->dev,
4568 "device descriptor read/8, error %d\n",
4569 retval);
4570 if (retval >= 0)
4571 retval = -EMSGSIZE;
4572 } else {
4573 retval = 0;
4574 break;
4575 }
4576 }
4577 if (retval)
4578 goto fail;
4579
4580
4581
4582
4583
4584
4585
4586 if ((udev->speed >= USB_SPEED_SUPER) &&
4587 (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0300)) {
4588 dev_err(&udev->dev, "got a wrong device descriptor, "
4589 "warm reset device\n");
4590 hub_port_reset(hub, port1, udev,
4591 HUB_BH_RESET_TIME, true);
4592 retval = -EINVAL;
4593 goto fail;
4594 }
4595
4596 if (udev->descriptor.bMaxPacketSize0 == 0xff ||
4597 udev->speed >= USB_SPEED_SUPER)
4598 i = 512;
4599 else
4600 i = udev->descriptor.bMaxPacketSize0;
4601 if (usb_endpoint_maxp(&udev->ep0.desc) != i) {
4602 if (udev->speed == USB_SPEED_LOW ||
4603 !(i == 8 || i == 16 || i == 32 || i == 64)) {
4604 dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", i);
4605 retval = -EMSGSIZE;
4606 goto fail;
4607 }
4608 if (udev->speed == USB_SPEED_FULL)
4609 dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
4610 else
4611 dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i);
4612 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i);
4613 usb_ep0_reinit(udev);
4614 }
4615
4616 retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
4617 if (retval < (signed)sizeof(udev->descriptor)) {
4618 if (retval != -ENODEV)
4619 dev_err(&udev->dev, "device descriptor read/all, error %d\n",
4620 retval);
4621 if (retval >= 0)
4622 retval = -ENOMSG;
4623 goto fail;
4624 }
4625
4626 usb_detect_quirks(udev);
4627
4628 if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) {
4629 retval = usb_get_bos_descriptor(udev);
4630 if (!retval) {
4631 udev->lpm_capable = usb_device_supports_lpm(udev);
4632 usb_set_lpm_parameters(udev);
4633 }
4634 }
4635
4636 retval = 0;
4637
4638 if (hcd->driver->update_device)
4639 hcd->driver->update_device(hcd, udev);
4640 hub_set_initial_usb2_lpm_policy(udev);
4641fail:
4642 if (retval) {
4643 hub_port_disable(hub, port1, 0);
4644 update_devnum(udev, devnum);
4645 }
4646 mutex_unlock(hcd->address0_mutex);
4647 return retval;
4648}
4649
4650static void
4651check_highspeed(struct usb_hub *hub, struct usb_device *udev, int port1)
4652{
4653 struct usb_qualifier_descriptor *qual;
4654 int status;
4655
4656 if (udev->quirks & USB_QUIRK_DEVICE_QUALIFIER)
4657 return;
4658
4659 qual = kmalloc(sizeof *qual, GFP_KERNEL);
4660 if (qual == NULL)
4661 return;
4662
4663 status = usb_get_descriptor(udev, USB_DT_DEVICE_QUALIFIER, 0,
4664 qual, sizeof *qual);
4665 if (status == sizeof *qual) {
4666 dev_info(&udev->dev, "not running at top speed; "
4667 "connect to a high speed hub\n");
4668
4669 if (hub->has_indicators) {
4670 hub->indicator[port1-1] = INDICATOR_GREEN_BLINK;
4671 queue_delayed_work(system_power_efficient_wq,
4672 &hub->leds, 0);
4673 }
4674 }
4675 kfree(qual);
4676}
4677
4678static unsigned
4679hub_power_remaining(struct usb_hub *hub)
4680{
4681 struct usb_device *hdev = hub->hdev;
4682 int remaining;
4683 int port1;
4684
4685 if (!hub->limited_power)
4686 return 0;
4687
4688 remaining = hdev->bus_mA - hub->descriptor->bHubContrCurrent;
4689 for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
4690 struct usb_port *port_dev = hub->ports[port1 - 1];
4691 struct usb_device *udev = port_dev->child;
4692 unsigned unit_load;
4693 int delta;
4694
4695 if (!udev)
4696 continue;
4697 if (hub_is_superspeed(udev))
4698 unit_load = 150;
4699 else
4700 unit_load = 100;
4701
4702
4703
4704
4705
4706 if (udev->actconfig)
4707 delta = usb_get_max_power(udev, udev->actconfig);
4708 else if (port1 != udev->bus->otg_port || hdev->parent)
4709 delta = unit_load;
4710 else
4711 delta = 8;
4712 if (delta > hub->mA_per_port)
4713 dev_warn(&port_dev->dev, "%dmA is over %umA budget!\n",
4714 delta, hub->mA_per_port);
4715 remaining -= delta;
4716 }
4717 if (remaining < 0) {
4718 dev_warn(hub->intfdev, "%dmA over power budget!\n",
4719 -remaining);
4720 remaining = 0;
4721 }
4722 return remaining;
4723}
4724
4725static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
4726 u16 portchange)
4727{
4728 int status = -ENODEV;
4729 int i;
4730 unsigned unit_load;
4731 struct usb_device *hdev = hub->hdev;
4732 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
4733 struct usb_port *port_dev = hub->ports[port1 - 1];
4734 struct usb_device *udev = port_dev->child;
4735 static int unreliable_port = -1;
4736
4737
4738 if (udev) {
4739 if (hcd->usb_phy && !hdev->parent)
4740 usb_phy_notify_disconnect(hcd->usb_phy, udev->speed);
4741 usb_disconnect(&port_dev->child);
4742 }
4743
4744
4745
4746
4747 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
4748 (portchange & USB_PORT_STAT_C_CONNECTION))
4749 clear_bit(port1, hub->removed_bits);
4750
4751 if (portchange & (USB_PORT_STAT_C_CONNECTION |
4752 USB_PORT_STAT_C_ENABLE)) {
4753 status = hub_port_debounce_be_stable(hub, port1);
4754 if (status < 0) {
4755 if (status != -ENODEV &&
4756 port1 != unreliable_port &&
4757 printk_ratelimit())
4758 dev_err(&port_dev->dev, "connect-debounce failed\n");
4759 portstatus &= ~USB_PORT_STAT_CONNECTION;
4760 unreliable_port = port1;
4761 } else {
4762 portstatus = status;
4763 }
4764 }
4765
4766
4767
4768
4769 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
4770 test_bit(port1, hub->removed_bits)) {
4771
4772
4773
4774
4775
4776 if (hub_is_port_power_switchable(hub)
4777 && !port_is_power_on(hub, portstatus)
4778 && !port_dev->port_owner)
4779 set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
4780
4781 if (portstatus & USB_PORT_STAT_ENABLE)
4782 goto done;
4783 return;
4784 }
4785 if (hub_is_superspeed(hub->hdev))
4786 unit_load = 150;
4787 else
4788 unit_load = 100;
4789
4790 status = 0;
4791 for (i = 0; i < SET_CONFIG_TRIES; i++) {
4792
4793
4794
4795
4796 udev = usb_alloc_dev(hdev, hdev->bus, port1);
4797 if (!udev) {
4798 dev_err(&port_dev->dev,
4799 "couldn't allocate usb_device\n");
4800 goto done;
4801 }
4802
4803 usb_set_device_state(udev, USB_STATE_POWERED);
4804 udev->bus_mA = hub->mA_per_port;
4805 udev->level = hdev->level + 1;
4806 udev->wusb = hub_is_wusb(hub);
4807
4808
4809 if (hub_is_superspeed(hub->hdev))
4810 udev->speed = USB_SPEED_SUPER;
4811 else
4812 udev->speed = USB_SPEED_UNKNOWN;
4813
4814 choose_devnum(udev);
4815 if (udev->devnum <= 0) {
4816 status = -ENOTCONN;
4817 goto loop;
4818 }
4819
4820
4821 usb_lock_port(port_dev);
4822 status = hub_port_init(hub, udev, port1, i);
4823 usb_unlock_port(port_dev);
4824 if (status < 0)
4825 goto loop;
4826
4827 if (udev->quirks & USB_QUIRK_DELAY_INIT)
4828 msleep(1000);
4829
4830
4831
4832
4833
4834
4835
4836 if (udev->descriptor.bDeviceClass == USB_CLASS_HUB
4837 && udev->bus_mA <= unit_load) {
4838 u16 devstat;
4839
4840 status = usb_get_status(udev, USB_RECIP_DEVICE, 0,
4841 &devstat);
4842 if (status) {
4843 dev_dbg(&udev->dev, "get status %d ?\n", status);
4844 goto loop_disable;
4845 }
4846 if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
4847 dev_err(&udev->dev,
4848 "can't connect bus-powered hub "
4849 "to this port\n");
4850 if (hub->has_indicators) {
4851 hub->indicator[port1-1] =
4852 INDICATOR_AMBER_BLINK;
4853 queue_delayed_work(
4854 system_power_efficient_wq,
4855 &hub->leds, 0);
4856 }
4857 status = -ENOTCONN;
4858 goto loop_disable;
4859 }
4860 }
4861
4862
4863 if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0200
4864 && udev->speed == USB_SPEED_FULL
4865 && highspeed_hubs != 0)
4866 check_highspeed(hub, udev, port1);
4867
4868
4869
4870
4871
4872 status = 0;
4873
4874 mutex_lock(&usb_port_peer_mutex);
4875
4876
4877
4878
4879
4880 spin_lock_irq(&device_state_lock);
4881 if (hdev->state == USB_STATE_NOTATTACHED)
4882 status = -ENOTCONN;
4883 else
4884 port_dev->child = udev;
4885 spin_unlock_irq(&device_state_lock);
4886 mutex_unlock(&usb_port_peer_mutex);
4887
4888
4889 if (!status) {
4890 status = usb_new_device(udev);
4891 if (status) {
4892 mutex_lock(&usb_port_peer_mutex);
4893 spin_lock_irq(&device_state_lock);
4894 port_dev->child = NULL;
4895 spin_unlock_irq(&device_state_lock);
4896 mutex_unlock(&usb_port_peer_mutex);
4897 } else {
4898 if (hcd->usb_phy && !hdev->parent)
4899 usb_phy_notify_connect(hcd->usb_phy,
4900 udev->speed);
4901 }
4902 }
4903
4904 if (status)
4905 goto loop_disable;
4906
4907 status = hub_power_remaining(hub);
4908 if (status)
4909 dev_dbg(hub->intfdev, "%dmA power budget left\n", status);
4910
4911 return;
4912
4913loop_disable:
4914 hub_port_disable(hub, port1, 1);
4915loop:
4916 usb_ep0_reinit(udev);
4917 release_devnum(udev);
4918 hub_free_dev(udev);
4919 usb_put_dev(udev);
4920 if ((status == -ENOTCONN) || (status == -ENOTSUPP))
4921 break;
4922 }
4923 if (hub->hdev->parent ||
4924 !hcd->driver->port_handed_over ||
4925 !(hcd->driver->port_handed_over)(hcd, port1)) {
4926 if (status != -ENOTCONN && status != -ENODEV)
4927 dev_err(&port_dev->dev,
4928 "unable to enumerate USB device\n");
4929 }
4930
4931done:
4932 hub_port_disable(hub, port1, 1);
4933 if (hcd->driver->relinquish_port && !hub->hdev->parent) {
4934 if (status != -ENOTCONN && status != -ENODEV)
4935 hcd->driver->relinquish_port(hcd, port1);
4936 }
4937}
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947static void hub_port_connect_change(struct usb_hub *hub, int port1,
4948 u16 portstatus, u16 portchange)
4949 __must_hold(&port_dev->status_lock)
4950{
4951 struct usb_port *port_dev = hub->ports[port1 - 1];
4952 struct usb_device *udev = port_dev->child;
4953 int status = -ENODEV;
4954
4955 dev_dbg(&port_dev->dev, "status %04x, change %04x, %s\n", portstatus,
4956 portchange, portspeed(hub, portstatus));
4957
4958 if (hub->has_indicators) {
4959 set_port_led(hub, port1, HUB_LED_AUTO);
4960 hub->indicator[port1-1] = INDICATOR_AUTO;
4961 }
4962
4963#ifdef CONFIG_USB_OTG
4964
4965 if (hub->hdev->bus->is_b_host)
4966 portchange &= ~(USB_PORT_STAT_C_CONNECTION |
4967 USB_PORT_STAT_C_ENABLE);
4968#endif
4969
4970
4971 if ((portstatus & USB_PORT_STAT_CONNECTION) && udev &&
4972 udev->state != USB_STATE_NOTATTACHED) {
4973 if (portstatus & USB_PORT_STAT_ENABLE) {
4974 status = 0;
4975#ifdef CONFIG_PM
4976 } else if (udev->state == USB_STATE_SUSPENDED &&
4977 udev->persist_enabled) {
4978
4979
4980
4981 usb_unlock_port(port_dev);
4982 status = usb_remote_wakeup(udev);
4983 usb_lock_port(port_dev);
4984#endif
4985 } else {
4986 ;
4987 }
4988 }
4989 clear_bit(port1, hub->change_bits);
4990
4991
4992 if (status == 0)
4993 return;
4994
4995 usb_unlock_port(port_dev);
4996 hub_port_connect(hub, port1, portstatus, portchange);
4997 usb_lock_port(port_dev);
4998}
4999
5000static void port_event(struct usb_hub *hub, int port1)
5001 __must_hold(&port_dev->status_lock)
5002{
5003 int connect_change;
5004 struct usb_port *port_dev = hub->ports[port1 - 1];
5005 struct usb_device *udev = port_dev->child;
5006 struct usb_device *hdev = hub->hdev;
5007 u16 portstatus, portchange;
5008
5009 connect_change = test_bit(port1, hub->change_bits);
5010 clear_bit(port1, hub->event_bits);
5011 clear_bit(port1, hub->wakeup_bits);
5012
5013 if (hub_port_status(hub, port1, &portstatus, &portchange) < 0)
5014 return;
5015
5016 if (portchange & USB_PORT_STAT_C_CONNECTION) {
5017 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_CONNECTION);
5018 connect_change = 1;
5019 }
5020
5021 if (portchange & USB_PORT_STAT_C_ENABLE) {
5022 if (!connect_change)
5023 dev_dbg(&port_dev->dev, "enable change, status %08x\n",
5024 portstatus);
5025 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE);
5026
5027
5028
5029
5030
5031
5032 if (!(portstatus & USB_PORT_STAT_ENABLE)
5033 && !connect_change && udev) {
5034 dev_err(&port_dev->dev, "disabled by hub (EMI?), re-enabling...\n");
5035 connect_change = 1;
5036 }
5037 }
5038
5039 if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
5040 u16 status = 0, unused;
5041
5042 dev_dbg(&port_dev->dev, "over-current change\n");
5043 usb_clear_port_feature(hdev, port1,
5044 USB_PORT_FEAT_C_OVER_CURRENT);
5045 msleep(100);
5046 hub_power_on(hub, true);
5047 hub_port_status(hub, port1, &status, &unused);
5048 if (status & USB_PORT_STAT_OVERCURRENT)
5049 dev_err(&port_dev->dev, "over-current condition\n");
5050 }
5051
5052 if (portchange & USB_PORT_STAT_C_RESET) {
5053 dev_dbg(&port_dev->dev, "reset change\n");
5054 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_RESET);
5055 }
5056 if ((portchange & USB_PORT_STAT_C_BH_RESET)
5057 && hub_is_superspeed(hdev)) {
5058 dev_dbg(&port_dev->dev, "warm reset change\n");
5059 usb_clear_port_feature(hdev, port1,
5060 USB_PORT_FEAT_C_BH_PORT_RESET);
5061 }
5062 if (portchange & USB_PORT_STAT_C_LINK_STATE) {
5063 dev_dbg(&port_dev->dev, "link state change\n");
5064 usb_clear_port_feature(hdev, port1,
5065 USB_PORT_FEAT_C_PORT_LINK_STATE);
5066 }
5067 if (portchange & USB_PORT_STAT_C_CONFIG_ERROR) {
5068 dev_warn(&port_dev->dev, "config error\n");
5069 usb_clear_port_feature(hdev, port1,
5070 USB_PORT_FEAT_C_PORT_CONFIG_ERROR);
5071 }
5072
5073
5074 if (!pm_runtime_active(&port_dev->dev))
5075 return;
5076
5077 if (hub_handle_remote_wakeup(hub, port1, portstatus, portchange))
5078 connect_change = 1;
5079
5080
5081
5082
5083
5084 if (hub_port_warm_reset_required(hub, port1, portstatus)) {
5085 dev_dbg(&port_dev->dev, "do warm reset\n");
5086 if (!udev || !(portstatus & USB_PORT_STAT_CONNECTION)
5087 || udev->state == USB_STATE_NOTATTACHED) {
5088 if (hub_port_reset(hub, port1, NULL,
5089 HUB_BH_RESET_TIME, true) < 0)
5090 hub_port_disable(hub, port1, 1);
5091 } else {
5092 usb_unlock_port(port_dev);
5093 usb_lock_device(udev);
5094 usb_reset_device(udev);
5095 usb_unlock_device(udev);
5096 usb_lock_port(port_dev);
5097 connect_change = 0;
5098 }
5099 }
5100
5101 if (connect_change)
5102 hub_port_connect_change(hub, port1, portstatus, portchange);
5103}
5104
5105static void hub_event(struct work_struct *work)
5106{
5107 struct usb_device *hdev;
5108 struct usb_interface *intf;
5109 struct usb_hub *hub;
5110 struct device *hub_dev;
5111 u16 hubstatus;
5112 u16 hubchange;
5113 int i, ret;
5114
5115 hub = container_of(work, struct usb_hub, events);
5116 hdev = hub->hdev;
5117 hub_dev = hub->intfdev;
5118 intf = to_usb_interface(hub_dev);
5119
5120 dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
5121 hdev->state, hdev->maxchild,
5122
5123 (u16) hub->change_bits[0],
5124 (u16) hub->event_bits[0]);
5125
5126
5127
5128 usb_lock_device(hdev);
5129 if (unlikely(hub->disconnected))
5130 goto out_hdev_lock;
5131
5132
5133 if (hdev->state == USB_STATE_NOTATTACHED) {
5134 hub->error = -ENODEV;
5135 hub_quiesce(hub, HUB_DISCONNECT);
5136 goto out_hdev_lock;
5137 }
5138
5139
5140 ret = usb_autopm_get_interface(intf);
5141 if (ret) {
5142 dev_dbg(hub_dev, "Can't autoresume: %d\n", ret);
5143 goto out_hdev_lock;
5144 }
5145
5146
5147 if (hub->quiescing)
5148 goto out_autopm;
5149
5150 if (hub->error) {
5151 dev_dbg(hub_dev, "resetting for error %d\n", hub->error);
5152
5153 ret = usb_reset_device(hdev);
5154 if (ret) {
5155 dev_dbg(hub_dev, "error resetting hub: %d\n", ret);
5156 goto out_autopm;
5157 }
5158
5159 hub->nerrors = 0;
5160 hub->error = 0;
5161 }
5162
5163
5164 for (i = 1; i <= hdev->maxchild; i++) {
5165 struct usb_port *port_dev = hub->ports[i - 1];
5166
5167 if (test_bit(i, hub->event_bits)
5168 || test_bit(i, hub->change_bits)
5169 || test_bit(i, hub->wakeup_bits)) {
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179 pm_runtime_get_noresume(&port_dev->dev);
5180 pm_runtime_barrier(&port_dev->dev);
5181 usb_lock_port(port_dev);
5182 port_event(hub, i);
5183 usb_unlock_port(port_dev);
5184 pm_runtime_put_sync(&port_dev->dev);
5185 }
5186 }
5187
5188
5189 if (test_and_clear_bit(0, hub->event_bits) == 0)
5190 ;
5191 else if (hub_hub_status(hub, &hubstatus, &hubchange) < 0)
5192 dev_err(hub_dev, "get_hub_status failed\n");
5193 else {
5194 if (hubchange & HUB_CHANGE_LOCAL_POWER) {
5195 dev_dbg(hub_dev, "power change\n");
5196 clear_hub_feature(hdev, C_HUB_LOCAL_POWER);
5197 if (hubstatus & HUB_STATUS_LOCAL_POWER)
5198
5199 hub->limited_power = 1;
5200 else
5201 hub->limited_power = 0;
5202 }
5203 if (hubchange & HUB_CHANGE_OVERCURRENT) {
5204 u16 status = 0;
5205 u16 unused;
5206
5207 dev_dbg(hub_dev, "over-current change\n");
5208 clear_hub_feature(hdev, C_HUB_OVER_CURRENT);
5209 msleep(500);
5210 hub_power_on(hub, true);
5211 hub_hub_status(hub, &status, &unused);
5212 if (status & HUB_STATUS_OVERCURRENT)
5213 dev_err(hub_dev, "over-current condition\n");
5214 }
5215 }
5216
5217out_autopm:
5218
5219 usb_autopm_put_interface_no_suspend(intf);
5220out_hdev_lock:
5221 usb_unlock_device(hdev);
5222
5223
5224 usb_autopm_put_interface(intf);
5225 kref_put(&hub->kref, hub_release);
5226}
5227
5228static const struct usb_device_id hub_id_table[] = {
5229 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR
5230 | USB_DEVICE_ID_MATCH_INT_CLASS,
5231 .idVendor = USB_VENDOR_GENESYS_LOGIC,
5232 .bInterfaceClass = USB_CLASS_HUB,
5233 .driver_info = HUB_QUIRK_CHECK_PORT_AUTOSUSPEND},
5234 { .match_flags = USB_DEVICE_ID_MATCH_DEV_CLASS,
5235 .bDeviceClass = USB_CLASS_HUB},
5236 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
5237 .bInterfaceClass = USB_CLASS_HUB},
5238 { }
5239};
5240
5241MODULE_DEVICE_TABLE(usb, hub_id_table);
5242
5243static struct usb_driver hub_driver = {
5244 .name = "hub",
5245 .probe = hub_probe,
5246 .disconnect = hub_disconnect,
5247 .suspend = hub_suspend,
5248 .resume = hub_resume,
5249 .reset_resume = hub_reset_resume,
5250 .pre_reset = hub_pre_reset,
5251 .post_reset = hub_post_reset,
5252 .unlocked_ioctl = hub_ioctl,
5253 .id_table = hub_id_table,
5254 .supports_autosuspend = 1,
5255};
5256
5257int usb_hub_init(void)
5258{
5259 if (usb_register(&hub_driver) < 0) {
5260 printk(KERN_ERR "%s: can't register hub driver\n",
5261 usbcore_name);
5262 return -1;
5263 }
5264
5265
5266
5267
5268
5269
5270
5271 hub_wq = alloc_workqueue("usb_hub_wq", WQ_FREEZABLE, 0);
5272 if (hub_wq)
5273 return 0;
5274
5275
5276 usb_deregister(&hub_driver);
5277 pr_err("%s: can't allocate workqueue for usb hub\n", usbcore_name);
5278
5279 return -1;
5280}
5281
5282void usb_hub_cleanup(void)
5283{
5284 destroy_workqueue(hub_wq);
5285
5286
5287
5288
5289
5290
5291
5292
5293 usb_deregister(&hub_driver);
5294}
5295
5296static int descriptors_changed(struct usb_device *udev,
5297 struct usb_device_descriptor *old_device_descriptor,
5298 struct usb_host_bos *old_bos)
5299{
5300 int changed = 0;
5301 unsigned index;
5302 unsigned serial_len = 0;
5303 unsigned len;
5304 unsigned old_length;
5305 int length;
5306 char *buf;
5307
5308 if (memcmp(&udev->descriptor, old_device_descriptor,
5309 sizeof(*old_device_descriptor)) != 0)
5310 return 1;
5311
5312 if ((old_bos && !udev->bos) || (!old_bos && udev->bos))
5313 return 1;
5314 if (udev->bos) {
5315 len = le16_to_cpu(udev->bos->desc->wTotalLength);
5316 if (len != le16_to_cpu(old_bos->desc->wTotalLength))
5317 return 1;
5318 if (memcmp(udev->bos->desc, old_bos->desc, len))
5319 return 1;
5320 }
5321
5322
5323
5324
5325
5326
5327
5328 if (udev->serial)
5329 serial_len = strlen(udev->serial) + 1;
5330
5331 len = serial_len;
5332 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
5333 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
5334 len = max(len, old_length);
5335 }
5336
5337 buf = kmalloc(len, GFP_NOIO);
5338 if (!buf)
5339
5340 return 1;
5341
5342 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
5343 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
5344 length = usb_get_descriptor(udev, USB_DT_CONFIG, index, buf,
5345 old_length);
5346 if (length != old_length) {
5347 dev_dbg(&udev->dev, "config index %d, error %d\n",
5348 index, length);
5349 changed = 1;
5350 break;
5351 }
5352 if (memcmp(buf, udev->rawdescriptors[index], old_length)
5353 != 0) {
5354 dev_dbg(&udev->dev, "config index %d changed (#%d)\n",
5355 index,
5356 ((struct usb_config_descriptor *) buf)->
5357 bConfigurationValue);
5358 changed = 1;
5359 break;
5360 }
5361 }
5362
5363 if (!changed && serial_len) {
5364 length = usb_string(udev, udev->descriptor.iSerialNumber,
5365 buf, serial_len);
5366 if (length + 1 != serial_len) {
5367 dev_dbg(&udev->dev, "serial string error %d\n",
5368 length);
5369 changed = 1;
5370 } else if (memcmp(buf, udev->serial, length) != 0) {
5371 dev_dbg(&udev->dev, "serial string changed\n");
5372 changed = 1;
5373 }
5374 }
5375
5376 kfree(buf);
5377 return changed;
5378}
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414static int usb_reset_and_verify_device(struct usb_device *udev)
5415{
5416 struct usb_device *parent_hdev = udev->parent;
5417 struct usb_hub *parent_hub;
5418 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
5419 struct usb_device_descriptor descriptor = udev->descriptor;
5420 struct usb_host_bos *bos;
5421 int i, j, ret = 0;
5422 int port1 = udev->portnum;
5423
5424 if (udev->state == USB_STATE_NOTATTACHED ||
5425 udev->state == USB_STATE_SUSPENDED) {
5426 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
5427 udev->state);
5428 return -EINVAL;
5429 }
5430
5431 if (!parent_hdev)
5432 return -EISDIR;
5433
5434 parent_hub = usb_hub_to_struct_hub(parent_hdev);
5435
5436
5437
5438
5439 if (udev->usb2_hw_lpm_enabled == 1)
5440 usb_set_usb2_hardware_lpm(udev, 0);
5441
5442
5443
5444
5445
5446
5447 ret = usb_unlocked_disable_lpm(udev);
5448 if (ret) {
5449 dev_err(&udev->dev, "%s Failed to disable LPM\n.", __func__);
5450 goto re_enumerate_no_bos;
5451 }
5452 ret = usb_disable_ltm(udev);
5453 if (ret) {
5454 dev_err(&udev->dev, "%s Failed to disable LTM\n.",
5455 __func__);
5456 goto re_enumerate_no_bos;
5457 }
5458
5459 bos = udev->bos;
5460 udev->bos = NULL;
5461
5462 for (i = 0; i < SET_CONFIG_TRIES; ++i) {
5463
5464
5465
5466 usb_ep0_reinit(udev);
5467 ret = hub_port_init(parent_hub, udev, port1, i);
5468 if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV)
5469 break;
5470 }
5471
5472 if (ret < 0)
5473 goto re_enumerate;
5474
5475
5476 if (descriptors_changed(udev, &descriptor, bos)) {
5477 dev_info(&udev->dev, "device firmware changed\n");
5478 udev->descriptor = descriptor;
5479 goto re_enumerate;
5480 }
5481
5482
5483 if (!udev->actconfig)
5484 goto done;
5485
5486 mutex_lock(hcd->bandwidth_mutex);
5487 ret = usb_hcd_alloc_bandwidth(udev, udev->actconfig, NULL, NULL);
5488 if (ret < 0) {
5489 dev_warn(&udev->dev,
5490 "Busted HC? Not enough HCD resources for "
5491 "old configuration.\n");
5492 mutex_unlock(hcd->bandwidth_mutex);
5493 goto re_enumerate;
5494 }
5495 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
5496 USB_REQ_SET_CONFIGURATION, 0,
5497 udev->actconfig->desc.bConfigurationValue, 0,
5498 NULL, 0, USB_CTRL_SET_TIMEOUT);
5499 if (ret < 0) {
5500 dev_err(&udev->dev,
5501 "can't restore configuration #%d (error=%d)\n",
5502 udev->actconfig->desc.bConfigurationValue, ret);
5503 mutex_unlock(hcd->bandwidth_mutex);
5504 goto re_enumerate;
5505 }
5506 mutex_unlock(hcd->bandwidth_mutex);
5507 usb_set_device_state(udev, USB_STATE_CONFIGURED);
5508
5509
5510
5511
5512
5513
5514
5515 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
5516 struct usb_host_config *config = udev->actconfig;
5517 struct usb_interface *intf = config->interface[i];
5518 struct usb_interface_descriptor *desc;
5519
5520 desc = &intf->cur_altsetting->desc;
5521 if (desc->bAlternateSetting == 0) {
5522 usb_disable_interface(udev, intf, true);
5523 usb_enable_interface(udev, intf, true);
5524 ret = 0;
5525 } else {
5526
5527
5528
5529
5530 intf->resetting_device = 1;
5531 ret = usb_set_interface(udev, desc->bInterfaceNumber,
5532 desc->bAlternateSetting);
5533 intf->resetting_device = 0;
5534 }
5535 if (ret < 0) {
5536 dev_err(&udev->dev, "failed to restore interface %d "
5537 "altsetting %d (error=%d)\n",
5538 desc->bInterfaceNumber,
5539 desc->bAlternateSetting,
5540 ret);
5541 goto re_enumerate;
5542 }
5543
5544 for (j = 0; j < intf->cur_altsetting->desc.bNumEndpoints; j++)
5545 intf->cur_altsetting->endpoint[j].streams = 0;
5546 }
5547
5548done:
5549
5550 usb_set_usb2_hardware_lpm(udev, 1);
5551 usb_unlocked_enable_lpm(udev);
5552 usb_enable_ltm(udev);
5553 usb_release_bos_descriptor(udev);
5554 udev->bos = bos;
5555 return 0;
5556
5557re_enumerate:
5558 usb_release_bos_descriptor(udev);
5559 udev->bos = bos;
5560re_enumerate_no_bos:
5561
5562 hub_port_logical_disconnect(parent_hub, port1);
5563 return -ENODEV;
5564}
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587int usb_reset_device(struct usb_device *udev)
5588{
5589 int ret;
5590 int i;
5591 unsigned int noio_flag;
5592 struct usb_port *port_dev;
5593 struct usb_host_config *config = udev->actconfig;
5594 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
5595
5596 if (udev->state == USB_STATE_NOTATTACHED ||
5597 udev->state == USB_STATE_SUSPENDED) {
5598 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
5599 udev->state);
5600 return -EINVAL;
5601 }
5602
5603 if (!udev->parent) {
5604
5605 dev_dbg(&udev->dev, "%s for root hub!\n", __func__);
5606 return -EISDIR;
5607 }
5608
5609 port_dev = hub->ports[udev->portnum - 1];
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620 noio_flag = memalloc_noio_save();
5621
5622
5623 usb_autoresume_device(udev);
5624
5625 if (config) {
5626 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
5627 struct usb_interface *cintf = config->interface[i];
5628 struct usb_driver *drv;
5629 int unbind = 0;
5630
5631 if (cintf->dev.driver) {
5632 drv = to_usb_driver(cintf->dev.driver);
5633 if (drv->pre_reset && drv->post_reset)
5634 unbind = (drv->pre_reset)(cintf);
5635 else if (cintf->condition ==
5636 USB_INTERFACE_BOUND)
5637 unbind = 1;
5638 if (unbind)
5639 usb_forced_unbind_intf(cintf);
5640 }
5641 }
5642 }
5643
5644 usb_lock_port(port_dev);
5645 ret = usb_reset_and_verify_device(udev);
5646 usb_unlock_port(port_dev);
5647
5648 if (config) {
5649 for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) {
5650 struct usb_interface *cintf = config->interface[i];
5651 struct usb_driver *drv;
5652 int rebind = cintf->needs_binding;
5653
5654 if (!rebind && cintf->dev.driver) {
5655 drv = to_usb_driver(cintf->dev.driver);
5656 if (drv->post_reset)
5657 rebind = (drv->post_reset)(cintf);
5658 else if (cintf->condition ==
5659 USB_INTERFACE_BOUND)
5660 rebind = 1;
5661 if (rebind)
5662 cintf->needs_binding = 1;
5663 }
5664 }
5665 usb_unbind_and_rebind_marked_interfaces(udev);
5666 }
5667
5668 usb_autosuspend_device(udev);
5669 memalloc_noio_restore(noio_flag);
5670 return ret;
5671}
5672EXPORT_SYMBOL_GPL(usb_reset_device);
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703void usb_queue_reset_device(struct usb_interface *iface)
5704{
5705 if (schedule_work(&iface->reset_ws))
5706 usb_get_intf(iface);
5707}
5708EXPORT_SYMBOL_GPL(usb_queue_reset_device);
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723struct usb_device *usb_hub_find_child(struct usb_device *hdev,
5724 int port1)
5725{
5726 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
5727
5728 if (port1 < 1 || port1 > hdev->maxchild)
5729 return NULL;
5730 return hub->ports[port1 - 1]->child;
5731}
5732EXPORT_SYMBOL_GPL(usb_hub_find_child);
5733
5734void usb_hub_adjust_deviceremovable(struct usb_device *hdev,
5735 struct usb_hub_descriptor *desc)
5736{
5737 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
5738 enum usb_port_connect_type connect_type;
5739 int i;
5740
5741 if (!hub)
5742 return;
5743
5744 if (!hub_is_superspeed(hdev)) {
5745 for (i = 1; i <= hdev->maxchild; i++) {
5746 struct usb_port *port_dev = hub->ports[i - 1];
5747
5748 connect_type = port_dev->connect_type;
5749 if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
5750 u8 mask = 1 << (i%8);
5751
5752 if (!(desc->u.hs.DeviceRemovable[i/8] & mask)) {
5753 dev_dbg(&port_dev->dev, "DeviceRemovable is changed to 1 according to platform information.\n");
5754 desc->u.hs.DeviceRemovable[i/8] |= mask;
5755 }
5756 }
5757 }
5758 } else {
5759 u16 port_removable = le16_to_cpu(desc->u.ss.DeviceRemovable);
5760
5761 for (i = 1; i <= hdev->maxchild; i++) {
5762 struct usb_port *port_dev = hub->ports[i - 1];
5763
5764 connect_type = port_dev->connect_type;
5765 if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
5766 u16 mask = 1 << i;
5767
5768 if (!(port_removable & mask)) {
5769 dev_dbg(&port_dev->dev, "DeviceRemovable is changed to 1 according to platform information.\n");
5770 port_removable |= mask;
5771 }
5772 }
5773 }
5774
5775 desc->u.ss.DeviceRemovable = cpu_to_le16(port_removable);
5776 }
5777}
5778
5779#ifdef CONFIG_ACPI
5780
5781
5782
5783
5784
5785
5786
5787
5788acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev,
5789 int port1)
5790{
5791 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
5792
5793 if (!hub)
5794 return NULL;
5795
5796 return ACPI_HANDLE(&hub->ports[port1 - 1]->dev);
5797}
5798#endif
5799