diff options
Diffstat (limited to 'sound/firewire')
-rw-r--r-- | sound/firewire/amdtp-stream-trace.h | 28 | ||||
-rw-r--r-- | sound/firewire/amdtp-stream.c | 14 |
2 files changed, 28 insertions, 14 deletions
diff --git a/sound/firewire/amdtp-stream-trace.h b/sound/firewire/amdtp-stream-trace.h index 425d1d7..1622579 100644 --- a/sound/firewire/amdtp-stream-trace.h +++ b/sound/firewire/amdtp-stream-trace.h @@ -14,8 +14,8 @@ #include <linux/tracepoint.h> TRACE_EVENT(in_packet, - TP_PROTO(const struct amdtp_stream *s, u32 cycles, u32 cip_header[2], unsigned int payload_quadlets), - TP_ARGS(s, cycles, cip_header, payload_quadlets), + TP_PROTO(const struct amdtp_stream *s, u32 cycles, u32 cip_header[2], unsigned int payload_quadlets, unsigned int index), + TP_ARGS(s, cycles, cip_header, payload_quadlets, index), TP_STRUCT__entry( __field(unsigned int, second) __field(unsigned int, cycle) @@ -25,6 +25,8 @@ TRACE_EVENT(in_packet, __field(u32, cip_header0) __field(u32, cip_header1) __field(unsigned int, payload_quadlets) + __field(unsigned int, packet_index) + __field(bool, irq) __field(unsigned int, index) ), TP_fast_assign( @@ -36,10 +38,12 @@ TRACE_EVENT(in_packet, __entry->cip_header0 = cip_header[0]; __entry->cip_header1 = cip_header[1]; __entry->payload_quadlets = payload_quadlets; - __entry->index = s->packet_index; + __entry->packet_index = s->packet_index; + __entry->irq = in_interrupt(); + __entry->index = index; ), TP_printk( - "%02u %04u %04x %04x %02d %08x %08x %03u %02u", + "%02u %04u %04x %04x %02d %08x %08x %03u %02u %01u %02u", __entry->second, __entry->cycle, __entry->src, @@ -48,12 +52,14 @@ TRACE_EVENT(in_packet, __entry->cip_header0, __entry->cip_header1, __entry->payload_quadlets, + __entry->packet_index, + __entry->irq, __entry->index) ); TRACE_EVENT(out_packet, - TP_PROTO(const struct amdtp_stream *s, u32 cycles, __be32 *cip_header, unsigned int payload_length), - TP_ARGS(s, cycles, cip_header, payload_length), + TP_PROTO(const struct amdtp_stream *s, u32 cycles, __be32 *cip_header, unsigned int payload_length, unsigned int index), + TP_ARGS(s, cycles, cip_header, payload_length, index), TP_STRUCT__entry( __field(unsigned int, second) __field(unsigned int, cycle) @@ -63,6 +69,8 @@ TRACE_EVENT(out_packet, __field(u32, cip_header0) __field(u32, cip_header1) __field(unsigned int, payload_quadlets) + __field(unsigned int, packet_index) + __field(bool, irq) __field(unsigned int, index) ), TP_fast_assign( @@ -74,10 +82,12 @@ TRACE_EVENT(out_packet, __entry->cip_header0 = be32_to_cpu(cip_header[0]); __entry->cip_header1 = be32_to_cpu(cip_header[1]); __entry->payload_quadlets = payload_length / 4; - __entry->index = s->packet_index; + __entry->packet_index = s->packet_index; + __entry->irq = in_interrupt(); + __entry->index = index; ), TP_printk( - "%02u %04u %04x %04x %02d %08x %08x %03u %02u", + "%02u %04u %04x %04x %02d %08x %08x %03u %02u %01u %02u", __entry->second, __entry->cycle, __entry->src, @@ -86,6 +96,8 @@ TRACE_EVENT(out_packet, __entry->cip_header0, __entry->cip_header1, __entry->payload_quadlets, + __entry->packet_index, + __entry->irq, __entry->index) ); diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c index 024ab7f..bf10ca3 100644 --- a/sound/firewire/amdtp-stream.c +++ b/sound/firewire/amdtp-stream.c @@ -409,7 +409,8 @@ static inline int queue_in_packet(struct amdtp_stream *s) amdtp_stream_get_max_payload(s), false); } -static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle) +static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle, + unsigned int index) { __be32 *buffer; unsigned int syt; @@ -434,7 +435,7 @@ static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle) s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff; payload_length = 8 + data_blocks * 4 * s->data_block_quadlets; - trace_out_packet(s, cycle, buffer, payload_length); + trace_out_packet(s, cycle, buffer, payload_length, index); if (queue_out_packet(s, payload_length, false) < 0) return -EIO; @@ -448,7 +449,8 @@ static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle) } static int handle_in_packet(struct amdtp_stream *s, - unsigned int payload_quadlets, unsigned int cycle) + unsigned int payload_quadlets, unsigned int cycle, + unsigned int index) { __be32 *buffer; u32 cip_header[2]; @@ -463,7 +465,7 @@ static int handle_in_packet(struct amdtp_stream *s, cip_header[0] = be32_to_cpu(buffer[0]); cip_header[1] = be32_to_cpu(buffer[1]); - trace_in_packet(s, cycle, cip_header, payload_quadlets); + trace_in_packet(s, cycle, cip_header, payload_quadlets, index); /* * This module supports 'Two-quadlet CIP header with SYT field'. @@ -602,7 +604,7 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp, for (i = 0; i < packets; ++i) { cycle = increment_cycle_count(cycle, 1); - if (handle_out_packet(s, cycle) < 0) { + if (handle_out_packet(s, cycle, i) < 0) { s->packet_index = -1; amdtp_stream_pcm_abort(s); return; @@ -649,7 +651,7 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp, break; } - if (handle_in_packet(s, payload_quadlets, cycle) < 0) + if (handle_in_packet(s, payload_quadlets, cycle, i) < 0) break; } |