1f89252adSBin Liu /* 2f89252adSBin Liu * musb_trace.h - MUSB Controller Trace Support 3f89252adSBin Liu * 4f89252adSBin Liu * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com 5f89252adSBin Liu * 6f89252adSBin Liu * Author: Bin Liu <b-liu@ti.com> 7f89252adSBin Liu * 8f89252adSBin Liu * This program is free software: you can redistribute it and/or modify 9f89252adSBin Liu * it under the terms of the GNU General Public License version 2 of 10f89252adSBin Liu * the License as published by the Free Software Foundation. 11f89252adSBin Liu * 12f89252adSBin Liu * This program is distributed in the hope that it will be useful, 13f89252adSBin Liu * but WITHOUT ANY WARRANTY; without even the implied warranty of 14f89252adSBin Liu * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15f89252adSBin Liu * GNU General Public License for more details. 16f89252adSBin Liu */ 17f89252adSBin Liu 18f89252adSBin Liu #undef TRACE_SYSTEM 19f89252adSBin Liu #define TRACE_SYSTEM musb 20f89252adSBin Liu 21f89252adSBin Liu #if !defined(__MUSB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 22f89252adSBin Liu #define __MUSB_TRACE_H 23f89252adSBin Liu 24f89252adSBin Liu #include <linux/types.h> 25f89252adSBin Liu #include <linux/tracepoint.h> 26f89252adSBin Liu #include "musb_core.h" 27f89252adSBin Liu 28f89252adSBin Liu #define MUSB_MSG_MAX 500 29f89252adSBin Liu 30f89252adSBin Liu TRACE_EVENT(musb_log, 31f89252adSBin Liu TP_PROTO(struct musb *musb, struct va_format *vaf), 32f89252adSBin Liu TP_ARGS(musb, vaf), 33f89252adSBin Liu TP_STRUCT__entry( 34f89252adSBin Liu __string(name, dev_name(musb->controller)) 35f89252adSBin Liu __dynamic_array(char, msg, MUSB_MSG_MAX) 36f89252adSBin Liu ), 37f89252adSBin Liu TP_fast_assign( 38f89252adSBin Liu __assign_str(name, dev_name(musb->controller)); 39f89252adSBin Liu vsnprintf(__get_str(msg), MUSB_MSG_MAX, vaf->fmt, *vaf->va); 40f89252adSBin Liu ), 41f89252adSBin Liu TP_printk("%s: %s", __get_str(name), __get_str(msg)) 42f89252adSBin Liu ); 43f89252adSBin Liu 44c74173fdSBin Liu DECLARE_EVENT_CLASS(musb_regb, 45c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u8 data), 46c74173fdSBin Liu TP_ARGS(caller, addr, offset, data), 47c74173fdSBin Liu TP_STRUCT__entry( 48c74173fdSBin Liu __field(void *, caller) 49c74173fdSBin Liu __field(const void *, addr) 50c74173fdSBin Liu __field(unsigned int, offset) 51c74173fdSBin Liu __field(u8, data) 52c74173fdSBin Liu ), 53c74173fdSBin Liu TP_fast_assign( 54c74173fdSBin Liu __entry->caller = caller; 55c74173fdSBin Liu __entry->addr = addr; 56c74173fdSBin Liu __entry->offset = offset; 57c74173fdSBin Liu __entry->data = data; 58c74173fdSBin Liu ), 59c74173fdSBin Liu TP_printk("%pS: %p + %04x: %02x", 60c74173fdSBin Liu __entry->caller, __entry->addr, __entry->offset, __entry->data) 61c74173fdSBin Liu ); 62c74173fdSBin Liu 63c74173fdSBin Liu DEFINE_EVENT(musb_regb, musb_readb, 64c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u8 data), 65c74173fdSBin Liu TP_ARGS(caller, addr, offset, data) 66c74173fdSBin Liu ); 67c74173fdSBin Liu 68c74173fdSBin Liu DEFINE_EVENT(musb_regb, musb_writeb, 69c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u8 data), 70c74173fdSBin Liu TP_ARGS(caller, addr, offset, data) 71c74173fdSBin Liu ); 72c74173fdSBin Liu 73c74173fdSBin Liu DECLARE_EVENT_CLASS(musb_regw, 74c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u16 data), 75c74173fdSBin Liu TP_ARGS(caller, addr, offset, data), 76c74173fdSBin Liu TP_STRUCT__entry( 77c74173fdSBin Liu __field(void *, caller) 78c74173fdSBin Liu __field(const void *, addr) 79c74173fdSBin Liu __field(unsigned int, offset) 80c74173fdSBin Liu __field(u16, data) 81c74173fdSBin Liu ), 82c74173fdSBin Liu TP_fast_assign( 83c74173fdSBin Liu __entry->caller = caller; 84c74173fdSBin Liu __entry->addr = addr; 85c74173fdSBin Liu __entry->offset = offset; 86c74173fdSBin Liu __entry->data = data; 87c74173fdSBin Liu ), 88c74173fdSBin Liu TP_printk("%pS: %p + %04x: %04x", 89c74173fdSBin Liu __entry->caller, __entry->addr, __entry->offset, __entry->data) 90c74173fdSBin Liu ); 91c74173fdSBin Liu 92c74173fdSBin Liu DEFINE_EVENT(musb_regw, musb_readw, 93c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u16 data), 94c74173fdSBin Liu TP_ARGS(caller, addr, offset, data) 95c74173fdSBin Liu ); 96c74173fdSBin Liu 97c74173fdSBin Liu DEFINE_EVENT(musb_regw, musb_writew, 98c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u16 data), 99c74173fdSBin Liu TP_ARGS(caller, addr, offset, data) 100c74173fdSBin Liu ); 101c74173fdSBin Liu 102c74173fdSBin Liu DECLARE_EVENT_CLASS(musb_regl, 103c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u32 data), 104c74173fdSBin Liu TP_ARGS(caller, addr, offset, data), 105c74173fdSBin Liu TP_STRUCT__entry( 106c74173fdSBin Liu __field(void *, caller) 107c74173fdSBin Liu __field(const void *, addr) 108c74173fdSBin Liu __field(unsigned int, offset) 109c74173fdSBin Liu __field(u32, data) 110c74173fdSBin Liu ), 111c74173fdSBin Liu TP_fast_assign( 112c74173fdSBin Liu __entry->caller = caller; 113c74173fdSBin Liu __entry->addr = addr; 114c74173fdSBin Liu __entry->offset = offset; 115c74173fdSBin Liu __entry->data = data; 116c74173fdSBin Liu ), 117c74173fdSBin Liu TP_printk("%pS: %p + %04x: %08x", 118c74173fdSBin Liu __entry->caller, __entry->addr, __entry->offset, __entry->data) 119c74173fdSBin Liu ); 120c74173fdSBin Liu 121c74173fdSBin Liu DEFINE_EVENT(musb_regl, musb_readl, 122c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u32 data), 123c74173fdSBin Liu TP_ARGS(caller, addr, offset, data) 124c74173fdSBin Liu ); 125c74173fdSBin Liu 126c74173fdSBin Liu DEFINE_EVENT(musb_regl, musb_writel, 127c74173fdSBin Liu TP_PROTO(void *caller, const void *addr, unsigned int offset, u32 data), 128c74173fdSBin Liu TP_ARGS(caller, addr, offset, data) 129c74173fdSBin Liu ); 130c74173fdSBin Liu 131*cfb9a1bcSBin Liu TRACE_EVENT(musb_isr, 132*cfb9a1bcSBin Liu TP_PROTO(struct musb *musb), 133*cfb9a1bcSBin Liu TP_ARGS(musb), 134*cfb9a1bcSBin Liu TP_STRUCT__entry( 135*cfb9a1bcSBin Liu __string(name, dev_name(musb->controller)) 136*cfb9a1bcSBin Liu __field(u8, int_usb) 137*cfb9a1bcSBin Liu __field(u16, int_tx) 138*cfb9a1bcSBin Liu __field(u16, int_rx) 139*cfb9a1bcSBin Liu ), 140*cfb9a1bcSBin Liu TP_fast_assign( 141*cfb9a1bcSBin Liu __assign_str(name, dev_name(musb->controller)); 142*cfb9a1bcSBin Liu __entry->int_usb = musb->int_usb; 143*cfb9a1bcSBin Liu __entry->int_tx = musb->int_tx; 144*cfb9a1bcSBin Liu __entry->int_rx = musb->int_rx; 145*cfb9a1bcSBin Liu ), 146*cfb9a1bcSBin Liu TP_printk("%s: usb %02x, tx %04x, rx %04x", 147*cfb9a1bcSBin Liu __get_str(name), __entry->int_usb, 148*cfb9a1bcSBin Liu __entry->int_tx, __entry->int_rx 149*cfb9a1bcSBin Liu ) 150*cfb9a1bcSBin Liu ); 151*cfb9a1bcSBin Liu 152f89252adSBin Liu #endif /* __MUSB_TRACE_H */ 153f89252adSBin Liu 154f89252adSBin Liu /* this part has to be here */ 155f89252adSBin Liu 156f89252adSBin Liu #undef TRACE_INCLUDE_PATH 157f89252adSBin Liu #define TRACE_INCLUDE_PATH . 158f89252adSBin Liu 159f89252adSBin Liu #undef TRACE_INCLUDE_FILE 160f89252adSBin Liu #define TRACE_INCLUDE_FILE musb_trace 161f89252adSBin Liu 162f89252adSBin Liu #include <trace/define_trace.h> 163