Merge tag 'for-linus-5.6-1' of https://github.com/cminyard/linux-ipmi
[linux-2.6-microblaze.git] / drivers / net / fjes / fjes_trace.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  *  FUJITSU Extended Socket Network Device driver
4  *  Copyright (c) 2015-2016 FUJITSU LIMITED
5  */
6
7 #if !defined(FJES_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
8 #define FJES_TRACE_H_
9
10 #include <linux/types.h>
11 #include <linux/tracepoint.h>
12
13 #undef TRACE_SYSTEM
14 #define TRACE_SYSTEM fjes
15
16 /* tracepoints for fjes_hw.c */
17
18 TRACE_EVENT(fjes_hw_issue_request_command,
19         TP_PROTO(union REG_CR *cr, union REG_CS *cs, int timeout,
20                  enum fjes_dev_command_response_e ret),
21         TP_ARGS(cr, cs, timeout, ret),
22         TP_STRUCT__entry(
23                 __field(u16, cr_req)
24                 __field(u8, cr_error)
25                 __field(u16, cr_err_info)
26                 __field(u8, cr_req_start)
27                 __field(u16, cs_req)
28                 __field(u8, cs_busy)
29                 __field(u8, cs_complete)
30                 __field(int, timeout)
31                 __field(int, ret)
32         ),
33         TP_fast_assign(
34                 __entry->cr_req = cr->bits.req_code;
35                 __entry->cr_error = cr->bits.error;
36                 __entry->cr_err_info = cr->bits.err_info;
37                 __entry->cr_req_start = cr->bits.req_start;
38                 __entry->cs_req = cs->bits.req_code;
39                 __entry->cs_busy = cs->bits.busy;
40                 __entry->cs_complete = cs->bits.complete;
41                 __entry->timeout = timeout;
42                 __entry->ret = ret;
43         ),
44         TP_printk("CR=[req=%04x, error=%u, err_info=%04x, req_start=%u], CS=[req=%04x, busy=%u, complete=%u], timeout=%d, ret=%d",
45                   __entry->cr_req, __entry->cr_error, __entry->cr_err_info,
46                   __entry->cr_req_start, __entry->cs_req, __entry->cs_busy,
47                   __entry->cs_complete, __entry->timeout, __entry->ret)
48 );
49
50 TRACE_EVENT(fjes_hw_request_info,
51         TP_PROTO(struct fjes_hw *hw, union fjes_device_command_res *res_buf),
52         TP_ARGS(hw, res_buf),
53         TP_STRUCT__entry(
54                 __field(int, length)
55                 __field(int, code)
56                 __dynamic_array(u8, zone, hw->max_epid)
57                 __dynamic_array(u8, status, hw->max_epid)
58         ),
59         TP_fast_assign(
60                 int x;
61
62                 __entry->length = res_buf->info.length;
63                 __entry->code = res_buf->info.code;
64                 for (x = 0; x < hw->max_epid; x++) {
65                         *((u8 *)__get_dynamic_array(zone) + x) =
66                                         res_buf->info.info[x].zone;
67                         *((u8 *)__get_dynamic_array(status) + x) =
68                                         res_buf->info.info[x].es_status;
69                 }
70         ),
71         TP_printk("res_buf=[length=%d, code=%d, es_zones=%s, es_status=%s]",
72                   __entry->length, __entry->code,
73                   __print_array(__get_dynamic_array(zone),
74                                 __get_dynamic_array_len(zone) / sizeof(u8),
75                                 sizeof(u8)),
76                   __print_array(__get_dynamic_array(status),
77                                 __get_dynamic_array_len(status) / sizeof(u8),
78                                 sizeof(u8)))
79 );
80
81 TRACE_EVENT(fjes_hw_request_info_err,
82         TP_PROTO(char *err),
83         TP_ARGS(err),
84         TP_STRUCT__entry(
85                 __string(err, err)
86         ),
87         TP_fast_assign(
88                 __assign_str(err, err);
89         ),
90         TP_printk("%s", __get_str(err))
91 );
92
93 TRACE_EVENT(fjes_hw_register_buff_addr_req,
94         TP_PROTO(union fjes_device_command_req *req_buf,
95                  struct ep_share_mem_info *buf_pair),
96         TP_ARGS(req_buf, buf_pair),
97         TP_STRUCT__entry(
98                 __field(int, length)
99                 __field(int, epid)
100                 __field(u64, tx)
101                 __field(size_t, tx_size)
102                 __field(u64, rx)
103                 __field(size_t, rx_size)
104         ),
105         TP_fast_assign(
106                 void *tx, *rx;
107
108                 tx = (void *)buf_pair->tx.buffer;
109                 rx = (void *)buf_pair->rx.buffer;
110                 __entry->length = req_buf->share_buffer.length;
111                 __entry->epid = req_buf->share_buffer.epid;
112                 __entry->tx_size = buf_pair->tx.size;
113                 __entry->rx_size = buf_pair->rx.size;
114                 __entry->tx = page_to_phys(vmalloc_to_page(tx)) +
115                                 offset_in_page(tx);
116                 __entry->rx = page_to_phys(vmalloc_to_page(rx)) +
117                                 offset_in_page(rx);
118         ),
119         TP_printk("req_buf=[length=%d, epid=%d], TX=[phy=0x%016llx, size=%zu], RX=[phy=0x%016llx, size=%zu]",
120                   __entry->length, __entry->epid, __entry->tx, __entry->tx_size,
121                   __entry->rx, __entry->rx_size)
122 );
123
124 TRACE_EVENT(fjes_hw_register_buff_addr,
125         TP_PROTO(union fjes_device_command_res *res_buf, int timeout),
126         TP_ARGS(res_buf, timeout),
127         TP_STRUCT__entry(
128                 __field(int, length)
129                 __field(int, code)
130                 __field(int, timeout)
131         ),
132         TP_fast_assign(
133                 __entry->length = res_buf->share_buffer.length;
134                 __entry->code = res_buf->share_buffer.code;
135                 __entry->timeout = timeout;
136         ),
137         TP_printk("res_buf=[length=%d, code=%d], timeout=%d",
138                   __entry->length, __entry->code, __entry->timeout)
139 );
140
141 TRACE_EVENT(fjes_hw_register_buff_addr_err,
142         TP_PROTO(char *err),
143         TP_ARGS(err),
144         TP_STRUCT__entry(
145                 __string(err, err)
146         ),
147         TP_fast_assign(
148                 __assign_str(err, err);
149         ),
150         TP_printk("%s", __get_str(err))
151 );
152
153 TRACE_EVENT(fjes_hw_unregister_buff_addr_req,
154         TP_PROTO(union fjes_device_command_req *req_buf),
155         TP_ARGS(req_buf),
156         TP_STRUCT__entry(
157                 __field(int, length)
158                 __field(int, epid)
159         ),
160         TP_fast_assign(
161                 __entry->length = req_buf->unshare_buffer.length;
162                 __entry->epid = req_buf->unshare_buffer.epid;
163         ),
164         TP_printk("req_buf=[length=%d, epid=%d]",
165                   __entry->length, __entry->epid)
166 );
167
168 TRACE_EVENT(fjes_hw_unregister_buff_addr,
169         TP_PROTO(union fjes_device_command_res *res_buf, int timeout),
170         TP_ARGS(res_buf, timeout),
171         TP_STRUCT__entry(
172                 __field(int, length)
173                 __field(int, code)
174                 __field(int, timeout)
175         ),
176         TP_fast_assign(
177                 __entry->length = res_buf->unshare_buffer.length;
178                 __entry->code = res_buf->unshare_buffer.code;
179                 __entry->timeout = timeout;
180         ),
181         TP_printk("res_buf=[length=%d, code=%d], timeout=%d",
182                   __entry->length, __entry->code, __entry->timeout)
183 );
184
185 TRACE_EVENT(fjes_hw_unregister_buff_addr_err,
186         TP_PROTO(char *err),
187         TP_ARGS(err),
188         TP_STRUCT__entry(
189                 __string(err, err)
190         ),
191         TP_fast_assign(
192                 __assign_str(err, err);
193         ),
194         TP_printk("%s", __get_str(err))
195 );
196
197 TRACE_EVENT(fjes_hw_start_debug_req,
198         TP_PROTO(union fjes_device_command_req *req_buf),
199         TP_ARGS(req_buf),
200         TP_STRUCT__entry(
201                 __field(int, length)
202                 __field(int, mode)
203                 __field(phys_addr_t, buffer)
204         ),
205         TP_fast_assign(
206                 __entry->length = req_buf->start_trace.length;
207                 __entry->mode = req_buf->start_trace.mode;
208                 __entry->buffer = req_buf->start_trace.buffer[0];
209         ),
210         TP_printk("req_buf=[length=%d, mode=%d, buffer=%pap]",
211                   __entry->length, __entry->mode, &__entry->buffer)
212 );
213
214 TRACE_EVENT(fjes_hw_start_debug,
215         TP_PROTO(union fjes_device_command_res *res_buf),
216         TP_ARGS(res_buf),
217         TP_STRUCT__entry(
218                 __field(int, length)
219                 __field(int, code)
220         ),
221         TP_fast_assign(
222                 __entry->length = res_buf->start_trace.length;
223                 __entry->code = res_buf->start_trace.code;
224         ),
225         TP_printk("res_buf=[length=%d, code=%d]", __entry->length, __entry->code)
226 );
227
228 TRACE_EVENT(fjes_hw_start_debug_err,
229         TP_PROTO(char *err),
230         TP_ARGS(err),
231         TP_STRUCT__entry(
232                  __string(err, err)
233         ),
234         TP_fast_assign(
235                 __assign_str(err, err)
236         ),
237         TP_printk("%s", __get_str(err))
238 );
239
240 TRACE_EVENT(fjes_hw_stop_debug,
241         TP_PROTO(union fjes_device_command_res *res_buf),
242         TP_ARGS(res_buf),
243         TP_STRUCT__entry(
244                 __field(int, length)
245                 __field(int, code)
246         ),
247         TP_fast_assign(
248                 __entry->length = res_buf->stop_trace.length;
249                 __entry->code = res_buf->stop_trace.code;
250         ),
251         TP_printk("res_buf=[length=%d, code=%d]", __entry->length, __entry->code)
252 );
253
254 TRACE_EVENT(fjes_hw_stop_debug_err,
255         TP_PROTO(char *err),
256         TP_ARGS(err),
257         TP_STRUCT__entry(
258                  __string(err, err)
259         ),
260         TP_fast_assign(
261                 __assign_str(err, err)
262         ),
263         TP_printk("%s", __get_str(err))
264 );
265
266 /* tracepoints for fjes_main.c */
267
268 TRACE_EVENT(fjes_txrx_stop_req_irq_pre,
269         TP_PROTO(struct fjes_hw *hw, int src_epid,
270                  enum ep_partner_status status),
271         TP_ARGS(hw, src_epid, status),
272         TP_STRUCT__entry(
273                 __field(int, src_epid)
274                 __field(enum ep_partner_status, status)
275                 __field(u8, ep_status)
276                 __field(unsigned long, txrx_stop_req_bit)
277                 __field(u16, rx_status)
278         ),
279         TP_fast_assign(
280                 __entry->src_epid = src_epid;
281                 __entry->status = status;
282                 __entry->ep_status = hw->hw_info.share->ep_status[src_epid];
283                 __entry->txrx_stop_req_bit = hw->txrx_stop_req_bit;
284                 __entry->rx_status =
285                         hw->ep_shm_info[src_epid].tx.info->v1i.rx_status;
286         ),
287         TP_printk("epid=%d, partner_status=%d, ep_status=%x, txrx_stop_req_bit=%016lx, tx.rx_status=%08x",
288                   __entry->src_epid, __entry->status, __entry->ep_status,
289                   __entry->txrx_stop_req_bit, __entry->rx_status)
290 );
291
292 TRACE_EVENT(fjes_txrx_stop_req_irq_post,
293         TP_PROTO(struct fjes_hw *hw, int src_epid),
294         TP_ARGS(hw, src_epid),
295         TP_STRUCT__entry(
296                 __field(int, src_epid)
297                 __field(u8, ep_status)
298                 __field(unsigned long, txrx_stop_req_bit)
299                 __field(u16, rx_status)
300         ),
301         TP_fast_assign(
302                 __entry->src_epid = src_epid;
303                 __entry->ep_status = hw->hw_info.share->ep_status[src_epid];
304                 __entry->txrx_stop_req_bit = hw->txrx_stop_req_bit;
305                 __entry->rx_status = hw->ep_shm_info[src_epid].tx.info->v1i.rx_status;
306         ),
307         TP_printk("epid=%d, ep_status=%x, txrx_stop_req_bit=%016lx, tx.rx_status=%08x",
308                   __entry->src_epid, __entry->ep_status,
309                   __entry->txrx_stop_req_bit, __entry->rx_status)
310 );
311
312 TRACE_EVENT(fjes_stop_req_irq_pre,
313         TP_PROTO(struct fjes_hw *hw, int src_epid,
314                  enum ep_partner_status status),
315         TP_ARGS(hw, src_epid, status),
316         TP_STRUCT__entry(
317                 __field(int, src_epid)
318                 __field(enum ep_partner_status, status)
319                 __field(u8, ep_status)
320                 __field(unsigned long, txrx_stop_req_bit)
321                 __field(u16, rx_status)
322         ),
323         TP_fast_assign(
324                 __entry->src_epid = src_epid;
325                 __entry->status = status;
326                 __entry->ep_status = hw->hw_info.share->ep_status[src_epid];
327                 __entry->txrx_stop_req_bit = hw->txrx_stop_req_bit;
328                 __entry->rx_status =
329                         hw->ep_shm_info[src_epid].tx.info->v1i.rx_status;
330         ),
331         TP_printk("epid=%d, partner_status=%d, ep_status=%x, txrx_stop_req_bit=%016lx, tx.rx_status=%08x",
332                   __entry->src_epid, __entry->status, __entry->ep_status,
333                   __entry->txrx_stop_req_bit, __entry->rx_status)
334 );
335
336 TRACE_EVENT(fjes_stop_req_irq_post,
337         TP_PROTO(struct fjes_hw *hw, int src_epid),
338         TP_ARGS(hw, src_epid),
339         TP_STRUCT__entry(
340                 __field(int, src_epid)
341                 __field(u8, ep_status)
342                 __field(unsigned long, txrx_stop_req_bit)
343                 __field(u16, rx_status)
344         ),
345         TP_fast_assign(
346                 __entry->src_epid = src_epid;
347                 __entry->ep_status = hw->hw_info.share->ep_status[src_epid];
348                 __entry->txrx_stop_req_bit = hw->txrx_stop_req_bit;
349                 __entry->rx_status =
350                         hw->ep_shm_info[src_epid].tx.info->v1i.rx_status;
351         ),
352         TP_printk("epid=%d, ep_status=%x, txrx_stop_req_bit=%016lx, tx.rx_status=%08x",
353                   __entry->src_epid, __entry->ep_status,
354                   __entry->txrx_stop_req_bit, __entry->rx_status)
355 );
356
357 #endif /* FJES_TRACE_H_ */
358
359 #undef TRACE_INCLUDE_PATH
360 #undef TRACE_INCLUDE_FILE
361 #define TRACE_INCLUDE_PATH ../../../drivers/net/fjes
362 #define TRACE_INCLUDE_FILE fjes_trace
363
364 /* This part must be outside protection */
365 #include <trace/define_trace.h>