ci13xxx_udc.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. /*
  2. * ci13xxx_udc.h - structures, registers, and macros MIPS USB IP core
  3. *
  4. * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
  5. *
  6. * Author: David Lopo
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License version 2 as
  10. * published by the Free Software Foundation.
  11. *
  12. * Description: MIPS USB IP core family device controller
  13. * Structures, registers and logging macros
  14. */
  15. #ifndef _CI13XXX_h_
  16. #define _CI13XXX_h_
  17. /******************************************************************************
  18. * DEFINE
  19. *****************************************************************************/
  20. #define CI13XXX_PAGE_SIZE 4096ul /* page size for TD's */
  21. #define ENDPT_MAX (32)
  22. #define CTRL_PAYLOAD_MAX (64)
  23. #define RX (0) /* similar to USB_DIR_OUT but can be used as an index */
  24. #define TX (1) /* similar to USB_DIR_IN but can be used as an index */
  25. /* UDC private data:
  26. * 16MSb - Vendor ID | 16 LSb Vendor private data
  27. */
  28. #define CI13XX_REQ_VENDOR_ID(id) (id & 0xFFFF0000UL)
  29. #define MSM_ETD_TYPE BIT(1)
  30. #define MSM_EP_PIPE_ID_RESET_VAL 0x1F001F
  31. /******************************************************************************
  32. * STRUCTURES
  33. *****************************************************************************/
  34. /* DMA layout of transfer descriptors */
  35. struct ci13xxx_td {
  36. /* 0 */
  37. u32 next;
  38. #define TD_TERMINATE BIT(0)
  39. #define TD_ADDR_MASK (0xFFFFFFEUL << 5)
  40. /* 1 */
  41. u32 token;
  42. #define TD_STATUS (0x00FFUL << 0)
  43. #define TD_STATUS_TR_ERR BIT(3)
  44. #define TD_STATUS_DT_ERR BIT(5)
  45. #define TD_STATUS_HALTED BIT(6)
  46. #define TD_STATUS_ACTIVE BIT(7)
  47. #define TD_MULTO (0x0003UL << 10)
  48. #define TD_IOC BIT(15)
  49. #define TD_TOTAL_BYTES (0x7FFFUL << 16)
  50. /* 2 */
  51. u32 page[5];
  52. #define TD_CURR_OFFSET (0x0FFFUL << 0)
  53. #define TD_FRAME_NUM (0x07FFUL << 0)
  54. #define TD_RESERVED_MASK (0x0FFFUL << 0)
  55. } __attribute__ ((packed, aligned(4)));
  56. /* DMA layout of queue heads */
  57. struct ci13xxx_qh {
  58. /* 0 */
  59. u32 cap;
  60. #define QH_IOS BIT(15)
  61. #define QH_MAX_PKT (0x07FFUL << 16)
  62. #define QH_ZLT BIT(29)
  63. #define QH_MULT (0x0003UL << 30)
  64. #define QH_MULT_SHIFT 11
  65. /* 1 */
  66. u32 curr;
  67. /* 2 - 8 */
  68. struct ci13xxx_td td;
  69. /* 9 */
  70. u32 RESERVED;
  71. struct usb_ctrlrequest setup;
  72. } __attribute__ ((packed, aligned(4)));
  73. /* cache of larger request's original attributes */
  74. struct ci13xxx_multi_req {
  75. unsigned len;
  76. unsigned actual;
  77. void *buf;
  78. };
  79. /* Extension of usb_request */
  80. struct ci13xxx_req {
  81. struct usb_request req;
  82. unsigned map;
  83. struct list_head queue;
  84. struct ci13xxx_td *ptr;
  85. dma_addr_t dma;
  86. struct ci13xxx_td *zptr;
  87. dma_addr_t zdma;
  88. struct ci13xxx_multi_req multi;
  89. };
  90. /* Extension of usb_ep */
  91. struct ci13xxx_ep {
  92. struct usb_ep ep;
  93. const struct usb_endpoint_descriptor *desc;
  94. u8 dir;
  95. u8 num;
  96. u8 type;
  97. char name[16];
  98. struct {
  99. struct list_head queue;
  100. struct ci13xxx_qh *ptr;
  101. dma_addr_t dma;
  102. } qh;
  103. int wedge;
  104. /* global resources */
  105. spinlock_t *lock;
  106. struct device *device;
  107. struct dma_pool *td_pool;
  108. struct ci13xxx_td *last_zptr;
  109. dma_addr_t last_zdma;
  110. unsigned long dTD_update_fail_count;
  111. unsigned long prime_fail_count;
  112. int prime_timer_count;
  113. struct timer_list prime_timer;
  114. bool multi_req;
  115. };
  116. struct ci13xxx;
  117. struct ci13xxx_udc_driver {
  118. const char *name;
  119. unsigned long flags;
  120. unsigned int nz_itc;
  121. #define CI13XXX_REGS_SHARED BIT(0)
  122. #define CI13XXX_REQUIRE_TRANSCEIVER BIT(1)
  123. #define CI13XXX_PULLUP_ON_VBUS BIT(2)
  124. #define CI13XXX_DISABLE_STREAMING BIT(3)
  125. #define CI13XXX_ZERO_ITC BIT(4)
  126. #define CI13XXX_IS_OTG BIT(5)
  127. #define CI13XXX_ENABLE_AHB2AHB_BYPASS BIT(6)
  128. #define CI13XXX_CONTROLLER_RESET_EVENT 0
  129. #define CI13XXX_CONTROLLER_CONNECT_EVENT 1
  130. #define CI13XXX_CONTROLLER_SUSPEND_EVENT 2
  131. #define CI13XXX_CONTROLLER_REMOTE_WAKEUP_EVENT 3
  132. #define CI13XXX_CONTROLLER_RESUME_EVENT 4
  133. #define CI13XXX_CONTROLLER_DISCONNECT_EVENT 5
  134. #define CI13XXX_CONTROLLER_UDC_STARTED_EVENT 6
  135. void (*notify_event) (struct ci13xxx *udc, unsigned event);
  136. };
  137. /* CI13XXX UDC descriptor & global resources */
  138. struct ci13xxx {
  139. spinlock_t *lock; /* ctrl register bank access */
  140. void __iomem *regs; /* registers address space */
  141. struct dma_pool *qh_pool; /* DMA pool for queue heads */
  142. struct dma_pool *td_pool; /* DMA pool for transfer descs */
  143. struct usb_request *status; /* ep0 status request */
  144. void *status_buf;/* GET_STATUS buffer */
  145. struct usb_gadget gadget; /* USB slave device */
  146. struct ci13xxx_ep ci13xxx_ep[ENDPT_MAX]; /* extended endpts */
  147. u32 ep0_dir; /* ep0 direction */
  148. #define ep0out ci13xxx_ep[0]
  149. #define ep0in ci13xxx_ep[hw_ep_max / 2]
  150. u8 remote_wakeup; /* Is remote wakeup feature
  151. enabled by the host? */
  152. u8 suspended; /* suspended by the host */
  153. u8 configured; /* is device configured */
  154. u8 test_mode; /* the selected test mode */
  155. struct delayed_work rw_work; /* remote wakeup delayed work */
  156. struct usb_gadget_driver *driver; /* 3rd party gadget driver */
  157. struct ci13xxx_udc_driver *udc_driver; /* device controller driver */
  158. int vbus_active; /* is VBUS active */
  159. int softconnect; /* is pull-up enable allowed */
  160. unsigned long dTD_update_fail_count;
  161. struct usb_phy *transceiver; /* Transceiver struct */
  162. bool skip_flush; /* skip flushing remaining EP
  163. upon flush timeout for the
  164. first EP. */
  165. };
  166. /******************************************************************************
  167. * REGISTERS
  168. *****************************************************************************/
  169. /* register size */
  170. #define REG_BITS (32)
  171. /* HCCPARAMS */
  172. #define HCCPARAMS_LEN BIT(17)
  173. /* DCCPARAMS */
  174. #define DCCPARAMS_DEN (0x1F << 0)
  175. #define DCCPARAMS_DC BIT(7)
  176. /* TESTMODE */
  177. #define TESTMODE_FORCE BIT(0)
  178. /* AHB_MODE */
  179. #define AHB2AHB_BYPASS BIT(31)
  180. /* USBCMD */
  181. #define USBCMD_RS BIT(0)
  182. #define USBCMD_RST BIT(1)
  183. #define USBCMD_SUTW BIT(13)
  184. #define USBCMD_ATDTW BIT(14)
  185. /* USBSTS & USBINTR */
  186. #define USBi_UI BIT(0)
  187. #define USBi_UEI BIT(1)
  188. #define USBi_PCI BIT(2)
  189. #define USBi_URI BIT(6)
  190. #define USBi_SLI BIT(8)
  191. /* DEVICEADDR */
  192. #define DEVICEADDR_USBADRA BIT(24)
  193. #define DEVICEADDR_USBADR (0x7FUL << 25)
  194. /* PORTSC */
  195. #define PORTSC_FPR BIT(6)
  196. #define PORTSC_SUSP BIT(7)
  197. #define PORTSC_HSP BIT(9)
  198. #define PORTSC_PTC (0x0FUL << 16)
  199. /* DEVLC */
  200. #define DEVLC_PSPD (0x03UL << 25)
  201. #define DEVLC_PSPD_HS (0x02UL << 25)
  202. /* USBMODE */
  203. #define USBMODE_CM (0x03UL << 0)
  204. #define USBMODE_CM_IDLE (0x00UL << 0)
  205. #define USBMODE_CM_DEVICE (0x02UL << 0)
  206. #define USBMODE_CM_HOST (0x03UL << 0)
  207. #define USBMODE_SLOM BIT(3)
  208. #define USBMODE_SDIS BIT(4)
  209. #define USBCMD_ITC(n) (n << 16) /* n = 0, 1, 2, 4, 8, 16, 32, 64 */
  210. #define USBCMD_ITC_MASK (0xFF << 16)
  211. /* ENDPTCTRL */
  212. #define ENDPTCTRL_RXS BIT(0)
  213. #define ENDPTCTRL_RXT (0x03UL << 2)
  214. #define ENDPTCTRL_RXR BIT(6) /* reserved for port 0 */
  215. #define ENDPTCTRL_RXE BIT(7)
  216. #define ENDPTCTRL_TXS BIT(16)
  217. #define ENDPTCTRL_TXT (0x03UL << 18)
  218. #define ENDPTCTRL_TXR BIT(22) /* reserved for port 0 */
  219. #define ENDPTCTRL_TXE BIT(23)
  220. /******************************************************************************
  221. * LOGGING
  222. *****************************************************************************/
  223. #define ci13xxx_printk(level, format, args...) \
  224. do { \
  225. if (_udc == NULL) \
  226. printk(level "[%s] " format "\n", __func__, ## args); \
  227. else \
  228. dev_printk(level, _udc->gadget.dev.parent, \
  229. "[%s] " format "\n", __func__, ## args); \
  230. } while (0)
  231. #ifndef err
  232. #define err(format, args...) ci13xxx_printk(KERN_ERR, format, ## args)
  233. #endif
  234. #define warn(format, args...) ci13xxx_printk(KERN_WARNING, format, ## args)
  235. #define info(format, args...) ci13xxx_printk(KERN_INFO, format, ## args)
  236. #ifdef TRACE
  237. #define trace(format, args...) ci13xxx_printk(KERN_DEBUG, format, ## args)
  238. #define dbg_trace(format, args...) dev_dbg(dev, format, ##args)
  239. #else
  240. #define trace(format, args...) do {} while (0)
  241. #define dbg_trace(format, args...) do {} while (0)
  242. #endif
  243. #endif /* _CI13XXX_h_ */