1416cf0b4SKalle Valo #if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 2416cf0b4SKalle Valo 3416cf0b4SKalle Valo #include <net/cfg80211.h> 4416cf0b4SKalle Valo #include <linux/skbuff.h> 5416cf0b4SKalle Valo #include <linux/tracepoint.h> 6416cf0b4SKalle Valo #include "wmi.h" 7e60c8154SKalle Valo #include "hif.h" 8416cf0b4SKalle Valo 9416cf0b4SKalle Valo #if !defined(_ATH6KL_TRACE_H) 10416cf0b4SKalle Valo static inline unsigned int ath6kl_get_wmi_id(void *buf, size_t buf_len) 11416cf0b4SKalle Valo { 12416cf0b4SKalle Valo struct wmi_cmd_hdr *hdr = buf; 13416cf0b4SKalle Valo 14416cf0b4SKalle Valo if (buf_len < sizeof(*hdr)) 15416cf0b4SKalle Valo return 0; 16416cf0b4SKalle Valo 17416cf0b4SKalle Valo return le16_to_cpu(hdr->cmd_id); 18416cf0b4SKalle Valo } 19416cf0b4SKalle Valo #endif /* __ATH6KL_TRACE_H */ 20416cf0b4SKalle Valo 21416cf0b4SKalle Valo #define _ATH6KL_TRACE_H 22416cf0b4SKalle Valo 23416cf0b4SKalle Valo /* create empty functions when tracing is disabled */ 24416cf0b4SKalle Valo #if !defined(CONFIG_ATH6KL_TRACING) 25416cf0b4SKalle Valo #undef TRACE_EVENT 26416cf0b4SKalle Valo #define TRACE_EVENT(name, proto, ...) \ 27416cf0b4SKalle Valo static inline void trace_ ## name(proto) {} 28416cf0b4SKalle Valo #endif /* !CONFIG_ATH6KL_TRACING || __CHECKER__ */ 29416cf0b4SKalle Valo 30416cf0b4SKalle Valo #undef TRACE_SYSTEM 31416cf0b4SKalle Valo #define TRACE_SYSTEM ath6kl 32416cf0b4SKalle Valo 33416cf0b4SKalle Valo TRACE_EVENT(ath6kl_wmi_cmd, 34416cf0b4SKalle Valo TP_PROTO(void *buf, size_t buf_len), 35416cf0b4SKalle Valo 36416cf0b4SKalle Valo TP_ARGS(buf, buf_len), 37416cf0b4SKalle Valo 38416cf0b4SKalle Valo TP_STRUCT__entry( 39416cf0b4SKalle Valo __field(unsigned int, id) 40416cf0b4SKalle Valo __field(size_t, buf_len) 41416cf0b4SKalle Valo __dynamic_array(u8, buf, buf_len) 42416cf0b4SKalle Valo ), 43416cf0b4SKalle Valo 44416cf0b4SKalle Valo TP_fast_assign( 45416cf0b4SKalle Valo __entry->id = ath6kl_get_wmi_id(buf, buf_len); 46416cf0b4SKalle Valo __entry->buf_len = buf_len; 47416cf0b4SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 48416cf0b4SKalle Valo ), 49416cf0b4SKalle Valo 50416cf0b4SKalle Valo TP_printk( 51416cf0b4SKalle Valo "id %d len %d", 52416cf0b4SKalle Valo __entry->id, __entry->buf_len 53416cf0b4SKalle Valo ) 54416cf0b4SKalle Valo ); 55416cf0b4SKalle Valo 56416cf0b4SKalle Valo TRACE_EVENT(ath6kl_wmi_event, 57416cf0b4SKalle Valo TP_PROTO(void *buf, size_t buf_len), 58416cf0b4SKalle Valo 59416cf0b4SKalle Valo TP_ARGS(buf, buf_len), 60416cf0b4SKalle Valo 61416cf0b4SKalle Valo TP_STRUCT__entry( 62416cf0b4SKalle Valo __field(unsigned int, id) 63416cf0b4SKalle Valo __field(size_t, buf_len) 64416cf0b4SKalle Valo __dynamic_array(u8, buf, buf_len) 65416cf0b4SKalle Valo ), 66416cf0b4SKalle Valo 67416cf0b4SKalle Valo TP_fast_assign( 68416cf0b4SKalle Valo __entry->id = ath6kl_get_wmi_id(buf, buf_len); 69416cf0b4SKalle Valo __entry->buf_len = buf_len; 70416cf0b4SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 71416cf0b4SKalle Valo ), 72416cf0b4SKalle Valo 73416cf0b4SKalle Valo TP_printk( 74416cf0b4SKalle Valo "id %d len %d", 75416cf0b4SKalle Valo __entry->id, __entry->buf_len 76416cf0b4SKalle Valo ) 77416cf0b4SKalle Valo ); 78416cf0b4SKalle Valo 79e60c8154SKalle Valo TRACE_EVENT(ath6kl_sdio, 80e60c8154SKalle Valo TP_PROTO(unsigned int addr, int flags, 81e60c8154SKalle Valo void *buf, size_t buf_len), 82e60c8154SKalle Valo 83e60c8154SKalle Valo TP_ARGS(addr, flags, buf, buf_len), 84e60c8154SKalle Valo 85e60c8154SKalle Valo TP_STRUCT__entry( 86e60c8154SKalle Valo __field(unsigned int, tx) 87e60c8154SKalle Valo __field(unsigned int, addr) 88e60c8154SKalle Valo __field(int, flags) 89e60c8154SKalle Valo __field(size_t, buf_len) 90e60c8154SKalle Valo __dynamic_array(u8, buf, buf_len) 91e60c8154SKalle Valo ), 92e60c8154SKalle Valo 93e60c8154SKalle Valo TP_fast_assign( 94e60c8154SKalle Valo __entry->addr = addr; 95e60c8154SKalle Valo __entry->flags = flags; 96e60c8154SKalle Valo __entry->buf_len = buf_len; 97e60c8154SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 98e60c8154SKalle Valo 99e60c8154SKalle Valo if (flags & HIF_WRITE) 100e60c8154SKalle Valo __entry->tx = 1; 101e60c8154SKalle Valo else 102e60c8154SKalle Valo __entry->tx = 0; 103e60c8154SKalle Valo ), 104e60c8154SKalle Valo 105e60c8154SKalle Valo TP_printk( 106e60c8154SKalle Valo "%s addr 0x%x flags 0x%x len %d\n", 107e60c8154SKalle Valo __entry->tx ? "tx" : "rx", 108e60c8154SKalle Valo __entry->addr, 109e60c8154SKalle Valo __entry->flags, 110e60c8154SKalle Valo __entry->buf_len 111e60c8154SKalle Valo ) 112e60c8154SKalle Valo ); 113e60c8154SKalle Valo 114e60c8154SKalle Valo TRACE_EVENT(ath6kl_sdio_scat, 115e60c8154SKalle Valo TP_PROTO(unsigned int addr, int flags, unsigned int total_len, 116e60c8154SKalle Valo unsigned int entries, struct hif_scatter_item *list), 117e60c8154SKalle Valo 118e60c8154SKalle Valo TP_ARGS(addr, flags, total_len, entries, list), 119e60c8154SKalle Valo 120e60c8154SKalle Valo TP_STRUCT__entry( 121e60c8154SKalle Valo __field(unsigned int, tx) 122e60c8154SKalle Valo __field(unsigned int, addr) 123e60c8154SKalle Valo __field(int, flags) 124e60c8154SKalle Valo __field(unsigned int, entries) 125e60c8154SKalle Valo __field(size_t, total_len) 126e60c8154SKalle Valo __dynamic_array(unsigned int, len_array, entries) 127e60c8154SKalle Valo __dynamic_array(u8, data, total_len) 128e60c8154SKalle Valo ), 129e60c8154SKalle Valo 130e60c8154SKalle Valo TP_fast_assign( 131e60c8154SKalle Valo unsigned int *len_array; 132e60c8154SKalle Valo int i, offset = 0; 133e60c8154SKalle Valo size_t len; 134e60c8154SKalle Valo 135e60c8154SKalle Valo __entry->addr = addr; 136e60c8154SKalle Valo __entry->flags = flags; 137e60c8154SKalle Valo __entry->entries = entries; 138e60c8154SKalle Valo __entry->total_len = total_len; 139e60c8154SKalle Valo 140e60c8154SKalle Valo if (flags & HIF_WRITE) 141e60c8154SKalle Valo __entry->tx = 1; 142e60c8154SKalle Valo else 143e60c8154SKalle Valo __entry->tx = 0; 144e60c8154SKalle Valo 145e60c8154SKalle Valo len_array = __get_dynamic_array(len_array); 146e60c8154SKalle Valo 147e60c8154SKalle Valo for (i = 0; i < entries; i++) { 148e60c8154SKalle Valo len = list[i].len; 149e60c8154SKalle Valo 150e60c8154SKalle Valo memcpy((u8 *) __get_dynamic_array(data) + offset, 151e60c8154SKalle Valo list[i].buf, len); 152e60c8154SKalle Valo 153e60c8154SKalle Valo len_array[i] = len; 154e60c8154SKalle Valo offset += len; 155e60c8154SKalle Valo } 156e60c8154SKalle Valo ), 157e60c8154SKalle Valo 158e60c8154SKalle Valo TP_printk( 159e60c8154SKalle Valo "%s addr 0x%x flags 0x%x entries %d total_len %d\n", 160e60c8154SKalle Valo __entry->tx ? "tx" : "rx", 161e60c8154SKalle Valo __entry->addr, 162e60c8154SKalle Valo __entry->flags, 163e60c8154SKalle Valo __entry->entries, 164e60c8154SKalle Valo __entry->total_len 165e60c8154SKalle Valo ) 166e60c8154SKalle Valo ); 167e60c8154SKalle Valo 168d57f093aSKalle Valo TRACE_EVENT(ath6kl_sdio_irq, 169d57f093aSKalle Valo TP_PROTO(void *buf, size_t buf_len), 170d57f093aSKalle Valo 171d57f093aSKalle Valo TP_ARGS(buf, buf_len), 172d57f093aSKalle Valo 173d57f093aSKalle Valo TP_STRUCT__entry( 174d57f093aSKalle Valo __field(size_t, buf_len) 175d57f093aSKalle Valo __dynamic_array(u8, buf, buf_len) 176d57f093aSKalle Valo ), 177d57f093aSKalle Valo 178d57f093aSKalle Valo TP_fast_assign( 179d57f093aSKalle Valo __entry->buf_len = buf_len; 180d57f093aSKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 181d57f093aSKalle Valo ), 182d57f093aSKalle Valo 183d57f093aSKalle Valo TP_printk( 184d57f093aSKalle Valo "irq len %d\n", __entry->buf_len 185d57f093aSKalle Valo ) 186d57f093aSKalle Valo ); 187d57f093aSKalle Valo 1884771979aSKalle Valo TRACE_EVENT(ath6kl_htc_rx, 1894771979aSKalle Valo TP_PROTO(int status, int endpoint, void *buf, 1904771979aSKalle Valo size_t buf_len), 1914771979aSKalle Valo 1924771979aSKalle Valo TP_ARGS(status, endpoint, buf, buf_len), 1934771979aSKalle Valo 1944771979aSKalle Valo TP_STRUCT__entry( 1954771979aSKalle Valo __field(int, status) 1964771979aSKalle Valo __field(int, endpoint) 1974771979aSKalle Valo __field(size_t, buf_len) 1984771979aSKalle Valo __dynamic_array(u8, buf, buf_len) 1994771979aSKalle Valo ), 2004771979aSKalle Valo 2014771979aSKalle Valo TP_fast_assign( 2024771979aSKalle Valo __entry->status = status; 2034771979aSKalle Valo __entry->endpoint = endpoint; 2044771979aSKalle Valo __entry->buf_len = buf_len; 2054771979aSKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 2064771979aSKalle Valo ), 2074771979aSKalle Valo 2084771979aSKalle Valo TP_printk( 2094771979aSKalle Valo "status %d endpoint %d len %d\n", 2104771979aSKalle Valo __entry->status, 2114771979aSKalle Valo __entry->endpoint, 2124771979aSKalle Valo __entry->buf_len 2134771979aSKalle Valo ) 2144771979aSKalle Valo ); 2154771979aSKalle Valo 2164771979aSKalle Valo TRACE_EVENT(ath6kl_htc_tx, 2174771979aSKalle Valo TP_PROTO(int status, int endpoint, void *buf, 2184771979aSKalle Valo size_t buf_len), 2194771979aSKalle Valo 2204771979aSKalle Valo TP_ARGS(status, endpoint, buf, buf_len), 2214771979aSKalle Valo 2224771979aSKalle Valo TP_STRUCT__entry( 2234771979aSKalle Valo __field(int, status) 2244771979aSKalle Valo __field(int, endpoint) 2254771979aSKalle Valo __field(size_t, buf_len) 2264771979aSKalle Valo __dynamic_array(u8, buf, buf_len) 2274771979aSKalle Valo ), 2284771979aSKalle Valo 2294771979aSKalle Valo TP_fast_assign( 2304771979aSKalle Valo __entry->status = status; 2314771979aSKalle Valo __entry->endpoint = endpoint; 2324771979aSKalle Valo __entry->buf_len = buf_len; 2334771979aSKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 2344771979aSKalle Valo ), 2354771979aSKalle Valo 2364771979aSKalle Valo TP_printk( 2374771979aSKalle Valo "status %d endpoint %d len %d\n", 2384771979aSKalle Valo __entry->status, 2394771979aSKalle Valo __entry->endpoint, 2404771979aSKalle Valo __entry->buf_len 2414771979aSKalle Valo ) 2424771979aSKalle Valo ); 2434771979aSKalle Valo 244416cf0b4SKalle Valo #endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/ 245416cf0b4SKalle Valo 246416cf0b4SKalle Valo /* we don't want to use include/trace/events */ 247416cf0b4SKalle Valo #undef TRACE_INCLUDE_PATH 248416cf0b4SKalle Valo #define TRACE_INCLUDE_PATH . 249416cf0b4SKalle Valo #undef TRACE_INCLUDE_FILE 250416cf0b4SKalle Valo #define TRACE_INCLUDE_FILE trace 251416cf0b4SKalle Valo 252416cf0b4SKalle Valo /* This part must be outside protection */ 253416cf0b4SKalle Valo #include <trace/define_trace.h> 254