162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Tracepoints for Thunderbolt/USB4 networking driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2023, Intel Corporation
662306a36Sopenharmony_ci * Author: Mika Westerberg <mika.westerberg@linux.intel.com>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#undef TRACE_SYSTEM
1062306a36Sopenharmony_ci#define TRACE_SYSTEM thunderbolt_net
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#if !defined(__TRACE_THUNDERBOLT_NET_H) || defined(TRACE_HEADER_MULTI_READ)
1362306a36Sopenharmony_ci#define __TRACE_THUNDERBOLT_NET_H
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include <linux/dma-direction.h>
1662306a36Sopenharmony_ci#include <linux/skbuff.h>
1762306a36Sopenharmony_ci#include <linux/tracepoint.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#define DMA_DATA_DIRECTION_NAMES			\
2062306a36Sopenharmony_ci	{ DMA_BIDIRECTIONAL, "DMA_BIDIRECTIONAL" },	\
2162306a36Sopenharmony_ci	{ DMA_TO_DEVICE, "DMA_TO_DEVICE" },		\
2262306a36Sopenharmony_ci	{ DMA_FROM_DEVICE, "DMA_FROM_DEVICE" },		\
2362306a36Sopenharmony_ci	{ DMA_NONE, "DMA_NONE" }
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(tbnet_frame,
2662306a36Sopenharmony_ci	TP_PROTO(unsigned int index, const void *page, dma_addr_t phys,
2762306a36Sopenharmony_ci		 enum dma_data_direction dir),
2862306a36Sopenharmony_ci	TP_ARGS(index, page, phys, dir),
2962306a36Sopenharmony_ci	TP_STRUCT__entry(
3062306a36Sopenharmony_ci		__field(unsigned int, index)
3162306a36Sopenharmony_ci		__field(const void *, page)
3262306a36Sopenharmony_ci		__field(dma_addr_t, phys)
3362306a36Sopenharmony_ci		__field(enum dma_data_direction, dir)
3462306a36Sopenharmony_ci	),
3562306a36Sopenharmony_ci	TP_fast_assign(
3662306a36Sopenharmony_ci		__entry->index = index;
3762306a36Sopenharmony_ci		__entry->page = page;
3862306a36Sopenharmony_ci		__entry->phys = phys;
3962306a36Sopenharmony_ci		__entry->dir = dir;
4062306a36Sopenharmony_ci	),
4162306a36Sopenharmony_ci	TP_printk("index=%u page=%p phys=%pad dir=%s",
4262306a36Sopenharmony_ci		  __entry->index, __entry->page, &__entry->phys,
4362306a36Sopenharmony_ci		__print_symbolic(__entry->dir, DMA_DATA_DIRECTION_NAMES))
4462306a36Sopenharmony_ci);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ciDEFINE_EVENT(tbnet_frame, tbnet_alloc_rx_frame,
4762306a36Sopenharmony_ci	TP_PROTO(unsigned int index, const void *page, dma_addr_t phys,
4862306a36Sopenharmony_ci		 enum dma_data_direction dir),
4962306a36Sopenharmony_ci	TP_ARGS(index, page, phys, dir)
5062306a36Sopenharmony_ci);
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciDEFINE_EVENT(tbnet_frame, tbnet_alloc_tx_frame,
5362306a36Sopenharmony_ci	TP_PROTO(unsigned int index, const void *page, dma_addr_t phys,
5462306a36Sopenharmony_ci		 enum dma_data_direction dir),
5562306a36Sopenharmony_ci	TP_ARGS(index, page, phys, dir)
5662306a36Sopenharmony_ci);
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciDEFINE_EVENT(tbnet_frame, tbnet_free_frame,
5962306a36Sopenharmony_ci	TP_PROTO(unsigned int index, const void *page, dma_addr_t phys,
6062306a36Sopenharmony_ci		 enum dma_data_direction dir),
6162306a36Sopenharmony_ci	TP_ARGS(index, page, phys, dir)
6262306a36Sopenharmony_ci);
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(tbnet_ip_frame,
6562306a36Sopenharmony_ci	TP_PROTO(__le32 size, __le16 id, __le16 index, __le32 count),
6662306a36Sopenharmony_ci	TP_ARGS(size, id, index, count),
6762306a36Sopenharmony_ci	TP_STRUCT__entry(
6862306a36Sopenharmony_ci		__field(u32, size)
6962306a36Sopenharmony_ci		__field(u16, id)
7062306a36Sopenharmony_ci		__field(u16, index)
7162306a36Sopenharmony_ci		__field(u32, count)
7262306a36Sopenharmony_ci	),
7362306a36Sopenharmony_ci	TP_fast_assign(
7462306a36Sopenharmony_ci		__entry->size = le32_to_cpu(size);
7562306a36Sopenharmony_ci		__entry->id = le16_to_cpu(id);
7662306a36Sopenharmony_ci		__entry->index = le16_to_cpu(index);
7762306a36Sopenharmony_ci		__entry->count = le32_to_cpu(count);
7862306a36Sopenharmony_ci	),
7962306a36Sopenharmony_ci	TP_printk("id=%u size=%u index=%u count=%u",
8062306a36Sopenharmony_ci		  __entry->id, __entry->size, __entry->index, __entry->count)
8162306a36Sopenharmony_ci);
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciDEFINE_EVENT(tbnet_ip_frame, tbnet_rx_ip_frame,
8462306a36Sopenharmony_ci	TP_PROTO(__le32 size, __le16 id, __le16 index, __le32 count),
8562306a36Sopenharmony_ci	TP_ARGS(size, id, index, count)
8662306a36Sopenharmony_ci);
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ciDEFINE_EVENT(tbnet_ip_frame, tbnet_invalid_rx_ip_frame,
8962306a36Sopenharmony_ci	TP_PROTO(__le32 size, __le16 id, __le16 index, __le32 count),
9062306a36Sopenharmony_ci	TP_ARGS(size, id, index, count)
9162306a36Sopenharmony_ci);
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ciDEFINE_EVENT(tbnet_ip_frame, tbnet_tx_ip_frame,
9462306a36Sopenharmony_ci	TP_PROTO(__le32 size, __le16 id, __le16 index, __le32 count),
9562306a36Sopenharmony_ci	TP_ARGS(size, id, index, count)
9662306a36Sopenharmony_ci);
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ciDECLARE_EVENT_CLASS(tbnet_skb,
9962306a36Sopenharmony_ci	TP_PROTO(const struct sk_buff *skb),
10062306a36Sopenharmony_ci	TP_ARGS(skb),
10162306a36Sopenharmony_ci	TP_STRUCT__entry(
10262306a36Sopenharmony_ci		__field(const void *, addr)
10362306a36Sopenharmony_ci		__field(unsigned int, len)
10462306a36Sopenharmony_ci		__field(unsigned int, data_len)
10562306a36Sopenharmony_ci		__field(unsigned int, nr_frags)
10662306a36Sopenharmony_ci	),
10762306a36Sopenharmony_ci	TP_fast_assign(
10862306a36Sopenharmony_ci		__entry->addr = skb;
10962306a36Sopenharmony_ci		__entry->len = skb->len;
11062306a36Sopenharmony_ci		__entry->data_len = skb->data_len;
11162306a36Sopenharmony_ci		__entry->nr_frags = skb_shinfo(skb)->nr_frags;
11262306a36Sopenharmony_ci	),
11362306a36Sopenharmony_ci	TP_printk("skb=%p len=%u data_len=%u nr_frags=%u",
11462306a36Sopenharmony_ci		  __entry->addr, __entry->len, __entry->data_len,
11562306a36Sopenharmony_ci		  __entry->nr_frags)
11662306a36Sopenharmony_ci);
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ciDEFINE_EVENT(tbnet_skb, tbnet_rx_skb,
11962306a36Sopenharmony_ci	TP_PROTO(const struct sk_buff *skb),
12062306a36Sopenharmony_ci	TP_ARGS(skb)
12162306a36Sopenharmony_ci);
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ciDEFINE_EVENT(tbnet_skb, tbnet_tx_skb,
12462306a36Sopenharmony_ci	TP_PROTO(const struct sk_buff *skb),
12562306a36Sopenharmony_ci	TP_ARGS(skb)
12662306a36Sopenharmony_ci);
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ciDEFINE_EVENT(tbnet_skb, tbnet_consume_skb,
12962306a36Sopenharmony_ci	TP_PROTO(const struct sk_buff *skb),
13062306a36Sopenharmony_ci	TP_ARGS(skb)
13162306a36Sopenharmony_ci);
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci#endif /* _TRACE_THUNDERBOLT_NET_H */
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH
13662306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH .
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE
13962306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci#include <trace/define_trace.h>
142