Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / net / ethernet / intel / i40e / i40e_trace.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright(c) 2013 - 2018 Intel Corporation. */
3
4 /* Modeled on trace-events-sample.h */
5
6 /* The trace subsystem name for i40e will be "i40e".
7  *
8  * This file is named i40e_trace.h.
9  *
10  * Since this include file's name is different from the trace
11  * subsystem name, we'll have to define TRACE_INCLUDE_FILE at the end
12  * of this file.
13  */
14 #undef TRACE_SYSTEM
15 #define TRACE_SYSTEM i40e
16
17 /* See trace-events-sample.h for a detailed description of why this
18  * guard clause is different from most normal include files.
19  */
20 #if !defined(_I40E_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
21 #define _I40E_TRACE_H_
22
23 #include <linux/tracepoint.h>
24
25 /**
26  * i40e_trace() macro enables shared code to refer to trace points
27  * like:
28  *
29  * trace_i40e{,vf}_example(args...)
30  *
31  * ... as:
32  *
33  * i40e_trace(example, args...)
34  *
35  * ... to resolve to the PF or VF version of the tracepoint without
36  * ifdefs, and to allow tracepoints to be disabled entirely at build
37  * time.
38  *
39  * Trace point should always be referred to in the driver via this
40  * macro.
41  *
42  * Similarly, i40e_trace_enabled(trace_name) wraps references to
43  * trace_i40e{,vf}_<trace_name>_enabled() functions.
44  */
45 #define _I40E_TRACE_NAME(trace_name) (trace_ ## i40e ## _ ## trace_name)
46 #define I40E_TRACE_NAME(trace_name) _I40E_TRACE_NAME(trace_name)
47
48 #define i40e_trace(trace_name, args...) I40E_TRACE_NAME(trace_name)(args)
49
50 #define i40e_trace_enabled(trace_name) I40E_TRACE_NAME(trace_name##_enabled)()
51
52 /* Events common to PF and VF. Corresponding versions will be defined
53  * for both, named trace_i40e_* and trace_i40evf_*. The i40e_trace()
54  * macro above will select the right trace point name for the driver
55  * being built from shared code.
56  */
57
58 /* Events related to a vsi & ring */
59 DECLARE_EVENT_CLASS(
60         i40e_tx_template,
61
62         TP_PROTO(struct i40e_ring *ring,
63                  struct i40e_tx_desc *desc,
64                  struct i40e_tx_buffer *buf),
65
66         TP_ARGS(ring, desc, buf),
67
68         /* The convention here is to make the first fields in the
69          * TP_STRUCT match the TP_PROTO exactly. This enables the use
70          * of the args struct generated by the tplist tool (from the
71          * bcc-tools package) to be used for those fields. To access
72          * fields other than the tracepoint args will require the
73          * tplist output to be adjusted.
74          */
75         TP_STRUCT__entry(
76                 __field(void*, ring)
77                 __field(void*, desc)
78                 __field(void*, buf)
79                 __string(devname, ring->netdev->name)
80         ),
81
82         TP_fast_assign(
83                 __entry->ring = ring;
84                 __entry->desc = desc;
85                 __entry->buf = buf;
86                 __assign_str(devname, ring->netdev->name);
87         ),
88
89         TP_printk(
90                 "netdev: %s ring: %p desc: %p buf %p",
91                 __get_str(devname), __entry->ring,
92                 __entry->desc, __entry->buf)
93 );
94
95 DEFINE_EVENT(
96         i40e_tx_template, i40e_clean_tx_irq,
97         TP_PROTO(struct i40e_ring *ring,
98                  struct i40e_tx_desc *desc,
99                  struct i40e_tx_buffer *buf),
100
101         TP_ARGS(ring, desc, buf));
102
103 DEFINE_EVENT(
104         i40e_tx_template, i40e_clean_tx_irq_unmap,
105         TP_PROTO(struct i40e_ring *ring,
106                  struct i40e_tx_desc *desc,
107                  struct i40e_tx_buffer *buf),
108
109         TP_ARGS(ring, desc, buf));
110
111 DECLARE_EVENT_CLASS(
112         i40e_rx_template,
113
114         TP_PROTO(struct i40e_ring *ring,
115                  union i40e_32byte_rx_desc *desc,
116                  struct sk_buff *skb),
117
118         TP_ARGS(ring, desc, skb),
119
120         TP_STRUCT__entry(
121                 __field(void*, ring)
122                 __field(void*, desc)
123                 __field(void*, skb)
124                 __string(devname, ring->netdev->name)
125         ),
126
127         TP_fast_assign(
128                 __entry->ring = ring;
129                 __entry->desc = desc;
130                 __entry->skb = skb;
131                 __assign_str(devname, ring->netdev->name);
132         ),
133
134         TP_printk(
135                 "netdev: %s ring: %p desc: %p skb %p",
136                 __get_str(devname), __entry->ring,
137                 __entry->desc, __entry->skb)
138 );
139
140 DEFINE_EVENT(
141         i40e_rx_template, i40e_clean_rx_irq,
142         TP_PROTO(struct i40e_ring *ring,
143                  union i40e_32byte_rx_desc *desc,
144                  struct sk_buff *skb),
145
146         TP_ARGS(ring, desc, skb));
147
148 DEFINE_EVENT(
149         i40e_rx_template, i40e_clean_rx_irq_rx,
150         TP_PROTO(struct i40e_ring *ring,
151                  union i40e_32byte_rx_desc *desc,
152                  struct sk_buff *skb),
153
154         TP_ARGS(ring, desc, skb));
155
156 DECLARE_EVENT_CLASS(
157         i40e_xmit_template,
158
159         TP_PROTO(struct sk_buff *skb,
160                  struct i40e_ring *ring),
161
162         TP_ARGS(skb, ring),
163
164         TP_STRUCT__entry(
165                 __field(void*, skb)
166                 __field(void*, ring)
167                 __string(devname, ring->netdev->name)
168         ),
169
170         TP_fast_assign(
171                 __entry->skb = skb;
172                 __entry->ring = ring;
173                 __assign_str(devname, ring->netdev->name);
174         ),
175
176         TP_printk(
177                 "netdev: %s skb: %p ring: %p",
178                 __get_str(devname), __entry->skb,
179                 __entry->ring)
180 );
181
182 DEFINE_EVENT(
183         i40e_xmit_template, i40e_xmit_frame_ring,
184         TP_PROTO(struct sk_buff *skb,
185                  struct i40e_ring *ring),
186
187         TP_ARGS(skb, ring));
188
189 DEFINE_EVENT(
190         i40e_xmit_template, i40e_xmit_frame_ring_drop,
191         TP_PROTO(struct sk_buff *skb,
192                  struct i40e_ring *ring),
193
194         TP_ARGS(skb, ring));
195
196 /* Events unique to the PF. */
197
198 #endif /* _I40E_TRACE_H_ */
199 /* This must be outside ifdef _I40E_TRACE_H */
200
201 /* This trace include file is not located in the .../include/trace
202  * with the kernel tracepoint definitions, because we're a loadable
203  * module.
204  */
205 #undef TRACE_INCLUDE_PATH
206 #define TRACE_INCLUDE_PATH .
207 #undef TRACE_INCLUDE_FILE
208 #define TRACE_INCLUDE_FILE i40e_trace
209 #include <trace/define_trace.h>