• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/net/wireless/iwmc3200wifi/
1#if !defined(__IWM_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ)
2#define __IWM_TRACE_H__
3
4#include <linux/tracepoint.h>
5
6#if !defined(CONFIG_IWM_TRACING)
7#undef TRACE_EVENT
8#define TRACE_EVENT(name, proto, ...) \
9static inline void trace_ ## name(proto) {}
10#endif
11
12#undef TRACE_SYSTEM
13#define TRACE_SYSTEM iwm
14
15#define IWM_ENTRY	__array(char, ndev_name, 16)
16#define IWM_ASSIGN	strlcpy(__entry->ndev_name, iwm_to_ndev(iwm)->name, 16)
17#define IWM_PR_FMT	"%s"
18#define IWM_PR_ARG	__entry->ndev_name
19
20TRACE_EVENT(iwm_tx_nonwifi_cmd,
21	TP_PROTO(struct iwm_priv *iwm, struct iwm_udma_out_nonwifi_hdr *hdr),
22
23	TP_ARGS(iwm, hdr),
24
25	TP_STRUCT__entry(
26		IWM_ENTRY
27		__field(u8, opcode)
28		__field(u8, resp)
29		__field(u8, eot)
30		__field(u8, hw)
31		__field(u16, seq)
32		__field(u32, addr)
33		__field(u32, op1)
34		__field(u32, op2)
35	),
36
37	TP_fast_assign(
38		IWM_ASSIGN;
39		__entry->opcode = GET_VAL32(hdr->cmd, UMAC_HDI_OUT_CMD_OPCODE);
40		__entry->resp = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_NW_CMD_RESP);
41		__entry->eot = GET_VAL32(hdr->cmd, UMAC_HDI_OUT_CMD_EOT);
42		__entry->hw = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_NW_CMD_HANDLE_BY_HW);
43		__entry->seq = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_CMD_NON_WIFI_HW_SEQ_NUM);
44		__entry->addr = le32_to_cpu(hdr->addr);
45		__entry->op1 = le32_to_cpu(hdr->op1_sz);
46		__entry->op2 = le32_to_cpu(hdr->op2);
47	),
48
49	TP_printk(
50		IWM_PR_FMT " Tx TARGET CMD: opcode 0x%x, resp %d, eot %d, "
51		"hw %d, seq 0x%x, addr 0x%x, op1 0x%x, op2 0x%x",
52		IWM_PR_ARG, __entry->opcode, __entry->resp, __entry->eot,
53		__entry->hw, __entry->seq, __entry->addr, __entry->op1,
54		__entry->op2
55	)
56);
57
58TRACE_EVENT(iwm_tx_wifi_cmd,
59	TP_PROTO(struct iwm_priv *iwm, struct iwm_umac_wifi_out_hdr *hdr),
60
61	TP_ARGS(iwm, hdr),
62
63	TP_STRUCT__entry(
64		IWM_ENTRY
65		__field(u8, opcode)
66		__field(u8, lmac)
67		__field(u8, resp)
68		__field(u8, eot)
69		__field(u8, ra_tid)
70		__field(u8, credit_group)
71		__field(u8, color)
72		__field(u16, seq)
73	),
74
75	TP_fast_assign(
76		IWM_ASSIGN;
77		__entry->opcode = hdr->sw_hdr.cmd.cmd;
78		__entry->lmac = 0;
79		__entry->seq = __le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
80		__entry->resp = GET_VAL8(hdr->sw_hdr.cmd.flags, UMAC_DEV_CMD_FLAGS_RESP_REQ);
81		__entry->color = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_TX_STA_COLOR);
82		__entry->eot = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_OUT_CMD_EOT);
83		__entry->ra_tid = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_RATID);
84		__entry->credit_group = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_CREDIT_GRP);
85		if (__entry->opcode == UMAC_CMD_OPCODE_WIFI_PASS_THROUGH ||
86		    __entry->opcode == UMAC_CMD_OPCODE_WIFI_IF_WRAPPER) {
87			__entry->lmac = 1;
88			__entry->opcode = ((struct iwm_lmac_hdr *)(hdr + 1))->id;
89		}
90	),
91
92	TP_printk(
93		IWM_PR_FMT " Tx %cMAC CMD: opcode 0x%x, resp %d, eot %d, "
94		"seq 0x%x, sta_color 0x%x, ra_tid 0x%x, credit_group 0x%x",
95		IWM_PR_ARG, __entry->lmac ? 'L' : 'U', __entry->opcode,
96		__entry->resp, __entry->eot, __entry->seq, __entry->color,
97		__entry->ra_tid, __entry->credit_group
98	)
99);
100
101TRACE_EVENT(iwm_tx_packets,
102	TP_PROTO(struct iwm_priv *iwm, u8 *buf, int len),
103
104	TP_ARGS(iwm, buf, len),
105
106	TP_STRUCT__entry(
107		IWM_ENTRY
108		__field(u8, eot)
109		__field(u8, ra_tid)
110		__field(u8, credit_group)
111		__field(u8, color)
112		__field(u16, seq)
113		__field(u8, npkt)
114		__field(u32, bytes)
115	),
116
117	TP_fast_assign(
118		struct iwm_umac_wifi_out_hdr *hdr =
119			(struct iwm_umac_wifi_out_hdr *)buf;
120
121		IWM_ASSIGN;
122		__entry->eot = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_OUT_CMD_EOT);
123		__entry->ra_tid = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_RATID);
124		__entry->credit_group = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_CREDIT_GRP);
125		__entry->color = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_TX_STA_COLOR);
126		__entry->seq = __le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
127		__entry->npkt = 1;
128		__entry->bytes = len;
129
130		if (!__entry->eot) {
131			int count;
132			u8 *ptr = buf;
133
134			__entry->npkt = 0;
135			while (ptr < buf + len) {
136				count = GET_VAL32(hdr->sw_hdr.meta_data,
137						  UMAC_FW_CMD_BYTE_COUNT);
138				ptr += ALIGN(sizeof(*hdr) + count, 16);
139				hdr = (struct iwm_umac_wifi_out_hdr *)ptr;
140				__entry->npkt++;
141			}
142		}
143	),
144
145	TP_printk(
146		IWM_PR_FMT " Tx %spacket: eot %d, seq 0x%x, sta_color 0x%x, "
147		"ra_tid 0x%x, credit_group 0x%x, embeded_packets %d, %d bytes",
148		IWM_PR_ARG, !__entry->eot ? "concatenated " : "",
149		__entry->eot, __entry->seq, __entry->color, __entry->ra_tid,
150		__entry->credit_group, __entry->npkt, __entry->bytes
151	)
152);
153
154TRACE_EVENT(iwm_rx_nonwifi_cmd,
155	TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
156
157	TP_ARGS(iwm, buf, len),
158
159	TP_STRUCT__entry(
160		IWM_ENTRY
161		__field(u8, opcode)
162		__field(u16, seq)
163		__field(u32, len)
164	),
165
166	TP_fast_assign(
167		struct iwm_udma_in_hdr *hdr = buf;
168
169		IWM_ASSIGN;
170		__entry->opcode = GET_VAL32(hdr->cmd, UDMA_HDI_IN_NW_CMD_OPCODE);
171		__entry->seq = GET_VAL32(hdr->cmd, UDMA_HDI_IN_CMD_NON_WIFI_HW_SEQ_NUM);
172		__entry->len = len;
173	),
174
175	TP_printk(
176		IWM_PR_FMT " Rx TARGET RESP: opcode 0x%x, seq 0x%x, len 0x%x",
177		IWM_PR_ARG, __entry->opcode, __entry->seq, __entry->len
178	)
179);
180
181TRACE_EVENT(iwm_rx_wifi_cmd,
182	TP_PROTO(struct iwm_priv *iwm, struct iwm_umac_wifi_in_hdr *hdr),
183
184	TP_ARGS(iwm, hdr),
185
186	TP_STRUCT__entry(
187		IWM_ENTRY
188		__field(u8, cmd)
189		__field(u8, source)
190		__field(u16, seq)
191		__field(u32, count)
192	),
193
194	TP_fast_assign(
195		IWM_ASSIGN;
196		__entry->cmd = hdr->sw_hdr.cmd.cmd;
197		__entry->source = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_IN_CMD_SOURCE);
198		__entry->count = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_BYTE_COUNT);
199		__entry->seq = le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
200	),
201
202	TP_printk(
203		IWM_PR_FMT " Rx %s RESP: cmd 0x%x, seq 0x%x, count 0x%x",
204		IWM_PR_ARG, __entry->source == UMAC_HDI_IN_SOURCE_FHRX ? "LMAC" :
205		__entry->source == UMAC_HDI_IN_SOURCE_FW ? "UMAC" : "UDMA",
206		__entry->cmd, __entry->seq, __entry->count
207	)
208);
209
210#define iwm_ticket_action_symbol		\
211	{ IWM_RX_TICKET_DROP, "DROP" },		\
212	{ IWM_RX_TICKET_RELEASE, "RELEASE" },	\
213	{ IWM_RX_TICKET_SNIFFER, "SNIFFER" },	\
214	{ IWM_RX_TICKET_ENQUEUE, "ENQUEUE" }
215
216TRACE_EVENT(iwm_rx_ticket,
217	TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
218
219	TP_ARGS(iwm, buf, len),
220
221	TP_STRUCT__entry(
222		IWM_ENTRY
223		__field(u8, action)
224		__field(u8, reason)
225		__field(u16, id)
226		__field(u16, flags)
227	),
228
229	TP_fast_assign(
230		struct iwm_rx_ticket *ticket =
231			((struct iwm_umac_notif_rx_ticket *)buf)->tickets;
232
233		IWM_ASSIGN;
234		__entry->id = le16_to_cpu(ticket->id);
235		__entry->action = le16_to_cpu(ticket->action);
236		__entry->flags = le16_to_cpu(ticket->flags);
237		__entry->reason = (__entry->flags & IWM_RX_TICKET_DROP_REASON_MSK) >> IWM_RX_TICKET_DROP_REASON_POS;
238	),
239
240	TP_printk(
241		IWM_PR_FMT " Rx ticket: id 0x%x, action %s, %s 0x%x%s",
242		IWM_PR_ARG, __entry->id,
243		__print_symbolic(__entry->action, iwm_ticket_action_symbol),
244		__entry->reason ? "reason" : "flags",
245		__entry->reason ? __entry->reason : __entry->flags,
246		__entry->flags & IWM_RX_TICKET_AMSDU_MSK ? ", AMSDU frame" : ""
247	)
248);
249
250TRACE_EVENT(iwm_rx_packet,
251	TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
252
253	TP_ARGS(iwm, buf, len),
254
255	TP_STRUCT__entry(
256		IWM_ENTRY
257		__field(u8, source)
258		__field(u16, id)
259		__field(u32, len)
260	),
261
262	TP_fast_assign(
263		struct iwm_umac_wifi_in_hdr *hdr = buf;
264
265		IWM_ASSIGN;
266		__entry->source = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_IN_CMD_SOURCE);
267		__entry->id = le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
268		__entry->len = len - sizeof(*hdr);
269	),
270
271	TP_printk(
272		IWM_PR_FMT " Rx %s packet: id 0x%x, %d bytes",
273		IWM_PR_ARG, __entry->source == UMAC_HDI_IN_SOURCE_FHRX ?
274		"LMAC" : "UMAC", __entry->id, __entry->len
275	)
276);
277#endif
278
279#undef TRACE_INCLUDE_PATH
280#define TRACE_INCLUDE_PATH .
281#undef TRACE_INCLUDE_FILE
282#define TRACE_INCLUDE_FILE trace
283#include <trace/define_trace.h>
284