1*0c95c1d6STakashi Sakamoto /* 2*0c95c1d6STakashi Sakamoto * amdtp-stream-trace.h - tracepoint definitions to dump a part of packet data 3*0c95c1d6STakashi Sakamoto * 4*0c95c1d6STakashi Sakamoto * Copyright (c) 2016 Takashi Sakamoto 5*0c95c1d6STakashi Sakamoto * Licensed under the terms of the GNU General Public License, version 2. 6*0c95c1d6STakashi Sakamoto */ 7*0c95c1d6STakashi Sakamoto 8*0c95c1d6STakashi Sakamoto #undef TRACE_SYSTEM 9*0c95c1d6STakashi Sakamoto #define TRACE_SYSTEM snd_firewire_lib 10*0c95c1d6STakashi Sakamoto 11*0c95c1d6STakashi Sakamoto #if !defined(_AMDTP_STREAM_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 12*0c95c1d6STakashi Sakamoto #define _AMDTP_STREAM_TRACE_H 13*0c95c1d6STakashi Sakamoto 14*0c95c1d6STakashi Sakamoto #include <linux/tracepoint.h> 15*0c95c1d6STakashi Sakamoto 16*0c95c1d6STakashi Sakamoto TRACE_EVENT(in_packet, 17*0c95c1d6STakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, u32 cip_header[2], unsigned int payload_quadlets), 18*0c95c1d6STakashi Sakamoto TP_ARGS(s, cycles, cip_header, payload_quadlets), 19*0c95c1d6STakashi Sakamoto TP_STRUCT__entry( 20*0c95c1d6STakashi Sakamoto __field(unsigned int, second) 21*0c95c1d6STakashi Sakamoto __field(unsigned int, cycle) 22*0c95c1d6STakashi Sakamoto __field(int, channel) 23*0c95c1d6STakashi Sakamoto __field(int, src) 24*0c95c1d6STakashi Sakamoto __field(int, dest) 25*0c95c1d6STakashi Sakamoto __field(u32, cip_header0) 26*0c95c1d6STakashi Sakamoto __field(u32, cip_header1) 27*0c95c1d6STakashi Sakamoto __field(unsigned int, payload_quadlets) 28*0c95c1d6STakashi Sakamoto __field(unsigned int, index) 29*0c95c1d6STakashi Sakamoto ), 30*0c95c1d6STakashi Sakamoto TP_fast_assign( 31*0c95c1d6STakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 32*0c95c1d6STakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 33*0c95c1d6STakashi Sakamoto __entry->channel = s->context->channel; 34*0c95c1d6STakashi Sakamoto __entry->src = fw_parent_device(s->unit)->node_id; 35*0c95c1d6STakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->card->node_id; 36*0c95c1d6STakashi Sakamoto __entry->cip_header0 = cip_header[0]; 37*0c95c1d6STakashi Sakamoto __entry->cip_header1 = cip_header[1]; 38*0c95c1d6STakashi Sakamoto __entry->payload_quadlets = payload_quadlets; 39*0c95c1d6STakashi Sakamoto __entry->index = s->packet_index; 40*0c95c1d6STakashi Sakamoto ), 41*0c95c1d6STakashi Sakamoto TP_printk( 42*0c95c1d6STakashi Sakamoto "%02u %04u %04x %04x %02d %08x %08x %03u %02u", 43*0c95c1d6STakashi Sakamoto __entry->second, 44*0c95c1d6STakashi Sakamoto __entry->cycle, 45*0c95c1d6STakashi Sakamoto __entry->src, 46*0c95c1d6STakashi Sakamoto __entry->dest, 47*0c95c1d6STakashi Sakamoto __entry->channel, 48*0c95c1d6STakashi Sakamoto __entry->cip_header0, 49*0c95c1d6STakashi Sakamoto __entry->cip_header1, 50*0c95c1d6STakashi Sakamoto __entry->payload_quadlets, 51*0c95c1d6STakashi Sakamoto __entry->index) 52*0c95c1d6STakashi Sakamoto ); 53*0c95c1d6STakashi Sakamoto 54*0c95c1d6STakashi Sakamoto TRACE_EVENT(out_packet, 55*0c95c1d6STakashi Sakamoto TP_PROTO(const struct amdtp_stream *s, u32 cycles, __be32 *cip_header, unsigned int payload_length), 56*0c95c1d6STakashi Sakamoto TP_ARGS(s, cycles, cip_header, payload_length), 57*0c95c1d6STakashi Sakamoto TP_STRUCT__entry( 58*0c95c1d6STakashi Sakamoto __field(unsigned int, second) 59*0c95c1d6STakashi Sakamoto __field(unsigned int, cycle) 60*0c95c1d6STakashi Sakamoto __field(int, channel) 61*0c95c1d6STakashi Sakamoto __field(int, src) 62*0c95c1d6STakashi Sakamoto __field(int, dest) 63*0c95c1d6STakashi Sakamoto __field(u32, cip_header0) 64*0c95c1d6STakashi Sakamoto __field(u32, cip_header1) 65*0c95c1d6STakashi Sakamoto __field(unsigned int, payload_quadlets) 66*0c95c1d6STakashi Sakamoto __field(unsigned int, index) 67*0c95c1d6STakashi Sakamoto ), 68*0c95c1d6STakashi Sakamoto TP_fast_assign( 69*0c95c1d6STakashi Sakamoto __entry->second = cycles / CYCLES_PER_SECOND; 70*0c95c1d6STakashi Sakamoto __entry->cycle = cycles % CYCLES_PER_SECOND; 71*0c95c1d6STakashi Sakamoto __entry->channel = s->context->channel; 72*0c95c1d6STakashi Sakamoto __entry->src = fw_parent_device(s->unit)->card->node_id; 73*0c95c1d6STakashi Sakamoto __entry->dest = fw_parent_device(s->unit)->node_id; 74*0c95c1d6STakashi Sakamoto __entry->cip_header0 = be32_to_cpu(cip_header[0]); 75*0c95c1d6STakashi Sakamoto __entry->cip_header1 = be32_to_cpu(cip_header[1]); 76*0c95c1d6STakashi Sakamoto __entry->payload_quadlets = payload_length / 4; 77*0c95c1d6STakashi Sakamoto __entry->index = s->packet_index; 78*0c95c1d6STakashi Sakamoto ), 79*0c95c1d6STakashi Sakamoto TP_printk( 80*0c95c1d6STakashi Sakamoto "%02u %04u %04x %04x %02d %08x %08x %03u %02u", 81*0c95c1d6STakashi Sakamoto __entry->second, 82*0c95c1d6STakashi Sakamoto __entry->cycle, 83*0c95c1d6STakashi Sakamoto __entry->src, 84*0c95c1d6STakashi Sakamoto __entry->dest, 85*0c95c1d6STakashi Sakamoto __entry->channel, 86*0c95c1d6STakashi Sakamoto __entry->cip_header0, 87*0c95c1d6STakashi Sakamoto __entry->cip_header1, 88*0c95c1d6STakashi Sakamoto __entry->payload_quadlets, 89*0c95c1d6STakashi Sakamoto __entry->index) 90*0c95c1d6STakashi Sakamoto ); 91*0c95c1d6STakashi Sakamoto 92*0c95c1d6STakashi Sakamoto #endif 93*0c95c1d6STakashi Sakamoto 94*0c95c1d6STakashi Sakamoto #undef TRACE_INCLUDE_PATH 95*0c95c1d6STakashi Sakamoto #define TRACE_INCLUDE_PATH . 96*0c95c1d6STakashi Sakamoto #undef TRACE_INCLUDE_FILE 97*0c95c1d6STakashi Sakamoto #define TRACE_INCLUDE_FILE amdtp-stream-trace 98*0c95c1d6STakashi Sakamoto #include <trace/define_trace.h> 99