xref: /linux/drivers/usb/chipidea/trace.h (revision c771600c6af14749609b49565ffb4cac2959710d)
1b4c5d446SPeter Chen /* SPDX-License-Identifier: GPL-2.0 */
2b4c5d446SPeter Chen /*
3b4c5d446SPeter Chen  * Trace support header file for device mode
4b4c5d446SPeter Chen  *
5b4c5d446SPeter Chen  * Copyright (C) 2020 NXP
6b4c5d446SPeter Chen  *
7b4c5d446SPeter Chen  * Author: Peter Chen <peter.chen@nxp.com>
8b4c5d446SPeter Chen  */
9b4c5d446SPeter Chen 
10b4c5d446SPeter Chen #undef TRACE_SYSTEM
11b4c5d446SPeter Chen #define TRACE_SYSTEM chipidea
12b4c5d446SPeter Chen 
13b4c5d446SPeter Chen #if !defined(__LINUX_CHIPIDEA_TRACE) || defined(TRACE_HEADER_MULTI_READ)
14b4c5d446SPeter Chen #define __LINUX_CHIPIDEA_TRACE
15b4c5d446SPeter Chen 
16b4c5d446SPeter Chen #include <linux/types.h>
17b4c5d446SPeter Chen #include <linux/tracepoint.h>
18b4c5d446SPeter Chen #include <linux/usb/chipidea.h>
19b4c5d446SPeter Chen #include "ci.h"
20b4c5d446SPeter Chen #include "udc.h"
21b4c5d446SPeter Chen 
22b4c5d446SPeter Chen #define CHIPIDEA_MSG_MAX	500
23b4c5d446SPeter Chen 
24b4c5d446SPeter Chen void ci_log(struct ci_hdrc *ci, const char *fmt, ...);
25b4c5d446SPeter Chen 
26b4c5d446SPeter Chen TRACE_EVENT(ci_log,
27b4c5d446SPeter Chen 	TP_PROTO(struct ci_hdrc *ci, struct va_format *vaf),
28b4c5d446SPeter Chen 	TP_ARGS(ci, vaf),
29b4c5d446SPeter Chen 	TP_STRUCT__entry(
30b4c5d446SPeter Chen 		__string(name, dev_name(ci->dev))
311b756b37SSteven Rostedt (Google) 		__vstring(msg, vaf->fmt, vaf->va)
32b4c5d446SPeter Chen 	),
33b4c5d446SPeter Chen 	TP_fast_assign(
34*2c92ca84SSteven Rostedt (Google) 		__assign_str(name);
351b756b37SSteven Rostedt (Google) 		__assign_vstr(msg, vaf->fmt, vaf->va);
36b4c5d446SPeter Chen 	),
37b4c5d446SPeter Chen 	TP_printk("%s: %s", __get_str(name), __get_str(msg))
38b4c5d446SPeter Chen );
39b4c5d446SPeter Chen 
40b4c5d446SPeter Chen DECLARE_EVENT_CLASS(ci_log_trb,
41b4c5d446SPeter Chen 	TP_PROTO(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq, struct td_node *td),
42b4c5d446SPeter Chen 	TP_ARGS(hwep, hwreq, td),
43b4c5d446SPeter Chen 	TP_STRUCT__entry(
44b4c5d446SPeter Chen 		__string(name, hwep->name)
45b4c5d446SPeter Chen 		__field(struct td_node *, td)
46b4c5d446SPeter Chen 		__field(struct usb_request *, req)
47b4c5d446SPeter Chen 		__field(dma_addr_t, dma)
48b4c5d446SPeter Chen 		__field(s32, td_remaining_size)
49b4c5d446SPeter Chen 		__field(u32, next)
50b4c5d446SPeter Chen 		__field(u32, token)
51b4c5d446SPeter Chen 		__field(u32, type)
52b4c5d446SPeter Chen 	),
53b4c5d446SPeter Chen 	TP_fast_assign(
54*2c92ca84SSteven Rostedt (Google) 		__assign_str(name);
55b4c5d446SPeter Chen 		__entry->req = &hwreq->req;
56b4c5d446SPeter Chen 		__entry->td = td;
57b4c5d446SPeter Chen 		__entry->dma = td->dma;
58b4c5d446SPeter Chen 		__entry->td_remaining_size = td->td_remaining_size;
59429ad75fSPeter Chen 		__entry->next = le32_to_cpu(td->ptr->next);
60429ad75fSPeter Chen 		__entry->token = le32_to_cpu(td->ptr->token);
61b4c5d446SPeter Chen 		__entry->type = usb_endpoint_type(hwep->ep.desc);
62b4c5d446SPeter Chen 	),
63b4c5d446SPeter Chen 	TP_printk("%s: req: %p, td: %p, td_dma_address: %pad, remaining_size: %d, "
64b4c5d446SPeter Chen 	       "next: %x, total bytes: %d, status: %lx",
65b4c5d446SPeter Chen 		__get_str(name), __entry->req, __entry->td, &__entry->dma,
66b4c5d446SPeter Chen 		__entry->td_remaining_size, __entry->next,
67b4c5d446SPeter Chen 		(int)((__entry->token & TD_TOTAL_BYTES) >> __ffs(TD_TOTAL_BYTES)),
68b4c5d446SPeter Chen 		__entry->token & TD_STATUS
69b4c5d446SPeter Chen 	)
70b4c5d446SPeter Chen );
71b4c5d446SPeter Chen 
72b4c5d446SPeter Chen DEFINE_EVENT(ci_log_trb, ci_prepare_td,
73b4c5d446SPeter Chen 	TP_PROTO(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq, struct td_node *td),
74b4c5d446SPeter Chen 	TP_ARGS(hwep, hwreq, td)
75b4c5d446SPeter Chen );
76b4c5d446SPeter Chen 
77b4c5d446SPeter Chen DEFINE_EVENT(ci_log_trb, ci_complete_td,
78b4c5d446SPeter Chen 	TP_PROTO(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq, struct td_node *td),
79b4c5d446SPeter Chen 	TP_ARGS(hwep, hwreq, td)
80b4c5d446SPeter Chen );
81b4c5d446SPeter Chen 
82b4c5d446SPeter Chen #endif /* __LINUX_CHIPIDEA_TRACE */
83b4c5d446SPeter Chen 
84b4c5d446SPeter Chen /* this part must be outside header guard */
85b4c5d446SPeter Chen 
86b4c5d446SPeter Chen #undef TRACE_INCLUDE_PATH
87b4c5d446SPeter Chen #define TRACE_INCLUDE_PATH .
88b4c5d446SPeter Chen 
89b4c5d446SPeter Chen #undef TRACE_INCLUDE_FILE
90b4c5d446SPeter Chen #define TRACE_INCLUDE_FILE trace
91b4c5d446SPeter Chen 
92b4c5d446SPeter Chen #include <trace/define_trace.h>
93