1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/module.h>
20#include <linux/pci.h>
21#include <linux/dmapool.h>
22#include <linux/kernel.h>
23#include <linux/delay.h>
24#include <linux/ioport.h>
25#include <linux/sched.h>
26#include <linux/slab.h>
27#include <linux/errno.h>
28#include <linux/init.h>
29#include <linux/timer.h>
30#include <linux/list.h>
31#include <linux/interrupt.h>
32#include <linux/reboot.h>
33#include <linux/usb.h>
34#include <linux/moduleparam.h>
35#include <linux/dma-mapping.h>
36#include <linux/debugfs.h>
37
38#include "../core/hcd.h"
39
40#include <asm/byteorder.h>
41#include <asm/io.h>
42#include <asm/irq.h>
43#include <asm/system.h>
44#include <asm/unaligned.h>
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62#define DRIVER_VERSION "10 Dec 2004"
63#define DRIVER_AUTHOR "David Brownell"
64#define DRIVER_DESC "USB 2.0 'Enhanced' Host Controller (EHCI) Driver"
65
66static const char hcd_name [] = "ehci_hcd";
67
68
69#undef VERBOSE_DEBUG
70#undef EHCI_URB_TRACE
71
72#ifdef DEBUG
73#define EHCI_STATS
74#endif
75
76
77#define EHCI_TUNE_CERR 3
78#define EHCI_TUNE_RL_HS 4
79#define EHCI_TUNE_RL_TT 0
80#define EHCI_TUNE_MULT_HS 1
81#define EHCI_TUNE_MULT_TT 1
82#define EHCI_TUNE_FLS 2
83
84#define EHCI_IAA_MSECS 10
85#define EHCI_IO_JIFFIES (HZ/10)
86#define EHCI_ASYNC_JIFFIES (HZ/20)
87#define EHCI_SHRINK_FRAMES 5
88
89
90static int log2_irq_thresh = 0;
91module_param (log2_irq_thresh, int, S_IRUGO);
92MODULE_PARM_DESC (log2_irq_thresh, "log2 IRQ latency, 1-64 microframes");
93
94
95static unsigned park = 0;
96module_param (park, uint, S_IRUGO);
97MODULE_PARM_DESC (park, "park setting; 1-3 back-to-back async packets");
98
99
100static int ignore_oc = 0;
101module_param (ignore_oc, bool, S_IRUGO);
102MODULE_PARM_DESC (ignore_oc, "ignore bogus hardware overcurrent indications");
103
104#define INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT)
105
106
107
108#include "ehci.h"
109#include "ehci-dbg.c"
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130static int handshake (struct ehci_hcd *ehci, void __iomem *ptr,
131 u32 mask, u32 done, int usec)
132{
133 u32 result;
134
135 do {
136 result = ehci_readl(ehci, ptr);
137 if (result == ~(u32)0)
138 return -ENODEV;
139 result &= mask;
140 if (result == done)
141 return 0;
142 udelay (1);
143 usec--;
144 } while (usec > 0);
145 return -ETIMEDOUT;
146}
147
148
149static int ehci_halt (struct ehci_hcd *ehci)
150{
151 u32 temp = ehci_readl(ehci, &ehci->regs->status);
152
153
154 ehci_writel(ehci, 0, &ehci->regs->intr_enable);
155
156 if ((temp & STS_HALT) != 0)
157 return 0;
158
159 temp = ehci_readl(ehci, &ehci->regs->command);
160 temp &= ~CMD_RUN;
161 ehci_writel(ehci, temp, &ehci->regs->command);
162 return handshake (ehci, &ehci->regs->status,
163 STS_HALT, STS_HALT, 16 * 125);
164}
165
166static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr,
167 u32 mask, u32 done, int usec)
168{
169 int error;
170
171 error = handshake(ehci, ptr, mask, done, usec);
172 if (error) {
173 ehci_halt(ehci);
174 ehci_to_hcd(ehci)->state = HC_STATE_HALT;
175 ehci_err(ehci, "force halt; handhake %p %08x %08x -> %d\n",
176 ptr, mask, done, error);
177 }
178
179 return error;
180}
181
182
183static void tdi_reset (struct ehci_hcd *ehci)
184{
185 u32 __iomem *reg_ptr;
186 u32 tmp;
187
188 reg_ptr = (u32 __iomem *)(((u8 __iomem *)ehci->regs) + USBMODE);
189 tmp = ehci_readl(ehci, reg_ptr);
190 tmp |= USBMODE_CM_HC;
191
192
193
194
195 if (ehci_big_endian_mmio(ehci))
196 tmp |= USBMODE_BE;
197 ehci_writel(ehci, tmp, reg_ptr);
198}
199
200
201static int ehci_reset (struct ehci_hcd *ehci)
202{
203 int retval;
204 u32 command = ehci_readl(ehci, &ehci->regs->command);
205
206 command |= CMD_RESET;
207 dbg_cmd (ehci, "reset", command);
208 ehci_writel(ehci, command, &ehci->regs->command);
209 ehci_to_hcd(ehci)->state = HC_STATE_HALT;
210 ehci->next_statechange = jiffies;
211 retval = handshake (ehci, &ehci->regs->command,
212 CMD_RESET, 0, 250 * 1000);
213
214 if (retval)
215 return retval;
216
217 if (ehci_is_TDI(ehci))
218 tdi_reset (ehci);
219
220 return retval;
221}
222
223
224static void ehci_quiesce (struct ehci_hcd *ehci)
225{
226 u32 temp;
227
228#ifdef DEBUG
229 if (!HC_IS_RUNNING (ehci_to_hcd(ehci)->state))
230 BUG ();
231#endif
232
233
234 temp = ehci_readl(ehci, &ehci->regs->command) << 10;
235 temp &= STS_ASS | STS_PSS;
236 if (handshake_on_error_set_halt(ehci, &ehci->regs->status,
237 STS_ASS | STS_PSS, temp, 16 * 125))
238 return;
239
240
241 temp = ehci_readl(ehci, &ehci->regs->command);
242 temp &= ~(CMD_ASE | CMD_IAAD | CMD_PSE);
243 ehci_writel(ehci, temp, &ehci->regs->command);
244
245
246 handshake_on_error_set_halt(ehci, &ehci->regs->status,
247 STS_ASS | STS_PSS, 0, 16 * 125);
248}
249
250
251
252static void end_unlink_async(struct ehci_hcd *ehci);
253static void ehci_work(struct ehci_hcd *ehci);
254
255#include "ehci-hub.c"
256#include "ehci-mem.c"
257#include "ehci-q.c"
258#include "ehci-sched.c"
259
260
261
262static void ehci_iaa_watchdog(unsigned long param)
263{
264 struct ehci_hcd *ehci = (struct ehci_hcd *) param;
265 unsigned long flags;
266
267 spin_lock_irqsave (&ehci->lock, flags);
268
269
270
271
272
273
274 if (ehci->reclaim
275 && !timer_pending(&ehci->iaa_watchdog)
276 && HC_IS_RUNNING(ehci_to_hcd(ehci)->state)) {
277 u32 cmd, status;
278
279
280
281
282
283
284
285 cmd = ehci_readl(ehci, &ehci->regs->command);
286 if (cmd & CMD_IAAD)
287 ehci_writel(ehci, cmd & ~CMD_IAAD,
288 &ehci->regs->command);
289
290
291
292
293
294
295
296 status = ehci_readl(ehci, &ehci->regs->status);
297 if ((status & STS_IAA) || !(cmd & CMD_IAAD)) {
298 COUNT (ehci->stats.lost_iaa);
299 ehci_writel(ehci, STS_IAA, &ehci->regs->status);
300 }
301
302 ehci_vdbg(ehci, "IAA watchdog: status %x cmd %x\n",
303 status, cmd);
304 end_unlink_async(ehci);
305 }
306
307 spin_unlock_irqrestore(&ehci->lock, flags);
308}
309
310static void ehci_watchdog(unsigned long param)
311{
312 struct ehci_hcd *ehci = (struct ehci_hcd *) param;
313 unsigned long flags;
314
315 spin_lock_irqsave(&ehci->lock, flags);
316
317
318 if (test_bit (TIMER_ASYNC_OFF, &ehci->actions))
319 start_unlink_async (ehci, ehci->async);
320
321
322 ehci_work (ehci);
323
324 spin_unlock_irqrestore (&ehci->lock, flags);
325}
326
327
328
329
330
331static void ehci_turn_off_all_ports(struct ehci_hcd *ehci)
332{
333 int port = HCS_N_PORTS(ehci->hcs_params);
334
335 while (port--)
336 ehci_writel(ehci, PORT_RWC_BITS,
337 &ehci->regs->port_status[port]);
338}
339
340
341
342
343
344static void ehci_silence_controller(struct ehci_hcd *ehci)
345{
346 ehci_halt(ehci);
347 ehci_turn_off_all_ports(ehci);
348
349
350 ehci_writel(ehci, 0, &ehci->regs->configured_flag);
351
352
353 ehci_readl(ehci, &ehci->regs->configured_flag);
354}
355
356
357
358
359
360static void ehci_shutdown(struct usb_hcd *hcd)
361{
362 struct ehci_hcd *ehci = hcd_to_ehci(hcd);
363
364 del_timer_sync(&ehci->watchdog);
365 del_timer_sync(&ehci->iaa_watchdog);
366
367 spin_lock_irq(&ehci->lock);
368 ehci_silence_controller(ehci);
369 spin_unlock_irq(&ehci->lock);
370}
371
372static void ehci_port_power (struct ehci_hcd *ehci, int is_on)
373{
374 unsigned port;
375
376 if (!HCS_PPC (ehci->hcs_params))
377 return;
378
379 ehci_dbg (ehci, "...power%s ports...\n", is_on ? "up" : "down");
380 for (port = HCS_N_PORTS (ehci->hcs_params); port > 0; )
381 (void) ehci_hub_control(ehci_to_hcd(ehci),
382 is_on ? SetPortFeature : ClearPortFeature,
383 USB_PORT_FEAT_POWER,
384 port--, NULL, 0);
385
386 ehci_readl(ehci, &ehci->regs->command);
387 msleep(20);
388}
389
390
391
392
393
394
395
396static void ehci_work (struct ehci_hcd *ehci)
397{
398 timer_action_done (ehci, TIMER_IO_WATCHDOG);
399
400
401
402
403
404 if (ehci->scanning)
405 return;
406 ehci->scanning = 1;
407 scan_async (ehci);
408 if (ehci->next_uframe != -1)
409 scan_periodic (ehci);
410 ehci->scanning = 0;
411
412
413
414
415
416 if (HC_IS_RUNNING (ehci_to_hcd(ehci)->state) &&
417 (ehci->async->qh_next.ptr != NULL ||
418 ehci->periodic_sched != 0))
419 timer_action (ehci, TIMER_IO_WATCHDOG);
420}
421
422
423
424
425static void ehci_stop (struct usb_hcd *hcd)
426{
427 struct ehci_hcd *ehci = hcd_to_ehci (hcd);
428
429 ehci_dbg (ehci, "stop\n");
430
431
432 del_timer_sync (&ehci->watchdog);
433 del_timer_sync(&ehci->iaa_watchdog);
434
435 spin_lock_irq(&ehci->lock);
436 if (HC_IS_RUNNING (hcd->state))
437 ehci_quiesce (ehci);
438
439 ehci_silence_controller(ehci);
440 ehci_reset (ehci);
441 spin_unlock_irq(&ehci->lock);
442
443 remove_companion_file(ehci);
444 remove_debug_files (ehci);
445
446
447 spin_lock_irq (&ehci->lock);
448 if (ehci->async)
449 ehci_work (ehci);
450 spin_unlock_irq (&ehci->lock);
451 ehci_mem_cleanup (ehci);
452
453#ifdef EHCI_STATS
454 ehci_dbg (ehci, "irq normal %ld err %ld reclaim %ld (lost %ld)\n",
455 ehci->stats.normal, ehci->stats.error, ehci->stats.reclaim,
456 ehci->stats.lost_iaa);
457 ehci_dbg (ehci, "complete %ld unlink %ld\n",
458 ehci->stats.complete, ehci->stats.unlink);
459#endif
460
461 dbg_status (ehci, "ehci_stop completed",
462 ehci_readl(ehci, &ehci->regs->status));
463}
464
465
466static int ehci_init(struct usb_hcd *hcd)
467{
468 struct ehci_hcd *ehci = hcd_to_ehci(hcd);
469 u32 temp;
470 int retval;
471 u32 hcc_params;
472
473 spin_lock_init(&ehci->lock);
474
475 init_timer(&ehci->watchdog);
476 ehci->watchdog.function = ehci_watchdog;
477 ehci->watchdog.data = (unsigned long) ehci;
478
479 init_timer(&ehci->iaa_watchdog);
480 ehci->iaa_watchdog.function = ehci_iaa_watchdog;
481 ehci->iaa_watchdog.data = (unsigned long) ehci;
482
483
484
485
486
487 ehci->periodic_size = DEFAULT_I_TDPS;
488 if ((retval = ehci_mem_init(ehci, GFP_KERNEL)) < 0)
489 return retval;
490
491
492 hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
493 if (HCC_ISOC_CACHE(hcc_params))
494 ehci->i_thresh = 8;
495 else
496 ehci->i_thresh = 2 + HCC_ISOC_THRES(hcc_params);
497
498 ehci->reclaim = NULL;
499 ehci->next_uframe = -1;
500
501
502
503
504
505
506
507
508 ehci->async->qh_next.qh = NULL;
509 ehci->async->hw_next = QH_NEXT(ehci, ehci->async->qh_dma);
510 ehci->async->hw_info1 = cpu_to_hc32(ehci, QH_HEAD);
511 ehci->async->hw_token = cpu_to_hc32(ehci, QTD_STS_HALT);
512 ehci->async->hw_qtd_next = EHCI_LIST_END(ehci);
513 ehci->async->qh_state = QH_STATE_LINKED;
514 ehci->async->hw_alt_next = QTD_NEXT(ehci, ehci->async->dummy->qtd_dma);
515
516
517 if (log2_irq_thresh < 0 || log2_irq_thresh > 6)
518 log2_irq_thresh = 0;
519 temp = 1 << (16 + log2_irq_thresh);
520 if (HCC_CANPARK(hcc_params)) {
521
522
523
524
525
526
527
528 if (park) {
529 park = min(park, (unsigned) 3);
530 temp |= CMD_PARK;
531 temp |= park << 8;
532 }
533 ehci_dbg(ehci, "park %d\n", park);
534 }
535 if (HCC_PGM_FRAMELISTLEN(hcc_params)) {
536
537 temp &= ~(3 << 2);
538 temp |= (EHCI_TUNE_FLS << 2);
539 switch (EHCI_TUNE_FLS) {
540 case 0: ehci->periodic_size = 1024; break;
541 case 1: ehci->periodic_size = 512; break;
542 case 2: ehci->periodic_size = 256; break;
543 default: BUG();
544 }
545 }
546 ehci->command = temp;
547
548 return 0;
549}
550
551
552static int ehci_run (struct usb_hcd *hcd)
553{
554 struct ehci_hcd *ehci = hcd_to_ehci (hcd);
555 int retval;
556 u32 temp;
557 u32 hcc_params;
558
559 hcd->uses_new_polling = 1;
560 hcd->poll_rh = 0;
561
562
563 if ((retval = ehci_reset(ehci)) != 0) {
564 ehci_mem_cleanup(ehci);
565 return retval;
566 }
567 ehci_writel(ehci, ehci->periodic_dma, &ehci->regs->frame_list);
568 ehci_writel(ehci, (u32)ehci->async->qh_dma, &ehci->regs->async_next);
569
570
571
572
573
574
575
576
577
578
579
580
581
582 hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
583 if (HCC_64BIT_ADDR(hcc_params)) {
584 ehci_writel(ehci, 0, &ehci->regs->segment);
585#if 0
586
587 if (!dma_set_mask(hcd->self.controller, DMA_64BIT_MASK))
588 ehci_info(ehci, "enabled 64bit DMA\n");
589#endif
590 }
591
592
593
594
595 ehci->command &= ~(CMD_LRESET|CMD_IAAD|CMD_PSE|CMD_ASE|CMD_RESET);
596 ehci->command |= CMD_RUN;
597 ehci_writel(ehci, ehci->command, &ehci->regs->command);
598 dbg_cmd (ehci, "init", ehci->command);
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614 down_write(&ehci_cf_port_reset_rwsem);
615 hcd->state = HC_STATE_RUNNING;
616 ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
617 ehci_readl(ehci, &ehci->regs->command);
618 msleep(5);
619 up_write(&ehci_cf_port_reset_rwsem);
620
621 temp = HC_VERSION(ehci_readl(ehci, &ehci->caps->hc_capbase));
622 ehci_info (ehci,
623 "USB %x.%x started, EHCI %x.%02x, driver %s%s\n",
624 ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f),
625 temp >> 8, temp & 0xff, DRIVER_VERSION,
626 ignore_oc ? ", overcurrent ignored" : "");
627
628 ehci_writel(ehci, INTR_MASK,
629 &ehci->regs->intr_enable);
630
631
632
633
634
635 create_debug_files(ehci);
636 create_companion_file(ehci);
637
638 return 0;
639}
640
641
642
643static irqreturn_t ehci_irq (struct usb_hcd *hcd)
644{
645 struct ehci_hcd *ehci = hcd_to_ehci (hcd);
646 u32 status, pcd_status = 0, cmd;
647 int bh;
648
649 spin_lock (&ehci->lock);
650
651 status = ehci_readl(ehci, &ehci->regs->status);
652
653
654 if (status == ~(u32) 0) {
655 ehci_dbg (ehci, "device removed\n");
656 goto dead;
657 }
658
659 status &= INTR_MASK;
660 if (!status) {
661 spin_unlock(&ehci->lock);
662 return IRQ_NONE;
663 }
664
665
666 ehci_writel(ehci, status, &ehci->regs->status);
667 cmd = ehci_readl(ehci, &ehci->regs->command);
668 bh = 0;
669
670#ifdef VERBOSE_DEBUG
671
672 dbg_status (ehci, "irq", status);
673#endif
674
675
676
677
678 if (likely ((status & (STS_INT|STS_ERR)) != 0)) {
679 if (likely ((status & STS_ERR) == 0))
680 COUNT (ehci->stats.normal);
681 else
682 COUNT (ehci->stats.error);
683 bh = 1;
684 }
685
686
687 if (status & STS_IAA) {
688
689 if (cmd & CMD_IAAD) {
690 ehci_writel(ehci, cmd & ~CMD_IAAD,
691 &ehci->regs->command);
692 ehci_dbg(ehci, "IAA with IAAD still set?\n");
693 }
694 if (ehci->reclaim) {
695 COUNT(ehci->stats.reclaim);
696 end_unlink_async(ehci);
697 } else
698 ehci_dbg(ehci, "IAA with nothing to reclaim?\n");
699 }
700
701
702 if (status & STS_PCD) {
703 unsigned i = HCS_N_PORTS (ehci->hcs_params);
704
705
706 pcd_status = status;
707
708
709 if (!(ehci_readl(ehci, &ehci->regs->command) & CMD_RUN))
710 usb_hcd_resume_root_hub(hcd);
711
712 while (i--) {
713 int pstatus = ehci_readl(ehci,
714 &ehci->regs->port_status [i]);
715
716 if (pstatus & PORT_OWNER)
717 continue;
718 if (!(pstatus & PORT_RESUME)
719 || ehci->reset_done [i] != 0)
720 continue;
721
722
723
724
725
726 ehci->reset_done [i] = jiffies + msecs_to_jiffies (20);
727 ehci_dbg (ehci, "port %d remote wakeup\n", i + 1);
728 mod_timer(&hcd->rh_timer, ehci->reset_done[i]);
729 }
730 }
731
732
733 if (unlikely ((status & STS_FATAL) != 0)) {
734 dbg_cmd (ehci, "fatal", ehci_readl(ehci,
735 &ehci->regs->command));
736 dbg_status (ehci, "fatal", status);
737 if (status & STS_HALT) {
738 ehci_err (ehci, "fatal error\n");
739dead:
740 ehci_reset (ehci);
741 ehci_writel(ehci, 0, &ehci->regs->configured_flag);
742
743
744
745 bh = 1;
746 }
747 }
748
749 if (bh)
750 ehci_work (ehci);
751 spin_unlock (&ehci->lock);
752 if (pcd_status)
753 usb_hcd_poll_rh_status(hcd);
754 return IRQ_HANDLED;
755}
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771static int ehci_urb_enqueue (
772 struct usb_hcd *hcd,
773 struct urb *urb,
774 gfp_t mem_flags
775) {
776 struct ehci_hcd *ehci = hcd_to_ehci (hcd);
777 struct list_head qtd_list;
778
779 INIT_LIST_HEAD (&qtd_list);
780
781 switch (usb_pipetype (urb->pipe)) {
782 case PIPE_CONTROL:
783
784
785
786 if (urb->transfer_buffer_length > (16 * 1024))
787 return -EMSGSIZE;
788
789
790 default:
791 if (!qh_urb_transaction (ehci, urb, &qtd_list, mem_flags))
792 return -ENOMEM;
793 return submit_async(ehci, urb, &qtd_list, mem_flags);
794
795 case PIPE_INTERRUPT:
796 if (!qh_urb_transaction (ehci, urb, &qtd_list, mem_flags))
797 return -ENOMEM;
798 return intr_submit(ehci, urb, &qtd_list, mem_flags);
799
800 case PIPE_ISOCHRONOUS:
801 if (urb->dev->speed == USB_SPEED_HIGH)
802 return itd_submit (ehci, urb, mem_flags);
803 else
804 return sitd_submit (ehci, urb, mem_flags);
805 }
806}
807
808static void unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
809{
810
811 if (!HC_IS_RUNNING(ehci_to_hcd(ehci)->state) && ehci->reclaim)
812 end_unlink_async(ehci);
813
814
815 if (qh->qh_state != QH_STATE_LINKED)
816 ;
817
818
819 else if (ehci->reclaim) {
820 struct ehci_qh *last;
821
822 for (last = ehci->reclaim;
823 last->reclaim;
824 last = last->reclaim)
825 continue;
826 qh->qh_state = QH_STATE_UNLINK_WAIT;
827 last->reclaim = qh;
828
829
830 } else
831 start_unlink_async (ehci, qh);
832}
833
834
835
836
837
838static int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
839{
840 struct ehci_hcd *ehci = hcd_to_ehci (hcd);
841 struct ehci_qh *qh;
842 unsigned long flags;
843 int rc;
844
845 spin_lock_irqsave (&ehci->lock, flags);
846 rc = usb_hcd_check_unlink_urb(hcd, urb, status);
847 if (rc)
848 goto done;
849
850 switch (usb_pipetype (urb->pipe)) {
851
852
853 default:
854 qh = (struct ehci_qh *) urb->hcpriv;
855 if (!qh)
856 break;
857 switch (qh->qh_state) {
858 case QH_STATE_LINKED:
859 case QH_STATE_COMPLETING:
860 unlink_async(ehci, qh);
861 break;
862 case QH_STATE_UNLINK:
863 case QH_STATE_UNLINK_WAIT:
864
865 break;
866 case QH_STATE_IDLE:
867 WARN_ON(1);
868 break;
869 }
870 break;
871
872 case PIPE_INTERRUPT:
873 qh = (struct ehci_qh *) urb->hcpriv;
874 if (!qh)
875 break;
876 switch (qh->qh_state) {
877 case QH_STATE_LINKED:
878 intr_deschedule (ehci, qh);
879
880 case QH_STATE_IDLE:
881 qh_completions (ehci, qh);
882 break;
883 default:
884 ehci_dbg (ehci, "bogus qh %p state %d\n",
885 qh, qh->qh_state);
886 goto done;
887 }
888
889
890 if (!list_empty (&qh->qtd_list)
891 && HC_IS_RUNNING (hcd->state)) {
892 rc = qh_schedule(ehci, qh);
893
894
895
896
897
898
899
900 if (rc != 0)
901 ehci_err(ehci,
902 "can't reschedule qh %p, err %d",
903 qh, rc);
904 }
905 break;
906
907 case PIPE_ISOCHRONOUS:
908
909
910
911
912 break;
913 }
914done:
915 spin_unlock_irqrestore (&ehci->lock, flags);
916 return rc;
917}
918
919
920
921
922
923static void
924ehci_endpoint_disable (struct usb_hcd *hcd, struct usb_host_endpoint *ep)
925{
926 struct ehci_hcd *ehci = hcd_to_ehci (hcd);
927 unsigned long flags;
928 struct ehci_qh *qh, *tmp;
929
930
931
932
933rescan:
934 spin_lock_irqsave (&ehci->lock, flags);
935 qh = ep->hcpriv;
936 if (!qh)
937 goto done;
938
939
940
941
942 if (qh->hw_info1 == 0) {
943 ehci_vdbg (ehci, "iso delay\n");
944 goto idle_timeout;
945 }
946
947 if (!HC_IS_RUNNING (hcd->state))
948 qh->qh_state = QH_STATE_IDLE;
949 switch (qh->qh_state) {
950 case QH_STATE_LINKED:
951 for (tmp = ehci->async->qh_next.qh;
952 tmp && tmp != qh;
953 tmp = tmp->qh_next.qh)
954 continue;
955
956 if (!tmp)
957 goto nogood;
958 unlink_async (ehci, qh);
959
960 case QH_STATE_UNLINK:
961 case QH_STATE_UNLINK_WAIT:
962idle_timeout:
963 spin_unlock_irqrestore (&ehci->lock, flags);
964 schedule_timeout_uninterruptible(1);
965 goto rescan;
966 case QH_STATE_IDLE:
967 if (list_empty (&qh->qtd_list)) {
968 qh_put (qh);
969 break;
970 }
971
972 default:
973nogood:
974
975
976
977 ehci_err (ehci, "qh %p (#%02x) state %d%s\n",
978 qh, ep->desc.bEndpointAddress, qh->qh_state,
979 list_empty (&qh->qtd_list) ? "" : "(has tds)");
980 break;
981 }
982 ep->hcpriv = NULL;
983done:
984 spin_unlock_irqrestore (&ehci->lock, flags);
985 return;
986}
987
988static int ehci_get_frame (struct usb_hcd *hcd)
989{
990 struct ehci_hcd *ehci = hcd_to_ehci (hcd);
991 return (ehci_readl(ehci, &ehci->regs->frame_index) >> 3) %
992 ehci->periodic_size;
993}
994
995
996
997#define DRIVER_INFO DRIVER_VERSION " " DRIVER_DESC
998
999MODULE_DESCRIPTION (DRIVER_INFO);
1000MODULE_AUTHOR (DRIVER_AUTHOR);
1001MODULE_LICENSE ("GPL");
1002
1003#ifdef CONFIG_PCI
1004#include "ehci-pci.c"
1005#define PCI_DRIVER ehci_pci_driver
1006#endif
1007
1008#ifdef CONFIG_USB_EHCI_FSL
1009#include "ehci-fsl.c"
1010#define PLATFORM_DRIVER ehci_fsl_driver
1011#endif
1012
1013#ifdef CONFIG_SOC_AU1200
1014#include "ehci-au1xxx.c"
1015#define PLATFORM_DRIVER ehci_hcd_au1xxx_driver
1016#endif
1017
1018#ifdef CONFIG_PPC_PS3
1019#include "ehci-ps3.c"
1020#define PS3_SYSTEM_BUS_DRIVER ps3_ehci_driver
1021#endif
1022
1023#if defined(CONFIG_440EPX) && !defined(CONFIG_PPC_MERGE)
1024#include "ehci-ppc-soc.c"
1025#define PLATFORM_DRIVER ehci_ppc_soc_driver
1026#endif
1027
1028#ifdef CONFIG_USB_EHCI_HCD_PPC_OF
1029#include "ehci-ppc-of.c"
1030#define OF_PLATFORM_DRIVER ehci_hcd_ppc_of_driver
1031#endif
1032
1033#ifdef CONFIG_PLAT_ORION
1034#include "ehci-orion.c"
1035#define PLATFORM_DRIVER ehci_orion_driver
1036#endif
1037
1038#ifdef CONFIG_ARCH_IXP4XX
1039#include "ehci-ixp4xx.c"
1040#define PLATFORM_DRIVER ixp4xx_ehci_driver
1041#endif
1042
1043#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
1044 !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER)
1045#error "missing bus glue for ehci-hcd"
1046#endif
1047
1048static int __init ehci_hcd_init(void)
1049{
1050 int retval = 0;
1051
1052 set_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
1053 if (test_bit(USB_UHCI_LOADED, &usb_hcds_loaded) ||
1054 test_bit(USB_OHCI_LOADED, &usb_hcds_loaded))
1055 printk(KERN_WARNING "Warning! ehci_hcd should always be loaded"
1056 " before uhci_hcd and ohci_hcd, not after\n");
1057
1058 pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
1059 hcd_name,
1060 sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
1061 sizeof(struct ehci_itd), sizeof(struct ehci_sitd));
1062
1063#ifdef DEBUG
1064 ehci_debug_root = debugfs_create_dir("ehci", NULL);
1065 if (!ehci_debug_root) {
1066 retval = -ENOENT;
1067 goto err_debug;
1068 }
1069#endif
1070
1071#ifdef PLATFORM_DRIVER
1072 retval = platform_driver_register(&PLATFORM_DRIVER);
1073 if (retval < 0)
1074 goto clean0;
1075#endif
1076
1077#ifdef PCI_DRIVER
1078 retval = pci_register_driver(&PCI_DRIVER);
1079 if (retval < 0)
1080 goto clean1;
1081#endif
1082
1083#ifdef PS3_SYSTEM_BUS_DRIVER
1084 retval = ps3_ehci_driver_register(&PS3_SYSTEM_BUS_DRIVER);
1085 if (retval < 0)
1086 goto clean2;
1087#endif
1088
1089#ifdef OF_PLATFORM_DRIVER
1090 retval = of_register_platform_driver(&OF_PLATFORM_DRIVER);
1091 if (retval < 0)
1092 goto clean3;
1093#endif
1094 return retval;
1095
1096#ifdef OF_PLATFORM_DRIVER
1097
1098clean3:
1099#endif
1100#ifdef PS3_SYSTEM_BUS_DRIVER
1101 ps3_ehci_driver_unregister(&PS3_SYSTEM_BUS_DRIVER);
1102clean2:
1103#endif
1104#ifdef PCI_DRIVER
1105 pci_unregister_driver(&PCI_DRIVER);
1106clean1:
1107#endif
1108#ifdef PLATFORM_DRIVER
1109 platform_driver_unregister(&PLATFORM_DRIVER);
1110clean0:
1111#endif
1112#ifdef DEBUG
1113 debugfs_remove(ehci_debug_root);
1114 ehci_debug_root = NULL;
1115err_debug:
1116#endif
1117 clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
1118 return retval;
1119}
1120module_init(ehci_hcd_init);
1121
1122static void __exit ehci_hcd_cleanup(void)
1123{
1124#ifdef OF_PLATFORM_DRIVER
1125 of_unregister_platform_driver(&OF_PLATFORM_DRIVER);
1126#endif
1127#ifdef PLATFORM_DRIVER
1128 platform_driver_unregister(&PLATFORM_DRIVER);
1129#endif
1130#ifdef PCI_DRIVER
1131 pci_unregister_driver(&PCI_DRIVER);
1132#endif
1133#ifdef PS3_SYSTEM_BUS_DRIVER
1134 ps3_ehci_driver_unregister(&PS3_SYSTEM_BUS_DRIVER);
1135#endif
1136#ifdef DEBUG
1137 debugfs_remove(ehci_debug_root);
1138#endif
1139 clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
1140}
1141module_exit(ehci_hcd_cleanup);
1142
1143