1698a8954SYunsheng Lin /* SPDX-License-Identifier: GPL-2.0+ */
2698a8954SYunsheng Lin /* Copyright (c) 2018-2019 Hisilicon Limited. */
3698a8954SYunsheng Lin 
4698a8954SYunsheng Lin /* This must be outside ifdef _HNS3_TRACE_H */
5698a8954SYunsheng Lin #undef TRACE_SYSTEM
6698a8954SYunsheng Lin #define TRACE_SYSTEM hns3
7698a8954SYunsheng Lin 
8698a8954SYunsheng Lin #if !defined(_HNS3_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
9698a8954SYunsheng Lin #define _HNS3_TRACE_H_
10698a8954SYunsheng Lin 
11698a8954SYunsheng Lin #include <linux/tracepoint.h>
12698a8954SYunsheng Lin 
13698a8954SYunsheng Lin #define DESC_NR		(sizeof(struct hns3_desc) / sizeof(u32))
14698a8954SYunsheng Lin 
15698a8954SYunsheng Lin DECLARE_EVENT_CLASS(hns3_skb_template,
16698a8954SYunsheng Lin 	TP_PROTO(struct sk_buff *skb),
17698a8954SYunsheng Lin 	TP_ARGS(skb),
18698a8954SYunsheng Lin 
19698a8954SYunsheng Lin 	TP_STRUCT__entry(
20698a8954SYunsheng Lin 		__field(unsigned int, headlen)
21698a8954SYunsheng Lin 		__field(unsigned int, len)
22698a8954SYunsheng Lin 		__field(__u8, nr_frags)
23698a8954SYunsheng Lin 		__field(__u8, ip_summed)
24698a8954SYunsheng Lin 		__field(unsigned int, hdr_len)
25698a8954SYunsheng Lin 		__field(unsigned short, gso_size)
26698a8954SYunsheng Lin 		__field(unsigned short, gso_segs)
27698a8954SYunsheng Lin 		__field(unsigned int, gso_type)
28698a8954SYunsheng Lin 		__field(bool, fraglist)
29698a8954SYunsheng Lin 		__array(__u32, size, MAX_SKB_FRAGS)
30698a8954SYunsheng Lin 	),
31698a8954SYunsheng Lin 
32698a8954SYunsheng Lin 	TP_fast_assign(
33698a8954SYunsheng Lin 		__entry->headlen = skb_headlen(skb);
34698a8954SYunsheng Lin 		__entry->len = skb->len;
35698a8954SYunsheng Lin 		__entry->nr_frags = skb_shinfo(skb)->nr_frags;
36698a8954SYunsheng Lin 		__entry->gso_size = skb_shinfo(skb)->gso_size;
37698a8954SYunsheng Lin 		__entry->gso_segs = skb_shinfo(skb)->gso_segs;
38698a8954SYunsheng Lin 		__entry->gso_type = skb_shinfo(skb)->gso_type;
39698a8954SYunsheng Lin 		__entry->hdr_len = skb->encapsulation ?
40*504148feSEric Dumazet 		skb_inner_tcp_all_headers(skb) : skb_tcp_all_headers(skb);
41698a8954SYunsheng Lin 		__entry->ip_summed = skb->ip_summed;
42698a8954SYunsheng Lin 		__entry->fraglist = skb_has_frag_list(skb);
43698a8954SYunsheng Lin 		hns3_shinfo_pack(skb_shinfo(skb), __entry->size);
44698a8954SYunsheng Lin 	),
45698a8954SYunsheng Lin 
46698a8954SYunsheng Lin 	TP_printk(
47698a8954SYunsheng Lin 		"len: %u, %u, %u, cs: %u, gso: %u, %u, %x, frag(%d %u): %s",
48698a8954SYunsheng Lin 		__entry->headlen, __entry->len, __entry->hdr_len,
49698a8954SYunsheng Lin 		__entry->ip_summed, __entry->gso_size, __entry->gso_segs,
50698a8954SYunsheng Lin 		__entry->gso_type, __entry->fraglist, __entry->nr_frags,
51698a8954SYunsheng Lin 		__print_array(__entry->size, MAX_SKB_FRAGS, sizeof(__u32))
52698a8954SYunsheng Lin 	)
53698a8954SYunsheng Lin );
54698a8954SYunsheng Lin 
556ad595bcSHuazhong Tan DEFINE_EVENT(hns3_skb_template, hns3_over_max_bd,
56698a8954SYunsheng Lin 	TP_PROTO(struct sk_buff *skb),
57698a8954SYunsheng Lin 	TP_ARGS(skb));
58698a8954SYunsheng Lin 
59698a8954SYunsheng Lin DEFINE_EVENT(hns3_skb_template, hns3_gro,
60698a8954SYunsheng Lin 	TP_PROTO(struct sk_buff *skb),
61698a8954SYunsheng Lin 	TP_ARGS(skb));
62698a8954SYunsheng Lin 
63698a8954SYunsheng Lin DEFINE_EVENT(hns3_skb_template, hns3_tso,
64698a8954SYunsheng Lin 	TP_PROTO(struct sk_buff *skb),
65698a8954SYunsheng Lin 	TP_ARGS(skb));
66698a8954SYunsheng Lin 
67698a8954SYunsheng Lin TRACE_EVENT(hns3_tx_desc,
68698a8954SYunsheng Lin 	TP_PROTO(struct hns3_enet_ring *ring, int cur_ntu),
69698a8954SYunsheng Lin 	TP_ARGS(ring, cur_ntu),
70698a8954SYunsheng Lin 
71698a8954SYunsheng Lin 	TP_STRUCT__entry(
72698a8954SYunsheng Lin 		__field(int, index)
73698a8954SYunsheng Lin 		__field(int, ntu)
74698a8954SYunsheng Lin 		__field(int, ntc)
75698a8954SYunsheng Lin 		__field(dma_addr_t, desc_dma)
76698a8954SYunsheng Lin 		__array(u32, desc, DESC_NR)
77698a8954SYunsheng Lin 		__string(devname, ring->tqp->handle->kinfo.netdev->name)
78698a8954SYunsheng Lin 	),
79698a8954SYunsheng Lin 
80698a8954SYunsheng Lin 	TP_fast_assign(
81698a8954SYunsheng Lin 		__entry->index = ring->tqp->tqp_index;
82698a8954SYunsheng Lin 		__entry->ntu = ring->next_to_use;
83698a8954SYunsheng Lin 		__entry->ntc = ring->next_to_clean;
84698a8954SYunsheng Lin 		__entry->desc_dma = ring->desc_dma_addr,
85698a8954SYunsheng Lin 		memcpy(__entry->desc, &ring->desc[cur_ntu],
86698a8954SYunsheng Lin 		       sizeof(struct hns3_desc));
87698a8954SYunsheng Lin 		__assign_str(devname, ring->tqp->handle->kinfo.netdev->name);
88698a8954SYunsheng Lin 	),
89698a8954SYunsheng Lin 
90698a8954SYunsheng Lin 	TP_printk(
91698a8954SYunsheng Lin 		"%s-%d-%d/%d desc(%pad): %s",
92698a8954SYunsheng Lin 		__get_str(devname), __entry->index, __entry->ntu,
93698a8954SYunsheng Lin 		__entry->ntc, &__entry->desc_dma,
94698a8954SYunsheng Lin 		__print_array(__entry->desc, DESC_NR, sizeof(u32))
95698a8954SYunsheng Lin 	)
96698a8954SYunsheng Lin );
97698a8954SYunsheng Lin 
98698a8954SYunsheng Lin TRACE_EVENT(hns3_rx_desc,
99698a8954SYunsheng Lin 	TP_PROTO(struct hns3_enet_ring *ring),
100698a8954SYunsheng Lin 	TP_ARGS(ring),
101698a8954SYunsheng Lin 
102698a8954SYunsheng Lin 	TP_STRUCT__entry(
103698a8954SYunsheng Lin 		__field(int, index)
104698a8954SYunsheng Lin 		__field(int, ntu)
105698a8954SYunsheng Lin 		__field(int, ntc)
106698a8954SYunsheng Lin 		__field(dma_addr_t, desc_dma)
107698a8954SYunsheng Lin 		__field(dma_addr_t, buf_dma)
108698a8954SYunsheng Lin 		__array(u32, desc, DESC_NR)
109698a8954SYunsheng Lin 		__string(devname, ring->tqp->handle->kinfo.netdev->name)
110698a8954SYunsheng Lin 	),
111698a8954SYunsheng Lin 
112698a8954SYunsheng Lin 	TP_fast_assign(
113698a8954SYunsheng Lin 		__entry->index = ring->tqp->tqp_index;
114698a8954SYunsheng Lin 		__entry->ntu = ring->next_to_use;
115698a8954SYunsheng Lin 		__entry->ntc = ring->next_to_clean;
116698a8954SYunsheng Lin 		__entry->desc_dma = ring->desc_dma_addr;
117698a8954SYunsheng Lin 		__entry->buf_dma = ring->desc_cb[ring->next_to_clean].dma;
118698a8954SYunsheng Lin 		memcpy(__entry->desc, &ring->desc[ring->next_to_clean],
119698a8954SYunsheng Lin 		       sizeof(struct hns3_desc));
120698a8954SYunsheng Lin 		__assign_str(devname, ring->tqp->handle->kinfo.netdev->name);
121698a8954SYunsheng Lin 	),
122698a8954SYunsheng Lin 
123698a8954SYunsheng Lin 	TP_printk(
124698a8954SYunsheng Lin 		"%s-%d-%d/%d desc(%pad) buf(%pad): %s",
125698a8954SYunsheng Lin 		__get_str(devname), __entry->index, __entry->ntu,
126698a8954SYunsheng Lin 		__entry->ntc, &__entry->desc_dma, &__entry->buf_dma,
127698a8954SYunsheng Lin 		__print_array(__entry->desc, DESC_NR, sizeof(u32))
128698a8954SYunsheng Lin 	)
129698a8954SYunsheng Lin );
130698a8954SYunsheng Lin 
131698a8954SYunsheng Lin #endif /* _HNS3_TRACE_H_ */
132698a8954SYunsheng Lin 
133698a8954SYunsheng Lin /* This must be outside ifdef _HNS3_TRACE_H */
134698a8954SYunsheng Lin #undef TRACE_INCLUDE_PATH
135698a8954SYunsheng Lin #define TRACE_INCLUDE_PATH .
136698a8954SYunsheng Lin #undef TRACE_INCLUDE_FILE
137698a8954SYunsheng Lin #define TRACE_INCLUDE_FILE hns3_trace
138698a8954SYunsheng Lin #include <trace/define_trace.h>
139