1 #if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 2 3 #include <net/cfg80211.h> 4 #include <linux/skbuff.h> 5 #include <linux/tracepoint.h> 6 #include "wmi.h" 7 #include "hif.h" 8 9 #if !defined(_ATH6KL_TRACE_H) 10 static inline unsigned int ath6kl_get_wmi_id(void *buf, size_t buf_len) 11 { 12 struct wmi_cmd_hdr *hdr = buf; 13 14 if (buf_len < sizeof(*hdr)) 15 return 0; 16 17 return le16_to_cpu(hdr->cmd_id); 18 } 19 #endif /* __ATH6KL_TRACE_H */ 20 21 #define _ATH6KL_TRACE_H 22 23 /* create empty functions when tracing is disabled */ 24 #if !defined(CONFIG_ATH6KL_TRACING) 25 #undef TRACE_EVENT 26 #define TRACE_EVENT(name, proto, ...) \ 27 static inline void trace_ ## name(proto) {} 28 #endif /* !CONFIG_ATH6KL_TRACING || __CHECKER__ */ 29 30 #undef TRACE_SYSTEM 31 #define TRACE_SYSTEM ath6kl 32 33 TRACE_EVENT(ath6kl_wmi_cmd, 34 TP_PROTO(void *buf, size_t buf_len), 35 36 TP_ARGS(buf, buf_len), 37 38 TP_STRUCT__entry( 39 __field(unsigned int, id) 40 __field(size_t, buf_len) 41 __dynamic_array(u8, buf, buf_len) 42 ), 43 44 TP_fast_assign( 45 __entry->id = ath6kl_get_wmi_id(buf, buf_len); 46 __entry->buf_len = buf_len; 47 memcpy(__get_dynamic_array(buf), buf, buf_len); 48 ), 49 50 TP_printk( 51 "id %d len %d", 52 __entry->id, __entry->buf_len 53 ) 54 ); 55 56 TRACE_EVENT(ath6kl_wmi_event, 57 TP_PROTO(void *buf, size_t buf_len), 58 59 TP_ARGS(buf, buf_len), 60 61 TP_STRUCT__entry( 62 __field(unsigned int, id) 63 __field(size_t, buf_len) 64 __dynamic_array(u8, buf, buf_len) 65 ), 66 67 TP_fast_assign( 68 __entry->id = ath6kl_get_wmi_id(buf, buf_len); 69 __entry->buf_len = buf_len; 70 memcpy(__get_dynamic_array(buf), buf, buf_len); 71 ), 72 73 TP_printk( 74 "id %d len %d", 75 __entry->id, __entry->buf_len 76 ) 77 ); 78 79 TRACE_EVENT(ath6kl_sdio, 80 TP_PROTO(unsigned int addr, int flags, 81 void *buf, size_t buf_len), 82 83 TP_ARGS(addr, flags, buf, buf_len), 84 85 TP_STRUCT__entry( 86 __field(unsigned int, tx) 87 __field(unsigned int, addr) 88 __field(int, flags) 89 __field(size_t, buf_len) 90 __dynamic_array(u8, buf, buf_len) 91 ), 92 93 TP_fast_assign( 94 __entry->addr = addr; 95 __entry->flags = flags; 96 __entry->buf_len = buf_len; 97 memcpy(__get_dynamic_array(buf), buf, buf_len); 98 99 if (flags & HIF_WRITE) 100 __entry->tx = 1; 101 else 102 __entry->tx = 0; 103 ), 104 105 TP_printk( 106 "%s addr 0x%x flags 0x%x len %d\n", 107 __entry->tx ? "tx" : "rx", 108 __entry->addr, 109 __entry->flags, 110 __entry->buf_len 111 ) 112 ); 113 114 TRACE_EVENT(ath6kl_sdio_scat, 115 TP_PROTO(unsigned int addr, int flags, unsigned int total_len, 116 unsigned int entries, struct hif_scatter_item *list), 117 118 TP_ARGS(addr, flags, total_len, entries, list), 119 120 TP_STRUCT__entry( 121 __field(unsigned int, tx) 122 __field(unsigned int, addr) 123 __field(int, flags) 124 __field(unsigned int, entries) 125 __field(size_t, total_len) 126 __dynamic_array(unsigned int, len_array, entries) 127 __dynamic_array(u8, data, total_len) 128 ), 129 130 TP_fast_assign( 131 unsigned int *len_array; 132 int i, offset = 0; 133 size_t len; 134 135 __entry->addr = addr; 136 __entry->flags = flags; 137 __entry->entries = entries; 138 __entry->total_len = total_len; 139 140 if (flags & HIF_WRITE) 141 __entry->tx = 1; 142 else 143 __entry->tx = 0; 144 145 len_array = __get_dynamic_array(len_array); 146 147 for (i = 0; i < entries; i++) { 148 len = list[i].len; 149 150 memcpy((u8 *) __get_dynamic_array(data) + offset, 151 list[i].buf, len); 152 153 len_array[i] = len; 154 offset += len; 155 } 156 ), 157 158 TP_printk( 159 "%s addr 0x%x flags 0x%x entries %d total_len %d\n", 160 __entry->tx ? "tx" : "rx", 161 __entry->addr, 162 __entry->flags, 163 __entry->entries, 164 __entry->total_len 165 ) 166 ); 167 168 TRACE_EVENT(ath6kl_sdio_irq, 169 TP_PROTO(void *buf, size_t buf_len), 170 171 TP_ARGS(buf, buf_len), 172 173 TP_STRUCT__entry( 174 __field(size_t, buf_len) 175 __dynamic_array(u8, buf, buf_len) 176 ), 177 178 TP_fast_assign( 179 __entry->buf_len = buf_len; 180 memcpy(__get_dynamic_array(buf), buf, buf_len); 181 ), 182 183 TP_printk( 184 "irq len %d\n", __entry->buf_len 185 ) 186 ); 187 188 #endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/ 189 190 /* we don't want to use include/trace/events */ 191 #undef TRACE_INCLUDE_PATH 192 #define TRACE_INCLUDE_PATH . 193 #undef TRACE_INCLUDE_FILE 194 #define TRACE_INCLUDE_FILE trace 195 196 /* This part must be outside protection */ 197 #include <trace/define_trace.h> 198