1
2
3
4
5
6
7
8
9
10
11#include <linux/kernel.h>
12#include <linux/errno.h>
13#include <linux/module.h>
14#include <linux/moduleparam.h>
15#include <linux/completion.h>
16#include <linux/sched.h>
17#include <linux/list.h>
18#include <linux/slab.h>
19#include <linux/ioctl.h>
20#include <linux/usb.h>
21#include <linux/usbdevice_fs.h>
22#include <linux/usb/hcd.h>
23#include <linux/usb/quirks.h>
24#include <linux/kthread.h>
25#include <linux/mutex.h>
26#include <linux/freezer.h>
27
28#include <asm/uaccess.h>
29#include <asm/byteorder.h>
30
31#include "usb.h"
32
33
34#ifdef DEBUG
35#ifndef CONFIG_USB_ANNOUNCE_NEW_DEVICES
36#define CONFIG_USB_ANNOUNCE_NEW_DEVICES
37#endif
38#endif
39
40struct usb_hub {
41 struct device *intfdev;
42 struct usb_device *hdev;
43 struct kref kref;
44 struct urb *urb;
45
46
47 char (*buffer)[8];
48 union {
49 struct usb_hub_status hub;
50 struct usb_port_status port;
51 } *status;
52 struct mutex status_mutex;
53
54 int error;
55 int nerrors;
56
57 struct list_head event_list;
58 unsigned long event_bits[1];
59 unsigned long change_bits[1];
60
61 unsigned long busy_bits[1];
62
63 unsigned long removed_bits[1];
64
65#if USB_MAXCHILDREN > 31
66#error event_bits[] is too short!
67#endif
68
69 struct usb_hub_descriptor *descriptor;
70 struct usb_tt tt;
71
72 unsigned mA_per_port;
73
74 unsigned limited_power:1;
75 unsigned quiescing:1;
76 unsigned disconnected:1;
77
78 unsigned has_indicators:1;
79 u8 indicator[USB_MAXCHILDREN];
80 struct delayed_work leds;
81 struct delayed_work init_work;
82 void **port_owners;
83};
84
85static inline int hub_is_superspeed(struct usb_device *hdev)
86{
87 return (hdev->descriptor.bDeviceProtocol == 3);
88}
89
90
91
92
93static DEFINE_SPINLOCK(device_state_lock);
94
95
96static DEFINE_SPINLOCK(hub_event_lock);
97static LIST_HEAD(hub_event_list);
98
99
100static DECLARE_WAIT_QUEUE_HEAD(khubd_wait);
101
102static struct task_struct *khubd_task;
103
104
105static int blinkenlights = 0;
106module_param (blinkenlights, bool, S_IRUGO);
107MODULE_PARM_DESC (blinkenlights, "true to cycle leds on hubs");
108
109
110
111
112
113
114static int initial_descriptor_timeout = USB_CTRL_GET_TIMEOUT;
115module_param(initial_descriptor_timeout, int, S_IRUGO|S_IWUSR);
116MODULE_PARM_DESC(initial_descriptor_timeout,
117 "initial 64-byte descriptor request timeout in milliseconds "
118 "(default 5000 - 5.0 seconds)");
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134static int old_scheme_first = 0;
135module_param(old_scheme_first, bool, S_IRUGO | S_IWUSR);
136MODULE_PARM_DESC(old_scheme_first,
137 "start with the old device initialization scheme");
138
139static int use_both_schemes = 1;
140module_param(use_both_schemes, bool, S_IRUGO | S_IWUSR);
141MODULE_PARM_DESC(use_both_schemes,
142 "try the other device initialization scheme if the "
143 "first one fails");
144
145
146
147
148DECLARE_RWSEM(ehci_cf_port_reset_rwsem);
149EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem);
150
151#define HUB_DEBOUNCE_TIMEOUT 1500
152#define HUB_DEBOUNCE_STEP 25
153#define HUB_DEBOUNCE_STABLE 100
154
155
156static int usb_reset_and_verify_device(struct usb_device *udev);
157
158static inline char *portspeed(struct usb_hub *hub, int portstatus)
159{
160 if (hub_is_superspeed(hub->hdev))
161 return "5.0 Gb/s";
162 if (portstatus & USB_PORT_STAT_HIGH_SPEED)
163 return "480 Mb/s";
164 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
165 return "1.5 Mb/s";
166 else
167 return "12 Mb/s";
168}
169
170
171static struct usb_hub *hdev_to_hub(struct usb_device *hdev)
172{
173 if (!hdev || !hdev->actconfig)
174 return NULL;
175 return usb_get_intfdata(hdev->actconfig->interface[0]);
176}
177
178
179static int get_hub_descriptor(struct usb_device *hdev, void *data)
180{
181 int i, ret, size;
182 unsigned dtype;
183
184 if (hub_is_superspeed(hdev)) {
185 dtype = USB_DT_SS_HUB;
186 size = USB_DT_SS_HUB_SIZE;
187 } else {
188 dtype = USB_DT_HUB;
189 size = sizeof(struct usb_hub_descriptor);
190 }
191
192 for (i = 0; i < 3; i++) {
193 ret = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
194 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
195 dtype << 8, 0, data, size,
196 USB_CTRL_GET_TIMEOUT);
197 if (ret >= (USB_DT_HUB_NONVAR_SIZE + 2))
198 return ret;
199 }
200 return -EINVAL;
201}
202
203
204
205
206static int clear_hub_feature(struct usb_device *hdev, int feature)
207{
208 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
209 USB_REQ_CLEAR_FEATURE, USB_RT_HUB, feature, 0, NULL, 0, 1000);
210}
211
212
213
214
215static int clear_port_feature(struct usb_device *hdev, int port1, int feature)
216{
217 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
218 USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, port1,
219 NULL, 0, 1000);
220}
221
222
223
224
225static int set_port_feature(struct usb_device *hdev, int port1, int feature)
226{
227 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
228 USB_REQ_SET_FEATURE, USB_RT_PORT, feature, port1,
229 NULL, 0, 1000);
230}
231
232
233
234
235
236static void set_port_led(
237 struct usb_hub *hub,
238 int port1,
239 int selector
240)
241{
242 int status = set_port_feature(hub->hdev, (selector << 8) | port1,
243 USB_PORT_FEAT_INDICATOR);
244 if (status < 0)
245 dev_dbg (hub->intfdev,
246 "port %d indicator %s status %d\n",
247 port1,
248 ({ char *s; switch (selector) {
249 case HUB_LED_AMBER: s = "amber"; break;
250 case HUB_LED_GREEN: s = "green"; break;
251 case HUB_LED_OFF: s = "off"; break;
252 case HUB_LED_AUTO: s = "auto"; break;
253 default: s = "??"; break;
254 }; s; }),
255 status);
256}
257
258#define LED_CYCLE_PERIOD ((2*HZ)/3)
259
260static void led_work (struct work_struct *work)
261{
262 struct usb_hub *hub =
263 container_of(work, struct usb_hub, leds.work);
264 struct usb_device *hdev = hub->hdev;
265 unsigned i;
266 unsigned changed = 0;
267 int cursor = -1;
268
269 if (hdev->state != USB_STATE_CONFIGURED || hub->quiescing)
270 return;
271
272 for (i = 0; i < hub->descriptor->bNbrPorts; i++) {
273 unsigned selector, mode;
274
275
276
277 switch (hub->indicator[i]) {
278
279 case INDICATOR_CYCLE:
280 cursor = i;
281 selector = HUB_LED_AUTO;
282 mode = INDICATOR_AUTO;
283 break;
284
285 case INDICATOR_GREEN_BLINK:
286 selector = HUB_LED_GREEN;
287 mode = INDICATOR_GREEN_BLINK_OFF;
288 break;
289 case INDICATOR_GREEN_BLINK_OFF:
290 selector = HUB_LED_OFF;
291 mode = INDICATOR_GREEN_BLINK;
292 break;
293
294 case INDICATOR_AMBER_BLINK:
295 selector = HUB_LED_AMBER;
296 mode = INDICATOR_AMBER_BLINK_OFF;
297 break;
298 case INDICATOR_AMBER_BLINK_OFF:
299 selector = HUB_LED_OFF;
300 mode = INDICATOR_AMBER_BLINK;
301 break;
302
303 case INDICATOR_ALT_BLINK:
304 selector = HUB_LED_GREEN;
305 mode = INDICATOR_ALT_BLINK_OFF;
306 break;
307 case INDICATOR_ALT_BLINK_OFF:
308 selector = HUB_LED_AMBER;
309 mode = INDICATOR_ALT_BLINK;
310 break;
311 default:
312 continue;
313 }
314 if (selector != HUB_LED_AUTO)
315 changed = 1;
316 set_port_led(hub, i + 1, selector);
317 hub->indicator[i] = mode;
318 }
319 if (!changed && blinkenlights) {
320 cursor++;
321 cursor %= hub->descriptor->bNbrPorts;
322 set_port_led(hub, cursor + 1, HUB_LED_GREEN);
323 hub->indicator[cursor] = INDICATOR_CYCLE;
324 changed++;
325 }
326 if (changed)
327 schedule_delayed_work(&hub->leds, LED_CYCLE_PERIOD);
328}
329
330
331#define USB_STS_TIMEOUT 1000
332#define USB_STS_RETRIES 5
333
334
335
336
337static int get_hub_status(struct usb_device *hdev,
338 struct usb_hub_status *data)
339{
340 int i, status = -ETIMEDOUT;
341
342 for (i = 0; i < USB_STS_RETRIES &&
343 (status == -ETIMEDOUT || status == -EPIPE); i++) {
344 status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
345 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0,
346 data, sizeof(*data), USB_STS_TIMEOUT);
347 }
348 return status;
349}
350
351
352
353
354static int get_port_status(struct usb_device *hdev, int port1,
355 struct usb_port_status *data)
356{
357 int i, status = -ETIMEDOUT;
358
359 for (i = 0; i < USB_STS_RETRIES &&
360 (status == -ETIMEDOUT || status == -EPIPE); i++) {
361 status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
362 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, 0, port1,
363 data, sizeof(*data), USB_STS_TIMEOUT);
364 }
365 return status;
366}
367
368static int hub_port_status(struct usb_hub *hub, int port1,
369 u16 *status, u16 *change)
370{
371 int ret;
372
373 mutex_lock(&hub->status_mutex);
374 ret = get_port_status(hub->hdev, port1, &hub->status->port);
375 if (ret < 4) {
376 dev_err(hub->intfdev,
377 "%s failed (err = %d)\n", __func__, ret);
378 if (ret >= 0)
379 ret = -EIO;
380 } else {
381 *status = le16_to_cpu(hub->status->port.wPortStatus);
382 *change = le16_to_cpu(hub->status->port.wPortChange);
383
384 ret = 0;
385 }
386 mutex_unlock(&hub->status_mutex);
387 return ret;
388}
389
390static void kick_khubd(struct usb_hub *hub)
391{
392 unsigned long flags;
393
394 spin_lock_irqsave(&hub_event_lock, flags);
395 if (!hub->disconnected && list_empty(&hub->event_list)) {
396 list_add_tail(&hub->event_list, &hub_event_list);
397
398
399 usb_autopm_get_interface_no_resume(
400 to_usb_interface(hub->intfdev));
401 wake_up(&khubd_wait);
402 }
403 spin_unlock_irqrestore(&hub_event_lock, flags);
404}
405
406void usb_kick_khubd(struct usb_device *hdev)
407{
408 struct usb_hub *hub = hdev_to_hub(hdev);
409
410 if (hub)
411 kick_khubd(hub);
412}
413
414
415
416static void hub_irq(struct urb *urb)
417{
418 struct usb_hub *hub = urb->context;
419 int status = urb->status;
420 unsigned i;
421 unsigned long bits;
422
423 switch (status) {
424 case -ENOENT:
425 case -ECONNRESET:
426 case -ESHUTDOWN:
427 return;
428
429 default:
430
431 dev_dbg (hub->intfdev, "transfer --> %d\n", status);
432 if ((++hub->nerrors < 10) || hub->error)
433 goto resubmit;
434 hub->error = status;
435
436
437
438 case 0:
439 bits = 0;
440 for (i = 0; i < urb->actual_length; ++i)
441 bits |= ((unsigned long) ((*hub->buffer)[i]))
442 << (i*8);
443 hub->event_bits[0] = bits;
444 break;
445 }
446
447 hub->nerrors = 0;
448
449
450 kick_khubd(hub);
451
452resubmit:
453 if (hub->quiescing)
454 return;
455
456 if ((status = usb_submit_urb (hub->urb, GFP_ATOMIC)) != 0
457 && status != -ENODEV && status != -EPERM)
458 dev_err (hub->intfdev, "resubmit --> %d\n", status);
459}
460
461
462static inline int
463hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
464{
465 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
466 HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
467 tt, NULL, 0, 1000);
468}
469
470
471
472
473
474
475
476static void hub_tt_work(struct work_struct *work)
477{
478 struct usb_hub *hub =
479 container_of(work, struct usb_hub, tt.clear_work);
480 unsigned long flags;
481 int limit = 100;
482
483 spin_lock_irqsave (&hub->tt.lock, flags);
484 while (--limit && !list_empty (&hub->tt.clear_list)) {
485 struct list_head *next;
486 struct usb_tt_clear *clear;
487 struct usb_device *hdev = hub->hdev;
488 const struct hc_driver *drv;
489 int status;
490
491 next = hub->tt.clear_list.next;
492 clear = list_entry (next, struct usb_tt_clear, clear_list);
493 list_del (&clear->clear_list);
494
495
496 spin_unlock_irqrestore (&hub->tt.lock, flags);
497 status = hub_clear_tt_buffer (hdev, clear->devinfo, clear->tt);
498 if (status)
499 dev_err (&hdev->dev,
500 "clear tt %d (%04x) error %d\n",
501 clear->tt, clear->devinfo, status);
502
503
504 drv = clear->hcd->driver;
505 if (drv->clear_tt_buffer_complete)
506 (drv->clear_tt_buffer_complete)(clear->hcd, clear->ep);
507
508 kfree(clear);
509 spin_lock_irqsave(&hub->tt.lock, flags);
510 }
511 spin_unlock_irqrestore (&hub->tt.lock, flags);
512}
513
514
515
516
517
518
519
520
521
522
523
524
525
526int usb_hub_clear_tt_buffer(struct urb *urb)
527{
528 struct usb_device *udev = urb->dev;
529 int pipe = urb->pipe;
530 struct usb_tt *tt = udev->tt;
531 unsigned long flags;
532 struct usb_tt_clear *clear;
533
534
535
536
537
538 if ((clear = kmalloc (sizeof *clear, GFP_ATOMIC)) == NULL) {
539 dev_err (&udev->dev, "can't save CLEAR_TT_BUFFER state\n");
540
541 return -ENOMEM;
542 }
543
544
545 clear->tt = tt->multi ? udev->ttport : 1;
546 clear->devinfo = usb_pipeendpoint (pipe);
547 clear->devinfo |= udev->devnum << 4;
548 clear->devinfo |= usb_pipecontrol (pipe)
549 ? (USB_ENDPOINT_XFER_CONTROL << 11)
550 : (USB_ENDPOINT_XFER_BULK << 11);
551 if (usb_pipein (pipe))
552 clear->devinfo |= 1 << 15;
553
554
555 clear->hcd = bus_to_hcd(udev->bus);
556 clear->ep = urb->ep;
557
558
559 spin_lock_irqsave (&tt->lock, flags);
560 list_add_tail (&clear->clear_list, &tt->clear_list);
561 schedule_work(&tt->clear_work);
562 spin_unlock_irqrestore (&tt->lock, flags);
563 return 0;
564}
565EXPORT_SYMBOL_GPL(usb_hub_clear_tt_buffer);
566
567
568
569
570static unsigned hub_power_on(struct usb_hub *hub, bool do_delay)
571{
572 int port1;
573 unsigned pgood_delay = hub->descriptor->bPwrOn2PwrGood * 2;
574 unsigned delay;
575 u16 wHubCharacteristics =
576 le16_to_cpu(hub->descriptor->wHubCharacteristics);
577
578
579
580
581
582
583
584 if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2)
585 dev_dbg(hub->intfdev, "enabling power on all ports\n");
586 else
587 dev_dbg(hub->intfdev, "trying to enable port power on "
588 "non-switchable hub\n");
589 for (port1 = 1; port1 <= hub->descriptor->bNbrPorts; port1++)
590 set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER);
591
592
593 delay = max(pgood_delay, (unsigned) 100);
594 if (do_delay)
595 msleep(delay);
596 return delay;
597}
598
599static int hub_hub_status(struct usb_hub *hub,
600 u16 *status, u16 *change)
601{
602 int ret;
603
604 mutex_lock(&hub->status_mutex);
605 ret = get_hub_status(hub->hdev, &hub->status->hub);
606 if (ret < 0)
607 dev_err (hub->intfdev,
608 "%s failed (err = %d)\n", __func__, ret);
609 else {
610 *status = le16_to_cpu(hub->status->hub.wHubStatus);
611 *change = le16_to_cpu(hub->status->hub.wHubChange);
612 ret = 0;
613 }
614 mutex_unlock(&hub->status_mutex);
615 return ret;
616}
617
618static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
619{
620 struct usb_device *hdev = hub->hdev;
621 int ret = 0;
622
623 if (hdev->children[port1-1] && set_state)
624 usb_set_device_state(hdev->children[port1-1],
625 USB_STATE_NOTATTACHED);
626 if (!hub->error && !hub_is_superspeed(hub->hdev))
627 ret = clear_port_feature(hdev, port1, USB_PORT_FEAT_ENABLE);
628 if (ret)
629 dev_err(hub->intfdev, "cannot disable port %d (err = %d)\n",
630 port1, ret);
631 return ret;
632}
633
634
635
636
637
638
639static void hub_port_logical_disconnect(struct usb_hub *hub, int port1)
640{
641 dev_dbg(hub->intfdev, "logical disconnect on port %d\n", port1);
642 hub_port_disable(hub, port1, 1);
643
644
645
646
647
648
649
650
651
652
653 set_bit(port1, hub->change_bits);
654 kick_khubd(hub);
655}
656
657
658
659
660
661
662
663
664
665
666
667int usb_remove_device(struct usb_device *udev)
668{
669 struct usb_hub *hub;
670 struct usb_interface *intf;
671
672 if (!udev->parent)
673 return -EINVAL;
674 hub = hdev_to_hub(udev->parent);
675 intf = to_usb_interface(hub->intfdev);
676
677 usb_autopm_get_interface(intf);
678 set_bit(udev->portnum, hub->removed_bits);
679 hub_port_logical_disconnect(hub, udev->portnum);
680 usb_autopm_put_interface(intf);
681 return 0;
682}
683
684enum hub_activation_type {
685 HUB_INIT, HUB_INIT2, HUB_INIT3,
686 HUB_POST_RESET, HUB_RESUME, HUB_RESET_RESUME,
687};
688
689static void hub_init_func2(struct work_struct *ws);
690static void hub_init_func3(struct work_struct *ws);
691
692static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
693{
694 struct usb_device *hdev = hub->hdev;
695 struct usb_hcd *hcd;
696 int ret;
697 int port1;
698 int status;
699 bool need_debounce_delay = false;
700 unsigned delay;
701
702
703 if (type == HUB_INIT2)
704 goto init2;
705 if (type == HUB_INIT3)
706 goto init3;
707
708
709
710
711 if (type != HUB_RESUME) {
712
713
714
715
716
717
718
719
720
721
722
723
724
725 if (type == HUB_INIT) {
726 delay = hub_power_on(hub, false);
727 PREPARE_DELAYED_WORK(&hub->init_work, hub_init_func2);
728 schedule_delayed_work(&hub->init_work,
729 msecs_to_jiffies(delay));
730
731
732 usb_autopm_get_interface_no_resume(
733 to_usb_interface(hub->intfdev));
734 return;
735 } else if (type == HUB_RESET_RESUME) {
736
737
738
739
740 hcd = bus_to_hcd(hdev->bus);
741 if (hcd->driver->update_hub_device) {
742 ret = hcd->driver->update_hub_device(hcd, hdev,
743 &hub->tt, GFP_NOIO);
744 if (ret < 0) {
745 dev_err(hub->intfdev, "Host not "
746 "accepting hub info "
747 "update.\n");
748 dev_err(hub->intfdev, "LS/FS devices "
749 "and hubs may not work "
750 "under this hub\n.");
751 }
752 }
753 hub_power_on(hub, true);
754 } else {
755 hub_power_on(hub, true);
756 }
757 }
758 init2:
759
760
761
762
763 for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
764 struct usb_device *udev = hdev->children[port1-1];
765 u16 portstatus, portchange;
766
767 portstatus = portchange = 0;
768 status = hub_port_status(hub, port1, &portstatus, &portchange);
769 if (udev || (portstatus & USB_PORT_STAT_CONNECTION))
770 dev_dbg(hub->intfdev,
771 "port %d: status %04x change %04x\n",
772 port1, portstatus, portchange);
773
774
775
776
777
778
779 if ((portstatus & USB_PORT_STAT_ENABLE) && (
780 type != HUB_RESUME ||
781 !(portstatus & USB_PORT_STAT_CONNECTION) ||
782 !udev ||
783 udev->state == USB_STATE_NOTATTACHED)) {
784
785
786
787
788
789 if (!hub_is_superspeed(hdev)) {
790 clear_port_feature(hdev, port1,
791 USB_PORT_FEAT_ENABLE);
792 portstatus &= ~USB_PORT_STAT_ENABLE;
793 } else {
794
795 portstatus &= ~USB_PORT_STAT_ENABLE;
796 }
797 }
798
799
800 if (portchange & USB_PORT_STAT_C_CONNECTION) {
801 need_debounce_delay = true;
802 clear_port_feature(hub->hdev, port1,
803 USB_PORT_FEAT_C_CONNECTION);
804 }
805 if (portchange & USB_PORT_STAT_C_ENABLE) {
806 need_debounce_delay = true;
807 clear_port_feature(hub->hdev, port1,
808 USB_PORT_FEAT_C_ENABLE);
809 }
810 if (portchange & USB_PORT_STAT_C_LINK_STATE) {
811 need_debounce_delay = true;
812 clear_port_feature(hub->hdev, port1,
813 USB_PORT_FEAT_C_PORT_LINK_STATE);
814 }
815
816
817
818
819 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
820 (portchange & USB_PORT_STAT_C_CONNECTION))
821 clear_bit(port1, hub->removed_bits);
822
823 if (!udev || udev->state == USB_STATE_NOTATTACHED) {
824
825
826
827 if (udev || (portstatus & USB_PORT_STAT_CONNECTION))
828 set_bit(port1, hub->change_bits);
829
830 } else if (portstatus & USB_PORT_STAT_ENABLE) {
831
832
833
834
835
836 if (portchange)
837 set_bit(port1, hub->change_bits);
838
839 } else if (udev->persist_enabled) {
840#ifdef CONFIG_PM
841 udev->reset_resume = 1;
842#endif
843 set_bit(port1, hub->change_bits);
844
845 } else {
846
847 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
848 set_bit(port1, hub->change_bits);
849 }
850 }
851
852
853
854
855
856
857
858
859
860 if (need_debounce_delay) {
861 delay = HUB_DEBOUNCE_STABLE;
862
863
864 if (type == HUB_INIT2) {
865 PREPARE_DELAYED_WORK(&hub->init_work, hub_init_func3);
866 schedule_delayed_work(&hub->init_work,
867 msecs_to_jiffies(delay));
868 return;
869 } else {
870 msleep(delay);
871 }
872 }
873 init3:
874 hub->quiescing = 0;
875
876 status = usb_submit_urb(hub->urb, GFP_NOIO);
877 if (status < 0)
878 dev_err(hub->intfdev, "activate --> %d\n", status);
879 if (hub->has_indicators && blinkenlights)
880 schedule_delayed_work(&hub->leds, LED_CYCLE_PERIOD);
881
882
883 kick_khubd(hub);
884
885
886 if (type <= HUB_INIT3)
887 usb_autopm_put_interface_async(to_usb_interface(hub->intfdev));
888}
889
890
891static void hub_init_func2(struct work_struct *ws)
892{
893 struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work);
894
895 hub_activate(hub, HUB_INIT2);
896}
897
898static void hub_init_func3(struct work_struct *ws)
899{
900 struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work);
901
902 hub_activate(hub, HUB_INIT3);
903}
904
905enum hub_quiescing_type {
906 HUB_DISCONNECT, HUB_PRE_RESET, HUB_SUSPEND
907};
908
909static void hub_quiesce(struct usb_hub *hub, enum hub_quiescing_type type)
910{
911 struct usb_device *hdev = hub->hdev;
912 int i;
913
914 cancel_delayed_work_sync(&hub->init_work);
915
916
917 hub->quiescing = 1;
918
919 if (type != HUB_SUSPEND) {
920
921 for (i = 0; i < hdev->maxchild; ++i) {
922 if (hdev->children[i])
923 usb_disconnect(&hdev->children[i]);
924 }
925 }
926
927
928 usb_kill_urb(hub->urb);
929 if (hub->has_indicators)
930 cancel_delayed_work_sync(&hub->leds);
931 if (hub->tt.hub)
932 cancel_work_sync(&hub->tt.clear_work);
933}
934
935
936static int hub_pre_reset(struct usb_interface *intf)
937{
938 struct usb_hub *hub = usb_get_intfdata(intf);
939
940 hub_quiesce(hub, HUB_PRE_RESET);
941 return 0;
942}
943
944
945static int hub_post_reset(struct usb_interface *intf)
946{
947 struct usb_hub *hub = usb_get_intfdata(intf);
948
949 hub_activate(hub, HUB_POST_RESET);
950 return 0;
951}
952
953static int hub_configure(struct usb_hub *hub,
954 struct usb_endpoint_descriptor *endpoint)
955{
956 struct usb_hcd *hcd;
957 struct usb_device *hdev = hub->hdev;
958 struct device *hub_dev = hub->intfdev;
959 u16 hubstatus, hubchange;
960 u16 wHubCharacteristics;
961 unsigned int pipe;
962 int maxp, ret;
963 char *message = "out of memory";
964
965 hub->buffer = kmalloc(sizeof(*hub->buffer), GFP_KERNEL);
966 if (!hub->buffer) {
967 ret = -ENOMEM;
968 goto fail;
969 }
970
971 hub->status = kmalloc(sizeof(*hub->status), GFP_KERNEL);
972 if (!hub->status) {
973 ret = -ENOMEM;
974 goto fail;
975 }
976 mutex_init(&hub->status_mutex);
977
978 hub->descriptor = kmalloc(sizeof(*hub->descriptor), GFP_KERNEL);
979 if (!hub->descriptor) {
980 ret = -ENOMEM;
981 goto fail;
982 }
983
984 if (hub_is_superspeed(hdev) && (hdev->parent != NULL)) {
985 ret = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
986 HUB_SET_DEPTH, USB_RT_HUB,
987 hdev->level - 1, 0, NULL, 0,
988 USB_CTRL_SET_TIMEOUT);
989
990 if (ret < 0) {
991 message = "can't set hub depth";
992 goto fail;
993 }
994 }
995
996
997
998
999
1000 ret = get_hub_descriptor(hdev, hub->descriptor);
1001 if (ret < 0) {
1002 message = "can't read hub descriptor";
1003 goto fail;
1004 } else if (hub->descriptor->bNbrPorts > USB_MAXCHILDREN) {
1005 message = "hub has too many ports!";
1006 ret = -ENODEV;
1007 goto fail;
1008 }
1009
1010 hdev->maxchild = hub->descriptor->bNbrPorts;
1011 dev_info (hub_dev, "%d port%s detected\n", hdev->maxchild,
1012 (hdev->maxchild == 1) ? "" : "s");
1013
1014 hub->port_owners = kzalloc(hdev->maxchild * sizeof(void *), GFP_KERNEL);
1015 if (!hub->port_owners) {
1016 ret = -ENOMEM;
1017 goto fail;
1018 }
1019
1020 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics);
1021
1022
1023 if ((wHubCharacteristics & HUB_CHAR_COMPOUND) &&
1024 !(hub_is_superspeed(hdev))) {
1025 int i;
1026 char portstr [USB_MAXCHILDREN + 1];
1027
1028 for (i = 0; i < hdev->maxchild; i++)
1029 portstr[i] = hub->descriptor->u.hs.DeviceRemovable
1030 [((i + 1) / 8)] & (1 << ((i + 1) % 8))
1031 ? 'F' : 'R';
1032 portstr[hdev->maxchild] = 0;
1033 dev_dbg(hub_dev, "compound device; port removable status: %s\n", portstr);
1034 } else
1035 dev_dbg(hub_dev, "standalone hub\n");
1036
1037 switch (wHubCharacteristics & HUB_CHAR_LPSM) {
1038 case 0x00:
1039 dev_dbg(hub_dev, "ganged power switching\n");
1040 break;
1041 case 0x01:
1042 dev_dbg(hub_dev, "individual port power switching\n");
1043 break;
1044 case 0x02:
1045 case 0x03:
1046 dev_dbg(hub_dev, "no power switching (usb 1.0)\n");
1047 break;
1048 }
1049
1050 switch (wHubCharacteristics & HUB_CHAR_OCPM) {
1051 case 0x00:
1052 dev_dbg(hub_dev, "global over-current protection\n");
1053 break;
1054 case 0x08:
1055 dev_dbg(hub_dev, "individual port over-current protection\n");
1056 break;
1057 case 0x10:
1058 case 0x18:
1059 dev_dbg(hub_dev, "no over-current protection\n");
1060 break;
1061 }
1062
1063 spin_lock_init (&hub->tt.lock);
1064 INIT_LIST_HEAD (&hub->tt.clear_list);
1065 INIT_WORK(&hub->tt.clear_work, hub_tt_work);
1066 switch (hdev->descriptor.bDeviceProtocol) {
1067 case 0:
1068 break;
1069 case 1:
1070 dev_dbg(hub_dev, "Single TT\n");
1071 hub->tt.hub = hdev;
1072 break;
1073 case 2:
1074 ret = usb_set_interface(hdev, 0, 1);
1075 if (ret == 0) {
1076 dev_dbg(hub_dev, "TT per port\n");
1077 hub->tt.multi = 1;
1078 } else
1079 dev_err(hub_dev, "Using single TT (err %d)\n",
1080 ret);
1081 hub->tt.hub = hdev;
1082 break;
1083 case 3:
1084
1085 break;
1086 default:
1087 dev_dbg(hub_dev, "Unrecognized hub protocol %d\n",
1088 hdev->descriptor.bDeviceProtocol);
1089 break;
1090 }
1091
1092
1093 switch (wHubCharacteristics & HUB_CHAR_TTTT) {
1094 case HUB_TTTT_8_BITS:
1095 if (hdev->descriptor.bDeviceProtocol != 0) {
1096 hub->tt.think_time = 666;
1097 dev_dbg(hub_dev, "TT requires at most %d "
1098 "FS bit times (%d ns)\n",
1099 8, hub->tt.think_time);
1100 }
1101 break;
1102 case HUB_TTTT_16_BITS:
1103 hub->tt.think_time = 666 * 2;
1104 dev_dbg(hub_dev, "TT requires at most %d "
1105 "FS bit times (%d ns)\n",
1106 16, hub->tt.think_time);
1107 break;
1108 case HUB_TTTT_24_BITS:
1109 hub->tt.think_time = 666 * 3;
1110 dev_dbg(hub_dev, "TT requires at most %d "
1111 "FS bit times (%d ns)\n",
1112 24, hub->tt.think_time);
1113 break;
1114 case HUB_TTTT_32_BITS:
1115 hub->tt.think_time = 666 * 4;
1116 dev_dbg(hub_dev, "TT requires at most %d "
1117 "FS bit times (%d ns)\n",
1118 32, hub->tt.think_time);
1119 break;
1120 }
1121
1122
1123 if (wHubCharacteristics & HUB_CHAR_PORTIND) {
1124 hub->has_indicators = 1;
1125 dev_dbg(hub_dev, "Port indicators are supported\n");
1126 }
1127
1128 dev_dbg(hub_dev, "power on to power good time: %dms\n",
1129 hub->descriptor->bPwrOn2PwrGood * 2);
1130
1131
1132
1133
1134 ret = usb_get_status(hdev, USB_RECIP_DEVICE, 0, &hubstatus);
1135 if (ret < 2) {
1136 message = "can't get hub status";
1137 goto fail;
1138 }
1139 le16_to_cpus(&hubstatus);
1140 if (hdev == hdev->bus->root_hub) {
1141 if (hdev->bus_mA == 0 || hdev->bus_mA >= 500)
1142 hub->mA_per_port = 500;
1143 else {
1144 hub->mA_per_port = hdev->bus_mA;
1145 hub->limited_power = 1;
1146 }
1147 } else if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
1148 dev_dbg(hub_dev, "hub controller current requirement: %dmA\n",
1149 hub->descriptor->bHubContrCurrent);
1150 hub->limited_power = 1;
1151 if (hdev->maxchild > 0) {
1152 int remaining = hdev->bus_mA -
1153 hub->descriptor->bHubContrCurrent;
1154
1155 if (remaining < hdev->maxchild * 100)
1156 dev_warn(hub_dev,
1157 "insufficient power available "
1158 "to use all downstream ports\n");
1159 hub->mA_per_port = 100;
1160 }
1161 } else {
1162
1163
1164 hub->mA_per_port = 500;
1165 }
1166 if (hub->mA_per_port < 500)
1167 dev_dbg(hub_dev, "%umA bus power budget for each child\n",
1168 hub->mA_per_port);
1169
1170
1171
1172
1173 hcd = bus_to_hcd(hdev->bus);
1174 if (hcd->driver->update_hub_device) {
1175 ret = hcd->driver->update_hub_device(hcd, hdev,
1176 &hub->tt, GFP_KERNEL);
1177 if (ret < 0) {
1178 message = "can't update HCD hub info";
1179 goto fail;
1180 }
1181 }
1182
1183 ret = hub_hub_status(hub, &hubstatus, &hubchange);
1184 if (ret < 0) {
1185 message = "can't get hub status";
1186 goto fail;
1187 }
1188
1189
1190 if (hdev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER)
1191 dev_dbg(hub_dev, "local power source is %s\n",
1192 (hubstatus & HUB_STATUS_LOCAL_POWER)
1193 ? "lost (inactive)" : "good");
1194
1195 if ((wHubCharacteristics & HUB_CHAR_OCPM) == 0)
1196 dev_dbg(hub_dev, "%sover-current condition exists\n",
1197 (hubstatus & HUB_STATUS_OVERCURRENT) ? "" : "no ");
1198
1199
1200
1201
1202
1203
1204
1205 pipe = usb_rcvintpipe(hdev, endpoint->bEndpointAddress);
1206 maxp = usb_maxpacket(hdev, pipe, usb_pipeout(pipe));
1207
1208 if (maxp > sizeof(*hub->buffer))
1209 maxp = sizeof(*hub->buffer);
1210
1211 hub->urb = usb_alloc_urb(0, GFP_KERNEL);
1212 if (!hub->urb) {
1213 ret = -ENOMEM;
1214 goto fail;
1215 }
1216
1217 usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq,
1218 hub, endpoint->bInterval);
1219
1220
1221 if (hub->has_indicators && blinkenlights)
1222 hub->indicator [0] = INDICATOR_CYCLE;
1223
1224 hub_activate(hub, HUB_INIT);
1225 return 0;
1226
1227fail:
1228 dev_err (hub_dev, "config failed, %s (err %d)\n",
1229 message, ret);
1230
1231 return ret;
1232}
1233
1234static void hub_release(struct kref *kref)
1235{
1236 struct usb_hub *hub = container_of(kref, struct usb_hub, kref);
1237
1238 usb_put_intf(to_usb_interface(hub->intfdev));
1239 kfree(hub);
1240}
1241
1242static unsigned highspeed_hubs;
1243
1244static void hub_disconnect(struct usb_interface *intf)
1245{
1246 struct usb_hub *hub = usb_get_intfdata (intf);
1247
1248
1249 spin_lock_irq(&hub_event_lock);
1250 if (!list_empty(&hub->event_list)) {
1251 list_del_init(&hub->event_list);
1252 usb_autopm_put_interface_no_suspend(intf);
1253 }
1254 hub->disconnected = 1;
1255 spin_unlock_irq(&hub_event_lock);
1256
1257
1258 hub->error = 0;
1259 hub_quiesce(hub, HUB_DISCONNECT);
1260
1261 usb_set_intfdata (intf, NULL);
1262 hub->hdev->maxchild = 0;
1263
1264 if (hub->hdev->speed == USB_SPEED_HIGH)
1265 highspeed_hubs--;
1266
1267 usb_free_urb(hub->urb);
1268 kfree(hub->port_owners);
1269 kfree(hub->descriptor);
1270 kfree(hub->status);
1271 kfree(hub->buffer);
1272
1273 kref_put(&hub->kref, hub_release);
1274}
1275
1276static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
1277{
1278 struct usb_host_interface *desc;
1279 struct usb_endpoint_descriptor *endpoint;
1280 struct usb_device *hdev;
1281 struct usb_hub *hub;
1282
1283 desc = intf->cur_altsetting;
1284 hdev = interface_to_usbdev(intf);
1285
1286
1287
1288
1289
1290
1291
1292 if (!hub_is_superspeed(hdev) || !hdev->parent)
1293 usb_enable_autosuspend(hdev);
1294
1295 if (hdev->level == MAX_TOPO_LEVEL) {
1296 dev_err(&intf->dev,
1297 "Unsupported bus topology: hub nested too deep\n");
1298 return -E2BIG;
1299 }
1300
1301#ifdef CONFIG_USB_OTG_BLACKLIST_HUB
1302 if (hdev->parent) {
1303 dev_warn(&intf->dev, "ignoring external hub\n");
1304 return -ENODEV;
1305 }
1306#endif
1307
1308
1309
1310 if ((desc->desc.bInterfaceSubClass != 0) &&
1311 (desc->desc.bInterfaceSubClass != 1)) {
1312descriptor_error:
1313 dev_err (&intf->dev, "bad descriptor, ignoring hub\n");
1314 return -EIO;
1315 }
1316
1317
1318 if (desc->desc.bNumEndpoints != 1)
1319 goto descriptor_error;
1320
1321 endpoint = &desc->endpoint[0].desc;
1322
1323
1324 if (!usb_endpoint_is_int_in(endpoint))
1325 goto descriptor_error;
1326
1327
1328 dev_info (&intf->dev, "USB hub found\n");
1329
1330 hub = kzalloc(sizeof(*hub), GFP_KERNEL);
1331 if (!hub) {
1332 dev_dbg (&intf->dev, "couldn't kmalloc hub struct\n");
1333 return -ENOMEM;
1334 }
1335
1336 kref_init(&hub->kref);
1337 INIT_LIST_HEAD(&hub->event_list);
1338 hub->intfdev = &intf->dev;
1339 hub->hdev = hdev;
1340 INIT_DELAYED_WORK(&hub->leds, led_work);
1341 INIT_DELAYED_WORK(&hub->init_work, NULL);
1342 usb_get_intf(intf);
1343
1344 usb_set_intfdata (intf, hub);
1345 intf->needs_remote_wakeup = 1;
1346
1347 if (hdev->speed == USB_SPEED_HIGH)
1348 highspeed_hubs++;
1349
1350 if (hub_configure(hub, endpoint) >= 0)
1351 return 0;
1352
1353 hub_disconnect (intf);
1354 return -ENODEV;
1355}
1356
1357
1358static int
1359hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data)
1360{
1361 struct usb_device *hdev = interface_to_usbdev (intf);
1362
1363
1364 switch (code) {
1365 case USBDEVFS_HUB_PORTINFO: {
1366 struct usbdevfs_hub_portinfo *info = user_data;
1367 int i;
1368
1369 spin_lock_irq(&device_state_lock);
1370 if (hdev->devnum <= 0)
1371 info->nports = 0;
1372 else {
1373 info->nports = hdev->maxchild;
1374 for (i = 0; i < info->nports; i++) {
1375 if (hdev->children[i] == NULL)
1376 info->port[i] = 0;
1377 else
1378 info->port[i] =
1379 hdev->children[i]->devnum;
1380 }
1381 }
1382 spin_unlock_irq(&device_state_lock);
1383
1384 return info->nports + 1;
1385 }
1386
1387 default:
1388 return -ENOSYS;
1389 }
1390}
1391
1392
1393
1394
1395
1396static int find_port_owner(struct usb_device *hdev, unsigned port1,
1397 void ***ppowner)
1398{
1399 if (hdev->state == USB_STATE_NOTATTACHED)
1400 return -ENODEV;
1401 if (port1 == 0 || port1 > hdev->maxchild)
1402 return -EINVAL;
1403
1404
1405
1406
1407 *ppowner = &(hdev_to_hub(hdev)->port_owners[port1 - 1]);
1408 return 0;
1409}
1410
1411
1412int usb_hub_claim_port(struct usb_device *hdev, unsigned port1, void *owner)
1413{
1414 int rc;
1415 void **powner;
1416
1417 rc = find_port_owner(hdev, port1, &powner);
1418 if (rc)
1419 return rc;
1420 if (*powner)
1421 return -EBUSY;
1422 *powner = owner;
1423 return rc;
1424}
1425
1426int usb_hub_release_port(struct usb_device *hdev, unsigned port1, void *owner)
1427{
1428 int rc;
1429 void **powner;
1430
1431 rc = find_port_owner(hdev, port1, &powner);
1432 if (rc)
1433 return rc;
1434 if (*powner != owner)
1435 return -ENOENT;
1436 *powner = NULL;
1437 return rc;
1438}
1439
1440void usb_hub_release_all_ports(struct usb_device *hdev, void *owner)
1441{
1442 int n;
1443 void **powner;
1444
1445 n = find_port_owner(hdev, 1, &powner);
1446 if (n == 0) {
1447 for (; n < hdev->maxchild; (++n, ++powner)) {
1448 if (*powner == owner)
1449 *powner = NULL;
1450 }
1451 }
1452}
1453
1454
1455bool usb_device_is_owned(struct usb_device *udev)
1456{
1457 struct usb_hub *hub;
1458
1459 if (udev->state == USB_STATE_NOTATTACHED || !udev->parent)
1460 return false;
1461 hub = hdev_to_hub(udev->parent);
1462 return !!hub->port_owners[udev->portnum - 1];
1463}
1464
1465
1466static void recursively_mark_NOTATTACHED(struct usb_device *udev)
1467{
1468 int i;
1469
1470 for (i = 0; i < udev->maxchild; ++i) {
1471 if (udev->children[i])
1472 recursively_mark_NOTATTACHED(udev->children[i]);
1473 }
1474 if (udev->state == USB_STATE_SUSPENDED)
1475 udev->active_duration -= jiffies;
1476 udev->state = USB_STATE_NOTATTACHED;
1477}
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500void usb_set_device_state(struct usb_device *udev,
1501 enum usb_device_state new_state)
1502{
1503 unsigned long flags;
1504 int wakeup = -1;
1505
1506 spin_lock_irqsave(&device_state_lock, flags);
1507 if (udev->state == USB_STATE_NOTATTACHED)
1508 ;
1509 else if (new_state != USB_STATE_NOTATTACHED) {
1510
1511
1512
1513
1514 if (udev->parent) {
1515 if (udev->state == USB_STATE_SUSPENDED
1516 || new_state == USB_STATE_SUSPENDED)
1517 ;
1518 else if (new_state == USB_STATE_CONFIGURED)
1519 wakeup = udev->actconfig->desc.bmAttributes
1520 & USB_CONFIG_ATT_WAKEUP;
1521 else
1522 wakeup = 0;
1523 }
1524 if (udev->state == USB_STATE_SUSPENDED &&
1525 new_state != USB_STATE_SUSPENDED)
1526 udev->active_duration -= jiffies;
1527 else if (new_state == USB_STATE_SUSPENDED &&
1528 udev->state != USB_STATE_SUSPENDED)
1529 udev->active_duration += jiffies;
1530 udev->state = new_state;
1531 } else
1532 recursively_mark_NOTATTACHED(udev);
1533 spin_unlock_irqrestore(&device_state_lock, flags);
1534 if (wakeup >= 0)
1535 device_set_wakeup_capable(&udev->dev, wakeup);
1536}
1537EXPORT_SYMBOL_GPL(usb_set_device_state);
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568static void choose_devnum(struct usb_device *udev)
1569{
1570 int devnum;
1571 struct usb_bus *bus = udev->bus;
1572
1573
1574 if (udev->wusb) {
1575 devnum = udev->portnum + 1;
1576 BUG_ON(test_bit(devnum, bus->devmap.devicemap));
1577 } else {
1578
1579
1580 devnum = find_next_zero_bit(bus->devmap.devicemap, 128,
1581 bus->devnum_next);
1582 if (devnum >= 128)
1583 devnum = find_next_zero_bit(bus->devmap.devicemap,
1584 128, 1);
1585 bus->devnum_next = ( devnum >= 127 ? 1 : devnum + 1);
1586 }
1587 if (devnum < 128) {
1588 set_bit(devnum, bus->devmap.devicemap);
1589 udev->devnum = devnum;
1590 }
1591}
1592
1593static void release_devnum(struct usb_device *udev)
1594{
1595 if (udev->devnum > 0) {
1596 clear_bit(udev->devnum, udev->bus->devmap.devicemap);
1597 udev->devnum = -1;
1598 }
1599}
1600
1601static void update_devnum(struct usb_device *udev, int devnum)
1602{
1603
1604 if (!udev->wusb)
1605 udev->devnum = devnum;
1606}
1607
1608static void hub_free_dev(struct usb_device *udev)
1609{
1610 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1611
1612
1613 if (hcd->driver->free_dev && udev->parent)
1614 hcd->driver->free_dev(hcd, udev);
1615}
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633void usb_disconnect(struct usb_device **pdev)
1634{
1635 struct usb_device *udev = *pdev;
1636 int i;
1637 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1638
1639 if (!udev) {
1640 pr_debug ("%s nodev\n", __func__);
1641 return;
1642 }
1643
1644
1645
1646
1647
1648 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
1649 dev_info(&udev->dev, "USB disconnect, device number %d\n",
1650 udev->devnum);
1651
1652 usb_lock_device(udev);
1653
1654
1655 for (i = 0; i < USB_MAXCHILDREN; i++) {
1656 if (udev->children[i])
1657 usb_disconnect(&udev->children[i]);
1658 }
1659
1660
1661
1662
1663
1664 dev_dbg (&udev->dev, "unregistering device\n");
1665 mutex_lock(hcd->bandwidth_mutex);
1666 usb_disable_device(udev, 0);
1667 mutex_unlock(hcd->bandwidth_mutex);
1668 usb_hcd_synchronize_unlinks(udev);
1669
1670 usb_remove_ep_devs(&udev->ep0);
1671 usb_unlock_device(udev);
1672
1673
1674
1675
1676
1677 device_del(&udev->dev);
1678
1679
1680
1681
1682 release_devnum(udev);
1683
1684
1685 spin_lock_irq(&device_state_lock);
1686 *pdev = NULL;
1687 spin_unlock_irq(&device_state_lock);
1688
1689 hub_free_dev(udev);
1690
1691 put_device(&udev->dev);
1692}
1693
1694#ifdef CONFIG_USB_ANNOUNCE_NEW_DEVICES
1695static void show_string(struct usb_device *udev, char *id, char *string)
1696{
1697 if (!string)
1698 return;
1699 dev_printk(KERN_INFO, &udev->dev, "%s: %s\n", id, string);
1700}
1701
1702static void announce_device(struct usb_device *udev)
1703{
1704 dev_info(&udev->dev, "New USB device found, idVendor=%04x, idProduct=%04x\n",
1705 le16_to_cpu(udev->descriptor.idVendor),
1706 le16_to_cpu(udev->descriptor.idProduct));
1707 dev_info(&udev->dev,
1708 "New USB device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
1709 udev->descriptor.iManufacturer,
1710 udev->descriptor.iProduct,
1711 udev->descriptor.iSerialNumber);
1712 show_string(udev, "Product", udev->product);
1713 show_string(udev, "Manufacturer", udev->manufacturer);
1714 show_string(udev, "SerialNumber", udev->serial);
1715}
1716#else
1717static inline void announce_device(struct usb_device *udev) { }
1718#endif
1719
1720#ifdef CONFIG_USB_OTG
1721#include "otg_whitelist.h"
1722#endif
1723
1724
1725
1726
1727
1728
1729
1730static int usb_enumerate_device_otg(struct usb_device *udev)
1731{
1732 int err = 0;
1733
1734#ifdef CONFIG_USB_OTG
1735
1736
1737
1738
1739
1740 if (!udev->bus->is_b_host
1741 && udev->config
1742 && udev->parent == udev->bus->root_hub) {
1743 struct usb_otg_descriptor *desc = NULL;
1744 struct usb_bus *bus = udev->bus;
1745
1746
1747 if (__usb_get_extra_descriptor (udev->rawdescriptors[0],
1748 le16_to_cpu(udev->config[0].desc.wTotalLength),
1749 USB_DT_OTG, (void **) &desc) == 0) {
1750 if (desc->bmAttributes & USB_OTG_HNP) {
1751 unsigned port1 = udev->portnum;
1752
1753 dev_info(&udev->dev,
1754 "Dual-Role OTG device on %sHNP port\n",
1755 (port1 == bus->otg_port)
1756 ? "" : "non-");
1757
1758
1759 if (port1 == bus->otg_port)
1760 bus->b_hnp_enable = 1;
1761 err = usb_control_msg(udev,
1762 usb_sndctrlpipe(udev, 0),
1763 USB_REQ_SET_FEATURE, 0,
1764 bus->b_hnp_enable
1765 ? USB_DEVICE_B_HNP_ENABLE
1766 : USB_DEVICE_A_ALT_HNP_SUPPORT,
1767 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
1768 if (err < 0) {
1769
1770
1771
1772 dev_info(&udev->dev,
1773 "can't set HNP mode: %d\n",
1774 err);
1775 bus->b_hnp_enable = 0;
1776 }
1777 }
1778 }
1779 }
1780
1781 if (!is_targeted(udev)) {
1782
1783
1784
1785
1786 if (udev->bus->b_hnp_enable || udev->bus->is_b_host) {
1787 err = usb_port_suspend(udev, PMSG_SUSPEND);
1788 if (err < 0)
1789 dev_dbg(&udev->dev, "HNP fail, %d\n", err);
1790 }
1791 err = -ENOTSUPP;
1792 goto fail;
1793 }
1794fail:
1795#endif
1796 return err;
1797}
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812static int usb_enumerate_device(struct usb_device *udev)
1813{
1814 int err;
1815
1816 if (udev->config == NULL) {
1817 err = usb_get_configuration(udev);
1818 if (err < 0) {
1819 dev_err(&udev->dev, "can't read configurations, error %d\n",
1820 err);
1821 goto fail;
1822 }
1823 }
1824 if (udev->wusb == 1 && udev->authorized == 0) {
1825 udev->product = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1826 udev->manufacturer = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1827 udev->serial = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1828 }
1829 else {
1830
1831 udev->product = usb_cache_string(udev, udev->descriptor.iProduct);
1832 udev->manufacturer = usb_cache_string(udev,
1833 udev->descriptor.iManufacturer);
1834 udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber);
1835 }
1836 err = usb_enumerate_device_otg(udev);
1837fail:
1838 return err;
1839}
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862int usb_new_device(struct usb_device *udev)
1863{
1864 int err;
1865
1866 if (udev->parent) {
1867
1868
1869
1870
1871 device_init_wakeup(&udev->dev, 0);
1872 }
1873
1874
1875 pm_runtime_set_active(&udev->dev);
1876 pm_runtime_get_noresume(&udev->dev);
1877 pm_runtime_use_autosuspend(&udev->dev);
1878 pm_runtime_enable(&udev->dev);
1879
1880
1881
1882
1883 usb_disable_autosuspend(udev);
1884
1885 err = usb_enumerate_device(udev);
1886 if (err < 0)
1887 goto fail;
1888 dev_dbg(&udev->dev, "udev %d, busnum %d, minor = %d\n",
1889 udev->devnum, udev->bus->busnum,
1890 (((udev->bus->busnum-1) * 128) + (udev->devnum-1)));
1891
1892 udev->dev.devt = MKDEV(USB_DEVICE_MAJOR,
1893 (((udev->bus->busnum-1) * 128) + (udev->devnum-1)));
1894
1895
1896 announce_device(udev);
1897
1898 device_enable_async_suspend(&udev->dev);
1899
1900
1901
1902
1903 err = device_add(&udev->dev);
1904 if (err) {
1905 dev_err(&udev->dev, "can't device_add, error %d\n", err);
1906 goto fail;
1907 }
1908
1909 (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
1910 usb_mark_last_busy(udev);
1911 pm_runtime_put_sync_autosuspend(&udev->dev);
1912 return err;
1913
1914fail:
1915 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
1916 pm_runtime_disable(&udev->dev);
1917 pm_runtime_set_suspended(&udev->dev);
1918 return err;
1919}
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932int usb_deauthorize_device(struct usb_device *usb_dev)
1933{
1934 usb_lock_device(usb_dev);
1935 if (usb_dev->authorized == 0)
1936 goto out_unauthorized;
1937
1938 usb_dev->authorized = 0;
1939 usb_set_configuration(usb_dev, -1);
1940
1941 kfree(usb_dev->product);
1942 usb_dev->product = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1943 kfree(usb_dev->manufacturer);
1944 usb_dev->manufacturer = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1945 kfree(usb_dev->serial);
1946 usb_dev->serial = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1947
1948 usb_destroy_configuration(usb_dev);
1949 usb_dev->descriptor.bNumConfigurations = 0;
1950
1951out_unauthorized:
1952 usb_unlock_device(usb_dev);
1953 return 0;
1954}
1955
1956
1957int usb_authorize_device(struct usb_device *usb_dev)
1958{
1959 int result = 0, c;
1960
1961 usb_lock_device(usb_dev);
1962 if (usb_dev->authorized == 1)
1963 goto out_authorized;
1964
1965 result = usb_autoresume_device(usb_dev);
1966 if (result < 0) {
1967 dev_err(&usb_dev->dev,
1968 "can't autoresume for authorization: %d\n", result);
1969 goto error_autoresume;
1970 }
1971 result = usb_get_device_descriptor(usb_dev, sizeof(usb_dev->descriptor));
1972 if (result < 0) {
1973 dev_err(&usb_dev->dev, "can't re-read device descriptor for "
1974 "authorization: %d\n", result);
1975 goto error_device_descriptor;
1976 }
1977
1978 kfree(usb_dev->product);
1979 usb_dev->product = NULL;
1980 kfree(usb_dev->manufacturer);
1981 usb_dev->manufacturer = NULL;
1982 kfree(usb_dev->serial);
1983 usb_dev->serial = NULL;
1984
1985 usb_dev->authorized = 1;
1986 result = usb_enumerate_device(usb_dev);
1987 if (result < 0)
1988 goto error_enumerate;
1989
1990
1991
1992 c = usb_choose_configuration(usb_dev);
1993 if (c >= 0) {
1994 result = usb_set_configuration(usb_dev, c);
1995 if (result) {
1996 dev_err(&usb_dev->dev,
1997 "can't set config #%d, error %d\n", c, result);
1998
1999
2000 }
2001 }
2002 dev_info(&usb_dev->dev, "authorized to connect\n");
2003
2004error_enumerate:
2005error_device_descriptor:
2006 usb_autosuspend_device(usb_dev);
2007error_autoresume:
2008out_authorized:
2009 usb_unlock_device(usb_dev);
2010 return result;
2011}
2012
2013
2014
2015static unsigned hub_is_wusb(struct usb_hub *hub)
2016{
2017 struct usb_hcd *hcd;
2018 if (hub->hdev->parent != NULL)
2019 return 0;
2020 hcd = container_of(hub->hdev->bus, struct usb_hcd, self);
2021 return hcd->wireless;
2022}
2023
2024
2025#define PORT_RESET_TRIES 5
2026#define SET_ADDRESS_TRIES 2
2027#define GET_DESCRIPTOR_TRIES 2
2028#define SET_CONFIG_TRIES (2 * (use_both_schemes + 1))
2029#define USE_NEW_SCHEME(i) ((i) / 2 == old_scheme_first)
2030
2031#define HUB_ROOT_RESET_TIME 50
2032#define HUB_SHORT_RESET_TIME 10
2033#define HUB_LONG_RESET_TIME 200
2034#define HUB_RESET_TIMEOUT 500
2035
2036static int hub_port_wait_reset(struct usb_hub *hub, int port1,
2037 struct usb_device *udev, unsigned int delay)
2038{
2039 int delay_time, ret;
2040 u16 portstatus;
2041 u16 portchange;
2042
2043 for (delay_time = 0;
2044 delay_time < HUB_RESET_TIMEOUT;
2045 delay_time += delay) {
2046
2047 msleep(delay);
2048
2049
2050 ret = hub_port_status(hub, port1, &portstatus, &portchange);
2051 if (ret < 0)
2052 return ret;
2053
2054
2055 if (!(portstatus & USB_PORT_STAT_CONNECTION))
2056 return -ENOTCONN;
2057
2058
2059 if ((portchange & USB_PORT_STAT_C_CONNECTION))
2060 return -ENOTCONN;
2061
2062
2063 if (!(portstatus & USB_PORT_STAT_RESET) &&
2064 (portstatus & USB_PORT_STAT_ENABLE)) {
2065 if (hub_is_wusb(hub))
2066 udev->speed = USB_SPEED_WIRELESS;
2067 else if (hub_is_superspeed(hub->hdev))
2068 udev->speed = USB_SPEED_SUPER;
2069 else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
2070 udev->speed = USB_SPEED_HIGH;
2071 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
2072 udev->speed = USB_SPEED_LOW;
2073 else
2074 udev->speed = USB_SPEED_FULL;
2075 return 0;
2076 }
2077
2078
2079 if (delay_time >= 2 * HUB_SHORT_RESET_TIME)
2080 delay = HUB_LONG_RESET_TIME;
2081
2082 dev_dbg (hub->intfdev,
2083 "port %d not reset yet, waiting %dms\n",
2084 port1, delay);
2085 }
2086
2087 return -EBUSY;
2088}
2089
2090static int hub_port_reset(struct usb_hub *hub, int port1,
2091 struct usb_device *udev, unsigned int delay)
2092{
2093 int i, status;
2094 struct usb_hcd *hcd;
2095
2096 hcd = bus_to_hcd(udev->bus);
2097
2098
2099
2100 down_read(&ehci_cf_port_reset_rwsem);
2101
2102
2103 for (i = 0; i < PORT_RESET_TRIES; i++) {
2104 status = set_port_feature(hub->hdev,
2105 port1, USB_PORT_FEAT_RESET);
2106 if (status)
2107 dev_err(hub->intfdev,
2108 "cannot reset port %d (err = %d)\n",
2109 port1, status);
2110 else {
2111 status = hub_port_wait_reset(hub, port1, udev, delay);
2112 if (status && status != -ENOTCONN)
2113 dev_dbg(hub->intfdev,
2114 "port_wait_reset: err = %d\n",
2115 status);
2116 }
2117
2118
2119 switch (status) {
2120 case 0:
2121
2122 msleep(10 + 40);
2123 update_devnum(udev, 0);
2124 if (hcd->driver->reset_device) {
2125 status = hcd->driver->reset_device(hcd, udev);
2126 if (status < 0) {
2127 dev_err(&udev->dev, "Cannot reset "
2128 "HCD device state\n");
2129 break;
2130 }
2131 }
2132
2133 case -ENOTCONN:
2134 case -ENODEV:
2135 clear_port_feature(hub->hdev,
2136 port1, USB_PORT_FEAT_C_RESET);
2137
2138 usb_set_device_state(udev, status
2139 ? USB_STATE_NOTATTACHED
2140 : USB_STATE_DEFAULT);
2141 goto done;
2142 }
2143
2144 dev_dbg (hub->intfdev,
2145 "port %d not enabled, trying reset again...\n",
2146 port1);
2147 delay = HUB_LONG_RESET_TIME;
2148 }
2149
2150 dev_err (hub->intfdev,
2151 "Cannot enable port %i. Maybe the USB cable is bad?\n",
2152 port1);
2153
2154 done:
2155 up_read(&ehci_cf_port_reset_rwsem);
2156 return status;
2157}
2158
2159
2160static int hub_port_warm_reset(struct usb_hub *hub, int port)
2161{
2162 int ret;
2163 u16 portstatus, portchange;
2164
2165 if (!hub_is_superspeed(hub->hdev)) {
2166 dev_err(hub->intfdev, "only USB3 hub support warm reset\n");
2167 return -EINVAL;
2168 }
2169
2170
2171 ret = set_port_feature(hub->hdev,
2172 port, USB_PORT_FEAT_BH_PORT_RESET);
2173 if (ret) {
2174 dev_err(hub->intfdev, "cannot warm reset port %d\n", port);
2175 return ret;
2176 }
2177
2178 msleep(20);
2179 ret = hub_port_status(hub, port, &portstatus, &portchange);
2180
2181 if (portchange & USB_PORT_STAT_C_RESET)
2182 clear_port_feature(hub->hdev, port, USB_PORT_FEAT_C_RESET);
2183
2184 if (portchange & USB_PORT_STAT_C_BH_RESET)
2185 clear_port_feature(hub->hdev, port,
2186 USB_PORT_FEAT_C_BH_PORT_RESET);
2187
2188 if (portchange & USB_PORT_STAT_C_LINK_STATE)
2189 clear_port_feature(hub->hdev, port,
2190 USB_PORT_FEAT_C_PORT_LINK_STATE);
2191
2192 return ret;
2193}
2194
2195
2196static int port_is_power_on(struct usb_hub *hub, unsigned portstatus)
2197{
2198 int ret = 0;
2199
2200 if (hub_is_superspeed(hub->hdev)) {
2201 if (portstatus & USB_SS_PORT_STAT_POWER)
2202 ret = 1;
2203 } else {
2204 if (portstatus & USB_PORT_STAT_POWER)
2205 ret = 1;
2206 }
2207
2208 return ret;
2209}
2210
2211#ifdef CONFIG_PM
2212
2213
2214static int port_is_suspended(struct usb_hub *hub, unsigned portstatus)
2215{
2216 int ret = 0;
2217
2218 if (hub_is_superspeed(hub->hdev)) {
2219 if ((portstatus & USB_PORT_STAT_LINK_STATE)
2220 == USB_SS_PORT_LS_U3)
2221 ret = 1;
2222 } else {
2223 if (portstatus & USB_PORT_STAT_SUSPEND)
2224 ret = 1;
2225 }
2226
2227 return ret;
2228}
2229
2230
2231
2232
2233static int check_port_resume_type(struct usb_device *udev,
2234 struct usb_hub *hub, int port1,
2235 int status, unsigned portchange, unsigned portstatus)
2236{
2237
2238 if (status || port_is_suspended(hub, portstatus) ||
2239 !port_is_power_on(hub, portstatus) ||
2240 !(portstatus & USB_PORT_STAT_CONNECTION)) {
2241 if (status >= 0)
2242 status = -ENODEV;
2243 }
2244
2245
2246
2247
2248 else if (!(portstatus & USB_PORT_STAT_ENABLE) && !udev->reset_resume) {
2249 if (udev->persist_enabled)
2250 udev->reset_resume = 1;
2251 else
2252 status = -ENODEV;
2253 }
2254
2255 if (status) {
2256 dev_dbg(hub->intfdev,
2257 "port %d status %04x.%04x after resume, %d\n",
2258 port1, portchange, portstatus, status);
2259 } else if (udev->reset_resume) {
2260
2261
2262 if (portchange & USB_PORT_STAT_C_CONNECTION)
2263 clear_port_feature(hub->hdev, port1,
2264 USB_PORT_FEAT_C_CONNECTION);
2265 if (portchange & USB_PORT_STAT_C_ENABLE)
2266 clear_port_feature(hub->hdev, port1,
2267 USB_PORT_FEAT_C_ENABLE);
2268 }
2269
2270 return status;
2271}
2272
2273#ifdef CONFIG_USB_SUSPEND
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
2322{
2323 struct usb_hub *hub = hdev_to_hub(udev->parent);
2324 int port1 = udev->portnum;
2325 int status;
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335 if (udev->do_remote_wakeup) {
2336 status = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2337 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
2338 USB_DEVICE_REMOTE_WAKEUP, 0,
2339 NULL, 0,
2340 USB_CTRL_SET_TIMEOUT);
2341 if (status) {
2342 dev_dbg(&udev->dev, "won't remote wakeup, status %d\n",
2343 status);
2344
2345 if (msg.event & PM_EVENT_AUTO)
2346 return status;
2347 }
2348 }
2349
2350
2351 if (hub_is_superspeed(hub->hdev))
2352 status = set_port_feature(hub->hdev,
2353 port1 | (USB_SS_PORT_LS_U3 << 3),
2354 USB_PORT_FEAT_LINK_STATE);
2355 else
2356 status = set_port_feature(hub->hdev, port1,
2357 USB_PORT_FEAT_SUSPEND);
2358 if (status) {
2359 dev_dbg(hub->intfdev, "can't suspend port %d, status %d\n",
2360 port1, status);
2361
2362 if (udev->do_remote_wakeup)
2363 (void) usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2364 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
2365 USB_DEVICE_REMOTE_WAKEUP, 0,
2366 NULL, 0,
2367 USB_CTRL_SET_TIMEOUT);
2368
2369
2370 if (!(msg.event & PM_EVENT_AUTO))
2371 status = 0;
2372 } else {
2373
2374 dev_dbg(&udev->dev, "usb %ssuspend\n",
2375 (msg.event & PM_EVENT_AUTO ? "auto-" : ""));
2376 usb_set_device_state(udev, USB_STATE_SUSPENDED);
2377 msleep(10);
2378 }
2379 usb_mark_last_busy(hub->hdev);
2380 return status;
2381}
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394static int finish_port_resume(struct usb_device *udev)
2395{
2396 int status = 0;
2397 u16 devstatus;
2398
2399
2400 dev_dbg(&udev->dev, "%s\n",
2401 udev->reset_resume ? "finish reset-resume" : "finish resume");
2402
2403
2404
2405
2406
2407
2408 usb_set_device_state(udev, udev->actconfig
2409 ? USB_STATE_CONFIGURED
2410 : USB_STATE_ADDRESS);
2411
2412
2413
2414
2415
2416
2417 if (udev->reset_resume)
2418 retry_reset_resume:
2419 status = usb_reset_and_verify_device(udev);
2420
2421
2422
2423
2424
2425 if (status == 0) {
2426 devstatus = 0;
2427 status = usb_get_status(udev, USB_RECIP_DEVICE, 0, &devstatus);
2428 if (status >= 0)
2429 status = (status > 0 ? 0 : -ENODEV);
2430
2431
2432 if (status && !udev->reset_resume && udev->persist_enabled) {
2433 dev_dbg(&udev->dev, "retry with reset-resume\n");
2434 udev->reset_resume = 1;
2435 goto retry_reset_resume;
2436 }
2437 }
2438
2439 if (status) {
2440 dev_dbg(&udev->dev, "gone after usb resume? status %d\n",
2441 status);
2442 } else if (udev->actconfig) {
2443 le16_to_cpus(&devstatus);
2444 if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) {
2445 status = usb_control_msg(udev,
2446 usb_sndctrlpipe(udev, 0),
2447 USB_REQ_CLEAR_FEATURE,
2448 USB_RECIP_DEVICE,
2449 USB_DEVICE_REMOTE_WAKEUP, 0,
2450 NULL, 0,
2451 USB_CTRL_SET_TIMEOUT);
2452 if (status)
2453 dev_dbg(&udev->dev,
2454 "disable remote wakeup, status %d\n",
2455 status);
2456 }
2457 status = 0;
2458 }
2459 return status;
2460}
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496int usb_port_resume(struct usb_device *udev, pm_message_t msg)
2497{
2498 struct usb_hub *hub = hdev_to_hub(udev->parent);
2499 int port1 = udev->portnum;
2500 int status;
2501 u16 portchange, portstatus;
2502
2503
2504 status = hub_port_status(hub, port1, &portstatus, &portchange);
2505 if (status == 0 && !port_is_suspended(hub, portstatus))
2506 goto SuspendCleared;
2507
2508
2509
2510 set_bit(port1, hub->busy_bits);
2511
2512
2513 if (hub_is_superspeed(hub->hdev))
2514 status = set_port_feature(hub->hdev,
2515 port1 | (USB_SS_PORT_LS_U0 << 3),
2516 USB_PORT_FEAT_LINK_STATE);
2517 else
2518 status = clear_port_feature(hub->hdev,
2519 port1, USB_PORT_FEAT_SUSPEND);
2520 if (status) {
2521 dev_dbg(hub->intfdev, "can't resume port %d, status %d\n",
2522 port1, status);
2523 } else {
2524
2525 dev_dbg(&udev->dev, "usb %sresume\n",
2526 (msg.event & PM_EVENT_AUTO ? "auto-" : ""));
2527 msleep(25);
2528
2529
2530
2531
2532
2533 status = hub_port_status(hub, port1, &portstatus, &portchange);
2534
2535
2536 msleep(10);
2537 }
2538
2539 SuspendCleared:
2540 if (status == 0) {
2541 if (hub_is_superspeed(hub->hdev)) {
2542 if (portchange & USB_PORT_STAT_C_LINK_STATE)
2543 clear_port_feature(hub->hdev, port1,
2544 USB_PORT_FEAT_C_PORT_LINK_STATE);
2545 } else {
2546 if (portchange & USB_PORT_STAT_C_SUSPEND)
2547 clear_port_feature(hub->hdev, port1,
2548 USB_PORT_FEAT_C_SUSPEND);
2549 }
2550 }
2551
2552 clear_bit(port1, hub->busy_bits);
2553
2554 status = check_port_resume_type(udev,
2555 hub, port1, status, portchange, portstatus);
2556 if (status == 0)
2557 status = finish_port_resume(udev);
2558 if (status < 0) {
2559 dev_dbg(&udev->dev, "can't resume, status %d\n", status);
2560 hub_port_logical_disconnect(hub, port1);
2561 }
2562 return status;
2563}
2564
2565
2566int usb_remote_wakeup(struct usb_device *udev)
2567{
2568 int status = 0;
2569
2570 if (udev->state == USB_STATE_SUSPENDED) {
2571 dev_dbg(&udev->dev, "usb %sresume\n", "wakeup-");
2572 status = usb_autoresume_device(udev);
2573 if (status == 0) {
2574
2575 usb_autosuspend_device(udev);
2576 }
2577 }
2578 return status;
2579}
2580
2581#else
2582
2583
2584
2585int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
2586{
2587 return 0;
2588}
2589
2590
2591
2592int usb_port_resume(struct usb_device *udev, pm_message_t msg)
2593{
2594 struct usb_hub *hub = hdev_to_hub(udev->parent);
2595 int port1 = udev->portnum;
2596 int status;
2597 u16 portchange, portstatus;
2598
2599 status = hub_port_status(hub, port1, &portstatus, &portchange);
2600 status = check_port_resume_type(udev,
2601 hub, port1, status, portchange, portstatus);
2602
2603 if (status) {
2604 dev_dbg(&udev->dev, "can't resume, status %d\n", status);
2605 hub_port_logical_disconnect(hub, port1);
2606 } else if (udev->reset_resume) {
2607 dev_dbg(&udev->dev, "reset-resume\n");
2608 status = usb_reset_and_verify_device(udev);
2609 }
2610 return status;
2611}
2612
2613#endif
2614
2615static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
2616{
2617 struct usb_hub *hub = usb_get_intfdata (intf);
2618 struct usb_device *hdev = hub->hdev;
2619 unsigned port1;
2620
2621
2622 for (port1 = 1; port1 <= hdev->maxchild; port1++) {
2623 struct usb_device *udev;
2624
2625 udev = hdev->children [port1-1];
2626 if (udev && udev->can_submit) {
2627 dev_warn(&intf->dev, "port %d nyet suspended\n", port1);
2628 if (msg.event & PM_EVENT_AUTO)
2629 return -EBUSY;
2630 }
2631 }
2632
2633 dev_dbg(&intf->dev, "%s\n", __func__);
2634
2635
2636 hub_quiesce(hub, HUB_SUSPEND);
2637 return 0;
2638}
2639
2640static int hub_resume(struct usb_interface *intf)
2641{
2642 struct usb_hub *hub = usb_get_intfdata(intf);
2643
2644 dev_dbg(&intf->dev, "%s\n", __func__);
2645 hub_activate(hub, HUB_RESUME);
2646 return 0;
2647}
2648
2649static int hub_reset_resume(struct usb_interface *intf)
2650{
2651 struct usb_hub *hub = usb_get_intfdata(intf);
2652
2653 dev_dbg(&intf->dev, "%s\n", __func__);
2654 hub_activate(hub, HUB_RESET_RESUME);
2655 return 0;
2656}
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669void usb_root_hub_lost_power(struct usb_device *rhdev)
2670{
2671 dev_warn(&rhdev->dev, "root hub lost power or was reset\n");
2672 rhdev->reset_resume = 1;
2673}
2674EXPORT_SYMBOL_GPL(usb_root_hub_lost_power);
2675
2676#else
2677
2678#define hub_suspend NULL
2679#define hub_resume NULL
2680#define hub_reset_resume NULL
2681#endif
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699static int hub_port_debounce(struct usb_hub *hub, int port1)
2700{
2701 int ret;
2702 int total_time, stable_time = 0;
2703 u16 portchange, portstatus;
2704 unsigned connection = 0xffff;
2705
2706 for (total_time = 0; ; total_time += HUB_DEBOUNCE_STEP) {
2707 ret = hub_port_status(hub, port1, &portstatus, &portchange);
2708 if (ret < 0)
2709 return ret;
2710
2711 if (!(portchange & USB_PORT_STAT_C_CONNECTION) &&
2712 (portstatus & USB_PORT_STAT_CONNECTION) == connection) {
2713 stable_time += HUB_DEBOUNCE_STEP;
2714 if (stable_time >= HUB_DEBOUNCE_STABLE)
2715 break;
2716 } else {
2717 stable_time = 0;
2718 connection = portstatus & USB_PORT_STAT_CONNECTION;
2719 }
2720
2721 if (portchange & USB_PORT_STAT_C_CONNECTION) {
2722 clear_port_feature(hub->hdev, port1,
2723 USB_PORT_FEAT_C_CONNECTION);
2724 }
2725
2726 if (total_time >= HUB_DEBOUNCE_TIMEOUT)
2727 break;
2728 msleep(HUB_DEBOUNCE_STEP);
2729 }
2730
2731 dev_dbg (hub->intfdev,
2732 "debounce: port %d: total %dms stable %dms status 0x%x\n",
2733 port1, total_time, stable_time, portstatus);
2734
2735 if (stable_time < HUB_DEBOUNCE_STABLE)
2736 return -ETIMEDOUT;
2737 return portstatus;
2738}
2739
2740void usb_ep0_reinit(struct usb_device *udev)
2741{
2742 usb_disable_endpoint(udev, 0 + USB_DIR_IN, true);
2743 usb_disable_endpoint(udev, 0 + USB_DIR_OUT, true);
2744 usb_enable_endpoint(udev, &udev->ep0, true);
2745}
2746EXPORT_SYMBOL_GPL(usb_ep0_reinit);
2747
2748#define usb_sndaddr0pipe() (PIPE_CONTROL << 30)
2749#define usb_rcvaddr0pipe() ((PIPE_CONTROL << 30) | USB_DIR_IN)
2750
2751static int hub_set_address(struct usb_device *udev, int devnum)
2752{
2753 int retval;
2754 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2755
2756
2757
2758
2759
2760 if (!hcd->driver->address_device && devnum <= 1)
2761 return -EINVAL;
2762 if (udev->state == USB_STATE_ADDRESS)
2763 return 0;
2764 if (udev->state != USB_STATE_DEFAULT)
2765 return -EINVAL;
2766 if (hcd->driver->address_device)
2767 retval = hcd->driver->address_device(hcd, udev);
2768 else
2769 retval = usb_control_msg(udev, usb_sndaddr0pipe(),
2770 USB_REQ_SET_ADDRESS, 0, devnum, 0,
2771 NULL, 0, USB_CTRL_SET_TIMEOUT);
2772 if (retval == 0) {
2773 update_devnum(udev, devnum);
2774
2775 usb_set_device_state(udev, USB_STATE_ADDRESS);
2776 usb_ep0_reinit(udev);
2777 }
2778 return retval;
2779}
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790static int
2791hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
2792 int retry_counter)
2793{
2794 static DEFINE_MUTEX(usb_address0_mutex);
2795
2796 struct usb_device *hdev = hub->hdev;
2797 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
2798 int i, j, retval;
2799 unsigned delay = HUB_SHORT_RESET_TIME;
2800 enum usb_device_speed oldspeed = udev->speed;
2801 char *speed, *type;
2802 int devnum = udev->devnum;
2803
2804
2805
2806
2807 if (!hdev->parent) {
2808 delay = HUB_ROOT_RESET_TIME;
2809 if (port1 == hdev->bus->otg_port)
2810 hdev->bus->b_hnp_enable = 0;
2811 }
2812
2813
2814
2815 if (oldspeed == USB_SPEED_LOW)
2816 delay = HUB_LONG_RESET_TIME;
2817
2818 mutex_lock(&usb_address0_mutex);
2819
2820
2821
2822 retval = hub_port_reset(hub, port1, udev, delay);
2823 if (retval < 0)
2824 goto fail;
2825
2826
2827 retval = -ENODEV;
2828
2829 if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed) {
2830 dev_dbg(&udev->dev, "device reset changed speed!\n");
2831 goto fail;
2832 }
2833 oldspeed = udev->speed;
2834
2835
2836
2837
2838
2839
2840 switch (udev->speed) {
2841 case USB_SPEED_SUPER:
2842 case USB_SPEED_WIRELESS:
2843 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(512);
2844 break;
2845 case USB_SPEED_HIGH:
2846 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
2847 break;
2848 case USB_SPEED_FULL:
2849
2850
2851
2852
2853 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
2854 break;
2855 case USB_SPEED_LOW:
2856 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(8);
2857 break;
2858 default:
2859 goto fail;
2860 }
2861
2862 type = "";
2863 switch (udev->speed) {
2864 case USB_SPEED_LOW: speed = "low"; break;
2865 case USB_SPEED_FULL: speed = "full"; break;
2866 case USB_SPEED_HIGH: speed = "high"; break;
2867 case USB_SPEED_SUPER:
2868 speed = "super";
2869 break;
2870 case USB_SPEED_WIRELESS:
2871 speed = "variable";
2872 type = "Wireless ";
2873 break;
2874 default: speed = "?"; break;
2875 }
2876 if (udev->speed != USB_SPEED_SUPER)
2877 dev_info(&udev->dev,
2878 "%s %s speed %sUSB device number %d using %s\n",
2879 (udev->config) ? "reset" : "new", speed, type,
2880 devnum, udev->bus->controller->driver->name);
2881
2882
2883 if (hdev->tt) {
2884 udev->tt = hdev->tt;
2885 udev->ttport = hdev->ttport;
2886 } else if (udev->speed != USB_SPEED_HIGH
2887 && hdev->speed == USB_SPEED_HIGH) {
2888 if (!hub->tt.hub) {
2889 dev_err(&udev->dev, "parent hub has no TT\n");
2890 retval = -EINVAL;
2891 goto fail;
2892 }
2893 udev->tt = &hub->tt;
2894 udev->ttport = port1;
2895 }
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909 for (i = 0; i < GET_DESCRIPTOR_TRIES; (++i, msleep(100))) {
2910 if (USE_NEW_SCHEME(retry_counter) && !(hcd->driver->flags & HCD_USB3)) {
2911 struct usb_device_descriptor *buf;
2912 int r = 0;
2913
2914#define GET_DESCRIPTOR_BUFSIZE 64
2915 buf = kmalloc(GET_DESCRIPTOR_BUFSIZE, GFP_NOIO);
2916 if (!buf) {
2917 retval = -ENOMEM;
2918 continue;
2919 }
2920
2921
2922
2923
2924
2925 for (j = 0; j < 3; ++j) {
2926 buf->bMaxPacketSize0 = 0;
2927 r = usb_control_msg(udev, usb_rcvaddr0pipe(),
2928 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
2929 USB_DT_DEVICE << 8, 0,
2930 buf, GET_DESCRIPTOR_BUFSIZE,
2931 initial_descriptor_timeout);
2932 switch (buf->bMaxPacketSize0) {
2933 case 8: case 16: case 32: case 64: case 255:
2934 if (buf->bDescriptorType ==
2935 USB_DT_DEVICE) {
2936 r = 0;
2937 break;
2938 }
2939
2940 default:
2941 if (r == 0)
2942 r = -EPROTO;
2943 break;
2944 }
2945 if (r == 0)
2946 break;
2947 }
2948 udev->descriptor.bMaxPacketSize0 =
2949 buf->bMaxPacketSize0;
2950 kfree(buf);
2951
2952 retval = hub_port_reset(hub, port1, udev, delay);
2953 if (retval < 0)
2954 goto fail;
2955 if (oldspeed != udev->speed) {
2956 dev_dbg(&udev->dev,
2957 "device reset changed speed!\n");
2958 retval = -ENODEV;
2959 goto fail;
2960 }
2961 if (r) {
2962 dev_err(&udev->dev,
2963 "device descriptor read/64, error %d\n",
2964 r);
2965 retval = -EMSGSIZE;
2966 continue;
2967 }
2968#undef GET_DESCRIPTOR_BUFSIZE
2969 }
2970
2971
2972
2973
2974
2975
2976 if (udev->wusb == 0) {
2977 for (j = 0; j < SET_ADDRESS_TRIES; ++j) {
2978 retval = hub_set_address(udev, devnum);
2979 if (retval >= 0)
2980 break;
2981 msleep(200);
2982 }
2983 if (retval < 0) {
2984 dev_err(&udev->dev,
2985 "device not accepting address %d, error %d\n",
2986 devnum, retval);
2987 goto fail;
2988 }
2989 if (udev->speed == USB_SPEED_SUPER) {
2990 devnum = udev->devnum;
2991 dev_info(&udev->dev,
2992 "%s SuperSpeed USB device number %d using %s\n",
2993 (udev->config) ? "reset" : "new",
2994 devnum, udev->bus->controller->driver->name);
2995 }
2996
2997
2998
2999
3000
3001 msleep(10);
3002 if (USE_NEW_SCHEME(retry_counter) && !(hcd->driver->flags & HCD_USB3))
3003 break;
3004 }
3005
3006 retval = usb_get_device_descriptor(udev, 8);
3007 if (retval < 8) {
3008 dev_err(&udev->dev,
3009 "device descriptor read/8, error %d\n",
3010 retval);
3011 if (retval >= 0)
3012 retval = -EMSGSIZE;
3013 } else {
3014 retval = 0;
3015 break;
3016 }
3017 }
3018 if (retval)
3019 goto fail;
3020
3021 if (udev->descriptor.bMaxPacketSize0 == 0xff ||
3022 udev->speed == USB_SPEED_SUPER)
3023 i = 512;
3024 else
3025 i = udev->descriptor.bMaxPacketSize0;
3026 if (le16_to_cpu(udev->ep0.desc.wMaxPacketSize) != i) {
3027 if (udev->speed == USB_SPEED_LOW ||
3028 !(i == 8 || i == 16 || i == 32 || i == 64)) {
3029 dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", i);
3030 retval = -EMSGSIZE;
3031 goto fail;
3032 }
3033 if (udev->speed == USB_SPEED_FULL)
3034 dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
3035 else
3036 dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i);
3037 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i);
3038 usb_ep0_reinit(udev);
3039 }
3040
3041 retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
3042 if (retval < (signed)sizeof(udev->descriptor)) {
3043 dev_err(&udev->dev, "device descriptor read/all, error %d\n",
3044 retval);
3045 if (retval >= 0)
3046 retval = -ENOMSG;
3047 goto fail;
3048 }
3049
3050 retval = 0;
3051
3052 if (hcd->driver->update_device)
3053 hcd->driver->update_device(hcd, udev);
3054fail:
3055 if (retval) {
3056 hub_port_disable(hub, port1, 0);
3057 update_devnum(udev, devnum);
3058 }
3059 mutex_unlock(&usb_address0_mutex);
3060 return retval;
3061}
3062
3063static void
3064check_highspeed (struct usb_hub *hub, struct usb_device *udev, int port1)
3065{
3066 struct usb_qualifier_descriptor *qual;
3067 int status;
3068
3069 qual = kmalloc (sizeof *qual, GFP_KERNEL);
3070 if (qual == NULL)
3071 return;
3072
3073 status = usb_get_descriptor (udev, USB_DT_DEVICE_QUALIFIER, 0,
3074 qual, sizeof *qual);
3075 if (status == sizeof *qual) {
3076 dev_info(&udev->dev, "not running at top speed; "
3077 "connect to a high speed hub\n");
3078
3079 if (hub->has_indicators) {
3080 hub->indicator[port1-1] = INDICATOR_GREEN_BLINK;
3081 schedule_delayed_work (&hub->leds, 0);
3082 }
3083 }
3084 kfree(qual);
3085}
3086
3087static unsigned
3088hub_power_remaining (struct usb_hub *hub)
3089{
3090 struct usb_device *hdev = hub->hdev;
3091 int remaining;
3092 int port1;
3093
3094 if (!hub->limited_power)
3095 return 0;
3096
3097 remaining = hdev->bus_mA - hub->descriptor->bHubContrCurrent;
3098 for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
3099 struct usb_device *udev = hdev->children[port1 - 1];
3100 int delta;
3101
3102 if (!udev)
3103 continue;
3104
3105
3106
3107 if (udev->actconfig)
3108 delta = udev->actconfig->desc.bMaxPower * 2;
3109 else if (port1 != udev->bus->otg_port || hdev->parent)
3110 delta = 100;
3111 else
3112 delta = 8;
3113 if (delta > hub->mA_per_port)
3114 dev_warn(&udev->dev,
3115 "%dmA is over %umA budget for port %d!\n",
3116 delta, hub->mA_per_port, port1);
3117 remaining -= delta;
3118 }
3119 if (remaining < 0) {
3120 dev_warn(hub->intfdev, "%dmA over power budget!\n",
3121 - remaining);
3122 remaining = 0;
3123 }
3124 return remaining;
3125}
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135static void hub_port_connect_change(struct usb_hub *hub, int port1,
3136 u16 portstatus, u16 portchange)
3137{
3138 struct usb_device *hdev = hub->hdev;
3139 struct device *hub_dev = hub->intfdev;
3140 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
3141 unsigned wHubCharacteristics =
3142 le16_to_cpu(hub->descriptor->wHubCharacteristics);
3143 struct usb_device *udev;
3144 int status, i;
3145
3146 dev_dbg (hub_dev,
3147 "port %d, status %04x, change %04x, %s\n",
3148 port1, portstatus, portchange, portspeed(hub, portstatus));
3149
3150 if (hub->has_indicators) {
3151 set_port_led(hub, port1, HUB_LED_AUTO);
3152 hub->indicator[port1-1] = INDICATOR_AUTO;
3153 }
3154
3155#ifdef CONFIG_USB_OTG
3156
3157 if (hdev->bus->is_b_host)
3158 portchange &= ~(USB_PORT_STAT_C_CONNECTION |
3159 USB_PORT_STAT_C_ENABLE);
3160#endif
3161
3162
3163 udev = hdev->children[port1-1];
3164 if ((portstatus & USB_PORT_STAT_CONNECTION) && udev &&
3165 udev->state != USB_STATE_NOTATTACHED) {
3166 usb_lock_device(udev);
3167 if (portstatus & USB_PORT_STAT_ENABLE) {
3168 status = 0;
3169
3170#ifdef CONFIG_USB_SUSPEND
3171 } else if (udev->state == USB_STATE_SUSPENDED &&
3172 udev->persist_enabled) {
3173
3174
3175
3176 status = usb_remote_wakeup(udev);
3177#endif
3178
3179 } else {
3180 status = -ENODEV;
3181 }
3182 usb_unlock_device(udev);
3183
3184 if (status == 0) {
3185 clear_bit(port1, hub->change_bits);
3186 return;
3187 }
3188 }
3189
3190
3191 if (udev)
3192 usb_disconnect(&hdev->children[port1-1]);
3193 clear_bit(port1, hub->change_bits);
3194
3195
3196
3197
3198 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
3199 (portchange & USB_PORT_STAT_C_CONNECTION))
3200 clear_bit(port1, hub->removed_bits);
3201
3202 if (portchange & (USB_PORT_STAT_C_CONNECTION |
3203 USB_PORT_STAT_C_ENABLE)) {
3204 status = hub_port_debounce(hub, port1);
3205 if (status < 0) {
3206 if (printk_ratelimit())
3207 dev_err(hub_dev, "connect-debounce failed, "
3208 "port %d disabled\n", port1);
3209 portstatus &= ~USB_PORT_STAT_CONNECTION;
3210 } else {
3211 portstatus = status;
3212 }
3213 }
3214
3215
3216
3217
3218 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
3219 test_bit(port1, hub->removed_bits)) {
3220
3221
3222 if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2
3223 && !port_is_power_on(hub, portstatus))
3224 set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
3225
3226 if (portstatus & USB_PORT_STAT_ENABLE)
3227 goto done;
3228 return;
3229 }
3230
3231 for (i = 0; i < SET_CONFIG_TRIES; i++) {
3232
3233
3234
3235
3236 udev = usb_alloc_dev(hdev, hdev->bus, port1);
3237 if (!udev) {
3238 dev_err (hub_dev,
3239 "couldn't allocate port %d usb_device\n",
3240 port1);
3241 goto done;
3242 }
3243
3244 usb_set_device_state(udev, USB_STATE_POWERED);
3245 udev->bus_mA = hub->mA_per_port;
3246 udev->level = hdev->level + 1;
3247 udev->wusb = hub_is_wusb(hub);
3248
3249
3250 if (hub_is_superspeed(hub->hdev))
3251 udev->speed = USB_SPEED_SUPER;
3252 else
3253 udev->speed = USB_SPEED_UNKNOWN;
3254
3255 choose_devnum(udev);
3256 if (udev->devnum <= 0) {
3257 status = -ENOTCONN;
3258 goto loop;
3259 }
3260
3261
3262 status = hub_port_init(hub, udev, port1, i);
3263 if (status < 0)
3264 goto loop;
3265
3266 usb_detect_quirks(udev);
3267 if (udev->quirks & USB_QUIRK_DELAY_INIT)
3268 msleep(1000);
3269
3270
3271
3272
3273
3274
3275
3276 if (udev->descriptor.bDeviceClass == USB_CLASS_HUB
3277 && udev->bus_mA <= 100) {
3278 u16 devstat;
3279
3280 status = usb_get_status(udev, USB_RECIP_DEVICE, 0,
3281 &devstat);
3282 if (status < 2) {
3283 dev_dbg(&udev->dev, "get status %d ?\n", status);
3284 goto loop_disable;
3285 }
3286 le16_to_cpus(&devstat);
3287 if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
3288 dev_err(&udev->dev,
3289 "can't connect bus-powered hub "
3290 "to this port\n");
3291 if (hub->has_indicators) {
3292 hub->indicator[port1-1] =
3293 INDICATOR_AMBER_BLINK;
3294 schedule_delayed_work (&hub->leds, 0);
3295 }
3296 status = -ENOTCONN;
3297 goto loop_disable;
3298 }
3299 }
3300
3301
3302 if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0200
3303 && udev->speed == USB_SPEED_FULL
3304 && highspeed_hubs != 0)
3305 check_highspeed (hub, udev, port1);
3306
3307
3308
3309
3310
3311 status = 0;
3312
3313
3314
3315
3316
3317 spin_lock_irq(&device_state_lock);
3318 if (hdev->state == USB_STATE_NOTATTACHED)
3319 status = -ENOTCONN;
3320 else
3321 hdev->children[port1-1] = udev;
3322 spin_unlock_irq(&device_state_lock);
3323
3324
3325 if (!status) {
3326 status = usb_new_device(udev);
3327 if (status) {
3328 spin_lock_irq(&device_state_lock);
3329 hdev->children[port1-1] = NULL;
3330 spin_unlock_irq(&device_state_lock);
3331 }
3332 }
3333
3334 if (status)
3335 goto loop_disable;
3336
3337 status = hub_power_remaining(hub);
3338 if (status)
3339 dev_dbg(hub_dev, "%dmA power budget left\n", status);
3340
3341 return;
3342
3343loop_disable:
3344 hub_port_disable(hub, port1, 1);
3345loop:
3346 usb_ep0_reinit(udev);
3347 release_devnum(udev);
3348 hub_free_dev(udev);
3349 usb_put_dev(udev);
3350 if ((status == -ENOTCONN) || (status == -ENOTSUPP))
3351 break;
3352 }
3353 if (hub->hdev->parent ||
3354 !hcd->driver->port_handed_over ||
3355 !(hcd->driver->port_handed_over)(hcd, port1))
3356 dev_err(hub_dev, "unable to enumerate USB device on port %d\n",
3357 port1);
3358
3359done:
3360 hub_port_disable(hub, port1, 1);
3361 if (hcd->driver->relinquish_port && !hub->hdev->parent)
3362 hcd->driver->relinquish_port(hcd, port1);
3363}
3364
3365static void hub_events(void)
3366{
3367 struct list_head *tmp;
3368 struct usb_device *hdev;
3369 struct usb_interface *intf;
3370 struct usb_hub *hub;
3371 struct device *hub_dev;
3372 u16 hubstatus;
3373 u16 hubchange;
3374 u16 portstatus;
3375 u16 portchange;
3376 int i, ret;
3377 int connect_change;
3378
3379
3380
3381
3382
3383
3384
3385 while (1) {
3386
3387
3388 spin_lock_irq(&hub_event_lock);
3389 if (list_empty(&hub_event_list)) {
3390 spin_unlock_irq(&hub_event_lock);
3391 break;
3392 }
3393
3394 tmp = hub_event_list.next;
3395 list_del_init(tmp);
3396
3397 hub = list_entry(tmp, struct usb_hub, event_list);
3398 kref_get(&hub->kref);
3399 spin_unlock_irq(&hub_event_lock);
3400
3401 hdev = hub->hdev;
3402 hub_dev = hub->intfdev;
3403 intf = to_usb_interface(hub_dev);
3404 dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
3405 hdev->state, hub->descriptor
3406 ? hub->descriptor->bNbrPorts
3407 : 0,
3408
3409 (u16) hub->change_bits[0],
3410 (u16) hub->event_bits[0]);
3411
3412
3413
3414 usb_lock_device(hdev);
3415 if (unlikely(hub->disconnected))
3416 goto loop_disconnected;
3417
3418
3419 if (hdev->state == USB_STATE_NOTATTACHED) {
3420 hub->error = -ENODEV;
3421 hub_quiesce(hub, HUB_DISCONNECT);
3422 goto loop;
3423 }
3424
3425
3426 ret = usb_autopm_get_interface(intf);
3427 if (ret) {
3428 dev_dbg(hub_dev, "Can't autoresume: %d\n", ret);
3429 goto loop;
3430 }
3431
3432
3433 if (hub->quiescing)
3434 goto loop_autopm;
3435
3436 if (hub->error) {
3437 dev_dbg (hub_dev, "resetting for error %d\n",
3438 hub->error);
3439
3440 ret = usb_reset_device(hdev);
3441 if (ret) {
3442 dev_dbg (hub_dev,
3443 "error resetting hub: %d\n", ret);
3444 goto loop_autopm;
3445 }
3446
3447 hub->nerrors = 0;
3448 hub->error = 0;
3449 }
3450
3451
3452 for (i = 1; i <= hub->descriptor->bNbrPorts; i++) {
3453 if (test_bit(i, hub->busy_bits))
3454 continue;
3455 connect_change = test_bit(i, hub->change_bits);
3456 if (!test_and_clear_bit(i, hub->event_bits) &&
3457 !connect_change)
3458 continue;
3459
3460 ret = hub_port_status(hub, i,
3461 &portstatus, &portchange);
3462 if (ret < 0)
3463 continue;
3464
3465 if (portchange & USB_PORT_STAT_C_CONNECTION) {
3466 clear_port_feature(hdev, i,
3467 USB_PORT_FEAT_C_CONNECTION);
3468 connect_change = 1;
3469 }
3470
3471 if (portchange & USB_PORT_STAT_C_ENABLE) {
3472 if (!connect_change)
3473 dev_dbg (hub_dev,
3474 "port %d enable change, "
3475 "status %08x\n",
3476 i, portstatus);
3477 clear_port_feature(hdev, i,
3478 USB_PORT_FEAT_C_ENABLE);
3479
3480
3481
3482
3483
3484
3485
3486 if (!(portstatus & USB_PORT_STAT_ENABLE)
3487 && !connect_change
3488 && hdev->children[i-1]) {
3489 dev_err (hub_dev,
3490 "port %i "
3491 "disabled by hub (EMI?), "
3492 "re-enabling...\n",
3493 i);
3494 connect_change = 1;
3495 }
3496 }
3497
3498 if (portchange & USB_PORT_STAT_C_SUSPEND) {
3499 struct usb_device *udev;
3500
3501 clear_port_feature(hdev, i,
3502 USB_PORT_FEAT_C_SUSPEND);
3503 udev = hdev->children[i-1];
3504 if (udev) {
3505
3506 msleep(10);
3507
3508 usb_lock_device(udev);
3509 ret = usb_remote_wakeup(hdev->
3510 children[i-1]);
3511 usb_unlock_device(udev);
3512 if (ret < 0)
3513 connect_change = 1;
3514 } else {
3515 ret = -ENODEV;
3516 hub_port_disable(hub, i, 1);
3517 }
3518 dev_dbg (hub_dev,
3519 "resume on port %d, status %d\n",
3520 i, ret);
3521 }
3522
3523 if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
3524 u16 status = 0;
3525 u16 unused;
3526
3527 dev_dbg(hub_dev, "over-current change on port "
3528 "%d\n", i);
3529 clear_port_feature(hdev, i,
3530 USB_PORT_FEAT_C_OVER_CURRENT);
3531 msleep(100);
3532 hub_power_on(hub, true);
3533 hub_port_status(hub, i, &status, &unused);
3534 if (status & USB_PORT_STAT_OVERCURRENT)
3535 dev_err(hub_dev, "over-current "
3536 "condition on port %d\n", i);
3537 }
3538
3539 if (portchange & USB_PORT_STAT_C_RESET) {
3540 dev_dbg (hub_dev,
3541 "reset change on port %d\n",
3542 i);
3543 clear_port_feature(hdev, i,
3544 USB_PORT_FEAT_C_RESET);
3545 }
3546 if ((portchange & USB_PORT_STAT_C_BH_RESET) &&
3547 hub_is_superspeed(hub->hdev)) {
3548 dev_dbg(hub_dev,
3549 "warm reset change on port %d\n",
3550 i);
3551 clear_port_feature(hdev, i,
3552 USB_PORT_FEAT_C_BH_PORT_RESET);
3553 }
3554 if (portchange & USB_PORT_STAT_C_LINK_STATE) {
3555 clear_port_feature(hub->hdev, i,
3556 USB_PORT_FEAT_C_PORT_LINK_STATE);
3557 }
3558 if (portchange & USB_PORT_STAT_C_CONFIG_ERROR) {
3559 dev_warn(hub_dev,
3560 "config error on port %d\n",
3561 i);
3562 clear_port_feature(hub->hdev, i,
3563 USB_PORT_FEAT_C_PORT_CONFIG_ERROR);
3564 }
3565
3566
3567
3568
3569 if (hub_is_superspeed(hub->hdev) &&
3570 (portstatus & USB_PORT_STAT_LINK_STATE)
3571 == USB_SS_PORT_LS_SS_INACTIVE) {
3572 dev_dbg(hub_dev, "warm reset port %d\n", i);
3573 hub_port_warm_reset(hub, i);
3574 }
3575
3576 if (connect_change)
3577 hub_port_connect_change(hub, i,
3578 portstatus, portchange);
3579 }
3580
3581
3582 if (test_and_clear_bit(0, hub->event_bits) == 0)
3583 ;
3584 else if (hub_hub_status(hub, &hubstatus, &hubchange) < 0)
3585 dev_err (hub_dev, "get_hub_status failed\n");
3586 else {
3587 if (hubchange & HUB_CHANGE_LOCAL_POWER) {
3588 dev_dbg (hub_dev, "power change\n");
3589 clear_hub_feature(hdev, C_HUB_LOCAL_POWER);
3590 if (hubstatus & HUB_STATUS_LOCAL_POWER)
3591
3592 hub->limited_power = 1;
3593 else
3594 hub->limited_power = 0;
3595 }
3596 if (hubchange & HUB_CHANGE_OVERCURRENT) {
3597 u16 status = 0;
3598 u16 unused;
3599
3600 dev_dbg(hub_dev, "over-current change\n");
3601 clear_hub_feature(hdev, C_HUB_OVER_CURRENT);
3602 msleep(500);
3603 hub_power_on(hub, true);
3604 hub_hub_status(hub, &status, &unused);
3605 if (status & HUB_STATUS_OVERCURRENT)
3606 dev_err(hub_dev, "over-current "
3607 "condition\n");
3608 }
3609 }
3610
3611 loop_autopm:
3612
3613 usb_autopm_put_interface_no_suspend(intf);
3614 loop:
3615
3616
3617
3618 usb_autopm_put_interface(intf);
3619 loop_disconnected:
3620 usb_unlock_device(hdev);
3621 kref_put(&hub->kref, hub_release);
3622
3623 }
3624}
3625
3626static int hub_thread(void *__unused)
3627{
3628
3629
3630
3631
3632
3633 set_freezable();
3634
3635 do {
3636 hub_events();
3637 wait_event_freezable(khubd_wait,
3638 !list_empty(&hub_event_list) ||
3639 kthread_should_stop());
3640 } while (!kthread_should_stop() || !list_empty(&hub_event_list));
3641
3642 pr_debug("%s: khubd exiting\n", usbcore_name);
3643 return 0;
3644}
3645
3646static const struct usb_device_id hub_id_table[] = {
3647 { .match_flags = USB_DEVICE_ID_MATCH_DEV_CLASS,
3648 .bDeviceClass = USB_CLASS_HUB},
3649 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
3650 .bInterfaceClass = USB_CLASS_HUB},
3651 { }
3652};
3653
3654MODULE_DEVICE_TABLE (usb, hub_id_table);
3655
3656static struct usb_driver hub_driver = {
3657 .name = "hub",
3658 .probe = hub_probe,
3659 .disconnect = hub_disconnect,
3660 .suspend = hub_suspend,
3661 .resume = hub_resume,
3662 .reset_resume = hub_reset_resume,
3663 .pre_reset = hub_pre_reset,
3664 .post_reset = hub_post_reset,
3665 .unlocked_ioctl = hub_ioctl,
3666 .id_table = hub_id_table,
3667 .supports_autosuspend = 1,
3668};
3669
3670int usb_hub_init(void)
3671{
3672 if (usb_register(&hub_driver) < 0) {
3673 printk(KERN_ERR "%s: can't register hub driver\n",
3674 usbcore_name);
3675 return -1;
3676 }
3677
3678 khubd_task = kthread_run(hub_thread, NULL, "khubd");
3679 if (!IS_ERR(khubd_task))
3680 return 0;
3681
3682
3683 usb_deregister(&hub_driver);
3684 printk(KERN_ERR "%s: can't start khubd\n", usbcore_name);
3685
3686 return -1;
3687}
3688
3689void usb_hub_cleanup(void)
3690{
3691 kthread_stop(khubd_task);
3692
3693
3694
3695
3696
3697
3698
3699
3700 usb_deregister(&hub_driver);
3701}
3702
3703static int descriptors_changed(struct usb_device *udev,
3704 struct usb_device_descriptor *old_device_descriptor)
3705{
3706 int changed = 0;
3707 unsigned index;
3708 unsigned serial_len = 0;
3709 unsigned len;
3710 unsigned old_length;
3711 int length;
3712 char *buf;
3713
3714 if (memcmp(&udev->descriptor, old_device_descriptor,
3715 sizeof(*old_device_descriptor)) != 0)
3716 return 1;
3717
3718
3719
3720
3721
3722
3723
3724 if (udev->serial)
3725 serial_len = strlen(udev->serial) + 1;
3726
3727 len = serial_len;
3728 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
3729 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
3730 len = max(len, old_length);
3731 }
3732
3733 buf = kmalloc(len, GFP_NOIO);
3734 if (buf == NULL) {
3735 dev_err(&udev->dev, "no mem to re-read configs after reset\n");
3736
3737 return 1;
3738 }
3739 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
3740 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
3741 length = usb_get_descriptor(udev, USB_DT_CONFIG, index, buf,
3742 old_length);
3743 if (length != old_length) {
3744 dev_dbg(&udev->dev, "config index %d, error %d\n",
3745 index, length);
3746 changed = 1;
3747 break;
3748 }
3749 if (memcmp (buf, udev->rawdescriptors[index], old_length)
3750 != 0) {
3751 dev_dbg(&udev->dev, "config index %d changed (#%d)\n",
3752 index,
3753 ((struct usb_config_descriptor *) buf)->
3754 bConfigurationValue);
3755 changed = 1;
3756 break;
3757 }
3758 }
3759
3760 if (!changed && serial_len) {
3761 length = usb_string(udev, udev->descriptor.iSerialNumber,
3762 buf, serial_len);
3763 if (length + 1 != serial_len) {
3764 dev_dbg(&udev->dev, "serial string error %d\n",
3765 length);
3766 changed = 1;
3767 } else if (memcmp(buf, udev->serial, length) != 0) {
3768 dev_dbg(&udev->dev, "serial string changed\n");
3769 changed = 1;
3770 }
3771 }
3772
3773 kfree(buf);
3774 return changed;
3775}
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807static int usb_reset_and_verify_device(struct usb_device *udev)
3808{
3809 struct usb_device *parent_hdev = udev->parent;
3810 struct usb_hub *parent_hub;
3811 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3812 struct usb_device_descriptor descriptor = udev->descriptor;
3813 int i, ret = 0;
3814 int port1 = udev->portnum;
3815
3816 if (udev->state == USB_STATE_NOTATTACHED ||
3817 udev->state == USB_STATE_SUSPENDED) {
3818 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
3819 udev->state);
3820 return -EINVAL;
3821 }
3822
3823 if (!parent_hdev) {
3824
3825 dev_dbg(&udev->dev, "%s for root hub!\n", __func__);
3826 return -EISDIR;
3827 }
3828 parent_hub = hdev_to_hub(parent_hdev);
3829
3830 set_bit(port1, parent_hub->busy_bits);
3831 for (i = 0; i < SET_CONFIG_TRIES; ++i) {
3832
3833
3834
3835 usb_ep0_reinit(udev);
3836 ret = hub_port_init(parent_hub, udev, port1, i);
3837 if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV)
3838 break;
3839 }
3840 clear_bit(port1, parent_hub->busy_bits);
3841
3842 if (ret < 0)
3843 goto re_enumerate;
3844
3845
3846 if (descriptors_changed(udev, &descriptor)) {
3847 dev_info(&udev->dev, "device firmware changed\n");
3848 udev->descriptor = descriptor;
3849 goto re_enumerate;
3850 }
3851
3852
3853 if (!udev->actconfig)
3854 goto done;
3855
3856 mutex_lock(hcd->bandwidth_mutex);
3857 ret = usb_hcd_alloc_bandwidth(udev, udev->actconfig, NULL, NULL);
3858 if (ret < 0) {
3859 dev_warn(&udev->dev,
3860 "Busted HC? Not enough HCD resources for "
3861 "old configuration.\n");
3862 mutex_unlock(hcd->bandwidth_mutex);
3863 goto re_enumerate;
3864 }
3865 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3866 USB_REQ_SET_CONFIGURATION, 0,
3867 udev->actconfig->desc.bConfigurationValue, 0,
3868 NULL, 0, USB_CTRL_SET_TIMEOUT);
3869 if (ret < 0) {
3870 dev_err(&udev->dev,
3871 "can't restore configuration #%d (error=%d)\n",
3872 udev->actconfig->desc.bConfigurationValue, ret);
3873 mutex_unlock(hcd->bandwidth_mutex);
3874 goto re_enumerate;
3875 }
3876 mutex_unlock(hcd->bandwidth_mutex);
3877 usb_set_device_state(udev, USB_STATE_CONFIGURED);
3878
3879
3880
3881
3882
3883
3884
3885 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
3886 struct usb_host_config *config = udev->actconfig;
3887 struct usb_interface *intf = config->interface[i];
3888 struct usb_interface_descriptor *desc;
3889
3890 desc = &intf->cur_altsetting->desc;
3891 if (desc->bAlternateSetting == 0) {
3892 usb_disable_interface(udev, intf, true);
3893 usb_enable_interface(udev, intf, true);
3894 ret = 0;
3895 } else {
3896
3897
3898
3899
3900 intf->resetting_device = 1;
3901 ret = usb_set_interface(udev, desc->bInterfaceNumber,
3902 desc->bAlternateSetting);
3903 intf->resetting_device = 0;
3904 }
3905 if (ret < 0) {
3906 dev_err(&udev->dev, "failed to restore interface %d "
3907 "altsetting %d (error=%d)\n",
3908 desc->bInterfaceNumber,
3909 desc->bAlternateSetting,
3910 ret);
3911 goto re_enumerate;
3912 }
3913 }
3914
3915done:
3916 return 0;
3917
3918re_enumerate:
3919 hub_port_logical_disconnect(parent_hub, port1);
3920 return -ENODEV;
3921}
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943int usb_reset_device(struct usb_device *udev)
3944{
3945 int ret;
3946 int i;
3947 struct usb_host_config *config = udev->actconfig;
3948
3949 if (udev->state == USB_STATE_NOTATTACHED ||
3950 udev->state == USB_STATE_SUSPENDED) {
3951 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
3952 udev->state);
3953 return -EINVAL;
3954 }
3955
3956
3957 usb_autoresume_device(udev);
3958
3959 if (config) {
3960 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
3961 struct usb_interface *cintf = config->interface[i];
3962 struct usb_driver *drv;
3963 int unbind = 0;
3964
3965 if (cintf->dev.driver) {
3966 drv = to_usb_driver(cintf->dev.driver);
3967 if (drv->pre_reset && drv->post_reset)
3968 unbind = (drv->pre_reset)(cintf);
3969 else if (cintf->condition ==
3970 USB_INTERFACE_BOUND)
3971 unbind = 1;
3972 if (unbind)
3973 usb_forced_unbind_intf(cintf);
3974 }
3975 }
3976 }
3977
3978 ret = usb_reset_and_verify_device(udev);
3979
3980 if (config) {
3981 for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) {
3982 struct usb_interface *cintf = config->interface[i];
3983 struct usb_driver *drv;
3984 int rebind = cintf->needs_binding;
3985
3986 if (!rebind && cintf->dev.driver) {
3987 drv = to_usb_driver(cintf->dev.driver);
3988 if (drv->post_reset)
3989 rebind = (drv->post_reset)(cintf);
3990 else if (cintf->condition ==
3991 USB_INTERFACE_BOUND)
3992 rebind = 1;
3993 }
3994 if (ret == 0 && rebind)
3995 usb_rebind_intf(cintf);
3996 }
3997 }
3998
3999 usb_autosuspend_device(udev);
4000 return ret;
4001}
4002EXPORT_SYMBOL_GPL(usb_reset_device);
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041void usb_queue_reset_device(struct usb_interface *iface)
4042{
4043 schedule_work(&iface->reset_ws);
4044}
4045EXPORT_SYMBOL_GPL(usb_queue_reset_device);
4046