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