1#ifndef __LINUX_UHCI_HCD_H
2#define __LINUX_UHCI_HCD_H
3
4#include <linux/list.h>
5#include <linux/usb.h>
6
7#define usb_packetid(pipe) (usb_pipein(pipe) ? USB_PID_IN : USB_PID_OUT)
8#define PIPE_DEVEP_MASK 0x0007ff00
9
10
11
12
13
14
15
16#define USBCMD 0
17#define USBCMD_RS 0x0001
18#define USBCMD_HCRESET 0x0002
19#define USBCMD_GRESET 0x0004
20#define USBCMD_EGSM 0x0008
21#define USBCMD_FGR 0x0010
22#define USBCMD_SWDBG 0x0020
23#define USBCMD_CF 0x0040
24#define USBCMD_MAXP 0x0080
25
26
27#define USBSTS 2
28#define USBSTS_USBINT 0x0001
29#define USBSTS_ERROR 0x0002
30#define USBSTS_RD 0x0004
31#define USBSTS_HSE 0x0008
32#define USBSTS_HCPE 0x0010
33
34#define USBSTS_HCH 0x0020
35
36
37#define USBINTR 4
38#define USBINTR_TIMEOUT 0x0001
39#define USBINTR_RESUME 0x0002
40#define USBINTR_IOC 0x0004
41#define USBINTR_SP 0x0008
42
43#define USBFRNUM 6
44#define USBFLBASEADD 8
45#define USBSOF 12
46#define USBSOF_DEFAULT 64
47
48
49#define USBPORTSC1 16
50#define USBPORTSC2 18
51#define USBPORTSC_CCS 0x0001
52
53#define USBPORTSC_CSC 0x0002
54#define USBPORTSC_PE 0x0004
55#define USBPORTSC_PEC 0x0008
56#define USBPORTSC_DPLUS 0x0010
57#define USBPORTSC_DMINUS 0x0020
58#define USBPORTSC_RD 0x0040
59#define USBPORTSC_RES1 0x0080
60#define USBPORTSC_LSDA 0x0100
61#define USBPORTSC_PR 0x0200
62
63#define USBPORTSC_OC 0x0400
64#define USBPORTSC_OCC 0x0800
65#define USBPORTSC_SUSP 0x1000
66#define USBPORTSC_RES2 0x2000
67#define USBPORTSC_RES3 0x4000
68#define USBPORTSC_RES4 0x8000
69
70
71#define USBLEGSUP 0xc0
72#define USBLEGSUP_DEFAULT 0x2000
73#define USBLEGSUP_RWC 0x8f00
74#define USBLEGSUP_RO 0x5040
75
76
77#define USBRES_INTEL 0xc4
78#define USBPORT1EN 0x01
79#define USBPORT2EN 0x02
80
81#define UHCI_PTR_BITS(uhci) cpu_to_hc32((uhci), 0x000F)
82#define UHCI_PTR_TERM(uhci) cpu_to_hc32((uhci), 0x0001)
83#define UHCI_PTR_QH(uhci) cpu_to_hc32((uhci), 0x0002)
84#define UHCI_PTR_DEPTH(uhci) cpu_to_hc32((uhci), 0x0004)
85#define UHCI_PTR_BREADTH(uhci) cpu_to_hc32((uhci), 0x0000)
86
87#define UHCI_NUMFRAMES 1024
88#define UHCI_MAX_SOF_NUMBER 2047
89#define CAN_SCHEDULE_FRAMES 1000
90
91#define MAX_PHASE 32
92
93
94
95#define FSBR_OFF_DELAY msecs_to_jiffies(10)
96
97
98#define QH_WAIT_TIMEOUT msecs_to_jiffies(200)
99
100
101
102
103
104
105
106
107
108
109#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_DESC
110typedef __u32 __bitwise __hc32;
111typedef __u16 __bitwise __hc16;
112#else
113#define __hc32 __le32
114#define __hc16 __le16
115#endif
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141#define QH_STATE_IDLE 1
142#define QH_STATE_UNLINKING 2
143
144
145#define QH_STATE_ACTIVE 3
146
147struct uhci_qh {
148
149 __hc32 link;
150 __hc32 element;
151
152
153 dma_addr_t dma_handle;
154
155 struct list_head node;
156 struct usb_host_endpoint *hep;
157 struct usb_device *udev;
158 struct list_head queue;
159 struct uhci_td *dummy_td;
160 struct uhci_td *post_td;
161
162 struct usb_iso_packet_descriptor *iso_packet_desc;
163
164 unsigned long advance_jiffies;
165 unsigned int unlink_frame;
166 unsigned int period;
167 short phase;
168 short load;
169 unsigned int iso_frame;
170
171 int state;
172 int type;
173 int skel;
174
175 unsigned int initial_toggle:1;
176 unsigned int needs_fixup:1;
177 unsigned int is_stopped:1;
178 unsigned int wait_expired:1;
179 unsigned int bandwidth_reserved:1;
180
181} __attribute__((aligned(16)));
182
183
184
185
186
187#define qh_element(qh) ACCESS_ONCE((qh)->element)
188
189#define LINK_TO_QH(uhci, qh) (UHCI_PTR_QH((uhci)) | \
190 cpu_to_hc32((uhci), (qh)->dma_handle))
191
192
193
194
195
196
197
198
199
200#define TD_CTRL_SPD (1 << 29)
201#define TD_CTRL_C_ERR_MASK (3 << 27)
202#define TD_CTRL_C_ERR_SHIFT 27
203#define TD_CTRL_LS (1 << 26)
204#define TD_CTRL_IOS (1 << 25)
205#define TD_CTRL_IOC (1 << 24)
206#define TD_CTRL_ACTIVE (1 << 23)
207#define TD_CTRL_STALLED (1 << 22)
208#define TD_CTRL_DBUFERR (1 << 21)
209#define TD_CTRL_BABBLE (1 << 20)
210#define TD_CTRL_NAK (1 << 19)
211#define TD_CTRL_CRCTIMEO (1 << 18)
212#define TD_CTRL_BITSTUFF (1 << 17)
213#define TD_CTRL_ACTLEN_MASK 0x7FF
214
215#define TD_CTRL_ANY_ERROR (TD_CTRL_STALLED | TD_CTRL_DBUFERR | \
216 TD_CTRL_BABBLE | TD_CTRL_CRCTIME | \
217 TD_CTRL_BITSTUFF)
218
219#define uhci_maxerr(err) ((err) << TD_CTRL_C_ERR_SHIFT)
220#define uhci_status_bits(ctrl_sts) ((ctrl_sts) & 0xF60000)
221#define uhci_actual_length(ctrl_sts) (((ctrl_sts) + 1) & \
222 TD_CTRL_ACTLEN_MASK)
223
224
225
226
227#define td_token(uhci, td) hc32_to_cpu((uhci), (td)->token)
228#define TD_TOKEN_DEVADDR_SHIFT 8
229#define TD_TOKEN_TOGGLE_SHIFT 19
230#define TD_TOKEN_TOGGLE (1 << 19)
231#define TD_TOKEN_EXPLEN_SHIFT 21
232#define TD_TOKEN_EXPLEN_MASK 0x7FF
233#define TD_TOKEN_PID_MASK 0xFF
234
235#define uhci_explen(len) ((((len) - 1) & TD_TOKEN_EXPLEN_MASK) << \
236 TD_TOKEN_EXPLEN_SHIFT)
237
238#define uhci_expected_length(token) ((((token) >> TD_TOKEN_EXPLEN_SHIFT) + \
239 1) & TD_TOKEN_EXPLEN_MASK)
240#define uhci_toggle(token) (((token) >> TD_TOKEN_TOGGLE_SHIFT) & 1)
241#define uhci_endpoint(token) (((token) >> 15) & 0xf)
242#define uhci_devaddr(token) (((token) >> TD_TOKEN_DEVADDR_SHIFT) & 0x7f)
243#define uhci_devep(token) (((token) >> TD_TOKEN_DEVADDR_SHIFT) & 0x7ff)
244#define uhci_packetid(token) ((token) & TD_TOKEN_PID_MASK)
245#define uhci_packetout(token) (uhci_packetid(token) != USB_PID_IN)
246#define uhci_packetin(token) (uhci_packetid(token) == USB_PID_IN)
247
248
249
250
251
252
253
254
255
256
257
258struct uhci_td {
259
260 __hc32 link;
261 __hc32 status;
262 __hc32 token;
263 __hc32 buffer;
264
265
266 dma_addr_t dma_handle;
267
268 struct list_head list;
269
270 int frame;
271 struct list_head fl_list;
272} __attribute__((aligned(16)));
273
274
275
276
277
278#define td_status(uhci, td) hc32_to_cpu((uhci), \
279 ACCESS_ONCE((td)->status))
280
281#define LINK_TO_TD(uhci, td) (cpu_to_hc32((uhci), (td)->dma_handle))
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329#define UHCI_NUM_SKELQH 11
330#define SKEL_UNLINK 0
331#define skel_unlink_qh skelqh[SKEL_UNLINK]
332#define SKEL_ISO 1
333#define skel_iso_qh skelqh[SKEL_ISO]
334
335#define SKEL_INDEX(exponent) (9 - exponent)
336#define SKEL_ASYNC 9
337#define skel_async_qh skelqh[SKEL_ASYNC]
338#define SKEL_TERM 10
339#define skel_term_qh skelqh[SKEL_TERM]
340
341
342#define SKEL_LS_CONTROL 20
343#define SKEL_FS_CONTROL 21
344#define SKEL_FSBR SKEL_FS_CONTROL
345#define SKEL_BULK 22
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361enum uhci_rh_state {
362
363
364 UHCI_RH_RESET,
365 UHCI_RH_SUSPENDED,
366
367 UHCI_RH_AUTO_STOPPED,
368 UHCI_RH_RESUMING,
369
370
371
372 UHCI_RH_SUSPENDING,
373
374
375
376 UHCI_RH_RUNNING,
377 UHCI_RH_RUNNING_NODEVS,
378};
379
380
381
382
383struct uhci_hcd {
384
385
386 struct dentry *dentry;
387
388
389 unsigned long io_addr;
390
391
392 void __iomem *regs;
393
394 struct dma_pool *qh_pool;
395 struct dma_pool *td_pool;
396
397 struct uhci_td *term_td;
398 struct uhci_qh *skelqh[UHCI_NUM_SKELQH];
399 struct uhci_qh *next_qh;
400
401 spinlock_t lock;
402
403 dma_addr_t frame_dma_handle;
404 __hc32 *frame;
405 void **frame_cpu;
406
407 enum uhci_rh_state rh_state;
408 unsigned long auto_stop_time;
409
410 unsigned int frame_number;
411 unsigned int is_stopped;
412#define UHCI_IS_STOPPED 9999
413 unsigned int last_iso_frame;
414 unsigned int cur_iso_frame;
415
416 unsigned int scan_in_progress:1;
417 unsigned int need_rescan:1;
418 unsigned int dead:1;
419 unsigned int RD_enable:1;
420
421
422 unsigned int is_initialized:1;
423 unsigned int fsbr_is_on:1;
424 unsigned int fsbr_is_wanted:1;
425 unsigned int fsbr_expiring:1;
426
427 struct timer_list fsbr_timer;
428
429
430 unsigned int oc_low:1;
431 unsigned int wait_for_hp:1;
432 unsigned int big_endian_mmio:1;
433 unsigned int big_endian_desc:1;
434
435
436 unsigned long port_c_suspend;
437 unsigned long resuming_ports;
438 unsigned long ports_timeout;
439
440 struct list_head idle_qh_list;
441
442 int rh_numports;
443
444 wait_queue_head_t waitqh;
445 int num_waiting;
446
447 int total_load;
448 short load[MAX_PHASE];
449
450
451 void (*reset_hc) (struct uhci_hcd *uhci);
452 int (*check_and_reset_hc) (struct uhci_hcd *uhci);
453
454 void (*configure_hc) (struct uhci_hcd *uhci);
455
456 int (*resume_detect_interrupts_are_broken) (struct uhci_hcd *uhci);
457
458 int (*global_suspend_mode_is_broken) (struct uhci_hcd *uhci);
459};
460
461
462static inline struct uhci_hcd *hcd_to_uhci(struct usb_hcd *hcd)
463{
464 return (struct uhci_hcd *) (hcd->hcd_priv);
465}
466static inline struct usb_hcd *uhci_to_hcd(struct uhci_hcd *uhci)
467{
468 return container_of((void *) uhci, struct usb_hcd, hcd_priv);
469}
470
471#define uhci_dev(u) (uhci_to_hcd(u)->self.controller)
472
473
474#define uhci_frame_before_eq(f1, f2) (0 <= (int) ((f2) - (f1)))
475
476
477
478
479
480struct urb_priv {
481 struct list_head node;
482
483 struct urb *urb;
484
485 struct uhci_qh *qh;
486 struct list_head td_list;
487
488 unsigned fsbr:1;
489};
490
491
492
493
494#define PCI_VENDOR_ID_GENESYS 0x17a0
495#define PCI_DEVICE_ID_GL880S_UHCI 0x8083
496
497
498
499
500
501
502
503#ifndef CONFIG_USB_UHCI_SUPPORT_NON_PCI_HC
504
505static inline u32 uhci_readl(const struct uhci_hcd *uhci, int reg)
506{
507 return inl(uhci->io_addr + reg);
508}
509
510static inline void uhci_writel(const struct uhci_hcd *uhci, u32 val, int reg)
511{
512 outl(val, uhci->io_addr + reg);
513}
514
515static inline u16 uhci_readw(const struct uhci_hcd *uhci, int reg)
516{
517 return inw(uhci->io_addr + reg);
518}
519
520static inline void uhci_writew(const struct uhci_hcd *uhci, u16 val, int reg)
521{
522 outw(val, uhci->io_addr + reg);
523}
524
525static inline u8 uhci_readb(const struct uhci_hcd *uhci, int reg)
526{
527 return inb(uhci->io_addr + reg);
528}
529
530static inline void uhci_writeb(const struct uhci_hcd *uhci, u8 val, int reg)
531{
532 outb(val, uhci->io_addr + reg);
533}
534
535#else
536
537#ifdef CONFIG_PCI
538
539#define uhci_has_pci_registers(u) ((u)->io_addr != 0)
540#else
541
542#define uhci_has_pci_registers(u) 0
543#endif
544
545#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_MMIO
546
547#define uhci_big_endian_mmio(u) ((u)->big_endian_mmio)
548#else
549#define uhci_big_endian_mmio(u) 0
550#endif
551
552static inline u32 uhci_readl(const struct uhci_hcd *uhci, int reg)
553{
554 if (uhci_has_pci_registers(uhci))
555 return inl(uhci->io_addr + reg);
556#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_MMIO
557 else if (uhci_big_endian_mmio(uhci))
558 return readl_be(uhci->regs + reg);
559#endif
560 else
561 return readl(uhci->regs + reg);
562}
563
564static inline void uhci_writel(const struct uhci_hcd *uhci, u32 val, int reg)
565{
566 if (uhci_has_pci_registers(uhci))
567 outl(val, uhci->io_addr + reg);
568#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_MMIO
569 else if (uhci_big_endian_mmio(uhci))
570 writel_be(val, uhci->regs + reg);
571#endif
572 else
573 writel(val, uhci->regs + reg);
574}
575
576static inline u16 uhci_readw(const struct uhci_hcd *uhci, int reg)
577{
578 if (uhci_has_pci_registers(uhci))
579 return inw(uhci->io_addr + reg);
580#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_MMIO
581 else if (uhci_big_endian_mmio(uhci))
582 return readw_be(uhci->regs + reg);
583#endif
584 else
585 return readw(uhci->regs + reg);
586}
587
588static inline void uhci_writew(const struct uhci_hcd *uhci, u16 val, int reg)
589{
590 if (uhci_has_pci_registers(uhci))
591 outw(val, uhci->io_addr + reg);
592#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_MMIO
593 else if (uhci_big_endian_mmio(uhci))
594 writew_be(val, uhci->regs + reg);
595#endif
596 else
597 writew(val, uhci->regs + reg);
598}
599
600static inline u8 uhci_readb(const struct uhci_hcd *uhci, int reg)
601{
602 if (uhci_has_pci_registers(uhci))
603 return inb(uhci->io_addr + reg);
604#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_MMIO
605 else if (uhci_big_endian_mmio(uhci))
606 return readb_be(uhci->regs + reg);
607#endif
608 else
609 return readb(uhci->regs + reg);
610}
611
612static inline void uhci_writeb(const struct uhci_hcd *uhci, u8 val, int reg)
613{
614 if (uhci_has_pci_registers(uhci))
615 outb(val, uhci->io_addr + reg);
616#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_MMIO
617 else if (uhci_big_endian_mmio(uhci))
618 writeb_be(val, uhci->regs + reg);
619#endif
620 else
621 writeb(val, uhci->regs + reg);
622}
623#endif
624
625
626
627
628
629
630
631#ifdef CONFIG_USB_UHCI_BIG_ENDIAN_DESC
632#define uhci_big_endian_desc(u) ((u)->big_endian_desc)
633
634
635static inline __hc32 cpu_to_hc32(const struct uhci_hcd *uhci, const u32 x)
636{
637 return uhci_big_endian_desc(uhci)
638 ? (__force __hc32)cpu_to_be32(x)
639 : (__force __hc32)cpu_to_le32(x);
640}
641
642
643static inline u32 hc32_to_cpu(const struct uhci_hcd *uhci, const __hc32 x)
644{
645 return uhci_big_endian_desc(uhci)
646 ? be32_to_cpu((__force __be32)x)
647 : le32_to_cpu((__force __le32)x);
648}
649
650#else
651
652static inline __hc32 cpu_to_hc32(const struct uhci_hcd *uhci, const u32 x)
653{
654 return cpu_to_le32(x);
655}
656
657
658static inline u32 hc32_to_cpu(const struct uhci_hcd *uhci, const __hc32 x)
659{
660 return le32_to_cpu(x);
661}
662#endif
663
664#endif
665