1
2
3
4
5
6
7
8
9
10
11
12
13
14
15typedef __u32 __bitwise __hc32;
16typedef __u16 __bitwise __hc16;
17
18
19
20
21
22
23
24
25struct ed {
26
27 __hc32 hwINFO;
28
29#define ED_DEQUEUE (1 << 27)
30
31#define ED_ISO (1 << 15)
32#define ED_SKIP (1 << 14)
33#define ED_LOWSPEED (1 << 13)
34#define ED_OUT (0x01 << 11)
35#define ED_IN (0x02 << 11)
36 __hc32 hwTailP;
37 __hc32 hwHeadP;
38#define ED_C (0x02)
39#define ED_H (0x01)
40 __hc32 hwNextED;
41
42
43 dma_addr_t dma;
44 struct td *dummy;
45
46
47 struct ed *ed_next;
48 struct ed *ed_prev;
49 struct list_head td_list;
50 struct list_head in_use_list;
51
52
53
54
55 u8 state;
56#define ED_IDLE 0x00
57#define ED_UNLINK 0x01
58#define ED_OPER 0x02
59
60 u8 type;
61
62
63 u8 branch;
64 u16 interval;
65 u16 load;
66 u16 last_iso;
67
68
69 u16 tick;
70
71
72 unsigned takeback_wdh_cnt;
73 struct td *pending_td;
74#define OKAY_TO_TAKEBACK(ohci, ed) \
75 ((int) (ohci->wdh_cnt - ed->takeback_wdh_cnt) >= 0)
76
77} __attribute__ ((aligned(16)));
78
79#define ED_MASK ((u32)~0x0f)
80
81
82
83
84
85
86
87struct td {
88
89 __hc32 hwINFO;
90
91
92#define TD_CC 0xf0000000
93#define TD_CC_GET(td_p) ((td_p >>28) & 0x0f)
94
95#define TD_DI 0x00E00000
96#define TD_DI_SET(X) (((X) & 0x07)<< 21)
97
98
99
100#define TD_DONE 0x00020000
101#define TD_ISO 0x00010000
102
103
104#define TD_EC 0x0C000000
105#define TD_T 0x03000000
106#define TD_T_DATA0 0x02000000
107#define TD_T_DATA1 0x03000000
108#define TD_T_TOGGLE 0x00000000
109#define TD_DP 0x00180000
110#define TD_DP_SETUP 0x00000000
111#define TD_DP_IN 0x00100000
112#define TD_DP_OUT 0x00080000
113
114#define TD_R 0x00040000
115
116
117
118 __hc32 hwCBP;
119 __hc32 hwNextTD;
120 __hc32 hwBE;
121
122
123
124
125#define MAXPSW 2
126 __hc16 hwPSW [MAXPSW];
127
128
129 __u8 index;
130 struct ed *ed;
131 struct td *td_hash;
132 struct td *next_dl_td;
133 struct urb *urb;
134
135 dma_addr_t td_dma;
136 dma_addr_t data_dma;
137
138 struct list_head td_list;
139} __attribute__ ((aligned(32)));
140
141#define TD_MASK ((u32)~0x1f)
142
143
144
145
146#define TD_CC_NOERROR 0x00
147#define TD_CC_CRC 0x01
148#define TD_CC_BITSTUFFING 0x02
149#define TD_CC_DATATOGGLEM 0x03
150#define TD_CC_STALL 0x04
151#define TD_DEVNOTRESP 0x05
152#define TD_PIDCHECKFAIL 0x06
153#define TD_UNEXPECTEDPID 0x07
154#define TD_DATAOVERRUN 0x08
155#define TD_DATAUNDERRUN 0x09
156
157#define TD_BUFFEROVERRUN 0x0C
158#define TD_BUFFERUNDERRUN 0x0D
159
160#define TD_NOTACCESSED 0x0F
161
162
163
164static const int cc_to_error [16] = {
165 0,
166 -EILSEQ,
167 -EPROTO,
168 -EILSEQ,
169 -EPIPE,
170 -ETIME,
171 -EPROTO,
172 -EPROTO,
173 -EOVERFLOW,
174 -EREMOTEIO,
175 -EIO,
176 -EIO,
177 -ECOMM,
178 -ENOSR,
179 -EALREADY,
180 -EALREADY
181};
182
183
184
185
186
187
188
189struct ohci_hcca {
190#define NUM_INTS 32
191 __hc32 int_table [NUM_INTS];
192
193
194
195
196
197
198 __hc32 frame_no;
199 __hc32 done_head;
200 u8 reserved_for_hc [116];
201 u8 what [4];
202} __attribute__ ((aligned(256)));
203
204
205
206
207
208
209struct ohci_regs {
210
211 __hc32 revision;
212 __hc32 control;
213 __hc32 cmdstatus;
214 __hc32 intrstatus;
215 __hc32 intrenable;
216 __hc32 intrdisable;
217
218
219 __hc32 hcca;
220 __hc32 ed_periodcurrent;
221 __hc32 ed_controlhead;
222 __hc32 ed_controlcurrent;
223 __hc32 ed_bulkhead;
224 __hc32 ed_bulkcurrent;
225 __hc32 donehead;
226
227
228 __hc32 fminterval;
229 __hc32 fmremaining;
230 __hc32 fmnumber;
231 __hc32 periodicstart;
232 __hc32 lsthresh;
233
234
235 struct ohci_roothub_regs {
236 __hc32 a;
237 __hc32 b;
238 __hc32 status;
239#define MAX_ROOT_PORTS 15
240 __hc32 portstatus [MAX_ROOT_PORTS];
241 } roothub;
242
243
244
245} __attribute__ ((aligned(32)));
246
247
248
249
250
251
252
253#define OHCI_CTRL_CBSR (3 << 0)
254#define OHCI_CTRL_PLE (1 << 2)
255#define OHCI_CTRL_IE (1 << 3)
256#define OHCI_CTRL_CLE (1 << 4)
257#define OHCI_CTRL_BLE (1 << 5)
258#define OHCI_CTRL_HCFS (3 << 6)
259#define OHCI_CTRL_IR (1 << 8)
260#define OHCI_CTRL_RWC (1 << 9)
261#define OHCI_CTRL_RWE (1 << 10)
262
263
264# define OHCI_USB_RESET (0 << 6)
265# define OHCI_USB_RESUME (1 << 6)
266# define OHCI_USB_OPER (2 << 6)
267# define OHCI_USB_SUSPEND (3 << 6)
268
269
270
271
272#define OHCI_HCR (1 << 0)
273#define OHCI_CLF (1 << 1)
274#define OHCI_BLF (1 << 2)
275#define OHCI_OCR (1 << 3)
276#define OHCI_SOC (3 << 16)
277
278
279
280
281
282
283
284#define OHCI_INTR_SO (1 << 0)
285#define OHCI_INTR_WDH (1 << 1)
286#define OHCI_INTR_SF (1 << 2)
287#define OHCI_INTR_RD (1 << 3)
288#define OHCI_INTR_UE (1 << 4)
289#define OHCI_INTR_FNO (1 << 5)
290#define OHCI_INTR_RHSC (1 << 6)
291#define OHCI_INTR_OC (1 << 30)
292#define OHCI_INTR_MIE (1 << 31)
293
294
295
296
297
298#define RH_PS_CCS 0x00000001
299#define RH_PS_PES 0x00000002
300#define RH_PS_PSS 0x00000004
301#define RH_PS_POCI 0x00000008
302#define RH_PS_PRS 0x00000010
303#define RH_PS_PPS 0x00000100
304#define RH_PS_LSDA 0x00000200
305#define RH_PS_CSC 0x00010000
306#define RH_PS_PESC 0x00020000
307#define RH_PS_PSSC 0x00040000
308#define RH_PS_OCIC 0x00080000
309#define RH_PS_PRSC 0x00100000
310
311
312#define RH_HS_LPS 0x00000001
313#define RH_HS_OCI 0x00000002
314#define RH_HS_DRWE 0x00008000
315#define RH_HS_LPSC 0x00010000
316#define RH_HS_OCIC 0x00020000
317#define RH_HS_CRWE 0x80000000
318
319
320#define RH_B_DR 0x0000ffff
321#define RH_B_PPCM 0xffff0000
322
323
324#define RH_A_NDP (0xff << 0)
325#define RH_A_PSM (1 << 8)
326#define RH_A_NPS (1 << 9)
327#define RH_A_DT (1 << 10)
328#define RH_A_OCPM (1 << 11)
329#define RH_A_NOCP (1 << 12)
330#define RH_A_POTPGT (0xff << 24)
331
332
333
334typedef struct urb_priv {
335 struct ed *ed;
336 u16 length;
337 u16 td_cnt;
338 struct list_head pending;
339 struct td *td [0];
340
341} urb_priv_t;
342
343#define TD_HASH_SIZE 64
344
345#define TD_HASH_FUNC(td_dma) ((td_dma ^ (td_dma >> 6)) % TD_HASH_SIZE)
346
347
348
349
350
351
352
353
354
355enum ohci_rh_state {
356 OHCI_RH_HALTED,
357 OHCI_RH_SUSPENDED,
358 OHCI_RH_RUNNING
359};
360
361struct ohci_hcd {
362 spinlock_t lock;
363
364
365
366
367 struct ohci_regs __iomem *regs;
368
369
370
371
372
373
374 struct ohci_hcca *hcca;
375 dma_addr_t hcca_dma;
376
377 struct ed *ed_rm_list;
378
379 struct ed *ed_bulktail;
380 struct ed *ed_controltail;
381 struct ed *periodic [NUM_INTS];
382
383 void (*start_hnp)(struct ohci_hcd *ohci);
384
385
386
387
388 struct dma_pool *td_cache;
389 struct dma_pool *ed_cache;
390 struct td *td_hash [TD_HASH_SIZE];
391 struct td *dl_start, *dl_end;
392 struct list_head pending;
393 struct list_head eds_in_use;
394
395
396
397
398 enum ohci_rh_state rh_state;
399 int num_ports;
400 int load [NUM_INTS];
401 u32 hc_control;
402 unsigned long next_statechange;
403 u32 fminterval;
404 unsigned autostop:1;
405 unsigned working:1;
406 unsigned restart_work:1;
407
408 unsigned long flags;
409#define OHCI_QUIRK_AMD756 0x01
410#define OHCI_QUIRK_SUPERIO 0x02
411#define OHCI_QUIRK_INITRESET 0x04
412#define OHCI_QUIRK_BE_DESC 0x08
413#define OHCI_QUIRK_BE_MMIO 0x10
414#define OHCI_QUIRK_ZFMICRO 0x20
415#define OHCI_QUIRK_NEC 0x40
416#define OHCI_QUIRK_FRAME_NO 0x80
417#define OHCI_QUIRK_HUB_POWER 0x100
418#define OHCI_QUIRK_AMD_PLL 0x200
419#define OHCI_QUIRK_AMD_PREFETCH 0x400
420#define OHCI_QUIRK_GLOBAL_SUSPEND 0x800
421#define OHCI_QUIRK_QEMU 0x1000
422
423
424
425 unsigned prev_frame_no;
426 unsigned wdh_cnt, prev_wdh_cnt;
427 u32 prev_donehead;
428 struct timer_list io_watchdog;
429
430 struct work_struct nec_work;
431
432 struct dentry *debug_dir;
433 struct dentry *debug_async;
434 struct dentry *debug_periodic;
435 struct dentry *debug_registers;
436
437
438 unsigned long priv[0] __aligned(sizeof(s64));
439
440};
441
442#ifdef CONFIG_USB_PCI
443static inline int quirk_nec(struct ohci_hcd *ohci)
444{
445 return ohci->flags & OHCI_QUIRK_NEC;
446}
447static inline int quirk_zfmicro(struct ohci_hcd *ohci)
448{
449 return ohci->flags & OHCI_QUIRK_ZFMICRO;
450}
451static inline int quirk_amdiso(struct ohci_hcd *ohci)
452{
453 return ohci->flags & OHCI_QUIRK_AMD_PLL;
454}
455static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
456{
457 return ohci->flags & OHCI_QUIRK_AMD_PREFETCH;
458}
459#else
460static inline int quirk_nec(struct ohci_hcd *ohci)
461{
462 return 0;
463}
464static inline int quirk_zfmicro(struct ohci_hcd *ohci)
465{
466 return 0;
467}
468static inline int quirk_amdiso(struct ohci_hcd *ohci)
469{
470 return 0;
471}
472static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
473{
474 return 0;
475}
476#endif
477
478
479static inline struct ohci_hcd *hcd_to_ohci (struct usb_hcd *hcd)
480{
481 return (struct ohci_hcd *) (hcd->hcd_priv);
482}
483static 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
561static 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
573static 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
592static 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
599static 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
606static 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
613static 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
621static 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
628static 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
635static 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
642static 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
661static 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
674static 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
681static 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
694static 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
718static inline u32 roothub_a (struct ohci_hcd *hc)
719 { return read_roothub (hc, a, 0xfc0fe000); }
720static inline u32 roothub_b (struct ohci_hcd *hc)
721 { return ohci_readl (hc, &hc->regs->roothub.b); }
722static inline u32 roothub_status (struct ohci_hcd *hc)
723 { return ohci_readl (hc, &hc->regs->roothub.status); }
724static inline u32 roothub_portstatus (struct ohci_hcd *hc, int i)
725 { return read_roothub (hc, portstatus [i], 0xffe0fce0); }
726
727
728
729struct ohci_driver_overrides {
730 const char *product_desc;
731 size_t extra_priv_size;
732 int (*reset)(struct usb_hcd *hcd);
733};
734
735extern void ohci_init_driver(struct hc_driver *drv,
736 const struct ohci_driver_overrides *over);
737extern int ohci_restart(struct ohci_hcd *ohci);
738extern int ohci_setup(struct usb_hcd *hcd);
739extern int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup);
740extern int ohci_resume(struct usb_hcd *hcd, bool hibernated);
741extern int ohci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
742 u16 wIndex, char *buf, u16 wLength);
743extern int ohci_hub_status_data(struct usb_hcd *hcd, char *buf);
744