trace.h 73 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665
  1. #undef TRACE_SYSTEM
  2. #define TRACE_SYSTEM cfg80211
  3. #if !defined(__RDEV_OPS_TRACE) || defined(TRACE_HEADER_MULTI_READ)
  4. #define __RDEV_OPS_TRACE
  5. #include <linux/tracepoint.h>
  6. #include <linux/rtnetlink.h>
  7. #include <net/cfg80211.h>
  8. #include "core.h"
  9. #define MAC_ENTRY(entry_mac) __array(u8, entry_mac, ETH_ALEN)
  10. #define MAC_ASSIGN(entry_mac, given_mac) do { \
  11. if (given_mac) \
  12. memcpy(__entry->entry_mac, given_mac, ETH_ALEN); \
  13. else \
  14. memset(__entry->entry_mac, 0, ETH_ALEN); \
  15. } while (0)
  16. #define MAC_PR_FMT "%pM"
  17. #define MAC_PR_ARG(entry_mac) (__entry->entry_mac)
  18. #define MAXNAME 32
  19. #define WIPHY_ENTRY __array(char, wiphy_name, 32)
  20. #define WIPHY_ASSIGN strlcpy(__entry->wiphy_name, wiphy_name(wiphy), MAXNAME)
  21. #define WIPHY_PR_FMT "%s"
  22. #define WIPHY_PR_ARG __entry->wiphy_name
  23. #define WDEV_ENTRY __field(u32, id)
  24. #define WDEV_ASSIGN (__entry->id) = (!IS_ERR_OR_NULL(wdev) \
  25. ? wdev->identifier : 0)
  26. #define WDEV_PR_FMT "wdev(%u)"
  27. #define WDEV_PR_ARG (__entry->id)
  28. #define NETDEV_ENTRY __array(char, name, IFNAMSIZ) \
  29. __field(int, ifindex)
  30. #define NETDEV_ASSIGN \
  31. do { \
  32. memcpy(__entry->name, netdev->name, IFNAMSIZ); \
  33. (__entry->ifindex) = (netdev->ifindex); \
  34. } while (0)
  35. #define NETDEV_PR_FMT "netdev:%s(%d)"
  36. #define NETDEV_PR_ARG __entry->name, __entry->ifindex
  37. #define MESH_CFG_ENTRY __field(u16, dot11MeshRetryTimeout) \
  38. __field(u16, dot11MeshConfirmTimeout) \
  39. __field(u16, dot11MeshHoldingTimeout) \
  40. __field(u16, dot11MeshMaxPeerLinks) \
  41. __field(u8, dot11MeshMaxRetries) \
  42. __field(u8, dot11MeshTTL) \
  43. __field(u8, element_ttl) \
  44. __field(bool, auto_open_plinks) \
  45. __field(u32, dot11MeshNbrOffsetMaxNeighbor) \
  46. __field(u8, dot11MeshHWMPmaxPREQretries) \
  47. __field(u32, path_refresh_time) \
  48. __field(u32, dot11MeshHWMPactivePathTimeout) \
  49. __field(u16, min_discovery_timeout) \
  50. __field(u16, dot11MeshHWMPpreqMinInterval) \
  51. __field(u16, dot11MeshHWMPperrMinInterval) \
  52. __field(u16, dot11MeshHWMPnetDiameterTraversalTime) \
  53. __field(u8, dot11MeshHWMPRootMode) \
  54. __field(u16, dot11MeshHWMPRannInterval) \
  55. __field(bool, dot11MeshGateAnnouncementProtocol) \
  56. __field(bool, dot11MeshForwarding) \
  57. __field(s32, rssi_threshold) \
  58. __field(u16, ht_opmode) \
  59. __field(u32, dot11MeshHWMPactivePathToRootTimeout) \
  60. __field(u16, dot11MeshHWMProotInterval) \
  61. __field(u16, dot11MeshHWMPconfirmationInterval)
  62. #define MESH_CFG_ASSIGN \
  63. do { \
  64. __entry->dot11MeshRetryTimeout = conf->dot11MeshRetryTimeout; \
  65. __entry->dot11MeshConfirmTimeout = \
  66. conf->dot11MeshConfirmTimeout; \
  67. __entry->dot11MeshHoldingTimeout = \
  68. conf->dot11MeshHoldingTimeout; \
  69. __entry->dot11MeshMaxPeerLinks = conf->dot11MeshMaxPeerLinks; \
  70. __entry->dot11MeshMaxRetries = conf->dot11MeshMaxRetries; \
  71. __entry->dot11MeshTTL = conf->dot11MeshTTL; \
  72. __entry->element_ttl = conf->element_ttl; \
  73. __entry->auto_open_plinks = conf->auto_open_plinks; \
  74. __entry->dot11MeshNbrOffsetMaxNeighbor = \
  75. conf->dot11MeshNbrOffsetMaxNeighbor; \
  76. __entry->dot11MeshHWMPmaxPREQretries = \
  77. conf->dot11MeshHWMPmaxPREQretries; \
  78. __entry->path_refresh_time = conf->path_refresh_time; \
  79. __entry->dot11MeshHWMPactivePathTimeout = \
  80. conf->dot11MeshHWMPactivePathTimeout; \
  81. __entry->min_discovery_timeout = conf->min_discovery_timeout; \
  82. __entry->dot11MeshHWMPpreqMinInterval = \
  83. conf->dot11MeshHWMPpreqMinInterval; \
  84. __entry->dot11MeshHWMPperrMinInterval = \
  85. conf->dot11MeshHWMPperrMinInterval; \
  86. __entry->dot11MeshHWMPnetDiameterTraversalTime = \
  87. conf->dot11MeshHWMPnetDiameterTraversalTime; \
  88. __entry->dot11MeshHWMPRootMode = conf->dot11MeshHWMPRootMode; \
  89. __entry->dot11MeshHWMPRannInterval = \
  90. conf->dot11MeshHWMPRannInterval; \
  91. __entry->dot11MeshGateAnnouncementProtocol = \
  92. conf->dot11MeshGateAnnouncementProtocol; \
  93. __entry->dot11MeshForwarding = conf->dot11MeshForwarding; \
  94. __entry->rssi_threshold = conf->rssi_threshold; \
  95. __entry->ht_opmode = conf->ht_opmode; \
  96. __entry->dot11MeshHWMPactivePathToRootTimeout = \
  97. conf->dot11MeshHWMPactivePathToRootTimeout; \
  98. __entry->dot11MeshHWMProotInterval = \
  99. conf->dot11MeshHWMProotInterval; \
  100. __entry->dot11MeshHWMPconfirmationInterval = \
  101. conf->dot11MeshHWMPconfirmationInterval; \
  102. } while (0)
  103. #define CHAN_ENTRY __field(enum ieee80211_band, band) \
  104. __field(u16, center_freq)
  105. #define CHAN_ASSIGN(chan) \
  106. do { \
  107. if (chan) { \
  108. __entry->band = chan->band; \
  109. __entry->center_freq = chan->center_freq; \
  110. } else { \
  111. __entry->band = 0; \
  112. __entry->center_freq = 0; \
  113. } \
  114. } while (0)
  115. #define CHAN_PR_FMT "band: %d, freq: %u"
  116. #define CHAN_PR_ARG __entry->band, __entry->center_freq
  117. #define CHAN_DEF_ENTRY __field(enum ieee80211_band, band) \
  118. __field(u32, control_freq) \
  119. __field(u32, width) \
  120. __field(u32, center_freq1) \
  121. __field(u32, center_freq2)
  122. #define CHAN_DEF_ASSIGN(chandef) \
  123. do { \
  124. if ((chandef) && (chandef)->chan) { \
  125. __entry->band = (chandef)->chan->band; \
  126. __entry->control_freq = \
  127. (chandef)->chan->center_freq; \
  128. __entry->width = (chandef)->width; \
  129. __entry->center_freq1 = (chandef)->center_freq1;\
  130. __entry->center_freq2 = (chandef)->center_freq2;\
  131. } else { \
  132. __entry->band = 0; \
  133. __entry->control_freq = 0; \
  134. __entry->width = 0; \
  135. __entry->center_freq1 = 0; \
  136. __entry->center_freq2 = 0; \
  137. } \
  138. } while (0)
  139. #define CHAN_DEF_PR_FMT \
  140. "band: %d, control freq: %u, width: %d, cf1: %u, cf2: %u"
  141. #define CHAN_DEF_PR_ARG __entry->band, __entry->control_freq, \
  142. __entry->width, __entry->center_freq1, \
  143. __entry->center_freq2
  144. #define SINFO_ENTRY __field(int, generation) \
  145. __field(u32, connected_time) \
  146. __field(u32, inactive_time) \
  147. __field(u32, rx_bytes) \
  148. __field(u32, tx_bytes) \
  149. __field(u32, rx_packets) \
  150. __field(u32, tx_packets) \
  151. __field(u32, tx_retries) \
  152. __field(u32, tx_failed) \
  153. __field(u32, rx_dropped_misc) \
  154. __field(u32, beacon_loss_count) \
  155. __field(u16, llid) \
  156. __field(u16, plid) \
  157. __field(u8, plink_state)
  158. #define SINFO_ASSIGN \
  159. do { \
  160. __entry->generation = sinfo->generation; \
  161. __entry->connected_time = sinfo->connected_time; \
  162. __entry->inactive_time = sinfo->inactive_time; \
  163. __entry->rx_bytes = sinfo->rx_bytes; \
  164. __entry->tx_bytes = sinfo->tx_bytes; \
  165. __entry->rx_packets = sinfo->rx_packets; \
  166. __entry->tx_packets = sinfo->tx_packets; \
  167. __entry->tx_retries = sinfo->tx_retries; \
  168. __entry->tx_failed = sinfo->tx_failed; \
  169. __entry->rx_dropped_misc = sinfo->rx_dropped_misc; \
  170. __entry->beacon_loss_count = sinfo->beacon_loss_count; \
  171. __entry->llid = sinfo->llid; \
  172. __entry->plid = sinfo->plid; \
  173. __entry->plink_state = sinfo->plink_state; \
  174. } while (0)
  175. #define BOOL_TO_STR(bo) (bo) ? "true" : "false"
  176. #define QOS_MAP_ENTRY __field(u8, num_des) \
  177. __array(u8, dscp_exception, \
  178. 2 * IEEE80211_QOS_MAP_MAX_EX) \
  179. __array(u8, up, IEEE80211_QOS_MAP_LEN_MIN)
  180. #define QOS_MAP_ASSIGN(qos_map) \
  181. do { \
  182. if ((qos_map)) { \
  183. __entry->num_des = (qos_map)->num_des; \
  184. memcpy(__entry->dscp_exception, \
  185. &(qos_map)->dscp_exception, \
  186. 2 * IEEE80211_QOS_MAP_MAX_EX); \
  187. memcpy(__entry->up, &(qos_map)->up, \
  188. IEEE80211_QOS_MAP_LEN_MIN); \
  189. } else { \
  190. __entry->num_des = 0; \
  191. memset(__entry->dscp_exception, 0, \
  192. 2 * IEEE80211_QOS_MAP_MAX_EX); \
  193. memset(__entry->up, 0, \
  194. IEEE80211_QOS_MAP_LEN_MIN); \
  195. } \
  196. } while (0)
  197. /*************************************************************
  198. * rdev->ops traces *
  199. *************************************************************/
  200. TRACE_EVENT(rdev_suspend,
  201. TP_PROTO(struct wiphy *wiphy, struct cfg80211_wowlan *wow),
  202. TP_ARGS(wiphy, wow),
  203. TP_STRUCT__entry(
  204. WIPHY_ENTRY
  205. __field(bool, any)
  206. __field(bool, disconnect)
  207. __field(bool, magic_pkt)
  208. __field(bool, gtk_rekey_failure)
  209. __field(bool, eap_identity_req)
  210. __field(bool, four_way_handshake)
  211. __field(bool, rfkill_release)
  212. __field(bool, valid_wow)
  213. ),
  214. TP_fast_assign(
  215. WIPHY_ASSIGN;
  216. if (wow) {
  217. __entry->any = wow->any;
  218. __entry->disconnect = wow->disconnect;
  219. __entry->magic_pkt = wow->magic_pkt;
  220. __entry->gtk_rekey_failure = wow->gtk_rekey_failure;
  221. __entry->eap_identity_req = wow->eap_identity_req;
  222. __entry->four_way_handshake = wow->four_way_handshake;
  223. __entry->rfkill_release = wow->rfkill_release;
  224. __entry->valid_wow = true;
  225. } else {
  226. __entry->valid_wow = false;
  227. }
  228. ),
  229. TP_printk(WIPHY_PR_FMT ", wow%s - any: %d, disconnect: %d, "
  230. "magic pkt: %d, gtk rekey failure: %d, eap identify req: %d, "
  231. "four way handshake: %d, rfkill release: %d.",
  232. WIPHY_PR_ARG, __entry->valid_wow ? "" : "(Not configured!)",
  233. __entry->any, __entry->disconnect, __entry->magic_pkt,
  234. __entry->gtk_rekey_failure, __entry->eap_identity_req,
  235. __entry->four_way_handshake, __entry->rfkill_release)
  236. );
  237. TRACE_EVENT(rdev_return_int,
  238. TP_PROTO(struct wiphy *wiphy, int ret),
  239. TP_ARGS(wiphy, ret),
  240. TP_STRUCT__entry(
  241. WIPHY_ENTRY
  242. __field(int, ret)
  243. ),
  244. TP_fast_assign(
  245. WIPHY_ASSIGN;
  246. __entry->ret = ret;
  247. ),
  248. TP_printk(WIPHY_PR_FMT ", returned: %d", WIPHY_PR_ARG, __entry->ret)
  249. );
  250. TRACE_EVENT(rdev_scan,
  251. TP_PROTO(struct wiphy *wiphy, struct cfg80211_scan_request *request),
  252. TP_ARGS(wiphy, request),
  253. TP_STRUCT__entry(
  254. WIPHY_ENTRY
  255. ),
  256. TP_fast_assign(
  257. WIPHY_ASSIGN;
  258. ),
  259. TP_printk(WIPHY_PR_FMT, WIPHY_PR_ARG)
  260. );
  261. DECLARE_EVENT_CLASS(wiphy_only_evt,
  262. TP_PROTO(struct wiphy *wiphy),
  263. TP_ARGS(wiphy),
  264. TP_STRUCT__entry(
  265. WIPHY_ENTRY
  266. ),
  267. TP_fast_assign(
  268. WIPHY_ASSIGN;
  269. ),
  270. TP_printk(WIPHY_PR_FMT, WIPHY_PR_ARG)
  271. );
  272. DEFINE_EVENT(wiphy_only_evt, rdev_resume,
  273. TP_PROTO(struct wiphy *wiphy),
  274. TP_ARGS(wiphy)
  275. );
  276. DEFINE_EVENT(wiphy_only_evt, rdev_return_void,
  277. TP_PROTO(struct wiphy *wiphy),
  278. TP_ARGS(wiphy)
  279. );
  280. DEFINE_EVENT(wiphy_only_evt, rdev_get_antenna,
  281. TP_PROTO(struct wiphy *wiphy),
  282. TP_ARGS(wiphy)
  283. );
  284. DEFINE_EVENT(wiphy_only_evt, rdev_rfkill_poll,
  285. TP_PROTO(struct wiphy *wiphy),
  286. TP_ARGS(wiphy)
  287. );
  288. DECLARE_EVENT_CLASS(wiphy_enabled_evt,
  289. TP_PROTO(struct wiphy *wiphy, bool enabled),
  290. TP_ARGS(wiphy, enabled),
  291. TP_STRUCT__entry(
  292. WIPHY_ENTRY
  293. __field(bool, enabled)
  294. ),
  295. TP_fast_assign(
  296. WIPHY_ASSIGN;
  297. __entry->enabled = enabled;
  298. ),
  299. TP_printk(WIPHY_PR_FMT ", %senabled ",
  300. WIPHY_PR_ARG, __entry->enabled ? "" : "not ")
  301. );
  302. DEFINE_EVENT(wiphy_enabled_evt, rdev_set_wakeup,
  303. TP_PROTO(struct wiphy *wiphy, bool enabled),
  304. TP_ARGS(wiphy, enabled)
  305. );
  306. TRACE_EVENT(rdev_add_virtual_intf,
  307. TP_PROTO(struct wiphy *wiphy, char *name, enum nl80211_iftype type),
  308. TP_ARGS(wiphy, name, type),
  309. TP_STRUCT__entry(
  310. WIPHY_ENTRY
  311. __string(vir_intf_name, name ? name : "<noname>")
  312. __field(enum nl80211_iftype, type)
  313. ),
  314. TP_fast_assign(
  315. WIPHY_ASSIGN;
  316. __assign_str(vir_intf_name, name ? name : "<noname>");
  317. __entry->type = type;
  318. ),
  319. TP_printk(WIPHY_PR_FMT ", virtual intf name: %s, type: %d",
  320. WIPHY_PR_ARG, __get_str(vir_intf_name), __entry->type)
  321. );
  322. DECLARE_EVENT_CLASS(wiphy_wdev_evt,
  323. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  324. TP_ARGS(wiphy, wdev),
  325. TP_STRUCT__entry(
  326. WIPHY_ENTRY
  327. WDEV_ENTRY
  328. ),
  329. TP_fast_assign(
  330. WIPHY_ASSIGN;
  331. WDEV_ASSIGN;
  332. ),
  333. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT, WIPHY_PR_ARG, WDEV_PR_ARG)
  334. );
  335. DEFINE_EVENT(wiphy_wdev_evt, rdev_return_wdev,
  336. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  337. TP_ARGS(wiphy, wdev)
  338. );
  339. DEFINE_EVENT(wiphy_wdev_evt, rdev_del_virtual_intf,
  340. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  341. TP_ARGS(wiphy, wdev)
  342. );
  343. TRACE_EVENT(rdev_change_virtual_intf,
  344. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  345. enum nl80211_iftype type),
  346. TP_ARGS(wiphy, netdev, type),
  347. TP_STRUCT__entry(
  348. WIPHY_ENTRY
  349. NETDEV_ENTRY
  350. __field(enum nl80211_iftype, type)
  351. ),
  352. TP_fast_assign(
  353. WIPHY_ASSIGN;
  354. NETDEV_ASSIGN;
  355. __entry->type = type;
  356. ),
  357. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", type: %d",
  358. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->type)
  359. );
  360. DECLARE_EVENT_CLASS(key_handle,
  361. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
  362. bool pairwise, const u8 *mac_addr),
  363. TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr),
  364. TP_STRUCT__entry(
  365. WIPHY_ENTRY
  366. NETDEV_ENTRY
  367. MAC_ENTRY(mac_addr)
  368. __field(u8, key_index)
  369. __field(bool, pairwise)
  370. ),
  371. TP_fast_assign(
  372. WIPHY_ASSIGN;
  373. NETDEV_ASSIGN;
  374. MAC_ASSIGN(mac_addr, mac_addr);
  375. __entry->key_index = key_index;
  376. __entry->pairwise = pairwise;
  377. ),
  378. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key_index: %u, pairwise: %s, mac addr: " MAC_PR_FMT,
  379. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index,
  380. BOOL_TO_STR(__entry->pairwise), MAC_PR_ARG(mac_addr))
  381. );
  382. DEFINE_EVENT(key_handle, rdev_add_key,
  383. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
  384. bool pairwise, const u8 *mac_addr),
  385. TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr)
  386. );
  387. DEFINE_EVENT(key_handle, rdev_get_key,
  388. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
  389. bool pairwise, const u8 *mac_addr),
  390. TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr)
  391. );
  392. DEFINE_EVENT(key_handle, rdev_del_key,
  393. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
  394. bool pairwise, const u8 *mac_addr),
  395. TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr)
  396. );
  397. TRACE_EVENT(rdev_set_default_key,
  398. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
  399. bool unicast, bool multicast),
  400. TP_ARGS(wiphy, netdev, key_index, unicast, multicast),
  401. TP_STRUCT__entry(
  402. WIPHY_ENTRY
  403. NETDEV_ENTRY
  404. __field(u8, key_index)
  405. __field(bool, unicast)
  406. __field(bool, multicast)
  407. ),
  408. TP_fast_assign(
  409. WIPHY_ASSIGN;
  410. NETDEV_ASSIGN;
  411. __entry->key_index = key_index;
  412. __entry->unicast = unicast;
  413. __entry->multicast = multicast;
  414. ),
  415. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key index: %u, unicast: %s, multicast: %s",
  416. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index,
  417. BOOL_TO_STR(__entry->unicast),
  418. BOOL_TO_STR(__entry->multicast))
  419. );
  420. TRACE_EVENT(rdev_set_default_mgmt_key,
  421. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index),
  422. TP_ARGS(wiphy, netdev, key_index),
  423. TP_STRUCT__entry(
  424. WIPHY_ENTRY
  425. NETDEV_ENTRY
  426. __field(u8, key_index)
  427. ),
  428. TP_fast_assign(
  429. WIPHY_ASSIGN;
  430. NETDEV_ASSIGN;
  431. __entry->key_index = key_index;
  432. ),
  433. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key index: %u",
  434. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index)
  435. );
  436. TRACE_EVENT(rdev_start_ap,
  437. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  438. struct cfg80211_ap_settings *settings),
  439. TP_ARGS(wiphy, netdev, settings),
  440. TP_STRUCT__entry(
  441. WIPHY_ENTRY
  442. NETDEV_ENTRY
  443. CHAN_DEF_ENTRY
  444. __field(int, beacon_interval)
  445. __field(int, dtim_period)
  446. __array(char, ssid, IEEE80211_MAX_SSID_LEN + 1)
  447. __field(enum nl80211_hidden_ssid, hidden_ssid)
  448. __field(u32, wpa_ver)
  449. __field(bool, privacy)
  450. __field(enum nl80211_auth_type, auth_type)
  451. __field(int, inactivity_timeout)
  452. ),
  453. TP_fast_assign(
  454. WIPHY_ASSIGN;
  455. NETDEV_ASSIGN;
  456. CHAN_DEF_ASSIGN(&settings->chandef);
  457. __entry->beacon_interval = settings->beacon_interval;
  458. __entry->dtim_period = settings->dtim_period;
  459. __entry->hidden_ssid = settings->hidden_ssid;
  460. __entry->wpa_ver = settings->crypto.wpa_versions;
  461. __entry->privacy = settings->privacy;
  462. __entry->auth_type = settings->auth_type;
  463. __entry->inactivity_timeout = settings->inactivity_timeout;
  464. memset(__entry->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
  465. memcpy(__entry->ssid, settings->ssid, settings->ssid_len);
  466. ),
  467. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", AP settings - ssid: %s, "
  468. CHAN_DEF_PR_FMT ", beacon interval: %d, dtim period: %d, "
  469. "hidden ssid: %d, wpa versions: %u, privacy: %s, "
  470. "auth type: %d, inactivity timeout: %d",
  471. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->ssid, CHAN_DEF_PR_ARG,
  472. __entry->beacon_interval, __entry->dtim_period,
  473. __entry->hidden_ssid, __entry->wpa_ver,
  474. BOOL_TO_STR(__entry->privacy), __entry->auth_type,
  475. __entry->inactivity_timeout)
  476. );
  477. TRACE_EVENT(rdev_change_beacon,
  478. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  479. struct cfg80211_beacon_data *info),
  480. TP_ARGS(wiphy, netdev, info),
  481. TP_STRUCT__entry(
  482. WIPHY_ENTRY
  483. NETDEV_ENTRY
  484. __dynamic_array(u8, head, info ? info->head_len : 0)
  485. __dynamic_array(u8, tail, info ? info->tail_len : 0)
  486. __dynamic_array(u8, beacon_ies, info ? info->beacon_ies_len : 0)
  487. __dynamic_array(u8, proberesp_ies,
  488. info ? info->proberesp_ies_len : 0)
  489. __dynamic_array(u8, assocresp_ies,
  490. info ? info->assocresp_ies_len : 0)
  491. __dynamic_array(u8, probe_resp, info ? info->probe_resp_len : 0)
  492. ),
  493. TP_fast_assign(
  494. WIPHY_ASSIGN;
  495. NETDEV_ASSIGN;
  496. if (info) {
  497. if (info->head)
  498. memcpy(__get_dynamic_array(head), info->head,
  499. info->head_len);
  500. if (info->tail)
  501. memcpy(__get_dynamic_array(tail), info->tail,
  502. info->tail_len);
  503. if (info->beacon_ies)
  504. memcpy(__get_dynamic_array(beacon_ies),
  505. info->beacon_ies, info->beacon_ies_len);
  506. if (info->proberesp_ies)
  507. memcpy(__get_dynamic_array(proberesp_ies),
  508. info->proberesp_ies,
  509. info->proberesp_ies_len);
  510. if (info->assocresp_ies)
  511. memcpy(__get_dynamic_array(assocresp_ies),
  512. info->assocresp_ies,
  513. info->assocresp_ies_len);
  514. if (info->probe_resp)
  515. memcpy(__get_dynamic_array(probe_resp),
  516. info->probe_resp, info->probe_resp_len);
  517. }
  518. ),
  519. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT, WIPHY_PR_ARG, NETDEV_PR_ARG)
  520. );
  521. DECLARE_EVENT_CLASS(wiphy_netdev_evt,
  522. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
  523. TP_ARGS(wiphy, netdev),
  524. TP_STRUCT__entry(
  525. WIPHY_ENTRY
  526. NETDEV_ENTRY
  527. ),
  528. TP_fast_assign(
  529. WIPHY_ASSIGN;
  530. NETDEV_ASSIGN;
  531. ),
  532. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT, WIPHY_PR_ARG, NETDEV_PR_ARG)
  533. );
  534. DEFINE_EVENT(wiphy_netdev_evt, rdev_stop_ap,
  535. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
  536. TP_ARGS(wiphy, netdev)
  537. );
  538. DEFINE_EVENT(wiphy_netdev_evt, rdev_sched_scan_stop,
  539. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
  540. TP_ARGS(wiphy, netdev)
  541. );
  542. DEFINE_EVENT(wiphy_netdev_evt, rdev_set_rekey_data,
  543. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
  544. TP_ARGS(wiphy, netdev)
  545. );
  546. DEFINE_EVENT(wiphy_netdev_evt, rdev_get_mesh_config,
  547. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
  548. TP_ARGS(wiphy, netdev)
  549. );
  550. DEFINE_EVENT(wiphy_netdev_evt, rdev_leave_mesh,
  551. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
  552. TP_ARGS(wiphy, netdev)
  553. );
  554. DEFINE_EVENT(wiphy_netdev_evt, rdev_leave_ibss,
  555. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
  556. TP_ARGS(wiphy, netdev)
  557. );
  558. DEFINE_EVENT(wiphy_netdev_evt, rdev_flush_pmksa,
  559. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev),
  560. TP_ARGS(wiphy, netdev)
  561. );
  562. DECLARE_EVENT_CLASS(station_add_change,
  563. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 *mac,
  564. struct station_parameters *params),
  565. TP_ARGS(wiphy, netdev, mac, params),
  566. TP_STRUCT__entry(
  567. WIPHY_ENTRY
  568. NETDEV_ENTRY
  569. MAC_ENTRY(sta_mac)
  570. __field(u32, sta_flags_mask)
  571. __field(u32, sta_flags_set)
  572. __field(u32, sta_modify_mask)
  573. __field(int, listen_interval)
  574. __field(u16, aid)
  575. __field(u8, plink_action)
  576. __field(u8, plink_state)
  577. __field(u8, uapsd_queues)
  578. __array(u8, ht_capa, (int)sizeof(struct ieee80211_ht_cap))
  579. ),
  580. TP_fast_assign(
  581. WIPHY_ASSIGN;
  582. NETDEV_ASSIGN;
  583. MAC_ASSIGN(sta_mac, mac);
  584. __entry->sta_flags_mask = params->sta_flags_mask;
  585. __entry->sta_flags_set = params->sta_flags_set;
  586. __entry->sta_modify_mask = params->sta_modify_mask;
  587. __entry->listen_interval = params->listen_interval;
  588. __entry->aid = params->aid;
  589. __entry->plink_action = params->plink_action;
  590. __entry->plink_state = params->plink_state;
  591. __entry->uapsd_queues = params->uapsd_queues;
  592. memset(__entry->ht_capa, 0, sizeof(struct ieee80211_ht_cap));
  593. if (params->ht_capa)
  594. memcpy(__entry->ht_capa, params->ht_capa,
  595. sizeof(struct ieee80211_ht_cap));
  596. ),
  597. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", station mac: " MAC_PR_FMT
  598. ", station flags mask: %u, station flags set: %u, "
  599. "station modify mask: %u, listen interval: %d, aid: %u, "
  600. "plink action: %u, plink state: %u, uapsd queues: %u",
  601. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(sta_mac),
  602. __entry->sta_flags_mask, __entry->sta_flags_set,
  603. __entry->sta_modify_mask, __entry->listen_interval,
  604. __entry->aid, __entry->plink_action, __entry->plink_state,
  605. __entry->uapsd_queues)
  606. );
  607. DEFINE_EVENT(station_add_change, rdev_add_station,
  608. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 *mac,
  609. struct station_parameters *params),
  610. TP_ARGS(wiphy, netdev, mac, params)
  611. );
  612. DEFINE_EVENT(station_add_change, rdev_change_station,
  613. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 *mac,
  614. struct station_parameters *params),
  615. TP_ARGS(wiphy, netdev, mac, params)
  616. );
  617. DECLARE_EVENT_CLASS(wiphy_netdev_mac_evt,
  618. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, const u8 *mac),
  619. TP_ARGS(wiphy, netdev, mac),
  620. TP_STRUCT__entry(
  621. WIPHY_ENTRY
  622. NETDEV_ENTRY
  623. MAC_ENTRY(sta_mac)
  624. ),
  625. TP_fast_assign(
  626. WIPHY_ASSIGN;
  627. NETDEV_ASSIGN;
  628. MAC_ASSIGN(sta_mac, mac);
  629. ),
  630. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", mac: " MAC_PR_FMT,
  631. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(sta_mac))
  632. );
  633. DEFINE_EVENT(wiphy_netdev_mac_evt, rdev_del_station,
  634. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, const u8 *mac),
  635. TP_ARGS(wiphy, netdev, mac)
  636. );
  637. DEFINE_EVENT(wiphy_netdev_mac_evt, rdev_get_station,
  638. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, const u8 *mac),
  639. TP_ARGS(wiphy, netdev, mac)
  640. );
  641. DEFINE_EVENT(wiphy_netdev_mac_evt, rdev_del_mpath,
  642. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, const u8 *mac),
  643. TP_ARGS(wiphy, netdev, mac)
  644. );
  645. DEFINE_EVENT(wiphy_netdev_mac_evt, rdev_set_wds_peer,
  646. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, const u8 *mac),
  647. TP_ARGS(wiphy, netdev, mac)
  648. );
  649. TRACE_EVENT(rdev_dump_station,
  650. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, int idx,
  651. u8 *mac),
  652. TP_ARGS(wiphy, netdev, idx, mac),
  653. TP_STRUCT__entry(
  654. WIPHY_ENTRY
  655. NETDEV_ENTRY
  656. MAC_ENTRY(sta_mac)
  657. __field(int, idx)
  658. ),
  659. TP_fast_assign(
  660. WIPHY_ASSIGN;
  661. NETDEV_ASSIGN;
  662. MAC_ASSIGN(sta_mac, mac);
  663. __entry->idx = idx;
  664. ),
  665. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", station mac: " MAC_PR_FMT ", idx: %d",
  666. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(sta_mac),
  667. __entry->idx)
  668. );
  669. TRACE_EVENT(rdev_return_int_station_info,
  670. TP_PROTO(struct wiphy *wiphy, int ret, struct station_info *sinfo),
  671. TP_ARGS(wiphy, ret, sinfo),
  672. TP_STRUCT__entry(
  673. WIPHY_ENTRY
  674. __field(int, ret)
  675. SINFO_ENTRY
  676. ),
  677. TP_fast_assign(
  678. WIPHY_ASSIGN;
  679. __entry->ret = ret;
  680. SINFO_ASSIGN;
  681. ),
  682. TP_printk(WIPHY_PR_FMT ", returned %d" ,
  683. WIPHY_PR_ARG, __entry->ret)
  684. );
  685. DECLARE_EVENT_CLASS(mpath_evt,
  686. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 *dst,
  687. u8 *next_hop),
  688. TP_ARGS(wiphy, netdev, dst, next_hop),
  689. TP_STRUCT__entry(
  690. WIPHY_ENTRY
  691. NETDEV_ENTRY
  692. MAC_ENTRY(dst)
  693. MAC_ENTRY(next_hop)
  694. ),
  695. TP_fast_assign(
  696. WIPHY_ASSIGN;
  697. NETDEV_ASSIGN;
  698. MAC_ASSIGN(dst, dst);
  699. MAC_ASSIGN(next_hop, next_hop);
  700. ),
  701. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", destination: " MAC_PR_FMT ", next hop: " MAC_PR_FMT,
  702. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(dst),
  703. MAC_PR_ARG(next_hop))
  704. );
  705. DEFINE_EVENT(mpath_evt, rdev_add_mpath,
  706. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 *dst,
  707. u8 *next_hop),
  708. TP_ARGS(wiphy, netdev, dst, next_hop)
  709. );
  710. DEFINE_EVENT(mpath_evt, rdev_change_mpath,
  711. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 *dst,
  712. u8 *next_hop),
  713. TP_ARGS(wiphy, netdev, dst, next_hop)
  714. );
  715. DEFINE_EVENT(mpath_evt, rdev_get_mpath,
  716. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 *dst,
  717. u8 *next_hop),
  718. TP_ARGS(wiphy, netdev, dst, next_hop)
  719. );
  720. TRACE_EVENT(rdev_dump_mpath,
  721. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, int idx,
  722. u8 *dst, u8 *next_hop),
  723. TP_ARGS(wiphy, netdev, idx, dst, next_hop),
  724. TP_STRUCT__entry(
  725. WIPHY_ENTRY
  726. NETDEV_ENTRY
  727. MAC_ENTRY(dst)
  728. MAC_ENTRY(next_hop)
  729. __field(int, idx)
  730. ),
  731. TP_fast_assign(
  732. WIPHY_ASSIGN;
  733. NETDEV_ASSIGN;
  734. MAC_ASSIGN(dst, dst);
  735. MAC_ASSIGN(next_hop, next_hop);
  736. __entry->idx = idx;
  737. ),
  738. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", index: %d, destination: "
  739. MAC_PR_FMT ", next hop: " MAC_PR_FMT,
  740. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->idx, MAC_PR_ARG(dst),
  741. MAC_PR_ARG(next_hop))
  742. );
  743. TRACE_EVENT(rdev_return_int_mpath_info,
  744. TP_PROTO(struct wiphy *wiphy, int ret, struct mpath_info *pinfo),
  745. TP_ARGS(wiphy, ret, pinfo),
  746. TP_STRUCT__entry(
  747. WIPHY_ENTRY
  748. __field(int, ret)
  749. __field(int, generation)
  750. __field(u32, filled)
  751. __field(u32, frame_qlen)
  752. __field(u32, sn)
  753. __field(u32, metric)
  754. __field(u32, exptime)
  755. __field(u32, discovery_timeout)
  756. __field(u8, discovery_retries)
  757. __field(u8, flags)
  758. ),
  759. TP_fast_assign(
  760. WIPHY_ASSIGN;
  761. __entry->ret = ret;
  762. __entry->generation = pinfo->generation;
  763. __entry->filled = pinfo->filled;
  764. __entry->frame_qlen = pinfo->frame_qlen;
  765. __entry->sn = pinfo->sn;
  766. __entry->metric = pinfo->metric;
  767. __entry->exptime = pinfo->exptime;
  768. __entry->discovery_timeout = pinfo->discovery_timeout;
  769. __entry->discovery_retries = pinfo->discovery_retries;
  770. __entry->flags = pinfo->flags;
  771. ),
  772. TP_printk(WIPHY_PR_FMT ", returned %d. mpath info - generation: %d, "
  773. "filled: %u, frame qlen: %u, sn: %u, metric: %u, exptime: %u,"
  774. " discovery timeout: %u, discovery retries: %u, flags: %u",
  775. WIPHY_PR_ARG, __entry->ret, __entry->generation,
  776. __entry->filled, __entry->frame_qlen, __entry->sn,
  777. __entry->metric, __entry->exptime, __entry->discovery_timeout,
  778. __entry->discovery_retries, __entry->flags)
  779. );
  780. TRACE_EVENT(rdev_return_int_mesh_config,
  781. TP_PROTO(struct wiphy *wiphy, int ret, struct mesh_config *conf),
  782. TP_ARGS(wiphy, ret, conf),
  783. TP_STRUCT__entry(
  784. WIPHY_ENTRY
  785. MESH_CFG_ENTRY
  786. __field(int, ret)
  787. ),
  788. TP_fast_assign(
  789. WIPHY_ASSIGN;
  790. MESH_CFG_ASSIGN;
  791. __entry->ret = ret;
  792. ),
  793. TP_printk(WIPHY_PR_FMT ", returned: %d",
  794. WIPHY_PR_ARG, __entry->ret)
  795. );
  796. TRACE_EVENT(rdev_update_mesh_config,
  797. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u32 mask,
  798. const struct mesh_config *conf),
  799. TP_ARGS(wiphy, netdev, mask, conf),
  800. TP_STRUCT__entry(
  801. WIPHY_ENTRY
  802. NETDEV_ENTRY
  803. MESH_CFG_ENTRY
  804. __field(u32, mask)
  805. ),
  806. TP_fast_assign(
  807. WIPHY_ASSIGN;
  808. NETDEV_ASSIGN;
  809. MESH_CFG_ASSIGN;
  810. __entry->mask = mask;
  811. ),
  812. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", mask: %u",
  813. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->mask)
  814. );
  815. TRACE_EVENT(rdev_join_mesh,
  816. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  817. const struct mesh_config *conf,
  818. const struct mesh_setup *setup),
  819. TP_ARGS(wiphy, netdev, conf, setup),
  820. TP_STRUCT__entry(
  821. WIPHY_ENTRY
  822. NETDEV_ENTRY
  823. MESH_CFG_ENTRY
  824. ),
  825. TP_fast_assign(
  826. WIPHY_ASSIGN;
  827. NETDEV_ASSIGN;
  828. MESH_CFG_ASSIGN;
  829. ),
  830. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT,
  831. WIPHY_PR_ARG, NETDEV_PR_ARG)
  832. );
  833. TRACE_EVENT(rdev_change_bss,
  834. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  835. struct bss_parameters *params),
  836. TP_ARGS(wiphy, netdev, params),
  837. TP_STRUCT__entry(
  838. WIPHY_ENTRY
  839. NETDEV_ENTRY
  840. __field(int, use_cts_prot)
  841. __field(int, use_short_preamble)
  842. __field(int, use_short_slot_time)
  843. __field(int, ap_isolate)
  844. __field(int, ht_opmode)
  845. ),
  846. TP_fast_assign(
  847. WIPHY_ASSIGN;
  848. NETDEV_ASSIGN;
  849. __entry->use_cts_prot = params->use_cts_prot;
  850. __entry->use_short_preamble = params->use_short_preamble;
  851. __entry->use_short_slot_time = params->use_short_slot_time;
  852. __entry->ap_isolate = params->ap_isolate;
  853. __entry->ht_opmode = params->ht_opmode;
  854. ),
  855. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", use cts prot: %d, "
  856. "use short preamble: %d, use short slot time: %d, "
  857. "ap isolate: %d, ht opmode: %d",
  858. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->use_cts_prot,
  859. __entry->use_short_preamble, __entry->use_short_slot_time,
  860. __entry->ap_isolate, __entry->ht_opmode)
  861. );
  862. TRACE_EVENT(rdev_set_txq_params,
  863. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  864. struct ieee80211_txq_params *params),
  865. TP_ARGS(wiphy, netdev, params),
  866. TP_STRUCT__entry(
  867. WIPHY_ENTRY
  868. NETDEV_ENTRY
  869. __field(enum nl80211_ac, ac)
  870. __field(u16, txop)
  871. __field(u16, cwmin)
  872. __field(u16, cwmax)
  873. __field(u8, aifs)
  874. ),
  875. TP_fast_assign(
  876. WIPHY_ASSIGN;
  877. NETDEV_ASSIGN;
  878. __entry->ac = params->ac;
  879. __entry->txop = params->txop;
  880. __entry->cwmin = params->cwmin;
  881. __entry->cwmax = params->cwmax;
  882. __entry->aifs = params->aifs;
  883. ),
  884. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", ac: %d, txop: %u, cwmin: %u, cwmax: %u, aifs: %u",
  885. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->ac, __entry->txop,
  886. __entry->cwmin, __entry->cwmax, __entry->aifs)
  887. );
  888. TRACE_EVENT(rdev_libertas_set_mesh_channel,
  889. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  890. struct ieee80211_channel *chan),
  891. TP_ARGS(wiphy, netdev, chan),
  892. TP_STRUCT__entry(
  893. WIPHY_ENTRY
  894. NETDEV_ENTRY
  895. CHAN_ENTRY
  896. ),
  897. TP_fast_assign(
  898. WIPHY_ASSIGN;
  899. NETDEV_ASSIGN;
  900. CHAN_ASSIGN(chan);
  901. ),
  902. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " CHAN_PR_FMT, WIPHY_PR_ARG,
  903. NETDEV_PR_ARG, CHAN_PR_ARG)
  904. );
  905. TRACE_EVENT(rdev_set_monitor_channel,
  906. TP_PROTO(struct wiphy *wiphy,
  907. struct cfg80211_chan_def *chandef),
  908. TP_ARGS(wiphy, chandef),
  909. TP_STRUCT__entry(
  910. WIPHY_ENTRY
  911. CHAN_DEF_ENTRY
  912. ),
  913. TP_fast_assign(
  914. WIPHY_ASSIGN;
  915. CHAN_DEF_ASSIGN(chandef);
  916. ),
  917. TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT,
  918. WIPHY_PR_ARG, CHAN_DEF_PR_ARG)
  919. );
  920. TRACE_EVENT(rdev_auth,
  921. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  922. struct cfg80211_auth_request *req),
  923. TP_ARGS(wiphy, netdev, req),
  924. TP_STRUCT__entry(
  925. WIPHY_ENTRY
  926. NETDEV_ENTRY
  927. MAC_ENTRY(bssid)
  928. __field(enum nl80211_auth_type, auth_type)
  929. ),
  930. TP_fast_assign(
  931. WIPHY_ASSIGN;
  932. NETDEV_ASSIGN;
  933. if (req->bss)
  934. MAC_ASSIGN(bssid, req->bss->bssid);
  935. else
  936. memset(__entry->bssid, 0, ETH_ALEN);
  937. __entry->auth_type = req->auth_type;
  938. ),
  939. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", auth type: %d, bssid: " MAC_PR_FMT,
  940. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->auth_type,
  941. MAC_PR_ARG(bssid))
  942. );
  943. TRACE_EVENT(rdev_assoc,
  944. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  945. struct cfg80211_assoc_request *req),
  946. TP_ARGS(wiphy, netdev, req),
  947. TP_STRUCT__entry(
  948. WIPHY_ENTRY
  949. NETDEV_ENTRY
  950. MAC_ENTRY(bssid)
  951. MAC_ENTRY(prev_bssid)
  952. __field(bool, use_mfp)
  953. __field(u32, flags)
  954. ),
  955. TP_fast_assign(
  956. WIPHY_ASSIGN;
  957. NETDEV_ASSIGN;
  958. if (req->bss)
  959. MAC_ASSIGN(bssid, req->bss->bssid);
  960. else
  961. memset(__entry->bssid, 0, ETH_ALEN);
  962. MAC_ASSIGN(prev_bssid, req->prev_bssid);
  963. __entry->use_mfp = req->use_mfp;
  964. __entry->flags = req->flags;
  965. ),
  966. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", bssid: " MAC_PR_FMT
  967. ", previous bssid: " MAC_PR_FMT ", use mfp: %s, flags: %u",
  968. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(bssid),
  969. MAC_PR_ARG(prev_bssid), BOOL_TO_STR(__entry->use_mfp),
  970. __entry->flags)
  971. );
  972. TRACE_EVENT(rdev_deauth,
  973. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  974. struct cfg80211_deauth_request *req),
  975. TP_ARGS(wiphy, netdev, req),
  976. TP_STRUCT__entry(
  977. WIPHY_ENTRY
  978. NETDEV_ENTRY
  979. MAC_ENTRY(bssid)
  980. __field(u16, reason_code)
  981. ),
  982. TP_fast_assign(
  983. WIPHY_ASSIGN;
  984. NETDEV_ASSIGN;
  985. MAC_ASSIGN(bssid, req->bssid);
  986. __entry->reason_code = req->reason_code;
  987. ),
  988. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", bssid: " MAC_PR_FMT ", reason: %u",
  989. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(bssid),
  990. __entry->reason_code)
  991. );
  992. TRACE_EVENT(rdev_disassoc,
  993. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  994. struct cfg80211_disassoc_request *req),
  995. TP_ARGS(wiphy, netdev, req),
  996. TP_STRUCT__entry(
  997. WIPHY_ENTRY
  998. NETDEV_ENTRY
  999. MAC_ENTRY(bssid)
  1000. __field(u16, reason_code)
  1001. __field(bool, local_state_change)
  1002. ),
  1003. TP_fast_assign(
  1004. WIPHY_ASSIGN;
  1005. NETDEV_ASSIGN;
  1006. if (req->bss)
  1007. MAC_ASSIGN(bssid, req->bss->bssid);
  1008. else
  1009. memset(__entry->bssid, 0, ETH_ALEN);
  1010. __entry->reason_code = req->reason_code;
  1011. __entry->local_state_change = req->local_state_change;
  1012. ),
  1013. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", bssid: " MAC_PR_FMT
  1014. ", reason: %u, local state change: %s",
  1015. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(bssid),
  1016. __entry->reason_code,
  1017. BOOL_TO_STR(__entry->local_state_change))
  1018. );
  1019. TRACE_EVENT(rdev_mgmt_tx_cancel_wait,
  1020. TP_PROTO(struct wiphy *wiphy,
  1021. struct wireless_dev *wdev, u64 cookie),
  1022. TP_ARGS(wiphy, wdev, cookie),
  1023. TP_STRUCT__entry(
  1024. WIPHY_ENTRY
  1025. WDEV_ENTRY
  1026. __field(u64, cookie)
  1027. ),
  1028. TP_fast_assign(
  1029. WIPHY_ASSIGN;
  1030. WDEV_ASSIGN;
  1031. __entry->cookie = cookie;
  1032. ),
  1033. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", cookie: %llu ",
  1034. WIPHY_PR_ARG, WDEV_PR_ARG, __entry->cookie)
  1035. );
  1036. TRACE_EVENT(rdev_set_power_mgmt,
  1037. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1038. bool enabled, int timeout),
  1039. TP_ARGS(wiphy, netdev, enabled, timeout),
  1040. TP_STRUCT__entry(
  1041. WIPHY_ENTRY
  1042. NETDEV_ENTRY
  1043. __field(bool, enabled)
  1044. __field(int, timeout)
  1045. ),
  1046. TP_fast_assign(
  1047. WIPHY_ASSIGN;
  1048. NETDEV_ASSIGN;
  1049. __entry->enabled = enabled;
  1050. __entry->timeout = timeout;
  1051. ),
  1052. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", %senabled, timeout: %d ",
  1053. WIPHY_PR_ARG, NETDEV_PR_ARG,
  1054. __entry->enabled ? "" : "not ", __entry->timeout)
  1055. );
  1056. TRACE_EVENT(rdev_connect,
  1057. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1058. struct cfg80211_connect_params *sme),
  1059. TP_ARGS(wiphy, netdev, sme),
  1060. TP_STRUCT__entry(
  1061. WIPHY_ENTRY
  1062. NETDEV_ENTRY
  1063. MAC_ENTRY(bssid)
  1064. __array(char, ssid, IEEE80211_MAX_SSID_LEN + 1)
  1065. __field(enum nl80211_auth_type, auth_type)
  1066. __field(bool, privacy)
  1067. __field(u32, wpa_versions)
  1068. __field(u32, flags)
  1069. ),
  1070. TP_fast_assign(
  1071. WIPHY_ASSIGN;
  1072. NETDEV_ASSIGN;
  1073. MAC_ASSIGN(bssid, sme->bssid);
  1074. memset(__entry->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
  1075. memcpy(__entry->ssid, sme->ssid, sme->ssid_len);
  1076. __entry->auth_type = sme->auth_type;
  1077. __entry->privacy = sme->privacy;
  1078. __entry->wpa_versions = sme->crypto.wpa_versions;
  1079. __entry->flags = sme->flags;
  1080. ),
  1081. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", bssid: " MAC_PR_FMT
  1082. ", ssid: %s, auth type: %d, privacy: %s, wpa versions: %u, "
  1083. "flags: %u",
  1084. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(bssid), __entry->ssid,
  1085. __entry->auth_type, BOOL_TO_STR(__entry->privacy),
  1086. __entry->wpa_versions, __entry->flags)
  1087. );
  1088. TRACE_EVENT(rdev_set_cqm_rssi_config,
  1089. TP_PROTO(struct wiphy *wiphy,
  1090. struct net_device *netdev, s32 rssi_thold,
  1091. u32 rssi_hyst),
  1092. TP_ARGS(wiphy, netdev, rssi_thold, rssi_hyst),
  1093. TP_STRUCT__entry(
  1094. WIPHY_ENTRY
  1095. NETDEV_ENTRY
  1096. __field(s32, rssi_thold)
  1097. __field(u32, rssi_hyst)
  1098. ),
  1099. TP_fast_assign(
  1100. WIPHY_ASSIGN;
  1101. NETDEV_ASSIGN;
  1102. __entry->rssi_thold = rssi_thold;
  1103. __entry->rssi_hyst = rssi_hyst;
  1104. ),
  1105. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT
  1106. ", rssi_thold: %d, rssi_hyst: %u ",
  1107. WIPHY_PR_ARG, NETDEV_PR_ARG,
  1108. __entry->rssi_thold, __entry->rssi_hyst)
  1109. );
  1110. TRACE_EVENT(rdev_set_cqm_txe_config,
  1111. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u32 rate,
  1112. u32 pkts, u32 intvl),
  1113. TP_ARGS(wiphy, netdev, rate, pkts, intvl),
  1114. TP_STRUCT__entry(
  1115. WIPHY_ENTRY
  1116. NETDEV_ENTRY
  1117. __field(u32, rate)
  1118. __field(u32, pkts)
  1119. __field(u32, intvl)
  1120. ),
  1121. TP_fast_assign(
  1122. WIPHY_ASSIGN;
  1123. NETDEV_ASSIGN;
  1124. __entry->rate = rate;
  1125. __entry->pkts = pkts;
  1126. __entry->intvl = intvl;
  1127. ),
  1128. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", rate: %u, packets: %u, interval: %u",
  1129. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->rate, __entry->pkts,
  1130. __entry->intvl)
  1131. );
  1132. TRACE_EVENT(rdev_disconnect,
  1133. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1134. u16 reason_code),
  1135. TP_ARGS(wiphy, netdev, reason_code),
  1136. TP_STRUCT__entry(
  1137. WIPHY_ENTRY
  1138. NETDEV_ENTRY
  1139. __field(u16, reason_code)
  1140. ),
  1141. TP_fast_assign(
  1142. WIPHY_ASSIGN;
  1143. NETDEV_ASSIGN;
  1144. __entry->reason_code = reason_code;
  1145. ),
  1146. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", reason code: %u", WIPHY_PR_ARG,
  1147. NETDEV_PR_ARG, __entry->reason_code)
  1148. );
  1149. TRACE_EVENT(rdev_join_ibss,
  1150. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1151. struct cfg80211_ibss_params *params),
  1152. TP_ARGS(wiphy, netdev, params),
  1153. TP_STRUCT__entry(
  1154. WIPHY_ENTRY
  1155. NETDEV_ENTRY
  1156. MAC_ENTRY(bssid)
  1157. __array(char, ssid, IEEE80211_MAX_SSID_LEN + 1)
  1158. ),
  1159. TP_fast_assign(
  1160. WIPHY_ASSIGN;
  1161. NETDEV_ASSIGN;
  1162. MAC_ASSIGN(bssid, params->bssid);
  1163. memset(__entry->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
  1164. memcpy(__entry->ssid, params->ssid, params->ssid_len);
  1165. ),
  1166. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", bssid: " MAC_PR_FMT ", ssid: %s",
  1167. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(bssid), __entry->ssid)
  1168. );
  1169. TRACE_EVENT(rdev_set_wiphy_params,
  1170. TP_PROTO(struct wiphy *wiphy, u32 changed),
  1171. TP_ARGS(wiphy, changed),
  1172. TP_STRUCT__entry(
  1173. WIPHY_ENTRY
  1174. __field(u32, changed)
  1175. ),
  1176. TP_fast_assign(
  1177. WIPHY_ASSIGN;
  1178. __entry->changed = changed;
  1179. ),
  1180. TP_printk(WIPHY_PR_FMT ", changed: %u",
  1181. WIPHY_PR_ARG, __entry->changed)
  1182. );
  1183. DEFINE_EVENT(wiphy_wdev_evt, rdev_get_tx_power,
  1184. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  1185. TP_ARGS(wiphy, wdev)
  1186. );
  1187. TRACE_EVENT(rdev_set_tx_power,
  1188. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev,
  1189. enum nl80211_tx_power_setting type, int mbm),
  1190. TP_ARGS(wiphy, wdev, type, mbm),
  1191. TP_STRUCT__entry(
  1192. WIPHY_ENTRY
  1193. WDEV_ENTRY
  1194. __field(enum nl80211_tx_power_setting, type)
  1195. __field(int, mbm)
  1196. ),
  1197. TP_fast_assign(
  1198. WIPHY_ASSIGN;
  1199. WDEV_ASSIGN;
  1200. __entry->type = type;
  1201. __entry->mbm = mbm;
  1202. ),
  1203. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", type: %u, mbm: %d",
  1204. WIPHY_PR_ARG, WDEV_PR_ARG,__entry->type, __entry->mbm)
  1205. );
  1206. TRACE_EVENT(rdev_return_int_int,
  1207. TP_PROTO(struct wiphy *wiphy, int func_ret, int func_fill),
  1208. TP_ARGS(wiphy, func_ret, func_fill),
  1209. TP_STRUCT__entry(
  1210. WIPHY_ENTRY
  1211. __field(int, func_ret)
  1212. __field(int, func_fill)
  1213. ),
  1214. TP_fast_assign(
  1215. WIPHY_ASSIGN;
  1216. __entry->func_ret = func_ret;
  1217. __entry->func_fill = func_fill;
  1218. ),
  1219. TP_printk(WIPHY_PR_FMT ", function returns: %d, function filled: %d",
  1220. WIPHY_PR_ARG, __entry->func_ret, __entry->func_fill)
  1221. );
  1222. #ifdef CONFIG_NL80211_TESTMODE
  1223. TRACE_EVENT(rdev_testmode_cmd,
  1224. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  1225. TP_ARGS(wiphy, wdev),
  1226. TP_STRUCT__entry(
  1227. WIPHY_ENTRY
  1228. WDEV_ENTRY
  1229. ),
  1230. TP_fast_assign(
  1231. WIPHY_ASSIGN;
  1232. WDEV_ASSIGN;
  1233. ),
  1234. TP_printk(WIPHY_PR_FMT WDEV_PR_FMT, WIPHY_PR_ARG, WDEV_PR_ARG)
  1235. );
  1236. TRACE_EVENT(rdev_testmode_dump,
  1237. TP_PROTO(struct wiphy *wiphy),
  1238. TP_ARGS(wiphy),
  1239. TP_STRUCT__entry(
  1240. WIPHY_ENTRY
  1241. ),
  1242. TP_fast_assign(
  1243. WIPHY_ASSIGN;
  1244. ),
  1245. TP_printk(WIPHY_PR_FMT, WIPHY_PR_ARG)
  1246. );
  1247. #endif /* CONFIG_NL80211_TESTMODE */
  1248. TRACE_EVENT(rdev_set_bitrate_mask,
  1249. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1250. const u8 *peer, const struct cfg80211_bitrate_mask *mask),
  1251. TP_ARGS(wiphy, netdev, peer, mask),
  1252. TP_STRUCT__entry(
  1253. WIPHY_ENTRY
  1254. NETDEV_ENTRY
  1255. MAC_ENTRY(peer)
  1256. ),
  1257. TP_fast_assign(
  1258. WIPHY_ASSIGN;
  1259. NETDEV_ASSIGN;
  1260. MAC_ASSIGN(peer, peer);
  1261. ),
  1262. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", peer: " MAC_PR_FMT,
  1263. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer))
  1264. );
  1265. TRACE_EVENT(rdev_mgmt_frame_register,
  1266. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev,
  1267. u16 frame_type, bool reg),
  1268. TP_ARGS(wiphy, wdev, frame_type, reg),
  1269. TP_STRUCT__entry(
  1270. WIPHY_ENTRY
  1271. WDEV_ENTRY
  1272. __field(u16, frame_type)
  1273. __field(bool, reg)
  1274. ),
  1275. TP_fast_assign(
  1276. WIPHY_ASSIGN;
  1277. WDEV_ASSIGN;
  1278. __entry->frame_type = frame_type;
  1279. __entry->reg = reg;
  1280. ),
  1281. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", frame_type: 0x%.2x, reg: %s ",
  1282. WIPHY_PR_ARG, WDEV_PR_ARG, __entry->frame_type,
  1283. __entry->reg ? "true" : "false")
  1284. );
  1285. TRACE_EVENT(rdev_return_int_tx_rx,
  1286. TP_PROTO(struct wiphy *wiphy, int ret, u32 tx, u32 rx),
  1287. TP_ARGS(wiphy, ret, tx, rx),
  1288. TP_STRUCT__entry(
  1289. WIPHY_ENTRY
  1290. __field(int, ret)
  1291. __field(u32, tx)
  1292. __field(u32, rx)
  1293. ),
  1294. TP_fast_assign(
  1295. WIPHY_ASSIGN;
  1296. __entry->ret = ret;
  1297. __entry->tx = tx;
  1298. __entry->rx = rx;
  1299. ),
  1300. TP_printk(WIPHY_PR_FMT ", returned %d, tx: %u, rx: %u",
  1301. WIPHY_PR_ARG, __entry->ret, __entry->tx, __entry->rx)
  1302. );
  1303. TRACE_EVENT(rdev_return_void_tx_rx,
  1304. TP_PROTO(struct wiphy *wiphy, u32 tx, u32 tx_max,
  1305. u32 rx, u32 rx_max),
  1306. TP_ARGS(wiphy, tx, tx_max, rx, rx_max),
  1307. TP_STRUCT__entry(
  1308. WIPHY_ENTRY
  1309. __field(u32, tx)
  1310. __field(u32, tx_max)
  1311. __field(u32, rx)
  1312. __field(u32, rx_max)
  1313. ),
  1314. TP_fast_assign(
  1315. WIPHY_ASSIGN;
  1316. __entry->tx = tx;
  1317. __entry->tx_max = tx_max;
  1318. __entry->rx = rx;
  1319. __entry->rx_max = rx_max;
  1320. ),
  1321. TP_printk(WIPHY_PR_FMT ", tx: %u, tx_max: %u, rx: %u, rx_max: %u ",
  1322. WIPHY_PR_ARG, __entry->tx, __entry->tx_max, __entry->rx,
  1323. __entry->rx_max)
  1324. );
  1325. DECLARE_EVENT_CLASS(tx_rx_evt,
  1326. TP_PROTO(struct wiphy *wiphy, u32 tx, u32 rx),
  1327. TP_ARGS(wiphy, rx, tx),
  1328. TP_STRUCT__entry(
  1329. WIPHY_ENTRY
  1330. __field(u32, tx)
  1331. __field(u32, rx)
  1332. ),
  1333. TP_fast_assign(
  1334. WIPHY_ASSIGN;
  1335. __entry->tx = tx;
  1336. __entry->rx = rx;
  1337. ),
  1338. TP_printk(WIPHY_PR_FMT ", tx: %u, rx: %u ",
  1339. WIPHY_PR_ARG, __entry->tx, __entry->rx)
  1340. );
  1341. DEFINE_EVENT(tx_rx_evt, rdev_set_antenna,
  1342. TP_PROTO(struct wiphy *wiphy, u32 tx, u32 rx),
  1343. TP_ARGS(wiphy, rx, tx)
  1344. );
  1345. TRACE_EVENT(rdev_sched_scan_start,
  1346. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1347. struct cfg80211_sched_scan_request *request),
  1348. TP_ARGS(wiphy, netdev, request),
  1349. TP_STRUCT__entry(
  1350. WIPHY_ENTRY
  1351. NETDEV_ENTRY
  1352. ),
  1353. TP_fast_assign(
  1354. WIPHY_ASSIGN;
  1355. NETDEV_ASSIGN;
  1356. ),
  1357. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT,
  1358. WIPHY_PR_ARG, NETDEV_PR_ARG)
  1359. );
  1360. TRACE_EVENT(rdev_tdls_mgmt,
  1361. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1362. u8 *peer, u8 action_code, u8 dialog_token,
  1363. u16 status_code, u32 peer_capability,
  1364. bool initiator, const u8 *buf, size_t len),
  1365. TP_ARGS(wiphy, netdev, peer, action_code, dialog_token, status_code,
  1366. peer_capability, initiator, buf, len),
  1367. TP_STRUCT__entry(
  1368. WIPHY_ENTRY
  1369. NETDEV_ENTRY
  1370. MAC_ENTRY(peer)
  1371. __field(u8, action_code)
  1372. __field(u8, dialog_token)
  1373. __field(u16, status_code)
  1374. __field(u32, peer_capability)
  1375. __field(bool, initiator)
  1376. __dynamic_array(u8, buf, len)
  1377. ),
  1378. TP_fast_assign(
  1379. WIPHY_ASSIGN;
  1380. NETDEV_ASSIGN;
  1381. MAC_ASSIGN(peer, peer);
  1382. __entry->action_code = action_code;
  1383. __entry->dialog_token = dialog_token;
  1384. __entry->status_code = status_code;
  1385. __entry->peer_capability = peer_capability;
  1386. __entry->initiator = initiator;
  1387. memcpy(__get_dynamic_array(buf), buf, len);
  1388. ),
  1389. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " MAC_PR_FMT ", action_code: %u, "
  1390. "dialog_token: %u, status_code: %u, peer_capability: %u "
  1391. "initiator: %s buf: %#.2x ",
  1392. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer),
  1393. __entry->action_code, __entry->dialog_token,
  1394. __entry->status_code, __entry->peer_capability,
  1395. BOOL_TO_STR(__entry->initiator),
  1396. ((u8 *)__get_dynamic_array(buf))[0])
  1397. );
  1398. TRACE_EVENT(rdev_dump_survey,
  1399. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, int idx),
  1400. TP_ARGS(wiphy, netdev, idx),
  1401. TP_STRUCT__entry(
  1402. WIPHY_ENTRY
  1403. NETDEV_ENTRY
  1404. __field(int, idx)
  1405. ),
  1406. TP_fast_assign(
  1407. WIPHY_ASSIGN;
  1408. NETDEV_ASSIGN;
  1409. __entry->idx = idx;
  1410. ),
  1411. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", index: %d",
  1412. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->idx)
  1413. );
  1414. TRACE_EVENT(rdev_return_int_survey_info,
  1415. TP_PROTO(struct wiphy *wiphy, int ret, struct survey_info *info),
  1416. TP_ARGS(wiphy, ret, info),
  1417. TP_STRUCT__entry(
  1418. WIPHY_ENTRY
  1419. CHAN_ENTRY
  1420. __field(int, ret)
  1421. __field(u64, channel_time)
  1422. __field(u64, channel_time_busy)
  1423. __field(u64, channel_time_ext_busy)
  1424. __field(u64, channel_time_rx)
  1425. __field(u64, channel_time_tx)
  1426. __field(u32, filled)
  1427. __field(s8, noise)
  1428. ),
  1429. TP_fast_assign(
  1430. WIPHY_ASSIGN;
  1431. CHAN_ASSIGN(info->channel);
  1432. __entry->ret = ret;
  1433. __entry->channel_time = info->channel_time;
  1434. __entry->channel_time_busy = info->channel_time_busy;
  1435. __entry->channel_time_ext_busy = info->channel_time_ext_busy;
  1436. __entry->channel_time_rx = info->channel_time_rx;
  1437. __entry->channel_time_tx = info->channel_time_tx;
  1438. __entry->filled = info->filled;
  1439. __entry->noise = info->noise;
  1440. ),
  1441. TP_printk(WIPHY_PR_FMT ", returned: %d, " CHAN_PR_FMT
  1442. ", channel time: %llu, channel time busy: %llu, "
  1443. "channel time extension busy: %llu, channel time rx: %llu, "
  1444. "channel time tx: %llu, filled: %u, noise: %d",
  1445. WIPHY_PR_ARG, __entry->ret, CHAN_PR_ARG,
  1446. __entry->channel_time, __entry->channel_time_busy,
  1447. __entry->channel_time_ext_busy, __entry->channel_time_rx,
  1448. __entry->channel_time_tx, __entry->filled, __entry->noise)
  1449. );
  1450. TRACE_EVENT(rdev_tdls_oper,
  1451. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1452. u8 *peer, enum nl80211_tdls_operation oper),
  1453. TP_ARGS(wiphy, netdev, peer, oper),
  1454. TP_STRUCT__entry(
  1455. WIPHY_ENTRY
  1456. NETDEV_ENTRY
  1457. MAC_ENTRY(peer)
  1458. __field(enum nl80211_tdls_operation, oper)
  1459. ),
  1460. TP_fast_assign(
  1461. WIPHY_ASSIGN;
  1462. NETDEV_ASSIGN;
  1463. MAC_ASSIGN(peer, peer);
  1464. __entry->oper = oper;
  1465. ),
  1466. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " MAC_PR_FMT ", oper: %d",
  1467. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer), __entry->oper)
  1468. );
  1469. DECLARE_EVENT_CLASS(rdev_pmksa,
  1470. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1471. struct cfg80211_pmksa *pmksa),
  1472. TP_ARGS(wiphy, netdev, pmksa),
  1473. TP_STRUCT__entry(
  1474. WIPHY_ENTRY
  1475. NETDEV_ENTRY
  1476. MAC_ENTRY(bssid)
  1477. ),
  1478. TP_fast_assign(
  1479. WIPHY_ASSIGN;
  1480. NETDEV_ASSIGN;
  1481. MAC_ASSIGN(bssid, pmksa->bssid);
  1482. ),
  1483. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", bssid: " MAC_PR_FMT,
  1484. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(bssid))
  1485. );
  1486. TRACE_EVENT(rdev_probe_client,
  1487. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1488. const u8 *peer),
  1489. TP_ARGS(wiphy, netdev, peer),
  1490. TP_STRUCT__entry(
  1491. WIPHY_ENTRY
  1492. NETDEV_ENTRY
  1493. MAC_ENTRY(peer)
  1494. ),
  1495. TP_fast_assign(
  1496. WIPHY_ASSIGN;
  1497. NETDEV_ASSIGN;
  1498. MAC_ASSIGN(peer, peer);
  1499. ),
  1500. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " MAC_PR_FMT,
  1501. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer))
  1502. );
  1503. DEFINE_EVENT(rdev_pmksa, rdev_set_pmksa,
  1504. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1505. struct cfg80211_pmksa *pmksa),
  1506. TP_ARGS(wiphy, netdev, pmksa)
  1507. );
  1508. DEFINE_EVENT(rdev_pmksa, rdev_del_pmksa,
  1509. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1510. struct cfg80211_pmksa *pmksa),
  1511. TP_ARGS(wiphy, netdev, pmksa)
  1512. );
  1513. TRACE_EVENT(rdev_remain_on_channel,
  1514. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev,
  1515. struct ieee80211_channel *chan,
  1516. unsigned int duration),
  1517. TP_ARGS(wiphy, wdev, chan, duration),
  1518. TP_STRUCT__entry(
  1519. WIPHY_ENTRY
  1520. WDEV_ENTRY
  1521. CHAN_ENTRY
  1522. __field(unsigned int, duration)
  1523. ),
  1524. TP_fast_assign(
  1525. WIPHY_ASSIGN;
  1526. WDEV_ASSIGN;
  1527. CHAN_ASSIGN(chan);
  1528. __entry->duration = duration;
  1529. ),
  1530. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", " CHAN_PR_FMT ", duration: %u",
  1531. WIPHY_PR_ARG, WDEV_PR_ARG, CHAN_PR_ARG, __entry->duration)
  1532. );
  1533. TRACE_EVENT(rdev_return_int_cookie,
  1534. TP_PROTO(struct wiphy *wiphy, int ret, u64 cookie),
  1535. TP_ARGS(wiphy, ret, cookie),
  1536. TP_STRUCT__entry(
  1537. WIPHY_ENTRY
  1538. __field(int, ret)
  1539. __field(u64, cookie)
  1540. ),
  1541. TP_fast_assign(
  1542. WIPHY_ASSIGN;
  1543. __entry->ret = ret;
  1544. __entry->cookie = cookie;
  1545. ),
  1546. TP_printk(WIPHY_PR_FMT ", returned %d, cookie: %llu",
  1547. WIPHY_PR_ARG, __entry->ret, __entry->cookie)
  1548. );
  1549. TRACE_EVENT(rdev_cancel_remain_on_channel,
  1550. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie),
  1551. TP_ARGS(wiphy, wdev, cookie),
  1552. TP_STRUCT__entry(
  1553. WIPHY_ENTRY
  1554. WDEV_ENTRY
  1555. __field(u64, cookie)
  1556. ),
  1557. TP_fast_assign(
  1558. WIPHY_ASSIGN;
  1559. WDEV_ASSIGN;
  1560. __entry->cookie = cookie;
  1561. ),
  1562. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", cookie: %llu",
  1563. WIPHY_PR_ARG, WDEV_PR_ARG, __entry->cookie)
  1564. );
  1565. TRACE_EVENT(rdev_mgmt_tx,
  1566. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev,
  1567. struct cfg80211_mgmt_tx_params *params),
  1568. TP_ARGS(wiphy, wdev, params),
  1569. TP_STRUCT__entry(
  1570. WIPHY_ENTRY
  1571. WDEV_ENTRY
  1572. CHAN_ENTRY
  1573. __field(bool, offchan)
  1574. __field(unsigned int, wait)
  1575. __field(bool, no_cck)
  1576. __field(bool, dont_wait_for_ack)
  1577. ),
  1578. TP_fast_assign(
  1579. WIPHY_ASSIGN;
  1580. WDEV_ASSIGN;
  1581. CHAN_ASSIGN(params->chan);
  1582. __entry->offchan = params->offchan;
  1583. __entry->wait = params->wait;
  1584. __entry->no_cck = params->no_cck;
  1585. __entry->dont_wait_for_ack = params->dont_wait_for_ack;
  1586. ),
  1587. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", " CHAN_PR_FMT ", offchan: %s,"
  1588. " wait: %u, no cck: %s, dont wait for ack: %s",
  1589. WIPHY_PR_ARG, WDEV_PR_ARG, CHAN_PR_ARG,
  1590. BOOL_TO_STR(__entry->offchan), __entry->wait,
  1591. BOOL_TO_STR(__entry->no_cck),
  1592. BOOL_TO_STR(__entry->dont_wait_for_ack))
  1593. );
  1594. TRACE_EVENT(rdev_set_noack_map,
  1595. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1596. u16 noack_map),
  1597. TP_ARGS(wiphy, netdev, noack_map),
  1598. TP_STRUCT__entry(
  1599. WIPHY_ENTRY
  1600. NETDEV_ENTRY
  1601. __field(u16, noack_map)
  1602. ),
  1603. TP_fast_assign(
  1604. WIPHY_ASSIGN;
  1605. NETDEV_ASSIGN;
  1606. __entry->noack_map = noack_map;
  1607. ),
  1608. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", noack_map: %u",
  1609. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->noack_map)
  1610. );
  1611. DEFINE_EVENT(wiphy_wdev_evt, rdev_get_channel,
  1612. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  1613. TP_ARGS(wiphy, wdev)
  1614. );
  1615. TRACE_EVENT(rdev_return_chandef,
  1616. TP_PROTO(struct wiphy *wiphy, int ret,
  1617. struct cfg80211_chan_def *chandef),
  1618. TP_ARGS(wiphy, ret, chandef),
  1619. TP_STRUCT__entry(
  1620. WIPHY_ENTRY
  1621. __field(int, ret)
  1622. CHAN_DEF_ENTRY
  1623. ),
  1624. TP_fast_assign(
  1625. WIPHY_ASSIGN;
  1626. if (ret == 0)
  1627. CHAN_DEF_ASSIGN(chandef);
  1628. else
  1629. CHAN_DEF_ASSIGN((struct cfg80211_chan_def *)NULL);
  1630. __entry->ret = ret;
  1631. ),
  1632. TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT ", ret: %d",
  1633. WIPHY_PR_ARG, CHAN_DEF_PR_ARG, __entry->ret)
  1634. );
  1635. DEFINE_EVENT(wiphy_wdev_evt, rdev_start_p2p_device,
  1636. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  1637. TP_ARGS(wiphy, wdev)
  1638. );
  1639. DEFINE_EVENT(wiphy_wdev_evt, rdev_stop_p2p_device,
  1640. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  1641. TP_ARGS(wiphy, wdev)
  1642. );
  1643. TRACE_EVENT(rdev_set_mac_acl,
  1644. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1645. struct cfg80211_acl_data *params),
  1646. TP_ARGS(wiphy, netdev, params),
  1647. TP_STRUCT__entry(
  1648. WIPHY_ENTRY
  1649. NETDEV_ENTRY
  1650. __field(u32, acl_policy)
  1651. ),
  1652. TP_fast_assign(
  1653. WIPHY_ASSIGN;
  1654. NETDEV_ASSIGN;
  1655. __entry->acl_policy = params->acl_policy;
  1656. ),
  1657. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", acl policy: %d",
  1658. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->acl_policy)
  1659. );
  1660. TRACE_EVENT(rdev_update_ft_ies,
  1661. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1662. struct cfg80211_update_ft_ies_params *ftie),
  1663. TP_ARGS(wiphy, netdev, ftie),
  1664. TP_STRUCT__entry(
  1665. WIPHY_ENTRY
  1666. NETDEV_ENTRY
  1667. __field(u16, md)
  1668. __dynamic_array(u8, ie, ftie->ie_len)
  1669. ),
  1670. TP_fast_assign(
  1671. WIPHY_ASSIGN;
  1672. NETDEV_ASSIGN;
  1673. __entry->md = ftie->md;
  1674. memcpy(__get_dynamic_array(ie), ftie->ie, ftie->ie_len);
  1675. ),
  1676. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", md: 0x%x",
  1677. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->md)
  1678. );
  1679. TRACE_EVENT(rdev_crit_proto_start,
  1680. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev,
  1681. enum nl80211_crit_proto_id protocol, u16 duration),
  1682. TP_ARGS(wiphy, wdev, protocol, duration),
  1683. TP_STRUCT__entry(
  1684. WIPHY_ENTRY
  1685. WDEV_ENTRY
  1686. __field(u16, proto)
  1687. __field(u16, duration)
  1688. ),
  1689. TP_fast_assign(
  1690. WIPHY_ASSIGN;
  1691. WDEV_ASSIGN;
  1692. __entry->proto = protocol;
  1693. __entry->duration = duration;
  1694. ),
  1695. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", proto=%x, duration=%u",
  1696. WIPHY_PR_ARG, WDEV_PR_ARG, __entry->proto, __entry->duration)
  1697. );
  1698. TRACE_EVENT(rdev_crit_proto_stop,
  1699. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  1700. TP_ARGS(wiphy, wdev),
  1701. TP_STRUCT__entry(
  1702. WIPHY_ENTRY
  1703. WDEV_ENTRY
  1704. ),
  1705. TP_fast_assign(
  1706. WIPHY_ASSIGN;
  1707. WDEV_ASSIGN;
  1708. ),
  1709. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT,
  1710. WIPHY_PR_ARG, WDEV_PR_ARG)
  1711. );
  1712. TRACE_EVENT(rdev_channel_switch,
  1713. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1714. struct cfg80211_csa_settings *params),
  1715. TP_ARGS(wiphy, netdev, params),
  1716. TP_STRUCT__entry(
  1717. WIPHY_ENTRY
  1718. NETDEV_ENTRY
  1719. CHAN_DEF_ENTRY
  1720. __field(bool, radar_required)
  1721. __field(bool, block_tx)
  1722. __field(u8, count)
  1723. __dynamic_array(u16, bcn_ofs, params->n_counter_offsets_beacon)
  1724. __dynamic_array(u16, pres_ofs, params->n_counter_offsets_presp)
  1725. ),
  1726. TP_fast_assign(
  1727. WIPHY_ASSIGN;
  1728. NETDEV_ASSIGN;
  1729. CHAN_DEF_ASSIGN(&params->chandef);
  1730. __entry->radar_required = params->radar_required;
  1731. __entry->block_tx = params->block_tx;
  1732. __entry->count = params->count;
  1733. memcpy(__get_dynamic_array(bcn_ofs),
  1734. params->counter_offsets_beacon,
  1735. params->n_counter_offsets_beacon * sizeof(u16));
  1736. /* probe response offsets are optional */
  1737. if (params->n_counter_offsets_presp)
  1738. memcpy(__get_dynamic_array(pres_ofs),
  1739. params->counter_offsets_presp,
  1740. params->n_counter_offsets_presp * sizeof(u16));
  1741. ),
  1742. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT
  1743. ", block_tx: %d, count: %u, radar_required: %d",
  1744. WIPHY_PR_ARG, NETDEV_PR_ARG, CHAN_DEF_PR_ARG,
  1745. __entry->block_tx, __entry->count, __entry->radar_required)
  1746. );
  1747. TRACE_EVENT(rdev_set_qos_map,
  1748. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1749. struct cfg80211_qos_map *qos_map),
  1750. TP_ARGS(wiphy, netdev, qos_map),
  1751. TP_STRUCT__entry(
  1752. WIPHY_ENTRY
  1753. NETDEV_ENTRY
  1754. QOS_MAP_ENTRY
  1755. ),
  1756. TP_fast_assign(
  1757. WIPHY_ASSIGN;
  1758. NETDEV_ASSIGN;
  1759. QOS_MAP_ASSIGN(qos_map);
  1760. ),
  1761. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", num_des: %u",
  1762. WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->num_des)
  1763. );
  1764. TRACE_EVENT(rdev_set_ap_chanwidth,
  1765. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1766. struct cfg80211_chan_def *chandef),
  1767. TP_ARGS(wiphy, netdev, chandef),
  1768. TP_STRUCT__entry(
  1769. WIPHY_ENTRY
  1770. NETDEV_ENTRY
  1771. CHAN_DEF_ENTRY
  1772. ),
  1773. TP_fast_assign(
  1774. WIPHY_ASSIGN;
  1775. NETDEV_ASSIGN;
  1776. CHAN_DEF_ASSIGN(chandef);
  1777. ),
  1778. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT,
  1779. WIPHY_PR_ARG, NETDEV_PR_ARG, CHAN_DEF_PR_ARG)
  1780. );
  1781. TRACE_EVENT(rdev_add_tx_ts,
  1782. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1783. u8 tsid, const u8 *peer, u8 user_prio, u16 admitted_time),
  1784. TP_ARGS(wiphy, netdev, tsid, peer, user_prio, admitted_time),
  1785. TP_STRUCT__entry(
  1786. WIPHY_ENTRY
  1787. NETDEV_ENTRY
  1788. MAC_ENTRY(peer)
  1789. __field(u8, tsid)
  1790. __field(u8, user_prio)
  1791. __field(u16, admitted_time)
  1792. ),
  1793. TP_fast_assign(
  1794. WIPHY_ASSIGN;
  1795. NETDEV_ASSIGN;
  1796. MAC_ASSIGN(peer, peer);
  1797. __entry->tsid = tsid;
  1798. __entry->user_prio = user_prio;
  1799. __entry->admitted_time = admitted_time;
  1800. ),
  1801. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " MAC_PR_FMT ", TSID %d, UP %d, time %d",
  1802. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer),
  1803. __entry->tsid, __entry->user_prio, __entry->admitted_time)
  1804. );
  1805. TRACE_EVENT(rdev_del_tx_ts,
  1806. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  1807. u8 tsid, const u8 *peer),
  1808. TP_ARGS(wiphy, netdev, tsid, peer),
  1809. TP_STRUCT__entry(
  1810. WIPHY_ENTRY
  1811. NETDEV_ENTRY
  1812. MAC_ENTRY(peer)
  1813. __field(u8, tsid)
  1814. ),
  1815. TP_fast_assign(
  1816. WIPHY_ASSIGN;
  1817. NETDEV_ASSIGN;
  1818. MAC_ASSIGN(peer, peer);
  1819. __entry->tsid = tsid;
  1820. ),
  1821. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " MAC_PR_FMT ", TSID %d",
  1822. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer), __entry->tsid)
  1823. );
  1824. /*************************************************************
  1825. * cfg80211 exported functions traces *
  1826. *************************************************************/
  1827. TRACE_EVENT(cfg80211_return_bool,
  1828. TP_PROTO(bool ret),
  1829. TP_ARGS(ret),
  1830. TP_STRUCT__entry(
  1831. __field(bool, ret)
  1832. ),
  1833. TP_fast_assign(
  1834. __entry->ret = ret;
  1835. ),
  1836. TP_printk("returned %s", BOOL_TO_STR(__entry->ret))
  1837. );
  1838. DECLARE_EVENT_CLASS(cfg80211_netdev_mac_evt,
  1839. TP_PROTO(struct net_device *netdev, const u8 *macaddr),
  1840. TP_ARGS(netdev, macaddr),
  1841. TP_STRUCT__entry(
  1842. NETDEV_ENTRY
  1843. MAC_ENTRY(macaddr)
  1844. ),
  1845. TP_fast_assign(
  1846. NETDEV_ASSIGN;
  1847. MAC_ASSIGN(macaddr, macaddr);
  1848. ),
  1849. TP_printk(NETDEV_PR_FMT ", mac: " MAC_PR_FMT,
  1850. NETDEV_PR_ARG, MAC_PR_ARG(macaddr))
  1851. );
  1852. DEFINE_EVENT(cfg80211_netdev_mac_evt, cfg80211_notify_new_peer_candidate,
  1853. TP_PROTO(struct net_device *netdev, const u8 *macaddr),
  1854. TP_ARGS(netdev, macaddr)
  1855. );
  1856. DECLARE_EVENT_CLASS(netdev_evt_only,
  1857. TP_PROTO(struct net_device *netdev),
  1858. TP_ARGS(netdev),
  1859. TP_STRUCT__entry(
  1860. NETDEV_ENTRY
  1861. ),
  1862. TP_fast_assign(
  1863. NETDEV_ASSIGN;
  1864. ),
  1865. TP_printk(NETDEV_PR_FMT , NETDEV_PR_ARG)
  1866. );
  1867. DEFINE_EVENT(netdev_evt_only, cfg80211_send_rx_auth,
  1868. TP_PROTO(struct net_device *netdev),
  1869. TP_ARGS(netdev)
  1870. );
  1871. TRACE_EVENT(cfg80211_send_rx_assoc,
  1872. TP_PROTO(struct net_device *netdev, struct cfg80211_bss *bss),
  1873. TP_ARGS(netdev, bss),
  1874. TP_STRUCT__entry(
  1875. NETDEV_ENTRY
  1876. MAC_ENTRY(bssid)
  1877. CHAN_ENTRY
  1878. ),
  1879. TP_fast_assign(
  1880. NETDEV_ASSIGN;
  1881. MAC_ASSIGN(bssid, bss->bssid);
  1882. CHAN_ASSIGN(bss->channel);
  1883. ),
  1884. TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT ", " CHAN_PR_FMT,
  1885. NETDEV_PR_ARG, MAC_PR_ARG(bssid), CHAN_PR_ARG)
  1886. );
  1887. DECLARE_EVENT_CLASS(netdev_frame_event,
  1888. TP_PROTO(struct net_device *netdev, const u8 *buf, int len),
  1889. TP_ARGS(netdev, buf, len),
  1890. TP_STRUCT__entry(
  1891. NETDEV_ENTRY
  1892. __dynamic_array(u8, frame, len)
  1893. ),
  1894. TP_fast_assign(
  1895. NETDEV_ASSIGN;
  1896. memcpy(__get_dynamic_array(frame), buf, len);
  1897. ),
  1898. TP_printk(NETDEV_PR_FMT ", ftype:0x%.2x",
  1899. NETDEV_PR_ARG,
  1900. le16_to_cpup((__le16 *)__get_dynamic_array(frame)))
  1901. );
  1902. DEFINE_EVENT(netdev_frame_event, cfg80211_rx_unprot_mlme_mgmt,
  1903. TP_PROTO(struct net_device *netdev, const u8 *buf, int len),
  1904. TP_ARGS(netdev, buf, len)
  1905. );
  1906. DEFINE_EVENT(netdev_frame_event, cfg80211_rx_mlme_mgmt,
  1907. TP_PROTO(struct net_device *netdev, const u8 *buf, int len),
  1908. TP_ARGS(netdev, buf, len)
  1909. );
  1910. TRACE_EVENT(cfg80211_tx_mlme_mgmt,
  1911. TP_PROTO(struct net_device *netdev, const u8 *buf, int len),
  1912. TP_ARGS(netdev, buf, len),
  1913. TP_STRUCT__entry(
  1914. NETDEV_ENTRY
  1915. __dynamic_array(u8, frame, len)
  1916. ),
  1917. TP_fast_assign(
  1918. NETDEV_ASSIGN;
  1919. memcpy(__get_dynamic_array(frame), buf, len);
  1920. ),
  1921. TP_printk(NETDEV_PR_FMT ", ftype:0x%.2x",
  1922. NETDEV_PR_ARG,
  1923. le16_to_cpup((__le16 *)__get_dynamic_array(frame)))
  1924. );
  1925. DECLARE_EVENT_CLASS(netdev_mac_evt,
  1926. TP_PROTO(struct net_device *netdev, const u8 *mac),
  1927. TP_ARGS(netdev, mac),
  1928. TP_STRUCT__entry(
  1929. NETDEV_ENTRY
  1930. MAC_ENTRY(mac)
  1931. ),
  1932. TP_fast_assign(
  1933. NETDEV_ASSIGN;
  1934. MAC_ASSIGN(mac, mac)
  1935. ),
  1936. TP_printk(NETDEV_PR_FMT ", mac: " MAC_PR_FMT,
  1937. NETDEV_PR_ARG, MAC_PR_ARG(mac))
  1938. );
  1939. DEFINE_EVENT(netdev_mac_evt, cfg80211_send_auth_timeout,
  1940. TP_PROTO(struct net_device *netdev, const u8 *mac),
  1941. TP_ARGS(netdev, mac)
  1942. );
  1943. DEFINE_EVENT(netdev_mac_evt, cfg80211_send_assoc_timeout,
  1944. TP_PROTO(struct net_device *netdev, const u8 *mac),
  1945. TP_ARGS(netdev, mac)
  1946. );
  1947. TRACE_EVENT(cfg80211_michael_mic_failure,
  1948. TP_PROTO(struct net_device *netdev, const u8 *addr,
  1949. enum nl80211_key_type key_type, int key_id, const u8 *tsc),
  1950. TP_ARGS(netdev, addr, key_type, key_id, tsc),
  1951. TP_STRUCT__entry(
  1952. NETDEV_ENTRY
  1953. MAC_ENTRY(addr)
  1954. __field(enum nl80211_key_type, key_type)
  1955. __field(int, key_id)
  1956. __array(u8, tsc, 6)
  1957. ),
  1958. TP_fast_assign(
  1959. NETDEV_ASSIGN;
  1960. MAC_ASSIGN(addr, addr);
  1961. __entry->key_type = key_type;
  1962. __entry->key_id = key_id;
  1963. if (tsc)
  1964. memcpy(__entry->tsc, tsc, 6);
  1965. ),
  1966. TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT ", key type: %d, key id: %d, tsc: %pm",
  1967. NETDEV_PR_ARG, MAC_PR_ARG(addr), __entry->key_type,
  1968. __entry->key_id, __entry->tsc)
  1969. );
  1970. TRACE_EVENT(cfg80211_ready_on_channel,
  1971. TP_PROTO(struct wireless_dev *wdev, u64 cookie,
  1972. struct ieee80211_channel *chan,
  1973. unsigned int duration),
  1974. TP_ARGS(wdev, cookie, chan, duration),
  1975. TP_STRUCT__entry(
  1976. WDEV_ENTRY
  1977. __field(u64, cookie)
  1978. CHAN_ENTRY
  1979. __field(unsigned int, duration)
  1980. ),
  1981. TP_fast_assign(
  1982. WDEV_ASSIGN;
  1983. __entry->cookie = cookie;
  1984. CHAN_ASSIGN(chan);
  1985. __entry->duration = duration;
  1986. ),
  1987. TP_printk(WDEV_PR_FMT ", cookie: %llu, " CHAN_PR_FMT ", duration: %u",
  1988. WDEV_PR_ARG, __entry->cookie, CHAN_PR_ARG,
  1989. __entry->duration)
  1990. );
  1991. TRACE_EVENT(cfg80211_ready_on_channel_expired,
  1992. TP_PROTO(struct wireless_dev *wdev, u64 cookie,
  1993. struct ieee80211_channel *chan),
  1994. TP_ARGS(wdev, cookie, chan),
  1995. TP_STRUCT__entry(
  1996. WDEV_ENTRY
  1997. __field(u64, cookie)
  1998. CHAN_ENTRY
  1999. ),
  2000. TP_fast_assign(
  2001. WDEV_ASSIGN;
  2002. __entry->cookie = cookie;
  2003. CHAN_ASSIGN(chan);
  2004. ),
  2005. TP_printk(WDEV_PR_FMT ", cookie: %llu, " CHAN_PR_FMT,
  2006. WDEV_PR_ARG, __entry->cookie, CHAN_PR_ARG)
  2007. );
  2008. TRACE_EVENT(cfg80211_new_sta,
  2009. TP_PROTO(struct net_device *netdev, const u8 *mac_addr,
  2010. struct station_info *sinfo),
  2011. TP_ARGS(netdev, mac_addr, sinfo),
  2012. TP_STRUCT__entry(
  2013. NETDEV_ENTRY
  2014. MAC_ENTRY(mac_addr)
  2015. SINFO_ENTRY
  2016. ),
  2017. TP_fast_assign(
  2018. NETDEV_ASSIGN;
  2019. MAC_ASSIGN(mac_addr, mac_addr);
  2020. SINFO_ASSIGN;
  2021. ),
  2022. TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT,
  2023. NETDEV_PR_ARG, MAC_PR_ARG(mac_addr))
  2024. );
  2025. DEFINE_EVENT(cfg80211_netdev_mac_evt, cfg80211_del_sta,
  2026. TP_PROTO(struct net_device *netdev, const u8 *macaddr),
  2027. TP_ARGS(netdev, macaddr)
  2028. );
  2029. TRACE_EVENT(cfg80211_rx_mgmt,
  2030. TP_PROTO(struct wireless_dev *wdev, int freq, int sig_mbm),
  2031. TP_ARGS(wdev, freq, sig_mbm),
  2032. TP_STRUCT__entry(
  2033. WDEV_ENTRY
  2034. __field(int, freq)
  2035. __field(int, sig_mbm)
  2036. ),
  2037. TP_fast_assign(
  2038. WDEV_ASSIGN;
  2039. __entry->freq = freq;
  2040. __entry->sig_mbm = sig_mbm;
  2041. ),
  2042. TP_printk(WDEV_PR_FMT ", freq: %d, sig mbm: %d",
  2043. WDEV_PR_ARG, __entry->freq, __entry->sig_mbm)
  2044. );
  2045. TRACE_EVENT(cfg80211_mgmt_tx_status,
  2046. TP_PROTO(struct wireless_dev *wdev, u64 cookie, bool ack),
  2047. TP_ARGS(wdev, cookie, ack),
  2048. TP_STRUCT__entry(
  2049. WDEV_ENTRY
  2050. __field(u64, cookie)
  2051. __field(bool, ack)
  2052. ),
  2053. TP_fast_assign(
  2054. WDEV_ASSIGN;
  2055. __entry->cookie = cookie;
  2056. __entry->ack = ack;
  2057. ),
  2058. TP_printk(WDEV_PR_FMT", cookie: %llu, ack: %s",
  2059. WDEV_PR_ARG, __entry->cookie, BOOL_TO_STR(__entry->ack))
  2060. );
  2061. TRACE_EVENT(cfg80211_cqm_rssi_notify,
  2062. TP_PROTO(struct net_device *netdev,
  2063. enum nl80211_cqm_rssi_threshold_event rssi_event),
  2064. TP_ARGS(netdev, rssi_event),
  2065. TP_STRUCT__entry(
  2066. NETDEV_ENTRY
  2067. __field(enum nl80211_cqm_rssi_threshold_event, rssi_event)
  2068. ),
  2069. TP_fast_assign(
  2070. NETDEV_ASSIGN;
  2071. __entry->rssi_event = rssi_event;
  2072. ),
  2073. TP_printk(NETDEV_PR_FMT ", rssi event: %d",
  2074. NETDEV_PR_ARG, __entry->rssi_event)
  2075. );
  2076. TRACE_EVENT(cfg80211_reg_can_beacon,
  2077. TP_PROTO(struct wiphy *wiphy, struct cfg80211_chan_def *chandef,
  2078. enum nl80211_iftype iftype),
  2079. TP_ARGS(wiphy, chandef, iftype),
  2080. TP_STRUCT__entry(
  2081. WIPHY_ENTRY
  2082. CHAN_DEF_ENTRY
  2083. __field(enum nl80211_iftype, iftype)
  2084. ),
  2085. TP_fast_assign(
  2086. WIPHY_ASSIGN;
  2087. CHAN_DEF_ASSIGN(chandef);
  2088. __entry->iftype = iftype;
  2089. ),
  2090. TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT ", iftype=%d",
  2091. WIPHY_PR_ARG, CHAN_DEF_PR_ARG, __entry->iftype)
  2092. );
  2093. TRACE_EVENT(cfg80211_chandef_dfs_required,
  2094. TP_PROTO(struct wiphy *wiphy, struct cfg80211_chan_def *chandef),
  2095. TP_ARGS(wiphy, chandef),
  2096. TP_STRUCT__entry(
  2097. WIPHY_ENTRY
  2098. CHAN_DEF_ENTRY
  2099. ),
  2100. TP_fast_assign(
  2101. WIPHY_ASSIGN;
  2102. CHAN_DEF_ASSIGN(chandef);
  2103. ),
  2104. TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT,
  2105. WIPHY_PR_ARG, CHAN_DEF_PR_ARG)
  2106. );
  2107. TRACE_EVENT(cfg80211_ch_switch_notify,
  2108. TP_PROTO(struct net_device *netdev,
  2109. struct cfg80211_chan_def *chandef),
  2110. TP_ARGS(netdev, chandef),
  2111. TP_STRUCT__entry(
  2112. NETDEV_ENTRY
  2113. CHAN_DEF_ENTRY
  2114. ),
  2115. TP_fast_assign(
  2116. NETDEV_ASSIGN;
  2117. CHAN_DEF_ASSIGN(chandef);
  2118. ),
  2119. TP_printk(NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT,
  2120. NETDEV_PR_ARG, CHAN_DEF_PR_ARG)
  2121. );
  2122. TRACE_EVENT(cfg80211_radar_event,
  2123. TP_PROTO(struct wiphy *wiphy, struct cfg80211_chan_def *chandef),
  2124. TP_ARGS(wiphy, chandef),
  2125. TP_STRUCT__entry(
  2126. WIPHY_ENTRY
  2127. CHAN_DEF_ENTRY
  2128. ),
  2129. TP_fast_assign(
  2130. WIPHY_ASSIGN;
  2131. CHAN_DEF_ASSIGN(chandef);
  2132. ),
  2133. TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT,
  2134. WIPHY_PR_ARG, CHAN_DEF_PR_ARG)
  2135. );
  2136. TRACE_EVENT(cfg80211_cac_event,
  2137. TP_PROTO(struct net_device *netdev, enum nl80211_radar_event evt),
  2138. TP_ARGS(netdev, evt),
  2139. TP_STRUCT__entry(
  2140. NETDEV_ENTRY
  2141. __field(enum nl80211_radar_event, evt)
  2142. ),
  2143. TP_fast_assign(
  2144. NETDEV_ASSIGN;
  2145. __entry->evt = evt;
  2146. ),
  2147. TP_printk(NETDEV_PR_FMT ", event: %d",
  2148. NETDEV_PR_ARG, __entry->evt)
  2149. );
  2150. DECLARE_EVENT_CLASS(cfg80211_rx_evt,
  2151. TP_PROTO(struct net_device *netdev, const u8 *addr),
  2152. TP_ARGS(netdev, addr),
  2153. TP_STRUCT__entry(
  2154. NETDEV_ENTRY
  2155. MAC_ENTRY(addr)
  2156. ),
  2157. TP_fast_assign(
  2158. NETDEV_ASSIGN;
  2159. MAC_ASSIGN(addr, addr);
  2160. ),
  2161. TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT, NETDEV_PR_ARG, MAC_PR_ARG(addr))
  2162. );
  2163. DEFINE_EVENT(cfg80211_rx_evt, cfg80211_rx_spurious_frame,
  2164. TP_PROTO(struct net_device *netdev, const u8 *addr),
  2165. TP_ARGS(netdev, addr)
  2166. );
  2167. DEFINE_EVENT(cfg80211_rx_evt, cfg80211_rx_unexpected_4addr_frame,
  2168. TP_PROTO(struct net_device *netdev, const u8 *addr),
  2169. TP_ARGS(netdev, addr)
  2170. );
  2171. TRACE_EVENT(cfg80211_ibss_joined,
  2172. TP_PROTO(struct net_device *netdev, const u8 *bssid,
  2173. struct ieee80211_channel *channel),
  2174. TP_ARGS(netdev, bssid, channel),
  2175. TP_STRUCT__entry(
  2176. NETDEV_ENTRY
  2177. MAC_ENTRY(bssid)
  2178. CHAN_ENTRY
  2179. ),
  2180. TP_fast_assign(
  2181. NETDEV_ASSIGN;
  2182. MAC_ASSIGN(bssid, bssid);
  2183. CHAN_ASSIGN(channel);
  2184. ),
  2185. TP_printk(NETDEV_PR_FMT ", bssid: " MAC_PR_FMT ", " CHAN_PR_FMT,
  2186. NETDEV_PR_ARG, MAC_PR_ARG(bssid), CHAN_PR_ARG)
  2187. );
  2188. TRACE_EVENT(cfg80211_probe_status,
  2189. TP_PROTO(struct net_device *netdev, const u8 *addr, u64 cookie,
  2190. bool acked),
  2191. TP_ARGS(netdev, addr, cookie, acked),
  2192. TP_STRUCT__entry(
  2193. NETDEV_ENTRY
  2194. MAC_ENTRY(addr)
  2195. __field(u64, cookie)
  2196. __field(bool, acked)
  2197. ),
  2198. TP_fast_assign(
  2199. NETDEV_ASSIGN;
  2200. MAC_ASSIGN(addr, addr);
  2201. __entry->cookie = cookie;
  2202. __entry->acked = acked;
  2203. ),
  2204. TP_printk(NETDEV_PR_FMT " addr:" MAC_PR_FMT ", cookie: %llu, acked: %s",
  2205. NETDEV_PR_ARG, MAC_PR_ARG(addr), __entry->cookie,
  2206. BOOL_TO_STR(__entry->acked))
  2207. );
  2208. TRACE_EVENT(cfg80211_cqm_pktloss_notify,
  2209. TP_PROTO(struct net_device *netdev, const u8 *peer, u32 num_packets),
  2210. TP_ARGS(netdev, peer, num_packets),
  2211. TP_STRUCT__entry(
  2212. NETDEV_ENTRY
  2213. MAC_ENTRY(peer)
  2214. __field(u32, num_packets)
  2215. ),
  2216. TP_fast_assign(
  2217. NETDEV_ASSIGN;
  2218. MAC_ASSIGN(peer, peer);
  2219. __entry->num_packets = num_packets;
  2220. ),
  2221. TP_printk(NETDEV_PR_FMT ", peer: " MAC_PR_FMT ", num of lost packets: %u",
  2222. NETDEV_PR_ARG, MAC_PR_ARG(peer), __entry->num_packets)
  2223. );
  2224. DEFINE_EVENT(cfg80211_netdev_mac_evt, cfg80211_gtk_rekey_notify,
  2225. TP_PROTO(struct net_device *netdev, const u8 *macaddr),
  2226. TP_ARGS(netdev, macaddr)
  2227. );
  2228. TRACE_EVENT(cfg80211_pmksa_candidate_notify,
  2229. TP_PROTO(struct net_device *netdev, int index, const u8 *bssid,
  2230. bool preauth),
  2231. TP_ARGS(netdev, index, bssid, preauth),
  2232. TP_STRUCT__entry(
  2233. NETDEV_ENTRY
  2234. __field(int, index)
  2235. MAC_ENTRY(bssid)
  2236. __field(bool, preauth)
  2237. ),
  2238. TP_fast_assign(
  2239. NETDEV_ASSIGN;
  2240. __entry->index = index;
  2241. MAC_ASSIGN(bssid, bssid);
  2242. __entry->preauth = preauth;
  2243. ),
  2244. TP_printk(NETDEV_PR_FMT ", index:%d, bssid: " MAC_PR_FMT ", pre auth: %s",
  2245. NETDEV_PR_ARG, __entry->index, MAC_PR_ARG(bssid),
  2246. BOOL_TO_STR(__entry->preauth))
  2247. );
  2248. TRACE_EVENT(cfg80211_report_obss_beacon,
  2249. TP_PROTO(struct wiphy *wiphy, const u8 *frame, size_t len,
  2250. int freq, int sig_dbm),
  2251. TP_ARGS(wiphy, frame, len, freq, sig_dbm),
  2252. TP_STRUCT__entry(
  2253. WIPHY_ENTRY
  2254. __field(int, freq)
  2255. __field(int, sig_dbm)
  2256. ),
  2257. TP_fast_assign(
  2258. WIPHY_ASSIGN;
  2259. __entry->freq = freq;
  2260. __entry->sig_dbm = sig_dbm;
  2261. ),
  2262. TP_printk(WIPHY_PR_FMT ", freq: %d, sig_dbm: %d",
  2263. WIPHY_PR_ARG, __entry->freq, __entry->sig_dbm)
  2264. );
  2265. TRACE_EVENT(cfg80211_tdls_oper_request,
  2266. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, const u8 *peer,
  2267. enum nl80211_tdls_operation oper, u16 reason_code),
  2268. TP_ARGS(wiphy, netdev, peer, oper, reason_code),
  2269. TP_STRUCT__entry(
  2270. WIPHY_ENTRY
  2271. NETDEV_ENTRY
  2272. MAC_ENTRY(peer)
  2273. __field(enum nl80211_tdls_operation, oper)
  2274. __field(u16, reason_code)
  2275. ),
  2276. TP_fast_assign(
  2277. WIPHY_ASSIGN;
  2278. NETDEV_ASSIGN;
  2279. MAC_ASSIGN(peer, peer);
  2280. __entry->oper = oper;
  2281. __entry->reason_code = reason_code;
  2282. ),
  2283. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", peer: " MAC_PR_FMT ", oper: %d, reason_code %u",
  2284. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer), __entry->oper,
  2285. __entry->reason_code)
  2286. );
  2287. TRACE_EVENT(cfg80211_scan_done,
  2288. TP_PROTO(struct cfg80211_scan_request *request, bool aborted),
  2289. TP_ARGS(request, aborted),
  2290. TP_STRUCT__entry(
  2291. __field(u32, n_channels)
  2292. __dynamic_array(u8, ie, request ? request->ie_len : 0)
  2293. __array(u32, rates, IEEE80211_NUM_BANDS)
  2294. __field(u32, wdev_id)
  2295. MAC_ENTRY(wiphy_mac)
  2296. __field(bool, no_cck)
  2297. __field(bool, aborted)
  2298. ),
  2299. TP_fast_assign(
  2300. if (request) {
  2301. memcpy(__get_dynamic_array(ie), request->ie,
  2302. request->ie_len);
  2303. memcpy(__entry->rates, request->rates,
  2304. IEEE80211_NUM_BANDS);
  2305. __entry->wdev_id = request->wdev ?
  2306. request->wdev->identifier : 0;
  2307. if (request->wiphy)
  2308. MAC_ASSIGN(wiphy_mac,
  2309. request->wiphy->perm_addr);
  2310. __entry->no_cck = request->no_cck;
  2311. }
  2312. __entry->aborted = aborted;
  2313. ),
  2314. TP_printk("aborted: %s", BOOL_TO_STR(__entry->aborted))
  2315. );
  2316. DEFINE_EVENT(wiphy_only_evt, cfg80211_sched_scan_results,
  2317. TP_PROTO(struct wiphy *wiphy),
  2318. TP_ARGS(wiphy)
  2319. );
  2320. DEFINE_EVENT(wiphy_only_evt, cfg80211_sched_scan_stopped,
  2321. TP_PROTO(struct wiphy *wiphy),
  2322. TP_ARGS(wiphy)
  2323. );
  2324. TRACE_EVENT(cfg80211_get_bss,
  2325. TP_PROTO(struct wiphy *wiphy, struct ieee80211_channel *channel,
  2326. const u8 *bssid, const u8 *ssid, size_t ssid_len,
  2327. u16 capa_mask, u16 capa_val),
  2328. TP_ARGS(wiphy, channel, bssid, ssid, ssid_len, capa_mask, capa_val),
  2329. TP_STRUCT__entry(
  2330. WIPHY_ENTRY
  2331. CHAN_ENTRY
  2332. MAC_ENTRY(bssid)
  2333. __dynamic_array(u8, ssid, ssid_len)
  2334. __field(u16, capa_mask)
  2335. __field(u16, capa_val)
  2336. ),
  2337. TP_fast_assign(
  2338. WIPHY_ASSIGN;
  2339. CHAN_ASSIGN(channel);
  2340. MAC_ASSIGN(bssid, bssid);
  2341. memcpy(__get_dynamic_array(ssid), ssid, ssid_len);
  2342. __entry->capa_mask = capa_mask;
  2343. __entry->capa_val = capa_val;
  2344. ),
  2345. TP_printk(WIPHY_PR_FMT ", " CHAN_PR_FMT ", " MAC_PR_FMT ", buf: %#.2x, "
  2346. "capa_mask: %d, capa_val: %u", WIPHY_PR_ARG, CHAN_PR_ARG,
  2347. MAC_PR_ARG(bssid), ((u8 *)__get_dynamic_array(ssid))[0],
  2348. __entry->capa_mask, __entry->capa_val)
  2349. );
  2350. TRACE_EVENT(cfg80211_inform_bss_width_frame,
  2351. TP_PROTO(struct wiphy *wiphy, struct ieee80211_channel *channel,
  2352. enum nl80211_bss_scan_width scan_width,
  2353. struct ieee80211_mgmt *mgmt, size_t len,
  2354. s32 signal),
  2355. TP_ARGS(wiphy, channel, scan_width, mgmt, len, signal),
  2356. TP_STRUCT__entry(
  2357. WIPHY_ENTRY
  2358. CHAN_ENTRY
  2359. __field(enum nl80211_bss_scan_width, scan_width)
  2360. __dynamic_array(u8, mgmt, len)
  2361. __field(s32, signal)
  2362. ),
  2363. TP_fast_assign(
  2364. WIPHY_ASSIGN;
  2365. CHAN_ASSIGN(channel);
  2366. __entry->scan_width = scan_width;
  2367. if (mgmt)
  2368. memcpy(__get_dynamic_array(mgmt), mgmt, len);
  2369. __entry->signal = signal;
  2370. ),
  2371. TP_printk(WIPHY_PR_FMT ", " CHAN_PR_FMT "(scan_width: %d) signal: %d",
  2372. WIPHY_PR_ARG, CHAN_PR_ARG, __entry->scan_width,
  2373. __entry->signal)
  2374. );
  2375. DECLARE_EVENT_CLASS(cfg80211_bss_evt,
  2376. TP_PROTO(struct cfg80211_bss *pub),
  2377. TP_ARGS(pub),
  2378. TP_STRUCT__entry(
  2379. MAC_ENTRY(bssid)
  2380. CHAN_ENTRY
  2381. ),
  2382. TP_fast_assign(
  2383. MAC_ASSIGN(bssid, pub->bssid);
  2384. CHAN_ASSIGN(pub->channel);
  2385. ),
  2386. TP_printk(MAC_PR_FMT ", " CHAN_PR_FMT, MAC_PR_ARG(bssid), CHAN_PR_ARG)
  2387. );
  2388. DEFINE_EVENT(cfg80211_bss_evt, cfg80211_return_bss,
  2389. TP_PROTO(struct cfg80211_bss *pub),
  2390. TP_ARGS(pub)
  2391. );
  2392. TRACE_EVENT(cfg80211_return_uint,
  2393. TP_PROTO(unsigned int ret),
  2394. TP_ARGS(ret),
  2395. TP_STRUCT__entry(
  2396. __field(unsigned int, ret)
  2397. ),
  2398. TP_fast_assign(
  2399. __entry->ret = ret;
  2400. ),
  2401. TP_printk("ret: %d", __entry->ret)
  2402. );
  2403. TRACE_EVENT(cfg80211_return_u32,
  2404. TP_PROTO(u32 ret),
  2405. TP_ARGS(ret),
  2406. TP_STRUCT__entry(
  2407. __field(u32, ret)
  2408. ),
  2409. TP_fast_assign(
  2410. __entry->ret = ret;
  2411. ),
  2412. TP_printk("ret: %u", __entry->ret)
  2413. );
  2414. TRACE_EVENT(cfg80211_report_wowlan_wakeup,
  2415. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev,
  2416. struct cfg80211_wowlan_wakeup *wakeup),
  2417. TP_ARGS(wiphy, wdev, wakeup),
  2418. TP_STRUCT__entry(
  2419. WIPHY_ENTRY
  2420. WDEV_ENTRY
  2421. __field(bool, non_wireless)
  2422. __field(bool, disconnect)
  2423. __field(bool, magic_pkt)
  2424. __field(bool, gtk_rekey_failure)
  2425. __field(bool, eap_identity_req)
  2426. __field(bool, four_way_handshake)
  2427. __field(bool, rfkill_release)
  2428. __field(s32, pattern_idx)
  2429. __field(u32, packet_len)
  2430. __dynamic_array(u8, packet,
  2431. wakeup ? wakeup->packet_present_len : 0)
  2432. ),
  2433. TP_fast_assign(
  2434. WIPHY_ASSIGN;
  2435. WDEV_ASSIGN;
  2436. __entry->non_wireless = !wakeup;
  2437. __entry->disconnect = wakeup ? wakeup->disconnect : false;
  2438. __entry->magic_pkt = wakeup ? wakeup->magic_pkt : false;
  2439. __entry->gtk_rekey_failure = wakeup ? wakeup->gtk_rekey_failure : false;
  2440. __entry->eap_identity_req = wakeup ? wakeup->eap_identity_req : false;
  2441. __entry->four_way_handshake = wakeup ? wakeup->four_way_handshake : false;
  2442. __entry->rfkill_release = wakeup ? wakeup->rfkill_release : false;
  2443. __entry->pattern_idx = wakeup ? wakeup->pattern_idx : false;
  2444. __entry->packet_len = wakeup ? wakeup->packet_len : false;
  2445. if (wakeup && wakeup->packet && wakeup->packet_present_len)
  2446. memcpy(__get_dynamic_array(packet), wakeup->packet,
  2447. wakeup->packet_present_len);
  2448. ),
  2449. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT, WIPHY_PR_ARG, WDEV_PR_ARG)
  2450. );
  2451. TRACE_EVENT(cfg80211_ft_event,
  2452. TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
  2453. struct cfg80211_ft_event_params *ft_event),
  2454. TP_ARGS(wiphy, netdev, ft_event),
  2455. TP_STRUCT__entry(
  2456. WIPHY_ENTRY
  2457. NETDEV_ENTRY
  2458. __dynamic_array(u8, ies, ft_event->ies_len)
  2459. MAC_ENTRY(target_ap)
  2460. __dynamic_array(u8, ric_ies, ft_event->ric_ies_len)
  2461. ),
  2462. TP_fast_assign(
  2463. WIPHY_ASSIGN;
  2464. NETDEV_ASSIGN;
  2465. if (ft_event->ies)
  2466. memcpy(__get_dynamic_array(ies), ft_event->ies,
  2467. ft_event->ies_len);
  2468. MAC_ASSIGN(target_ap, ft_event->target_ap);
  2469. if (ft_event->ric_ies)
  2470. memcpy(__get_dynamic_array(ric_ies), ft_event->ric_ies,
  2471. ft_event->ric_ies_len);
  2472. ),
  2473. TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", target_ap: " MAC_PR_FMT,
  2474. WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(target_ap))
  2475. );
  2476. TRACE_EVENT(cfg80211_stop_iface,
  2477. TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
  2478. TP_ARGS(wiphy, wdev),
  2479. TP_STRUCT__entry(
  2480. WIPHY_ENTRY
  2481. WDEV_ENTRY
  2482. ),
  2483. TP_fast_assign(
  2484. WIPHY_ASSIGN;
  2485. WDEV_ASSIGN;
  2486. ),
  2487. TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT,
  2488. WIPHY_PR_ARG, WDEV_PR_ARG)
  2489. );
  2490. #endif /* !__RDEV_OPS_TRACE || TRACE_HEADER_MULTI_READ */
  2491. #undef TRACE_INCLUDE_PATH
  2492. #define TRACE_INCLUDE_PATH .
  2493. #undef TRACE_INCLUDE_FILE
  2494. #define TRACE_INCLUDE_FILE trace
  2495. #include <trace/define_trace.h>