mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 12:21:37 +00:00
179 lines
4.5 KiB
C
179 lines
4.5 KiB
C
|
#if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ)
|
||
|
#define __IWLWIFI_DEVICE_TRACE
|
||
|
|
||
|
#include <linux/tracepoint.h>
|
||
|
#include "iwl-dev.h"
|
||
|
|
||
|
#if !defined(CONFIG_IWLWIFI_DEVICE_TRACING) || defined(__CHECKER__)
|
||
|
#undef TRACE_EVENT
|
||
|
#define TRACE_EVENT(name, proto, ...) \
|
||
|
static inline void trace_ ## name(proto) {}
|
||
|
#endif
|
||
|
|
||
|
#define PRIV_ENTRY __field(struct iwl_priv *, priv)
|
||
|
#define PRIV_ASSIGN __entry->priv = priv
|
||
|
|
||
|
#undef TRACE_SYSTEM
|
||
|
#define TRACE_SYSTEM iwlwifi
|
||
|
|
||
|
TRACE_EVENT(iwlwifi_dev_ioread32,
|
||
|
TP_PROTO(struct iwl_priv *priv, u32 offs, u32 val),
|
||
|
TP_ARGS(priv, offs, val),
|
||
|
TP_STRUCT__entry(
|
||
|
PRIV_ENTRY
|
||
|
__field(u32, offs)
|
||
|
__field(u32, val)
|
||
|
),
|
||
|
TP_fast_assign(
|
||
|
PRIV_ASSIGN;
|
||
|
__entry->offs = offs;
|
||
|
__entry->val = val;
|
||
|
),
|
||
|
TP_printk("[%p] read io[%#x] = %#x", __entry->priv, __entry->offs, __entry->val)
|
||
|
);
|
||
|
|
||
|
TRACE_EVENT(iwlwifi_dev_iowrite32,
|
||
|
TP_PROTO(struct iwl_priv *priv, u32 offs, u32 val),
|
||
|
TP_ARGS(priv, offs, val),
|
||
|
TP_STRUCT__entry(
|
||
|
PRIV_ENTRY
|
||
|
__field(u32, offs)
|
||
|
__field(u32, val)
|
||
|
),
|
||
|
TP_fast_assign(
|
||
|
PRIV_ASSIGN;
|
||
|
__entry->offs = offs;
|
||
|
__entry->val = val;
|
||
|
),
|
||
|
TP_printk("[%p] write io[%#x] = %#x)", __entry->priv, __entry->offs, __entry->val)
|
||
|
);
|
||
|
|
||
|
TRACE_EVENT(iwlwifi_dev_hcmd,
|
||
|
TP_PROTO(struct iwl_priv *priv, void *hcmd, size_t len, u32 flags),
|
||
|
TP_ARGS(priv, hcmd, len, flags),
|
||
|
TP_STRUCT__entry(
|
||
|
PRIV_ENTRY
|
||
|
__dynamic_array(u8, hcmd, len)
|
||
|
__field(u32, flags)
|
||
|
),
|
||
|
TP_fast_assign(
|
||
|
PRIV_ASSIGN;
|
||
|
memcpy(__get_dynamic_array(hcmd), hcmd, len);
|
||
|
__entry->flags = flags;
|
||
|
),
|
||
|
TP_printk("[%p] hcmd %#.2x (%ssync)",
|
||
|
__entry->priv, ((u8 *)__get_dynamic_array(hcmd))[0],
|
||
|
__entry->flags & CMD_ASYNC ? "a" : "")
|
||
|
);
|
||
|
|
||
|
TRACE_EVENT(iwlwifi_dev_rx,
|
||
|
TP_PROTO(struct iwl_priv *priv, void *rxbuf, size_t len),
|
||
|
TP_ARGS(priv, rxbuf, len),
|
||
|
TP_STRUCT__entry(
|
||
|
PRIV_ENTRY
|
||
|
__dynamic_array(u8, rxbuf, len)
|
||
|
),
|
||
|
TP_fast_assign(
|
||
|
PRIV_ASSIGN;
|
||
|
memcpy(__get_dynamic_array(rxbuf), rxbuf, len);
|
||
|
),
|
||
|
TP_printk("[%p] RX cmd %#.2x",
|
||
|
__entry->priv, ((u8 *)__get_dynamic_array(rxbuf))[4])
|
||
|
);
|
||
|
|
||
|
TRACE_EVENT(iwlwifi_dev_tx,
|
||
|
TP_PROTO(struct iwl_priv *priv, void *tfd, size_t tfdlen,
|
||
|
void *buf0, size_t buf0_len,
|
||
|
void *buf1, size_t buf1_len),
|
||
|
TP_ARGS(priv, tfd, tfdlen, buf0, buf0_len, buf1, buf1_len),
|
||
|
TP_STRUCT__entry(
|
||
|
PRIV_ENTRY
|
||
|
|
||
|
__field(size_t, framelen)
|
||
|
__dynamic_array(u8, tfd, tfdlen)
|
||
|
|
||
|
/*
|
||
|
* Do not insert between or below these items,
|
||
|
* we want to keep the frame together (except
|
||
|
* for the possible padding).
|
||
|
*/
|
||
|
__dynamic_array(u8, buf0, buf0_len)
|
||
|
__dynamic_array(u8, buf1, buf1_len)
|
||
|
),
|
||
|
TP_fast_assign(
|
||
|
PRIV_ASSIGN;
|
||
|
__entry->framelen = buf0_len + buf1_len;
|
||
|
memcpy(__get_dynamic_array(tfd), tfd, tfdlen);
|
||
|
memcpy(__get_dynamic_array(buf0), buf0, buf0_len);
|
||
|
memcpy(__get_dynamic_array(buf1), buf1, buf0_len);
|
||
|
),
|
||
|
TP_printk("[%p] TX %.2x (%zu bytes)",
|
||
|
__entry->priv,
|
||
|
((u8 *)__get_dynamic_array(buf0))[0],
|
||
|
__entry->framelen)
|
||
|
);
|
||
|
|
||
|
TRACE_EVENT(iwlwifi_dev_ucode_error,
|
||
|
TP_PROTO(struct iwl_priv *priv, u32 desc, u32 time,
|
||
|
u32 data1, u32 data2, u32 line, u32 blink1,
|
||
|
u32 blink2, u32 ilink1, u32 ilink2),
|
||
|
TP_ARGS(priv, desc, time, data1, data2, line,
|
||
|
blink1, blink2, ilink1, ilink2),
|
||
|
TP_STRUCT__entry(
|
||
|
PRIV_ENTRY
|
||
|
__field(u32, desc)
|
||
|
__field(u32, time)
|
||
|
__field(u32, data1)
|
||
|
__field(u32, data2)
|
||
|
__field(u32, line)
|
||
|
__field(u32, blink1)
|
||
|
__field(u32, blink2)
|
||
|
__field(u32, ilink1)
|
||
|
__field(u32, ilink2)
|
||
|
),
|
||
|
TP_fast_assign(
|
||
|
PRIV_ASSIGN;
|
||
|
__entry->desc = desc;
|
||
|
__entry->time = time;
|
||
|
__entry->data1 = data1;
|
||
|
__entry->data2 = data2;
|
||
|
__entry->line = line;
|
||
|
__entry->blink1 = blink1;
|
||
|
__entry->blink2 = blink2;
|
||
|
__entry->ilink1 = ilink1;
|
||
|
__entry->ilink2 = ilink2;
|
||
|
),
|
||
|
TP_printk("[%p] #%02d %010u data 0x%08X 0x%08X line %u, "
|
||
|
"blink 0x%05X 0x%05X ilink 0x%05X 0x%05X",
|
||
|
__entry->priv, __entry->desc, __entry->time, __entry->data1,
|
||
|
__entry->data2, __entry->line, __entry->blink1,
|
||
|
__entry->blink2, __entry->ilink1, __entry->ilink2)
|
||
|
);
|
||
|
|
||
|
TRACE_EVENT(iwlwifi_dev_ucode_event,
|
||
|
TP_PROTO(struct iwl_priv *priv, u32 time, u32 data, u32 ev),
|
||
|
TP_ARGS(priv, time, data, ev),
|
||
|
TP_STRUCT__entry(
|
||
|
PRIV_ENTRY
|
||
|
|
||
|
__field(u32, time)
|
||
|
__field(u32, data)
|
||
|
__field(u32, ev)
|
||
|
),
|
||
|
TP_fast_assign(
|
||
|
PRIV_ASSIGN;
|
||
|
__entry->time = time;
|
||
|
__entry->data = data;
|
||
|
__entry->ev = ev;
|
||
|
),
|
||
|
TP_printk("[%p] EVT_LOGT:%010u:0x%08x:%04u",
|
||
|
__entry->priv, __entry->time, __entry->data, __entry->ev)
|
||
|
);
|
||
|
#endif /* __IWLWIFI_DEVICE_TRACE */
|
||
|
|
||
|
#undef TRACE_INCLUDE_PATH
|
||
|
#define TRACE_INCLUDE_PATH .
|
||
|
#undef TRACE_INCLUDE_FILE
|
||
|
#define TRACE_INCLUDE_FILE iwl-devtrace
|
||
|
#include <trace/define_trace.h>
|