2 * trace.h - DesignWare USB3 DRD Controller Trace Support
4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
6 * Author: Felipe Balbi <balbi@ti.com>
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 of
10 * the License as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
19 #define TRACE_SYSTEM dwc3
21 #if !defined(__DWC3_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
22 #define __DWC3_TRACE_H
24 #include <linux/types.h>
25 #include <linux/tracepoint.h>
26 #include <asm/byteorder.h>
30 DECLARE_EVENT_CLASS(dwc3_log_msg
,
31 TP_PROTO(struct va_format
*vaf
),
33 TP_STRUCT__entry(__dynamic_array(char, msg
, DWC3_MSG_MAX
)),
35 vsnprintf(__get_str(msg
), DWC3_MSG_MAX
, vaf
->fmt
, *vaf
->va
);
37 TP_printk("%s", __get_str(msg
))
40 DEFINE_EVENT(dwc3_log_msg
, dwc3_readl
,
41 TP_PROTO(struct va_format
*vaf
),
45 DEFINE_EVENT(dwc3_log_msg
, dwc3_writel
,
46 TP_PROTO(struct va_format
*vaf
),
50 DEFINE_EVENT(dwc3_log_msg
, dwc3_gadget
,
51 TP_PROTO(struct va_format
*vaf
),
55 DEFINE_EVENT(dwc3_log_msg
, dwc3_core
,
56 TP_PROTO(struct va_format
*vaf
),
60 DEFINE_EVENT(dwc3_log_msg
, dwc3_ep0
,
61 TP_PROTO(struct va_format
*vaf
),
65 DECLARE_EVENT_CLASS(dwc3_log_event
,
72 __entry
->event
= event
;
74 TP_printk("event %08x", __entry
->event
)
77 DEFINE_EVENT(dwc3_log_event
, dwc3_event
,
82 DECLARE_EVENT_CLASS(dwc3_log_ctrl
,
83 TP_PROTO(struct usb_ctrlrequest
*ctrl
),
86 __field(__u8
, bRequestType
)
87 __field(__u8
, bRequest
)
88 __field(__le16
, wValue
)
89 __field(__le16
, wIndex
)
90 __field(__le16
, wLength
)
93 __entry
->bRequestType
= ctrl
->bRequestType
;
94 __entry
->bRequest
= ctrl
->bRequest
;
95 __entry
->wValue
= ctrl
->wValue
;
96 __entry
->wIndex
= ctrl
->wIndex
;
97 __entry
->wLength
= ctrl
->wLength
;
99 TP_printk("bRequestType %02x bRequest %02x wValue %04x wIndex %04x wLength %d",
100 __entry
->bRequestType
, __entry
->bRequest
,
101 le16_to_cpu(__entry
->wValue
), le16_to_cpu(__entry
->wIndex
),
102 le16_to_cpu(__entry
->wLength
)
106 DEFINE_EVENT(dwc3_log_ctrl
, dwc3_ctrl_req
,
107 TP_PROTO(struct usb_ctrlrequest
*ctrl
),
111 DECLARE_EVENT_CLASS(dwc3_log_request
,
112 TP_PROTO(struct dwc3_request
*req
),
115 __dynamic_array(char, name
, DWC3_MSG_MAX
)
116 __field(struct dwc3_request
*, req
)
117 __field(unsigned, actual
)
118 __field(unsigned, length
)
121 __field(int, short_not_ok
)
122 __field(int, no_interrupt
)
125 snprintf(__get_str(name
), DWC3_MSG_MAX
, "%s", req
->dep
->name
);
127 __entry
->actual
= req
->request
.actual
;
128 __entry
->length
= req
->request
.length
;
129 __entry
->status
= req
->request
.status
;
130 __entry
->zero
= req
->request
.zero
;
131 __entry
->short_not_ok
= req
->request
.short_not_ok
;
132 __entry
->no_interrupt
= req
->request
.no_interrupt
;
134 TP_printk("%s: req %p length %u/%u %s%s%s ==> %d",
135 __get_str(name
), __entry
->req
, __entry
->actual
, __entry
->length
,
136 __entry
->zero
? "Z" : "z",
137 __entry
->short_not_ok
? "S" : "s",
138 __entry
->no_interrupt
? "i" : "I",
143 DEFINE_EVENT(dwc3_log_request
, dwc3_alloc_request
,
144 TP_PROTO(struct dwc3_request
*req
),
148 DEFINE_EVENT(dwc3_log_request
, dwc3_free_request
,
149 TP_PROTO(struct dwc3_request
*req
),
153 DEFINE_EVENT(dwc3_log_request
, dwc3_ep_queue
,
154 TP_PROTO(struct dwc3_request
*req
),
158 DEFINE_EVENT(dwc3_log_request
, dwc3_ep_dequeue
,
159 TP_PROTO(struct dwc3_request
*req
),
163 DEFINE_EVENT(dwc3_log_request
, dwc3_gadget_giveback
,
164 TP_PROTO(struct dwc3_request
*req
),
168 DECLARE_EVENT_CLASS(dwc3_log_generic_cmd
,
169 TP_PROTO(unsigned int cmd
, u32 param
),
172 __field(unsigned int, cmd
)
177 __entry
->param
= param
;
179 TP_printk("cmd '%s' [%d] param %08x",
180 dwc3_gadget_generic_cmd_string(__entry
->cmd
),
181 __entry
->cmd
, __entry
->param
185 DEFINE_EVENT(dwc3_log_generic_cmd
, dwc3_gadget_generic_cmd
,
186 TP_PROTO(unsigned int cmd
, u32 param
),
190 DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd
,
191 TP_PROTO(struct dwc3_ep
*dep
, unsigned int cmd
,
192 struct dwc3_gadget_ep_cmd_params
*params
),
193 TP_ARGS(dep
, cmd
, params
),
195 __dynamic_array(char, name
, DWC3_MSG_MAX
)
196 __field(unsigned int, cmd
)
202 snprintf(__get_str(name
), DWC3_MSG_MAX
, "%s", dep
->name
);
204 __entry
->param0
= params
->param0
;
205 __entry
->param1
= params
->param1
;
206 __entry
->param2
= params
->param2
;
208 TP_printk("%s: cmd '%s' [%d] params %08x %08x %08x",
209 __get_str(name
), dwc3_gadget_ep_cmd_string(__entry
->cmd
),
210 __entry
->cmd
, __entry
->param0
,
211 __entry
->param1
, __entry
->param2
215 DEFINE_EVENT(dwc3_log_gadget_ep_cmd
, dwc3_gadget_ep_cmd
,
216 TP_PROTO(struct dwc3_ep
*dep
, unsigned int cmd
,
217 struct dwc3_gadget_ep_cmd_params
*params
),
218 TP_ARGS(dep
, cmd
, params
)
221 DECLARE_EVENT_CLASS(dwc3_log_trb
,
222 TP_PROTO(struct dwc3_ep
*dep
, struct dwc3_trb
*trb
),
225 __dynamic_array(char, name
, DWC3_MSG_MAX
)
226 __field(struct dwc3_trb
*, trb
)
233 snprintf(__get_str(name
), DWC3_MSG_MAX
, "%s", dep
->name
);
235 __entry
->bpl
= trb
->bpl
;
236 __entry
->bph
= trb
->bph
;
237 __entry
->size
= trb
->size
;
238 __entry
->ctrl
= trb
->ctrl
;
240 TP_printk("%s: trb %p bph %08x bpl %08x size %08x ctrl %08x",
241 __get_str(name
), __entry
->trb
, __entry
->bph
, __entry
->bpl
,
242 __entry
->size
, __entry
->ctrl
246 DEFINE_EVENT(dwc3_log_trb
, dwc3_prepare_trb
,
247 TP_PROTO(struct dwc3_ep
*dep
, struct dwc3_trb
*trb
),
251 DEFINE_EVENT(dwc3_log_trb
, dwc3_complete_trb
,
252 TP_PROTO(struct dwc3_ep
*dep
, struct dwc3_trb
*trb
),
256 #endif /* __DWC3_TRACE_H */
258 /* this part has to be here */
260 #undef TRACE_INCLUDE_PATH
261 #define TRACE_INCLUDE_PATH .
263 #undef TRACE_INCLUDE_FILE
264 #define TRACE_INCLUDE_FILE trace
266 #include <trace/define_trace.h>