usbOhci.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:19k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usbOhci.h - USB OHCI controller definitions */
  2. /* Copyright 2000 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01b,28jan00,rcb  Redefine page masks for isochronous TDs.
  7. 01a,04oct99,rcb  First.
  8. */
  9. /*
  10. DESCRIPTION
  11. Defines the USB OHCI (Open Host Controller Interface) register file
  12. interface and memory structures shared between USB software and the OHCI
  13. hardware.  
  14. Please refer to the OpenHCI Specification, Release 1.0a or later, for more 
  15. information.
  16. */
  17. #ifndef __INCusbOhcih
  18. #define __INCusbOhcih
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. /* defines */
  23. /* OpenHCI PCI class defintion */
  24. #define OHCI_CLASS 0x0c     /* BASEC value for serial bus */
  25. #define OHCI_SUBCLASS 0x03     /* SCC value for USB */
  26. #define OHCI_PGMIF 0x10     /* OpenHCI */
  27. /* completion codes */
  28. #define OHCI_CC_NO_ERROR 0x0     /* no errors detected */
  29. #define OHCI_CC_CRC 0x1     /* CRC error */
  30. #define OHCI_CC_BITSTUFF 0x2     /* bit stuffing error */
  31. #define OHCI_CC_DATA_TOGGLE 0x3     /* data toggle mismatch */
  32. #define OHCI_CC_STALL 0x4     /* endpoint stall */
  33. #define OHCI_CC_NO_RESPONSE 0x5     /* device not responding */
  34. #define OHCI_CC_PID_CHECK 0x6     /* check bits on PID failed */
  35. #define OHCI_CC_UNEXPECTED_PID 0x7     /* unexpected PID */
  36. #define OHCI_CC_DATA_OVERRUN 0x8     /* packet exceeded MPS */
  37. #define OHCI_CC_DATA_UNDERRUN 0x9     /* packet less than MPS */
  38. #define OHCI_CC_BFR_OVERRUN 0xc     /* host bus couldn't keep up */
  39. #define OHCI_CC_BFR_UNDERRUN 0xd     /* host bus couldn't keep up */
  40. #define OHCI_CC_NOT_ACCESSED 0xe     /* set by software */
  41. /* typedefs */
  42. /* Host Controller Operational Registers
  43.  *
  44.  * NOTE: The following values are offsets relative to the base of the memory
  45.  * window allocated for the OHCI controller.
  46.  */
  47. #define OHCI_HC_REVISION 0x0
  48. #define OHCI_HC_CONTROL  0x4
  49. #define OHCI_HC_COMMAND_STATUS 0x8
  50. #define OHCI_HC_INT_STATUS 0xc
  51. #define OHCI_HC_INT_ENABLE 0x10
  52. #define OHCI_HC_INT_DISABLE 0x14
  53. #define OHCI_HC_HCCA 0x18
  54. #define OHCI_HC_PERIOD_CUR_ED 0x1c
  55. #define OHCI_HC_CONTROL_HEAD_ED 0x20
  56. #define OHCI_HC_CONTROL_CUR_ED 0x24
  57. #define OHCI_HC_BULK_HEAD_ED 0x28
  58. #define OHCI_HC_BULK_CUR_ED 0x2c
  59. #define OHCI_HC_DONE_HEAD 0x30
  60. #define OHCI_HC_FM_INTERVAL 0x34
  61. #define OHCI_HC_FM_REMAINING 0x38
  62. #define OHCI_HC_FM_NUMBER 0x3c
  63. #define OHCI_HC_PERIODIC_START 0x40
  64. #define OHCI_HC_LS_THRESHOLD 0x44
  65. #define OHCI_HC_RH_DESCR_A 0x48
  66. #define OHCI_HC_RH_DESCR_B 0x4c
  67. #define OHCI_HC_RH_STATUS 0x50
  68. #define OHCI_HC_RH_PORT_STATUS 0x54     /* array of port regs */
  69. /* OHCI_HC_REVISION register */
  70. #define OHCI_RREV_REV_MASK 0x000000ff  /* BCD OpenHCI revision */
  71. /* OHCI_HC_CONTROL register */
  72. #define OHCI_CTL_CBSR_MASK 0x00000003  /* contro/bulk srvc ratio */
  73. #define OHCI_CTL_CBSR_ROT 0
  74. #define OHCI_CTL_CBSR_1TO1 0x00000000
  75. #define OHCI_CTL_CBSR_2TO1 0x00000001
  76. #define OHCI_CTL_CBSR_3TO1 0x00000002
  77. #define OHCI_CTL_CBSR_4TO1 0x00000003
  78. #define OHCI_CTL_PLE 0x00000004  /* periodic list enable */
  79. #define OHCI_CTL_IE 0x00000008  /* isochronous list enable */
  80. #define OHCI_CTL_CLE 0x00000010  /* control list enable */
  81. #define OHCI_CTL_BLE 0x00000020  /* bulk list enable */
  82. #define OHCI_CTL_HCFS_MASK 0x000000c0  /* host controller func state */
  83. #define OHCI_CTL_HCFS_RESET 0x00000000  /* UsbReset */
  84. #define OHCI_CTL_HCFS_RESUME 0x00000040  /* UsbResume */
  85. #define OHCI_CTL_HCFS_OP 0x00000080  /* UsbOperational */
  86. #define OHCI_CTL_HCFS_SUSPEND 0x000000c0  /* UsbSuspend */
  87. #define OHCI_CTL_IR 0x00000100  /* interrupt routing */
  88. #define OHCI_CTL_RWC 0x00000200  /* remote wakeup connected */
  89. #define OHCI_CTL_RWE 0x00000400  /* remote wakeup enable */
  90. /* macros to format/retrieve OHCI_TCL_CBSR (control/bulk ratio) field */
  91. #define OHCI_CTL_CBSR(x)     (((x) & OHCI_CTL_CBSR_MASK) >> OHCI_CTL_CBSR_ROT)
  92. #define OHCI_CTL_CBSR_FMT(x) (((x) << OHCI_CTL_CBSR_ROT) & OHCI_CTL_CBSR_MASK)
  93. /* OHCI_HC_COMMAND_STATUS register */
  94. #define OHCI_CS_HCR 0x00000001  /* host controller reset */
  95. #define OHCI_CS_CLF 0x00000002  /* control list filled */
  96. #define OHCI_CS_BLF 0x00000004  /* bulk list filled */
  97. #define OHCI_CS_OCR 0x00000008  /* ownership change request */
  98. #define OHCI_CS_SOC_MASK 0x00030000  /* scheduling overrun count */
  99. #define OHCI_CS_SOC_ROT  16
  100. /* macro to retrieve OHCI_CS_SOC (control/bulk ratio) field */
  101. #define OHCI_CS_SOC(x) (((x) & OHCI_CS_SOC_MASK) >> OHCI_CS_SOC_ROT)
  102. /* OHCI_HC_INT_STATUS, OHCI_HC_INT_ENABLE, and OHCI_HC_INT_DISABLE registers */
  103. #define OHCI_INT_SO 0x00000001  /* scheduling overrun */
  104. #define OHCI_INT_WDH 0x00000002  /* writeback done head */
  105. #define OHCI_INT_SF 0x00000004  /* start of frame */
  106. #define OHCI_INT_RD 0x00000008  /* resume detected */
  107. #define OHCI_INT_UE 0x00000010  /* unrecoverable error */
  108. #define OHCI_INT_FNO 0x00000020  /* frame number overflow */
  109. #define OHCI_INT_RHSC 0x00000040  /* root hub status change */
  110. #define OHCI_INT_OC 0x40000000  /* ownership change */
  111. #define OHCI_INT_MIE 0x80000000  /* master interrupt enable */
  112. /* OHCI_HC_FM_INTERVAL register */
  113. #define OHCI_FMI_FI_MASK 0x00003fff  /* frame interval */
  114. #define OHCI_FMI_FI_ROT  0
  115. #define OHCI_FMI_FI_DEFAULT 11999
  116. #define OHCI_FMI_FSMPS_MASK 0x7fff0000  /* FS largest data packet */
  117. #define OHCI_FMI_FSMPS_ROT 16
  118. #define OHCI_FMI_FIT 0x80000000  /* frame interval toggle */
  119. /* macros to format/retrieve OHCI_FMI_FI (frame interval) field */
  120. #define OHCI_FMI_FI(x)     (((x) & OHCI_FMI_FI_MASK) >> OHCI_FMI_FI_ROT)
  121. #define OHCI_FMI_FI_FMT(x)  (((x) << OHCI_FMI_FI_ROT) & OHCI_FMI_FI_MASK)
  122. /* macros to format/retrieve OHCI_FMI_FSMPS (FS largest data packet) field */
  123. #define OHCI_FMI_FSMPS(x)     (((x) & OHCI_FMI_FSMPS_MASK) >> OHCI_FMI_FSMPS_ROT)
  124. #define OHCI_FMI_FSMPS_FMT(x) (((x) << OHCI_FMI_FSMPS_ROT) & OHCI_FMI_FSMPS_MASK)
  125. /* OHCI_HC_FM_REMAINING register */
  126. #define OHCI_FMR_FR_MASK 0x00003fff  /* frame remaining */
  127. #define OHCI_FMR_FR_ROT  0
  128. #define OHCI_FMR_FRT 0x80000000  /* frame remaining toggle */
  129. /* macro to retrieve OHCI_FMI_FR (frame remaining) field */
  130. #define OHCI_FMI_FR(x) (((x) & OHCI_FMI_FR_MASK) >> OHCI_FMI_FR_ROT)
  131. /* OHCI_HC_FM_NUMBER register */
  132. #define OHCI_FMN_FN_MASK 0x0000ffff  /* frame number */
  133. #define OHCI_FMN_FN_ROT  0
  134. /* macro to retrieve OHCI_FMN_FN (frame number) field */
  135. #define OHCI_FMN_FN(x) (((x) & OHCI_FMN_FN_MASK) >> OHCI_FMN_FN_ROT)
  136. /* OHCI_FRAME_WINDOW defines the frame number range supported by OHCI. */
  137. #define OHCI_FRAME_WINDOW 0x10000
  138. /* OHCI_HC_PERIODIC_START register */
  139. #define OHCI_PS_PS_MASK  0x00003fff  /* periodic start */
  140. #define OHCI_PS_PS_ROT 0
  141. /* macros to format/retrieve OHCI_PS_PS (perodic start) field */
  142. #define OHCI_PS_PS(x)   (((x) & OHCI_PS_PS_MASK) >> OHCI_PS_PS_ROT)
  143. #define OHCI_PS_PS_FMT(x) (((x) << OHCI_PS_PS_ROT) & OHCI_PS_PS_MASK)
  144. /* OHCI_LS_THRESHOLD resgister */
  145. #define OHCI_LS_LST_MASK 0x000003ff  /* lowspeed threshold */
  146. #define OHCI_LS_LST_ROT  0
  147. /* macros to format/retrieve OHCI_LS_LST (low speed threshold) field */
  148. #define OHCI_LS_LST(x)    (((x) & OHCI_LS_LST_MASK) >> OHCI_LS_LST_ROT)
  149. #define OHCI_LS_LST_FMT(x) (((x) << OHCI_LS_LST_ROT) & OHCI_LS_LST_MASK)
  150. /* OHCI_RH_DESCR_A register */
  151. #define OHCI_RHDA_NDP_MASK 0x000000ff  /* number of downstream ports */
  152. #define OHCI_RHDA_NDP_ROT 0
  153. #define OHCI_RHDA_PSM 0x00000100  /* power swithcing mode */
  154. #define OHCI_RHDA_NPS 0x00000200  /* no power switching */
  155. #define OHCI_RHDA_DT 0x00000400  /* device type */
  156. #define OHCI_RHDA_OCPM 0x00000800  /* overcurrent protection mode */
  157. #define OHCI_RHDA_NOCP 0x00001000  /* no overcurrent protection */
  158. #define OHCI_RHDA_POTPGT_MASK 0xff000000  /* power on to pwr good time */
  159. #define OHCI_RHDA_POTPGT_ROT 24
  160. /* macro to retrieve OHCI_RHDA_NDP (nbr of downstream ports) field */
  161. #define OHCI_RHDA_NDP(x)    (((x) & OHCI_RHDA_NDP_MASK) >> OHCI_RHDA_NDP_ROT)
  162. /* macro to retrieve OHCI_RHDA_POTPGT (pwr on to pwr good time) field */
  163. #define OHCI_RHDA_POTPGT(x) (((x) & OHCI_RHDA_POTPGT_MASK) >> OHCI_RHDA_POTPGT_ROT)
  164. /* OHCI_RH_DESCR_B register */
  165. #define OHCI_RHDB_DR_MASK 0x0000ffff  /* device removable */
  166. #define OHCI_RHDB_DR_ROT 0
  167. #define OHCI_RHDB_PPCM_MASK 0xffff0000  /* port power control mask */
  168. #define OHCI_RHDB_PPCM_ROT 0
  169. /* macros to format/retrieve OHCI_RHDB_DR (device removable) field */
  170. #define OHCI_RHDB_DR(x)     (((x) & OHCI_RHDB_DR_MASK) >> OHCI_RHDB_DR_ROT)
  171. #define OHCI_RHDB_DR_FMT(x) (((x) << OHCI_RHDB_DR_ROT) & OHCI_RHDB_DR_MASK)
  172. /* macros to format/retrieve OHCI_RHDB_PPCM (port pwr control mask) field */
  173. #define OHCI_RHDB_PPCM(x)     (((x) & OHCI_RHDB_PPCM_MASK) >> OHCI_RHDB_PPCM_ROT)
  174. #define OHCI_RHDB_PPCM_FMT(x) (((x) << OHCI_RHDB_PPCM_ROT) & OHCI_RHDB_PPCM_MASK)
  175. /* OHCI_RH_STATUS register */
  176. #define OHCI_RHS_LPS 0x00000001  /* local power status */
  177. #define OHCI_RHS_CLR_GPWR 0x00000001  /* write '1' to clear global pwr */
  178. #define OHCI_RHS_OCI 0x00000002  /* over current indicator */
  179. #define OHCI_RHS_DRWE 0x00008000  /* device remote wakeup enable */
  180. #define OHCI_RHS_SET_RWE 0x00008000  /* write '1' to set remote wakeup */
  181. #define OHCI_RHS_LPSC 0x00010000  /* local power status change */
  182. #define OHCI_RHS_SET_GPWR 0x00010000  /* write '1' to set global pwr */
  183. #define OHCI_RHS_OCIC 0x00020000  /* over current indicator change */
  184. #define OHCI_RHS_CRWE 0x80000000  /* clear remote wakeup enable */
  185. #define OHCI_RHS_CLR_RWE 0x80000000  /* write '1' to clear wakeup enable */
  186. /* OHCI_RH_PORT_STATUS register(s) */
  187. #define OHCI_RHPS_CCS 0x00000001  /* current connect status */
  188. #define OHCI_RHPS_CLR_PE 0x00000001  /* write '1' to clear port enable */
  189. #define OHCI_RHPS_PES 0x00000002  /* port enable status */
  190. #define OHCI_RHPS_SET_PE 0x00000002  /* write '1' to set port enable */
  191. #define OHCI_RHPS_PSS 0x00000004  /* port suspend status */
  192. #define OHCI_RHPS_SET_PS 0x00000004  /* write '1' to set port suspend */
  193. #define OHCI_RHPS_POCI 0x00000008  /* port over current indicator */
  194. #define OHCI_RHPS_CLR_PS 0x00000008  /* write '1' to clear port suspend */
  195. #define OHCI_RHPS_PRS 0x00000010  /* port reset status */
  196. #define OHCI_RHPS_PPS 0x00000100  /* port power status */
  197. #define OHCI_RHPS_SET_PWR 0x00000100  /* write '1' to set port power */
  198. #define OHCI_RHPS_LSDA 0x00000200  /* low speed device attached */
  199. #define OHCI_RHPS_CLR_PWR 0x00000200  /* write '1' to clear port power */
  200. #define OHCI_RHPS_CSC 0x00010000  /* connect status change */
  201. #define OHCI_RHPS_PESC 0x00020000  /* port enable status change */
  202. #define OHCI_RHPS_PSSC 0x00040000  /* port suspend status change */
  203. #define OHCI_RHPS_OCIC 0x00080000  /* port over current indicator chg */
  204. #define OHCI_RHPS_PRSC 0x00100000  /* port reset status change */
  205. /* OHCI_ED - OHCI Endpoint Descriptor
  206.  *
  207.  * NOTE: OHCI_ED must be aligned to a 16-byte boundary,
  208.  */
  209. #define OHCI_ED_ALIGNMENT 16     /* alignment */
  210. typedef struct ohci_ed
  211.     {
  212.     UINT32 control;     /* control word */
  213.     UINT32 tdTail;     /* TD queue tail pointer */
  214.     UINT32 tdHead;     /* TD queue head pointer */
  215.     UINT32 nextEd;     /* next OHCI_ED */
  216.     } OHCI_ED, *pOHCI_ED;   
  217. #define OHCI_ED_LEN 16  /* expected size of OHCI_ED */
  218. #define OHCI_ED_ACTLEN sizeof (OHCI_ED)    /* actual */
  219. /* OHCI_ED.control definitions */
  220. #define OHCI_EDCTL_FA_MASK 0x0000007f  /* function address */
  221. #define OHCI_EDCTL_FA_ROT 0
  222. #define OHCI_EDCTL_EN_MASK 0x00000780  /* endpoint number */
  223. #define OHCI_EDCTL_EN_ROT 7
  224. #define OHCI_EDCTL_DIR_MASK 0x00001800  /* direction */
  225. #define OHCI_EDCTL_DIR_TD 0x00000000  /* get direction from TD */
  226. #define OHCI_EDCTL_DIR_OUT 0x00000800  /* OUT */
  227. #define OHCI_EDCTL_DIR_IN 0x00001000  /* get direction from TD */
  228. #define OHCI_EDCTL_SPD_MASK 0x00002000  /* speed */
  229. #define OHCI_EDCTL_SPD_FULL 0x00000000  /* full speed (12mbit) device */
  230. #define OHCI_EDCTL_SPD_LOW 0x00002000  /* low speed device */
  231. #define OHCI_EDCTL_SKIP  0x00004000  /* skip ED */
  232. #define OHCI_EDCTL_FMT_MASK 0x00008000  /* TD format */
  233. #define OHCI_EDCTL_FMT_GEN 0x00000000  /* general: ctl/bulk/int */
  234. #define OHCI_EDCTL_FMT_ISO 0x00008000  /* isochronous TDs */
  235. #define OHCI_EDCTL_MPS_MASK 0x07ff0000  /* maximum packet size */
  236. #define OHCI_EDCTL_MPS_ROT 16
  237. /* macros to format/retrieve control.FA (function address) field */
  238. #define OHCI_EDCTL_FA(x)     (((x) & OHCI_EDCTL_FA_MASK) >> OHCI_EDCTL_FA_ROT)
  239. #define OHCI_EDCTL_FA_FMT(x) (((x) << OHCI_EDCTL_FA_ROT) & OHCI_EDCTL_FA_MASK)
  240. /* macros to format/retrieve control.EN (endpoint number) field */
  241. #define OHCI_EDCTL_EN(x)     (((x) & OHCI_EDCTL_EN_MASK) >> OHCI_EDCTL_EN_ROT)
  242. #define OHCI_EDCTL_EN_FMT(x) (((x) << OHCI_EDCTL_EN_ROT) & OHCI_EDCTL_EN_MASK)
  243. /* macros to format/retrieve control.MPS (max packet size) field */
  244. #define OHCI_EDCTL_MPS(x)     (((x) & OHCI_EDCTL_MPS_MASK) >> OHCI_EDCTL_MPS_ROT)
  245. #define OHCI_EDCTL_MPS_FMT(x) (((x) << OHCI_EDCTL_MPS_ROT) & OHCI_EDCTL_MPS_MASK)
  246. /* Memory pointer definitions.
  247.  *
  248.  * NOTE: Some/all of these definitions apply to the OHCI_ED.tdTail, tdHead, and 
  249.  * nextEd fields.
  250.  */
  251. #define OHCI_PTR_MEM_MASK 0xfffffff0  /* mask for memory pointer */
  252. #define OHCI_PTR_HALTED  0x00000001  /* indicates TD queue is halted */
  253. #define OHCI_PTR_TGL_CARRY 0x00000002  /* toggle carry */
  254. #define OHCI_PAGE_SIZE 0x00001000  /* 4k pages */
  255. #define OHCI_PAGE_MASK 0xfffff000  /* page # mask */
  256. #define OHCI_ISO_OFFSET_MASK 0x00000fff  /* mask for 4k page */
  257. #define OHCI_ISO_OFFSET_BP0 0x00000000  /* offset within BufferPage0 page */
  258. #define OHCI_ISO_OFFSET_BE 0x00001000  /* offset within BufferEnd page */
  259. /* OHCI_TD_GEN - OHCI Transfer Descriptor - General: Ctl/Bulk/Int 
  260.  *
  261.  * NOTE: Must be aligned to 16 byte boundary.
  262.  */
  263. #define OHCI_TD_GEN_ALIGNMENT 16     /* alignment */
  264. typedef struct ohci_td_gen
  265.     {
  266.     UINT32 control;     /* control word */
  267.     UINT32 cbp;      /* current buffer pointer */
  268.     UINT32 nextTd;     /* next TD */
  269.     UINT32 be;     /* buffer end */
  270.     } OHCI_TD_GEN, *pOHCI_TD_GEN;
  271. #define OHCI_TD_GEN_LEN      16 /* expected size of OHCI_TD_ISO */
  272. #define OHCI_TD_GEN_ACTLEN     sizeof (OHCI_TD_GEN)    /* actual */
  273. /* OHCI_TD_GEN.control definitions */
  274. #define OHCI_TGCTL_BFR_RND 0x00040000  /* buffer rounding */
  275. #define OHCI_TGCTL_PID_MASK 0x00180000  /* direction/PID */
  276. #define OHCI_TGCTL_PID_SETUP 0x00000000  /* SETUP */
  277. #define OHCI_TGCTL_PID_OUT 0x00080000  /* OUT */
  278. #define OHCI_TGCTL_PID_IN 0x00100000  /* IN */
  279. #define OHCI_TGCTL_DI_MASK 0x00e00000  /* delay interrupt */
  280. #define OHCI_TGCTL_DI_ROT 21
  281. #define OHCI_TGCTL_DI_NONE 7
  282. #define OHCI_TGCTL_TOGGLE_DATA0 0x00000000  /* indicates DATA0 */
  283. #define OHCI_TGCTL_TOGGLE_DATA1 0x01000000  /* indicates DATA1 */
  284. #define OHCI_TGCTL_TOGGLE_USEED 0x00000000  /* use toggle from ED */
  285. #define OHCI_TGCTL_TOGGLE_USETD 0x02000000  /* use toggle from TD */
  286. #define OHCI_TGCTL_ERRCNT_MASK 0x0c000000  /* error count */
  287. #define OHCI_TGCTL_CC_MASK 0xf0000000  /* condition code */
  288. #define OHCI_TGCTL_CC_ROT 28
  289. /* macros to format/retrieve control.DI (delay interrupt) field */
  290. #define OHCI_TGCTL_DI(x)     (((x) & OHCI_TGCTL_DI_MASK) >> OHCI_TGCTL_DI_ROT)
  291. #define OHCI_TGCTL_DI_FMT(x) (((x) << OHCI_TGCTL_DI_ROT) & OHCI_TGCTL_DI_MASK)
  292. /* macro to retrieve control.CC (completion code) field */
  293. #define OHCI_TGCTL_CC(x)    (((x) & OHCI_TGCTL_CC_MASK) >> OHCI_TGCTL_CC_ROT)
  294. /* OHCI_TD_ISO - OHCI Transfer Descriptor - Isochronous 
  295.  *
  296.  * NOTE: Must be aligned to 32 byte boundary.
  297.  */
  298. #define OHCI_TD_ISO_ALIGNMENT 32     /* alignment */
  299. #define OHCI_ISO_PSW_CNT 8     /* count of pkt status words */
  300. typedef struct ohci_td_iso
  301.     {
  302.     UINT32 control;     /* control word */
  303.     UINT32 bp0;      /* buffer page 0 */
  304.     UINT32 nextTd;     /* next TD */
  305.     UINT32 be;     /* buffer end */
  306.     UINT16 psw [OHCI_ISO_PSW_CNT];  /* array of packet status words */
  307.     } OHCI_TD_ISO, *pOHCI_TD_ISO;
  308. #define OHCI_TD_ISO_LEN  32  /* expected size of OHCI_TD_ISO */
  309. #define OHCI_TD_ISO_ACTLEN sizeof (OHCI_TD_ISO) /* actual */
  310. /* OHCI_TD_ISO.control definitions */
  311. #define OHCI_TICTL_SF_MASK 0x0000ffff  /* starting frame */
  312. #define OHCI_TICTL_SF_ROT 0
  313. #define OHCI_TICTL_DI_MASK 0x00e00000  /* delay interrupt */
  314. #define OHCI_TICTL_DI_ROT 21
  315. #define OHCI_TICTL_DI_NONE 7
  316. #define OHCI_TICTL_FC_MASK 0x07000000  /* frame count */
  317. #define OHCI_TICTL_FC_ROT 24
  318. #define OHCI_FC_SIZE_MASK 0x7     /* mask for 3-bit count */
  319. #define OHCI_TICTL_CC_MASK 0xf0000000  /* condition code */
  320. #define OHCI_TICTL_CC_ROT 28
  321. /* macros to format/retrieve control.SF (starting frame) field */
  322. #define OHCI_TICTL_SF(x)     (((x) & OHCI_TICTL_SF_MASK) >> OHCI_TICTL_SF_ROT)
  323. #define OHCI_TICTL_SF_FMT(x) (((x) << OHCI_TICTL_SF_ROT) & OHCI_TICTL_SF_MASK)
  324. /* Macros to retrieve/format control.FC (frame count) field
  325.  *
  326.  * NOTE: OHCI frame count is one less than the real frame count. The macros 
  327.  * compensate automatically.
  328.  */
  329. #define OHCI_TICTL_FC(x)     ((((x) & OHCI_TICTL_FC_MASK) >> OHCI_TICTL_FC_ROT) + 1)
  330. #define OHCI_TICTL_FC_FMT(x) ((((x) - 1) & OHCI_FC_SIZE_MASK) << OHCI_TICTL_FC_ROT)
  331. /* macro to retrieve control.CC (completion code) field */
  332. #define OHCI_TICTL_CC(x)    (((x) & OHCI_TICTL_CC_MASK) >> OHCI_TICTL_CC_ROT)
  333. /* OHCI_TD_ISO.psw definitions */
  334. #define OHCI_TIPSW_SIZE_MASK 0x07ff     /* size of packet */
  335. #define OHCI_TIPSW_SIZE_ROT 0
  336. #define OHCI_TIPSW_CC_MASK 0xf000     /* completion code */
  337. #define OHCI_TIPSW_CC_ROT 12
  338. /* macro to retrieve psw.size field */
  339. #define OHCI_TIPSW_SIZE(x)  (((x) & OHCI_TIPSW_SIZE_MASK) >> OHCI_TIPSW_SIZE_ROT)
  340. /* macro to retrieve psw.CC (completion code) field */
  341. #define OHCI_TIPSW_CC(x)     (((x) & OHCI_TIPSW_CC_MASK) >> OHCI_TIPSW_CC_ROT)
  342. #define OHCI_TIPSW_CC_FMT(x) (((x) << OHCI_TIPSW_CC_ROT) & OHCI_TIPSW_CC_MASK)
  343. /* OHCI_HCCA - Host Controller Communications Area
  344.  *
  345.  * NOTE: This structure must be aligned to a 256 byte boundary.
  346.  */
  347. #define OHCI_HCCA_ALIGNMENT 256     /* HCCA alignment requirement */
  348. #define OHCI_INT_ED_COUNT 32     /* count of interrupt ED heads */
  349. #define OHCI_HCCA_HC_RESERVED 120     /* count of reserved bytes */
  350. #define OHCI_HCCA_LEN 256     /* expected size of structure */
  351. typedef struct ohci_hcca
  352.     {
  353.     UINT32 intEdTable [OHCI_INT_ED_COUNT];  /* ptrs to interrupt EDs */
  354.     UINT16 frameNo;     /* frame no in low 16-bits */
  355.     UINT16 pad1;     /* set to 0 when updating frameNo */
  356.     UINT32 doneHead;     /* ptr to first completed TD */
  357.     UINT8 hcReserved [OHCI_HCCA_HC_RESERVED]; /* reserved by HC */
  358.     } OHCI_HCCA, *pOHCI_HCCA;
  359. #define OHCI_HCCA_LEN 256     /* expected size of structure */
  360. #define OHCI_HCCA_ACTLEN sizeof (OHCI_HCCA)  /* actual size */
  361. /* If the low bit of the doneHead field is written as '1' by the HC, then
  362.  * an additional interrupt condition is present and the host controller driver
  363.  * should interrogate the HcInterruptStatus register to determine the cause.
  364.  */
  365. #define OHCI_DONE_HEAD_OTHER_INT    0x00000001
  366. #ifdef __cplusplus
  367. }
  368. #endif
  369. #endif /* __INCusbOhcih */
  370. /* End of file. */