1*da607e19SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 20c95c1d6STakashi Sakamoto /* 30c95c1d6STakashi Sakamoto * amdtp-stream-trace.h - tracepoint definitions to dump a part of packet data 40c95c1d6STakashi Sakamoto * 50c95c1d6STakashi Sakamoto * Copyright (c) 2016 Takashi Sakamoto 60c95c1d6STakashi Sakamoto */ 70c95c1d6STakashi Sakamoto 80c95c1d6STakashi Sakamoto #undef TRACE_SYSTEM 90c95c1d6STakashi Sakamoto #define TRACE_SYSTEM snd_firewire_lib 100c95c1d6STakashi Sakamoto 110c95c1d6STakashi Sakamoto #if !defined(_AMDTP_STREAM_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 120c95c1d6STakashi Sakamoto #define _AMDTP_STREAM_TRACE_H 130c95c1d6STakashi Sakamoto 140c95c1d6STakashi Sakamoto #include <linux/tracepoint.h> 150c95c1d6STakashi Sakamoto 160c95c1d6STakashi Sakamoto TRACE_EVENT(in_packet, 17c1055475SAlexei Starovoitov TP_PROTO(const struct amdtp_stream *s, u32 cycles, u32 *cip_header, unsigned int payload_length, unsigned int index), 18ff0fb5aaSTakashi Sakamoto TP_ARGS(s, cycles, cip_header, payload_length, index), 190c95c1d6STakashi Sakamoto TP_STRUCT__entry( 200c95c1d6STakashi Sakamoto __field(unsigned int, second) 210c95c1d6STakashi Sakamoto __field(unsigned int, cycle) 220c95c1d6STakashi Sakamoto __field(int, channel) 230c95c1d6STakashi Sakamoto __field(int, src) 240c95c1d6STakashi Sakamoto __field(int, dest) 250c95c1d6STakashi Sakamoto __field(u32, cip_header0) 260c95c1d6STakashi Sakamoto __field(u32, cip_header1) 270c95c1d6STakashi Sakamoto __field(unsigned int, payload_quadlets) 28a9c4284bSTakashi Sakamoto __field(unsigned int, packet_index) 2917e1717cSTakashi Sakamoto __field(unsigned int, irq) 300c95c1d6STakashi Sakamoto __field(unsigned int, index) 310c95c1d6STakashi Sakamoto ), 320c95c1d6STakashi Sakamoto TP_fast_assign( 330c95c1d6STakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 340c95c1d6STakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 350c95c1d6STakashi Sakamoto __entry->channel = s->context->channel; 360c95c1d6STakashi Sakamoto __entry->src = fw_parent_device(s->unit)->node_id; 370c95c1d6STakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->card->node_id; 380c95c1d6STakashi Sakamoto __entry->cip_header0 = cip_header[0]; 390c95c1d6STakashi Sakamoto __entry->cip_header1 = cip_header[1]; 40ff0fb5aaSTakashi Sakamoto __entry->payload_quadlets = payload_length / 4; 41a9c4284bSTakashi Sakamoto __entry->packet_index = s->packet_index; 4217e1717cSTakashi Sakamoto __entry->irq = !!in_interrupt(); 43a9c4284bSTakashi Sakamoto __entry->index = index; 440c95c1d6STakashi Sakamoto ), 450c95c1d6STakashi Sakamoto TP_printk( 46a9c4284bSTakashi Sakamoto "%02u %04u %04x %04x %02d %08x %08x %03u %02u %01u %02u", 470c95c1d6STakashi Sakamoto __entry->second, 480c95c1d6STakashi Sakamoto __entry->cycle, 490c95c1d6STakashi Sakamoto __entry->src, 500c95c1d6STakashi Sakamoto __entry->dest, 510c95c1d6STakashi Sakamoto __entry->channel, 520c95c1d6STakashi Sakamoto __entry->cip_header0, 530c95c1d6STakashi Sakamoto __entry->cip_header1, 540c95c1d6STakashi Sakamoto __entry->payload_quadlets, 55a9c4284bSTakashi Sakamoto __entry->packet_index, 56a9c4284bSTakashi Sakamoto __entry->irq, 570c95c1d6STakashi Sakamoto __entry->index) 580c95c1d6STakashi Sakamoto ); 590c95c1d6STakashi Sakamoto 600c95c1d6STakashi Sakamoto TRACE_EVENT(out_packet, 61a9c4284bSTakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, __be32 *cip_header, unsigned int payload_length, unsigned int index), 62a9c4284bSTakashi Sakamoto TP_ARGS(s, cycles, cip_header, payload_length, index), 630c95c1d6STakashi Sakamoto TP_STRUCT__entry( 640c95c1d6STakashi Sakamoto __field(unsigned int, second) 650c95c1d6STakashi Sakamoto __field(unsigned int, cycle) 660c95c1d6STakashi Sakamoto __field(int, channel) 670c95c1d6STakashi Sakamoto __field(int, src) 680c95c1d6STakashi Sakamoto __field(int, dest) 690c95c1d6STakashi Sakamoto __field(u32, cip_header0) 700c95c1d6STakashi Sakamoto __field(u32, cip_header1) 710c95c1d6STakashi Sakamoto __field(unsigned int, payload_quadlets) 72a9c4284bSTakashi Sakamoto __field(unsigned int, packet_index) 7317e1717cSTakashi Sakamoto __field(unsigned int, irq) 740c95c1d6STakashi Sakamoto __field(unsigned int, index) 750c95c1d6STakashi Sakamoto ), 760c95c1d6STakashi Sakamoto TP_fast_assign( 770c95c1d6STakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 780c95c1d6STakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 790c95c1d6STakashi Sakamoto __entry->channel = s->context->channel; 800c95c1d6STakashi Sakamoto __entry->src = fw_parent_device(s->unit)->card->node_id; 810c95c1d6STakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->node_id; 820c95c1d6STakashi Sakamoto __entry->cip_header0 = be32_to_cpu(cip_header[0]); 830c95c1d6STakashi Sakamoto __entry->cip_header1 = be32_to_cpu(cip_header[1]); 840c95c1d6STakashi Sakamoto __entry->payload_quadlets = payload_length / 4; 85a9c4284bSTakashi Sakamoto __entry->packet_index = s->packet_index; 8617e1717cSTakashi Sakamoto __entry->irq = !!in_interrupt(); 87a9c4284bSTakashi Sakamoto __entry->index = index; 880c95c1d6STakashi Sakamoto ), 890c95c1d6STakashi Sakamoto TP_printk( 90a9c4284bSTakashi Sakamoto "%02u %04u %04x %04x %02d %08x %08x %03u %02u %01u %02u", 910c95c1d6STakashi Sakamoto __entry->second, 920c95c1d6STakashi Sakamoto __entry->cycle, 930c95c1d6STakashi Sakamoto __entry->src, 940c95c1d6STakashi Sakamoto __entry->dest, 950c95c1d6STakashi Sakamoto __entry->channel, 960c95c1d6STakashi Sakamoto __entry->cip_header0, 970c95c1d6STakashi Sakamoto __entry->cip_header1, 980c95c1d6STakashi Sakamoto __entry->payload_quadlets, 99a9c4284bSTakashi Sakamoto __entry->packet_index, 100a9c4284bSTakashi Sakamoto __entry->irq, 1010c95c1d6STakashi Sakamoto __entry->index) 1020c95c1d6STakashi Sakamoto ); 1030c95c1d6STakashi Sakamoto 104b164d2fdSTakashi Sakamoto TRACE_EVENT(in_packet_without_header, 105b164d2fdSTakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, unsigned int payload_quadlets, unsigned int data_blocks, unsigned int index), 106b164d2fdSTakashi Sakamoto TP_ARGS(s, cycles, payload_quadlets, data_blocks, index), 107b164d2fdSTakashi Sakamoto TP_STRUCT__entry( 108b164d2fdSTakashi Sakamoto __field(unsigned int, second) 109b164d2fdSTakashi Sakamoto __field(unsigned int, cycle) 110b164d2fdSTakashi Sakamoto __field(int, channel) 111b164d2fdSTakashi Sakamoto __field(int, src) 112b164d2fdSTakashi Sakamoto __field(int, dest) 113b164d2fdSTakashi Sakamoto __field(unsigned int, payload_quadlets) 114b164d2fdSTakashi Sakamoto __field(unsigned int, data_blocks) 115b164d2fdSTakashi Sakamoto __field(unsigned int, data_block_counter) 116b164d2fdSTakashi Sakamoto __field(unsigned int, packet_index) 117b164d2fdSTakashi Sakamoto __field(unsigned int, irq) 118b164d2fdSTakashi Sakamoto __field(unsigned int, index) 119b164d2fdSTakashi Sakamoto ), 120b164d2fdSTakashi Sakamoto TP_fast_assign( 121b164d2fdSTakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 122b164d2fdSTakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 123b164d2fdSTakashi Sakamoto __entry->channel = s->context->channel; 124b164d2fdSTakashi Sakamoto __entry->src = fw_parent_device(s->unit)->node_id; 125b164d2fdSTakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->card->node_id; 126b164d2fdSTakashi Sakamoto __entry->payload_quadlets = payload_quadlets; 127b164d2fdSTakashi Sakamoto __entry->data_blocks = data_blocks, 128b164d2fdSTakashi Sakamoto __entry->data_block_counter = s->data_block_counter, 129b164d2fdSTakashi Sakamoto __entry->packet_index = s->packet_index; 130b164d2fdSTakashi Sakamoto __entry->irq = !!in_interrupt(); 131b164d2fdSTakashi Sakamoto __entry->index = index; 132b164d2fdSTakashi Sakamoto ), 133b164d2fdSTakashi Sakamoto TP_printk( 1345ef108c5STakashi Sakamoto "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u", 135b164d2fdSTakashi Sakamoto __entry->second, 136b164d2fdSTakashi Sakamoto __entry->cycle, 137b164d2fdSTakashi Sakamoto __entry->src, 138b164d2fdSTakashi Sakamoto __entry->dest, 139b164d2fdSTakashi Sakamoto __entry->channel, 140b164d2fdSTakashi Sakamoto __entry->payload_quadlets, 141b164d2fdSTakashi Sakamoto __entry->data_blocks, 142b164d2fdSTakashi Sakamoto __entry->data_block_counter, 143b164d2fdSTakashi Sakamoto __entry->packet_index, 144b164d2fdSTakashi Sakamoto __entry->irq, 145b164d2fdSTakashi Sakamoto __entry->index) 146b164d2fdSTakashi Sakamoto ); 147b164d2fdSTakashi Sakamoto 148b164d2fdSTakashi Sakamoto TRACE_EVENT(out_packet_without_header, 149b164d2fdSTakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, unsigned int payload_length, unsigned int data_blocks, unsigned int index), 150b164d2fdSTakashi Sakamoto TP_ARGS(s, cycles, payload_length, data_blocks, index), 151b164d2fdSTakashi Sakamoto TP_STRUCT__entry( 152b164d2fdSTakashi Sakamoto __field(unsigned int, second) 153b164d2fdSTakashi Sakamoto __field(unsigned int, cycle) 154b164d2fdSTakashi Sakamoto __field(int, channel) 155b164d2fdSTakashi Sakamoto __field(int, src) 156b164d2fdSTakashi Sakamoto __field(int, dest) 157b164d2fdSTakashi Sakamoto __field(unsigned int, payload_quadlets) 158b164d2fdSTakashi Sakamoto __field(unsigned int, data_blocks) 159b164d2fdSTakashi Sakamoto __field(unsigned int, data_block_counter) 160b164d2fdSTakashi Sakamoto __field(unsigned int, packet_index) 161b164d2fdSTakashi Sakamoto __field(unsigned int, irq) 162b164d2fdSTakashi Sakamoto __field(unsigned int, index) 163b164d2fdSTakashi Sakamoto ), 164b164d2fdSTakashi Sakamoto TP_fast_assign( 165b164d2fdSTakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 166b164d2fdSTakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 167b164d2fdSTakashi Sakamoto __entry->channel = s->context->channel; 168b164d2fdSTakashi Sakamoto __entry->src = fw_parent_device(s->unit)->card->node_id; 169b164d2fdSTakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->node_id; 170b164d2fdSTakashi Sakamoto __entry->payload_quadlets = payload_length / 4; 171b164d2fdSTakashi Sakamoto __entry->data_blocks = data_blocks, 172aa9a9e39STakashi Sakamoto __entry->data_block_counter = s->data_block_counter, 173b164d2fdSTakashi Sakamoto __entry->packet_index = s->packet_index; 174b164d2fdSTakashi Sakamoto __entry->irq = !!in_interrupt(); 175b164d2fdSTakashi Sakamoto __entry->index = index; 176b164d2fdSTakashi Sakamoto ), 177b164d2fdSTakashi Sakamoto TP_printk( 178b164d2fdSTakashi Sakamoto "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u", 179b164d2fdSTakashi Sakamoto __entry->second, 180b164d2fdSTakashi Sakamoto __entry->cycle, 181b164d2fdSTakashi Sakamoto __entry->src, 182b164d2fdSTakashi Sakamoto __entry->dest, 183b164d2fdSTakashi Sakamoto __entry->channel, 184b164d2fdSTakashi Sakamoto __entry->payload_quadlets, 185b164d2fdSTakashi Sakamoto __entry->data_blocks, 186b164d2fdSTakashi Sakamoto __entry->data_block_counter, 187b164d2fdSTakashi Sakamoto __entry->packet_index, 188b164d2fdSTakashi Sakamoto __entry->irq, 189b164d2fdSTakashi Sakamoto __entry->index) 190b164d2fdSTakashi Sakamoto ); 191b164d2fdSTakashi Sakamoto 1920c95c1d6STakashi Sakamoto #endif 1930c95c1d6STakashi Sakamoto 1940c95c1d6STakashi Sakamoto #undef TRACE_INCLUDE_PATH 1950c95c1d6STakashi Sakamoto #define TRACE_INCLUDE_PATH . 1960c95c1d6STakashi Sakamoto #undef TRACE_INCLUDE_FILE 1970c95c1d6STakashi Sakamoto #define TRACE_INCLUDE_FILE amdtp-stream-trace 1980c95c1d6STakashi Sakamoto #include <trace/define_trace.h> 199