linux/drivers/net/wireless/mediatek/mt7601u/trace.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
   3 * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License version 2
   7 * as published by the Free Software Foundation
   8 *
   9 * This program is distributed in the hope that it will be useful,
  10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12 * GNU General Public License for more details.
  13 */
  14
  15#if !defined(__MT7601U_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  16#define __MT7601U_TRACE_H
  17
  18#include <linux/tracepoint.h>
  19#include "mt7601u.h"
  20#include "mac.h"
  21
  22#undef TRACE_SYSTEM
  23#define TRACE_SYSTEM mt7601u
  24
  25#define MAXNAME         32
  26#define DEV_ENTRY       __array(char, wiphy_name, 32)
  27#define DEV_ASSIGN      strlcpy(__entry->wiphy_name,                    \
  28                                wiphy_name(dev->hw->wiphy), MAXNAME)
  29#define DEV_PR_FMT      "%s "
  30#define DEV_PR_ARG      __entry->wiphy_name
  31
  32#define REG_ENTRY       __field(u32, reg) __field(u32, val)
  33#define REG_ASSIGN      __entry->reg = reg; __entry->val = val
  34#define REG_PR_FMT      "%04x=%08x"
  35#define REG_PR_ARG      __entry->reg, __entry->val
  36
  37DECLARE_EVENT_CLASS(dev_reg_evt,
  38        TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
  39        TP_ARGS(dev, reg, val),
  40        TP_STRUCT__entry(
  41                DEV_ENTRY
  42                REG_ENTRY
  43        ),
  44        TP_fast_assign(
  45                DEV_ASSIGN;
  46                REG_ASSIGN;
  47        ),
  48        TP_printk(
  49                DEV_PR_FMT REG_PR_FMT,
  50                DEV_PR_ARG, REG_PR_ARG
  51        )
  52);
  53
  54DEFINE_EVENT(dev_reg_evt, reg_read,
  55        TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
  56        TP_ARGS(dev, reg, val)
  57);
  58
  59DEFINE_EVENT(dev_reg_evt, reg_write,
  60        TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
  61        TP_ARGS(dev, reg, val)
  62);
  63
  64TRACE_EVENT(mt_submit_urb,
  65        TP_PROTO(struct mt7601u_dev *dev, struct urb *u),
  66        TP_ARGS(dev, u),
  67        TP_STRUCT__entry(
  68                DEV_ENTRY __field(unsigned, pipe) __field(u32, len)
  69        ),
  70        TP_fast_assign(
  71                DEV_ASSIGN;
  72                __entry->pipe = u->pipe;
  73                __entry->len = u->transfer_buffer_length;
  74        ),
  75        TP_printk(DEV_PR_FMT "p:%08x len:%u",
  76                  DEV_PR_ARG, __entry->pipe, __entry->len)
  77);
  78
  79#define trace_mt_submit_urb_sync(__dev, __pipe, __len) ({       \
  80        struct urb u;                                   \
  81        u.pipe = __pipe;                                \
  82        u.transfer_buffer_length = __len;               \
  83        trace_mt_submit_urb(__dev, &u);                 \
  84})
  85
  86TRACE_EVENT(mt_mcu_msg_send,
  87        TP_PROTO(struct mt7601u_dev *dev,
  88                 struct sk_buff *skb, u32 csum, bool resp),
  89        TP_ARGS(dev, skb, csum, resp),
  90        TP_STRUCT__entry(
  91                DEV_ENTRY
  92                __field(u32, info)
  93                __field(u32, csum)
  94                __field(bool, resp)
  95        ),
  96        TP_fast_assign(
  97                DEV_ASSIGN;
  98                __entry->info = *(u32 *)skb->data;
  99                __entry->csum = csum;
 100                __entry->resp = resp;
 101        ),
 102        TP_printk(DEV_PR_FMT "i:%08x c:%08x r:%d",
 103                  DEV_PR_ARG, __entry->info, __entry->csum, __entry->resp)
 104);
 105
 106TRACE_EVENT(mt_vend_req,
 107        TP_PROTO(struct mt7601u_dev *dev, unsigned pipe, u8 req, u8 req_type,
 108                 u16 val, u16 offset, void *buf, size_t buflen, int ret),
 109        TP_ARGS(dev, pipe, req, req_type, val, offset, buf, buflen, ret),
 110        TP_STRUCT__entry(
 111                DEV_ENTRY
 112                __field(unsigned, pipe) __field(u8, req) __field(u8, req_type)
 113                __field(u16, val) __field(u16, offset) __field(void*, buf)
 114                __field(int, buflen) __field(int, ret)
 115        ),
 116        TP_fast_assign(
 117                DEV_ASSIGN;
 118                __entry->pipe = pipe;
 119                __entry->req = req;
 120                __entry->req_type = req_type;
 121                __entry->val = val;
 122                __entry->offset = offset;
 123                __entry->buf = buf;
 124                __entry->buflen = buflen;
 125                __entry->ret = ret;
 126        ),
 127        TP_printk(DEV_PR_FMT
 128                  "%d p:%08x req:%02hhx %02hhx val:%04hx %04hx buf:%d %d",
 129                  DEV_PR_ARG, __entry->ret, __entry->pipe, __entry->req,
 130                  __entry->req_type, __entry->val, __entry->offset,
 131                  !!__entry->buf, __entry->buflen)
 132);
 133
 134TRACE_EVENT(ee_read,
 135        TP_PROTO(struct mt7601u_dev *dev, int offset, u16 val),
 136        TP_ARGS(dev, offset, val),
 137        TP_STRUCT__entry(
 138                DEV_ENTRY
 139                __field(int, o) __field(u16, v)
 140        ),
 141        TP_fast_assign(
 142                DEV_ASSIGN;
 143                __entry->o = offset;
 144                __entry->v = val;
 145        ),
 146        TP_printk(DEV_PR_FMT "%04x=%04x", DEV_PR_ARG, __entry->o, __entry->v)
 147);
 148
 149DECLARE_EVENT_CLASS(dev_rf_reg_evt,
 150        TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
 151        TP_ARGS(dev, bank, reg, val),
 152        TP_STRUCT__entry(
 153                DEV_ENTRY
 154                __field(u8, bank)
 155                __field(u8, reg)
 156                __field(u8, val)
 157        ),
 158        TP_fast_assign(
 159                DEV_ASSIGN;
 160                REG_ASSIGN;
 161                __entry->bank = bank;
 162        ),
 163        TP_printk(
 164                DEV_PR_FMT "%02hhx:%02hhx=%02hhx",
 165                DEV_PR_ARG, __entry->bank, __entry->reg, __entry->val
 166        )
 167);
 168
 169DEFINE_EVENT(dev_rf_reg_evt, rf_read,
 170        TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
 171        TP_ARGS(dev, bank, reg, val)
 172);
 173
 174DEFINE_EVENT(dev_rf_reg_evt, rf_write,
 175        TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
 176        TP_ARGS(dev, bank, reg, val)
 177);
 178
 179DECLARE_EVENT_CLASS(dev_bbp_reg_evt,
 180        TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
 181        TP_ARGS(dev, reg, val),
 182        TP_STRUCT__entry(
 183                DEV_ENTRY
 184                __field(u8, reg)
 185                __field(u8, val)
 186        ),
 187        TP_fast_assign(
 188                DEV_ASSIGN;
 189                REG_ASSIGN;
 190        ),
 191        TP_printk(
 192                DEV_PR_FMT "%02hhx=%02hhx",
 193                DEV_PR_ARG, __entry->reg, __entry->val
 194        )
 195);
 196
 197DEFINE_EVENT(dev_bbp_reg_evt, bbp_read,
 198        TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
 199        TP_ARGS(dev, reg, val)
 200);
 201
 202DEFINE_EVENT(dev_bbp_reg_evt, bbp_write,
 203        TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
 204        TP_ARGS(dev, reg, val)
 205);
 206
 207DECLARE_EVENT_CLASS(dev_simple_evt,
 208        TP_PROTO(struct mt7601u_dev *dev, u8 val),
 209        TP_ARGS(dev, val),
 210        TP_STRUCT__entry(
 211                DEV_ENTRY
 212                __field(u8, val)
 213        ),
 214        TP_fast_assign(
 215                DEV_ASSIGN;
 216                __entry->val = val;
 217        ),
 218        TP_printk(
 219                DEV_PR_FMT "%02hhx", DEV_PR_ARG, __entry->val
 220        )
 221);
 222
 223DEFINE_EVENT(dev_simple_evt, temp_mode,
 224        TP_PROTO(struct mt7601u_dev *dev, u8 val),
 225        TP_ARGS(dev, val)
 226);
 227
 228DEFINE_EVENT(dev_simple_evt, read_temp,
 229        TP_PROTO(struct mt7601u_dev *dev, u8 val),
 230        TP_ARGS(dev, val)
 231);
 232
 233DEFINE_EVENT(dev_simple_evt, freq_cal_adjust,
 234        TP_PROTO(struct mt7601u_dev *dev, u8 val),
 235        TP_ARGS(dev, val)
 236);
 237
 238TRACE_EVENT(freq_cal_offset,
 239        TP_PROTO(struct mt7601u_dev *dev, u8 phy_mode, s8 freq_off),
 240        TP_ARGS(dev, phy_mode, freq_off),
 241        TP_STRUCT__entry(
 242                DEV_ENTRY
 243                __field(u8, phy_mode)
 244                __field(s8, freq_off)
 245        ),
 246        TP_fast_assign(
 247                DEV_ASSIGN;
 248                __entry->phy_mode = phy_mode;
 249                __entry->freq_off = freq_off;
 250        ),
 251        TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx",
 252                  DEV_PR_ARG, __entry->phy_mode, __entry->freq_off)
 253);
 254
 255TRACE_EVENT(mt_rx,
 256        TP_PROTO(struct mt7601u_dev *dev, struct mt7601u_rxwi *rxwi, u32 f),
 257        TP_ARGS(dev, rxwi, f),
 258        TP_STRUCT__entry(
 259                DEV_ENTRY
 260                __field_struct(struct mt7601u_rxwi, rxwi)
 261                __field(u32, fce_info)
 262        ),
 263        TP_fast_assign(
 264                DEV_ASSIGN;
 265                __entry->rxwi = *rxwi;
 266                __entry->fce_info = f;
 267        ),
 268        TP_printk(DEV_PR_FMT "rxi:%08x ctl:%08x frag_sn:%04hx rate:%04hx "
 269                  "uknw:%02hhx z:%02hhx%02hhx%02hhx snr:%02hhx "
 270                  "ant:%02hhx gain:%02hhx freq_o:%02hhx "
 271                  "r:%08x ea:%08x fce:%08x", DEV_PR_ARG,
 272                  le32_to_cpu(__entry->rxwi.rxinfo),
 273                  le32_to_cpu(__entry->rxwi.ctl),
 274                  le16_to_cpu(__entry->rxwi.frag_sn),
 275                  le16_to_cpu(__entry->rxwi.rate),
 276                  __entry->rxwi.unknown,
 277                  __entry->rxwi.zero[0], __entry->rxwi.zero[1],
 278                  __entry->rxwi.zero[2],
 279                  __entry->rxwi.snr, __entry->rxwi.ant,
 280                  __entry->rxwi.gain, __entry->rxwi.freq_off,
 281                  __entry->rxwi.resv2, __entry->rxwi.expert_ant,
 282                  __entry->fce_info)
 283);
 284
 285TRACE_EVENT(mt_tx,
 286        TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb,
 287                 struct mt76_sta *sta, struct mt76_txwi *h),
 288        TP_ARGS(dev, skb, sta, h),
 289        TP_STRUCT__entry(
 290                DEV_ENTRY
 291                __field_struct(struct mt76_txwi, h)
 292                __field(struct sk_buff *, skb)
 293                __field(struct mt76_sta *, sta)
 294        ),
 295        TP_fast_assign(
 296                DEV_ASSIGN;
 297                __entry->h = *h;
 298                __entry->skb = skb;
 299                __entry->sta = sta;
 300        ),
 301        TP_printk(DEV_PR_FMT "skb:%p sta:%p  flg:%04hx rate_ctl:%04hx "
 302                  "ack:%02hhx wcid:%02hhx len_ctl:%05hx", DEV_PR_ARG,
 303                  __entry->skb, __entry->sta,
 304                  le16_to_cpu(__entry->h.flags),
 305                  le16_to_cpu(__entry->h.rate_ctl),
 306                  __entry->h.ack_ctl, __entry->h.wcid,
 307                  le16_to_cpu(__entry->h.len_ctl))
 308);
 309
 310TRACE_EVENT(mt_tx_dma_done,
 311        TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb),
 312        TP_ARGS(dev, skb),
 313        TP_STRUCT__entry(
 314                DEV_ENTRY
 315                __field(struct sk_buff *, skb)
 316        ),
 317        TP_fast_assign(
 318                DEV_ASSIGN;
 319                __entry->skb = skb;
 320        ),
 321        TP_printk(DEV_PR_FMT "%p", DEV_PR_ARG, __entry->skb)
 322);
 323
 324TRACE_EVENT(mt_tx_status_cleaned,
 325        TP_PROTO(struct mt7601u_dev *dev, int cleaned),
 326        TP_ARGS(dev, cleaned),
 327        TP_STRUCT__entry(
 328                DEV_ENTRY
 329                __field(int, cleaned)
 330        ),
 331        TP_fast_assign(
 332                DEV_ASSIGN;
 333                __entry->cleaned = cleaned;
 334        ),
 335        TP_printk(DEV_PR_FMT "%d", DEV_PR_ARG, __entry->cleaned)
 336);
 337
 338TRACE_EVENT(mt_tx_status,
 339        TP_PROTO(struct mt7601u_dev *dev, u32 stat1, u32 stat2),
 340        TP_ARGS(dev, stat1, stat2),
 341        TP_STRUCT__entry(
 342                DEV_ENTRY
 343                __field(u32, stat1)     __field(u32, stat2)
 344        ),
 345        TP_fast_assign(
 346                DEV_ASSIGN;
 347                __entry->stat1 = stat1;
 348                __entry->stat2 = stat2;
 349        ),
 350        TP_printk(DEV_PR_FMT "%08x %08x",
 351                  DEV_PR_ARG, __entry->stat1, __entry->stat2)
 352);
 353
 354TRACE_EVENT(mt_rx_dma_aggr,
 355        TP_PROTO(struct mt7601u_dev *dev, int cnt, bool paged),
 356        TP_ARGS(dev, cnt, paged),
 357        TP_STRUCT__entry(
 358                DEV_ENTRY
 359                __field(u8, cnt)
 360                __field(bool, paged)
 361        ),
 362        TP_fast_assign(
 363                DEV_ASSIGN;
 364                __entry->cnt = cnt;
 365                __entry->paged = paged;
 366        ),
 367        TP_printk(DEV_PR_FMT "cnt:%d paged:%d",
 368                  DEV_PR_ARG, __entry->cnt, __entry->paged)
 369);
 370
 371DEFINE_EVENT(dev_simple_evt, set_key,
 372        TP_PROTO(struct mt7601u_dev *dev, u8 val),
 373        TP_ARGS(dev, val)
 374);
 375
 376TRACE_EVENT(set_shared_key,
 377        TP_PROTO(struct mt7601u_dev *dev, u8 vid, u8 key),
 378        TP_ARGS(dev, vid, key),
 379        TP_STRUCT__entry(
 380                DEV_ENTRY
 381                __field(u8, vid)
 382                __field(u8, key)
 383        ),
 384        TP_fast_assign(
 385                DEV_ASSIGN;
 386                __entry->vid = vid;
 387                __entry->key = key;
 388        ),
 389        TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx",
 390                  DEV_PR_ARG, __entry->vid, __entry->key)
 391);
 392
 393#endif
 394
 395#undef TRACE_INCLUDE_PATH
 396#define TRACE_INCLUDE_PATH .
 397#undef TRACE_INCLUDE_FILE
 398#define TRACE_INCLUDE_FILE trace
 399
 400#include <trace/define_trace.h>
 401