Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: ISC */
0002 #if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
0003 
0004 #include <net/cfg80211.h>
0005 #include <linux/skbuff.h>
0006 #include <linux/tracepoint.h>
0007 #include "wmi.h"
0008 #include "hif.h"
0009 
0010 #if !defined(_ATH6KL_TRACE_H)
0011 static inline unsigned int ath6kl_get_wmi_id(void *buf, size_t buf_len)
0012 {
0013     struct wmi_cmd_hdr *hdr = buf;
0014 
0015     if (buf_len < sizeof(*hdr))
0016         return 0;
0017 
0018     return le16_to_cpu(hdr->cmd_id);
0019 }
0020 #endif /* __ATH6KL_TRACE_H */
0021 
0022 #define _ATH6KL_TRACE_H
0023 
0024 /* create empty functions when tracing is disabled */
0025 #if !defined(CONFIG_ATH6KL_TRACING)
0026 #undef TRACE_EVENT
0027 #define TRACE_EVENT(name, proto, ...) \
0028 static inline void trace_ ## name(proto) {}
0029 #undef DECLARE_EVENT_CLASS
0030 #define DECLARE_EVENT_CLASS(...)
0031 #undef DEFINE_EVENT
0032 #define DEFINE_EVENT(evt_class, name, proto, ...) \
0033 static inline void trace_ ## name(proto) {}
0034 #endif /* !CONFIG_ATH6KL_TRACING || __CHECKER__ */
0035 
0036 #undef TRACE_SYSTEM
0037 #define TRACE_SYSTEM ath6kl
0038 
0039 TRACE_EVENT(ath6kl_wmi_cmd,
0040     TP_PROTO(void *buf, size_t buf_len),
0041 
0042     TP_ARGS(buf, buf_len),
0043 
0044     TP_STRUCT__entry(
0045         __field(unsigned int, id)
0046         __field(size_t, buf_len)
0047         __dynamic_array(u8, buf, buf_len)
0048     ),
0049 
0050     TP_fast_assign(
0051         __entry->id = ath6kl_get_wmi_id(buf, buf_len);
0052         __entry->buf_len = buf_len;
0053         memcpy(__get_dynamic_array(buf), buf, buf_len);
0054     ),
0055 
0056     TP_printk(
0057         "id %d len %zd",
0058         __entry->id, __entry->buf_len
0059     )
0060 );
0061 
0062 TRACE_EVENT(ath6kl_wmi_event,
0063     TP_PROTO(void *buf, size_t buf_len),
0064 
0065     TP_ARGS(buf, buf_len),
0066 
0067     TP_STRUCT__entry(
0068         __field(unsigned int, id)
0069         __field(size_t, buf_len)
0070         __dynamic_array(u8, buf, buf_len)
0071     ),
0072 
0073     TP_fast_assign(
0074         __entry->id = ath6kl_get_wmi_id(buf, buf_len);
0075         __entry->buf_len = buf_len;
0076         memcpy(__get_dynamic_array(buf), buf, buf_len);
0077     ),
0078 
0079     TP_printk(
0080         "id %d len %zd",
0081         __entry->id, __entry->buf_len
0082     )
0083 );
0084 
0085 TRACE_EVENT(ath6kl_sdio,
0086     TP_PROTO(unsigned int addr, int flags,
0087          void *buf, size_t buf_len),
0088 
0089     TP_ARGS(addr, flags, buf, buf_len),
0090 
0091     TP_STRUCT__entry(
0092         __field(unsigned int, tx)
0093         __field(unsigned int, addr)
0094         __field(int, flags)
0095         __field(size_t, buf_len)
0096         __dynamic_array(u8, buf, buf_len)
0097     ),
0098 
0099     TP_fast_assign(
0100         __entry->addr = addr;
0101         __entry->flags = flags;
0102         __entry->buf_len = buf_len;
0103         memcpy(__get_dynamic_array(buf), buf, buf_len);
0104 
0105         if (flags & HIF_WRITE)
0106             __entry->tx = 1;
0107         else
0108             __entry->tx = 0;
0109     ),
0110 
0111     TP_printk(
0112         "%s addr 0x%x flags 0x%x len %zd\n",
0113         __entry->tx ? "tx" : "rx",
0114         __entry->addr,
0115         __entry->flags,
0116         __entry->buf_len
0117     )
0118 );
0119 
0120 TRACE_EVENT(ath6kl_sdio_scat,
0121     TP_PROTO(unsigned int addr, int flags, unsigned int total_len,
0122          unsigned int entries, struct hif_scatter_item *list),
0123 
0124     TP_ARGS(addr, flags, total_len, entries, list),
0125 
0126     TP_STRUCT__entry(
0127         __field(unsigned int, tx)
0128         __field(unsigned int, addr)
0129         __field(int, flags)
0130         __field(unsigned int, entries)
0131         __field(size_t, total_len)
0132         __dynamic_array(unsigned int, len_array, entries)
0133         __dynamic_array(u8, data, total_len)
0134     ),
0135 
0136     TP_fast_assign(
0137         unsigned int *len_array;
0138         int i, offset = 0;
0139         size_t len;
0140 
0141         __entry->addr = addr;
0142         __entry->flags = flags;
0143         __entry->entries = entries;
0144         __entry->total_len = total_len;
0145 
0146         if (flags & HIF_WRITE)
0147             __entry->tx = 1;
0148         else
0149             __entry->tx = 0;
0150 
0151         len_array = __get_dynamic_array(len_array);
0152 
0153         for (i = 0; i < entries; i++) {
0154             len = list[i].len;
0155 
0156             memcpy((u8 *) __get_dynamic_array(data) + offset,
0157                    list[i].buf, len);
0158 
0159             len_array[i] = len;
0160             offset += len;
0161         }
0162     ),
0163 
0164     TP_printk(
0165         "%s addr 0x%x flags 0x%x entries %d total_len %zd\n",
0166         __entry->tx ? "tx" : "rx",
0167         __entry->addr,
0168         __entry->flags,
0169         __entry->entries,
0170         __entry->total_len
0171     )
0172 );
0173 
0174 TRACE_EVENT(ath6kl_sdio_irq,
0175     TP_PROTO(void *buf, size_t buf_len),
0176 
0177     TP_ARGS(buf, buf_len),
0178 
0179     TP_STRUCT__entry(
0180         __field(size_t, buf_len)
0181         __dynamic_array(u8, buf, buf_len)
0182     ),
0183 
0184     TP_fast_assign(
0185         __entry->buf_len = buf_len;
0186         memcpy(__get_dynamic_array(buf), buf, buf_len);
0187     ),
0188 
0189     TP_printk(
0190         "irq len %zd\n", __entry->buf_len
0191     )
0192 );
0193 
0194 TRACE_EVENT(ath6kl_htc_rx,
0195     TP_PROTO(int status, int endpoint, void *buf,
0196          size_t buf_len),
0197 
0198     TP_ARGS(status, endpoint, buf, buf_len),
0199 
0200     TP_STRUCT__entry(
0201         __field(int, status)
0202         __field(int, endpoint)
0203         __field(size_t, buf_len)
0204         __dynamic_array(u8, buf, buf_len)
0205     ),
0206 
0207     TP_fast_assign(
0208         __entry->status = status;
0209         __entry->endpoint = endpoint;
0210         __entry->buf_len = buf_len;
0211         memcpy(__get_dynamic_array(buf), buf, buf_len);
0212     ),
0213 
0214     TP_printk(
0215         "status %d endpoint %d len %zd\n",
0216         __entry->status,
0217         __entry->endpoint,
0218         __entry->buf_len
0219     )
0220 );
0221 
0222 TRACE_EVENT(ath6kl_htc_tx,
0223     TP_PROTO(int status, int endpoint, void *buf,
0224          size_t buf_len),
0225 
0226     TP_ARGS(status, endpoint, buf, buf_len),
0227 
0228     TP_STRUCT__entry(
0229         __field(int, status)
0230         __field(int, endpoint)
0231         __field(size_t, buf_len)
0232         __dynamic_array(u8, buf, buf_len)
0233     ),
0234 
0235     TP_fast_assign(
0236         __entry->status = status;
0237         __entry->endpoint = endpoint;
0238         __entry->buf_len = buf_len;
0239         memcpy(__get_dynamic_array(buf), buf, buf_len);
0240     ),
0241 
0242     TP_printk(
0243         "status %d endpoint %d len %zd\n",
0244         __entry->status,
0245         __entry->endpoint,
0246         __entry->buf_len
0247     )
0248 );
0249 
0250 #define ATH6KL_MSG_MAX 200
0251 
0252 DECLARE_EVENT_CLASS(ath6kl_log_event,
0253     TP_PROTO(struct va_format *vaf),
0254     TP_ARGS(vaf),
0255     TP_STRUCT__entry(
0256         __vstring(msg, vaf->fmt, vaf->va)
0257     ),
0258     TP_fast_assign(
0259         __assign_vstr(msg, vaf->fmt, vaf->va);
0260     ),
0261     TP_printk("%s", __get_str(msg))
0262 );
0263 
0264 DEFINE_EVENT(ath6kl_log_event, ath6kl_log_err,
0265          TP_PROTO(struct va_format *vaf),
0266          TP_ARGS(vaf)
0267 );
0268 
0269 DEFINE_EVENT(ath6kl_log_event, ath6kl_log_warn,
0270          TP_PROTO(struct va_format *vaf),
0271          TP_ARGS(vaf)
0272 );
0273 
0274 DEFINE_EVENT(ath6kl_log_event, ath6kl_log_info,
0275          TP_PROTO(struct va_format *vaf),
0276          TP_ARGS(vaf)
0277 );
0278 
0279 TRACE_EVENT(ath6kl_log_dbg,
0280     TP_PROTO(unsigned int level, struct va_format *vaf),
0281     TP_ARGS(level, vaf),
0282     TP_STRUCT__entry(
0283         __field(unsigned int, level)
0284         __vstring(msg, vaf->fmt, vaf->va)
0285     ),
0286     TP_fast_assign(
0287         __entry->level = level;
0288         __assign_vstr(msg, vaf->fmt, vaf->va);
0289     ),
0290     TP_printk("%s", __get_str(msg))
0291 );
0292 
0293 TRACE_EVENT(ath6kl_log_dbg_dump,
0294     TP_PROTO(const char *msg, const char *prefix,
0295          const void *buf, size_t buf_len),
0296 
0297     TP_ARGS(msg, prefix, buf, buf_len),
0298 
0299     TP_STRUCT__entry(
0300         __string(msg, msg)
0301         __string(prefix, prefix)
0302         __field(size_t, buf_len)
0303         __dynamic_array(u8, buf, buf_len)
0304     ),
0305 
0306     TP_fast_assign(
0307         __assign_str(msg, msg);
0308         __assign_str(prefix, prefix);
0309         __entry->buf_len = buf_len;
0310         memcpy(__get_dynamic_array(buf), buf, buf_len);
0311     ),
0312 
0313     TP_printk(
0314         "%s/%s\n", __get_str(prefix), __get_str(msg)
0315     )
0316 );
0317 
0318 #endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/
0319 
0320 /* we don't want to use include/trace/events */
0321 #undef TRACE_INCLUDE_PATH
0322 #define TRACE_INCLUDE_PATH .
0323 #undef TRACE_INCLUDE_FILE
0324 #define TRACE_INCLUDE_FILE trace
0325 
0326 /* This part must be outside protection */
0327 #include <trace/define_trace.h>