#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
 
 #include <linux/tracepoint.h>
+#include "core.h"
 
 #define _TRACE_H_
 
 #define ATH10K_MSG_MAX 200
 
 DECLARE_EVENT_CLASS(ath10k_log_event,
-       TP_PROTO(struct va_format *vaf),
-       TP_ARGS(vaf),
+       TP_PROTO(struct ath10k *ar, struct va_format *vaf),
+       TP_ARGS(ar, vaf),
        TP_STRUCT__entry(
+               __string(device, dev_name(ar->dev))
+               __string(driver, dev_driver_string(ar->dev))
                __dynamic_array(char, msg, ATH10K_MSG_MAX)
        ),
        TP_fast_assign(
+               __assign_str(device, dev_name(ar->dev));
+               __assign_str(driver, dev_driver_string(ar->dev));
                WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
                                       ATH10K_MSG_MAX,
                                       vaf->fmt,
                                       *vaf->va) >= ATH10K_MSG_MAX);
        ),
-       TP_printk("%s", __get_str(msg))
+       TP_printk(
+               "%s %s %s",
+               __get_str(driver),
+               __get_str(device),
+               __get_str(msg)
+       )
 );
 
 DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
-            TP_PROTO(struct va_format *vaf),
-            TP_ARGS(vaf)
+            TP_PROTO(struct ath10k *ar, struct va_format *vaf),
+            TP_ARGS(ar, vaf)
 );
 
 DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
-            TP_PROTO(struct va_format *vaf),
-            TP_ARGS(vaf)
+            TP_PROTO(struct ath10k *ar, struct va_format *vaf),
+            TP_ARGS(ar, vaf)
 );
 
 DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
-            TP_PROTO(struct va_format *vaf),
-            TP_ARGS(vaf)
+            TP_PROTO(struct ath10k *ar, struct va_format *vaf),
+            TP_ARGS(ar, vaf)
 );
 
 TRACE_EVENT(ath10k_log_dbg,
-       TP_PROTO(unsigned int level, struct va_format *vaf),
-       TP_ARGS(level, vaf),
+       TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
+       TP_ARGS(ar, level, vaf),
        TP_STRUCT__entry(
+               __string(device, dev_name(ar->dev))
+               __string(driver, dev_driver_string(ar->dev))
                __field(unsigned int, level)
                __dynamic_array(char, msg, ATH10K_MSG_MAX)
        ),
        TP_fast_assign(
+               __assign_str(device, dev_name(ar->dev));
+               __assign_str(driver, dev_driver_string(ar->dev));
                __entry->level = level;
                WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
                                       ATH10K_MSG_MAX,
                                       vaf->fmt,
                                       *vaf->va) >= ATH10K_MSG_MAX);
        ),
-       TP_printk("%s", __get_str(msg))
+       TP_printk(
+               "%s %s %s",
+               __get_str(driver),
+               __get_str(device),
+               __get_str(msg)
+       )
 );
 
 TRACE_EVENT(ath10k_log_dbg_dump,
-       TP_PROTO(const char *msg, const char *prefix,
+       TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
                 const void *buf, size_t buf_len),
 
-       TP_ARGS(msg, prefix, buf, buf_len),
+       TP_ARGS(ar, msg, prefix, buf, buf_len),
 
        TP_STRUCT__entry(
+               __string(device, dev_name(ar->dev))
+               __string(driver, dev_driver_string(ar->dev))
                __string(msg, msg)
                __string(prefix, prefix)
                __field(size_t, buf_len)
        ),
 
        TP_fast_assign(
+               __assign_str(device, dev_name(ar->dev));
+               __assign_str(driver, dev_driver_string(ar->dev));
                __assign_str(msg, msg);
                __assign_str(prefix, prefix);
                __entry->buf_len = buf_len;
        ),
 
        TP_printk(
-               "%s/%s\n", __get_str(prefix), __get_str(msg)
+               "%s %s %s/%s\n",
+               __get_str(driver),
+               __get_str(device),
+               __get_str(prefix),
+               __get_str(msg)
        )
 );
 
 TRACE_EVENT(ath10k_wmi_cmd,
-       TP_PROTO(int id, void *buf, size_t buf_len, int ret),
+       TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len, int ret),
 
-       TP_ARGS(id, buf, buf_len, ret),
+       TP_ARGS(ar, id, buf, buf_len, ret),
 
        TP_STRUCT__entry(
+               __string(device, dev_name(ar->dev))
+               __string(driver, dev_driver_string(ar->dev))
                __field(unsigned int, id)
                __field(size_t, buf_len)
                __dynamic_array(u8, buf, buf_len)
        ),
 
        TP_fast_assign(
+               __assign_str(device, dev_name(ar->dev));
+               __assign_str(driver, dev_driver_string(ar->dev));
                __entry->id = id;
                __entry->buf_len = buf_len;
                __entry->ret = ret;
        ),
 
        TP_printk(
-               "id %d len %zu ret %d",
+               "%s %s id %d len %zu ret %d",
+               __get_str(driver),
+               __get_str(device),
                __entry->id,
                __entry->buf_len,
                __entry->ret
 );
 
 TRACE_EVENT(ath10k_wmi_event,
-       TP_PROTO(int id, void *buf, size_t buf_len),
+       TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len),
 
-       TP_ARGS(id, buf, buf_len),
+       TP_ARGS(ar, id, buf, buf_len),
 
        TP_STRUCT__entry(
+               __string(device, dev_name(ar->dev))
+               __string(driver, dev_driver_string(ar->dev))
                __field(unsigned int, id)
                __field(size_t, buf_len)
                __dynamic_array(u8, buf, buf_len)
        ),
 
        TP_fast_assign(
+               __assign_str(device, dev_name(ar->dev));
+               __assign_str(driver, dev_driver_string(ar->dev));
                __entry->id = id;
                __entry->buf_len = buf_len;
                memcpy(__get_dynamic_array(buf), buf, buf_len);
        ),
 
        TP_printk(
-               "id %d len %zu",
+               "%s %s id %d len %zu",
+               __get_str(driver),
+               __get_str(device),
                __entry->id,
                __entry->buf_len
        )
 );
 
 TRACE_EVENT(ath10k_htt_stats,
-       TP_PROTO(void *buf, size_t buf_len),
+       TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
 
-       TP_ARGS(buf, buf_len),
+       TP_ARGS(ar, buf, buf_len),
 
        TP_STRUCT__entry(
+               __string(device, dev_name(ar->dev))
+               __string(driver, dev_driver_string(ar->dev))
                __field(size_t, buf_len)
                __dynamic_array(u8, buf, buf_len)
        ),
 
        TP_fast_assign(
+               __assign_str(device, dev_name(ar->dev));
+               __assign_str(driver, dev_driver_string(ar->dev));
                __entry->buf_len = buf_len;
                memcpy(__get_dynamic_array(buf), buf, buf_len);
        ),
 
        TP_printk(
-               "len %zu",
+               "%s %s len %zu",
+               __get_str(driver),
+               __get_str(device),
                __entry->buf_len
        )
 );
 
 TRACE_EVENT(ath10k_wmi_dbglog,
-       TP_PROTO(void *buf, size_t buf_len),
+       TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
 
-       TP_ARGS(buf, buf_len),
+       TP_ARGS(ar, buf, buf_len),
 
        TP_STRUCT__entry(
+               __string(device, dev_name(ar->dev))
+               __string(driver, dev_driver_string(ar->dev))
                __field(size_t, buf_len)
                __dynamic_array(u8, buf, buf_len)
        ),
 
        TP_fast_assign(
+               __assign_str(device, dev_name(ar->dev));
+               __assign_str(driver, dev_driver_string(ar->dev));
                __entry->buf_len = buf_len;
                memcpy(__get_dynamic_array(buf), buf, buf_len);
        ),
 
        TP_printk(
-               "len %zu",
+               "%s %s len %zu",
+               __get_str(driver),
+               __get_str(device),
                __entry->buf_len
        )
 );
 
 
        memset(skb_cb, 0, sizeof(*skb_cb));
        ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb);
-       trace_ath10k_wmi_cmd(cmd_id, skb->data, skb->len, ret);
+       trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len, ret);
 
        if (ret)
                goto err_pull;
        ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi event debug mesg len %d\n",
                   skb->len);
 
-       trace_ath10k_wmi_dbglog(skb->data, skb->len);
+       trace_ath10k_wmi_dbglog(ar, skb->data, skb->len);
 
        return 0;
 }
        if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
                return;
 
-       trace_ath10k_wmi_event(id, skb->data, skb->len);
+       trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
 
        switch (id) {
        case WMI_MGMT_RX_EVENTID:
        if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
                return;
 
-       trace_ath10k_wmi_event(id, skb->data, skb->len);
+       trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
 
        switch (id) {
        case WMI_10X_MGMT_RX_EVENTID:
        if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
                return;
 
-       trace_ath10k_wmi_event(id, skb->data, skb->len);
+       trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
 
        switch (id) {
        case WMI_10_2_MGMT_RX_EVENTID: