ath6kl: add tracing points for sdio transfers
authorKalle Valo <kvalo@qca.qualcomm.com>
Mon, 18 Mar 2013 11:42:20 +0000 (13:42 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Mon, 18 Mar 2013 11:42:20 +0000 (13:42 +0200)
Add tracing points for sdio transfers, just dump the address, flags and the
buffer.

Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/sdio.c
drivers/net/wireless/ath/ath6kl/trace.c
drivers/net/wireless/ath/ath6kl/trace.h

index 0bd8ff69461a2fd0afdbce891bcd14047872e78c..fb141454c6d2f3c9de1d82135aeace81b69276fd 100644 (file)
@@ -28,6 +28,7 @@
 #include "target.h"
 #include "debug.h"
 #include "cfg80211.h"
+#include "trace.h"
 
 struct ath6kl_sdio {
        struct sdio_func *func;
@@ -179,6 +180,8 @@ static int ath6kl_sdio_io(struct sdio_func *func, u32 request, u32 addr,
                   request & HIF_FIXED_ADDRESS ? " (fixed)" : "", buf, len);
        ath6kl_dbg_dump(ATH6KL_DBG_SDIO_DUMP, NULL, "sdio ", buf, len);
 
+       trace_ath6kl_sdio(addr, request, buf, len);
+
        return ret;
 }
 
@@ -309,6 +312,13 @@ static int ath6kl_sdio_scat_rw(struct ath6kl_sdio *ar_sdio,
        sdio_claim_host(ar_sdio->func);
 
        mmc_set_data_timeout(&data, ar_sdio->func->card);
+
+       trace_ath6kl_sdio_scat(scat_req->addr,
+                              scat_req->req,
+                              scat_req->len,
+                              scat_req->scat_entries,
+                              scat_req->scat_list);
+
        /* synchronous call to process request */
        mmc_wait_for_req(ar_sdio->func->card->host, &mmc_req);
 
index 4118a29500c17f6ffdb7af5cb4890383d1e2c20e..e7d64b1285cb8c22706451bdcb2d72a9dd077754 100644 (file)
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <linux/module.h>
+
 #define CREATE_TRACE_POINTS
 #include "trace.h"
+
+EXPORT_TRACEPOINT_SYMBOL(ath6kl_sdio);
+EXPORT_TRACEPOINT_SYMBOL(ath6kl_sdio_scat);
index 07876190ce056b710c33731a7c861ba65024ee57..9db616c2ac96596f522df6c7b583f2a4ec5f3329 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/skbuff.h>
 #include <linux/tracepoint.h>
 #include "wmi.h"
+#include "hif.h"
 
 #if !defined(_ATH6KL_TRACE_H)
 static inline unsigned int ath6kl_get_wmi_id(void *buf, size_t buf_len)
@@ -75,6 +76,95 @@ TRACE_EVENT(ath6kl_wmi_event,
        )
 );
 
+TRACE_EVENT(ath6kl_sdio,
+       TP_PROTO(unsigned int addr, int flags,
+                void *buf, size_t buf_len),
+
+       TP_ARGS(addr, flags, buf, buf_len),
+
+       TP_STRUCT__entry(
+               __field(unsigned int, tx)
+               __field(unsigned int, addr)
+               __field(int, flags)
+               __field(size_t, buf_len)
+               __dynamic_array(u8, buf, buf_len)
+       ),
+
+       TP_fast_assign(
+               __entry->addr = addr;
+               __entry->flags = flags;
+               __entry->buf_len = buf_len;
+               memcpy(__get_dynamic_array(buf), buf, buf_len);
+
+               if (flags & HIF_WRITE)
+                       __entry->tx = 1;
+               else
+                       __entry->tx = 0;
+       ),
+
+       TP_printk(
+               "%s addr 0x%x flags 0x%x len %d\n",
+               __entry->tx ? "tx" : "rx",
+               __entry->addr,
+               __entry->flags,
+               __entry->buf_len
+       )
+);
+
+TRACE_EVENT(ath6kl_sdio_scat,
+       TP_PROTO(unsigned int addr, int flags, unsigned int total_len,
+                unsigned int entries, struct hif_scatter_item *list),
+
+       TP_ARGS(addr, flags, total_len, entries, list),
+
+       TP_STRUCT__entry(
+               __field(unsigned int, tx)
+               __field(unsigned int, addr)
+               __field(int, flags)
+               __field(unsigned int, entries)
+               __field(size_t, total_len)
+               __dynamic_array(unsigned int, len_array, entries)
+               __dynamic_array(u8, data, total_len)
+       ),
+
+       TP_fast_assign(
+               unsigned int *len_array;
+               int i, offset = 0;
+               size_t len;
+
+               __entry->addr = addr;
+               __entry->flags = flags;
+               __entry->entries = entries;
+               __entry->total_len = total_len;
+
+               if (flags & HIF_WRITE)
+                       __entry->tx = 1;
+               else
+                       __entry->tx = 0;
+
+               len_array = __get_dynamic_array(len_array);
+
+               for (i = 0; i < entries; i++) {
+                       len = list[i].len;
+
+                       memcpy((u8 *) __get_dynamic_array(data) + offset,
+                              list[i].buf, len);
+
+                       len_array[i] = len;
+                       offset += len;
+               }
+       ),
+
+       TP_printk(
+               "%s addr 0x%x flags 0x%x entries %d total_len %d\n",
+               __entry->tx ? "tx" : "rx",
+               __entry->addr,
+               __entry->flags,
+               __entry->entries,
+               __entry->total_len
+       )
+);
+
 #endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/
 
 /* we don't want to use include/trace/events */