10c95c1d6STakashi Sakamoto /* 20c95c1d6STakashi Sakamoto * amdtp-stream-trace.h - tracepoint definitions to dump a part of packet data 30c95c1d6STakashi Sakamoto * 40c95c1d6STakashi Sakamoto * Copyright (c) 2016 Takashi Sakamoto 50c95c1d6STakashi Sakamoto * Licensed under the terms of the GNU General Public License, version 2. 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, 1764d0bf4dSTakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, const __be32 *cip_header, unsigned int payload_length, unsigned int data_blocks, unsigned int index), 1864d0bf4dSTakashi Sakamoto TP_ARGS(s, cycles, cip_header, payload_length, data_blocks, 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) 25*bde2bbdbSTakashi Sakamoto __dynamic_array(u8, cip_header, cip_header ? 8 : 0) 260c95c1d6STakashi Sakamoto __field(unsigned int, payload_quadlets) 2764d0bf4dSTakashi Sakamoto __field(unsigned int, data_blocks) 2864d0bf4dSTakashi Sakamoto __field(unsigned int, data_block_counter) 29a9c4284bSTakashi Sakamoto __field(unsigned int, packet_index) 3017e1717cSTakashi Sakamoto __field(unsigned int, irq) 310c95c1d6STakashi Sakamoto __field(unsigned int, index) 320c95c1d6STakashi Sakamoto ), 330c95c1d6STakashi Sakamoto TP_fast_assign( 340c95c1d6STakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 350c95c1d6STakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 360c95c1d6STakashi Sakamoto __entry->channel = s->context->channel; 370c95c1d6STakashi Sakamoto __entry->src = fw_parent_device(s->unit)->node_id; 380c95c1d6STakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->card->node_id; 39*bde2bbdbSTakashi Sakamoto if (cip_header) { 40*bde2bbdbSTakashi Sakamoto memcpy(__get_dynamic_array(cip_header), cip_header, 41*bde2bbdbSTakashi Sakamoto __get_dynamic_array_len(cip_header)); 42*bde2bbdbSTakashi Sakamoto } 43a8520f3eSTakashi Sakamoto __entry->payload_quadlets = payload_length / sizeof(__be32); 4464d0bf4dSTakashi Sakamoto __entry->data_blocks = data_blocks; 4564d0bf4dSTakashi Sakamoto __entry->data_block_counter = s->data_block_counter, 46a9c4284bSTakashi Sakamoto __entry->packet_index = s->packet_index; 4717e1717cSTakashi Sakamoto __entry->irq = !!in_interrupt(); 48a9c4284bSTakashi Sakamoto __entry->index = index; 490c95c1d6STakashi Sakamoto ), 500c95c1d6STakashi Sakamoto TP_printk( 51*bde2bbdbSTakashi Sakamoto "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u %s", 520c95c1d6STakashi Sakamoto __entry->second, 530c95c1d6STakashi Sakamoto __entry->cycle, 540c95c1d6STakashi Sakamoto __entry->src, 550c95c1d6STakashi Sakamoto __entry->dest, 560c95c1d6STakashi Sakamoto __entry->channel, 570c95c1d6STakashi Sakamoto __entry->payload_quadlets, 5864d0bf4dSTakashi Sakamoto __entry->data_blocks, 5964d0bf4dSTakashi Sakamoto __entry->data_block_counter, 60a9c4284bSTakashi Sakamoto __entry->packet_index, 61a9c4284bSTakashi Sakamoto __entry->irq, 62*bde2bbdbSTakashi Sakamoto __entry->index, 63*bde2bbdbSTakashi Sakamoto __print_array(__get_dynamic_array(cip_header), 64*bde2bbdbSTakashi Sakamoto __get_dynamic_array_len(cip_header), 65*bde2bbdbSTakashi Sakamoto sizeof(u8))) 660c95c1d6STakashi Sakamoto ); 670c95c1d6STakashi Sakamoto 680c95c1d6STakashi Sakamoto TRACE_EVENT(out_packet, 6964d0bf4dSTakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, const __be32 *cip_header, unsigned int payload_length, unsigned int data_blocks, unsigned int index), 7064d0bf4dSTakashi Sakamoto TP_ARGS(s, cycles, cip_header, payload_length, data_blocks, index), 710c95c1d6STakashi Sakamoto TP_STRUCT__entry( 720c95c1d6STakashi Sakamoto __field(unsigned int, second) 730c95c1d6STakashi Sakamoto __field(unsigned int, cycle) 740c95c1d6STakashi Sakamoto __field(int, channel) 750c95c1d6STakashi Sakamoto __field(int, src) 760c95c1d6STakashi Sakamoto __field(int, dest) 77*bde2bbdbSTakashi Sakamoto __dynamic_array(u8, cip_header, cip_header ? 8 : 0) 780c95c1d6STakashi Sakamoto __field(unsigned int, payload_quadlets) 7964d0bf4dSTakashi Sakamoto __field(unsigned int, data_blocks) 8064d0bf4dSTakashi Sakamoto __field(unsigned int, data_block_counter) 81a9c4284bSTakashi Sakamoto __field(unsigned int, packet_index) 8217e1717cSTakashi Sakamoto __field(unsigned int, irq) 830c95c1d6STakashi Sakamoto __field(unsigned int, index) 840c95c1d6STakashi Sakamoto ), 850c95c1d6STakashi Sakamoto TP_fast_assign( 860c95c1d6STakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 870c95c1d6STakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 880c95c1d6STakashi Sakamoto __entry->channel = s->context->channel; 890c95c1d6STakashi Sakamoto __entry->src = fw_parent_device(s->unit)->card->node_id; 900c95c1d6STakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->node_id; 91*bde2bbdbSTakashi Sakamoto if (cip_header) { 92*bde2bbdbSTakashi Sakamoto memcpy(__get_dynamic_array(cip_header), cip_header, 93*bde2bbdbSTakashi Sakamoto __get_dynamic_array_len(cip_header)); 94*bde2bbdbSTakashi Sakamoto } 95a8520f3eSTakashi Sakamoto __entry->payload_quadlets = payload_length / sizeof(__be32); 9664d0bf4dSTakashi Sakamoto __entry->data_blocks = data_blocks; 9764d0bf4dSTakashi Sakamoto __entry->data_block_counter = s->data_block_counter, 98a9c4284bSTakashi Sakamoto __entry->packet_index = s->packet_index; 9917e1717cSTakashi Sakamoto __entry->irq = !!in_interrupt(); 100a9c4284bSTakashi Sakamoto __entry->index = index; 1010c95c1d6STakashi Sakamoto ), 1020c95c1d6STakashi Sakamoto TP_printk( 103*bde2bbdbSTakashi Sakamoto "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u %s", 1040c95c1d6STakashi Sakamoto __entry->second, 1050c95c1d6STakashi Sakamoto __entry->cycle, 1060c95c1d6STakashi Sakamoto __entry->src, 1070c95c1d6STakashi Sakamoto __entry->dest, 1080c95c1d6STakashi Sakamoto __entry->channel, 1090c95c1d6STakashi Sakamoto __entry->payload_quadlets, 11064d0bf4dSTakashi Sakamoto __entry->data_blocks, 11164d0bf4dSTakashi Sakamoto __entry->data_block_counter, 112a9c4284bSTakashi Sakamoto __entry->packet_index, 113a9c4284bSTakashi Sakamoto __entry->irq, 114*bde2bbdbSTakashi Sakamoto __entry->index, 115*bde2bbdbSTakashi Sakamoto __print_array(__get_dynamic_array(cip_header), 116*bde2bbdbSTakashi Sakamoto __get_dynamic_array_len(cip_header), 117*bde2bbdbSTakashi Sakamoto sizeof(u8))) 1180c95c1d6STakashi Sakamoto ); 1190c95c1d6STakashi Sakamoto 120b164d2fdSTakashi Sakamoto TRACE_EVENT(in_packet_without_header, 121a8520f3eSTakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, unsigned int payload_length, unsigned int data_blocks, unsigned int index), 122a8520f3eSTakashi Sakamoto TP_ARGS(s, cycles, payload_length, data_blocks, index), 123b164d2fdSTakashi Sakamoto TP_STRUCT__entry( 124b164d2fdSTakashi Sakamoto __field(unsigned int, second) 125b164d2fdSTakashi Sakamoto __field(unsigned int, cycle) 126b164d2fdSTakashi Sakamoto __field(int, channel) 127b164d2fdSTakashi Sakamoto __field(int, src) 128b164d2fdSTakashi Sakamoto __field(int, dest) 129b164d2fdSTakashi Sakamoto __field(unsigned int, payload_quadlets) 130b164d2fdSTakashi Sakamoto __field(unsigned int, data_blocks) 131b164d2fdSTakashi Sakamoto __field(unsigned int, data_block_counter) 132b164d2fdSTakashi Sakamoto __field(unsigned int, packet_index) 133b164d2fdSTakashi Sakamoto __field(unsigned int, irq) 134b164d2fdSTakashi Sakamoto __field(unsigned int, index) 135b164d2fdSTakashi Sakamoto ), 136b164d2fdSTakashi Sakamoto TP_fast_assign( 137b164d2fdSTakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 138b164d2fdSTakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 139b164d2fdSTakashi Sakamoto __entry->channel = s->context->channel; 140b164d2fdSTakashi Sakamoto __entry->src = fw_parent_device(s->unit)->node_id; 141b164d2fdSTakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->card->node_id; 142a8520f3eSTakashi Sakamoto __entry->payload_quadlets = payload_length / sizeof(__be32); 143b164d2fdSTakashi Sakamoto __entry->data_blocks = data_blocks, 144b164d2fdSTakashi Sakamoto __entry->data_block_counter = s->data_block_counter, 145b164d2fdSTakashi Sakamoto __entry->packet_index = s->packet_index; 146b164d2fdSTakashi Sakamoto __entry->irq = !!in_interrupt(); 147b164d2fdSTakashi Sakamoto __entry->index = index; 148b164d2fdSTakashi Sakamoto ), 149b164d2fdSTakashi Sakamoto TP_printk( 1505ef108c5STakashi Sakamoto "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u", 151b164d2fdSTakashi Sakamoto __entry->second, 152b164d2fdSTakashi Sakamoto __entry->cycle, 153b164d2fdSTakashi Sakamoto __entry->src, 154b164d2fdSTakashi Sakamoto __entry->dest, 155b164d2fdSTakashi Sakamoto __entry->channel, 156b164d2fdSTakashi Sakamoto __entry->payload_quadlets, 157b164d2fdSTakashi Sakamoto __entry->data_blocks, 158b164d2fdSTakashi Sakamoto __entry->data_block_counter, 159b164d2fdSTakashi Sakamoto __entry->packet_index, 160b164d2fdSTakashi Sakamoto __entry->irq, 161b164d2fdSTakashi Sakamoto __entry->index) 162b164d2fdSTakashi Sakamoto ); 163b164d2fdSTakashi Sakamoto 164b164d2fdSTakashi Sakamoto TRACE_EVENT(out_packet_without_header, 165b164d2fdSTakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, unsigned int payload_length, unsigned int data_blocks, unsigned int index), 166b164d2fdSTakashi Sakamoto TP_ARGS(s, cycles, payload_length, data_blocks, index), 167b164d2fdSTakashi Sakamoto TP_STRUCT__entry( 168b164d2fdSTakashi Sakamoto __field(unsigned int, second) 169b164d2fdSTakashi Sakamoto __field(unsigned int, cycle) 170b164d2fdSTakashi Sakamoto __field(int, channel) 171b164d2fdSTakashi Sakamoto __field(int, src) 172b164d2fdSTakashi Sakamoto __field(int, dest) 173b164d2fdSTakashi Sakamoto __field(unsigned int, payload_quadlets) 174b164d2fdSTakashi Sakamoto __field(unsigned int, data_blocks) 175b164d2fdSTakashi Sakamoto __field(unsigned int, data_block_counter) 176b164d2fdSTakashi Sakamoto __field(unsigned int, packet_index) 177b164d2fdSTakashi Sakamoto __field(unsigned int, irq) 178b164d2fdSTakashi Sakamoto __field(unsigned int, index) 179b164d2fdSTakashi Sakamoto ), 180b164d2fdSTakashi Sakamoto TP_fast_assign( 181b164d2fdSTakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 182b164d2fdSTakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 183b164d2fdSTakashi Sakamoto __entry->channel = s->context->channel; 184b164d2fdSTakashi Sakamoto __entry->src = fw_parent_device(s->unit)->card->node_id; 185b164d2fdSTakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->node_id; 186a8520f3eSTakashi Sakamoto __entry->payload_quadlets = payload_length / sizeof(__be32); 187b164d2fdSTakashi Sakamoto __entry->data_blocks = data_blocks, 188aa9a9e39STakashi Sakamoto __entry->data_block_counter = s->data_block_counter, 189b164d2fdSTakashi Sakamoto __entry->packet_index = s->packet_index; 190b164d2fdSTakashi Sakamoto __entry->irq = !!in_interrupt(); 191b164d2fdSTakashi Sakamoto __entry->index = index; 192b164d2fdSTakashi Sakamoto ), 193b164d2fdSTakashi Sakamoto TP_printk( 194b164d2fdSTakashi Sakamoto "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u", 195b164d2fdSTakashi Sakamoto __entry->second, 196b164d2fdSTakashi Sakamoto __entry->cycle, 197b164d2fdSTakashi Sakamoto __entry->src, 198b164d2fdSTakashi Sakamoto __entry->dest, 199b164d2fdSTakashi Sakamoto __entry->channel, 200b164d2fdSTakashi Sakamoto __entry->payload_quadlets, 201b164d2fdSTakashi Sakamoto __entry->data_blocks, 202b164d2fdSTakashi Sakamoto __entry->data_block_counter, 203b164d2fdSTakashi Sakamoto __entry->packet_index, 204b164d2fdSTakashi Sakamoto __entry->irq, 205b164d2fdSTakashi Sakamoto __entry->index) 206b164d2fdSTakashi Sakamoto ); 207b164d2fdSTakashi Sakamoto 2080c95c1d6STakashi Sakamoto #endif 2090c95c1d6STakashi Sakamoto 2100c95c1d6STakashi Sakamoto #undef TRACE_INCLUDE_PATH 2110c95c1d6STakashi Sakamoto #define TRACE_INCLUDE_PATH . 2120c95c1d6STakashi Sakamoto #undef TRACE_INCLUDE_FILE 2130c95c1d6STakashi Sakamoto #define TRACE_INCLUDE_FILE amdtp-stream-trace 2140c95c1d6STakashi Sakamoto #include <trace/define_trace.h> 215