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