1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2be4e31daSTakashi Sakamoto #undef TRACE_SYSTEM 3be4e31daSTakashi Sakamoto #define TRACE_SYSTEM snd_pcm 4be4e31daSTakashi Sakamoto 5be4e31daSTakashi Sakamoto #if !defined(_PCM_PARAMS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 6be4e31daSTakashi Sakamoto #define _PCM_PARAMS_TRACE_H 7be4e31daSTakashi Sakamoto 8be4e31daSTakashi Sakamoto #include <linux/tracepoint.h> 9be4e31daSTakashi Sakamoto 10be4e31daSTakashi Sakamoto #define HW_PARAM_ENTRY(param) {SNDRV_PCM_HW_PARAM_##param, #param} 11be4e31daSTakashi Sakamoto #define hw_param_labels \ 12be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(ACCESS), \ 13be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(FORMAT), \ 14be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(SUBFORMAT), \ 15be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(SAMPLE_BITS), \ 16be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(FRAME_BITS), \ 17be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(CHANNELS), \ 18be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(RATE), \ 19be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(PERIOD_TIME), \ 20be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(PERIOD_SIZE), \ 21be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(PERIOD_BYTES), \ 22be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(PERIODS), \ 23be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(BUFFER_TIME), \ 24be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(BUFFER_SIZE), \ 25be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(BUFFER_BYTES), \ 26be4e31daSTakashi Sakamoto HW_PARAM_ENTRY(TICK_TIME) 27be4e31daSTakashi Sakamoto 28be4e31daSTakashi Sakamoto TRACE_EVENT(hw_mask_param, 29be4e31daSTakashi Sakamoto TP_PROTO(struct snd_pcm_substream *substream, snd_pcm_hw_param_t type, int index, const struct snd_mask *prev, const struct snd_mask *curr), 30be4e31daSTakashi Sakamoto TP_ARGS(substream, type, index, prev, curr), 31be4e31daSTakashi Sakamoto TP_STRUCT__entry( 32be4e31daSTakashi Sakamoto __field(int, card) 33be4e31daSTakashi Sakamoto __field(int, device) 34be4e31daSTakashi Sakamoto __field(int, subdevice) 35be4e31daSTakashi Sakamoto __field(int, direction) 36be4e31daSTakashi Sakamoto __field(snd_pcm_hw_param_t, type) 37be4e31daSTakashi Sakamoto __field(int, index) 38be4e31daSTakashi Sakamoto __field(int, total) 39be4e31daSTakashi Sakamoto __array(__u32, prev_bits, 8) 40be4e31daSTakashi Sakamoto __array(__u32, curr_bits, 8) 41be4e31daSTakashi Sakamoto ), 42be4e31daSTakashi Sakamoto TP_fast_assign( 43be4e31daSTakashi Sakamoto __entry->card = substream->pcm->card->number; 44be4e31daSTakashi Sakamoto __entry->device = substream->pcm->device; 45be4e31daSTakashi Sakamoto __entry->subdevice = substream->number; 46be4e31daSTakashi Sakamoto __entry->direction = substream->stream; 47be4e31daSTakashi Sakamoto __entry->type = type; 48be4e31daSTakashi Sakamoto __entry->index = index; 49be4e31daSTakashi Sakamoto __entry->total = substream->runtime->hw_constraints.rules_num; 50be4e31daSTakashi Sakamoto memcpy(__entry->prev_bits, prev->bits, sizeof(__u32) * 8); 51be4e31daSTakashi Sakamoto memcpy(__entry->curr_bits, curr->bits, sizeof(__u32) * 8); 52be4e31daSTakashi Sakamoto ), 536baca010STakashi Sakamoto TP_printk("pcmC%dD%d%s:%d %03d/%03d %s %08x%08x%08x%08x %08x%08x%08x%08x", 54be4e31daSTakashi Sakamoto __entry->card, 55be4e31daSTakashi Sakamoto __entry->device, 566baca010STakashi Sakamoto __entry->direction ? "c" : "p", 57be4e31daSTakashi Sakamoto __entry->subdevice, 58be4e31daSTakashi Sakamoto __entry->index, 59be4e31daSTakashi Sakamoto __entry->total, 60be4e31daSTakashi Sakamoto __print_symbolic(__entry->type, hw_param_labels), 61be4e31daSTakashi Sakamoto __entry->prev_bits[3], __entry->prev_bits[2], 62be4e31daSTakashi Sakamoto __entry->prev_bits[1], __entry->prev_bits[0], 63be4e31daSTakashi Sakamoto __entry->curr_bits[3], __entry->curr_bits[2], 64be4e31daSTakashi Sakamoto __entry->curr_bits[1], __entry->curr_bits[0] 65be4e31daSTakashi Sakamoto ) 66be4e31daSTakashi Sakamoto ); 67be4e31daSTakashi Sakamoto 68be4e31daSTakashi Sakamoto TRACE_EVENT(hw_interval_param, 69be4e31daSTakashi Sakamoto TP_PROTO(struct snd_pcm_substream *substream, snd_pcm_hw_param_t type, int index, const struct snd_interval *prev, const struct snd_interval *curr), 70be4e31daSTakashi Sakamoto TP_ARGS(substream, type, index, prev, curr), 71be4e31daSTakashi Sakamoto TP_STRUCT__entry( 72be4e31daSTakashi Sakamoto __field(int, card) 73be4e31daSTakashi Sakamoto __field(int, device) 74be4e31daSTakashi Sakamoto __field(int, subdevice) 75be4e31daSTakashi Sakamoto __field(int, direction) 76be4e31daSTakashi Sakamoto __field(snd_pcm_hw_param_t, type) 77be4e31daSTakashi Sakamoto __field(int, index) 78be4e31daSTakashi Sakamoto __field(int, total) 79be4e31daSTakashi Sakamoto __field(unsigned int, prev_min) 80be4e31daSTakashi Sakamoto __field(unsigned int, prev_max) 81be4e31daSTakashi Sakamoto __field(unsigned int, prev_openmin) 82be4e31daSTakashi Sakamoto __field(unsigned int, prev_openmax) 83be4e31daSTakashi Sakamoto __field(unsigned int, prev_integer) 84be4e31daSTakashi Sakamoto __field(unsigned int, prev_empty) 85be4e31daSTakashi Sakamoto __field(unsigned int, curr_min) 86be4e31daSTakashi Sakamoto __field(unsigned int, curr_max) 87be4e31daSTakashi Sakamoto __field(unsigned int, curr_openmin) 88be4e31daSTakashi Sakamoto __field(unsigned int, curr_openmax) 89be4e31daSTakashi Sakamoto __field(unsigned int, curr_integer) 90be4e31daSTakashi Sakamoto __field(unsigned int, curr_empty) 91be4e31daSTakashi Sakamoto ), 92be4e31daSTakashi Sakamoto TP_fast_assign( 93be4e31daSTakashi Sakamoto __entry->card = substream->pcm->card->number; 94be4e31daSTakashi Sakamoto __entry->device = substream->pcm->device; 95be4e31daSTakashi Sakamoto __entry->subdevice = substream->number; 96be4e31daSTakashi Sakamoto __entry->direction = substream->stream; 97be4e31daSTakashi Sakamoto __entry->type = type; 98be4e31daSTakashi Sakamoto __entry->index = index; 99be4e31daSTakashi Sakamoto __entry->total = substream->runtime->hw_constraints.rules_num; 100be4e31daSTakashi Sakamoto __entry->prev_min = prev->min; 101be4e31daSTakashi Sakamoto __entry->prev_max = prev->max; 102be4e31daSTakashi Sakamoto __entry->prev_openmin = prev->openmin; 103be4e31daSTakashi Sakamoto __entry->prev_openmax = prev->openmax; 104be4e31daSTakashi Sakamoto __entry->prev_integer = prev->integer; 105be4e31daSTakashi Sakamoto __entry->prev_empty = prev->empty; 106be4e31daSTakashi Sakamoto __entry->curr_min = curr->min; 107be4e31daSTakashi Sakamoto __entry->curr_max = curr->max; 108be4e31daSTakashi Sakamoto __entry->curr_openmin = curr->openmin; 109be4e31daSTakashi Sakamoto __entry->curr_openmax = curr->openmax; 110be4e31daSTakashi Sakamoto __entry->curr_integer = curr->integer; 111be4e31daSTakashi Sakamoto __entry->curr_empty = curr->empty; 112be4e31daSTakashi Sakamoto ), 1136baca010STakashi Sakamoto TP_printk("pcmC%dD%d%s:%d %03d/%03d %s %d %d %s%u %u%s %d %d %s%u %u%s", 114be4e31daSTakashi Sakamoto __entry->card, 115be4e31daSTakashi Sakamoto __entry->device, 1166baca010STakashi Sakamoto __entry->direction ? "c" : "p", 117be4e31daSTakashi Sakamoto __entry->subdevice, 118be4e31daSTakashi Sakamoto __entry->index, 119be4e31daSTakashi Sakamoto __entry->total, 120be4e31daSTakashi Sakamoto __print_symbolic(__entry->type, hw_param_labels), 121be4e31daSTakashi Sakamoto __entry->prev_empty, 122be4e31daSTakashi Sakamoto __entry->prev_integer, 123be4e31daSTakashi Sakamoto __entry->prev_openmin ? "(" : "[", 124be4e31daSTakashi Sakamoto __entry->prev_min, 125be4e31daSTakashi Sakamoto __entry->prev_max, 126be4e31daSTakashi Sakamoto __entry->prev_openmax ? ")" : "]", 127be4e31daSTakashi Sakamoto __entry->curr_empty, 128be4e31daSTakashi Sakamoto __entry->curr_integer, 129be4e31daSTakashi Sakamoto __entry->curr_openmin ? "(" : "[", 130be4e31daSTakashi Sakamoto __entry->curr_min, 131be4e31daSTakashi Sakamoto __entry->curr_max, 132be4e31daSTakashi Sakamoto __entry->curr_openmax ? ")" : "]" 133be4e31daSTakashi Sakamoto ) 134be4e31daSTakashi Sakamoto ); 135be4e31daSTakashi Sakamoto 136be4e31daSTakashi Sakamoto #endif /* _PCM_PARAMS_TRACE_H */ 137be4e31daSTakashi Sakamoto 138be4e31daSTakashi Sakamoto /* This part must be outside protection */ 139be4e31daSTakashi Sakamoto #undef TRACE_INCLUDE_PATH 140be4e31daSTakashi Sakamoto #define TRACE_INCLUDE_PATH . 141be4e31daSTakashi Sakamoto #undef TRACE_INCLUDE_FILE 142be4e31daSTakashi Sakamoto #define TRACE_INCLUDE_FILE pcm_param_trace 143be4e31daSTakashi Sakamoto #include <trace/define_trace.h> 144