trace.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692
  1. #if !defined(__MAC80211_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ)
  2. #define __MAC80211_DRIVER_TRACE
  3. #include <linux/tracepoint.h>
  4. #include <net/mac80211.h>
  5. #include "ieee80211_i.h"
  6. #undef TRACE_SYSTEM
  7. #define TRACE_SYSTEM mac80211
  8. #define MAXNAME 32
  9. #define LOCAL_ENTRY __array(char, wiphy_name, 32)
  10. #define LOCAL_ASSIGN strlcpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME)
  11. #define LOCAL_PR_FMT "%s"
  12. #define LOCAL_PR_ARG __entry->wiphy_name
  13. #define STA_ENTRY __array(char, sta_addr, ETH_ALEN)
  14. #define STA_ASSIGN (sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : memset(__entry->sta_addr, 0, ETH_ALEN))
  15. #define STA_PR_FMT " sta:%pM"
  16. #define STA_PR_ARG __entry->sta_addr
  17. #define VIF_ENTRY __field(enum nl80211_iftype, vif_type) __field(void *, sdata) \
  18. __field(bool, p2p) \
  19. __string(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
  20. #define VIF_ASSIGN __entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \
  21. __entry->p2p = sdata->vif.p2p; \
  22. __assign_str(vif_name, sdata->dev ? sdata->dev->name : sdata->name)
  23. #define VIF_PR_FMT " vif:%s(%d%s)"
  24. #define VIF_PR_ARG __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : ""
  25. /*
  26. * Tracing for driver callbacks.
  27. */
  28. DECLARE_EVENT_CLASS(local_only_evt,
  29. TP_PROTO(struct ieee80211_local *local),
  30. TP_ARGS(local),
  31. TP_STRUCT__entry(
  32. LOCAL_ENTRY
  33. ),
  34. TP_fast_assign(
  35. LOCAL_ASSIGN;
  36. ),
  37. TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG)
  38. );
  39. DECLARE_EVENT_CLASS(local_sdata_addr_evt,
  40. TP_PROTO(struct ieee80211_local *local,
  41. struct ieee80211_sub_if_data *sdata),
  42. TP_ARGS(local, sdata),
  43. TP_STRUCT__entry(
  44. LOCAL_ENTRY
  45. VIF_ENTRY
  46. __array(char, addr, 6)
  47. ),
  48. TP_fast_assign(
  49. LOCAL_ASSIGN;
  50. VIF_ASSIGN;
  51. memcpy(__entry->addr, sdata->vif.addr, 6);
  52. ),
  53. TP_printk(
  54. LOCAL_PR_FMT VIF_PR_FMT " addr:%pM",
  55. LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
  56. )
  57. );
  58. DECLARE_EVENT_CLASS(local_u32_evt,
  59. TP_PROTO(struct ieee80211_local *local, u32 value),
  60. TP_ARGS(local, value),
  61. TP_STRUCT__entry(
  62. LOCAL_ENTRY
  63. __field(u32, value)
  64. ),
  65. TP_fast_assign(
  66. LOCAL_ASSIGN;
  67. __entry->value = value;
  68. ),
  69. TP_printk(
  70. LOCAL_PR_FMT " value:%d",
  71. LOCAL_PR_ARG, __entry->value
  72. )
  73. );
  74. DECLARE_EVENT_CLASS(local_sdata_evt,
  75. TP_PROTO(struct ieee80211_local *local,
  76. struct ieee80211_sub_if_data *sdata),
  77. TP_ARGS(local, sdata),
  78. TP_STRUCT__entry(
  79. LOCAL_ENTRY
  80. VIF_ENTRY
  81. ),
  82. TP_fast_assign(
  83. LOCAL_ASSIGN;
  84. VIF_ASSIGN;
  85. ),
  86. TP_printk(
  87. LOCAL_PR_FMT VIF_PR_FMT,
  88. LOCAL_PR_ARG, VIF_PR_ARG
  89. )
  90. );
  91. DEFINE_EVENT(local_only_evt, drv_return_void,
  92. TP_PROTO(struct ieee80211_local *local),
  93. TP_ARGS(local)
  94. );
  95. TRACE_EVENT(drv_return_int,
  96. TP_PROTO(struct ieee80211_local *local, int ret),
  97. TP_ARGS(local, ret),
  98. TP_STRUCT__entry(
  99. LOCAL_ENTRY
  100. __field(int, ret)
  101. ),
  102. TP_fast_assign(
  103. LOCAL_ASSIGN;
  104. __entry->ret = ret;
  105. ),
  106. TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret)
  107. );
  108. TRACE_EVENT(drv_return_bool,
  109. TP_PROTO(struct ieee80211_local *local, bool ret),
  110. TP_ARGS(local, ret),
  111. TP_STRUCT__entry(
  112. LOCAL_ENTRY
  113. __field(bool, ret)
  114. ),
  115. TP_fast_assign(
  116. LOCAL_ASSIGN;
  117. __entry->ret = ret;
  118. ),
  119. TP_printk(LOCAL_PR_FMT " - %s", LOCAL_PR_ARG, (__entry->ret) ?
  120. "true" : "false")
  121. );
  122. TRACE_EVENT(drv_return_u64,
  123. TP_PROTO(struct ieee80211_local *local, u64 ret),
  124. TP_ARGS(local, ret),
  125. TP_STRUCT__entry(
  126. LOCAL_ENTRY
  127. __field(u64, ret)
  128. ),
  129. TP_fast_assign(
  130. LOCAL_ASSIGN;
  131. __entry->ret = ret;
  132. ),
  133. TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret)
  134. );
  135. DEFINE_EVENT(local_only_evt, drv_start,
  136. TP_PROTO(struct ieee80211_local *local),
  137. TP_ARGS(local)
  138. );
  139. DEFINE_EVENT(local_u32_evt, drv_get_et_strings,
  140. TP_PROTO(struct ieee80211_local *local, u32 sset),
  141. TP_ARGS(local, sset)
  142. );
  143. DEFINE_EVENT(local_u32_evt, drv_get_et_sset_count,
  144. TP_PROTO(struct ieee80211_local *local, u32 sset),
  145. TP_ARGS(local, sset)
  146. );
  147. DEFINE_EVENT(local_only_evt, drv_get_et_stats,
  148. TP_PROTO(struct ieee80211_local *local),
  149. TP_ARGS(local)
  150. );
  151. DEFINE_EVENT(local_only_evt, drv_suspend,
  152. TP_PROTO(struct ieee80211_local *local),
  153. TP_ARGS(local)
  154. );
  155. DEFINE_EVENT(local_only_evt, drv_resume,
  156. TP_PROTO(struct ieee80211_local *local),
  157. TP_ARGS(local)
  158. );
  159. TRACE_EVENT(drv_set_wakeup,
  160. TP_PROTO(struct ieee80211_local *local, bool enabled),
  161. TP_ARGS(local, enabled),
  162. TP_STRUCT__entry(
  163. LOCAL_ENTRY
  164. __field(bool, enabled)
  165. ),
  166. TP_fast_assign(
  167. LOCAL_ASSIGN;
  168. __entry->enabled = enabled;
  169. ),
  170. TP_printk(LOCAL_PR_FMT " enabled:%d", LOCAL_PR_ARG, __entry->enabled)
  171. );
  172. DEFINE_EVENT(local_only_evt, drv_stop,
  173. TP_PROTO(struct ieee80211_local *local),
  174. TP_ARGS(local)
  175. );
  176. DEFINE_EVENT(local_sdata_addr_evt, drv_add_interface,
  177. TP_PROTO(struct ieee80211_local *local,
  178. struct ieee80211_sub_if_data *sdata),
  179. TP_ARGS(local, sdata)
  180. );
  181. TRACE_EVENT(drv_change_interface,
  182. TP_PROTO(struct ieee80211_local *local,
  183. struct ieee80211_sub_if_data *sdata,
  184. enum nl80211_iftype type, bool p2p),
  185. TP_ARGS(local, sdata, type, p2p),
  186. TP_STRUCT__entry(
  187. LOCAL_ENTRY
  188. VIF_ENTRY
  189. __field(u32, new_type)
  190. __field(bool, new_p2p)
  191. ),
  192. TP_fast_assign(
  193. LOCAL_ASSIGN;
  194. VIF_ASSIGN;
  195. __entry->new_type = type;
  196. __entry->new_p2p = p2p;
  197. ),
  198. TP_printk(
  199. LOCAL_PR_FMT VIF_PR_FMT " new type:%d%s",
  200. LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type,
  201. __entry->new_p2p ? "/p2p" : ""
  202. )
  203. );
  204. DEFINE_EVENT(local_sdata_addr_evt, drv_remove_interface,
  205. TP_PROTO(struct ieee80211_local *local,
  206. struct ieee80211_sub_if_data *sdata),
  207. TP_ARGS(local, sdata)
  208. );
  209. TRACE_EVENT(drv_config,
  210. TP_PROTO(struct ieee80211_local *local,
  211. u32 changed),
  212. TP_ARGS(local, changed),
  213. TP_STRUCT__entry(
  214. LOCAL_ENTRY
  215. __field(u32, changed)
  216. __field(u32, flags)
  217. __field(int, power_level)
  218. __field(int, dynamic_ps_timeout)
  219. __field(int, max_sleep_period)
  220. __field(u16, listen_interval)
  221. __field(u8, long_frame_max_tx_count)
  222. __field(u8, short_frame_max_tx_count)
  223. __field(int, center_freq)
  224. __field(int, channel_type)
  225. __field(int, smps)
  226. ),
  227. TP_fast_assign(
  228. LOCAL_ASSIGN;
  229. __entry->changed = changed;
  230. __entry->flags = local->hw.conf.flags;
  231. __entry->power_level = local->hw.conf.power_level;
  232. __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout;
  233. __entry->max_sleep_period = local->hw.conf.max_sleep_period;
  234. __entry->listen_interval = local->hw.conf.listen_interval;
  235. __entry->long_frame_max_tx_count =
  236. local->hw.conf.long_frame_max_tx_count;
  237. __entry->short_frame_max_tx_count =
  238. local->hw.conf.short_frame_max_tx_count;
  239. __entry->center_freq = local->hw.conf.channel ?
  240. local->hw.conf.channel->center_freq : 0;
  241. __entry->channel_type = local->hw.conf.channel_type;
  242. __entry->smps = local->hw.conf.smps_mode;
  243. ),
  244. TP_printk(
  245. LOCAL_PR_FMT " ch:%#x freq:%d",
  246. LOCAL_PR_ARG, __entry->changed, __entry->center_freq
  247. )
  248. );
  249. TRACE_EVENT(drv_bss_info_changed,
  250. TP_PROTO(struct ieee80211_local *local,
  251. struct ieee80211_sub_if_data *sdata,
  252. struct ieee80211_bss_conf *info,
  253. u32 changed),
  254. TP_ARGS(local, sdata, info, changed),
  255. TP_STRUCT__entry(
  256. LOCAL_ENTRY
  257. VIF_ENTRY
  258. __field(bool, assoc)
  259. __field(u16, aid)
  260. __field(bool, cts)
  261. __field(bool, shortpre)
  262. __field(bool, shortslot)
  263. __field(u8, dtimper)
  264. __field(u16, bcnint)
  265. __field(u16, assoc_cap)
  266. __field(u64, sync_tsf)
  267. __field(u32, sync_device_ts)
  268. __field(u32, basic_rates)
  269. __field(u32, changed)
  270. __field(bool, enable_beacon)
  271. __field(u16, ht_operation_mode)
  272. ),
  273. TP_fast_assign(
  274. LOCAL_ASSIGN;
  275. VIF_ASSIGN;
  276. __entry->changed = changed;
  277. __entry->aid = info->aid;
  278. __entry->assoc = info->assoc;
  279. __entry->shortpre = info->use_short_preamble;
  280. __entry->cts = info->use_cts_prot;
  281. __entry->shortslot = info->use_short_slot;
  282. __entry->dtimper = info->dtim_period;
  283. __entry->bcnint = info->beacon_int;
  284. __entry->assoc_cap = info->assoc_capability;
  285. __entry->sync_tsf = info->sync_tsf;
  286. __entry->sync_device_ts = info->sync_device_ts;
  287. __entry->basic_rates = info->basic_rates;
  288. __entry->enable_beacon = info->enable_beacon;
  289. __entry->ht_operation_mode = info->ht_operation_mode;
  290. ),
  291. TP_printk(
  292. LOCAL_PR_FMT VIF_PR_FMT " changed:%#x",
  293. LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed
  294. )
  295. );
  296. TRACE_EVENT(drv_prepare_multicast,
  297. TP_PROTO(struct ieee80211_local *local, int mc_count),
  298. TP_ARGS(local, mc_count),
  299. TP_STRUCT__entry(
  300. LOCAL_ENTRY
  301. __field(int, mc_count)
  302. ),
  303. TP_fast_assign(
  304. LOCAL_ASSIGN;
  305. __entry->mc_count = mc_count;
  306. ),
  307. TP_printk(
  308. LOCAL_PR_FMT " prepare mc (%d)",
  309. LOCAL_PR_ARG, __entry->mc_count
  310. )
  311. );
  312. TRACE_EVENT(drv_configure_filter,
  313. TP_PROTO(struct ieee80211_local *local,
  314. unsigned int changed_flags,
  315. unsigned int *total_flags,
  316. u64 multicast),
  317. TP_ARGS(local, changed_flags, total_flags, multicast),
  318. TP_STRUCT__entry(
  319. LOCAL_ENTRY
  320. __field(unsigned int, changed)
  321. __field(unsigned int, total)
  322. __field(u64, multicast)
  323. ),
  324. TP_fast_assign(
  325. LOCAL_ASSIGN;
  326. __entry->changed = changed_flags;
  327. __entry->total = *total_flags;
  328. __entry->multicast = multicast;
  329. ),
  330. TP_printk(
  331. LOCAL_PR_FMT " changed:%#x total:%#x",
  332. LOCAL_PR_ARG, __entry->changed, __entry->total
  333. )
  334. );
  335. TRACE_EVENT(drv_set_tim,
  336. TP_PROTO(struct ieee80211_local *local,
  337. struct ieee80211_sta *sta, bool set),
  338. TP_ARGS(local, sta, set),
  339. TP_STRUCT__entry(
  340. LOCAL_ENTRY
  341. STA_ENTRY
  342. __field(bool, set)
  343. ),
  344. TP_fast_assign(
  345. LOCAL_ASSIGN;
  346. STA_ASSIGN;
  347. __entry->set = set;
  348. ),
  349. TP_printk(
  350. LOCAL_PR_FMT STA_PR_FMT " set:%d",
  351. LOCAL_PR_ARG, STA_PR_FMT, __entry->set
  352. )
  353. );
  354. TRACE_EVENT(drv_set_key,
  355. TP_PROTO(struct ieee80211_local *local,
  356. enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata,
  357. struct ieee80211_sta *sta,
  358. struct ieee80211_key_conf *key),
  359. TP_ARGS(local, cmd, sdata, sta, key),
  360. TP_STRUCT__entry(
  361. LOCAL_ENTRY
  362. VIF_ENTRY
  363. STA_ENTRY
  364. __field(u32, cipher)
  365. __field(u8, hw_key_idx)
  366. __field(u8, flags)
  367. __field(s8, keyidx)
  368. ),
  369. TP_fast_assign(
  370. LOCAL_ASSIGN;
  371. VIF_ASSIGN;
  372. STA_ASSIGN;
  373. __entry->cipher = key->cipher;
  374. __entry->flags = key->flags;
  375. __entry->keyidx = key->keyidx;
  376. __entry->hw_key_idx = key->hw_key_idx;
  377. ),
  378. TP_printk(
  379. LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT,
  380. LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
  381. )
  382. );
  383. TRACE_EVENT(drv_update_tkip_key,
  384. TP_PROTO(struct ieee80211_local *local,
  385. struct ieee80211_sub_if_data *sdata,
  386. struct ieee80211_key_conf *conf,
  387. struct ieee80211_sta *sta, u32 iv32),
  388. TP_ARGS(local, sdata, conf, sta, iv32),
  389. TP_STRUCT__entry(
  390. LOCAL_ENTRY
  391. VIF_ENTRY
  392. STA_ENTRY
  393. __field(u32, iv32)
  394. ),
  395. TP_fast_assign(
  396. LOCAL_ASSIGN;
  397. VIF_ASSIGN;
  398. STA_ASSIGN;
  399. __entry->iv32 = iv32;
  400. ),
  401. TP_printk(
  402. LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x",
  403. LOCAL_PR_ARG,VIF_PR_ARG,STA_PR_ARG, __entry->iv32
  404. )
  405. );
  406. DEFINE_EVENT(local_sdata_evt, drv_hw_scan,
  407. TP_PROTO(struct ieee80211_local *local,
  408. struct ieee80211_sub_if_data *sdata),
  409. TP_ARGS(local, sdata)
  410. );
  411. DEFINE_EVENT(local_sdata_evt, drv_cancel_hw_scan,
  412. TP_PROTO(struct ieee80211_local *local,
  413. struct ieee80211_sub_if_data *sdata),
  414. TP_ARGS(local, sdata)
  415. );
  416. DEFINE_EVENT(local_sdata_evt, drv_sched_scan_start,
  417. TP_PROTO(struct ieee80211_local *local,
  418. struct ieee80211_sub_if_data *sdata),
  419. TP_ARGS(local, sdata)
  420. );
  421. DEFINE_EVENT(local_sdata_evt, drv_sched_scan_stop,
  422. TP_PROTO(struct ieee80211_local *local,
  423. struct ieee80211_sub_if_data *sdata),
  424. TP_ARGS(local, sdata)
  425. );
  426. DEFINE_EVENT(local_only_evt, drv_sw_scan_start,
  427. TP_PROTO(struct ieee80211_local *local),
  428. TP_ARGS(local)
  429. );
  430. DEFINE_EVENT(local_only_evt, drv_sw_scan_complete,
  431. TP_PROTO(struct ieee80211_local *local),
  432. TP_ARGS(local)
  433. );
  434. TRACE_EVENT(drv_get_stats,
  435. TP_PROTO(struct ieee80211_local *local,
  436. struct ieee80211_low_level_stats *stats,
  437. int ret),
  438. TP_ARGS(local, stats, ret),
  439. TP_STRUCT__entry(
  440. LOCAL_ENTRY
  441. __field(int, ret)
  442. __field(unsigned int, ackfail)
  443. __field(unsigned int, rtsfail)
  444. __field(unsigned int, fcserr)
  445. __field(unsigned int, rtssucc)
  446. ),
  447. TP_fast_assign(
  448. LOCAL_ASSIGN;
  449. __entry->ret = ret;
  450. __entry->ackfail = stats->dot11ACKFailureCount;
  451. __entry->rtsfail = stats->dot11RTSFailureCount;
  452. __entry->fcserr = stats->dot11FCSErrorCount;
  453. __entry->rtssucc = stats->dot11RTSSuccessCount;
  454. ),
  455. TP_printk(
  456. LOCAL_PR_FMT " ret:%d",
  457. LOCAL_PR_ARG, __entry->ret
  458. )
  459. );
  460. TRACE_EVENT(drv_get_tkip_seq,
  461. TP_PROTO(struct ieee80211_local *local,
  462. u8 hw_key_idx, u32 *iv32, u16 *iv16),
  463. TP_ARGS(local, hw_key_idx, iv32, iv16),
  464. TP_STRUCT__entry(
  465. LOCAL_ENTRY
  466. __field(u8, hw_key_idx)
  467. __field(u32, iv32)
  468. __field(u16, iv16)
  469. ),
  470. TP_fast_assign(
  471. LOCAL_ASSIGN;
  472. __entry->hw_key_idx = hw_key_idx;
  473. __entry->iv32 = *iv32;
  474. __entry->iv16 = *iv16;
  475. ),
  476. TP_printk(
  477. LOCAL_PR_FMT, LOCAL_PR_ARG
  478. )
  479. );
  480. DEFINE_EVENT(local_u32_evt, drv_set_frag_threshold,
  481. TP_PROTO(struct ieee80211_local *local, u32 value),
  482. TP_ARGS(local, value)
  483. );
  484. DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold,
  485. TP_PROTO(struct ieee80211_local *local, u32 value),
  486. TP_ARGS(local, value)
  487. );
  488. TRACE_EVENT(drv_set_coverage_class,
  489. TP_PROTO(struct ieee80211_local *local, u8 value),
  490. TP_ARGS(local, value),
  491. TP_STRUCT__entry(
  492. LOCAL_ENTRY
  493. __field(u8, value)
  494. ),
  495. TP_fast_assign(
  496. LOCAL_ASSIGN;
  497. __entry->value = value;
  498. ),
  499. TP_printk(
  500. LOCAL_PR_FMT " value:%d",
  501. LOCAL_PR_ARG, __entry->value
  502. )
  503. );
  504. TRACE_EVENT(drv_sta_notify,
  505. TP_PROTO(struct ieee80211_local *local,
  506. struct ieee80211_sub_if_data *sdata,
  507. enum sta_notify_cmd cmd,
  508. struct ieee80211_sta *sta),
  509. TP_ARGS(local, sdata, cmd, sta),
  510. TP_STRUCT__entry(
  511. LOCAL_ENTRY
  512. VIF_ENTRY
  513. STA_ENTRY
  514. __field(u32, cmd)
  515. ),
  516. TP_fast_assign(
  517. LOCAL_ASSIGN;
  518. VIF_ASSIGN;
  519. STA_ASSIGN;
  520. __entry->cmd = cmd;
  521. ),
  522. TP_printk(
  523. LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " cmd:%d",
  524. LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd
  525. )
  526. );
  527. TRACE_EVENT(drv_sta_state,
  528. TP_PROTO(struct ieee80211_local *local,
  529. struct ieee80211_sub_if_data *sdata,
  530. struct ieee80211_sta *sta,
  531. enum ieee80211_sta_state old_state,
  532. enum ieee80211_sta_state new_state),
  533. TP_ARGS(local, sdata, sta, old_state, new_state),
  534. TP_STRUCT__entry(
  535. LOCAL_ENTRY
  536. VIF_ENTRY
  537. STA_ENTRY
  538. __field(u32, old_state)
  539. __field(u32, new_state)
  540. ),
  541. TP_fast_assign(
  542. LOCAL_ASSIGN;
  543. VIF_ASSIGN;
  544. STA_ASSIGN;
  545. __entry->old_state = old_state;
  546. __entry->new_state = new_state;
  547. ),
  548. TP_printk(
  549. LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " state: %d->%d",
  550. LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
  551. __entry->old_state, __entry->new_state
  552. )
  553. );
  554. TRACE_EVENT(drv_sta_rc_update,
  555. TP_PROTO(struct ieee80211_local *local,
  556. struct ieee80211_sub_if_data *sdata,
  557. struct ieee80211_sta *sta,
  558. u32 changed),
  559. TP_ARGS(local, sdata, sta, changed),
  560. TP_STRUCT__entry(
  561. LOCAL_ENTRY
  562. VIF_ENTRY
  563. STA_ENTRY
  564. __field(u32, changed)
  565. ),
  566. TP_fast_assign(
  567. LOCAL_ASSIGN;
  568. VIF_ASSIGN;
  569. STA_ASSIGN;
  570. __entry->changed = changed;
  571. ),
  572. TP_printk(
  573. LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " changed: 0x%x",
  574. LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->changed
  575. )
  576. );
  577. TRACE_EVENT(drv_sta_add,
  578. TP_PROTO(struct ieee80211_local *local,
  579. struct ieee80211_sub_if_data *sdata,
  580. struct ieee80211_sta *sta),
  581. TP_ARGS(local, sdata, sta),
  582. TP_STRUCT__entry(
  583. LOCAL_ENTRY
  584. VIF_ENTRY
  585. STA_ENTRY
  586. ),
  587. TP_fast_assign(
  588. LOCAL_ASSIGN;
  589. VIF_ASSIGN;
  590. STA_ASSIGN;
  591. ),
  592. TP_printk(
  593. LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT,
  594. LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
  595. )
  596. );
  597. TRACE_EVENT(drv_sta_remove,
  598. TP_PROTO(struct ieee80211_local *local,
  599. struct ieee80211_sub_if_data *sdata,
  600. struct ieee80211_sta *sta),
  601. TP_ARGS(local, sdata, sta),
  602. TP_STRUCT__entry(
  603. LOCAL_ENTRY
  604. VIF_ENTRY
  605. STA_ENTRY
  606. ),
  607. TP_fast_assign(
  608. LOCAL_ASSIGN;
  609. VIF_ASSIGN;
  610. STA_ASSIGN;
  611. ),
  612. TP_printk(
  613. LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT,
  614. LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
  615. )
  616. );
  617. TRACE_EVENT(drv_conf_tx,
  618. TP_PROTO(struct ieee80211_local *local,
  619. struct ieee80211_sub_if_data *sdata,
  620. u16 ac, const struct ieee80211_tx_queue_params *params),
  621. TP_ARGS(local, sdata, ac, params),
  622. TP_STRUCT__entry(
  623. LOCAL_ENTRY
  624. VIF_ENTRY
  625. __field(u16, ac)
  626. __field(u16, txop)
  627. __field(u16, cw_min)
  628. __field(u16, cw_max)
  629. __field(u8, aifs)
  630. __field(bool, uapsd)
  631. ),
  632. TP_fast_assign(
  633. LOCAL_ASSIGN;
  634. VIF_ASSIGN;
  635. __entry->ac = ac;
  636. __entry->txop = params->txop;
  637. __entry->cw_max = params->cw_max;
  638. __entry->cw_min = params->cw_min;
  639. __entry->aifs = params->aifs;
  640. __entry->uapsd = params->uapsd;
  641. ),
  642. TP_printk(
  643. LOCAL_PR_FMT VIF_PR_FMT " AC:%d",
  644. LOCAL_PR_ARG, VIF_PR_ARG, __entry->ac
  645. )
  646. );
  647. DEFINE_EVENT(local_sdata_evt, drv_get_tsf,
  648. TP_PROTO(struct ieee80211_local *local,
  649. struct ieee80211_sub_if_data *sdata),
  650. TP_ARGS(local, sdata)
  651. );
  652. TRACE_EVENT(drv_set_tsf,
  653. TP_PROTO(struct ieee80211_local *local,
  654. struct ieee80211_sub_if_data *sdata,
  655. u64 tsf),
  656. TP_ARGS(local, sdata, tsf),
  657. TP_STRUCT__entry(
  658. LOCAL_ENTRY
  659. VIF_ENTRY
  660. __field(u64, tsf)
  661. ),
  662. TP_fast_assign(
  663. LOCAL_ASSIGN;
  664. VIF_ASSIGN;
  665. __entry->tsf = tsf;
  666. ),
  667. TP_printk(
  668. LOCAL_PR_FMT VIF_PR_FMT " tsf:%llu",
  669. LOCAL_PR_ARG, VIF_PR_ARG, (unsigned long long)__entry->tsf
  670. )
  671. );
  672. DEFINE_EVENT(local_sdata_evt, drv_reset_tsf,
  673. TP_PROTO(struct ieee80211_local *local,
  674. struct ieee80211_sub_if_data *sdata),
  675. TP_ARGS(local, sdata)
  676. );
  677. DEFINE_EVENT(local_only_evt, drv_tx_last_beacon,
  678. TP_PROTO(struct ieee80211_local *local),
  679. TP_ARGS(local)
  680. );
  681. TRACE_EVENT(drv_ampdu_action,
  682. TP_PROTO(struct ieee80211_local *local,
  683. struct ieee80211_sub_if_data *sdata,
  684. enum ieee80211_ampdu_mlme_action action,
  685. struct ieee80211_sta *sta, u16 tid,
  686. u16 *ssn, u8 buf_size),
  687. TP_ARGS(local, sdata, action, sta, tid, ssn, buf_size),
  688. TP_STRUCT__entry(
  689. LOCAL_ENTRY
  690. STA_ENTRY
  691. __field(u32, action)
  692. __field(u16, tid)
  693. __field(u16, ssn)
  694. __field(u8, buf_size)
  695. VIF_ENTRY
  696. ),
  697. TP_fast_assign(
  698. LOCAL_ASSIGN;
  699. VIF_ASSIGN;
  700. STA_ASSIGN;
  701. __entry->action = action;
  702. __entry->tid = tid;
  703. __entry->ssn = ssn ? *ssn : 0;
  704. __entry->buf_size = buf_size;
  705. ),
  706. TP_printk(
  707. LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d buf:%d",
  708. LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action,
  709. __entry->tid, __entry->buf_size
  710. )
  711. );
  712. TRACE_EVENT(drv_get_survey,
  713. TP_PROTO(struct ieee80211_local *local, int idx,
  714. struct survey_info *survey),
  715. TP_ARGS(local, idx, survey),
  716. TP_STRUCT__entry(
  717. LOCAL_ENTRY
  718. __field(int, idx)
  719. ),
  720. TP_fast_assign(
  721. LOCAL_ASSIGN;
  722. __entry->idx = idx;
  723. ),
  724. TP_printk(
  725. LOCAL_PR_FMT " idx:%d",
  726. LOCAL_PR_ARG, __entry->idx
  727. )
  728. );
  729. TRACE_EVENT(drv_flush,
  730. TP_PROTO(struct ieee80211_local *local, bool drop),
  731. TP_ARGS(local, drop),
  732. TP_STRUCT__entry(
  733. LOCAL_ENTRY
  734. __field(bool, drop)
  735. ),
  736. TP_fast_assign(
  737. LOCAL_ASSIGN;
  738. __entry->drop = drop;
  739. ),
  740. TP_printk(
  741. LOCAL_PR_FMT " drop:%d",
  742. LOCAL_PR_ARG, __entry->drop
  743. )
  744. );
  745. TRACE_EVENT(drv_channel_switch,
  746. TP_PROTO(struct ieee80211_local *local,
  747. struct ieee80211_channel_switch *ch_switch),
  748. TP_ARGS(local, ch_switch),
  749. TP_STRUCT__entry(
  750. LOCAL_ENTRY
  751. __field(u64, timestamp)
  752. __field(bool, block_tx)
  753. __field(u16, freq)
  754. __field(u8, count)
  755. ),
  756. TP_fast_assign(
  757. LOCAL_ASSIGN;
  758. __entry->timestamp = ch_switch->timestamp;
  759. __entry->block_tx = ch_switch->block_tx;
  760. __entry->freq = ch_switch->channel->center_freq;
  761. __entry->count = ch_switch->count;
  762. ),
  763. TP_printk(
  764. LOCAL_PR_FMT " new freq:%u count:%d",
  765. LOCAL_PR_ARG, __entry->freq, __entry->count
  766. )
  767. );
  768. TRACE_EVENT(drv_set_antenna,
  769. TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
  770. TP_ARGS(local, tx_ant, rx_ant, ret),
  771. TP_STRUCT__entry(
  772. LOCAL_ENTRY
  773. __field(u32, tx_ant)
  774. __field(u32, rx_ant)
  775. __field(int, ret)
  776. ),
  777. TP_fast_assign(
  778. LOCAL_ASSIGN;
  779. __entry->tx_ant = tx_ant;
  780. __entry->rx_ant = rx_ant;
  781. __entry->ret = ret;
  782. ),
  783. TP_printk(
  784. LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
  785. LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
  786. )
  787. );
  788. TRACE_EVENT(drv_get_antenna,
  789. TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
  790. TP_ARGS(local, tx_ant, rx_ant, ret),
  791. TP_STRUCT__entry(
  792. LOCAL_ENTRY
  793. __field(u32, tx_ant)
  794. __field(u32, rx_ant)
  795. __field(int, ret)
  796. ),
  797. TP_fast_assign(
  798. LOCAL_ASSIGN;
  799. __entry->tx_ant = tx_ant;
  800. __entry->rx_ant = rx_ant;
  801. __entry->ret = ret;
  802. ),
  803. TP_printk(
  804. LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
  805. LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
  806. )
  807. );
  808. TRACE_EVENT(drv_remain_on_channel,
  809. TP_PROTO(struct ieee80211_local *local, struct ieee80211_channel *chan,
  810. enum nl80211_channel_type chantype, unsigned int duration),
  811. TP_ARGS(local, chan, chantype, duration),
  812. TP_STRUCT__entry(
  813. LOCAL_ENTRY
  814. __field(int, center_freq)
  815. __field(int, channel_type)
  816. __field(unsigned int, duration)
  817. ),
  818. TP_fast_assign(
  819. LOCAL_ASSIGN;
  820. __entry->center_freq = chan->center_freq;
  821. __entry->channel_type = chantype;
  822. __entry->duration = duration;
  823. ),
  824. TP_printk(
  825. LOCAL_PR_FMT " freq:%dMHz duration:%dms",
  826. LOCAL_PR_ARG, __entry->center_freq, __entry->duration
  827. )
  828. );
  829. DEFINE_EVENT(local_only_evt, drv_cancel_remain_on_channel,
  830. TP_PROTO(struct ieee80211_local *local),
  831. TP_ARGS(local)
  832. );
  833. TRACE_EVENT(drv_offchannel_tx,
  834. TP_PROTO(struct ieee80211_local *local, struct sk_buff *skb,
  835. struct ieee80211_channel *chan,
  836. enum nl80211_channel_type channel_type,
  837. unsigned int wait),
  838. TP_ARGS(local, skb, chan, channel_type, wait),
  839. TP_STRUCT__entry(
  840. LOCAL_ENTRY
  841. __field(int, center_freq)
  842. __field(int, channel_type)
  843. __field(unsigned int, wait)
  844. ),
  845. TP_fast_assign(
  846. LOCAL_ASSIGN;
  847. __entry->center_freq = chan->center_freq;
  848. __entry->channel_type = channel_type;
  849. __entry->wait = wait;
  850. ),
  851. TP_printk(
  852. LOCAL_PR_FMT " freq:%dMHz, wait:%dms",
  853. LOCAL_PR_ARG, __entry->center_freq, __entry->wait
  854. )
  855. );
  856. TRACE_EVENT(drv_set_ringparam,
  857. TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx),
  858. TP_ARGS(local, tx, rx),
  859. TP_STRUCT__entry(
  860. LOCAL_ENTRY
  861. __field(u32, tx)
  862. __field(u32, rx)
  863. ),
  864. TP_fast_assign(
  865. LOCAL_ASSIGN;
  866. __entry->tx = tx;
  867. __entry->rx = rx;
  868. ),
  869. TP_printk(
  870. LOCAL_PR_FMT " tx:%d rx %d",
  871. LOCAL_PR_ARG, __entry->tx, __entry->rx
  872. )
  873. );
  874. TRACE_EVENT(drv_get_ringparam,
  875. TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max,
  876. u32 *rx, u32 *rx_max),
  877. TP_ARGS(local, tx, tx_max, rx, rx_max),
  878. TP_STRUCT__entry(
  879. LOCAL_ENTRY
  880. __field(u32, tx)
  881. __field(u32, tx_max)
  882. __field(u32, rx)
  883. __field(u32, rx_max)
  884. ),
  885. TP_fast_assign(
  886. LOCAL_ASSIGN;
  887. __entry->tx = *tx;
  888. __entry->tx_max = *tx_max;
  889. __entry->rx = *rx;
  890. __entry->rx_max = *rx_max;
  891. ),
  892. TP_printk(
  893. LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d",
  894. LOCAL_PR_ARG,
  895. __entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max
  896. )
  897. );
  898. DEFINE_EVENT(local_only_evt, drv_tx_frames_pending,
  899. TP_PROTO(struct ieee80211_local *local),
  900. TP_ARGS(local)
  901. );
  902. DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait,
  903. TP_PROTO(struct ieee80211_local *local),
  904. TP_ARGS(local)
  905. );
  906. TRACE_EVENT(drv_set_bitrate_mask,
  907. TP_PROTO(struct ieee80211_local *local,
  908. struct ieee80211_sub_if_data *sdata,
  909. const struct cfg80211_bitrate_mask *mask),
  910. TP_ARGS(local, sdata, mask),
  911. TP_STRUCT__entry(
  912. LOCAL_ENTRY
  913. VIF_ENTRY
  914. __field(u32, legacy_2g)
  915. __field(u32, legacy_5g)
  916. ),
  917. TP_fast_assign(
  918. LOCAL_ASSIGN;
  919. VIF_ASSIGN;
  920. __entry->legacy_2g = mask->control[IEEE80211_BAND_2GHZ].legacy;
  921. __entry->legacy_5g = mask->control[IEEE80211_BAND_5GHZ].legacy;
  922. ),
  923. TP_printk(
  924. LOCAL_PR_FMT VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x",
  925. LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g
  926. )
  927. );
  928. TRACE_EVENT(drv_set_rekey_data,
  929. TP_PROTO(struct ieee80211_local *local,
  930. struct ieee80211_sub_if_data *sdata,
  931. struct cfg80211_gtk_rekey_data *data),
  932. TP_ARGS(local, sdata, data),
  933. TP_STRUCT__entry(
  934. LOCAL_ENTRY
  935. VIF_ENTRY
  936. __array(u8, kek, NL80211_KEK_LEN)
  937. __array(u8, kck, NL80211_KCK_LEN)
  938. __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
  939. ),
  940. TP_fast_assign(
  941. LOCAL_ASSIGN;
  942. VIF_ASSIGN;
  943. memcpy(__entry->kek, data->kek, NL80211_KEK_LEN);
  944. memcpy(__entry->kck, data->kck, NL80211_KCK_LEN);
  945. memcpy(__entry->replay_ctr, data->replay_ctr,
  946. NL80211_REPLAY_CTR_LEN);
  947. ),
  948. TP_printk(LOCAL_PR_FMT VIF_PR_FMT,
  949. LOCAL_PR_ARG, VIF_PR_ARG)
  950. );
  951. TRACE_EVENT(drv_rssi_callback,
  952. TP_PROTO(struct ieee80211_local *local,
  953. enum ieee80211_rssi_event rssi_event),
  954. TP_ARGS(local, rssi_event),
  955. TP_STRUCT__entry(
  956. LOCAL_ENTRY
  957. __field(u32, rssi_event)
  958. ),
  959. TP_fast_assign(
  960. LOCAL_ASSIGN;
  961. __entry->rssi_event = rssi_event;
  962. ),
  963. TP_printk(
  964. LOCAL_PR_FMT " rssi_event:%d",
  965. LOCAL_PR_ARG, __entry->rssi_event
  966. )
  967. );
  968. DECLARE_EVENT_CLASS(release_evt,
  969. TP_PROTO(struct ieee80211_local *local,
  970. struct ieee80211_sta *sta,
  971. u16 tids, int num_frames,
  972. enum ieee80211_frame_release_type reason,
  973. bool more_data),
  974. TP_ARGS(local, sta, tids, num_frames, reason, more_data),
  975. TP_STRUCT__entry(
  976. LOCAL_ENTRY
  977. STA_ENTRY
  978. __field(u16, tids)
  979. __field(int, num_frames)
  980. __field(int, reason)
  981. __field(bool, more_data)
  982. ),
  983. TP_fast_assign(
  984. LOCAL_ASSIGN;
  985. STA_ASSIGN;
  986. __entry->tids = tids;
  987. __entry->num_frames = num_frames;
  988. __entry->reason = reason;
  989. __entry->more_data = more_data;
  990. ),
  991. TP_printk(
  992. LOCAL_PR_FMT STA_PR_FMT
  993. " TIDs:0x%.4x frames:%d reason:%d more:%d",
  994. LOCAL_PR_ARG, STA_PR_ARG, __entry->tids, __entry->num_frames,
  995. __entry->reason, __entry->more_data
  996. )
  997. );
  998. DEFINE_EVENT(release_evt, drv_release_buffered_frames,
  999. TP_PROTO(struct ieee80211_local *local,
  1000. struct ieee80211_sta *sta,
  1001. u16 tids, int num_frames,
  1002. enum ieee80211_frame_release_type reason,
  1003. bool more_data),
  1004. TP_ARGS(local, sta, tids, num_frames, reason, more_data)
  1005. );
  1006. DEFINE_EVENT(release_evt, drv_allow_buffered_frames,
  1007. TP_PROTO(struct ieee80211_local *local,
  1008. struct ieee80211_sta *sta,
  1009. u16 tids, int num_frames,
  1010. enum ieee80211_frame_release_type reason,
  1011. bool more_data),
  1012. TP_ARGS(local, sta, tids, num_frames, reason, more_data)
  1013. );
  1014. TRACE_EVENT(drv_get_rssi,
  1015. TP_PROTO(struct ieee80211_local *local, struct ieee80211_sta *sta,
  1016. s8 rssi, int ret),
  1017. TP_ARGS(local, sta, rssi, ret),
  1018. TP_STRUCT__entry(
  1019. LOCAL_ENTRY
  1020. STA_ENTRY
  1021. __field(s8, rssi)
  1022. __field(int, ret)
  1023. ),
  1024. TP_fast_assign(
  1025. LOCAL_ASSIGN;
  1026. STA_ASSIGN;
  1027. __entry->rssi = rssi;
  1028. __entry->ret = ret;
  1029. ),
  1030. TP_printk(
  1031. LOCAL_PR_FMT STA_PR_FMT " rssi:%d ret:%d",
  1032. LOCAL_PR_ARG, STA_PR_ARG, __entry->rssi, __entry->ret
  1033. )
  1034. );
  1035. DEFINE_EVENT(local_sdata_evt, drv_mgd_prepare_tx,
  1036. TP_PROTO(struct ieee80211_local *local,
  1037. struct ieee80211_sub_if_data *sdata),
  1038. TP_ARGS(local, sdata)
  1039. );
  1040. /*
  1041. * Tracing for API calls that drivers call.
  1042. */
  1043. TRACE_EVENT(api_start_tx_ba_session,
  1044. TP_PROTO(struct ieee80211_sta *sta, u16 tid),
  1045. TP_ARGS(sta, tid),
  1046. TP_STRUCT__entry(
  1047. STA_ENTRY
  1048. __field(u16, tid)
  1049. ),
  1050. TP_fast_assign(
  1051. STA_ASSIGN;
  1052. __entry->tid = tid;
  1053. ),
  1054. TP_printk(
  1055. STA_PR_FMT " tid:%d",
  1056. STA_PR_ARG, __entry->tid
  1057. )
  1058. );
  1059. TRACE_EVENT(api_start_tx_ba_cb,
  1060. TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
  1061. TP_ARGS(sdata, ra, tid),
  1062. TP_STRUCT__entry(
  1063. VIF_ENTRY
  1064. __array(u8, ra, ETH_ALEN)
  1065. __field(u16, tid)
  1066. ),
  1067. TP_fast_assign(
  1068. VIF_ASSIGN;
  1069. memcpy(__entry->ra, ra, ETH_ALEN);
  1070. __entry->tid = tid;
  1071. ),
  1072. TP_printk(
  1073. VIF_PR_FMT " ra:%pM tid:%d",
  1074. VIF_PR_ARG, __entry->ra, __entry->tid
  1075. )
  1076. );
  1077. TRACE_EVENT(api_stop_tx_ba_session,
  1078. TP_PROTO(struct ieee80211_sta *sta, u16 tid),
  1079. TP_ARGS(sta, tid),
  1080. TP_STRUCT__entry(
  1081. STA_ENTRY
  1082. __field(u16, tid)
  1083. ),
  1084. TP_fast_assign(
  1085. STA_ASSIGN;
  1086. __entry->tid = tid;
  1087. ),
  1088. TP_printk(
  1089. STA_PR_FMT " tid:%d",
  1090. STA_PR_ARG, __entry->tid
  1091. )
  1092. );
  1093. TRACE_EVENT(api_stop_tx_ba_cb,
  1094. TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
  1095. TP_ARGS(sdata, ra, tid),
  1096. TP_STRUCT__entry(
  1097. VIF_ENTRY
  1098. __array(u8, ra, ETH_ALEN)
  1099. __field(u16, tid)
  1100. ),
  1101. TP_fast_assign(
  1102. VIF_ASSIGN;
  1103. memcpy(__entry->ra, ra, ETH_ALEN);
  1104. __entry->tid = tid;
  1105. ),
  1106. TP_printk(
  1107. VIF_PR_FMT " ra:%pM tid:%d",
  1108. VIF_PR_ARG, __entry->ra, __entry->tid
  1109. )
  1110. );
  1111. DEFINE_EVENT(local_only_evt, api_restart_hw,
  1112. TP_PROTO(struct ieee80211_local *local),
  1113. TP_ARGS(local)
  1114. );
  1115. TRACE_EVENT(api_beacon_loss,
  1116. TP_PROTO(struct ieee80211_sub_if_data *sdata),
  1117. TP_ARGS(sdata),
  1118. TP_STRUCT__entry(
  1119. VIF_ENTRY
  1120. ),
  1121. TP_fast_assign(
  1122. VIF_ASSIGN;
  1123. ),
  1124. TP_printk(
  1125. VIF_PR_FMT,
  1126. VIF_PR_ARG
  1127. )
  1128. );
  1129. TRACE_EVENT(api_connection_loss,
  1130. TP_PROTO(struct ieee80211_sub_if_data *sdata),
  1131. TP_ARGS(sdata),
  1132. TP_STRUCT__entry(
  1133. VIF_ENTRY
  1134. ),
  1135. TP_fast_assign(
  1136. VIF_ASSIGN;
  1137. ),
  1138. TP_printk(
  1139. VIF_PR_FMT,
  1140. VIF_PR_ARG
  1141. )
  1142. );
  1143. TRACE_EVENT(api_cqm_rssi_notify,
  1144. TP_PROTO(struct ieee80211_sub_if_data *sdata,
  1145. enum nl80211_cqm_rssi_threshold_event rssi_event),
  1146. TP_ARGS(sdata, rssi_event),
  1147. TP_STRUCT__entry(
  1148. VIF_ENTRY
  1149. __field(u32, rssi_event)
  1150. ),
  1151. TP_fast_assign(
  1152. VIF_ASSIGN;
  1153. __entry->rssi_event = rssi_event;
  1154. ),
  1155. TP_printk(
  1156. VIF_PR_FMT " event:%d",
  1157. VIF_PR_ARG, __entry->rssi_event
  1158. )
  1159. );
  1160. TRACE_EVENT(api_scan_completed,
  1161. TP_PROTO(struct ieee80211_local *local, bool aborted),
  1162. TP_ARGS(local, aborted),
  1163. TP_STRUCT__entry(
  1164. LOCAL_ENTRY
  1165. __field(bool, aborted)
  1166. ),
  1167. TP_fast_assign(
  1168. LOCAL_ASSIGN;
  1169. __entry->aborted = aborted;
  1170. ),
  1171. TP_printk(
  1172. LOCAL_PR_FMT " aborted:%d",
  1173. LOCAL_PR_ARG, __entry->aborted
  1174. )
  1175. );
  1176. TRACE_EVENT(api_sched_scan_results,
  1177. TP_PROTO(struct ieee80211_local *local),
  1178. TP_ARGS(local),
  1179. TP_STRUCT__entry(
  1180. LOCAL_ENTRY
  1181. ),
  1182. TP_fast_assign(
  1183. LOCAL_ASSIGN;
  1184. ),
  1185. TP_printk(
  1186. LOCAL_PR_FMT, LOCAL_PR_ARG
  1187. )
  1188. );
  1189. TRACE_EVENT(api_sched_scan_stopped,
  1190. TP_PROTO(struct ieee80211_local *local),
  1191. TP_ARGS(local),
  1192. TP_STRUCT__entry(
  1193. LOCAL_ENTRY
  1194. ),
  1195. TP_fast_assign(
  1196. LOCAL_ASSIGN;
  1197. ),
  1198. TP_printk(
  1199. LOCAL_PR_FMT, LOCAL_PR_ARG
  1200. )
  1201. );
  1202. TRACE_EVENT(api_sta_block_awake,
  1203. TP_PROTO(struct ieee80211_local *local,
  1204. struct ieee80211_sta *sta, bool block),
  1205. TP_ARGS(local, sta, block),
  1206. TP_STRUCT__entry(
  1207. LOCAL_ENTRY
  1208. STA_ENTRY
  1209. __field(bool, block)
  1210. ),
  1211. TP_fast_assign(
  1212. LOCAL_ASSIGN;
  1213. STA_ASSIGN;
  1214. __entry->block = block;
  1215. ),
  1216. TP_printk(
  1217. LOCAL_PR_FMT STA_PR_FMT " block:%d",
  1218. LOCAL_PR_ARG, STA_PR_FMT, __entry->block
  1219. )
  1220. );
  1221. TRACE_EVENT(api_chswitch_done,
  1222. TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
  1223. TP_ARGS(sdata, success),
  1224. TP_STRUCT__entry(
  1225. VIF_ENTRY
  1226. __field(bool, success)
  1227. ),
  1228. TP_fast_assign(
  1229. VIF_ASSIGN;
  1230. __entry->success = success;
  1231. ),
  1232. TP_printk(
  1233. VIF_PR_FMT " success=%d",
  1234. VIF_PR_ARG, __entry->success
  1235. )
  1236. );
  1237. DEFINE_EVENT(local_only_evt, api_ready_on_channel,
  1238. TP_PROTO(struct ieee80211_local *local),
  1239. TP_ARGS(local)
  1240. );
  1241. DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired,
  1242. TP_PROTO(struct ieee80211_local *local),
  1243. TP_ARGS(local)
  1244. );
  1245. TRACE_EVENT(api_gtk_rekey_notify,
  1246. TP_PROTO(struct ieee80211_sub_if_data *sdata,
  1247. const u8 *bssid, const u8 *replay_ctr),
  1248. TP_ARGS(sdata, bssid, replay_ctr),
  1249. TP_STRUCT__entry(
  1250. VIF_ENTRY
  1251. __array(u8, bssid, ETH_ALEN)
  1252. __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
  1253. ),
  1254. TP_fast_assign(
  1255. VIF_ASSIGN;
  1256. memcpy(__entry->bssid, bssid, ETH_ALEN);
  1257. memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN);
  1258. ),
  1259. TP_printk(VIF_PR_FMT, VIF_PR_ARG)
  1260. );
  1261. TRACE_EVENT(api_enable_rssi_reports,
  1262. TP_PROTO(struct ieee80211_sub_if_data *sdata,
  1263. int rssi_min_thold, int rssi_max_thold),
  1264. TP_ARGS(sdata, rssi_min_thold, rssi_max_thold),
  1265. TP_STRUCT__entry(
  1266. VIF_ENTRY
  1267. __field(int, rssi_min_thold)
  1268. __field(int, rssi_max_thold)
  1269. ),
  1270. TP_fast_assign(
  1271. VIF_ASSIGN;
  1272. __entry->rssi_min_thold = rssi_min_thold;
  1273. __entry->rssi_max_thold = rssi_max_thold;
  1274. ),
  1275. TP_printk(
  1276. VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d",
  1277. VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold
  1278. )
  1279. );
  1280. TRACE_EVENT(api_eosp,
  1281. TP_PROTO(struct ieee80211_local *local,
  1282. struct ieee80211_sta *sta),
  1283. TP_ARGS(local, sta),
  1284. TP_STRUCT__entry(
  1285. LOCAL_ENTRY
  1286. STA_ENTRY
  1287. ),
  1288. TP_fast_assign(
  1289. LOCAL_ASSIGN;
  1290. STA_ASSIGN;
  1291. ),
  1292. TP_printk(
  1293. LOCAL_PR_FMT STA_PR_FMT,
  1294. LOCAL_PR_ARG, STA_PR_FMT
  1295. )
  1296. );
  1297. /*
  1298. * Tracing for internal functions
  1299. * (which may also be called in response to driver calls)
  1300. */
  1301. TRACE_EVENT(wake_queue,
  1302. TP_PROTO(struct ieee80211_local *local, u16 queue,
  1303. enum queue_stop_reason reason),
  1304. TP_ARGS(local, queue, reason),
  1305. TP_STRUCT__entry(
  1306. LOCAL_ENTRY
  1307. __field(u16, queue)
  1308. __field(u32, reason)
  1309. ),
  1310. TP_fast_assign(
  1311. LOCAL_ASSIGN;
  1312. __entry->queue = queue;
  1313. __entry->reason = reason;
  1314. ),
  1315. TP_printk(
  1316. LOCAL_PR_FMT " queue:%d, reason:%d",
  1317. LOCAL_PR_ARG, __entry->queue, __entry->reason
  1318. )
  1319. );
  1320. TRACE_EVENT(stop_queue,
  1321. TP_PROTO(struct ieee80211_local *local, u16 queue,
  1322. enum queue_stop_reason reason),
  1323. TP_ARGS(local, queue, reason),
  1324. TP_STRUCT__entry(
  1325. LOCAL_ENTRY
  1326. __field(u16, queue)
  1327. __field(u32, reason)
  1328. ),
  1329. TP_fast_assign(
  1330. LOCAL_ASSIGN;
  1331. __entry->queue = queue;
  1332. __entry->reason = reason;
  1333. ),
  1334. TP_printk(
  1335. LOCAL_PR_FMT " queue:%d, reason:%d",
  1336. LOCAL_PR_ARG, __entry->queue, __entry->reason
  1337. )
  1338. );
  1339. #ifdef CONFIG_MAC80211_MESSAGE_TRACING
  1340. #undef TRACE_SYSTEM
  1341. #define TRACE_SYSTEM mac80211_msg
  1342. #define MAX_MSG_LEN 100
  1343. DECLARE_EVENT_CLASS(mac80211_msg_event,
  1344. TP_PROTO(struct va_format *vaf),
  1345. TP_ARGS(vaf),
  1346. TP_STRUCT__entry(
  1347. __dynamic_array(char, msg, MAX_MSG_LEN)
  1348. ),
  1349. TP_fast_assign(
  1350. WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
  1351. MAX_MSG_LEN, vaf->fmt,
  1352. *vaf->va) >= MAX_MSG_LEN);
  1353. ),
  1354. TP_printk("%s", __get_str(msg))
  1355. );
  1356. DEFINE_EVENT(mac80211_msg_event, mac80211_info,
  1357. TP_PROTO(struct va_format *vaf),
  1358. TP_ARGS(vaf)
  1359. );
  1360. DEFINE_EVENT(mac80211_msg_event, mac80211_dbg,
  1361. TP_PROTO(struct va_format *vaf),
  1362. TP_ARGS(vaf)
  1363. );
  1364. DEFINE_EVENT(mac80211_msg_event, mac80211_err,
  1365. TP_PROTO(struct va_format *vaf),
  1366. TP_ARGS(vaf)
  1367. );
  1368. #endif
  1369. #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
  1370. #undef TRACE_INCLUDE_PATH
  1371. #define TRACE_INCLUDE_PATH .
  1372. #undef TRACE_INCLUDE_FILE
  1373. #define TRACE_INCLUDE_FILE trace
  1374. #include <trace/define_trace.h>