/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */

#undef TRACE_SYSTEM
#define TRACE_SYSTEM funeth

#if !defined(_TRACE_FUNETH_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_FUNETH_H

#include <linux/tracepoint.h>

#include "funeth_txrx.h"

TRACE_EVENT(funeth_tx,

	TP_PROTO(const struct funeth_txq *txq,
		 u32 len,
		 u32 sqe_idx,
		 u32 ngle),

	TP_ARGS(txq, len, sqe_idx, ngle),

	TP_STRUCT__entry(
		__field(u32, qidx)
		__field(u32, len)
		__field(u32, sqe_idx)
		__field(u32, ngle)
		__string(devname, txq->netdev->name)
	),

	TP_fast_assign(
		__entry->qidx = txq->qidx;
		__entry->len = len;
		__entry->sqe_idx = sqe_idx;
		__entry->ngle = ngle;
		__assign_str(devname, txq->netdev->name);
	),

	TP_printk("%s: Txq %u, SQE idx %u, len %u, num GLEs %u",
		  __get_str(devname), __entry->qidx, __entry->sqe_idx,
		  __entry->len, __entry->ngle)
);

TRACE_EVENT(funeth_tx_free,

	TP_PROTO(const struct funeth_txq *txq,
		 u32 sqe_idx,
		 u32 num_sqes,
		 u32 hw_head),

	TP_ARGS(txq, sqe_idx, num_sqes, hw_head),

	TP_STRUCT__entry(
		__field(u32, qidx)
		__field(u32, sqe_idx)
		__field(u32, num_sqes)
		__field(u32, hw_head)
		__string(devname, txq->netdev->name)
	),

	TP_fast_assign(
		__entry->qidx = txq->qidx;
		__entry->sqe_idx = sqe_idx;
		__entry->num_sqes = num_sqes;
		__entry->hw_head = hw_head;
		__assign_str(devname, txq->netdev->name);
	),

	TP_printk("%s: Txq %u, SQE idx %u, SQEs %u, HW head %u",
		  __get_str(devname), __entry->qidx, __entry->sqe_idx,
		  __entry->num_sqes, __entry->hw_head)
);

TRACE_EVENT(funeth_rx,

	TP_PROTO(const struct funeth_rxq *rxq,
		 u32 num_rqes,
		 u32 pkt_len,
		 u32 hash,
		 u32 cls_vec),

	TP_ARGS(rxq, num_rqes, pkt_len, hash, cls_vec),

	TP_STRUCT__entry(
		__field(u32, qidx)
		__field(u32, cq_head)
		__field(u32, num_rqes)
		__field(u32, len)
		__field(u32, hash)
		__field(u32, cls_vec)
		__string(devname, rxq->netdev->name)
	),

	TP_fast_assign(
		__entry->qidx = rxq->qidx;
		__entry->cq_head = rxq->cq_head;
		__entry->num_rqes = num_rqes;
		__entry->len = pkt_len;
		__entry->hash = hash;
		__entry->cls_vec = cls_vec;
		__assign_str(devname, rxq->netdev->name);
	),

	TP_printk("%s: Rxq %u, CQ head %u, RQEs %u, len %u, hash %u, CV %#x",
		  __get_str(devname), __entry->qidx, __entry->cq_head,
		  __entry->num_rqes, __entry->len, __entry->hash,
		  __entry->cls_vec)
);

#endif /* _TRACE_FUNETH_H */

/* Below must be outside protection. */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE funeth_trace

#include <trace/define_trace.h>
