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 16*8d3f1fdfSTakashi Sakamoto TRACE_EVENT(amdtp_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) 25bde2bbdbSTakashi 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; 37*8d3f1fdfSTakashi Sakamoto if (s->direction == AMDTP_IN_STREAM) { 380c95c1d6STakashi Sakamoto __entry->src = fw_parent_device(s->unit)->node_id; 390c95c1d6STakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->card->node_id; 40*8d3f1fdfSTakashi Sakamoto } else { 41*8d3f1fdfSTakashi Sakamoto __entry->src = fw_parent_device(s->unit)->card->node_id; 42*8d3f1fdfSTakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->node_id; 43*8d3f1fdfSTakashi Sakamoto } 44bde2bbdbSTakashi Sakamoto if (cip_header) { 45bde2bbdbSTakashi Sakamoto memcpy(__get_dynamic_array(cip_header), cip_header, 46bde2bbdbSTakashi Sakamoto __get_dynamic_array_len(cip_header)); 47bde2bbdbSTakashi Sakamoto } 48a8520f3eSTakashi Sakamoto __entry->payload_quadlets = payload_length / sizeof(__be32); 4964d0bf4dSTakashi Sakamoto __entry->data_blocks = data_blocks; 5064d0bf4dSTakashi Sakamoto __entry->data_block_counter = s->data_block_counter, 51a9c4284bSTakashi Sakamoto __entry->packet_index = s->packet_index; 5217e1717cSTakashi Sakamoto __entry->irq = !!in_interrupt(); 53a9c4284bSTakashi Sakamoto __entry->index = index; 540c95c1d6STakashi Sakamoto ), 550c95c1d6STakashi Sakamoto TP_printk( 56bde2bbdbSTakashi Sakamoto "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u %s", 570c95c1d6STakashi Sakamoto __entry->second, 580c95c1d6STakashi Sakamoto __entry->cycle, 590c95c1d6STakashi Sakamoto __entry->src, 600c95c1d6STakashi Sakamoto __entry->dest, 610c95c1d6STakashi Sakamoto __entry->channel, 620c95c1d6STakashi Sakamoto __entry->payload_quadlets, 6364d0bf4dSTakashi Sakamoto __entry->data_blocks, 6464d0bf4dSTakashi Sakamoto __entry->data_block_counter, 65a9c4284bSTakashi Sakamoto __entry->packet_index, 66a9c4284bSTakashi Sakamoto __entry->irq, 67bde2bbdbSTakashi Sakamoto __entry->index, 68bde2bbdbSTakashi Sakamoto __print_array(__get_dynamic_array(cip_header), 69bde2bbdbSTakashi Sakamoto __get_dynamic_array_len(cip_header), 70bde2bbdbSTakashi Sakamoto sizeof(u8))) 710c95c1d6STakashi Sakamoto ); 720c95c1d6STakashi Sakamoto 730c95c1d6STakashi Sakamoto #endif 740c95c1d6STakashi Sakamoto 750c95c1d6STakashi Sakamoto #undef TRACE_INCLUDE_PATH 760c95c1d6STakashi Sakamoto #define TRACE_INCLUDE_PATH . 770c95c1d6STakashi Sakamoto #undef TRACE_INCLUDE_FILE 780c95c1d6STakashi Sakamoto #define TRACE_INCLUDE_FILE amdtp-stream-trace 790c95c1d6STakashi Sakamoto #include <trace/define_trace.h> 80