Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
usb
host
ohci.h
Go to the documentation of this file.
1
/*
2
* OHCI HCD (Host Controller Driver) for USB.
3
*
4
* (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
5
* (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
6
*
7
* This file is licenced under the GPL.
8
*/
9
10
/*
11
* __hc32 and __hc16 are "Host Controller" types, they may be equivalent to
12
* __leXX (normally) or __beXX (given OHCI_BIG_ENDIAN), depending on the
13
* host controller implementation.
14
*/
15
typedef
__u32
__bitwise
__hc32
;
16
typedef
__u16
__bitwise
__hc16
;
17
18
/*
19
* OHCI Endpoint Descriptor (ED) ... holds TD queue
20
* See OHCI spec, section 4.2
21
*
22
* This is a "Queue Head" for those transfers, which is why
23
* both EHCI and UHCI call similar structures a "QH".
24
*/
25
struct
ed
{
26
/* first fields are hardware-specified */
27
__hc32
hwINFO
;
/* endpoint config bitmap */
28
/* info bits defined by hcd */
29
#define ED_DEQUEUE (1 << 27)
30
/* info bits defined by the hardware */
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
;
/* tail of TD list */
37
__hc32
hwHeadP
;
/* head of TD list (hc r/w) */
38
#define ED_C (0x02)
/* toggle carry */
39
#define ED_H (0x01)
/* halted */
40
__hc32
hwNextED
;
/* next ED in list */
41
42
/* rest are purely for the driver's use */
43
dma_addr_t
dma
;
/* addr of ED */
44
struct
td
*
dummy
;
/* next TD to activate */
45
46
/* host's view of schedule */
47
struct
ed
*
ed_next
;
/* on schedule or rm_list */
48
struct
ed
*
ed_prev
;
/* for non-interrupt EDs */
49
struct
list_head
td_list
;
/* "shadow list" of our TDs */
50
51
/* create --> IDLE --> OPER --> ... --> IDLE --> destroy
52
* usually: OPER --> UNLINK --> (IDLE | OPER) --> ...
53
*/
54
u8
state
;
/* ED_{IDLE,UNLINK,OPER} */
55
#define ED_IDLE 0x00
/* NOT linked to HC */
56
#define ED_UNLINK 0x01
/* being unlinked from hc */
57
#define ED_OPER 0x02
/* IS linked to hc */
58
59
u8
type
;
/* PIPE_{BULK,...} */
60
61
/* periodic scheduling params (for intr and iso) */
62
u8
branch
;
63
u16
interval
;
64
u16
load
;
65
u16
last_iso
;
/* iso only */
66
67
/* HC may see EDs on rm_list until next frame (frame_no == tick) */
68
u16
tick
;
69
}
__attribute__
((
aligned
(16)));
70
71
#define ED_MASK ((u32)~0x0f)
/* strip hw status in low addr bits */
72
73
74
/*
75
* OHCI Transfer Descriptor (TD) ... one per transfer segment
76
* See OHCI spec, sections 4.3.1 (general = control/bulk/interrupt)
77
* and 4.3.2 (iso)
78
*/
79
struct
td
{
80
/* first fields are hardware-specified */
81
__hc32
hwINFO
;
/* transfer info bitmask */
82
83
/* hwINFO bits for both general and iso tds: */
84
#define TD_CC 0xf0000000
/* condition code */
85
#define TD_CC_GET(td_p) ((td_p >>28) & 0x0f)
86
//#define TD_CC_SET(td_p, cc) (td_p) = ((td_p) & 0x0fffffff) | (((cc) & 0x0f) << 28)
87
#define TD_DI 0x00E00000
/* frames before interrupt */
88
#define TD_DI_SET(X) (((X) & 0x07)<< 21)
89
/* these two bits are available for definition/use by HCDs in both
90
* general and iso tds ... others are available for only one type
91
*/
92
#define TD_DONE 0x00020000
/* retired to donelist */
93
#define TD_ISO 0x00010000
/* copy of ED_ISO */
94
95
/* hwINFO bits for general tds: */
96
#define TD_EC 0x0C000000
/* error count */
97
#define TD_T 0x03000000
/* data toggle state */
98
#define TD_T_DATA0 0x02000000
/* DATA0 */
99
#define TD_T_DATA1 0x03000000
/* DATA1 */
100
#define TD_T_TOGGLE 0x00000000
/* uses ED_C */
101
#define TD_DP 0x00180000
/* direction/pid */
102
#define TD_DP_SETUP 0x00000000
/* SETUP pid */
103
#define TD_DP_IN 0x00100000
/* IN pid */
104
#define TD_DP_OUT 0x00080000
/* OUT pid */
105
/* 0x00180000 rsvd */
106
#define TD_R 0x00040000
/* round: short packets OK? */
107
108
/* (no hwINFO #defines yet for iso tds) */
109
110
__hc32
hwCBP
;
/* Current Buffer Pointer (or 0) */
111
__hc32
hwNextTD
;
/* Next TD Pointer */
112
__hc32
hwBE
;
/* Memory Buffer End Pointer */
113
114
/* PSW is only for ISO. Only 1 PSW entry is used, but on
115
* big-endian PPC hardware that's the second entry.
116
*/
117
#define MAXPSW 2
118
__hc16
hwPSW
[
MAXPSW
];
119
120
/* rest are purely for the driver's use */
121
__u8
index
;
122
struct
ed
*
ed
;
123
struct
td
*
td_hash
;
/* dma-->td hashtable */
124
struct
td
*
next_dl_td
;
125
struct
urb
*
urb
;
126
127
dma_addr_t
td_dma
;
/* addr of this TD */
128
dma_addr_t
data_dma
;
/* addr of data it points to */
129
130
struct
list_head
td_list
;
/* "shadow list", TDs on same ED */
131
}
__attribute__
((
aligned
(32)));
/* c/b/i need 16; only iso needs 32 */
132
133
#define TD_MASK ((u32)~0x1f)
/* strip hw status in low addr bits */
134
135
/*
136
* Hardware transfer status codes -- CC from td->hwINFO or td->hwPSW
137
*/
138
#define TD_CC_NOERROR 0x00
139
#define TD_CC_CRC 0x01
140
#define TD_CC_BITSTUFFING 0x02
141
#define TD_CC_DATATOGGLEM 0x03
142
#define TD_CC_STALL 0x04
143
#define TD_DEVNOTRESP 0x05
144
#define TD_PIDCHECKFAIL 0x06
145
#define TD_UNEXPECTEDPID 0x07
146
#define TD_DATAOVERRUN 0x08
147
#define TD_DATAUNDERRUN 0x09
148
/* 0x0A, 0x0B reserved for hardware */
149
#define TD_BUFFEROVERRUN 0x0C
150
#define TD_BUFFERUNDERRUN 0x0D
151
/* 0x0E, 0x0F reserved for HCD */
152
#define TD_NOTACCESSED 0x0F
153
154
155
/* map OHCI TD status codes (CC) to errno values */
156
static
const
int
cc_to_error [16] = {
157
/* No Error */
0,
158
/* CRC Error */
-
EILSEQ
,
159
/* Bit Stuff */
-
EPROTO
,
160
/* Data Togg */
-
EILSEQ
,
161
/* Stall */
-
EPIPE
,
162
/* DevNotResp */
-
ETIME
,
163
/* PIDCheck */
-
EPROTO
,
164
/* UnExpPID */
-
EPROTO
,
165
/* DataOver */
-
EOVERFLOW
,
166
/* DataUnder */
-
EREMOTEIO
,
167
/* (for hw) */
-
EIO
,
168
/* (for hw) */
-
EIO
,
169
/* BufferOver */
-
ECOMM
,
170
/* BuffUnder */
-
ENOSR
,
171
/* (for HCD) */
-
EALREADY
,
172
/* (for HCD) */
-EALREADY
173
};
174
175
176
/*
177
* The HCCA (Host Controller Communications Area) is a 256 byte
178
* structure defined section 4.4.1 of the OHCI spec. The HC is
179
* told the base address of it. It must be 256-byte aligned.
180
*/
181
struct
ohci_hcca
{
182
#define NUM_INTS 32
183
__hc32
int_table
[
NUM_INTS
];
/* periodic schedule */
184
185
/*
186
* OHCI defines u16 frame_no, followed by u16 zero pad.
187
* Since some processors can't do 16 bit bus accesses,
188
* portable access must be a 32 bits wide.
189
*/
190
__hc32
frame_no
;
/* current frame number */
191
__hc32
done_head
;
/* info returned for an interrupt */
192
u8
reserved_for_hc
[116];
193
u8
what
[4];
/* spec only identifies 252 bytes :) */
194
}
__attribute__
((
aligned
(256)));
195
196
/*
197
* This is the structure of the OHCI controller's memory mapped I/O region.
198
* You must use readl() and writel() (in <asm/io.h>) to access these fields!!
199
* Layout is in section 7 (and appendix B) of the spec.
200
*/
201
struct
ohci_regs
{
202
/* control and status registers (section 7.1) */
203
__hc32
revision
;
204
__hc32
control
;
205
__hc32
cmdstatus
;
206
__hc32
intrstatus
;
207
__hc32
intrenable
;
208
__hc32
intrdisable
;
209
210
/* memory pointers (section 7.2) */
211
__hc32
hcca
;
212
__hc32
ed_periodcurrent
;
213
__hc32
ed_controlhead
;
214
__hc32
ed_controlcurrent
;
215
__hc32
ed_bulkhead
;
216
__hc32
ed_bulkcurrent
;
217
__hc32
donehead
;
218
219
/* frame counters (section 7.3) */
220
__hc32
fminterval
;
221
__hc32
fmremaining
;
222
__hc32
fmnumber
;
223
__hc32
periodicstart
;
224
__hc32
lsthresh
;
225
226
/* Root hub ports (section 7.4) */
227
struct
ohci_roothub_regs
{
228
__hc32
a
;
229
__hc32
b
;
230
__hc32
status
;
231
#define MAX_ROOT_PORTS 15
/* maximum OHCI root hub ports (RH_A_NDP) */
232
__hc32
portstatus
[
MAX_ROOT_PORTS
];
233
}
roothub
;
234
235
/* and optional "legacy support" registers (appendix B) at 0x0100 */
236
237
}
__attribute__
((
aligned
(32)));
238
239
240
/* OHCI CONTROL AND STATUS REGISTER MASKS */
241
242
/*
243
* HcControl (control) register masks
244
*/
245
#define OHCI_CTRL_CBSR (3 << 0)
/* control/bulk service ratio */
246
#define OHCI_CTRL_PLE (1 << 2)
/* periodic list enable */
247
#define OHCI_CTRL_IE (1 << 3)
/* isochronous enable */
248
#define OHCI_CTRL_CLE (1 << 4)
/* control list enable */
249
#define OHCI_CTRL_BLE (1 << 5)
/* bulk list enable */
250
#define OHCI_CTRL_HCFS (3 << 6)
/* host controller functional state */
251
#define OHCI_CTRL_IR (1 << 8)
/* interrupt routing */
252
#define OHCI_CTRL_RWC (1 << 9)
/* remote wakeup connected */
253
#define OHCI_CTRL_RWE (1 << 10)
/* remote wakeup enable */
254
255
/* pre-shifted values for HCFS */
256
# define OHCI_USB_RESET (0 << 6)
257
# define OHCI_USB_RESUME (1 << 6)
258
# define OHCI_USB_OPER (2 << 6)
259
# define OHCI_USB_SUSPEND (3 << 6)
260
261
/*
262
* HcCommandStatus (cmdstatus) register masks
263
*/
264
#define OHCI_HCR (1 << 0)
/* host controller reset */
265
#define OHCI_CLF (1 << 1)
/* control list filled */
266
#define OHCI_BLF (1 << 2)
/* bulk list filled */
267
#define OHCI_OCR (1 << 3)
/* ownership change request */
268
#define OHCI_SOC (3 << 16)
/* scheduling overrun count */
269
270
/*
271
* masks used with interrupt registers:
272
* HcInterruptStatus (intrstatus)
273
* HcInterruptEnable (intrenable)
274
* HcInterruptDisable (intrdisable)
275
*/
276
#define OHCI_INTR_SO (1 << 0)
/* scheduling overrun */
277
#define OHCI_INTR_WDH (1 << 1)
/* writeback of done_head */
278
#define OHCI_INTR_SF (1 << 2)
/* start frame */
279
#define OHCI_INTR_RD (1 << 3)
/* resume detect */
280
#define OHCI_INTR_UE (1 << 4)
/* unrecoverable error */
281
#define OHCI_INTR_FNO (1 << 5)
/* frame number overflow */
282
#define OHCI_INTR_RHSC (1 << 6)
/* root hub status change */
283
#define OHCI_INTR_OC (1 << 30)
/* ownership change */
284
#define OHCI_INTR_MIE (1 << 31)
/* master interrupt enable */
285
286
287
/* OHCI ROOT HUB REGISTER MASKS */
288
289
/* roothub.portstatus [i] bits */
290
#define RH_PS_CCS 0x00000001
/* current connect status */
291
#define RH_PS_PES 0x00000002
/* port enable status*/
292
#define RH_PS_PSS 0x00000004
/* port suspend status */
293
#define RH_PS_POCI 0x00000008
/* port over current indicator */
294
#define RH_PS_PRS 0x00000010
/* port reset status */
295
#define RH_PS_PPS 0x00000100
/* port power status */
296
#define RH_PS_LSDA 0x00000200
/* low speed device attached */
297
#define RH_PS_CSC 0x00010000
/* connect status change */
298
#define RH_PS_PESC 0x00020000
/* port enable status change */
299
#define RH_PS_PSSC 0x00040000
/* port suspend status change */
300
#define RH_PS_OCIC 0x00080000
/* over current indicator change */
301
#define RH_PS_PRSC 0x00100000
/* port reset status change */
302
303
/* roothub.status bits */
304
#define RH_HS_LPS 0x00000001
/* local power status */
305
#define RH_HS_OCI 0x00000002
/* over current indicator */
306
#define RH_HS_DRWE 0x00008000
/* device remote wakeup enable */
307
#define RH_HS_LPSC 0x00010000
/* local power status change */
308
#define RH_HS_OCIC 0x00020000
/* over current indicator change */
309
#define RH_HS_CRWE 0x80000000
/* clear remote wakeup enable */
310
311
/* roothub.b masks */
312
#define RH_B_DR 0x0000ffff
/* device removable flags */
313
#define RH_B_PPCM 0xffff0000
/* port power control mask */
314
315
/* roothub.a masks */
316
#define RH_A_NDP (0xff << 0)
/* number of downstream ports */
317
#define RH_A_PSM (1 << 8)
/* power switching mode */
318
#define RH_A_NPS (1 << 9)
/* no power switching */
319
#define RH_A_DT (1 << 10)
/* device type (mbz) */
320
#define RH_A_OCPM (1 << 11)
/* over current protection mode */
321
#define RH_A_NOCP (1 << 12)
/* no over current protection */
322
#define RH_A_POTPGT (0xff << 24)
/* power on to power good time */
323
324
325
/* hcd-private per-urb state */
326
typedef
struct
urb_priv
{
327
struct
ed
*
ed
;
328
u16
length
;
// # tds in this request
329
u16
td_cnt
;
// tds already serviced
330
struct
list_head
pending
;
331
struct
td
*
td
[0];
// all TDs in this request
332
333
}
urb_priv_t
;
334
335
#define TD_HASH_SIZE 64
/* power'o'two */
336
// sizeof (struct td) ~= 64 == 2^6 ...
337
#define TD_HASH_FUNC(td_dma) ((td_dma ^ (td_dma >> 6)) % TD_HASH_SIZE)
338
339
340
/*
341
* This is the full ohci controller description
342
*
343
* Note how the "proper" USB information is just
344
* a subset of what the full implementation needs. (Linus)
345
*/
346
347
enum
ohci_rh_state
{
348
OHCI_RH_HALTED
,
349
OHCI_RH_SUSPENDED
,
350
OHCI_RH_RUNNING
351
};
352
353
struct
ohci_hcd
{
354
spinlock_t
lock
;
355
356
/*
357
* I/O memory used to communicate with the HC (dma-consistent)
358
*/
359
struct
ohci_regs
__iomem
*
regs
;
360
361
/*
362
* main memory used to communicate with the HC (dma-consistent).
363
* hcd adds to schedule for a live hc any time, but removals finish
364
* only at the start of the next frame.
365
*/
366
struct
ohci_hcca
*
hcca
;
367
dma_addr_t
hcca_dma
;
368
369
struct
ed
*
ed_rm_list
;
/* to be removed */
370
371
struct
ed
*
ed_bulktail
;
/* last in bulk list */
372
struct
ed
*
ed_controltail
;
/* last in ctrl list */
373
struct
ed
*
periodic
[
NUM_INTS
];
/* shadow int_table */
374
375
void
(*
start_hnp
)(
struct
ohci_hcd
*
ohci
);
376
377
/*
378
* memory management for queue data structures
379
*/
380
struct
dma_pool
*
td_cache
;
381
struct
dma_pool
*
ed_cache
;
382
struct
td
*
td_hash
[
TD_HASH_SIZE
];
383
struct
list_head
pending
;
384
385
/*
386
* driver state
387
*/
388
enum
ohci_rh_state
rh_state
;
389
int
num_ports
;
390
int
load
[
NUM_INTS
];
391
u32
hc_control
;
/* copy of hc control reg */
392
unsigned
long
next_statechange
;
/* suspend/resume */
393
u32
fminterval
;
/* saved register */
394
unsigned
autostop
:1;
/* rh auto stopping/stopped */
395
396
unsigned
long
flags
;
/* for HC bugs */
397
#define OHCI_QUIRK_AMD756 0x01
/* erratum #4 */
398
#define OHCI_QUIRK_SUPERIO 0x02
/* natsemi */
399
#define OHCI_QUIRK_INITRESET 0x04
/* SiS, OPTi, ... */
400
#define OHCI_QUIRK_BE_DESC 0x08
/* BE descriptors */
401
#define OHCI_QUIRK_BE_MMIO 0x10
/* BE registers */
402
#define OHCI_QUIRK_ZFMICRO 0x20
/* Compaq ZFMicro chipset*/
403
#define OHCI_QUIRK_NEC 0x40
/* lost interrupts */
404
#define OHCI_QUIRK_FRAME_NO 0x80
/* no big endian frame_no shift */
405
#define OHCI_QUIRK_HUB_POWER 0x100
/* distrust firmware power/oc setup */
406
#define OHCI_QUIRK_AMD_PLL 0x200
/* AMD PLL quirk*/
407
#define OHCI_QUIRK_AMD_PREFETCH 0x400
/* pre-fetch for ISO transfer */
408
// there are also chip quirks/bugs in init logic
409
410
struct
work_struct
nec_work
;
/* Worker for NEC quirk */
411
412
/* Needed for ZF Micro quirk */
413
struct
timer_list
unlink_watchdog
;
414
unsigned
eds_scheduled
;
415
struct
ed
*
ed_to_check
;
416
unsigned
zf_delay
;
417
418
#ifdef DEBUG
419
struct
dentry
*debug_dir;
420
struct
dentry
*debug_async;
421
struct
dentry
*debug_periodic;
422
struct
dentry
*debug_registers;
423
#endif
424
};
425
426
#ifdef CONFIG_PCI
427
static
inline
int
quirk_nec(
struct
ohci_hcd
*
ohci
)
428
{
429
return
ohci->
flags
&
OHCI_QUIRK_NEC
;
430
}
431
static
inline
int
quirk_zfmicro(
struct
ohci_hcd
*
ohci
)
432
{
433
return
ohci->
flags
&
OHCI_QUIRK_ZFMICRO
;
434
}
435
static
inline
int
quirk_amdiso(
struct
ohci_hcd
*
ohci
)
436
{
437
return
ohci->
flags
&
OHCI_QUIRK_AMD_PLL
;
438
}
439
static
inline
int
quirk_amdprefetch(
struct
ohci_hcd
*
ohci
)
440
{
441
return
ohci->
flags
&
OHCI_QUIRK_AMD_PREFETCH
;
442
}
443
#else
444
static
inline
int
quirk_nec(
struct
ohci_hcd
*
ohci
)
445
{
446
return
0;
447
}
448
static
inline
int
quirk_zfmicro(
struct
ohci_hcd
*
ohci
)
449
{
450
return
0;
451
}
452
static
inline
int
quirk_amdiso(
struct
ohci_hcd
*
ohci
)
453
{
454
return
0;
455
}
456
static
inline
int
quirk_amdprefetch(
struct
ohci_hcd
*
ohci
)
457
{
458
return
0;
459
}
460
#endif
461
462
/* convert between an hcd pointer and the corresponding ohci_hcd */
463
static
inline
struct
ohci_hcd
*hcd_to_ohci (
struct
usb_hcd *hcd)
464
{
465
return
(
struct
ohci_hcd
*) (hcd->hcd_priv);
466
}
467
static
inline
struct
usb_hcd *ohci_to_hcd (
const
struct
ohci_hcd
*
ohci
)
468
{
469
return
container_of
((
void
*) ohci,
struct
usb_hcd, hcd_priv);
470
}
471
472
/*-------------------------------------------------------------------------*/
473
474
#ifndef DEBUG
475
#define STUB_DEBUG_FILES
476
#endif
/* DEBUG */
477
478
#define ohci_dbg(ohci, fmt, args...) \
479
dev_dbg (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
480
#define ohci_err(ohci, fmt, args...) \
481
dev_err (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
482
#define ohci_info(ohci, fmt, args...) \
483
dev_info (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
484
#define ohci_warn(ohci, fmt, args...) \
485
dev_warn (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
486
487
#ifdef OHCI_VERBOSE_DEBUG
488
# define ohci_vdbg ohci_dbg
489
#else
490
# define ohci_vdbg(ohci, fmt, args...) do { } while (0)
491
#endif
492
493
/*-------------------------------------------------------------------------*/
494
495
/*
496
* While most USB host controllers implement their registers and
497
* in-memory communication descriptors in little-endian format,
498
* a minority (notably the IBM STB04XXX and the Motorola MPC5200
499
* processors) implement them in big endian format.
500
*
501
* In addition some more exotic implementations like the Toshiba
502
* Spider (aka SCC) cell southbridge are "mixed" endian, that is,
503
* they have a different endianness for registers vs. in-memory
504
* descriptors.
505
*
506
* This attempts to support either format at compile time without a
507
* runtime penalty, or both formats with the additional overhead
508
* of checking a flag bit.
509
*
510
* That leads to some tricky Kconfig rules howevber. There are
511
* different defaults based on some arch/ppc platforms, though
512
* the basic rules are:
513
*
514
* Controller type Kconfig options needed
515
* --------------- ----------------------
516
* little endian CONFIG_USB_OHCI_LITTLE_ENDIAN
517
*
518
* fully big endian CONFIG_USB_OHCI_BIG_ENDIAN_DESC _and_
519
* CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
520
*
521
* mixed endian CONFIG_USB_OHCI_LITTLE_ENDIAN _and_
522
* CONFIG_USB_OHCI_BIG_ENDIAN_{MMIO,DESC}
523
*
524
* (If you have a mixed endian controller, you -must- also define
525
* CONFIG_USB_OHCI_LITTLE_ENDIAN or things will not work when building
526
* both your mixed endian and a fully big endian controller support in
527
* the same kernel image).
528
*/
529
530
#ifdef CONFIG_USB_OHCI_BIG_ENDIAN_DESC
531
#ifdef CONFIG_USB_OHCI_LITTLE_ENDIAN
532
#define big_endian_desc(ohci) (ohci->flags & OHCI_QUIRK_BE_DESC)
533
#else
534
#define big_endian_desc(ohci) 1
/* only big endian */
535
#endif
536
#else
537
#define big_endian_desc(ohci) 0
/* only little endian */
538
#endif
539
540
#ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
541
#ifdef CONFIG_USB_OHCI_LITTLE_ENDIAN
542
#define big_endian_mmio(ohci) (ohci->flags & OHCI_QUIRK_BE_MMIO)
543
#else
544
#define big_endian_mmio(ohci) 1
/* only big endian */
545
#endif
546
#else
547
#define big_endian_mmio(ohci) 0
/* only little endian */
548
#endif
549
550
/*
551
* Big-endian read/write functions are arch-specific.
552
* Other arches can be added if/when they're needed.
553
*
554
*/
555
static
inline
unsigned
int
_ohci_readl (
const
struct
ohci_hcd
*ohci,
556
__hc32
__iomem
*
regs
)
557
{
558
#ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
559
return
big_endian_mmio
(ohci) ?
560
readl_be
(regs) :
561
readl
(regs);
562
#else
563
return
readl
(regs);
564
#endif
565
}
566
567
static
inline
void
_ohci_writel (
const
struct
ohci_hcd
*ohci,
568
const
unsigned
int
val
,
__hc32
__iomem
*
regs
)
569
{
570
#ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
571
big_endian_mmio
(ohci) ?
572
writel_be
(val, regs) :
573
writel
(val, regs);
574
#else
575
writel
(val, regs);
576
#endif
577
}
578
579
#define ohci_readl(o,r) _ohci_readl(o,r)
580
#define ohci_writel(o,v,r) _ohci_writel(o,v,r)
581
582
583
/*-------------------------------------------------------------------------*/
584
585
/* cpu to ohci */
586
static
inline
__hc16
cpu_to_hc16 (
const
struct
ohci_hcd
*ohci,
const
u16
x
)
587
{
588
return
big_endian_desc
(ohci) ?
589
(
__force
__hc16
)
cpu_to_be16
(x) :
590
(
__force
__hc16
)
cpu_to_le16
(x);
591
}
592
593
static
inline
__hc16
cpu_to_hc16p (
const
struct
ohci_hcd
*ohci,
const
u16
*
x
)
594
{
595
return
big_endian_desc
(ohci) ?
596
cpu_to_be16p
(x) :
597
cpu_to_le16p
(x);
598
}
599
600
static
inline
__hc32
cpu_to_hc32
(
const
struct
ohci_hcd
*ohci,
const
u32
x)
601
{
602
return
big_endian_desc
(ohci) ?
603
(
__force
__hc32
)
cpu_to_be32
(x) :
604
(
__force
__hc32
)
cpu_to_le32
(x);
605
}
606
607
static
inline
__hc32
cpu_to_hc32p (
const
struct
ohci_hcd
*ohci,
const
u32
*x)
608
{
609
return
big_endian_desc
(ohci) ?
610
cpu_to_be32p
(x) :
611
cpu_to_le32p
(x);
612
}
613
614
/* ohci to cpu */
615
static
inline
u16
hc16_to_cpu (
const
struct
ohci_hcd
*ohci,
const
__hc16
x)
616
{
617
return
big_endian_desc
(ohci) ?
618
be16_to_cpu
((
__force
__be16
)x) :
619
le16_to_cpu
((
__force
__le16
)x);
620
}
621
622
static
inline
u16
hc16_to_cpup (
const
struct
ohci_hcd
*ohci,
const
__hc16
*x)
623
{
624
return
big_endian_desc
(ohci) ?
625
be16_to_cpup
((
__force
__be16
*)x) :
626
le16_to_cpup
((
__force
__le16
*)x);
627
}
628
629
static
inline
u32
hc32_to_cpu
(
const
struct
ohci_hcd
*ohci,
const
__hc32
x)
630
{
631
return
big_endian_desc
(ohci) ?
632
be32_to_cpu
((
__force
__be32
)x) :
633
le32_to_cpu
((
__force
__le32
)x);
634
}
635
636
static
inline
u32
hc32_to_cpup (
const
struct
ohci_hcd
*ohci,
const
__hc32
*x)
637
{
638
return
big_endian_desc
(ohci) ?
639
be32_to_cpup
((
__force
__be32
*)x) :
640
le32_to_cpup
((
__force
__le32
*)x);
641
}
642
643
/*-------------------------------------------------------------------------*/
644
645
/* HCCA frame number is 16 bits, but is accessed as 32 bits since not all
646
* hardware handles 16 bit reads. That creates a different confusion on
647
* some big-endian SOC implementations. Same thing happens with PSW access.
648
*/
649
650
#ifdef CONFIG_PPC_MPC52xx
651
#define big_endian_frame_no_quirk(ohci) (ohci->flags & OHCI_QUIRK_FRAME_NO)
652
#else
653
#define big_endian_frame_no_quirk(ohci) 0
654
#endif
655
656
static
inline
u16
ohci_frame_no(
const
struct
ohci_hcd
*ohci)
657
{
658
u32
tmp
;
659
if
(
big_endian_desc
(ohci)) {
660
tmp =
be32_to_cpup
((
__force
__be32
*)&ohci->
hcca
->frame_no);
661
if
(!
big_endian_frame_no_quirk
(ohci))
662
tmp >>= 16;
663
}
else
664
tmp =
le32_to_cpup
((
__force
__le32
*)&ohci->
hcca
->frame_no);
665
666
return
(
u16
)
tmp
;
667
}
668
669
static
inline
__hc16
*ohci_hwPSWp(
const
struct
ohci_hcd
*ohci,
670
const
struct
td
*
td
,
int
index
)
671
{
672
return
(
__hc16
*)(
big_endian_desc
(ohci) ?
673
&td->
hwPSW
[index ^ 1] : &td->
hwPSW
[
index
]);
674
}
675
676
static
inline
u16
ohci_hwPSW(
const
struct
ohci_hcd
*ohci,
677
const
struct
td *td,
int
index)
678
{
679
return
hc16_to_cpup(ohci, ohci_hwPSWp(ohci, td, index));
680
}
681
682
/*-------------------------------------------------------------------------*/
683
684
#define FI 0x2edf
/* 12000 bits per frame (-1) */
685
#define FSMP(fi) (0x7fff & ((6 * ((fi) - 210)) / 7))
686
#define FIT (1 << 31)
687
#define LSTHRESH 0x628
/* lowspeed bit threshold */
688
689
static
inline
void
periodic_reinit (
struct
ohci_hcd
*ohci)
690
{
691
u32
fi = ohci->
fminterval
& 0x03fff;
692
u32
fit =
ohci_readl
(ohci, &ohci->
regs
->fminterval) &
FIT
;
693
694
ohci_writel
(ohci, (fit ^
FIT
) | ohci->
fminterval
,
695
&ohci->
regs
->fminterval);
696
ohci_writel
(ohci, ((9 * fi) / 10) & 0x3fff,
697
&ohci->
regs
->periodicstart);
698
}
699
700
/* AMD-756 (D2 rev) reports corrupt register contents in some cases.
701
* The erratum (#4) description is incorrect. AMD's workaround waits
702
* till some bits (mostly reserved) are clear; ok for all revs.
703
*/
704
#define read_roothub(hc, register, mask) ({ \
705
u32 temp = ohci_readl (hc, &hc->regs->roothub.register); \
706
if (temp == -1) \
707
hc->rh_state = OHCI_RH_HALTED; \
708
else if (hc->flags & OHCI_QUIRK_AMD756) \
709
while (temp & mask) \
710
temp = ohci_readl (hc, &hc->regs->roothub.register); \
711
temp; })
712
713
static
inline
u32
roothub_a (
struct
ohci_hcd
*hc)
714
{
return
read_roothub
(hc,
a
, 0xfc0fe000); }
715
static
inline
u32
roothub_b (
struct
ohci_hcd
*hc)
716
{
return
ohci_readl
(hc, &hc->
regs
->roothub.b); }
717
static
inline
u32
roothub_status (
struct
ohci_hcd
*hc)
718
{
return
ohci_readl
(hc, &hc->
regs
->roothub.status); }
719
static
inline
u32
roothub_portstatus (
struct
ohci_hcd
*hc,
int
i
)
720
{
return
read_roothub
(hc, portstatus [i], 0xffe0fce0); }
Generated on Thu Jan 10 2013 13:30:24 for Linux Kernel by
1.8.2