1*b2660d1eSTakashi Iwai /* SPDX-License-Identifier: GPL-2.0 */ 2*b2660d1eSTakashi Iwai #undef TRACE_SYSTEM 3*b2660d1eSTakashi Iwai #define TRACE_SYSTEM hda 4*b2660d1eSTakashi Iwai 5*b2660d1eSTakashi Iwai #if !defined(__HDAC_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 6*b2660d1eSTakashi Iwai #define __HDAC_TRACE_H 7*b2660d1eSTakashi Iwai 8*b2660d1eSTakashi Iwai #include <linux/tracepoint.h> 9*b2660d1eSTakashi Iwai #include <linux/device.h> 10*b2660d1eSTakashi Iwai #include <sound/hdaudio.h> 11*b2660d1eSTakashi Iwai 12*b2660d1eSTakashi Iwai #ifndef HDAC_MSG_MAX 13*b2660d1eSTakashi Iwai #define HDAC_MSG_MAX 500 14*b2660d1eSTakashi Iwai #endif 15*b2660d1eSTakashi Iwai 16*b2660d1eSTakashi Iwai struct hdac_bus; 17*b2660d1eSTakashi Iwai struct hdac_codec; 18*b2660d1eSTakashi Iwai 19*b2660d1eSTakashi Iwai TRACE_EVENT(hda_send_cmd, 20*b2660d1eSTakashi Iwai TP_PROTO(struct hdac_bus *bus, unsigned int cmd), 21*b2660d1eSTakashi Iwai TP_ARGS(bus, cmd), 22*b2660d1eSTakashi Iwai TP_STRUCT__entry( 23*b2660d1eSTakashi Iwai __string(name, dev_name((bus)->dev)) 24*b2660d1eSTakashi Iwai __field(u32, cmd) 25*b2660d1eSTakashi Iwai ), 26*b2660d1eSTakashi Iwai TP_fast_assign( 27*b2660d1eSTakashi Iwai __assign_str(name); 28*b2660d1eSTakashi Iwai __entry->cmd = cmd; 29*b2660d1eSTakashi Iwai ), 30*b2660d1eSTakashi Iwai TP_printk("[%s:%d] val=0x%08x", __get_str(name), __entry->cmd >> 28, __entry->cmd) 31*b2660d1eSTakashi Iwai ); 32*b2660d1eSTakashi Iwai 33*b2660d1eSTakashi Iwai TRACE_EVENT(hda_get_response, 34*b2660d1eSTakashi Iwai TP_PROTO(struct hdac_bus *bus, unsigned int addr, unsigned int res), 35*b2660d1eSTakashi Iwai TP_ARGS(bus, addr, res), 36*b2660d1eSTakashi Iwai TP_STRUCT__entry( 37*b2660d1eSTakashi Iwai __string(name, dev_name((bus)->dev)) 38*b2660d1eSTakashi Iwai __field(u32, addr) 39*b2660d1eSTakashi Iwai __field(u32, res) 40*b2660d1eSTakashi Iwai ), 41*b2660d1eSTakashi Iwai TP_fast_assign( 42*b2660d1eSTakashi Iwai __assign_str(name); 43*b2660d1eSTakashi Iwai __entry->addr = addr; 44*b2660d1eSTakashi Iwai __entry->res = res; 45*b2660d1eSTakashi Iwai ), 46*b2660d1eSTakashi Iwai TP_printk("[%s:%d] val=0x%08x", __get_str(name), __entry->addr, __entry->res) 47*b2660d1eSTakashi Iwai ); 48*b2660d1eSTakashi Iwai 49*b2660d1eSTakashi Iwai TRACE_EVENT(hda_unsol_event, 50*b2660d1eSTakashi Iwai TP_PROTO(struct hdac_bus *bus, u32 res, u32 res_ex), 51*b2660d1eSTakashi Iwai TP_ARGS(bus, res, res_ex), 52*b2660d1eSTakashi Iwai TP_STRUCT__entry( 53*b2660d1eSTakashi Iwai __string(name, dev_name((bus)->dev)) 54*b2660d1eSTakashi Iwai __field(u32, res) 55*b2660d1eSTakashi Iwai __field(u32, res_ex) 56*b2660d1eSTakashi Iwai ), 57*b2660d1eSTakashi Iwai TP_fast_assign( 58*b2660d1eSTakashi Iwai __assign_str(name); 59*b2660d1eSTakashi Iwai __entry->res = res; 60*b2660d1eSTakashi Iwai __entry->res_ex = res_ex; 61*b2660d1eSTakashi Iwai ), 62*b2660d1eSTakashi Iwai TP_printk("[%s:%d] res=0x%08x, res_ex=0x%08x", __get_str(name), 63*b2660d1eSTakashi Iwai __entry->res_ex & 0x0f, __entry->res, __entry->res_ex) 64*b2660d1eSTakashi Iwai ); 65*b2660d1eSTakashi Iwai 66*b2660d1eSTakashi Iwai DECLARE_EVENT_CLASS(hdac_stream, 67*b2660d1eSTakashi Iwai TP_PROTO(struct hdac_bus *bus, struct hdac_stream *azx_dev), 68*b2660d1eSTakashi Iwai 69*b2660d1eSTakashi Iwai TP_ARGS(bus, azx_dev), 70*b2660d1eSTakashi Iwai 71*b2660d1eSTakashi Iwai TP_STRUCT__entry( 72*b2660d1eSTakashi Iwai __field(unsigned char, stream_tag) 73*b2660d1eSTakashi Iwai ), 74*b2660d1eSTakashi Iwai 75*b2660d1eSTakashi Iwai TP_fast_assign( 76*b2660d1eSTakashi Iwai __entry->stream_tag = (azx_dev)->stream_tag; 77*b2660d1eSTakashi Iwai ), 78*b2660d1eSTakashi Iwai 79*b2660d1eSTakashi Iwai TP_printk("stream_tag: %d", __entry->stream_tag) 80*b2660d1eSTakashi Iwai ); 81*b2660d1eSTakashi Iwai 82*b2660d1eSTakashi Iwai DEFINE_EVENT(hdac_stream, snd_hdac_stream_start, 83*b2660d1eSTakashi Iwai TP_PROTO(struct hdac_bus *bus, struct hdac_stream *azx_dev), 84*b2660d1eSTakashi Iwai TP_ARGS(bus, azx_dev) 85*b2660d1eSTakashi Iwai ); 86*b2660d1eSTakashi Iwai 87*b2660d1eSTakashi Iwai DEFINE_EVENT(hdac_stream, snd_hdac_stream_stop, 88*b2660d1eSTakashi Iwai TP_PROTO(struct hdac_bus *bus, struct hdac_stream *azx_dev), 89*b2660d1eSTakashi Iwai TP_ARGS(bus, azx_dev) 90*b2660d1eSTakashi Iwai ); 91*b2660d1eSTakashi Iwai 92*b2660d1eSTakashi Iwai #endif /* __HDAC_TRACE_H */ 93*b2660d1eSTakashi Iwai 94*b2660d1eSTakashi Iwai /* This part must be outside protection */ 95*b2660d1eSTakashi Iwai #undef TRACE_INCLUDE_PATH 96*b2660d1eSTakashi Iwai #define TRACE_INCLUDE_PATH . 97*b2660d1eSTakashi Iwai 98*b2660d1eSTakashi Iwai #undef TRACE_INCLUDE_FILE 99*b2660d1eSTakashi Iwai #define TRACE_INCLUDE_FILE trace 100*b2660d1eSTakashi Iwai 101*b2660d1eSTakashi Iwai #include <trace/define_trace.h> 102