// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright(c) 2021        Intel Corporation
 */

#if !defined(CONFIG_IWLWIFI_DEVICE_TRACING)

#define trace_iwlmei_sap_data(...)

#else

#if !defined(__IWLWIFI_DEVICE_TRACE_IWLWIFI_SAP_DATA) || defined(TRACE_HEADER_MULTI_READ)

#ifndef __IWLWIFI_DEVICE_TRACE_IWLWIFI_SAP_DATA
enum iwl_sap_data_trace_type {
	IWL_SAP_RX_DATA_TO_AIR,
	IWL_SAP_TX_DATA_FROM_AIR,
	IWL_SAP_RX_DATA_DROPPED_FROM_AIR,
	IWL_SAP_TX_DHCP,
};

static inline size_t
iwlmei_sap_data_offset(enum iwl_sap_data_trace_type trace_type)
{
	switch (trace_type) {
	case IWL_SAP_RX_DATA_TO_AIR:
		return 0;
	case IWL_SAP_TX_DATA_FROM_AIR:
	case IWL_SAP_RX_DATA_DROPPED_FROM_AIR:
		return sizeof(struct iwl_sap_hdr);
	case IWL_SAP_TX_DHCP:
		return sizeof(struct iwl_sap_cb_data);
	default:
		WARN_ON_ONCE(1);
	}

	return 0;
}
#endif

#define __IWLWIFI_DEVICE_TRACE_IWLWIFI_SAP_DATA

#include <linux/tracepoint.h>
#include <linux/skbuff.h>
#include "sap.h"

#undef TRACE_SYSTEM
#define TRACE_SYSTEM iwlmei_sap_data

TRACE_EVENT(iwlmei_sap_data,
	TP_PROTO(const struct sk_buff *skb,
		 enum iwl_sap_data_trace_type trace_type),
	TP_ARGS(skb, trace_type),
	TP_STRUCT__entry(
		__dynamic_array(u8, data,
				skb->len - iwlmei_sap_data_offset(trace_type))
		__field(u32, trace_type)
	),
	TP_fast_assign(
		size_t offset = iwlmei_sap_data_offset(trace_type);
		__entry->trace_type = trace_type;
		skb_copy_bits(skb, offset, __get_dynamic_array(data),
			      skb->len - offset);
	),
	TP_printk("sap_data:trace_type %d len %d",
		  __entry->trace_type, __get_dynamic_array_len(data))
);

/*
 * If you add something here, add a stub in case
 * !defined(CONFIG_IWLWIFI_DEVICE_TRACING)
 */

#endif /* __IWLWIFI_DEVICE_TRACE_IWLWIFI_SAP_DATA */

#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE trace-data
#include <trace/define_trace.h>

#endif /* CONFIG_IWLWIFI_DEVICE_TRACING */
