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 168416cf0b4SKalle Valo #endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/ 169416cf0b4SKalle Valo 170416cf0b4SKalle Valo /* we don't want to use include/trace/events */ 171416cf0b4SKalle Valo #undef TRACE_INCLUDE_PATH 172416cf0b4SKalle Valo #define TRACE_INCLUDE_PATH . 173416cf0b4SKalle Valo #undef TRACE_INCLUDE_FILE 174416cf0b4SKalle Valo #define TRACE_INCLUDE_FILE trace 175416cf0b4SKalle Valo 176416cf0b4SKalle Valo /* This part must be outside protection */ 177416cf0b4SKalle Valo #include <trace/define_trace.h> 178