hc_sl811.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:12k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * SL811HS HCD (Host Controller Driver) for USB.
  3.  * 
  4.  * COPYRIGHT (C) by CYPRESS SEMICONDUCTOR INC 
  5.  * 
  6.  *
  7.  */
  8. #define GET_FRAME_NUMBER(hci) READ_REG32 (hci, HcFmNumber)
  9. /*
  10.  * Maximum number of root hub ports
  11.  */
  12. #define MAX_ROOT_PORTS 15 /* maximum OHCI root hub ports */
  13. /* control and status registers */
  14. #define HcRevision 0x00
  15. #define HcControl 0x01
  16. #define HcCommandStatus 0x02
  17. #define HcInterruptStatus 0x03
  18. #define HcInterruptEnable 0x04
  19. #define HcInterruptDisable 0x05
  20. #define HcFmInterval 0x0D
  21. #define HcFmRemaining 0x0E
  22. #define HcFmNumber 0x0F
  23. #define HcLSThreshold 0x11
  24. #define HcRhDescriptorA 0x12
  25. #define HcRhDescriptorB 0x13
  26. #define HcRhStatus 0x14
  27. #define HcRhPortStatus 0x15
  28. #define HcHardwareConfiguration 0x20
  29. #define HcDMAConfiguration 0x21
  30. #define HcTransferCounter 0x22
  31. #define HcuPInterrupt 0x24
  32. #define HcuPInterruptEnable 0x25
  33. #define HcChipID 0x27
  34. #define HcScratch 0x28
  35. #define HcSoftwareReset 0x29
  36. #define HcITLBufferLength 0x2A
  37. #define HcATLBufferLength 0x2B
  38. #define HcBufferStatus 0x2C
  39. #define HcReadBackITL0Length 0x2D
  40. #define HcReadBackITL1Length 0x2E
  41. #define HcITLBufferPort 0x40
  42. #define HcATLBufferPort 0x41
  43. /* OHCI CONTROL AND STATUS REGISTER MASKS */
  44. /*
  45.  * HcControl (control) register masks
  46.  */
  47. #define OHCI_CTRL_HCFS (3 << 6) /* BUS state mask */
  48. #define OHCI_CTRL_RWC (1 << 9) /* remote wakeup connected */
  49. #define OHCI_CTRL_RWE (1 << 10) /* remote wakeup enable */
  50. /* pre-shifted values for HCFS */
  51. #define OHCI_USB_RESET (0 << 6)
  52. #define OHCI_USB_RESUME (1 << 6)
  53. #define OHCI_USB_OPER (2 << 6)
  54. #define OHCI_USB_SUSPEND (3 << 6)
  55. /*
  56.  * HcCommandStatus (cmdstatus) register masks
  57.  */
  58. #define OHCI_HCR (1 << 0) /* host controller reset */
  59. #define OHCI_SO (3 << 16) /* scheduling overrun count */
  60. /*
  61.  * masks used with interrupt registers:
  62.  * HcInterruptStatus (intrstatus)
  63.  * HcInterruptEnable (intrenable)
  64.  * HcInterruptDisable (intrdisable)
  65.  */
  66. #define OHCI_INTR_SO (1 << 0) /* scheduling overrun */
  67. #define OHCI_INTR_SF (1 << 2) /* start frame */
  68. #define OHCI_INTR_RD (1 << 3) /* resume detect */
  69. #define OHCI_INTR_UE (1 << 4) /* unrecoverable error */
  70. #define OHCI_INTR_FNO (1 << 5) /* frame number overflow */
  71. #define OHCI_INTR_RHSC (1 << 6) /* root hub status change */
  72. #define OHCI_INTR_ATD (1 << 7) /* scheduling overrun */
  73. #define OHCI_INTR_MIE (1 << 31) /* master interrupt enable */
  74. /*
  75.  * HcHardwareConfiguration
  76.  */
  77. #define InterruptPinEnable (1 << 0)
  78. #define InterruptPinTrigger (1 << 1)
  79. #define InterruptOutputPolarity (1 << 2)
  80. #define DataBusWidth16 (1 << 3)
  81. #define DREQOutputPolarity (1 << 5)
  82. #define DACKInputPolarity (1 << 6)
  83. #define EOTInputPolarity (1 << 7)
  84. #define DACKMode (1 << 8)
  85. #define AnalogOCEnable (1 << 10)
  86. #define SuspendClkNotStop (1 << 11)
  87. #define DownstreamPort15KRSel (1 << 12)
  88. /* 
  89.  * HcDMAConfiguration
  90.  */
  91. #define DMAReadWriteSelect  (1 << 0)
  92. #define ITL_ATL_DataSelect (1 << 1)
  93. #define DMACounterSelect (1 << 2)
  94. #define DMAEnable (1 << 4)
  95. #define BurstLen_1 0
  96. #define BurstLen_4 (1 << 5)
  97. #define BurstLen_8 (2 << 5)
  98. /*
  99.  * HcuPInterrupt
  100.  */
  101. #define SOFITLInt (1 << 0)
  102. #define ATLInt (1 << 1)
  103. #define AllEOTInterrupt (1 << 2)
  104. #define OPR_Reg (1 << 4)
  105. #define HCSuspended (1 << 5)
  106. #define ClkReady (1 << 6)
  107. /*
  108.  * HcBufferStatus
  109.  */
  110. #define ITL0BufferFull (1 << 0)
  111. #define ITL1BufferFull (1 << 1)
  112. #define ATLBufferFull (1 << 2)
  113. #define ITL0BufferDone (1 << 3)
  114. #define ITL1BufferDone (1 << 4)
  115. #define ATLBufferDone (1 << 5)
  116. /* OHCI ROOT HUB REGISTER MASKS */
  117. /* roothub.portstatus [i] bits */
  118. #define RH_PS_CCS            0x00000001 /* current connect status */
  119. #define RH_PS_PES            0x00000002 /* port enable status */
  120. #define RH_PS_PSS            0x00000004 /* port suspend status */
  121. #define RH_PS_POCI           0x00000008 /* port over current indicator */
  122. #define RH_PS_PRS            0x00000010 /* port reset status */
  123. #define RH_PS_PPS            0x00000100 /* port power status */
  124. #define RH_PS_LSDA           0x00000200 /* low speed device attached */
  125. #define RH_PS_CSC            0x00010000 /* connect status change */
  126. #define RH_PS_PESC           0x00020000 /* port enable status change */
  127. #define RH_PS_PSSC           0x00040000 /* port suspend status change */
  128. #define RH_PS_OCIC           0x00080000 /* over current indicator change */
  129. #define RH_PS_PRSC           0x00100000 /* port reset status change */
  130. /* roothub.status bits */
  131. #define RH_HS_LPS 0x00000001 /* local power status */
  132. #define RH_HS_OCI 0x00000002 /* over current indicator */
  133. #define RH_HS_DRWE 0x00008000 /* device remote wakeup enable */
  134. #define RH_HS_LPSC 0x00010000 /* local power status change */
  135. #define RH_HS_OCIC 0x00020000 /* over current indicator change */
  136. #define RH_HS_CRWE 0x80000000 /* clear remote wakeup enable */
  137. /* roothub.b masks */
  138. #define RH_B_DR 0x0000ffff /* device removable flags */
  139. #define RH_B_PPCM 0xffff0000 /* port power control mask */
  140. /* roothub.a masks */
  141. #define RH_A_NDP (0xff << 0) /* number of downstream ports */
  142. #define RH_A_PSM (1 << 8) /* power switching mode */
  143. #define RH_A_NPS (1 << 9) /* no power switching */
  144. #define RH_A_DT (1 << 10) /* device type (mbz) */
  145. #define RH_A_OCPM (1 << 11) /* over current protection mode */
  146. #define RH_A_NOCP (1 << 12) /* no over current protection */
  147. #define RH_A_POTPGT (0xff << 24) /* power on to power good time */
  148. #define URB_DEL 1
  149. #define PORT_STAT_DEFAULT 0x0100
  150. #define PORT_CONNECT_STAT   0x1
  151. #define PORT_ENABLE_STAT 0x2
  152. #define PORT_SUSPEND_STAT 0x4
  153. #define PORT_OVER_CURRENT_STAT 0x8
  154. #define PORT_RESET_STAT 0x10
  155. #define PORT_POWER_STAT 0x100
  156. #define PORT_LOW_SPEED_DEV_ATTACH_STAT 0x200
  157. #define PORT_CHANGE_DEFAULT 0x0
  158. #define PORT_CONNECT_CHANGE 0x1
  159. #define PORT_ENABLE_CHANGE 0x2
  160. #define PORT_SUSPEND_CHANGE 0x4
  161. #define PORT_OVER_CURRENT_CHANGE 0x8
  162. #define PORT_RESET_CHANGE 0x10
  163. /* Port Status Request info */
  164. typedef struct portstat {
  165. __u16 portChange;
  166. __u16 portStatus;
  167. } portstat_t;
  168. typedef struct hcipriv {
  169. int irq;
  170. int disabled; /* e.g. got a UE, we're hung */
  171. atomic_t resume_count; /* defending against multiple resumes */
  172. struct ohci_regs *regs; /* OHCI controller's memory */
  173. int hcport; /* I/O base address */
  174. int hcport2; /* I/O data reg addr */
  175. struct portstat *RHportStatus; /* root hub port status */
  176. int intrstatus;
  177. __u32 hc_control; /* copy of the hc control reg */
  178. int frame;
  179. __u8 *tl;
  180. int xferPktLen;
  181. int atl_len;
  182. int atl_buffer_len;
  183. int itl0_len;
  184. int itl1_len;
  185. int itl_buffer_len;
  186. int itl_index;
  187. int tl_last;
  188. int units_left;
  189. } hcipriv_t;
  190. struct hci;
  191. #define cClt        0 // Control
  192. #define cISO        1 // ISO
  193. #define cBULK       2 // BULK
  194. #define cInt        3 // Interrupt
  195. #define ISO_BIT     0x10
  196. /*-------------------------------------------------------------------------
  197.  * EP0 use for configuration and Vendor Specific command interface
  198.  *------------------------------------------------------------------------*/
  199. #define cMemStart       0x10
  200. #define EP0Buf          0x40 /* SL11H/SL811H memory start at 0x40 */
  201. #define EP0Len          0x40 /* Length of config buffer EP0Buf */
  202. #define EP1Buf          0x60
  203. #define EP1Len          0x40
  204. /*-------------------------------------------------------------------------
  205.  * SL11H/SL811H memory from 80h-ffh use as ping-pong buffer.
  206.  *------------------------------------------------------------------------*/
  207. #define uBufA           0x80 /* buffer A address for DATA0 */
  208. #define uBufB           0xc0 /* buffer B address for DATA1 */
  209. #define uXferLen        0x40 /* xfer length */
  210. #define sMemSize        0xc0 /* Total SL11 memory size */
  211. #define cMemEnd         256
  212. /*-------------------------------------------------------------------------
  213.  * SL811H Register Control memory map
  214.  * --Note: 
  215.  *      --SL11H only has one control register set from 0x00-0x04
  216.  *      --SL811H has two control register set from 0x00-0x04 and 0x08-0x0c
  217.  *------------------------------------------------------------------------*/
  218. #define EP0Control      0x00
  219. #define EP0Address      0x01
  220. #define EP0XferLen      0x02
  221. #define EP0Status       0x03
  222. #define EP0Counter      0x04
  223. #define EP1Control      0x08
  224. #define EP1Address      0x09
  225. #define EP1XferLen      0x0a
  226. #define EP1Status       0x0b
  227. #define EP1Counter      0x0c
  228. #define CtrlReg         0x05
  229. #define IntEna          0x06
  230.  // 0x07 is reserved
  231. #define IntStatus       0x0d
  232. #define cDATASet        0x0e
  233. #define cSOFcnt         0x0f
  234. #define IntMask         0x57 /* Reset|DMA|EP0|EP2|EP1 for IntEna */
  235. #define HostMask        0x47 /* Host request command  for IntStatus */
  236. #define ReadMask        0xd7 /* Read mask interrupt   for IntStatus */
  237. /*-------------------------------------------------------------------------
  238.  * Standard Chapter 9 definition
  239.  *-------------------------------------------------------------------------
  240.  */
  241. #define GET_STATUS      0x00
  242. #define CLEAR_FEATURE   0x01
  243. #define SET_FEATURE     0x03
  244. #define SET_ADDRESS     0x05
  245. #define GET_DESCRIPTOR  0x06
  246. #define SET_DESCRIPTOR  0x07
  247. #define GET_CONFIG      0x08
  248. #define SET_CONFIG      0x09
  249. #define GET_INTERFACE   0x0a
  250. #define SET_INTERFACE   0x0b
  251. #define SYNCH_FRAME     0x0c
  252. #define DEVICE          0x01
  253. #define CONFIGURATION   0x02
  254. #define STRING          0x03
  255. #define INTERFACE       0x04
  256. #define ENDPOINT        0x05
  257. /*-------------------------------------------------------------------------
  258.  * SL11H/SL811H definition
  259.  *-------------------------------------------------------------------------
  260.  */
  261. #define DATA0_WR 0x07 // (Arm+Enable+tranmist to Host+DATA0)
  262. #define DATA1_WR 0x47 // (Arm+Enable+tranmist to Host on DATA1)
  263. #define ZDATA0_WR 0x05 // (Arm+Transaction Ignored+tranmist to Host+DATA0)
  264. #define ZDATA1_WR 0x45 // (Arm+Transaction Ignored+tranmist to Host+DATA1)
  265. #define DATA0_RD 0x03 // (Arm+Enable+received from Host+DATA0)
  266. #define DATA1_RD 0x43 // (Arm+Enable+received from Host+DATA1)
  267. #define PID_SETUP 0x2d // USB Specification 1.1 Standard Definition
  268. #define PID_SOF 0xA5
  269. #define PID_IN 0x69
  270. #define PID_OUT 0xe1
  271. #define MAX_RETRY 0xffff
  272. #define TIMEOUT 5 /* 2 mseconds */
  273. #define SL11H_HOSTCTLREG 0
  274. #define SL11H_BUFADDRREG 1
  275. #define SL11H_BUFLNTHREG 2
  276. #define SL11H_PKTSTATREG 3 /* read */
  277. #define SL11H_PIDEPREG 3 /* write */
  278. #define SL11H_XFERCNTREG 4 /* read */
  279. #define SL11H_DEVADDRREG 4 /* write */
  280. #define SL11H_CTLREG1 5
  281. #define SL11H_INTENBLREG 6
  282. #define SL11H_HOSTCTLREG_B 8
  283. #define SL11H_BUFADDRREG_B 9
  284. #define SL11H_BUFLNTHREG_B 0x0A
  285. #define SL11H_PKTSTATREG_B 0x0B /* read */
  286. #define SL11H_PIDEPREG_B 0x0B /* write */
  287. #define SL11H_XFERCNTREG_B 0x0C /* read */
  288. #define SL11H_DEVADDRREG_B 0x0C /* write */
  289. #define SL11H_INTSTATREG 0x0D /* write clears bitwise */
  290. #define SL11H_HWREVREG 0x0E /* read */
  291. #define SL11H_SOFLOWREG 0x0E /* write */
  292. #define SL11H_SOFTMRREG 0x0F /* read */
  293. #define SL11H_CTLREG2 0x0F /* write */
  294. #define SL11H_DATA_START 0x10
  295. /* Host control register bits (addr 0) */
  296. #define SL11H_HCTLMASK_ARM 1
  297. #define SL11H_HCTLMASK_ENBLEP 2
  298. #define SL11H_HCTLMASK_WRITE 4
  299. #define SL11H_HCTLMASK_ISOCH 0x10
  300. #define SL11H_HCTLMASK_AFTERSOF 0x20
  301. #define SL11H_HCTLMASK_SEQ 0x40
  302. #define SL11H_HCTLMASK_PREAMBLE 0x80
  303. /* Packet status register bits (addr 3) */
  304. #define SL11H_STATMASK_ACK 1
  305. #define SL11H_STATMASK_ERROR 2
  306. #define SL11H_STATMASK_TMOUT 4
  307. #define SL11H_STATMASK_SEQ 8
  308. #define SL11H_STATMASK_SETUP 0x10
  309. #define SL11H_STATMASK_OVF 0x20
  310. #define SL11H_STATMASK_NAK 0x40
  311. #define SL11H_STATMASK_STALL 0x80
  312. /* Control register 1 bits (addr 5) */
  313. #define SL11H_CTL1MASK_DSBLSOF 1
  314. #define SL11H_CTL1MASK_NOTXEOF2 4
  315. #define SL11H_CTL1MASK_DSTATE 0x18
  316. #define SL11H_CTL1MASK_NSPD 0x20
  317. #define SL11H_CTL1MASK_SUSPEND 0x40
  318. #define SL11H_CTL1MASK_CLK12 0x80
  319. #define SL11H_CTL1VAL_RESET 8
  320. /* Interrut enable (addr 6) and interrupt status register bits (addr 0xD) */
  321. #define SL11H_INTMASK_XFERDONE 1
  322. #define SL11H_INTMASK_SOFINTR 0x10
  323. #define SL11H_INTMASK_INSRMV 0x20
  324. #define SL11H_INTMASK_USBRESET 0x40
  325. #define SL11H_INTMASK_DSTATE 0x80 /* only in status reg */
  326. /* HW rev and SOF lo register bits (addr 0xE) */
  327. #define SL11H_HWRMASK_HWREV 0xF0
  328. /* SOF counter and control reg 2 (addr 0xF) */
  329. #define SL11H_CTL2MASK_SOFHI 0x3F
  330. #define SL11H_CTL2MASK_DSWAP 0x40
  331. #define SL11H_CTL2MASK_HOSTMODE 0xae