1*b4c3e9b5SBjoern A. Zeeb /* 2*b4c3e9b5SBjoern A. Zeeb * Copyright (c) 2011 Broadcom Corporation 3*b4c3e9b5SBjoern A. Zeeb * 4*b4c3e9b5SBjoern A. Zeeb * Permission to use, copy, modify, and/or distribute this software for any 5*b4c3e9b5SBjoern A. Zeeb * purpose with or without fee is hereby granted, provided that the above 6*b4c3e9b5SBjoern A. Zeeb * copyright notice and this permission notice appear in all copies. 7*b4c3e9b5SBjoern A. Zeeb * 8*b4c3e9b5SBjoern A. Zeeb * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9*b4c3e9b5SBjoern A. Zeeb * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10*b4c3e9b5SBjoern A. Zeeb * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 11*b4c3e9b5SBjoern A. Zeeb * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12*b4c3e9b5SBjoern A. Zeeb * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 13*b4c3e9b5SBjoern A. Zeeb * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 14*b4c3e9b5SBjoern A. Zeeb * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15*b4c3e9b5SBjoern A. Zeeb */ 16*b4c3e9b5SBjoern A. Zeeb 17*b4c3e9b5SBjoern A. Zeeb #if !defined(__TRACE_BRCMSMAC_H) || defined(TRACE_HEADER_MULTI_READ) 18*b4c3e9b5SBjoern A. Zeeb #define __TRACE_BRCMSMAC_H 19*b4c3e9b5SBjoern A. Zeeb 20*b4c3e9b5SBjoern A. Zeeb #include <linux/tracepoint.h> 21*b4c3e9b5SBjoern A. Zeeb 22*b4c3e9b5SBjoern A. Zeeb #undef TRACE_SYSTEM 23*b4c3e9b5SBjoern A. Zeeb #define TRACE_SYSTEM brcmsmac 24*b4c3e9b5SBjoern A. Zeeb 25*b4c3e9b5SBjoern A. Zeeb /* 26*b4c3e9b5SBjoern A. Zeeb * We define a tracepoint, its arguments, its printk format and its 27*b4c3e9b5SBjoern A. Zeeb * 'fast binary record' layout. 28*b4c3e9b5SBjoern A. Zeeb */ 29*b4c3e9b5SBjoern A. Zeeb TRACE_EVENT(brcms_timer, 30*b4c3e9b5SBjoern A. Zeeb /* TPPROTO is the prototype of the function called by this tracepoint */ 31*b4c3e9b5SBjoern A. Zeeb TP_PROTO(struct brcms_timer *t), 32*b4c3e9b5SBjoern A. Zeeb /* 33*b4c3e9b5SBjoern A. Zeeb * TPARGS(firstarg, p) are the parameters names, same as found in the 34*b4c3e9b5SBjoern A. Zeeb * prototype. 35*b4c3e9b5SBjoern A. Zeeb */ 36*b4c3e9b5SBjoern A. Zeeb TP_ARGS(t), 37*b4c3e9b5SBjoern A. Zeeb /* 38*b4c3e9b5SBjoern A. Zeeb * Fast binary tracing: define the trace record via TP_STRUCT__entry(). 39*b4c3e9b5SBjoern A. Zeeb * You can think about it like a regular C structure local variable 40*b4c3e9b5SBjoern A. Zeeb * definition. 41*b4c3e9b5SBjoern A. Zeeb */ 42*b4c3e9b5SBjoern A. Zeeb TP_STRUCT__entry( 43*b4c3e9b5SBjoern A. Zeeb __field(uint, ms) 44*b4c3e9b5SBjoern A. Zeeb __field(uint, set) 45*b4c3e9b5SBjoern A. Zeeb __field(uint, periodic) 46*b4c3e9b5SBjoern A. Zeeb ), 47*b4c3e9b5SBjoern A. Zeeb TP_fast_assign( 48*b4c3e9b5SBjoern A. Zeeb __entry->ms = t->ms; 49*b4c3e9b5SBjoern A. Zeeb __entry->set = t->set; 50*b4c3e9b5SBjoern A. Zeeb __entry->periodic = t->periodic; 51*b4c3e9b5SBjoern A. Zeeb ), 52*b4c3e9b5SBjoern A. Zeeb TP_printk( 53*b4c3e9b5SBjoern A. Zeeb "ms=%u set=%u periodic=%u", 54*b4c3e9b5SBjoern A. Zeeb __entry->ms, __entry->set, __entry->periodic 55*b4c3e9b5SBjoern A. Zeeb ) 56*b4c3e9b5SBjoern A. Zeeb ); 57*b4c3e9b5SBjoern A. Zeeb 58*b4c3e9b5SBjoern A. Zeeb TRACE_EVENT(brcms_dpc, 59*b4c3e9b5SBjoern A. Zeeb TP_PROTO(unsigned long data), 60*b4c3e9b5SBjoern A. Zeeb TP_ARGS(data), 61*b4c3e9b5SBjoern A. Zeeb TP_STRUCT__entry( 62*b4c3e9b5SBjoern A. Zeeb __field(unsigned long, data) 63*b4c3e9b5SBjoern A. Zeeb ), 64*b4c3e9b5SBjoern A. Zeeb TP_fast_assign( 65*b4c3e9b5SBjoern A. Zeeb __entry->data = data; 66*b4c3e9b5SBjoern A. Zeeb ), 67*b4c3e9b5SBjoern A. Zeeb TP_printk( 68*b4c3e9b5SBjoern A. Zeeb "data=%p", 69*b4c3e9b5SBjoern A. Zeeb (void *)__entry->data 70*b4c3e9b5SBjoern A. Zeeb ) 71*b4c3e9b5SBjoern A. Zeeb ); 72*b4c3e9b5SBjoern A. Zeeb 73*b4c3e9b5SBjoern A. Zeeb TRACE_EVENT(brcms_macintstatus, 74*b4c3e9b5SBjoern A. Zeeb TP_PROTO(const struct device *dev, int in_isr, u32 macintstatus, 75*b4c3e9b5SBjoern A. Zeeb u32 mask), 76*b4c3e9b5SBjoern A. Zeeb TP_ARGS(dev, in_isr, macintstatus, mask), 77*b4c3e9b5SBjoern A. Zeeb TP_STRUCT__entry( 78*b4c3e9b5SBjoern A. Zeeb __string(dev, dev_name(dev)) 79*b4c3e9b5SBjoern A. Zeeb __field(int, in_isr) 80*b4c3e9b5SBjoern A. Zeeb __field(u32, macintstatus) 81*b4c3e9b5SBjoern A. Zeeb __field(u32, mask) 82*b4c3e9b5SBjoern A. Zeeb ), 83*b4c3e9b5SBjoern A. Zeeb TP_fast_assign( 84*b4c3e9b5SBjoern A. Zeeb __assign_str(dev); 85*b4c3e9b5SBjoern A. Zeeb __entry->in_isr = in_isr; 86*b4c3e9b5SBjoern A. Zeeb __entry->macintstatus = macintstatus; 87*b4c3e9b5SBjoern A. Zeeb __entry->mask = mask; 88*b4c3e9b5SBjoern A. Zeeb ), 89*b4c3e9b5SBjoern A. Zeeb TP_printk("[%s] in_isr=%d macintstatus=%#x mask=%#x", __get_str(dev), 90*b4c3e9b5SBjoern A. Zeeb __entry->in_isr, __entry->macintstatus, __entry->mask) 91*b4c3e9b5SBjoern A. Zeeb ); 92*b4c3e9b5SBjoern A. Zeeb #endif /* __TRACE_BRCMSMAC_H */ 93*b4c3e9b5SBjoern A. Zeeb 94*b4c3e9b5SBjoern A. Zeeb #ifdef CONFIG_BRCM_TRACING 95*b4c3e9b5SBjoern A. Zeeb 96*b4c3e9b5SBjoern A. Zeeb #undef TRACE_INCLUDE_PATH 97*b4c3e9b5SBjoern A. Zeeb #define TRACE_INCLUDE_PATH . 98*b4c3e9b5SBjoern A. Zeeb #undef TRACE_INCLUDE_FILE 99*b4c3e9b5SBjoern A. Zeeb #define TRACE_INCLUDE_FILE brcms_trace_brcmsmac 100*b4c3e9b5SBjoern A. Zeeb #include <trace/define_trace.h> 101*b4c3e9b5SBjoern A. Zeeb 102*b4c3e9b5SBjoern A. Zeeb #endif /* CONFIG_BRCM_TRACING */ 103