2 * xHCI host controller driver
4 * Copyright (C) 2013 Xenia Ragiadakou
6 * Author: Xenia Ragiadakou
7 * Email : burzalodowa@gmail.com
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
15 #define TRACE_SYSTEM xhci-hcd
18 * The TRACE_SYSTEM_VAR defaults to TRACE_SYSTEM, but must be a
19 * legitimate C variable. It is not exported to user space.
21 #undef TRACE_SYSTEM_VAR
22 #define TRACE_SYSTEM_VAR xhci_hcd
24 #if !defined(__XHCI_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
25 #define __XHCI_TRACE_H
27 #include <linux/tracepoint.h>
30 #define XHCI_MSG_MAX 500
32 DECLARE_EVENT_CLASS(xhci_log_msg
,
33 TP_PROTO(struct va_format
*vaf
),
35 TP_STRUCT__entry(__dynamic_array(char, msg
, XHCI_MSG_MAX
)),
37 vsnprintf(__get_str(msg
), XHCI_MSG_MAX
, vaf
->fmt
, *vaf
->va
);
39 TP_printk("%s", __get_str(msg
))
42 DEFINE_EVENT(xhci_log_msg
, xhci_dbg_address
,
43 TP_PROTO(struct va_format
*vaf
),
47 DEFINE_EVENT(xhci_log_msg
, xhci_dbg_context_change
,
48 TP_PROTO(struct va_format
*vaf
),
52 DEFINE_EVENT(xhci_log_msg
, xhci_dbg_quirks
,
53 TP_PROTO(struct va_format
*vaf
),
57 DEFINE_EVENT(xhci_log_msg
, xhci_dbg_reset_ep
,
58 TP_PROTO(struct va_format
*vaf
),
62 DEFINE_EVENT(xhci_log_msg
, xhci_dbg_cancel_urb
,
63 TP_PROTO(struct va_format
*vaf
),
67 DEFINE_EVENT(xhci_log_msg
, xhci_dbg_init
,
68 TP_PROTO(struct va_format
*vaf
),
72 DEFINE_EVENT(xhci_log_msg
, xhci_dbg_ring_expansion
,
73 TP_PROTO(struct va_format
*vaf
),
77 DECLARE_EVENT_CLASS(xhci_log_ctx
,
78 TP_PROTO(struct xhci_hcd
*xhci
, struct xhci_container_ctx
*ctx
,
80 TP_ARGS(xhci
, ctx
, ep_num
),
83 __field(unsigned, ctx_type
)
84 __field(dma_addr_t
, ctx_dma
)
86 __field(unsigned, ctx_ep_num
)
88 __dynamic_array(u32
, ctx_data
,
89 ((HCC_64BYTE_CONTEXT(xhci
->hcc_params
) + 1) * 8) *
90 ((ctx
->type
== XHCI_CTX_TYPE_INPUT
) + ep_num
+ 1))
93 struct usb_device
*udev
;
95 udev
= to_usb_device(xhci_to_hcd(xhci
)->self
.controller
);
96 __entry
->ctx_64
= HCC_64BYTE_CONTEXT(xhci
->hcc_params
);
97 __entry
->ctx_type
= ctx
->type
;
98 __entry
->ctx_dma
= ctx
->dma
;
99 __entry
->ctx_va
= ctx
->bytes
;
100 __entry
->slot_id
= udev
->slot_id
;
101 __entry
->ctx_ep_num
= ep_num
;
102 memcpy(__get_dynamic_array(ctx_data
), ctx
->bytes
,
103 ((HCC_64BYTE_CONTEXT(xhci
->hcc_params
) + 1) * 32) *
104 ((ctx
->type
== XHCI_CTX_TYPE_INPUT
) + ep_num
+ 1));
106 TP_printk("\nctx_64=%d, ctx_type=%u, ctx_dma=@%llx, ctx_va=@%p",
107 __entry
->ctx_64
, __entry
->ctx_type
,
108 (unsigned long long) __entry
->ctx_dma
, __entry
->ctx_va
112 DEFINE_EVENT(xhci_log_ctx
, xhci_address_ctx
,
113 TP_PROTO(struct xhci_hcd
*xhci
, struct xhci_container_ctx
*ctx
,
114 unsigned int ep_num
),
115 TP_ARGS(xhci
, ctx
, ep_num
)
118 DECLARE_EVENT_CLASS(xhci_log_event
,
119 TP_PROTO(void *trb_va
, struct xhci_generic_trb
*ev
),
126 __dynamic_array(u8
, trb
, sizeof(struct xhci_generic_trb
))
129 __entry
->va
= trb_va
;
130 __entry
->dma
= ((u64
)le32_to_cpu(ev
->field
[1])) << 32 |
131 le32_to_cpu(ev
->field
[0]);
132 __entry
->status
= le32_to_cpu(ev
->field
[2]);
133 __entry
->flags
= le32_to_cpu(ev
->field
[3]);
134 memcpy(__get_dynamic_array(trb
), trb_va
,
135 sizeof(struct xhci_generic_trb
));
137 TP_printk("\ntrb_dma=@%llx, trb_va=@%p, status=%08x, flags=%08x",
138 (unsigned long long) __entry
->dma
, __entry
->va
,
139 __entry
->status
, __entry
->flags
143 DEFINE_EVENT(xhci_log_event
, xhci_cmd_completion
,
144 TP_PROTO(void *trb_va
, struct xhci_generic_trb
*ev
),
148 #endif /* __XHCI_TRACE_H */
150 /* this part must be outside header guard */
152 #undef TRACE_INCLUDE_PATH
153 #define TRACE_INCLUDE_PATH .
155 #undef TRACE_INCLUDE_FILE
156 #define TRACE_INCLUDE_FILE xhci-trace
158 #include <trace/define_trace.h>