Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
0004  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
0005  */
0006 
0007 #if !defined(__MT7601U_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
0008 #define __MT7601U_TRACE_H
0009 
0010 #include <linux/tracepoint.h>
0011 #include "mt7601u.h"
0012 #include "mac.h"
0013 
0014 #undef TRACE_SYSTEM
0015 #define TRACE_SYSTEM mt7601u
0016 
0017 #define MAXNAME     32
0018 #define DEV_ENTRY   __array(char, wiphy_name, 32)
0019 #define DEV_ASSIGN  strlcpy(__entry->wiphy_name,            \
0020                 wiphy_name(dev->hw->wiphy), MAXNAME)
0021 #define DEV_PR_FMT  "%s "
0022 #define DEV_PR_ARG  __entry->wiphy_name
0023 
0024 #define REG_ENTRY   __field(u32, reg) __field(u32, val)
0025 #define REG_ASSIGN  __entry->reg = reg; __entry->val = val
0026 #define REG_PR_FMT  "%04x=%08x"
0027 #define REG_PR_ARG  __entry->reg, __entry->val
0028 
0029 DECLARE_EVENT_CLASS(dev_reg_evtu,
0030     TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
0031     TP_ARGS(dev, reg, val),
0032     TP_STRUCT__entry(
0033         DEV_ENTRY
0034         REG_ENTRY
0035     ),
0036     TP_fast_assign(
0037         DEV_ASSIGN;
0038         REG_ASSIGN;
0039     ),
0040     TP_printk(
0041         DEV_PR_FMT REG_PR_FMT,
0042         DEV_PR_ARG, REG_PR_ARG
0043     )
0044 );
0045 
0046 DEFINE_EVENT(dev_reg_evtu, reg_read,
0047     TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
0048     TP_ARGS(dev, reg, val)
0049 );
0050 
0051 DEFINE_EVENT(dev_reg_evtu, reg_write,
0052     TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val),
0053     TP_ARGS(dev, reg, val)
0054 );
0055 
0056 TRACE_EVENT(mt_submit_urb,
0057     TP_PROTO(struct mt7601u_dev *dev, struct urb *u),
0058     TP_ARGS(dev, u),
0059     TP_STRUCT__entry(
0060         DEV_ENTRY __field(unsigned, pipe) __field(u32, len)
0061     ),
0062     TP_fast_assign(
0063         DEV_ASSIGN;
0064         __entry->pipe = u->pipe;
0065         __entry->len = u->transfer_buffer_length;
0066     ),
0067     TP_printk(DEV_PR_FMT "p:%08x len:%u",
0068           DEV_PR_ARG, __entry->pipe, __entry->len)
0069 );
0070 
0071 #define trace_mt_submit_urb_sync(__dev, __pipe, __len) ({   \
0072     struct urb u;                   \
0073     u.pipe = __pipe;                \
0074     u.transfer_buffer_length = __len;       \
0075     trace_mt_submit_urb(__dev, &u);         \
0076 })
0077 
0078 TRACE_EVENT(mt_mcu_msg_send,
0079     TP_PROTO(struct mt7601u_dev *dev,
0080          struct sk_buff *skb, u32 csum, bool resp),
0081     TP_ARGS(dev, skb, csum, resp),
0082     TP_STRUCT__entry(
0083         DEV_ENTRY
0084         __field(u32, info)
0085         __field(u32, csum)
0086         __field(bool, resp)
0087     ),
0088     TP_fast_assign(
0089         DEV_ASSIGN;
0090         __entry->info = *(u32 *)skb->data;
0091         __entry->csum = csum;
0092         __entry->resp = resp;
0093     ),
0094     TP_printk(DEV_PR_FMT "i:%08x c:%08x r:%d",
0095           DEV_PR_ARG, __entry->info, __entry->csum, __entry->resp)
0096 );
0097 
0098 TRACE_EVENT(mt_vend_req,
0099     TP_PROTO(struct mt7601u_dev *dev, unsigned pipe, u8 req, u8 req_type,
0100          u16 val, u16 offset, void *buf, size_t buflen, int ret),
0101     TP_ARGS(dev, pipe, req, req_type, val, offset, buf, buflen, ret),
0102     TP_STRUCT__entry(
0103         DEV_ENTRY
0104         __field(unsigned, pipe) __field(u8, req) __field(u8, req_type)
0105         __field(u16, val) __field(u16, offset) __field(void*, buf)
0106         __field(int, buflen) __field(int, ret)
0107     ),
0108     TP_fast_assign(
0109         DEV_ASSIGN;
0110         __entry->pipe = pipe;
0111         __entry->req = req;
0112         __entry->req_type = req_type;
0113         __entry->val = val;
0114         __entry->offset = offset;
0115         __entry->buf = buf;
0116         __entry->buflen = buflen;
0117         __entry->ret = ret;
0118     ),
0119     TP_printk(DEV_PR_FMT
0120           "%d p:%08x req:%02hhx %02hhx val:%04hx %04hx buf:%d %d",
0121           DEV_PR_ARG, __entry->ret, __entry->pipe, __entry->req,
0122           __entry->req_type, __entry->val, __entry->offset,
0123           !!__entry->buf, __entry->buflen)
0124 );
0125 
0126 TRACE_EVENT(ee_read,
0127     TP_PROTO(struct mt7601u_dev *dev, int offset, u16 val),
0128     TP_ARGS(dev, offset, val),
0129     TP_STRUCT__entry(
0130         DEV_ENTRY
0131         __field(int, o) __field(u16, v)
0132     ),
0133     TP_fast_assign(
0134         DEV_ASSIGN;
0135         __entry->o = offset;
0136         __entry->v = val;
0137     ),
0138     TP_printk(DEV_PR_FMT "%04x=%04x", DEV_PR_ARG, __entry->o, __entry->v)
0139 );
0140 
0141 DECLARE_EVENT_CLASS(dev_rf_reg_evt,
0142     TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
0143     TP_ARGS(dev, bank, reg, val),
0144     TP_STRUCT__entry(
0145         DEV_ENTRY
0146         __field(u8, bank)
0147         __field(u8, reg)
0148         __field(u8, val)
0149     ),
0150     TP_fast_assign(
0151         DEV_ASSIGN;
0152         REG_ASSIGN;
0153         __entry->bank = bank;
0154     ),
0155     TP_printk(
0156         DEV_PR_FMT "%02hhx:%02hhx=%02hhx",
0157         DEV_PR_ARG, __entry->bank, __entry->reg, __entry->val
0158     )
0159 );
0160 
0161 DEFINE_EVENT(dev_rf_reg_evt, rf_read,
0162     TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
0163     TP_ARGS(dev, bank, reg, val)
0164 );
0165 
0166 DEFINE_EVENT(dev_rf_reg_evt, rf_write,
0167     TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val),
0168     TP_ARGS(dev, bank, reg, val)
0169 );
0170 
0171 DECLARE_EVENT_CLASS(dev_bbp_reg_evt,
0172     TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
0173     TP_ARGS(dev, reg, val),
0174     TP_STRUCT__entry(
0175         DEV_ENTRY
0176         __field(u8, reg)
0177         __field(u8, val)
0178     ),
0179     TP_fast_assign(
0180         DEV_ASSIGN;
0181         REG_ASSIGN;
0182     ),
0183     TP_printk(
0184         DEV_PR_FMT "%02hhx=%02hhx",
0185         DEV_PR_ARG, __entry->reg, __entry->val
0186     )
0187 );
0188 
0189 DEFINE_EVENT(dev_bbp_reg_evt, bbp_read,
0190     TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
0191     TP_ARGS(dev, reg, val)
0192 );
0193 
0194 DEFINE_EVENT(dev_bbp_reg_evt, bbp_write,
0195     TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val),
0196     TP_ARGS(dev, reg, val)
0197 );
0198 
0199 DECLARE_EVENT_CLASS(dev_simple_evt,
0200     TP_PROTO(struct mt7601u_dev *dev, u8 val),
0201     TP_ARGS(dev, val),
0202     TP_STRUCT__entry(
0203         DEV_ENTRY
0204         __field(u8, val)
0205     ),
0206     TP_fast_assign(
0207         DEV_ASSIGN;
0208         __entry->val = val;
0209     ),
0210     TP_printk(
0211         DEV_PR_FMT "%02hhx", DEV_PR_ARG, __entry->val
0212     )
0213 );
0214 
0215 DEFINE_EVENT(dev_simple_evt, temp_mode,
0216     TP_PROTO(struct mt7601u_dev *dev, u8 val),
0217     TP_ARGS(dev, val)
0218 );
0219 
0220 DEFINE_EVENT(dev_simple_evt, read_temp,
0221     TP_PROTO(struct mt7601u_dev *dev, u8 val),
0222     TP_ARGS(dev, val)
0223 );
0224 
0225 DEFINE_EVENT(dev_simple_evt, freq_cal_adjust,
0226     TP_PROTO(struct mt7601u_dev *dev, u8 val),
0227     TP_ARGS(dev, val)
0228 );
0229 
0230 TRACE_EVENT(freq_cal_offset,
0231     TP_PROTO(struct mt7601u_dev *dev, u8 phy_mode, s8 freq_off),
0232     TP_ARGS(dev, phy_mode, freq_off),
0233     TP_STRUCT__entry(
0234         DEV_ENTRY
0235         __field(u8, phy_mode)
0236         __field(s8, freq_off)
0237     ),
0238     TP_fast_assign(
0239         DEV_ASSIGN;
0240         __entry->phy_mode = phy_mode;
0241         __entry->freq_off = freq_off;
0242     ),
0243     TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx",
0244           DEV_PR_ARG, __entry->phy_mode, __entry->freq_off)
0245 );
0246 
0247 TRACE_EVENT(mt_rx,
0248     TP_PROTO(struct mt7601u_dev *dev, struct mt7601u_rxwi *rxwi, u32 f),
0249     TP_ARGS(dev, rxwi, f),
0250     TP_STRUCT__entry(
0251         DEV_ENTRY
0252         __field_struct(struct mt7601u_rxwi, rxwi)
0253         __field(u32, fce_info)
0254     ),
0255     TP_fast_assign(
0256         DEV_ASSIGN;
0257         __entry->rxwi = *rxwi;
0258         __entry->fce_info = f;
0259     ),
0260     TP_printk(DEV_PR_FMT "rxi:%08x ctl:%08x frag_sn:%04hx rate:%04hx "
0261           "uknw:%02hhx z:%02hhx%02hhx%02hhx snr:%02hhx "
0262           "ant:%02hhx gain:%02hhx freq_o:%02hhx "
0263           "r:%08x ea:%08x fce:%08x", DEV_PR_ARG,
0264           le32_to_cpu(__entry->rxwi.rxinfo),
0265           le32_to_cpu(__entry->rxwi.ctl),
0266           le16_to_cpu(__entry->rxwi.frag_sn),
0267           le16_to_cpu(__entry->rxwi.rate),
0268           __entry->rxwi.unknown,
0269           __entry->rxwi.zero[0], __entry->rxwi.zero[1],
0270           __entry->rxwi.zero[2],
0271           __entry->rxwi.snr, __entry->rxwi.ant,
0272           __entry->rxwi.gain, __entry->rxwi.freq_off,
0273           __entry->rxwi.resv2, __entry->rxwi.expert_ant,
0274           __entry->fce_info)
0275 );
0276 
0277 TRACE_EVENT(mt_tx,
0278     TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb,
0279          struct mt76_sta *sta, struct mt76_txwi *h),
0280     TP_ARGS(dev, skb, sta, h),
0281     TP_STRUCT__entry(
0282         DEV_ENTRY
0283         __field_struct(struct mt76_txwi, h)
0284         __field(struct sk_buff *, skb)
0285         __field(struct mt76_sta *, sta)
0286     ),
0287     TP_fast_assign(
0288         DEV_ASSIGN;
0289         __entry->h = *h;
0290         __entry->skb = skb;
0291         __entry->sta = sta;
0292     ),
0293     TP_printk(DEV_PR_FMT "skb:%p sta:%p  flg:%04hx rate_ctl:%04hx "
0294           "ack:%02hhx wcid:%02hhx len_ctl:%05hx", DEV_PR_ARG,
0295           __entry->skb, __entry->sta,
0296           le16_to_cpu(__entry->h.flags),
0297           le16_to_cpu(__entry->h.rate_ctl),
0298           __entry->h.ack_ctl, __entry->h.wcid,
0299           le16_to_cpu(__entry->h.len_ctl))
0300 );
0301 
0302 TRACE_EVENT(mt_tx_dma_done,
0303     TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb),
0304     TP_ARGS(dev, skb),
0305     TP_STRUCT__entry(
0306         DEV_ENTRY
0307         __field(struct sk_buff *, skb)
0308     ),
0309     TP_fast_assign(
0310         DEV_ASSIGN;
0311         __entry->skb = skb;
0312     ),
0313     TP_printk(DEV_PR_FMT "%p", DEV_PR_ARG, __entry->skb)
0314 );
0315 
0316 TRACE_EVENT(mt_tx_status_cleaned,
0317     TP_PROTO(struct mt7601u_dev *dev, int cleaned),
0318     TP_ARGS(dev, cleaned),
0319     TP_STRUCT__entry(
0320         DEV_ENTRY
0321         __field(int, cleaned)
0322     ),
0323     TP_fast_assign(
0324         DEV_ASSIGN;
0325         __entry->cleaned = cleaned;
0326     ),
0327     TP_printk(DEV_PR_FMT "%d", DEV_PR_ARG, __entry->cleaned)
0328 );
0329 
0330 TRACE_EVENT(mt_tx_status,
0331     TP_PROTO(struct mt7601u_dev *dev, u32 stat1, u32 stat2),
0332     TP_ARGS(dev, stat1, stat2),
0333     TP_STRUCT__entry(
0334         DEV_ENTRY
0335         __field(u32, stat1) __field(u32, stat2)
0336     ),
0337     TP_fast_assign(
0338         DEV_ASSIGN;
0339         __entry->stat1 = stat1;
0340         __entry->stat2 = stat2;
0341     ),
0342     TP_printk(DEV_PR_FMT "%08x %08x",
0343           DEV_PR_ARG, __entry->stat1, __entry->stat2)
0344 );
0345 
0346 TRACE_EVENT(mt_rx_dma_aggr,
0347     TP_PROTO(struct mt7601u_dev *dev, int cnt, bool paged),
0348     TP_ARGS(dev, cnt, paged),
0349     TP_STRUCT__entry(
0350         DEV_ENTRY
0351         __field(u8, cnt)
0352         __field(bool, paged)
0353     ),
0354     TP_fast_assign(
0355         DEV_ASSIGN;
0356         __entry->cnt = cnt;
0357         __entry->paged = paged;
0358     ),
0359     TP_printk(DEV_PR_FMT "cnt:%d paged:%d",
0360           DEV_PR_ARG, __entry->cnt, __entry->paged)
0361 );
0362 
0363 DEFINE_EVENT(dev_simple_evt, set_key,
0364     TP_PROTO(struct mt7601u_dev *dev, u8 val),
0365     TP_ARGS(dev, val)
0366 );
0367 
0368 TRACE_EVENT(set_shared_key,
0369     TP_PROTO(struct mt7601u_dev *dev, u8 vid, u8 key),
0370     TP_ARGS(dev, vid, key),
0371     TP_STRUCT__entry(
0372         DEV_ENTRY
0373         __field(u8, vid)
0374         __field(u8, key)
0375     ),
0376     TP_fast_assign(
0377         DEV_ASSIGN;
0378         __entry->vid = vid;
0379         __entry->key = key;
0380     ),
0381     TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx",
0382           DEV_PR_ARG, __entry->vid, __entry->key)
0383 );
0384 
0385 #endif
0386 
0387 #undef TRACE_INCLUDE_PATH
0388 #define TRACE_INCLUDE_PATH .
0389 #undef TRACE_INCLUDE_FILE
0390 #define TRACE_INCLUDE_FILE trace
0391 
0392 #include <trace/define_trace.h>