0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 typedef __u32 __bitwise __hc32;
0017 typedef __u16 __bitwise __hc16;
0018
0019
0020
0021
0022
0023
0024
0025
0026 struct ed {
0027
0028 __hc32 hwINFO;
0029
0030 #define ED_DEQUEUE (1 << 27)
0031
0032 #define ED_ISO (1 << 15)
0033 #define ED_SKIP (1 << 14)
0034 #define ED_LOWSPEED (1 << 13)
0035 #define ED_OUT (0x01 << 11)
0036 #define ED_IN (0x02 << 11)
0037 __hc32 hwTailP;
0038 __hc32 hwHeadP;
0039 #define ED_C (0x02)
0040 #define ED_H (0x01)
0041 __hc32 hwNextED;
0042
0043
0044 dma_addr_t dma;
0045 struct td *dummy;
0046
0047
0048 struct ed *ed_next;
0049 struct ed *ed_prev;
0050 struct list_head td_list;
0051 struct list_head in_use_list;
0052
0053
0054
0055
0056 u8 state;
0057 #define ED_IDLE 0x00
0058 #define ED_UNLINK 0x01
0059 #define ED_OPER 0x02
0060
0061 u8 type;
0062
0063
0064 u8 branch;
0065 u16 interval;
0066 u16 load;
0067 u16 last_iso;
0068
0069
0070 u16 tick;
0071
0072
0073 unsigned takeback_wdh_cnt;
0074 struct td *pending_td;
0075 #define OKAY_TO_TAKEBACK(ohci, ed) \
0076 ((int) (ohci->wdh_cnt - ed->takeback_wdh_cnt) >= 0)
0077
0078 } __attribute__ ((aligned(16)));
0079
0080 #define ED_MASK ((u32)~0x0f)
0081
0082
0083
0084
0085
0086
0087
0088 struct td {
0089
0090 __hc32 hwINFO;
0091
0092
0093 #define TD_CC 0xf0000000
0094 #define TD_CC_GET(td_p) ((td_p >>28) & 0x0f)
0095
0096 #define TD_DI 0x00E00000
0097 #define TD_DI_SET(X) (((X) & 0x07)<< 21)
0098
0099
0100
0101 #define TD_DONE 0x00020000
0102 #define TD_ISO 0x00010000
0103
0104
0105 #define TD_EC 0x0C000000
0106 #define TD_T 0x03000000
0107 #define TD_T_DATA0 0x02000000
0108 #define TD_T_DATA1 0x03000000
0109 #define TD_T_TOGGLE 0x00000000
0110 #define TD_DP 0x00180000
0111 #define TD_DP_SETUP 0x00000000
0112 #define TD_DP_IN 0x00100000
0113 #define TD_DP_OUT 0x00080000
0114
0115 #define TD_R 0x00040000
0116
0117
0118
0119 __hc32 hwCBP;
0120 __hc32 hwNextTD;
0121 __hc32 hwBE;
0122
0123
0124
0125
0126 #define MAXPSW 2
0127 __hc16 hwPSW [MAXPSW];
0128
0129
0130 __u8 index;
0131 struct ed *ed;
0132 struct td *td_hash;
0133 struct td *next_dl_td;
0134 struct urb *urb;
0135
0136 dma_addr_t td_dma;
0137 dma_addr_t data_dma;
0138
0139 struct list_head td_list;
0140 } __attribute__ ((aligned(32)));
0141
0142 #define TD_MASK ((u32)~0x1f)
0143
0144
0145
0146
0147 #define TD_CC_NOERROR 0x00
0148 #define TD_CC_CRC 0x01
0149 #define TD_CC_BITSTUFFING 0x02
0150 #define TD_CC_DATATOGGLEM 0x03
0151 #define TD_CC_STALL 0x04
0152 #define TD_DEVNOTRESP 0x05
0153 #define TD_PIDCHECKFAIL 0x06
0154 #define TD_UNEXPECTEDPID 0x07
0155 #define TD_DATAOVERRUN 0x08
0156 #define TD_DATAUNDERRUN 0x09
0157
0158 #define TD_BUFFEROVERRUN 0x0C
0159 #define TD_BUFFERUNDERRUN 0x0D
0160
0161 #define TD_NOTACCESSED 0x0F
0162
0163
0164
0165 static const int __maybe_unused cc_to_error [16] = {
0166 0,
0167 -EILSEQ,
0168 -EPROTO,
0169 -EILSEQ,
0170 -EPIPE,
0171 -ETIME,
0172 -EPROTO,
0173 -EPROTO,
0174 -EOVERFLOW,
0175 -EREMOTEIO,
0176 -EIO,
0177 -EIO,
0178 -ECOMM,
0179 -ENOSR,
0180 -EALREADY,
0181 -EALREADY
0182 };
0183
0184
0185
0186
0187
0188
0189
0190 struct ohci_hcca {
0191 #define NUM_INTS 32
0192 __hc32 int_table [NUM_INTS];
0193
0194
0195
0196
0197
0198
0199 __hc32 frame_no;
0200 __hc32 done_head;
0201 u8 reserved_for_hc [116];
0202 u8 what [4];
0203 } __attribute__ ((aligned(256)));
0204
0205
0206
0207
0208
0209
0210 struct ohci_regs {
0211
0212 __hc32 revision;
0213 __hc32 control;
0214 __hc32 cmdstatus;
0215 __hc32 intrstatus;
0216 __hc32 intrenable;
0217 __hc32 intrdisable;
0218
0219
0220 __hc32 hcca;
0221 __hc32 ed_periodcurrent;
0222 __hc32 ed_controlhead;
0223 __hc32 ed_controlcurrent;
0224 __hc32 ed_bulkhead;
0225 __hc32 ed_bulkcurrent;
0226 __hc32 donehead;
0227
0228
0229 __hc32 fminterval;
0230 __hc32 fmremaining;
0231 __hc32 fmnumber;
0232 __hc32 periodicstart;
0233 __hc32 lsthresh;
0234
0235
0236 struct ohci_roothub_regs {
0237 __hc32 a;
0238 __hc32 b;
0239 __hc32 status;
0240 #define MAX_ROOT_PORTS 15
0241 __hc32 portstatus [MAX_ROOT_PORTS];
0242 } roothub;
0243
0244
0245
0246 } __attribute__ ((aligned(32)));
0247
0248
0249
0250
0251
0252
0253
0254 #define OHCI_CTRL_CBSR (3 << 0)
0255 #define OHCI_CTRL_PLE (1 << 2)
0256 #define OHCI_CTRL_IE (1 << 3)
0257 #define OHCI_CTRL_CLE (1 << 4)
0258 #define OHCI_CTRL_BLE (1 << 5)
0259 #define OHCI_CTRL_HCFS (3 << 6)
0260 #define OHCI_CTRL_IR (1 << 8)
0261 #define OHCI_CTRL_RWC (1 << 9)
0262 #define OHCI_CTRL_RWE (1 << 10)
0263
0264
0265 # define OHCI_USB_RESET (0 << 6)
0266 # define OHCI_USB_RESUME (1 << 6)
0267 # define OHCI_USB_OPER (2 << 6)
0268 # define OHCI_USB_SUSPEND (3 << 6)
0269
0270
0271
0272
0273 #define OHCI_HCR (1 << 0)
0274 #define OHCI_CLF (1 << 1)
0275 #define OHCI_BLF (1 << 2)
0276 #define OHCI_OCR (1 << 3)
0277 #define OHCI_SOC (3 << 16)
0278
0279
0280
0281
0282
0283
0284
0285 #define OHCI_INTR_SO (1 << 0)
0286 #define OHCI_INTR_WDH (1 << 1)
0287 #define OHCI_INTR_SF (1 << 2)
0288 #define OHCI_INTR_RD (1 << 3)
0289 #define OHCI_INTR_UE (1 << 4)
0290 #define OHCI_INTR_FNO (1 << 5)
0291 #define OHCI_INTR_RHSC (1 << 6)
0292 #define OHCI_INTR_OC (1 << 30)
0293 #define OHCI_INTR_MIE (1 << 31)
0294
0295
0296
0297
0298
0299 #define RH_PS_CCS 0x00000001
0300 #define RH_PS_PES 0x00000002
0301 #define RH_PS_PSS 0x00000004
0302 #define RH_PS_POCI 0x00000008
0303 #define RH_PS_PRS 0x00000010
0304 #define RH_PS_PPS 0x00000100
0305 #define RH_PS_LSDA 0x00000200
0306 #define RH_PS_CSC 0x00010000
0307 #define RH_PS_PESC 0x00020000
0308 #define RH_PS_PSSC 0x00040000
0309 #define RH_PS_OCIC 0x00080000
0310 #define RH_PS_PRSC 0x00100000
0311
0312
0313 #define RH_HS_LPS 0x00000001
0314 #define RH_HS_OCI 0x00000002
0315 #define RH_HS_DRWE 0x00008000
0316 #define RH_HS_LPSC 0x00010000
0317 #define RH_HS_OCIC 0x00020000
0318 #define RH_HS_CRWE 0x80000000
0319
0320
0321 #define RH_B_DR 0x0000ffff
0322 #define RH_B_PPCM 0xffff0000
0323
0324
0325 #define RH_A_NDP (0xff << 0)
0326 #define RH_A_PSM (1 << 8)
0327 #define RH_A_NPS (1 << 9)
0328 #define RH_A_DT (1 << 10)
0329 #define RH_A_OCPM (1 << 11)
0330 #define RH_A_NOCP (1 << 12)
0331 #define RH_A_POTPGT (0xff << 24)
0332
0333
0334
0335 typedef struct urb_priv {
0336 struct ed *ed;
0337 u16 length;
0338 u16 td_cnt;
0339 struct list_head pending;
0340 struct td *td[];
0341
0342 } urb_priv_t;
0343
0344 #define TD_HASH_SIZE 64
0345
0346 #define TD_HASH_FUNC(td_dma) ((td_dma ^ (td_dma >> 6)) % TD_HASH_SIZE)
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356 enum ohci_rh_state {
0357 OHCI_RH_HALTED,
0358 OHCI_RH_SUSPENDED,
0359 OHCI_RH_RUNNING
0360 };
0361
0362 struct ohci_hcd {
0363 spinlock_t lock;
0364
0365
0366
0367
0368 struct ohci_regs __iomem *regs;
0369
0370
0371
0372
0373
0374
0375 struct ohci_hcca *hcca;
0376 dma_addr_t hcca_dma;
0377
0378 struct ed *ed_rm_list;
0379
0380 struct ed *ed_bulktail;
0381 struct ed *ed_controltail;
0382 struct ed *periodic [NUM_INTS];
0383
0384 void (*start_hnp)(struct ohci_hcd *ohci);
0385
0386
0387
0388
0389
0390
0391 struct dma_pool *td_cache;
0392 struct dma_pool *ed_cache;
0393 struct td *td_hash [TD_HASH_SIZE];
0394 struct td *dl_start, *dl_end;
0395 struct list_head pending;
0396 struct list_head eds_in_use;
0397
0398
0399
0400
0401 enum ohci_rh_state rh_state;
0402 int num_ports;
0403 int load [NUM_INTS];
0404 u32 hc_control;
0405 unsigned long next_statechange;
0406 u32 fminterval;
0407 unsigned autostop:1;
0408 unsigned working:1;
0409 unsigned restart_work:1;
0410
0411 unsigned long flags;
0412 #define OHCI_QUIRK_AMD756 0x01
0413 #define OHCI_QUIRK_SUPERIO 0x02
0414 #define OHCI_QUIRK_INITRESET 0x04
0415 #define OHCI_QUIRK_BE_DESC 0x08
0416 #define OHCI_QUIRK_BE_MMIO 0x10
0417 #define OHCI_QUIRK_ZFMICRO 0x20
0418 #define OHCI_QUIRK_NEC 0x40
0419 #define OHCI_QUIRK_FRAME_NO 0x80
0420 #define OHCI_QUIRK_HUB_POWER 0x100
0421 #define OHCI_QUIRK_AMD_PLL 0x200
0422 #define OHCI_QUIRK_AMD_PREFETCH 0x400
0423 #define OHCI_QUIRK_GLOBAL_SUSPEND 0x800
0424 #define OHCI_QUIRK_QEMU 0x1000
0425
0426
0427
0428 unsigned prev_frame_no;
0429 unsigned wdh_cnt, prev_wdh_cnt;
0430 u32 prev_donehead;
0431 struct timer_list io_watchdog;
0432
0433 struct work_struct nec_work;
0434
0435 struct dentry *debug_dir;
0436
0437
0438 unsigned long priv[] __aligned(sizeof(s64));
0439
0440 };
0441
0442 #ifdef CONFIG_USB_PCI
0443 static inline int quirk_nec(struct ohci_hcd *ohci)
0444 {
0445 return ohci->flags & OHCI_QUIRK_NEC;
0446 }
0447 static inline int quirk_zfmicro(struct ohci_hcd *ohci)
0448 {
0449 return ohci->flags & OHCI_QUIRK_ZFMICRO;
0450 }
0451 static inline int quirk_amdiso(struct ohci_hcd *ohci)
0452 {
0453 return ohci->flags & OHCI_QUIRK_AMD_PLL;
0454 }
0455 static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
0456 {
0457 return ohci->flags & OHCI_QUIRK_AMD_PREFETCH;
0458 }
0459 #else
0460 static inline int quirk_nec(struct ohci_hcd *ohci)
0461 {
0462 return 0;
0463 }
0464 static inline int quirk_zfmicro(struct ohci_hcd *ohci)
0465 {
0466 return 0;
0467 }
0468 static inline int quirk_amdiso(struct ohci_hcd *ohci)
0469 {
0470 return 0;
0471 }
0472 static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
0473 {
0474 return 0;
0475 }
0476 #endif
0477
0478
0479 static inline struct ohci_hcd *hcd_to_ohci (struct usb_hcd *hcd)
0480 {
0481 return (struct ohci_hcd *) (hcd->hcd_priv);
0482 }
0483 static inline struct usb_hcd *ohci_to_hcd (const struct ohci_hcd *ohci)
0484 {
0485 return container_of ((void *) ohci, struct usb_hcd, hcd_priv);
0486 }
0487
0488
0489
0490 #define ohci_dbg(ohci, fmt, args...) \
0491 dev_dbg (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
0492 #define ohci_err(ohci, fmt, args...) \
0493 dev_err (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
0494 #define ohci_info(ohci, fmt, args...) \
0495 dev_info (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
0496 #define ohci_warn(ohci, fmt, args...) \
0497 dev_warn (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
0498
0499
0500
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536 #ifdef CONFIG_USB_OHCI_BIG_ENDIAN_DESC
0537 #ifdef CONFIG_USB_OHCI_LITTLE_ENDIAN
0538 #define big_endian_desc(ohci) (ohci->flags & OHCI_QUIRK_BE_DESC)
0539 #else
0540 #define big_endian_desc(ohci) 1
0541 #endif
0542 #else
0543 #define big_endian_desc(ohci) 0
0544 #endif
0545
0546 #ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
0547 #ifdef CONFIG_USB_OHCI_LITTLE_ENDIAN
0548 #define big_endian_mmio(ohci) (ohci->flags & OHCI_QUIRK_BE_MMIO)
0549 #else
0550 #define big_endian_mmio(ohci) 1
0551 #endif
0552 #else
0553 #define big_endian_mmio(ohci) 0
0554 #endif
0555
0556
0557
0558
0559
0560
0561 static inline unsigned int _ohci_readl (const struct ohci_hcd *ohci,
0562 __hc32 __iomem * regs)
0563 {
0564 #ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
0565 return big_endian_mmio(ohci) ?
0566 readl_be (regs) :
0567 readl (regs);
0568 #else
0569 return readl (regs);
0570 #endif
0571 }
0572
0573 static inline void _ohci_writel (const struct ohci_hcd *ohci,
0574 const unsigned int val, __hc32 __iomem *regs)
0575 {
0576 #ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO
0577 big_endian_mmio(ohci) ?
0578 writel_be (val, regs) :
0579 writel (val, regs);
0580 #else
0581 writel (val, regs);
0582 #endif
0583 }
0584
0585 #define ohci_readl(o,r) _ohci_readl(o,r)
0586 #define ohci_writel(o,v,r) _ohci_writel(o,v,r)
0587
0588
0589
0590
0591
0592 static inline __hc16 cpu_to_hc16 (const struct ohci_hcd *ohci, const u16 x)
0593 {
0594 return big_endian_desc(ohci) ?
0595 (__force __hc16)cpu_to_be16(x) :
0596 (__force __hc16)cpu_to_le16(x);
0597 }
0598
0599 static inline __hc16 cpu_to_hc16p (const struct ohci_hcd *ohci, const u16 *x)
0600 {
0601 return big_endian_desc(ohci) ?
0602 cpu_to_be16p(x) :
0603 cpu_to_le16p(x);
0604 }
0605
0606 static inline __hc32 cpu_to_hc32 (const struct ohci_hcd *ohci, const u32 x)
0607 {
0608 return big_endian_desc(ohci) ?
0609 (__force __hc32)cpu_to_be32(x) :
0610 (__force __hc32)cpu_to_le32(x);
0611 }
0612
0613 static inline __hc32 cpu_to_hc32p (const struct ohci_hcd *ohci, const u32 *x)
0614 {
0615 return big_endian_desc(ohci) ?
0616 cpu_to_be32p(x) :
0617 cpu_to_le32p(x);
0618 }
0619
0620
0621 static inline u16 hc16_to_cpu (const struct ohci_hcd *ohci, const __hc16 x)
0622 {
0623 return big_endian_desc(ohci) ?
0624 be16_to_cpu((__force __be16)x) :
0625 le16_to_cpu((__force __le16)x);
0626 }
0627
0628 static inline u16 hc16_to_cpup (const struct ohci_hcd *ohci, const __hc16 *x)
0629 {
0630 return big_endian_desc(ohci) ?
0631 be16_to_cpup((__force __be16 *)x) :
0632 le16_to_cpup((__force __le16 *)x);
0633 }
0634
0635 static inline u32 hc32_to_cpu (const struct ohci_hcd *ohci, const __hc32 x)
0636 {
0637 return big_endian_desc(ohci) ?
0638 be32_to_cpu((__force __be32)x) :
0639 le32_to_cpu((__force __le32)x);
0640 }
0641
0642 static inline u32 hc32_to_cpup (const struct ohci_hcd *ohci, const __hc32 *x)
0643 {
0644 return big_endian_desc(ohci) ?
0645 be32_to_cpup((__force __be32 *)x) :
0646 le32_to_cpup((__force __le32 *)x);
0647 }
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661 static inline u16 ohci_frame_no(const struct ohci_hcd *ohci)
0662 {
0663 u32 tmp;
0664 if (big_endian_desc(ohci)) {
0665 tmp = be32_to_cpup((__force __be32 *)&ohci->hcca->frame_no);
0666 if (!(ohci->flags & OHCI_QUIRK_FRAME_NO))
0667 tmp >>= 16;
0668 } else
0669 tmp = le32_to_cpup((__force __le32 *)&ohci->hcca->frame_no);
0670
0671 return (u16)tmp;
0672 }
0673
0674 static inline __hc16 *ohci_hwPSWp(const struct ohci_hcd *ohci,
0675 const struct td *td, int index)
0676 {
0677 return (__hc16 *)(big_endian_desc(ohci) ?
0678 &td->hwPSW[index ^ 1] : &td->hwPSW[index]);
0679 }
0680
0681 static inline u16 ohci_hwPSW(const struct ohci_hcd *ohci,
0682 const struct td *td, int index)
0683 {
0684 return hc16_to_cpup(ohci, ohci_hwPSWp(ohci, td, index));
0685 }
0686
0687
0688
0689 #define FI 0x2edf
0690 #define FSMP(fi) (0x7fff & ((6 * ((fi) - 210)) / 7))
0691 #define FIT (1 << 31)
0692 #define LSTHRESH 0x628
0693
0694 static inline void periodic_reinit (struct ohci_hcd *ohci)
0695 {
0696 u32 fi = ohci->fminterval & 0x03fff;
0697 u32 fit = ohci_readl(ohci, &ohci->regs->fminterval) & FIT;
0698
0699 ohci_writel (ohci, (fit ^ FIT) | ohci->fminterval,
0700 &ohci->regs->fminterval);
0701 ohci_writel (ohci, ((9 * fi) / 10) & 0x3fff,
0702 &ohci->regs->periodicstart);
0703 }
0704
0705
0706
0707
0708
0709 #define read_roothub(hc, register, mask) ({ \
0710 u32 temp = ohci_readl (hc, &hc->regs->roothub.register); \
0711 if (temp == -1) \
0712 hc->rh_state = OHCI_RH_HALTED; \
0713 else if (hc->flags & OHCI_QUIRK_AMD756) \
0714 while (temp & mask) \
0715 temp = ohci_readl (hc, &hc->regs->roothub.register); \
0716 temp; })
0717
0718 static inline u32 roothub_a (struct ohci_hcd *hc)
0719 { return read_roothub (hc, a, 0xfc0fe000); }
0720 static inline u32 roothub_b (struct ohci_hcd *hc)
0721 { return ohci_readl (hc, &hc->regs->roothub.b); }
0722 static inline u32 roothub_status (struct ohci_hcd *hc)
0723 { return ohci_readl (hc, &hc->regs->roothub.status); }
0724 static inline u32 roothub_portstatus (struct ohci_hcd *hc, int i)
0725 { return read_roothub (hc, portstatus [i], 0xffe0fce0); }
0726
0727
0728
0729 struct ohci_driver_overrides {
0730 const char *product_desc;
0731 size_t extra_priv_size;
0732 int (*reset)(struct usb_hcd *hcd);
0733 };
0734
0735 extern void ohci_init_driver(struct hc_driver *drv,
0736 const struct ohci_driver_overrides *over);
0737 extern int ohci_restart(struct ohci_hcd *ohci);
0738 extern int ohci_setup(struct usb_hcd *hcd);
0739 extern int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup);
0740 extern int ohci_resume(struct usb_hcd *hcd, bool hibernated);
0741 extern int ohci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
0742 u16 wIndex, char *buf, u16 wLength);
0743 extern int ohci_hub_status_data(struct usb_hcd *hcd, char *buf);