wl1251: fix a memory leak in probe
[safe/jmp/linux-2.6] / net / mac80211 / driver-trace.h
index 48c93d1..6a9b234 100644 (file)
@@ -5,7 +5,7 @@
 #include <net/mac80211.h>
 #include "ieee80211_i.h"
 
-#ifndef CONFIG_MAC80211_DRIVER_API_TRACER
+#if !defined(CONFIG_MAC80211_DRIVER_API_TRACER) || defined(__CHECKER__)
 #undef TRACE_EVENT
 #define TRACE_EVENT(name, proto, ...) \
 static inline void trace_ ## name(proto) {}
@@ -25,10 +25,16 @@ static inline void trace_ ## name(proto) {}
 #define STA_PR_FMT     " sta:%pM"
 #define STA_PR_ARG     __entry->sta_addr
 
-#define VIF_ENTRY      __field(enum nl80211_iftype, vif_type) __field(void *, vif)
-#define VIF_ASSIGN     __entry->vif_type = vif ? vif->type : 0; __entry->vif = vif
-#define VIF_PR_FMT     " vif:%p(%d)"
-#define VIF_PR_ARG     __entry->vif, __entry->vif_type
+#define VIF_ENTRY      __field(enum nl80211_iftype, vif_type) __field(void *, sdata) \
+                       __string(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
+#define VIF_ASSIGN     __entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \
+                       __assign_str(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
+#define VIF_PR_FMT     " vif:%s(%d)"
+#define VIF_PR_ARG     __get_str(vif_name), __entry->vif_type
+
+/*
+ * Tracing for driver callbacks.
+ */
 
 TRACE_EVENT(drv_start,
        TP_PROTO(struct ieee80211_local *local, int ret),
@@ -70,11 +76,10 @@ TRACE_EVENT(drv_stop,
 
 TRACE_EVENT(drv_add_interface,
        TP_PROTO(struct ieee80211_local *local,
-                const u8 *addr,
-                struct ieee80211_vif *vif,
+                struct ieee80211_sub_if_data *sdata,
                 int ret),
 
-       TP_ARGS(local, addr, vif, ret),
+       TP_ARGS(local, sdata, ret),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
@@ -86,7 +91,7 @@ TRACE_EVENT(drv_add_interface,
        TP_fast_assign(
                LOCAL_ASSIGN;
                VIF_ASSIGN;
-               memcpy(__entry->addr, addr, 6);
+               memcpy(__entry->addr, sdata->vif.addr, 6);
                __entry->ret = ret;
        ),
 
@@ -97,10 +102,9 @@ TRACE_EVENT(drv_add_interface,
 );
 
 TRACE_EVENT(drv_remove_interface,
-       TP_PROTO(struct ieee80211_local *local,
-                const u8 *addr, struct ieee80211_vif *vif),
+       TP_PROTO(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata),
 
-       TP_ARGS(local, addr, vif),
+       TP_ARGS(local, sdata),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
@@ -111,7 +115,7 @@ TRACE_EVENT(drv_remove_interface,
        TP_fast_assign(
                LOCAL_ASSIGN;
                VIF_ASSIGN;
-               memcpy(__entry->addr, addr, 6);
+               memcpy(__entry->addr, sdata->vif.addr, 6);
        ),
 
        TP_printk(
@@ -131,27 +135,47 @@ TRACE_EVENT(drv_config,
                LOCAL_ENTRY
                __field(u32, changed)
                __field(int, ret)
+               __field(u32, flags)
+               __field(int, power_level)
+               __field(int, dynamic_ps_timeout)
+               __field(int, max_sleep_period)
+               __field(u16, listen_interval)
+               __field(u8, long_frame_max_tx_count)
+               __field(u8, short_frame_max_tx_count)
+               __field(int, center_freq)
+               __field(int, channel_type)
+               __field(int, smps)
        ),
 
        TP_fast_assign(
                LOCAL_ASSIGN;
                __entry->changed = changed;
                __entry->ret = ret;
+               __entry->flags = local->hw.conf.flags;
+               __entry->power_level = local->hw.conf.power_level;
+               __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout;
+               __entry->max_sleep_period = local->hw.conf.max_sleep_period;
+               __entry->listen_interval = local->hw.conf.listen_interval;
+               __entry->long_frame_max_tx_count = local->hw.conf.long_frame_max_tx_count;
+               __entry->short_frame_max_tx_count = local->hw.conf.short_frame_max_tx_count;
+               __entry->center_freq = local->hw.conf.channel->center_freq;
+               __entry->channel_type = local->hw.conf.channel_type;
+               __entry->smps = local->hw.conf.smps_mode;
        ),
 
        TP_printk(
-               LOCAL_PR_FMT " ch:%#x ret:%d",
-               LOCAL_PR_ARG, __entry->changed, __entry->ret
+               LOCAL_PR_FMT " ch:%#x freq:%d ret:%d",
+               LOCAL_PR_ARG, __entry->changed, __entry->center_freq, __entry->ret
        )
 );
 
 TRACE_EVENT(drv_bss_info_changed,
        TP_PROTO(struct ieee80211_local *local,
-                struct ieee80211_vif *vif,
+                struct ieee80211_sub_if_data *sdata,
                 struct ieee80211_bss_conf *info,
                 u32 changed),
 
-       TP_ARGS(local, vif, info, changed),
+       TP_ARGS(local, sdata, info, changed),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
@@ -167,6 +191,8 @@ TRACE_EVENT(drv_bss_info_changed,
                __field(u64, timestamp)
                __field(u32, basic_rates)
                __field(u32, changed)
+               __field(bool, enable_beacon)
+               __field(u16, ht_operation_mode)
        ),
 
        TP_fast_assign(
@@ -183,6 +209,8 @@ TRACE_EVENT(drv_bss_info_changed,
                __entry->assoc_cap = info->assoc_capability;
                __entry->timestamp = info->timestamp;
                __entry->basic_rates = info->basic_rates;
+               __entry->enable_beacon = info->enable_beacon;
+               __entry->ht_operation_mode = info->ht_operation_mode;
        ),
 
        TP_printk(
@@ -191,31 +219,55 @@ TRACE_EVENT(drv_bss_info_changed,
        )
 );
 
+TRACE_EVENT(drv_prepare_multicast,
+       TP_PROTO(struct ieee80211_local *local, int mc_count, u64 ret),
+
+       TP_ARGS(local, mc_count, ret),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               __field(int, mc_count)
+               __field(u64, ret)
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               __entry->mc_count = mc_count;
+               __entry->ret = ret;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT " prepare mc (%d): %llx",
+               LOCAL_PR_ARG, __entry->mc_count,
+               (unsigned long long) __entry->ret
+       )
+);
+
 TRACE_EVENT(drv_configure_filter,
        TP_PROTO(struct ieee80211_local *local,
                 unsigned int changed_flags,
                 unsigned int *total_flags,
-                int mc_count),
+                u64 multicast),
 
-       TP_ARGS(local, changed_flags, total_flags, mc_count),
+       TP_ARGS(local, changed_flags, total_flags, multicast),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
                __field(unsigned int, changed)
                __field(unsigned int, total)
-               __field(int, mc)
+               __field(u64, multicast)
        ),
 
        TP_fast_assign(
                LOCAL_ASSIGN;
                __entry->changed = changed_flags;
                __entry->total = *total_flags;
-               __entry->mc = mc_count;
+               __entry->multicast = multicast;
        ),
 
        TP_printk(
-               LOCAL_PR_FMT " changed:%#x total:%#x mc:%d",
-               LOCAL_PR_ARG, __entry->changed, __entry->total, __entry->mc
+               LOCAL_PR_FMT " changed:%#x total:%#x",
+               LOCAL_PR_ARG, __entry->changed, __entry->total
        )
 );
 
@@ -247,11 +299,11 @@ TRACE_EVENT(drv_set_tim,
 
 TRACE_EVENT(drv_set_key,
        TP_PROTO(struct ieee80211_local *local,
-                enum set_key_cmd cmd, struct ieee80211_vif *vif,
+                enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata,
                 struct ieee80211_sta *sta,
                 struct ieee80211_key_conf *key, int ret),
 
-       TP_ARGS(local, cmd, vif, sta, key, ret),
+       TP_ARGS(local, cmd, sdata, sta, key, ret),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
@@ -283,48 +335,54 @@ TRACE_EVENT(drv_set_key,
 
 TRACE_EVENT(drv_update_tkip_key,
        TP_PROTO(struct ieee80211_local *local,
+                struct ieee80211_sub_if_data *sdata,
                 struct ieee80211_key_conf *conf,
-                const u8 *address, u32 iv32),
+                struct ieee80211_sta *sta, u32 iv32),
 
-       TP_ARGS(local, conf, address, iv32),
+       TP_ARGS(local, sdata, conf, sta, iv32),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
-               __array(u8, addr, 6)
+               VIF_ENTRY
+               STA_ENTRY
                __field(u32, iv32)
        ),
 
        TP_fast_assign(
                LOCAL_ASSIGN;
-               memcpy(__entry->addr, address, 6);
+               VIF_ASSIGN;
+               STA_ASSIGN;
                __entry->iv32 = iv32;
        ),
 
        TP_printk(
-               LOCAL_PR_FMT " addr:%pM iv32:%#x",
-               LOCAL_PR_ARG, __entry->addr, __entry->iv32
+               LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x",
+               LOCAL_PR_ARG,VIF_PR_ARG,STA_PR_ARG, __entry->iv32
        )
 );
 
 TRACE_EVENT(drv_hw_scan,
        TP_PROTO(struct ieee80211_local *local,
+                struct ieee80211_sub_if_data *sdata,
                 struct cfg80211_scan_request *req, int ret),
 
-       TP_ARGS(local, req, ret),
+       TP_ARGS(local, sdata, req, ret),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
+               VIF_ENTRY
                __field(int, ret)
        ),
 
        TP_fast_assign(
                LOCAL_ASSIGN;
+               VIF_ASSIGN;
                __entry->ret = ret;
        ),
 
        TP_printk(
-               LOCAL_PR_FMT " ret:%d",
-               LOCAL_PR_ARG, __entry->ret
+               LOCAL_PR_FMT VIF_PR_FMT " ret:%d",
+               LOCAL_PR_ARG,VIF_PR_ARG, __entry->ret
        )
 );
 
@@ -443,13 +501,36 @@ TRACE_EVENT(drv_set_rts_threshold,
        )
 );
 
+TRACE_EVENT(drv_set_coverage_class,
+       TP_PROTO(struct ieee80211_local *local, u8 value, int ret),
+
+       TP_ARGS(local, value, ret),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               __field(u8, value)
+               __field(int, ret)
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               __entry->ret = ret;
+               __entry->value = value;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT " value:%d ret:%d",
+               LOCAL_PR_ARG, __entry->value, __entry->ret
+       )
+);
+
 TRACE_EVENT(drv_sta_notify,
        TP_PROTO(struct ieee80211_local *local,
-                struct ieee80211_vif *vif,
+                struct ieee80211_sub_if_data *sdata,
                 enum sta_notify_cmd cmd,
                 struct ieee80211_sta *sta),
 
-       TP_ARGS(local, vif, cmd, sta),
+       TP_ARGS(local, sdata, cmd, sta),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
@@ -471,59 +552,88 @@ TRACE_EVENT(drv_sta_notify,
        )
 );
 
-TRACE_EVENT(drv_conf_tx,
-       TP_PROTO(struct ieee80211_local *local, u16 queue,
-                const struct ieee80211_tx_queue_params *params,
-                int ret),
+TRACE_EVENT(drv_sta_add,
+       TP_PROTO(struct ieee80211_local *local,
+                struct ieee80211_sub_if_data *sdata,
+                struct ieee80211_sta *sta, int ret),
 
-       TP_ARGS(local, queue, params, ret),
+       TP_ARGS(local, sdata, sta, ret),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
-               __field(u16, queue)
-               __field(u16, txop)
-               __field(u16, cw_min)
-               __field(u16, cw_max)
-               __field(u8, aifs)
+               VIF_ENTRY
+               STA_ENTRY
                __field(int, ret)
        ),
 
        TP_fast_assign(
                LOCAL_ASSIGN;
-               __entry->queue = queue;
+               VIF_ASSIGN;
+               STA_ASSIGN;
                __entry->ret = ret;
-               __entry->txop = params->txop;
-               __entry->cw_max = params->cw_max;
-               __entry->cw_min = params->cw_min;
-               __entry->aifs = params->aifs;
        ),
 
        TP_printk(
-               LOCAL_PR_FMT " queue:%d ret:%d",
-               LOCAL_PR_ARG, __entry->queue, __entry->ret
+               LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " ret:%d",
+               LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ret
        )
 );
 
-TRACE_EVENT(drv_get_tx_stats,
+TRACE_EVENT(drv_sta_remove,
        TP_PROTO(struct ieee80211_local *local,
-                struct ieee80211_tx_queue_stats *stats,
+                struct ieee80211_sub_if_data *sdata,
+                struct ieee80211_sta *sta),
+
+       TP_ARGS(local, sdata, sta),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               VIF_ENTRY
+               STA_ENTRY
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               VIF_ASSIGN;
+               STA_ASSIGN;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
+               LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
+       )
+);
+
+TRACE_EVENT(drv_conf_tx,
+       TP_PROTO(struct ieee80211_local *local, u16 queue,
+                const struct ieee80211_tx_queue_params *params,
                 int ret),
 
-       TP_ARGS(local, stats, ret),
+       TP_ARGS(local, queue, params, ret),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
+               __field(u16, queue)
+               __field(u16, txop)
+               __field(u16, cw_min)
+               __field(u16, cw_max)
+               __field(u8, aifs)
                __field(int, ret)
        ),
 
        TP_fast_assign(
                LOCAL_ASSIGN;
+               __entry->queue = queue;
                __entry->ret = ret;
+               __entry->txop = params->txop;
+               __entry->cw_max = params->cw_max;
+               __entry->cw_min = params->cw_min;
+               __entry->aifs = params->aifs;
        ),
 
        TP_printk(
-               LOCAL_PR_FMT " ret:%d",
-               LOCAL_PR_ARG, __entry->ret
+               LOCAL_PR_FMT " queue:%d ret:%d",
+               LOCAL_PR_ARG, __entry->queue, __entry->ret
        )
 );
 
@@ -610,11 +720,12 @@ TRACE_EVENT(drv_tx_last_beacon,
 
 TRACE_EVENT(drv_ampdu_action,
        TP_PROTO(struct ieee80211_local *local,
+                struct ieee80211_sub_if_data *sdata,
                 enum ieee80211_ampdu_mlme_action action,
                 struct ieee80211_sta *sta, u16 tid,
                 u16 *ssn, int ret),
 
-       TP_ARGS(local, action, sta, tid, ssn, ret),
+       TP_ARGS(local, sdata, action, sta, tid, ssn, ret),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
@@ -623,23 +734,366 @@ TRACE_EVENT(drv_ampdu_action,
                __field(u16, tid)
                __field(u16, ssn)
                __field(int, ret)
+               VIF_ENTRY
        ),
 
        TP_fast_assign(
                LOCAL_ASSIGN;
+               VIF_ASSIGN;
                STA_ASSIGN;
                __entry->ret = ret;
                __entry->action = action;
                __entry->tid = tid;
-               __entry->ssn = *ssn;
+               __entry->ssn = ssn ? *ssn : 0;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d ret:%d",
+               LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action, __entry->tid, __entry->ret
+       )
+);
+
+TRACE_EVENT(drv_flush,
+       TP_PROTO(struct ieee80211_local *local, bool drop),
+
+       TP_ARGS(local, drop),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               __field(bool, drop)
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               __entry->drop = drop;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT " drop:%d",
+               LOCAL_PR_ARG, __entry->drop
+       )
+);
+
+TRACE_EVENT(drv_channel_switch,
+       TP_PROTO(struct ieee80211_local *local,
+                struct ieee80211_channel_switch *ch_switch),
+
+       TP_ARGS(local, ch_switch),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               __field(u64, timestamp)
+               __field(bool, block_tx)
+               __field(u16, freq)
+               __field(u8, count)
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               __entry->timestamp = ch_switch->timestamp;
+               __entry->block_tx = ch_switch->block_tx;
+               __entry->freq = ch_switch->channel->center_freq;
+               __entry->count = ch_switch->count;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT " new freq:%u count:%d",
+               LOCAL_PR_ARG, __entry->freq, __entry->count
+       )
+);
+
+/*
+ * Tracing for API calls that drivers call.
+ */
+
+TRACE_EVENT(api_start_tx_ba_session,
+       TP_PROTO(struct ieee80211_sta *sta, u16 tid),
+
+       TP_ARGS(sta, tid),
+
+       TP_STRUCT__entry(
+               STA_ENTRY
+               __field(u16, tid)
+       ),
+
+       TP_fast_assign(
+               STA_ASSIGN;
+               __entry->tid = tid;
+       ),
+
+       TP_printk(
+               STA_PR_FMT " tid:%d",
+               STA_PR_ARG, __entry->tid
+       )
+);
+
+TRACE_EVENT(api_start_tx_ba_cb,
+       TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
+
+       TP_ARGS(sdata, ra, tid),
+
+       TP_STRUCT__entry(
+               VIF_ENTRY
+               __array(u8, ra, ETH_ALEN)
+               __field(u16, tid)
+       ),
+
+       TP_fast_assign(
+               VIF_ASSIGN;
+               memcpy(__entry->ra, ra, ETH_ALEN);
+               __entry->tid = tid;
+       ),
+
+       TP_printk(
+               VIF_PR_FMT " ra:%pM tid:%d",
+               VIF_PR_ARG, __entry->ra, __entry->tid
+       )
+);
+
+TRACE_EVENT(api_stop_tx_ba_session,
+       TP_PROTO(struct ieee80211_sta *sta, u16 tid, u16 initiator),
+
+       TP_ARGS(sta, tid, initiator),
+
+       TP_STRUCT__entry(
+               STA_ENTRY
+               __field(u16, tid)
+               __field(u16, initiator)
+       ),
+
+       TP_fast_assign(
+               STA_ASSIGN;
+               __entry->tid = tid;
+               __entry->initiator = initiator;
+       ),
+
+       TP_printk(
+               STA_PR_FMT " tid:%d initiator:%d",
+               STA_PR_ARG, __entry->tid, __entry->initiator
+       )
+);
+
+TRACE_EVENT(api_stop_tx_ba_cb,
+       TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
+
+       TP_ARGS(sdata, ra, tid),
+
+       TP_STRUCT__entry(
+               VIF_ENTRY
+               __array(u8, ra, ETH_ALEN)
+               __field(u16, tid)
+       ),
+
+       TP_fast_assign(
+               VIF_ASSIGN;
+               memcpy(__entry->ra, ra, ETH_ALEN);
+               __entry->tid = tid;
+       ),
+
+       TP_printk(
+               VIF_PR_FMT " ra:%pM tid:%d",
+               VIF_PR_ARG, __entry->ra, __entry->tid
+       )
+);
+
+TRACE_EVENT(api_restart_hw,
+       TP_PROTO(struct ieee80211_local *local),
+
+       TP_ARGS(local),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT,
+               LOCAL_PR_ARG
+       )
+);
+
+TRACE_EVENT(api_beacon_loss,
+       TP_PROTO(struct ieee80211_sub_if_data *sdata),
+
+       TP_ARGS(sdata),
+
+       TP_STRUCT__entry(
+               VIF_ENTRY
+       ),
+
+       TP_fast_assign(
+               VIF_ASSIGN;
+       ),
+
+       TP_printk(
+               VIF_PR_FMT,
+               VIF_PR_ARG
+       )
+);
+
+TRACE_EVENT(api_connection_loss,
+       TP_PROTO(struct ieee80211_sub_if_data *sdata),
+
+       TP_ARGS(sdata),
+
+       TP_STRUCT__entry(
+               VIF_ENTRY
+       ),
+
+       TP_fast_assign(
+               VIF_ASSIGN;
+       ),
+
+       TP_printk(
+               VIF_PR_FMT,
+               VIF_PR_ARG
+       )
+);
+
+TRACE_EVENT(api_cqm_rssi_notify,
+       TP_PROTO(struct ieee80211_sub_if_data *sdata,
+                enum nl80211_cqm_rssi_threshold_event rssi_event),
+
+       TP_ARGS(sdata, rssi_event),
+
+       TP_STRUCT__entry(
+               VIF_ENTRY
+               __field(u32, rssi_event)
+       ),
+
+       TP_fast_assign(
+               VIF_ASSIGN;
+               __entry->rssi_event = rssi_event;
+       ),
+
+       TP_printk(
+               VIF_PR_FMT " event:%d",
+               VIF_PR_ARG, __entry->rssi_event
+       )
+);
+
+TRACE_EVENT(api_scan_completed,
+       TP_PROTO(struct ieee80211_local *local, bool aborted),
+
+       TP_ARGS(local, aborted),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               __field(bool, aborted)
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               __entry->aborted = aborted;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT " aborted:%d",
+               LOCAL_PR_ARG, __entry->aborted
+       )
+);
+
+TRACE_EVENT(api_sta_block_awake,
+       TP_PROTO(struct ieee80211_local *local,
+                struct ieee80211_sta *sta, bool block),
+
+       TP_ARGS(local, sta, block),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               STA_ENTRY
+               __field(bool, block)
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               STA_ASSIGN;
+               __entry->block = block;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT STA_PR_FMT " block:%d",
+               LOCAL_PR_ARG, STA_PR_FMT, __entry->block
+       )
+);
+
+TRACE_EVENT(api_chswitch_done,
+       TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
+
+       TP_ARGS(sdata, success),
+
+       TP_STRUCT__entry(
+               VIF_ENTRY
+               __field(bool, success)
+       ),
+
+       TP_fast_assign(
+               VIF_ASSIGN;
+               __entry->success = success;
+       ),
+
+       TP_printk(
+               VIF_PR_FMT " success=%d",
+               VIF_PR_ARG, __entry->success
+       )
+);
+
+/*
+ * Tracing for internal functions
+ * (which may also be called in response to driver calls)
+ */
+
+TRACE_EVENT(wake_queue,
+       TP_PROTO(struct ieee80211_local *local, u16 queue,
+                enum queue_stop_reason reason),
+
+       TP_ARGS(local, queue, reason),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               __field(u16, queue)
+               __field(u32, reason)
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               __entry->queue = queue;
+               __entry->reason = reason;
+       ),
+
+       TP_printk(
+               LOCAL_PR_FMT " queue:%d, reason:%d",
+               LOCAL_PR_ARG, __entry->queue, __entry->reason
+       )
+);
+
+TRACE_EVENT(stop_queue,
+       TP_PROTO(struct ieee80211_local *local, u16 queue,
+                enum queue_stop_reason reason),
+
+       TP_ARGS(local, queue, reason),
+
+       TP_STRUCT__entry(
+               LOCAL_ENTRY
+               __field(u16, queue)
+               __field(u32, reason)
+       ),
+
+       TP_fast_assign(
+               LOCAL_ASSIGN;
+               __entry->queue = queue;
+               __entry->reason = reason;
        ),
 
        TP_printk(
-               LOCAL_PR_FMT  STA_PR_FMT " action:%d tid:%d ret:%d",
-               LOCAL_PR_ARG, STA_PR_ARG, __entry->action, __entry->tid, __entry->ret
+               LOCAL_PR_FMT " queue:%d, reason:%d",
+               LOCAL_PR_ARG, __entry->queue, __entry->reason
        )
 );
-#endif /* __MAC80211_DRIVER_TRACE */
+#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
 
 #undef TRACE_INCLUDE_PATH
 #define TRACE_INCLUDE_PATH .