mu3d_hal_usb_drv.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #ifndef MTK_USB_DRV_H
  2. #define MTK_USB_DRV_H
  3. #include "mu3d_hal_hw.h"
  4. #undef EXTERN
  5. #ifdef _MTK_USB_DRV_EXT_
  6. #define EXTERN
  7. #else
  8. #define EXTERN \
  9. extern
  10. #endif
  11. #define MAX_EP_NUM 8 /* 4 Tx and 4 Rx */
  12. #define USB_BUF_SIZE 65536
  13. #define MAX_SLOT (2-1)
  14. /*EP0, TX, RX has separate SRAMs*/
  15. #define USB_TX_FIFO_START_ADDRESS 0
  16. #define USB_RX_FIFO_START_ADDRESS 0
  17. #ifndef IRQ_USB_MC_NINT_CODE
  18. #define IRQ_USB_MC_NINT_CODE 8
  19. #endif
  20. #ifndef IRQ_USB_DMA_NINT_CODE
  21. #define IRQ_USB_DMA_NINT_CODE 9
  22. #endif
  23. /* IN, OUT pipe index for ep_number */
  24. typedef enum {
  25. USB_TX = 0,
  26. USB_RX
  27. } USB_DIR;
  28. /* CTRL, BULK, INTR, ISO endpoint */
  29. typedef enum {
  30. USB_CTRL = 0,
  31. USB_BULK = 2,
  32. USB_INTR = 3,
  33. USB_ISO = 1
  34. } TRANSFER_TYPE;
  35. typedef enum {
  36. SSUSB_SPEED_INACTIVE = 0,
  37. SSUSB_SPEED_FULL = 1,
  38. SSUSB_SPEED_HIGH = 3,
  39. SSUSB_SPEED_SUPER = 4,
  40. } USB_SPEED;
  41. typedef enum {
  42. EP0_IDLE = 0,
  43. EP0_TX,
  44. EP0_RX,
  45. } EP0_STATE;
  46. struct USB_EP_SETTING {
  47. TRANSFER_TYPE transfer_type;
  48. DEV_UINT32 fifoaddr;
  49. DEV_UINT32 fifosz;
  50. DEV_UINT32 maxp;
  51. USB_DIR dir;
  52. DEV_UINT8 enabled;
  53. };
  54. struct USB_REQ {
  55. DEV_UINT8 *buf;
  56. /* DEV_UINT8* dma_adr; */
  57. dma_addr_t dma_adr;
  58. DEV_UINT32 actual;
  59. DEV_UINT32 count;
  60. DEV_UINT32 currentCount;
  61. DEV_UINT32 complete;
  62. DEV_UINT32 needZLP;
  63. DEV_UINT32 transferCount;
  64. };
  65. struct USB_TEST_SETTING {
  66. USB_SPEED speed;
  67. struct USB_EP_SETTING ep_setting[2 * MAX_EP_NUM + 1];
  68. };
  69. /*=============================================
  70. *
  71. * USB 3 test
  72. *
  73. *=============================================*/
  74. /* #define NUM_TXENDPS 4 */
  75. /* #define NUM_RXENDPS 4 */
  76. /* #define NUM_EPS (NUM_TXENDPS + NUM_RXENDPS + 1) */
  77. /* #define MGC_END0_FIFOSIZE 64 */
  78. /* #define MGC_RX_DMA_ENABLE_LEVEL 32 */
  79. /* #define IsDbf 0x00000001 */
  80. /* #define IsTx 0x00000002 */
  81. /* #define IsHalt 0x00000004 */
  82. /* #define IsEnabled 0x80000000 */
  83. /* #define REQUEST_START_TX 0x1 */
  84. /* #define REQUEST_START_RX 0x2 */
  85. /*
  86. * USB directions
  87. *
  88. * This bit flag is used in endpoint descriptors' bEndpointAddress field.
  89. * It's also one of three fields in control requests bRequestType.
  90. */
  91. #define USB_DIR_OUT 0 /* to device */
  92. #define USB_DIR_IN 0x80 /* to host */
  93. #define USB_DIR_MASK 0x80 /* to host */
  94. /*
  95. * USB request types
  96. */
  97. #define USB_TYPE_MASK (0x03 << 5)
  98. #define USB_TYPE_STANDARD (0x00 << 5)
  99. #define USB_TYPE_CLASS (0x01 << 5)
  100. #define USB_TYPE_VENDOR (0x02 << 5)
  101. #define USB_TYPE_RESERVED (0x03 << 5)
  102. /*
  103. * Standard requests
  104. */
  105. #define USB_REQ_GET_STATUS 0x00
  106. #define USB_REQ_CLEAR_FEATURE 0x01
  107. #define USB_REQ_SET_FEATURE 0x03
  108. #define USB_REQ_SET_ADDRESS 0x05
  109. #define USB_REQ_GET_DESCRIPTOR 0x06
  110. #define USB_REQ_SET_DESCRIPTOR 0x07
  111. #define USB_REQ_GET_CONFIGURATION 0x08
  112. #define USB_REQ_SET_CONFIGURATION 0x09
  113. #define USB_REQ_GET_INTERFACE 0x0A
  114. #define USB_REQ_SET_INTERFACE 0x0B
  115. #define USB_REQ_SYNCH_FRAME 0x0C
  116. #define USB_REQ_EP0_IN_STALL 0xFD
  117. #define USB_REQ_EP0_OUT_STALL 0xFE
  118. #define USB_REQ_EP0_STALL 0xFF
  119. EXTERN struct USB_REQ g_u3d_req[2 * MAX_EP_NUM + 1];
  120. EXTERN struct USB_TEST_SETTING g_u3d_setting;
  121. EXTERN DEV_UINT32 g_TxFIFOadd;
  122. EXTERN DEV_UINT32 g_RxFIFOadd;
  123. EXTERN struct USB_REQ *mu3d_hal_get_req(DEV_INT32 ep_num, USB_DIR dir);
  124. EXTERN void mu3d_hal_pdn_dis(void);
  125. EXTERN void mu3d_hal_ssusb_en(void);
  126. EXTERN void _ex_mu3d_hal_ssusb_en(void);
  127. EXTERN void mu3d_hal_rst_dev(void);
  128. EXTERN DEV_INT32 mu3d_hal_check_clk_sts(void);
  129. EXTERN DEV_INT32 mu3d_hal_link_up(DEV_INT32 latch_val);
  130. EXTERN void mu3d_hal_initr_dis(void);
  131. EXTERN void mu3d_hal_clear_intr(void);
  132. EXTERN void mu3d_hal_system_intr_en(void);
  133. EXTERN void _ex_mu3d_hal_system_intr_en(void);
  134. EXTERN DEV_INT32 mu3d_hal_read_fifo_burst(DEV_INT32 ep_num, DEV_UINT8 *buf);
  135. EXTERN DEV_INT32 mu3d_hal_read_fifo(DEV_INT32 ep_num, DEV_UINT8 *buf);
  136. EXTERN DEV_INT32 mu3d_hal_write_fifo_burst(DEV_INT32 ep_num, DEV_INT32 length, DEV_UINT8 *buf,
  137. DEV_INT32 maxp);
  138. EXTERN DEV_INT32 mu3d_hal_write_fifo(DEV_INT32 ep_num, DEV_INT32 length, DEV_UINT8 *buf,
  139. DEV_INT32 maxp);
  140. EXTERN void _ex_mu3d_hal_ep_enable(DEV_UINT8 ep_num, USB_DIR dir, TRANSFER_TYPE type,
  141. DEV_INT32 maxp, DEV_INT8 interval, DEV_INT8 slot, DEV_INT8 burst,
  142. DEV_INT8 mult);
  143. EXTERN void mu3d_hal_ep_enable(DEV_UINT8 ep_num, USB_DIR dir, TRANSFER_TYPE type, DEV_INT32 maxp,
  144. DEV_INT8 interval, DEV_INT8 slot, DEV_INT8 burst, DEV_INT8 mult);
  145. EXTERN void mu3d_hal_resume(void);
  146. EXTERN void mu3d_hal_u2dev_connect(void);
  147. EXTERN void mu3d_hal_u2dev_disconn(void);
  148. EXTERN void mu3d_hal_u3dev_en(void);
  149. EXTERN void mu3d_hal_u3dev_dis(void);
  150. EXTERN void mu3d_hal_unfigured_ep(void);
  151. EXTERN void mu3d_hal_unfigured_ep_num(DEV_UINT8 ep_num, USB_DIR dir);
  152. EXTERN void mu3d_hal_set_speed(USB_SPEED usb_speed);
  153. EXTERN void mu3d_hal_det_speed(USB_SPEED speed, DEV_UINT8 det_speed);
  154. EXTERN void mu3d_hal_pdn_cg_en(void);
  155. EXTERN void mu3d_hal_pdn_ip_port(DEV_UINT8 on, DEV_UINT8 touch_dis, DEV_UINT8 u3, DEV_UINT8 u2);
  156. EXTERN void mu3d_hal_dft_reg(void);
  157. #undef EXTERN
  158. #endif /* USB_DRV_H */