trace.h 33 KB

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