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