ohci.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /**************************************************************************//**
  2. * @file ohci.h
  3. * @version V1.00
  4. * @brief USB OHCI host controller driver header file.
  5. * @note
  6. * SPDX-License-Identifier: Apache-2.0
  7. * Copyright (C) 2017 Nuvoton Technology Corp. All rights reserved.
  8. *****************************************************************************/
  9. #ifndef _USBH_OHCI_H_
  10. #define _USBH_OHCI_H_
  11. /// @cond HIDDEN_SYMBOLS
  12. struct utr_t;
  13. struct udev_t;
  14. /* OHCI CONTROL AND STATUS REGISTER MASKS */
  15. /*
  16. * Host controller functional state.
  17. * for HCFS(HcControl[7:6])
  18. */
  19. #define HCFS_RESET (0UL << USBH_HcControl_HCFS_Pos)
  20. #define HCFS_RESUME (1UL << USBH_HcControl_HCFS_Pos)
  21. #define HCFS_OPER (2UL << USBH_HcControl_HCFS_Pos)
  22. #define HCFS_SUSPEND (3UL << USBH_HcControl_HCFS_Pos)
  23. /*----------------------------------------------------------------------------------------*/
  24. /* Endpoint descriptor */
  25. /*----------------------------------------------------------------------------------------*/
  26. typedef struct ed_t
  27. {
  28. /* OHCI spec. Endpoint descriptor */
  29. uint32_t Info;
  30. uint32_t TailP;
  31. uint32_t HeadP;
  32. uint32_t NextED;
  33. /* The following members are used by USB Host libary. */
  34. uint8_t bInterval;
  35. uint16_t next_sf; /* for isochronous transfer, recording the next SF */
  36. struct ed_t *next; /* point to the next ED in remove list */
  37. } ED_T;
  38. #define ED_CTRL_FA_Pos 0 /* Info[6:0] - Function address */
  39. #define ED_CTRL_EN_Pos 7 /* Info[10:7] - Endpoint number */
  40. #define ED_CTRL_DIR_Pos 11 /* Info[12:11] - Direction */
  41. #define ED_CTRL_MPS_Pos 16 /* Info[26:16] - Maximum packet size */
  42. #define ED_FUNC_ADDR_Msk (0x7f)
  43. #define ED_EP_ADDR_Msk (0xf<<7)
  44. #define ED_DIR_Msk (0x3<<11)
  45. #define ED_SPEED_Msk (1<<13)
  46. #define ED_MAX_PK_SIZE_Msk (0x7ff<<16)
  47. #define ED_DIR_BY_TD (0<<ED_CTRL_DIR_Pos)
  48. #define ED_DIR_OUT (1<<ED_CTRL_DIR_Pos)
  49. #define ED_DIR_IN (2<<ED_CTRL_DIR_Pos)
  50. #define ED_SPEED_FULL (0<<13) /* Info[13] - 0: is full speed device */
  51. #define ED_SPEED_LOW (1<<13) /* Info[13] - 1: is low speed device */
  52. #define ED_SKIP (1<<14) /* Info[14] - 1: HC skip this ED */
  53. #define ED_FORMAT_GENERAL (0<<15) /* Info[15] - 0: is a general TD */
  54. #define ED_FORMAT_ISO (1<<15) /* Info[15] - 1: is an isochronous TD */
  55. #define ED_HEADP_HALT (1<<0) /* HeadP[0] - 1: Halt; 0: Not */
  56. /*----------------------------------------------------------------------------------------*/
  57. /* Transfer descriptor */
  58. /*----------------------------------------------------------------------------------------*/
  59. /* general transfer descriptor */
  60. typedef struct td_t
  61. {
  62. uint32_t Info;
  63. uint32_t CBP; /* Current Buffer Pointer */
  64. uint32_t NextTD; /* Next TD */
  65. uint32_t BE; /* Buffer End */
  66. uint32_t PSW[4]; /* PSW 0~7 */
  67. /* The following members are used by USB Host libary. */
  68. uint32_t buff_start; /* Buffer Start */
  69. ED_T *ed; /* The ED that this TD belong to. */
  70. struct utr_t *utr; /* associated UTR */
  71. struct td_t *next; /* point to next TD of the same UTR */
  72. } TD_T;
  73. #define TD_ADDR_MASK 0xFFFFFFFC
  74. /* Completion codes */
  75. enum OCHI_CC_CODE
  76. {
  77. /* mapping of the OHCI CC status to error codes */
  78. CC_NOERROR, /* No Error */
  79. CC_CRC, /* CRC Error */
  80. CC_BITSTUFF, /* Bit Stuff */
  81. CC_DATA_TOGGLE, /* Data Toggle */
  82. CC_STALL, /* Stall */
  83. CC_NOTRESPONSE, /* DevNotResp */
  84. CC_PID_CHECK, /* PIDCheck */
  85. CC_UNEXPECTED_PID, /* UnExpPID */
  86. CC_DATA_OVERRUN, /* DataOver */
  87. CC_DATA_UNDERRUN, /* DataUnder */
  88. CC_RESERVED1, /* reserved */
  89. CC_RESERVED2, /* reserved */
  90. CC_BUFFER_OVERRUN, /* BufferOver */
  91. CC_BUFFER_UNDERRUN, /* BuffUnder */
  92. CC_NOT_ACCESS /* Not Access */
  93. };
  94. /* TD control field */
  95. #define TD_CC 0xF0000000
  96. #define TD_CC_GET(td) ((td >>28) & 0x0F)
  97. #define TD_CC_SET(td, cc) (td) = ((td) & 0x0FFFFFFF) | (((cc) & 0x0F) << 28)
  98. #define TD_T_DATA0 0x02000000
  99. #define TD_T_DATA1 0x03000000
  100. #define TD_R 0x00040000
  101. #define TD_DP 0x00180000
  102. #define TD_DP_IN 0x00100000
  103. #define TD_DP_OUT 0x00080000
  104. #define MAXPSW 8
  105. /* steel TD reserved bits to keep driver data */
  106. #define TD_TYPE_Msk (0x3<<16)
  107. #define TD_TYPE_CTRL (0x0<<16)
  108. #define TD_TYPE_BULK (0x1<<16)
  109. #define TD_TYPE_INT (0x2<<16)
  110. #define TD_TYPE_ISO (0x3<<16)
  111. #define TD_CTRL_Msk (0x7<<15)
  112. #define TD_CTRL_DATA (1<<15)
  113. /*
  114. * The HCCA (Host Controller Communications Area) is a 256 byte
  115. * structure defined in the OHCI spec. that the host controller is
  116. * told the base address of. It must be 256-byte aligned.
  117. */
  118. typedef struct
  119. {
  120. uint32_t int_table[32]; /* Interrupt ED table */
  121. uint16_t frame_no; /* current frame number */
  122. uint16_t pad1; /* set to 0 on each frame_no change */
  123. uint32_t done_head; /* info returned for an interrupt */
  124. uint8_t reserved_for_hc[116];
  125. } HCCA_T;
  126. /// @endcond
  127. #endif /* _USBH_OHCI_H_ */