Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM intel_avs
0004 
0005 #if !defined(_TRACE_INTEL_AVS_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_INTEL_AVS_H
0007 
0008 #include <linux/types.h>
0009 #include <linux/tracepoint.h>
0010 
0011 TRACE_EVENT(avs_dsp_core_op,
0012 
0013     TP_PROTO(unsigned int reg, unsigned int mask, const char *op, bool flag),
0014 
0015     TP_ARGS(reg, mask, op, flag),
0016 
0017     TP_STRUCT__entry(
0018         __field(unsigned int,   reg )
0019         __field(unsigned int,   mask    )
0020         __string(op,        op  )
0021         __field(bool,       flag    )
0022     ),
0023 
0024     TP_fast_assign(
0025         __entry->reg = reg;
0026         __entry->mask = mask;
0027         __assign_str(op, op);
0028         __entry->flag = flag;
0029     ),
0030 
0031     TP_printk("%s: %d, core mask: 0x%X, prev state: 0x%08X",
0032           __get_str(op), __entry->flag, __entry->mask, __entry->reg)
0033 );
0034 
0035 #ifndef __TRACE_INTEL_AVS_TRACE_HELPER
0036 #define __TRACE_INTEL_AVS_TRACE_HELPER
0037 
0038 void trace_avs_msg_payload(const void *data, size_t size);
0039 
0040 #define trace_avs_request(msg, fwregs) \
0041 ({ \
0042     trace_avs_ipc_request_msg((msg)->header, fwregs); \
0043     trace_avs_msg_payload((msg)->data, (msg)->size); \
0044 })
0045 
0046 #define trace_avs_reply(msg, fwregs) \
0047 ({ \
0048     trace_avs_ipc_reply_msg((msg)->header, fwregs); \
0049     trace_avs_msg_payload((msg)->data, (msg)->size); \
0050 })
0051 
0052 #define trace_avs_notify(msg, fwregs) \
0053 ({ \
0054     trace_avs_ipc_notify_msg((msg)->header, fwregs); \
0055     trace_avs_msg_payload((msg)->data, (msg)->size); \
0056 })
0057 #endif
0058 
0059 DECLARE_EVENT_CLASS(avs_ipc_msg_hdr,
0060 
0061     TP_PROTO(u64 header, u64 fwregs),
0062 
0063     TP_ARGS(header, fwregs),
0064 
0065     TP_STRUCT__entry(
0066         __field(u64,    header)
0067         __field(u64,    fwregs)
0068     ),
0069 
0070     TP_fast_assign(
0071         __entry->header = header;
0072         __entry->fwregs = fwregs;
0073     ),
0074 
0075     TP_printk("primary: 0x%08X, extension: 0x%08X,\n"
0076           "fwstatus: 0x%08X, fwerror: 0x%08X",
0077           lower_32_bits(__entry->header), upper_32_bits(__entry->header),
0078           lower_32_bits(__entry->fwregs), upper_32_bits(__entry->fwregs))
0079 );
0080 
0081 DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_request_msg,
0082     TP_PROTO(u64 header, u64 fwregs),
0083     TP_ARGS(header, fwregs)
0084 );
0085 
0086 DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_reply_msg,
0087     TP_PROTO(u64 header, u64 fwregs),
0088     TP_ARGS(header, fwregs)
0089 );
0090 
0091 DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_notify_msg,
0092     TP_PROTO(u64 header, u64 fwregs),
0093     TP_ARGS(header, fwregs)
0094 );
0095 
0096 TRACE_EVENT_CONDITION(avs_ipc_msg_payload,
0097 
0098     TP_PROTO(const u8 *data, size_t size, size_t offset, size_t total),
0099 
0100     TP_ARGS(data, size, offset, total),
0101 
0102     TP_CONDITION(data && size),
0103 
0104     TP_STRUCT__entry(
0105         __dynamic_array(u8, buf,    size    )
0106         __field(size_t,     offset      )
0107         __field(size_t,     pos     )
0108         __field(size_t,     total       )
0109     ),
0110 
0111     TP_fast_assign(
0112         memcpy(__get_dynamic_array(buf), data + offset, size);
0113         __entry->offset = offset;
0114         __entry->pos = offset + size;
0115         __entry->total = total;
0116     ),
0117 
0118     TP_printk("range %zu-%zu out of %zu bytes%s",
0119           __entry->offset, __entry->pos, __entry->total,
0120           __print_hex_dump("", DUMP_PREFIX_NONE, 16, 4,
0121                    __get_dynamic_array(buf),
0122                    __get_dynamic_array_len(buf), false))
0123 );
0124 
0125 TRACE_EVENT(avs_d0ix,
0126 
0127     TP_PROTO(const char *op, bool proceed, u64 header),
0128 
0129     TP_ARGS(op, proceed, header),
0130 
0131     TP_STRUCT__entry(
0132         __string(op,    op  )
0133         __field(bool,   proceed )
0134         __field(u64,    header  )
0135     ),
0136 
0137     TP_fast_assign(
0138         __assign_str(op, op);
0139         __entry->proceed = proceed;
0140         __entry->header = header;
0141     ),
0142 
0143     TP_printk("%s%s for request: 0x%08X 0x%08X",
0144           __entry->proceed ? "" : "ignore ", __get_str(op),
0145           lower_32_bits(__entry->header), upper_32_bits(__entry->header))
0146 );
0147 
0148 #endif /* _TRACE_INTEL_AVS_H */
0149 
0150 /* This part must be outside protection */
0151 #undef TRACE_INCLUDE_PATH
0152 #define TRACE_INCLUDE_PATH .
0153 #define TRACE_INCLUDE_FILE trace
0154 #include <trace/define_trace.h>