| 1 |
|
| 2 | |
| 3 | * Tracepoints for Thunderbolt/USB4 networking driver
|
| 4 | *
|
| 5 | * Copyright (C) 2023, Intel Corporation
|
| 6 | * Author: Mika Westerberg <[email protected]>
|
| 7 |
|
| 8 |
|
| 9 | #undef TRACE_SYSTEM
|
| 10 | #define TRACE_SYSTEM thunderbolt_net
|
| 11 |
|
| 12 | #if !defined(__TRACE_THUNDERBOLT_NET_H) || defined(TRACE_HEADER_MULTI_READ)
|
| 13 | #define __TRACE_THUNDERBOLT_NET_H
|
| 14 |
|
| 15 | #include <linux/dma-direction.h>
|
| 16 | #include <linux/skbuff.h>
|
| 17 | #include <linux/tracepoint.h>
|
| 18 |
|
| 19 | #define DMA_DATA_DIRECTION_NAMES \
|
| 20 | { DMA_BIDIRECTIONAL, "DMA_BIDIRECTIONAL" }, \
|
| 21 | { DMA_TO_DEVICE, "DMA_TO_DEVICE" }, \
|
| 22 | { DMA_FROM_DEVICE, "DMA_FROM_DEVICE" }, \
|
| 23 | { DMA_NONE, "DMA_NONE" }
|
| 24 |
|
| 25 | DECLARE_EVENT_CLASS(tbnet_frame,
|
| 26 | TP_PROTO(unsigned int index, const void *page, dma_addr_t phys,
|
| 27 | enum dma_data_direction dir),
|
| 28 | TP_ARGS(index, page, phys, dir),
|
| 29 | TP_STRUCT__entry(
|
| 30 | __field(unsigned int, index)
|
| 31 | __field(const void *, page)
|
| 32 | __field(dma_addr_t, phys)
|
| 33 | __field(enum dma_data_direction, dir)
|
| 34 | ),
|
| 35 | TP_fast_assign(
|
| 36 | __entry->index = index;
|
| 37 | __entry->page = page;
|
| 38 | __entry->phys = phys;
|
| 39 | __entry->dir = dir;
|
| 40 | ),
|
| 41 | TP_printk("index=%u page=%p phys=%pad dir=%s",
|
| 42 | __entry->index, __entry->page, &__entry->phys,
|
| 43 | __print_symbolic(__entry->dir, DMA_DATA_DIRECTION_NAMES))
|
| 44 | );
|
| 45 |
|
| 46 | DEFINE_EVENT(tbnet_frame, tbnet_alloc_rx_frame,
|
| 47 | TP_PROTO(unsigned int index, const void *page, dma_addr_t phys,
|
| 48 | enum dma_data_direction dir),
|
| 49 | TP_ARGS(index, page, phys, dir)
|
| 50 | );
|
| 51 |
|
| 52 | DEFINE_EVENT(tbnet_frame, tbnet_alloc_tx_frame,
|
| 53 | TP_PROTO(unsigned int index, const void *page, dma_addr_t phys,
|
| 54 | enum dma_data_direction dir),
|
| 55 | TP_ARGS(index, page, phys, dir)
|
| 56 | );
|
| 57 |
|
| 58 | DEFINE_EVENT(tbnet_frame, tbnet_free_frame,
|
| 59 | TP_PROTO(unsigned int index, const void *page, dma_addr_t phys,
|
| 60 | enum dma_data_direction dir),
|
| 61 | TP_ARGS(index, page, phys, dir)
|
| 62 | );
|
| 63 |
|
| 64 | DECLARE_EVENT_CLASS(tbnet_ip_frame,
|
| 65 | TP_PROTO(__le32 size, __le16 id, __le16 index, __le32 count),
|
| 66 | TP_ARGS(size, id, index, count),
|
| 67 | TP_STRUCT__entry(
|
| 68 | __field(u32, size)
|
| 69 | __field(u16, id)
|
| 70 | __field(u16, index)
|
| 71 | __field(u32, count)
|
| 72 | ),
|
| 73 | TP_fast_assign(
|
| 74 | __entry->size = le32_to_cpu(size);
|
| 75 | __entry->id = le16_to_cpu(id);
|
| 76 | __entry->index = le16_to_cpu(index);
|
| 77 | __entry->count = le32_to_cpu(count);
|
| 78 | ),
|
| 79 | TP_printk("id=%u size=%u index=%u count=%u",
|
| 80 | __entry->id, __entry->size, __entry->index, __entry->count)
|
| 81 | );
|
| 82 |
|
| 83 | DEFINE_EVENT(tbnet_ip_frame, tbnet_rx_ip_frame,
|
| 84 | TP_PROTO(__le32 size, __le16 id, __le16 index, __le32 count),
|
| 85 | TP_ARGS(size, id, index, count)
|
| 86 | );
|
| 87 |
|
| 88 | DEFINE_EVENT(tbnet_ip_frame, tbnet_invalid_rx_ip_frame,
|
| 89 | TP_PROTO(__le32 size, __le16 id, __le16 index, __le32 count),
|
| 90 | TP_ARGS(size, id, index, count)
|
| 91 | );
|
| 92 |
|
| 93 | DEFINE_EVENT(tbnet_ip_frame, tbnet_tx_ip_frame,
|
| 94 | TP_PROTO(__le32 size, __le16 id, __le16 index, __le32 count),
|
| 95 | TP_ARGS(size, id, index, count)
|
| 96 | );
|
| 97 |
|
| 98 | DECLARE_EVENT_CLASS(tbnet_skb,
|
| 99 | TP_PROTO(const struct sk_buff *skb),
|
| 100 | TP_ARGS(skb),
|
| 101 | TP_STRUCT__entry(
|
| 102 | __field(const void *, addr)
|
| 103 | __field(unsigned int, len)
|
| 104 | __field(unsigned int, data_len)
|
| 105 | __field(unsigned int, nr_frags)
|
| 106 | ),
|
| 107 | TP_fast_assign(
|
| 108 | __entry->addr = skb;
|
| 109 | __entry->len = skb->len;
|
| 110 | __entry->data_len = skb->data_len;
|
| 111 | __entry->nr_frags = skb_shinfo(skb)->nr_frags;
|
| 112 | ),
|
| 113 | TP_printk("skb=%p len=%u data_len=%u nr_frags=%u",
|
| 114 | __entry->addr, __entry->len, __entry->data_len,
|
| 115 | __entry->nr_frags)
|
| 116 | );
|
| 117 |
|
| 118 | DEFINE_EVENT(tbnet_skb, tbnet_rx_skb,
|
| 119 | TP_PROTO(const struct sk_buff *skb),
|
| 120 | TP_ARGS(skb)
|
| 121 | );
|
| 122 |
|
| 123 | DEFINE_EVENT(tbnet_skb, tbnet_tx_skb,
|
| 124 | TP_PROTO(const struct sk_buff *skb),
|
| 125 | TP_ARGS(skb)
|
| 126 | );
|
| 127 |
|
| 128 | DEFINE_EVENT(tbnet_skb, tbnet_consume_skb,
|
| 129 | TP_PROTO(const struct sk_buff *skb),
|
| 130 | TP_ARGS(skb)
|
| 131 | );
|
| 132 |
|
| 133 | #endif
|
| 134 |
|
| 135 | #undef TRACE_INCLUDE_PATH
|
| 136 | #define TRACE_INCLUDE_PATH .
|
| 137 |
|
| 138 | #undef TRACE_INCLUDE_FILE
|
| 139 | #define TRACE_INCLUDE_FILE trace
|
| 140 |
|
| 141 | #include <trace/define_trace.h>
|