trace.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
  4. * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
  5. */
  6. #if !defined(__MT7601U_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  7. #define __MT7601U_TRACE_H
  8. #include <linux/tracepoint.h>
  9. #include "mt7601u.h"
  10. #include "mac.h"
  11. #undef TRACE_SYSTEM
  12. #define TRACE_SYSTEM mt7601u
  13. #define MAXNAME 32
  14. #define DEV_ENTRY __array(char, wiphy_name, 32)
  15. #define DEV_ASSIGN strscpy(__entry->wiphy_name, \
  16. wiphy_name(dev->hw->wiphy), MAXNAME)
  17. #define DEV_PR_FMT "%s "
  18. #define DEV_PR_ARG __entry->wiphy_name
  19. #define REG_ENTRY __field(u32, reg) __field(u32, val)
  20. #define REG_ASSIGN __entry->reg = reg; __entry->val = val
  21. #define REG_PR_FMT "%04x=%08x"
  22. #define REG_PR_ARG __entry->reg, __entry->val
  23. DECLARE_EVENT_CLASS(dev_reg_evtu,
  24. TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
  25. TP_ARGS(dev, reg, val),
  26. TP_STRUCT__entry(
  27. DEV_ENTRY
  28. REG_ENTRY
  29. ),
  30. TP_fast_assign(
  31. DEV_ASSIGN;
  32. REG_ASSIGN;
  33. ),
  34. TP_printk(
  35. DEV_PR_FMT REG_PR_FMT,
  36. DEV_PR_ARG, REG_PR_ARG
  37. )
  38. );
  39. DEFINE_EVENT(dev_reg_evtu, reg_read,
  40. TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
  41. TP_ARGS(dev, reg, val)
  42. );
  43. DEFINE_EVENT(dev_reg_evtu, reg_write,
  44. TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
  45. TP_ARGS(dev, reg, val)
  46. );
  47. TRACE_EVENT(mt_submit_urb,
  48. TP_PROTO(struct mt7601u_dev *dev, struct urb *u),
  49. TP_ARGS(dev, u),
  50. TP_STRUCT__entry(
  51. DEV_ENTRY __field(unsigned, pipe) __field(u32, len)
  52. ),
  53. TP_fast_assign(
  54. DEV_ASSIGN;
  55. __entry->pipe = u->pipe;
  56. __entry->len = u->transfer_buffer_length;
  57. ),
  58. TP_printk(DEV_PR_FMT "p:%08x len:%u",
  59. DEV_PR_ARG, __entry->pipe, __entry->len)
  60. );
  61. #define trace_mt_submit_urb_sync(__dev, __pipe, __len) ({ \
  62. struct urb u; \
  63. u.pipe = __pipe; \
  64. u.transfer_buffer_length = __len; \
  65. trace_mt_submit_urb(__dev, &u); \
  66. })
  67. TRACE_EVENT(mt_mcu_msg_send,
  68. TP_PROTO(struct mt7601u_dev *dev,
  69. struct sk_buff *skb, u32 csum, bool resp),
  70. TP_ARGS(dev, skb, csum, resp),
  71. TP_STRUCT__entry(
  72. DEV_ENTRY
  73. __field(u32, info)
  74. __field(u32, csum)
  75. __field(bool, resp)
  76. ),
  77. TP_fast_assign(
  78. DEV_ASSIGN;
  79. __entry->info = *(u32 *)skb->data;
  80. __entry->csum = csum;
  81. __entry->resp = resp;
  82. ),
  83. TP_printk(DEV_PR_FMT "i:%08x c:%08x r:%d",
  84. DEV_PR_ARG, __entry->info, __entry->csum, __entry->resp)
  85. );
  86. TRACE_EVENT(mt_vend_req,
  87. TP_PROTO(struct mt7601u_dev *dev, unsigned pipe, u8 req, u8 req_type,
  88. u16 val, u16 offset, void *buf, size_t buflen, int ret),
  89. TP_ARGS(dev, pipe, req, req_type, val, offset, buf, buflen, ret),
  90. TP_STRUCT__entry(
  91. DEV_ENTRY
  92. __field(unsigned, pipe) __field(u8, req) __field(u8, req_type)
  93. __field(u16, val) __field(u16, offset) __field(void*, buf)
  94. __field(int, buflen) __field(int, ret)
  95. ),
  96. TP_fast_assign(
  97. DEV_ASSIGN;
  98. __entry->pipe = pipe;
  99. __entry->req = req;
  100. __entry->req_type = req_type;
  101. __entry->val = val;
  102. __entry->offset = offset;
  103. __entry->buf = buf;
  104. __entry->buflen = buflen;
  105. __entry->ret = ret;
  106. ),
  107. TP_printk(DEV_PR_FMT
  108. "%d p:%08x req:%02hhx %02hhx val:%04hx %04hx buf:%d %d",
  109. DEV_PR_ARG, __entry->ret, __entry->pipe, __entry->req,
  110. __entry->req_type, __entry->val, __entry->offset,
  111. !!__entry->buf, __entry->buflen)
  112. );
  113. TRACE_EVENT(ee_read,
  114. TP_PROTO(struct mt7601u_dev *dev, int offset, u16 val),
  115. TP_ARGS(dev, offset, val),
  116. TP_STRUCT__entry(
  117. DEV_ENTRY
  118. __field(int, o) __field(u16, v)
  119. ),
  120. TP_fast_assign(
  121. DEV_ASSIGN;
  122. __entry->o = offset;
  123. __entry->v = val;
  124. ),
  125. TP_printk(DEV_PR_FMT "%04x=%04x", DEV_PR_ARG, __entry->o, __entry->v)
  126. );
  127. DECLARE_EVENT_CLASS(dev_rf_reg_evt,
  128. TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
  129. TP_ARGS(dev, bank, reg, val),
  130. TP_STRUCT__entry(
  131. DEV_ENTRY
  132. __field(u8, bank)
  133. __field(u8, reg)
  134. __field(u8, val)
  135. ),
  136. TP_fast_assign(
  137. DEV_ASSIGN;
  138. REG_ASSIGN;
  139. __entry->bank = bank;
  140. ),
  141. TP_printk(
  142. DEV_PR_FMT "%02hhx:%02hhx=%02hhx",
  143. DEV_PR_ARG, __entry->bank, __entry->reg, __entry->val
  144. )
  145. );
  146. DEFINE_EVENT(dev_rf_reg_evt, rf_read,
  147. TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
  148. TP_ARGS(dev, bank, reg, val)
  149. );
  150. DEFINE_EVENT(dev_rf_reg_evt, rf_write,
  151. TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
  152. TP_ARGS(dev, bank, reg, val)
  153. );
  154. DECLARE_EVENT_CLASS(dev_bbp_reg_evt,
  155. TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
  156. TP_ARGS(dev, reg, val),
  157. TP_STRUCT__entry(
  158. DEV_ENTRY
  159. __field(u8, reg)
  160. __field(u8, val)
  161. ),
  162. TP_fast_assign(
  163. DEV_ASSIGN;
  164. REG_ASSIGN;
  165. ),
  166. TP_printk(
  167. DEV_PR_FMT "%02hhx=%02hhx",
  168. DEV_PR_ARG, __entry->reg, __entry->val
  169. )
  170. );
  171. DEFINE_EVENT(dev_bbp_reg_evt, bbp_read,
  172. TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
  173. TP_ARGS(dev, reg, val)
  174. );
  175. DEFINE_EVENT(dev_bbp_reg_evt, bbp_write,
  176. TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
  177. TP_ARGS(dev, reg, val)
  178. );
  179. DECLARE_EVENT_CLASS(dev_simple_evt,
  180. TP_PROTO(struct mt7601u_dev *dev, u8 val),
  181. TP_ARGS(dev, val),
  182. TP_STRUCT__entry(
  183. DEV_ENTRY
  184. __field(u8, val)
  185. ),
  186. TP_fast_assign(
  187. DEV_ASSIGN;
  188. __entry->val = val;
  189. ),
  190. TP_printk(
  191. DEV_PR_FMT "%02hhx", DEV_PR_ARG, __entry->val
  192. )
  193. );
  194. DEFINE_EVENT(dev_simple_evt, temp_mode,
  195. TP_PROTO(struct mt7601u_dev *dev, u8 val),
  196. TP_ARGS(dev, val)
  197. );
  198. DEFINE_EVENT(dev_simple_evt, read_temp,
  199. TP_PROTO(struct mt7601u_dev *dev, u8 val),
  200. TP_ARGS(dev, val)
  201. );
  202. DEFINE_EVENT(dev_simple_evt, freq_cal_adjust,
  203. TP_PROTO(struct mt7601u_dev *dev, u8 val),
  204. TP_ARGS(dev, val)
  205. );
  206. TRACE_EVENT(freq_cal_offset,
  207. TP_PROTO(struct mt7601u_dev *dev, u8 phy_mode, s8 freq_off),
  208. TP_ARGS(dev, phy_mode, freq_off),
  209. TP_STRUCT__entry(
  210. DEV_ENTRY
  211. __field(u8, phy_mode)
  212. __field(s8, freq_off)
  213. ),
  214. TP_fast_assign(
  215. DEV_ASSIGN;
  216. __entry->phy_mode = phy_mode;
  217. __entry->freq_off = freq_off;
  218. ),
  219. TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx",
  220. DEV_PR_ARG, __entry->phy_mode, __entry->freq_off)
  221. );
  222. TRACE_EVENT(mt_rx,
  223. TP_PROTO(struct mt7601u_dev *dev, struct mt7601u_rxwi *rxwi, u32 f),
  224. TP_ARGS(dev, rxwi, f),
  225. TP_STRUCT__entry(
  226. DEV_ENTRY
  227. __field_struct(struct mt7601u_rxwi, rxwi)
  228. __field(u32, fce_info)
  229. ),
  230. TP_fast_assign(
  231. DEV_ASSIGN;
  232. __entry->rxwi = *rxwi;
  233. __entry->fce_info = f;
  234. ),
  235. TP_printk(DEV_PR_FMT "rxi:%08x ctl:%08x frag_sn:%04hx rate:%04hx "
  236. "uknw:%02hhx z:%02hhx%02hhx%02hhx snr:%02hhx "
  237. "ant:%02hhx gain:%02hhx freq_o:%02hhx "
  238. "r:%08x ea:%08x fce:%08x", DEV_PR_ARG,
  239. le32_to_cpu(__entry->rxwi.rxinfo),
  240. le32_to_cpu(__entry->rxwi.ctl),
  241. le16_to_cpu(__entry->rxwi.frag_sn),
  242. le16_to_cpu(__entry->rxwi.rate),
  243. __entry->rxwi.unknown,
  244. __entry->rxwi.zero[0], __entry->rxwi.zero[1],
  245. __entry->rxwi.zero[2],
  246. __entry->rxwi.snr, __entry->rxwi.ant,
  247. __entry->rxwi.gain, __entry->rxwi.freq_off,
  248. __entry->rxwi.resv2, __entry->rxwi.expert_ant,
  249. __entry->fce_info)
  250. );
  251. TRACE_EVENT(mt_tx,
  252. TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb,
  253. struct mt76_sta *sta, struct mt76_txwi *h),
  254. TP_ARGS(dev, skb, sta, h),
  255. TP_STRUCT__entry(
  256. DEV_ENTRY
  257. __field_struct(struct mt76_txwi, h)
  258. __field(struct sk_buff *, skb)
  259. __field(struct mt76_sta *, sta)
  260. ),
  261. TP_fast_assign(
  262. DEV_ASSIGN;
  263. __entry->h = *h;
  264. __entry->skb = skb;
  265. __entry->sta = sta;
  266. ),
  267. TP_printk(DEV_PR_FMT "skb:%p sta:%p flg:%04hx rate_ctl:%04hx "
  268. "ack:%02hhx wcid:%02hhx len_ctl:%05hx", DEV_PR_ARG,
  269. __entry->skb, __entry->sta,
  270. le16_to_cpu(__entry->h.flags),
  271. le16_to_cpu(__entry->h.rate_ctl),
  272. __entry->h.ack_ctl, __entry->h.wcid,
  273. le16_to_cpu(__entry->h.len_ctl))
  274. );
  275. TRACE_EVENT(mt_tx_dma_done,
  276. TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb),
  277. TP_ARGS(dev, skb),
  278. TP_STRUCT__entry(
  279. DEV_ENTRY
  280. __field(struct sk_buff *, skb)
  281. ),
  282. TP_fast_assign(
  283. DEV_ASSIGN;
  284. __entry->skb = skb;
  285. ),
  286. TP_printk(DEV_PR_FMT "%p", DEV_PR_ARG, __entry->skb)
  287. );
  288. TRACE_EVENT(mt_tx_status_cleaned,
  289. TP_PROTO(struct mt7601u_dev *dev, int cleaned),
  290. TP_ARGS(dev, cleaned),
  291. TP_STRUCT__entry(
  292. DEV_ENTRY
  293. __field(int, cleaned)
  294. ),
  295. TP_fast_assign(
  296. DEV_ASSIGN;
  297. __entry->cleaned = cleaned;
  298. ),
  299. TP_printk(DEV_PR_FMT "%d", DEV_PR_ARG, __entry->cleaned)
  300. );
  301. TRACE_EVENT(mt_tx_status,
  302. TP_PROTO(struct mt7601u_dev *dev, u32 stat1, u32 stat2),
  303. TP_ARGS(dev, stat1, stat2),
  304. TP_STRUCT__entry(
  305. DEV_ENTRY
  306. __field(u32, stat1) __field(u32, stat2)
  307. ),
  308. TP_fast_assign(
  309. DEV_ASSIGN;
  310. __entry->stat1 = stat1;
  311. __entry->stat2 = stat2;
  312. ),
  313. TP_printk(DEV_PR_FMT "%08x %08x",
  314. DEV_PR_ARG, __entry->stat1, __entry->stat2)
  315. );
  316. TRACE_EVENT(mt_rx_dma_aggr,
  317. TP_PROTO(struct mt7601u_dev *dev, int cnt, bool paged),
  318. TP_ARGS(dev, cnt, paged),
  319. TP_STRUCT__entry(
  320. DEV_ENTRY
  321. __field(u8, cnt)
  322. __field(bool, paged)
  323. ),
  324. TP_fast_assign(
  325. DEV_ASSIGN;
  326. __entry->cnt = cnt;
  327. __entry->paged = paged;
  328. ),
  329. TP_printk(DEV_PR_FMT "cnt:%d paged:%d",
  330. DEV_PR_ARG, __entry->cnt, __entry->paged)
  331. );
  332. DEFINE_EVENT(dev_simple_evt, set_key,
  333. TP_PROTO(struct mt7601u_dev *dev, u8 val),
  334. TP_ARGS(dev, val)
  335. );
  336. TRACE_EVENT(set_shared_key,
  337. TP_PROTO(struct mt7601u_dev *dev, u8 vid, u8 key),
  338. TP_ARGS(dev, vid, key),
  339. TP_STRUCT__entry(
  340. DEV_ENTRY
  341. __field(u8, vid)
  342. __field(u8, key)
  343. ),
  344. TP_fast_assign(
  345. DEV_ASSIGN;
  346. __entry->vid = vid;
  347. __entry->key = key;
  348. ),
  349. TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx",
  350. DEV_PR_ARG, __entry->vid, __entry->key)
  351. );
  352. #endif
  353. #undef TRACE_INCLUDE_PATH
  354. #define TRACE_INCLUDE_PATH .
  355. #undef TRACE_INCLUDE_FILE
  356. #define TRACE_INCLUDE_FILE trace
  357. #include <trace/define_trace.h>