linux/drivers/net/wireless/iwmc3200wifi/trace.h
<<
>>
Prefs
   1#if !defined(__IWM_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ)
   2#define __IWM_TRACE_H__
   3
   4#include <linux/tracepoint.h>
   5
   6#if !defined(CONFIG_IWM_TRACING)
   7#undef TRACE_EVENT
   8#define TRACE_EVENT(name, proto, ...) \
   9static inline void trace_ ## name(proto) {}
  10#endif
  11
  12#undef TRACE_SYSTEM
  13#define TRACE_SYSTEM iwm
  14
  15#define IWM_ENTRY       __array(char, ndev_name, 16)
  16#define IWM_ASSIGN      strlcpy(__entry->ndev_name, iwm_to_ndev(iwm)->name, 16)
  17#define IWM_PR_FMT      "%s"
  18#define IWM_PR_ARG      __entry->ndev_name
  19
  20TRACE_EVENT(iwm_tx_nonwifi_cmd,
  21        TP_PROTO(struct iwm_priv *iwm, struct iwm_udma_out_nonwifi_hdr *hdr),
  22
  23        TP_ARGS(iwm, hdr),
  24
  25        TP_STRUCT__entry(
  26                IWM_ENTRY
  27                __field(u8, opcode)
  28                __field(u8, resp)
  29                __field(u8, eot)
  30                __field(u8, hw)
  31                __field(u16, seq)
  32                __field(u32, addr)
  33                __field(u32, op1)
  34                __field(u32, op2)
  35        ),
  36
  37        TP_fast_assign(
  38                IWM_ASSIGN;
  39                __entry->opcode = GET_VAL32(hdr->cmd, UMAC_HDI_OUT_CMD_OPCODE);
  40                __entry->resp = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_NW_CMD_RESP);
  41                __entry->eot = GET_VAL32(hdr->cmd, UMAC_HDI_OUT_CMD_EOT);
  42                __entry->hw = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_NW_CMD_HANDLE_BY_HW);
  43                __entry->seq = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_CMD_NON_WIFI_HW_SEQ_NUM);
  44                __entry->addr = le32_to_cpu(hdr->addr);
  45                __entry->op1 = le32_to_cpu(hdr->op1_sz);
  46                __entry->op2 = le32_to_cpu(hdr->op2);
  47        ),
  48
  49        TP_printk(
  50                IWM_PR_FMT " Tx TARGET CMD: opcode 0x%x, resp %d, eot %d, "
  51                "hw %d, seq 0x%x, addr 0x%x, op1 0x%x, op2 0x%x",
  52                IWM_PR_ARG, __entry->opcode, __entry->resp, __entry->eot,
  53                __entry->hw, __entry->seq, __entry->addr, __entry->op1,
  54                __entry->op2
  55        )
  56);
  57
  58TRACE_EVENT(iwm_tx_wifi_cmd,
  59        TP_PROTO(struct iwm_priv *iwm, struct iwm_umac_wifi_out_hdr *hdr),
  60
  61        TP_ARGS(iwm, hdr),
  62
  63        TP_STRUCT__entry(
  64                IWM_ENTRY
  65                __field(u8, opcode)
  66                __field(u8, lmac)
  67                __field(u8, resp)
  68                __field(u8, eot)
  69                __field(u8, ra_tid)
  70                __field(u8, credit_group)
  71                __field(u8, color)
  72                __field(u16, seq)
  73        ),
  74
  75        TP_fast_assign(
  76                IWM_ASSIGN;
  77                __entry->opcode = hdr->sw_hdr.cmd.cmd;
  78                __entry->lmac = 0;
  79                __entry->seq = __le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
  80                __entry->resp = GET_VAL8(hdr->sw_hdr.cmd.flags, UMAC_DEV_CMD_FLAGS_RESP_REQ);
  81                __entry->color = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_TX_STA_COLOR);
  82                __entry->eot = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_OUT_CMD_EOT);
  83                __entry->ra_tid = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_RATID);
  84                __entry->credit_group = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_CREDIT_GRP);
  85                if (__entry->opcode == UMAC_CMD_OPCODE_WIFI_PASS_THROUGH ||
  86                    __entry->opcode == UMAC_CMD_OPCODE_WIFI_IF_WRAPPER) {
  87                        __entry->lmac = 1;
  88                        __entry->opcode = ((struct iwm_lmac_hdr *)(hdr + 1))->id;
  89                }
  90        ),
  91
  92        TP_printk(
  93                IWM_PR_FMT " Tx %cMAC CMD: opcode 0x%x, resp %d, eot %d, "
  94                "seq 0x%x, sta_color 0x%x, ra_tid 0x%x, credit_group 0x%x",
  95                IWM_PR_ARG, __entry->lmac ? 'L' : 'U', __entry->opcode,
  96                __entry->resp, __entry->eot, __entry->seq, __entry->color,
  97                __entry->ra_tid, __entry->credit_group
  98        )
  99);
 100
 101TRACE_EVENT(iwm_tx_packets,
 102        TP_PROTO(struct iwm_priv *iwm, u8 *buf, int len),
 103
 104        TP_ARGS(iwm, buf, len),
 105
 106        TP_STRUCT__entry(
 107                IWM_ENTRY
 108                __field(u8, eot)
 109                __field(u8, ra_tid)
 110                __field(u8, credit_group)
 111                __field(u8, color)
 112                __field(u16, seq)
 113                __field(u8, npkt)
 114                __field(u32, bytes)
 115        ),
 116
 117        TP_fast_assign(
 118                struct iwm_umac_wifi_out_hdr *hdr =
 119                        (struct iwm_umac_wifi_out_hdr *)buf;
 120
 121                IWM_ASSIGN;
 122                __entry->eot = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_OUT_CMD_EOT);
 123                __entry->ra_tid = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_RATID);
 124                __entry->credit_group = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_CREDIT_GRP);
 125                __entry->color = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_TX_STA_COLOR);
 126                __entry->seq = __le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
 127                __entry->npkt = 1;
 128                __entry->bytes = len;
 129
 130                if (!__entry->eot) {
 131                        int count;
 132                        u8 *ptr = buf;
 133
 134                        __entry->npkt = 0;
 135                        while (ptr < buf + len) {
 136                                count = GET_VAL32(hdr->sw_hdr.meta_data,
 137                                                  UMAC_FW_CMD_BYTE_COUNT);
 138                                ptr += ALIGN(sizeof(*hdr) + count, 16);
 139                                hdr = (struct iwm_umac_wifi_out_hdr *)ptr;
 140                                __entry->npkt++;
 141                        }
 142                }
 143        ),
 144
 145        TP_printk(
 146                IWM_PR_FMT " Tx %spacket: eot %d, seq 0x%x, sta_color 0x%x, "
 147                "ra_tid 0x%x, credit_group 0x%x, embeded_packets %d, %d bytes",
 148                IWM_PR_ARG, !__entry->eot ? "concatenated " : "",
 149                __entry->eot, __entry->seq, __entry->color, __entry->ra_tid,
 150                __entry->credit_group, __entry->npkt, __entry->bytes
 151        )
 152);
 153
 154TRACE_EVENT(iwm_rx_nonwifi_cmd,
 155        TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
 156
 157        TP_ARGS(iwm, buf, len),
 158
 159        TP_STRUCT__entry(
 160                IWM_ENTRY
 161                __field(u8, opcode)
 162                __field(u16, seq)
 163                __field(u32, len)
 164        ),
 165
 166        TP_fast_assign(
 167                struct iwm_udma_in_hdr *hdr = buf;
 168
 169                IWM_ASSIGN;
 170                __entry->opcode = GET_VAL32(hdr->cmd, UDMA_HDI_IN_NW_CMD_OPCODE);
 171                __entry->seq = GET_VAL32(hdr->cmd, UDMA_HDI_IN_CMD_NON_WIFI_HW_SEQ_NUM);
 172                __entry->len = len;
 173        ),
 174
 175        TP_printk(
 176                IWM_PR_FMT " Rx TARGET RESP: opcode 0x%x, seq 0x%x, len 0x%x",
 177                IWM_PR_ARG, __entry->opcode, __entry->seq, __entry->len
 178        )
 179);
 180
 181TRACE_EVENT(iwm_rx_wifi_cmd,
 182        TP_PROTO(struct iwm_priv *iwm, struct iwm_umac_wifi_in_hdr *hdr),
 183
 184        TP_ARGS(iwm, hdr),
 185
 186        TP_STRUCT__entry(
 187                IWM_ENTRY
 188                __field(u8, cmd)
 189                __field(u8, source)
 190                __field(u16, seq)
 191                __field(u32, count)
 192        ),
 193
 194        TP_fast_assign(
 195                IWM_ASSIGN;
 196                __entry->cmd = hdr->sw_hdr.cmd.cmd;
 197                __entry->source = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_IN_CMD_SOURCE);
 198                __entry->count = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_BYTE_COUNT);
 199                __entry->seq = le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
 200        ),
 201
 202        TP_printk(
 203                IWM_PR_FMT " Rx %s RESP: cmd 0x%x, seq 0x%x, count 0x%x",
 204                IWM_PR_ARG, __entry->source == UMAC_HDI_IN_SOURCE_FHRX ? "LMAC" :
 205                __entry->source == UMAC_HDI_IN_SOURCE_FW ? "UMAC" : "UDMA",
 206                __entry->cmd, __entry->seq, __entry->count
 207        )
 208);
 209
 210#define iwm_ticket_action_symbol                \
 211        { IWM_RX_TICKET_DROP, "DROP" },         \
 212        { IWM_RX_TICKET_RELEASE, "RELEASE" },   \
 213        { IWM_RX_TICKET_SNIFFER, "SNIFFER" },   \
 214        { IWM_RX_TICKET_ENQUEUE, "ENQUEUE" }
 215
 216TRACE_EVENT(iwm_rx_ticket,
 217        TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
 218
 219        TP_ARGS(iwm, buf, len),
 220
 221        TP_STRUCT__entry(
 222                IWM_ENTRY
 223                __field(u8, action)
 224                __field(u8, reason)
 225                __field(u16, id)
 226                __field(u16, flags)
 227        ),
 228
 229        TP_fast_assign(
 230                struct iwm_rx_ticket *ticket =
 231                        ((struct iwm_umac_notif_rx_ticket *)buf)->tickets;
 232
 233                IWM_ASSIGN;
 234                __entry->id = le16_to_cpu(ticket->id);
 235                __entry->action = le16_to_cpu(ticket->action);
 236                __entry->flags = le16_to_cpu(ticket->flags);
 237                __entry->reason = (__entry->flags & IWM_RX_TICKET_DROP_REASON_MSK) >> IWM_RX_TICKET_DROP_REASON_POS;
 238        ),
 239
 240        TP_printk(
 241                IWM_PR_FMT " Rx ticket: id 0x%x, action %s, %s 0x%x%s",
 242                IWM_PR_ARG, __entry->id,
 243                __print_symbolic(__entry->action, iwm_ticket_action_symbol),
 244                __entry->reason ? "reason" : "flags",
 245                __entry->reason ? __entry->reason : __entry->flags,
 246                __entry->flags & IWM_RX_TICKET_AMSDU_MSK ? ", AMSDU frame" : ""
 247        )
 248);
 249
 250TRACE_EVENT(iwm_rx_packet,
 251        TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
 252
 253        TP_ARGS(iwm, buf, len),
 254
 255        TP_STRUCT__entry(
 256                IWM_ENTRY
 257                __field(u8, source)
 258                __field(u16, id)
 259                __field(u32, len)
 260        ),
 261
 262        TP_fast_assign(
 263                struct iwm_umac_wifi_in_hdr *hdr = buf;
 264
 265                IWM_ASSIGN;
 266                __entry->source = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_IN_CMD_SOURCE);
 267                __entry->id = le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
 268                __entry->len = len - sizeof(*hdr);
 269        ),
 270
 271        TP_printk(
 272                IWM_PR_FMT " Rx %s packet: id 0x%x, %d bytes",
 273                IWM_PR_ARG, __entry->source == UMAC_HDI_IN_SOURCE_FHRX ?
 274                "LMAC" : "UMAC", __entry->id, __entry->len
 275        )
 276);
 277#endif
 278
 279#undef TRACE_INCLUDE_PATH
 280#define TRACE_INCLUDE_PATH .
 281#undef TRACE_INCLUDE_FILE
 282#define TRACE_INCLUDE_FILE trace
 283#include <trace/define_trace.h>
 284