ice40.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. /*
  2. * Copyright (c) 2014, The Linux Foundation. All rights reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 and
  6. * only version 2 as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. */
  13. #undef TRACE_SYSTEM
  14. #define TRACE_SYSTEM ice40
  15. #if !defined(_TRACE_ICE40_H) || defined(TRACE_HEADER_MULTI_READ)
  16. #define _TRACE_ICE40_H
  17. #include <linux/tracepoint.h>
  18. #include <linux/usb.h>
  19. TRACE_EVENT(ice40_reg_write,
  20. TP_PROTO(u8 addr, u8 val, u8 cmd0, u8 cmd1, int ret),
  21. TP_ARGS(addr, val, cmd0, cmd1, ret),
  22. TP_STRUCT__entry(
  23. __field(u8, addr)
  24. __field(u8, val)
  25. __field(u8, cmd0)
  26. __field(u8, cmd1)
  27. __field(int, ret)
  28. ),
  29. TP_fast_assign(
  30. __entry->addr = addr;
  31. __entry->val = val;
  32. __entry->cmd0 = cmd0;
  33. __entry->cmd1 = cmd1;
  34. __entry->ret = ret;
  35. ),
  36. TP_printk("addr = %x val = %x cmd0 = %x cmd1 = %x ret = %d",
  37. __entry->addr, __entry->val, __entry->cmd0,
  38. __entry->cmd1, __entry->ret)
  39. );
  40. TRACE_EVENT(ice40_reg_read,
  41. TP_PROTO(u8 addr, u8 cmd0, int ret),
  42. TP_ARGS(addr, cmd0, ret),
  43. TP_STRUCT__entry(
  44. __field(u8, addr)
  45. __field(u8, cmd0)
  46. __field(int, ret)
  47. ),
  48. TP_fast_assign(
  49. __entry->addr = addr;
  50. __entry->cmd0 = cmd0;
  51. __entry->ret = ret;
  52. ),
  53. TP_printk("addr = %x cmd0 = %x ret = %x", __entry->addr,
  54. __entry->cmd0, __entry->ret)
  55. );
  56. TRACE_EVENT(ice40_hub_control,
  57. TP_PROTO(u16 req, u16 val, u16 index, u16 len, int ret),
  58. TP_ARGS(req, val, index, len, ret),
  59. TP_STRUCT__entry(
  60. __field(u16, req)
  61. __field(u16, val)
  62. __field(u16, index)
  63. __field(u16, len)
  64. __field(int, ret)
  65. ),
  66. TP_fast_assign(
  67. __entry->req = req;
  68. __entry->val = val;
  69. __entry->index = index;
  70. __entry->len = len;
  71. __entry->ret = ret;
  72. ),
  73. TP_printk("req = %x val = %x index = %x len = %x ret = %d",
  74. __entry->req, __entry->val, __entry->index,
  75. __entry->len, __entry->ret)
  76. );
  77. TRACE_EVENT(ice40_ep0,
  78. TP_PROTO(const char *state),
  79. TP_ARGS(state),
  80. TP_STRUCT__entry(
  81. __string(state, state)
  82. ),
  83. TP_fast_assign(
  84. __assign_str(state, state);
  85. ),
  86. TP_printk("ep0 state: %s", __get_str(state))
  87. );
  88. TRACE_EVENT(ice40_urb_enqueue,
  89. TP_PROTO(struct urb *urb),
  90. TP_ARGS(urb),
  91. TP_STRUCT__entry(
  92. __field(u16, epnum)
  93. __field(u8, dir)
  94. __field(u8, type)
  95. __field(u32, len)
  96. ),
  97. TP_fast_assign(
  98. __entry->epnum = usb_pipeendpoint(urb->pipe);
  99. __entry->dir = usb_urb_dir_in(urb);
  100. __entry->type = usb_pipebulk(urb->pipe);
  101. __entry->len = urb->transfer_buffer_length;
  102. ),
  103. TP_printk("URB_LOG: E: ep %d %s %s len %d", __entry->epnum,
  104. __entry->dir ? "In" : "Out",
  105. __entry->type ? "Bulk" : "ctrl",
  106. __entry->len)
  107. );
  108. TRACE_EVENT(ice40_urb_dequeue,
  109. TP_PROTO(struct urb *urb),
  110. TP_ARGS(urb),
  111. TP_STRUCT__entry(
  112. __field(u16, epnum)
  113. __field(u8, dir)
  114. __field(u8, type)
  115. __field(u32, len)
  116. __field(int, reason)
  117. ),
  118. TP_fast_assign(
  119. __entry->epnum = usb_pipeendpoint(urb->pipe);
  120. __entry->dir = usb_urb_dir_in(urb);
  121. __entry->type = usb_pipebulk(urb->pipe);
  122. __entry->len = urb->transfer_buffer_length;
  123. __entry->reason = urb->unlinked;
  124. ),
  125. TP_printk("URB_LOG: D: ep %d %s %s len %d reason %d",
  126. __entry->epnum,
  127. __entry->dir ? "In" : "Out",
  128. __entry->type ? "Bulk" : "ctrl",
  129. __entry->len, __entry->reason)
  130. );
  131. TRACE_EVENT(ice40_urb_done,
  132. TP_PROTO(struct urb *urb, int result),
  133. TP_ARGS(urb, result),
  134. TP_STRUCT__entry(
  135. __field(int, result)
  136. __field(u16, epnum)
  137. __field(u8, dir)
  138. __field(u8, type)
  139. __field(u32, len)
  140. __field(u32, actual)
  141. ),
  142. TP_fast_assign(
  143. __entry->result = result;
  144. __entry->epnum = usb_pipeendpoint(urb->pipe);
  145. __entry->dir = usb_urb_dir_in(urb);
  146. __entry->type = usb_pipebulk(urb->pipe);
  147. __entry->len = urb->transfer_buffer_length;
  148. __entry->actual = urb->actual_length;
  149. ),
  150. TP_printk("URB_LOG: C: ep %d %s %s len %d actual %d result %d",
  151. __entry->epnum, __entry->dir ? "In" : "Out",
  152. __entry->type ? "Bulk" : "ctrl", __entry->len,
  153. __entry->actual, __entry->result)
  154. );
  155. TRACE_EVENT(ice40_bus_suspend,
  156. TP_PROTO(u8 status),
  157. TP_ARGS(status),
  158. TP_STRUCT__entry(
  159. __field(u8, status)
  160. ),
  161. TP_fast_assign(
  162. __entry->status = status;
  163. ),
  164. TP_printk("bus_suspend status %d", __entry->status)
  165. );
  166. TRACE_EVENT(ice40_bus_resume,
  167. TP_PROTO(u8 status),
  168. TP_ARGS(status),
  169. TP_STRUCT__entry(
  170. __field(u8, status)
  171. ),
  172. TP_fast_assign(
  173. __entry->status = status;
  174. ),
  175. TP_printk("bus_resume status %d", __entry->status)
  176. );
  177. TRACE_EVENT(ice40_setup,
  178. TP_PROTO(const char *token, int ret),
  179. TP_ARGS(token, ret),
  180. TP_STRUCT__entry(
  181. __string(token, token)
  182. __field(int, ret)
  183. ),
  184. TP_fast_assign(
  185. __assign_str(token, token);
  186. __entry->ret = ret;
  187. ),
  188. TP_printk("Trace: SETUP %s ret %d",
  189. __get_str(token), __entry->ret)
  190. );
  191. TRACE_EVENT(ice40_in,
  192. TP_PROTO(u16 ep, const char *token, u8 len, u8 expected, int ret),
  193. TP_ARGS(ep, token, len, expected, ret),
  194. TP_STRUCT__entry(
  195. __field(u16, ep)
  196. __string(token, token)
  197. __field(u8, len)
  198. __field(u8, expected)
  199. __field(int, ret)
  200. ),
  201. TP_fast_assign(
  202. __entry->ep = ep;
  203. __assign_str(token, token);
  204. __entry->len = len;
  205. __entry->expected = expected;
  206. __entry->ret = ret;
  207. ),
  208. TP_printk("Trace: %d IN %s len %d expected %d ret %d",
  209. __entry->ep, __get_str(token),
  210. __entry->len, __entry->expected,
  211. __entry->ret)
  212. );
  213. TRACE_EVENT(ice40_out,
  214. TP_PROTO(u16 ep, const char *token, u8 len, int ret),
  215. TP_ARGS(ep, token, len, ret),
  216. TP_STRUCT__entry(
  217. __field(u16, ep)
  218. __string(token, token)
  219. __field(u8, len)
  220. __field(int, ret)
  221. ),
  222. TP_fast_assign(
  223. __entry->ep = ep;
  224. __assign_str(token, token);
  225. __entry->len = len;
  226. __entry->ret = ret;
  227. ),
  228. TP_printk("Trace: %d OUT %s len %d ret %d",
  229. __entry->ep, __get_str(token),
  230. __entry->len, __entry->ret)
  231. );
  232. #endif /* if !defined(_TRACE_ICE40_H) || defined(TRACE_HEADER_MULTI_READ) */
  233. /* This part must be outside protection */
  234. #include <trace/define_trace.h>