1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright(c) 2021        Intel Corporation
4  */
5 
6 #if !defined(CONFIG_IWLWIFI_DEVICE_TRACING)
7 
8 #define trace_iwlmei_sap_data(...)
9 
10 #else
11 
12 #if !defined(__IWLWIFI_DEVICE_TRACE_IWLWIFI_SAP_DATA) || defined(TRACE_HEADER_MULTI_READ)
13 
14 #ifndef __IWLWIFI_DEVICE_TRACE_IWLWIFI_SAP_DATA
15 enum iwl_sap_data_trace_type {
16 	IWL_SAP_RX_DATA_TO_AIR,
17 	IWL_SAP_TX_DATA_FROM_AIR,
18 	IWL_SAP_RX_DATA_DROPPED_FROM_AIR,
19 	IWL_SAP_TX_DHCP,
20 };
21 
22 static inline size_t
23 iwlmei_sap_data_offset(enum iwl_sap_data_trace_type trace_type)
24 {
25 	switch (trace_type) {
26 	case IWL_SAP_RX_DATA_TO_AIR:
27 		return 0;
28 	case IWL_SAP_TX_DATA_FROM_AIR:
29 	case IWL_SAP_RX_DATA_DROPPED_FROM_AIR:
30 		return sizeof(struct iwl_sap_hdr);
31 	case IWL_SAP_TX_DHCP:
32 		return sizeof(struct iwl_sap_cb_data);
33 	default:
34 		WARN_ON_ONCE(1);
35 	}
36 
37 	return 0;
38 }
39 #endif
40 
41 #define __IWLWIFI_DEVICE_TRACE_IWLWIFI_SAP_DATA
42 
43 #include <linux/tracepoint.h>
44 #include <linux/skbuff.h>
45 #include "sap.h"
46 
47 #undef TRACE_SYSTEM
48 #define TRACE_SYSTEM iwlmei_sap_data
49 
50 TRACE_EVENT(iwlmei_sap_data,
51 	TP_PROTO(const struct sk_buff *skb,
52 		 enum iwl_sap_data_trace_type trace_type),
53 	TP_ARGS(skb, trace_type),
54 	TP_STRUCT__entry(
55 		__dynamic_array(u8, data,
56 				skb->len - iwlmei_sap_data_offset(trace_type))
57 		__field(u32, trace_type)
58 	),
59 	TP_fast_assign(
60 		size_t offset = iwlmei_sap_data_offset(trace_type);
61 		__entry->trace_type = trace_type;
62 		skb_copy_bits(skb, offset, __get_dynamic_array(data),
63 			      skb->len - offset);
64 	),
65 	TP_printk("sap_data:trace_type %d len %d",
66 		  __entry->trace_type, __get_dynamic_array_len(data))
67 );
68 
69 /*
70  * If you add something here, add a stub in case
71  * !defined(CONFIG_IWLWIFI_DEVICE_TRACING)
72  */
73 
74 #endif /* __IWLWIFI_DEVICE_TRACE_IWLWIFI_SAP_DATA */
75 
76 #undef TRACE_INCLUDE_PATH
77 #define TRACE_INCLUDE_PATH .
78 #undef TRACE_INCLUDE_FILE
79 #define TRACE_INCLUDE_FILE trace-data
80 #include <trace/define_trace.h>
81 
82 #endif /* CONFIG_IWLWIFI_DEVICE_TRACING */
83