This source file includes following definitions.
- quirk_nec
- quirk_zfmicro
- quirk_amdiso
- quirk_amdprefetch
- quirk_nec
- quirk_zfmicro
- quirk_amdiso
- quirk_amdprefetch
- hcd_to_ohci
- ohci_to_hcd
- _ohci_readl
- _ohci_writel
- cpu_to_hc16
- cpu_to_hc16p
- cpu_to_hc32
- cpu_to_hc32p
- hc16_to_cpu
- hc16_to_cpup
- hc32_to_cpu
- hc32_to_cpup
- ohci_frame_no
- ohci_hwPSWp
- ohci_hwPSW
- periodic_reinit
- roothub_a
- roothub_b
- roothub_status
- roothub_portstatus
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 typedef __u32 __bitwise __hc32;
17 typedef __u16 __bitwise __hc16;
18
19
20
21
22
23
24
25
26 struct ed {
27
28 __hc32 hwINFO;
29
30 #define ED_DEQUEUE (1 << 27)
31
32 #define ED_ISO (1 << 15)
33 #define ED_SKIP (1 << 14)
34 #define ED_LOWSPEED (1 << 13)
35 #define ED_OUT (0x01 << 11)
36 #define ED_IN (0x02 << 11)
37 __hc32 hwTailP;
38 __hc32 hwHeadP;
39 #define ED_C (0x02)
40 #define ED_H (0x01)
41 __hc32 hwNextED;
42
43
44 dma_addr_t dma;
45 struct td *dummy;
46
47
48 struct ed *ed_next;
49 struct ed *ed_prev;
50 struct list_head td_list;
51 struct list_head in_use_list;
52
53
54
55
56 u8 state;
57 #define ED_IDLE 0x00
58 #define ED_UNLINK 0x01
59 #define ED_OPER 0x02
60
61 u8 type;
62
63
64 u8 branch;
65 u16 interval;
66 u16 load;
67 u16 last_iso;
68
69
70 u16 tick;
71
72
73 unsigned takeback_wdh_cnt;
74 struct td *pending_td;
75 #define OKAY_TO_TAKEBACK(ohci, ed) \
76 ((int) (ohci->wdh_cnt - ed->takeback_wdh_cnt) >= 0)
77
78 } __attribute__ ((aligned(16)));
79
80 #define ED_MASK ((u32)~0x0f)
81
82
83
84
85
86
87
88 struct td {
89
90 __hc32 hwINFO;
91
92
93 #define TD_CC 0xf0000000
94 #define TD_CC_GET(td_p) ((td_p >>28) & 0x0f)
95
96 #define TD_DI 0x00E00000
97 #define TD_DI_SET(X) (((X) & 0x07)<< 21)
98
99
100
101 #define TD_DONE 0x00020000
102 #define TD_ISO 0x00010000
103
104
105 #define TD_EC 0x0C000000
106 #define TD_T 0x03000000
107 #define TD_T_DATA0 0x02000000
108 #define TD_T_DATA1 0x03000000
109 #define TD_T_TOGGLE 0x00000000
110 #define TD_DP 0x00180000
111 #define TD_DP_SETUP 0x00000000
112 #define TD_DP_IN 0x00100000
113 #define TD_DP_OUT 0x00080000
114
115 #define TD_R 0x00040000
116
117
118
119 __hc32 hwCBP;
120 __hc32 hwNextTD;
121 __hc32 hwBE;
122
123
124
125
126 #define MAXPSW 2
127 __hc16 hwPSW [MAXPSW];
128
129
130 __u8 index;
131 struct ed *ed;
132 struct td *td_hash;
133 struct td *next_dl_td;
134 struct urb *urb;
135
136 dma_addr_t td_dma;
137 dma_addr_t data_dma;
138
139 struct list_head td_list;
140 } __attribute__ ((aligned(32)));
141
142 #define TD_MASK ((u32)~0x1f)
143
144
145
146
147 #define TD_CC_NOERROR 0x00
148 #define TD_CC_CRC 0x01
149 #define TD_CC_BITSTUFFING 0x02
150 #define TD_CC_DATATOGGLEM 0x03
151 #define TD_CC_STALL 0x04
152 #define TD_DEVNOTRESP 0x05
153 #define TD_PIDCHECKFAIL 0x06
154 #define TD_UNEXPECTEDPID 0x07
155 #define TD_DATAOVERRUN 0x08
156 #define TD_DATAUNDERRUN 0x09
157
158 #define TD_BUFFEROVERRUN 0x0C
159 #define TD_BUFFERUNDERRUN 0x0D
160
161 #define TD_NOTACCESSED 0x0F
162
163
164
165 static const int cc_to_error [16] = {
166 0,
167 -EILSEQ,
168 -EPROTO,
169 -EILSEQ,
170 -EPIPE,
171 -ETIME,
172 -EPROTO,
173 -EPROTO,
174 -EOVERFLOW,
175 -EREMOTEIO,
176 -EIO,
177 -EIO,
178 -ECOMM,
179 -ENOSR,
180 -EALREADY,
181 -EALREADY
182 };
183
184
185
186
187
188
189
190 struct ohci_hcca {
191 #define NUM_INTS 32
192 __hc32 int_table [NUM_INTS];
193
194
195
196
197
198
199 __hc32 frame_no;
200 __hc32 done_head;
201 u8 reserved_for_hc [116];
202 u8 what [4];
203 } __attribute__ ((aligned(256)));
204
205
206
207
208
209
210 struct ohci_regs {
211
212 __hc32 revision;
213 __hc32 control;
214 __hc32 cmdstatus;
215 __hc32 intrstatus;
216 __hc32 intrenable;
217 __hc32 intrdisable;
218
219
220 __hc32 hcca;
221 __hc32 ed_periodcurrent;
222 __hc32 ed_controlhead;
223 __hc32 ed_controlcurrent;
224 __hc32 ed_bulkhead;
225 __hc32 ed_bulkcurrent;
226 __hc32 donehead;
227
228
229 __hc32 fminterval;
230 __hc32 fmremaining;
231 __hc32 fmnumber;
232 __hc32 periodicstart;
233 __hc32 lsthresh;
234
235
236 struct ohci_roothub_regs {
237 __hc32 a;
238 __hc32 b;
239 __hc32 status;
240 #define MAX_ROOT_PORTS 15
241 __hc32 portstatus [MAX_ROOT_PORTS];
242 } roothub;
243
244
245
246 } __attribute__ ((aligned(32)));
247
248
249
250
251
252
253
254 #define OHCI_CTRL_CBSR (3 << 0)
255 #define OHCI_CTRL_PLE (1 << 2)
256 #define OHCI_CTRL_IE (1 << 3)
257 #define OHCI_CTRL_CLE (1 << 4)
258 #define OHCI_CTRL_BLE (1 << 5)
259 #define OHCI_CTRL_HCFS (3 << 6)
260 #define OHCI_CTRL_IR (1 << 8)
261 #define OHCI_CTRL_RWC (1 << 9)
262 #define OHCI_CTRL_RWE (1 << 10)
263
264
265 # define OHCI_USB_RESET (0 << 6)
266 # define OHCI_USB_RESUME (1 << 6)
267 # define OHCI_USB_OPER (2 << 6)
268 # define OHCI_USB_SUSPEND (3 << 6)
269
270
271
272
273 #define OHCI_HCR (1 << 0)
274 #define OHCI_CLF (1 << 1)
275 #define OHCI_BLF (1 << 2)
276 #define OHCI_OCR (1 << 3)
277 #define OHCI_SOC (3 << 16)
278
279
280
281
282
283
284
285 #define OHCI_INTR_SO (1 << 0)
286 #define OHCI_INTR_WDH (1 << 1)
287 #define OHCI_INTR_SF (1 << 2)
288 #define OHCI_INTR_RD (1 << 3)
289 #define OHCI_INTR_UE (1 << 4)
290 #define OHCI_INTR_FNO (1 << 5)
291 #define OHCI_INTR_RHSC (1 << 6)
292 #define OHCI_INTR_OC (1 << 30)
293 #define OHCI_INTR_MIE (1 << 31)
294
295
296
297
298
299 #define RH_PS_CCS 0x00000001
300 #define RH_PS_PES 0x00000002
301 #define RH_PS_PSS 0x00000004
302 #define RH_PS_POCI 0x00000008
303 #define RH_PS_PRS 0x00000010
304 #define RH_PS_PPS 0x00000100
305 #define RH_PS_LSDA 0x00000200
306 #define RH_PS_CSC 0x00010000
307 #define RH_PS_PESC 0x00020000
308 #define RH_PS_PSSC 0x00040000
309 #define RH_PS_OCIC 0x00080000
310 #define RH_PS_PRSC 0x00100000
311
312
313 #define RH_HS_LPS 0x00000001
314 #define RH_HS_OCI 0x00000002
315 #define RH_HS_DRWE 0x00008000
316 #define RH_HS_LPSC 0x00010000
317 #define RH_HS_OCIC 0x00020000
318 #define RH_HS_CRWE 0x80000000
319
320
321 #define RH_B_DR 0x0000ffff
322 #define RH_B_PPCM 0xffff0000
323
324
325 #define RH_A_NDP (0xff << 0)
326 #define RH_A_PSM (1 << 8)
327 #define RH_A_NPS (1 << 9)
328 #define RH_A_DT (1 << 10)
329 #define RH_A_OCPM (1 << 11)
330 #define RH_A_NOCP (1 << 12)
331 #define RH_A_POTPGT (0xff << 24)
332
333
334
335 typedef struct urb_priv {
336 struct ed *ed;
337 u16 length;
338 u16 td_cnt;
339 struct list_head pending;
340 struct td *td [0];
341
342 } urb_priv_t;
343
344 #define TD_HASH_SIZE 64
345
346 #define TD_HASH_FUNC(td_dma) ((td_dma ^ (td_dma >> 6)) % TD_HASH_SIZE)
347
348
349
350
351
352
353
354
355
356 enum ohci_rh_state {
357 OHCI_RH_HALTED,
358 OHCI_RH_SUSPENDED,
359 OHCI_RH_RUNNING
360 };
361
362 struct ohci_hcd {
363 spinlock_t lock;
364
365
366
367
368 struct ohci_regs __iomem *regs;
369
370
371
372
373
374
375 struct ohci_hcca *hcca;
376 dma_addr_t hcca_dma;
377
378 struct ed *ed_rm_list;
379
380 struct ed *ed_bulktail;
381 struct ed *ed_controltail;
382 struct ed *periodic [NUM_INTS];
383
384 void (*start_hnp)(struct ohci_hcd *ohci);
385
386
387
388
389
390
391 struct dma_pool *td_cache;
392 struct dma_pool *ed_cache;
393 struct td *td_hash [TD_HASH_SIZE];
394 struct td *dl_start, *dl_end;
395 struct list_head pending;
396 struct list_head eds_in_use;
397
398
399
400
401 enum ohci_rh_state rh_state;
402 int num_ports;
403 int load [NUM_INTS];
404 u32 hc_control;
405 unsigned long next_statechange;
406 u32 fminterval;
407 unsigned autostop:1;
408 unsigned working:1;
409 unsigned restart_work:1;
410
411 unsigned long flags;
412 #define OHCI_QUIRK_AMD756 0x01
413 #define OHCI_QUIRK_SUPERIO 0x02
414 #define OHCI_QUIRK_INITRESET 0x04
415 #define OHCI_QUIRK_BE_DESC 0x08
416 #define OHCI_QUIRK_BE_MMIO 0x10
417 #define OHCI_QUIRK_ZFMICRO 0x20
418 #define OHCI_QUIRK_NEC 0x40
419 #define OHCI_QUIRK_FRAME_NO 0x80
420 #define OHCI_QUIRK_HUB_POWER 0x100
421 #define OHCI_QUIRK_AMD_PLL 0x200
422 #define OHCI_QUIRK_AMD_PREFETCH 0x400
423 #define OHCI_QUIRK_GLOBAL_SUSPEND 0x800
424 #define OHCI_QUIRK_QEMU 0x1000
425
426
427
428 unsigned prev_frame_no;
429 unsigned wdh_cnt, prev_wdh_cnt;
430 u32 prev_donehead;
431 struct timer_list io_watchdog;
432
433 struct work_struct nec_work;
434
435 struct dentry *debug_dir;
436
437
438 unsigned long priv[0] __aligned(sizeof(s64));
439
440 };
441
442 #ifdef CONFIG_USB_PCI
443 static inline int quirk_nec(struct ohci_hcd *ohci)
444 {
445 return ohci->flags & OHCI_QUIRK_NEC;
446 }
447 static inline int quirk_zfmicro(struct ohci_hcd *ohci)
448 {
449 return ohci->flags & OHCI_QUIRK_ZFMICRO;
450 }
451 static inline int quirk_amdiso(struct ohci_hcd *ohci)
452 {
453 return ohci->flags & OHCI_QUIRK_AMD_PLL;
454 }
455 static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
456 {
457 return ohci->flags & OHCI_QUIRK_AMD_PREFETCH;
458 }
459 #else
460 static inline int quirk_nec(struct ohci_hcd *ohci)
461 {
462 return 0;
463 }
464 static inline int quirk_zfmicro(struct ohci_hcd *ohci)
465 {
466 return 0;
467 }
468 static inline int quirk_amdiso(struct ohci_hcd *ohci)
469 {
470 return 0;
471 }
472 static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
473 {
474 return 0;
475 }
476 #endif
477
478
479 static inline struct ohci_hcd *hcd_to_ohci (struct usb_hcd *hcd)
480 {
481 return (struct ohci_hcd *) (hcd->hcd_priv);
482 }
483 static inline struct usb_hcd *ohci_to_hcd (const struct ohci_hcd *ohci)
484 {
485 return container_of ((void *) ohci, struct usb_hcd, hcd_priv);
486 }
487
488
489
490 #define ohci_dbg(ohci, fmt, args...) \
491 dev_dbg (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
492 #define ohci_err(ohci, fmt, args...) \
493 dev_err (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
494 #define ohci_info(ohci, fmt, args...) \
495 dev_info (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
496 #define ohci_warn(ohci, fmt, args...) \
497 dev_warn (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536 #ifdef CONFIG_USB_OHCI_BIG_ENDIAN_DESC
537 #ifdef CONFIG_USB_OHCI_LITTLE_ENDIAN
538 #define big_endian_desc(ohci) (ohci->flags & OHCI_QUIRK_BE_DESC)
539 #else
540 #define big_endian_desc(ohci) 1
541 #endif
542 #else
543 #define big_endian_desc(ohci) 0
544 #endif
545
546 #ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
547 #ifdef CONFIG_USB_OHCI_LITTLE_ENDIAN
548 #define big_endian_mmio(ohci) (ohci->flags & OHCI_QUIRK_BE_MMIO)
549 #else
550 #define big_endian_mmio(ohci) 1
551 #endif
552 #else
553 #define big_endian_mmio(ohci) 0
554 #endif
555
556
557
558
559
560
561 static inline unsigned int _ohci_readl (const struct ohci_hcd *ohci,
562 __hc32 __iomem * regs)
563 {
564 #ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
565 return big_endian_mmio(ohci) ?
566 readl_be (regs) :
567 readl (regs);
568 #else
569 return readl (regs);
570 #endif
571 }
572
573 static inline void _ohci_writel (const struct ohci_hcd *ohci,
574 const unsigned int val, __hc32 __iomem *regs)
575 {
576 #ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
577 big_endian_mmio(ohci) ?
578 writel_be (val, regs) :
579 writel (val, regs);
580 #else
581 writel (val, regs);
582 #endif
583 }
584
585 #define ohci_readl(o,r) _ohci_readl(o,r)
586 #define ohci_writel(o,v,r) _ohci_writel(o,v,r)
587
588
589
590
591
592 static inline __hc16 cpu_to_hc16 (const struct ohci_hcd *ohci, const u16 x)
593 {
594 return big_endian_desc(ohci) ?
595 (__force __hc16)cpu_to_be16(x) :
596 (__force __hc16)cpu_to_le16(x);
597 }
598
599 static inline __hc16 cpu_to_hc16p (const struct ohci_hcd *ohci, const u16 *x)
600 {
601 return big_endian_desc(ohci) ?
602 cpu_to_be16p(x) :
603 cpu_to_le16p(x);
604 }
605
606 static inline __hc32 cpu_to_hc32 (const struct ohci_hcd *ohci, const u32 x)
607 {
608 return big_endian_desc(ohci) ?
609 (__force __hc32)cpu_to_be32(x) :
610 (__force __hc32)cpu_to_le32(x);
611 }
612
613 static inline __hc32 cpu_to_hc32p (const struct ohci_hcd *ohci, const u32 *x)
614 {
615 return big_endian_desc(ohci) ?
616 cpu_to_be32p(x) :
617 cpu_to_le32p(x);
618 }
619
620
621 static inline u16 hc16_to_cpu (const struct ohci_hcd *ohci, const __hc16 x)
622 {
623 return big_endian_desc(ohci) ?
624 be16_to_cpu((__force __be16)x) :
625 le16_to_cpu((__force __le16)x);
626 }
627
628 static inline u16 hc16_to_cpup (const struct ohci_hcd *ohci, const __hc16 *x)
629 {
630 return big_endian_desc(ohci) ?
631 be16_to_cpup((__force __be16 *)x) :
632 le16_to_cpup((__force __le16 *)x);
633 }
634
635 static inline u32 hc32_to_cpu (const struct ohci_hcd *ohci, const __hc32 x)
636 {
637 return big_endian_desc(ohci) ?
638 be32_to_cpu((__force __be32)x) :
639 le32_to_cpu((__force __le32)x);
640 }
641
642 static inline u32 hc32_to_cpup (const struct ohci_hcd *ohci, const __hc32 *x)
643 {
644 return big_endian_desc(ohci) ?
645 be32_to_cpup((__force __be32 *)x) :
646 le32_to_cpup((__force __le32 *)x);
647 }
648
649
650
651
652
653
654
655
656
657
658
659
660
661 static inline u16 ohci_frame_no(const struct ohci_hcd *ohci)
662 {
663 u32 tmp;
664 if (big_endian_desc(ohci)) {
665 tmp = be32_to_cpup((__force __be32 *)&ohci->hcca->frame_no);
666 if (!(ohci->flags & OHCI_QUIRK_FRAME_NO))
667 tmp >>= 16;
668 } else
669 tmp = le32_to_cpup((__force __le32 *)&ohci->hcca->frame_no);
670
671 return (u16)tmp;
672 }
673
674 static inline __hc16 *ohci_hwPSWp(const struct ohci_hcd *ohci,
675 const struct td *td, int index)
676 {
677 return (__hc16 *)(big_endian_desc(ohci) ?
678 &td->hwPSW[index ^ 1] : &td->hwPSW[index]);
679 }
680
681 static inline u16 ohci_hwPSW(const struct ohci_hcd *ohci,
682 const struct td *td, int index)
683 {
684 return hc16_to_cpup(ohci, ohci_hwPSWp(ohci, td, index));
685 }
686
687
688
689 #define FI 0x2edf
690 #define FSMP(fi) (0x7fff & ((6 * ((fi) - 210)) / 7))
691 #define FIT (1 << 31)
692 #define LSTHRESH 0x628
693
694 static inline void periodic_reinit (struct ohci_hcd *ohci)
695 {
696 u32 fi = ohci->fminterval & 0x03fff;
697 u32 fit = ohci_readl(ohci, &ohci->regs->fminterval) & FIT;
698
699 ohci_writel (ohci, (fit ^ FIT) | ohci->fminterval,
700 &ohci->regs->fminterval);
701 ohci_writel (ohci, ((9 * fi) / 10) & 0x3fff,
702 &ohci->regs->periodicstart);
703 }
704
705
706
707
708
709 #define read_roothub(hc, register, mask) ({ \
710 u32 temp = ohci_readl (hc, &hc->regs->roothub.register); \
711 if (temp == -1) \
712 hc->rh_state = OHCI_RH_HALTED; \
713 else if (hc->flags & OHCI_QUIRK_AMD756) \
714 while (temp & mask) \
715 temp = ohci_readl (hc, &hc->regs->roothub.register); \
716 temp; })
717
718 static inline u32 roothub_a (struct ohci_hcd *hc)
719 { return read_roothub (hc, a, 0xfc0fe000); }
720 static inline u32 roothub_b (struct ohci_hcd *hc)
721 { return ohci_readl (hc, &hc->regs->roothub.b); }
722 static inline u32 roothub_status (struct ohci_hcd *hc)
723 { return ohci_readl (hc, &hc->regs->roothub.status); }
724 static inline u32 roothub_portstatus (struct ohci_hcd *hc, int i)
725 { return read_roothub (hc, portstatus [i], 0xffe0fce0); }
726
727
728
729 struct ohci_driver_overrides {
730 const char *product_desc;
731 size_t extra_priv_size;
732 int (*reset)(struct usb_hcd *hcd);
733 };
734
735 extern void ohci_init_driver(struct hc_driver *drv,
736 const struct ohci_driver_overrides *over);
737 extern int ohci_restart(struct ohci_hcd *ohci);
738 extern int ohci_setup(struct usb_hcd *hcd);
739 extern int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup);
740 extern int ohci_resume(struct usb_hcd *hcd, bool hibernated);
741 extern int ohci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
742 u16 wIndex, char *buf, u16 wLength);
743 extern int ohci_hub_status_data(struct usb_hcd *hcd, char *buf);