aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2017-04-09 08:33:27 -0400
committerTakashi Iwai <tiwai@suse.de>2017-04-11 02:30:43 -0400
commitb164d2fd6e4985e9270755477dde063e6e48461e (patch)
treeaa4f5594376a3aa2bf20c37aa312c3edf3b28340
parent1f9d3d98694b1cef93f99a54e6830e9717616ba6 (diff)
ALSA: firewire_lib: add tracepoints for packets without CIP headers
Unique protocol is used for RME Fireface series. In this protocol, payload format for isochronous packet is not compliant to CIP in IEC 61883-1/6. The packet includes data blocks just with data channels, without headers and any metadata. In previous commits, ALSA IEC 61883-1/6 engine supports this protocol. However, tracepoints are not supported yet, unlike implementation for IEC 61883-1/6 protocol. This commit adds support of tracepoints for the protocol. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/firewire/amdtp-stream-trace.h88
-rw-r--r--sound/firewire/amdtp-stream.c8
2 files changed, 96 insertions, 0 deletions
diff --git a/sound/firewire/amdtp-stream-trace.h b/sound/firewire/amdtp-stream-trace.h
index 850b36e27d0d..ea0d486652c8 100644
--- a/sound/firewire/amdtp-stream-trace.h
+++ b/sound/firewire/amdtp-stream-trace.h
@@ -101,6 +101,94 @@ TRACE_EVENT(out_packet,
101 __entry->index) 101 __entry->index)
102); 102);
103 103
104TRACE_EVENT(in_packet_without_header,
105 TP_PROTO(const struct amdtp_stream *s, u32 cycles, unsigned int payload_quadlets, unsigned int data_blocks, unsigned int index),
106 TP_ARGS(s, cycles, payload_quadlets, data_blocks, index),
107 TP_STRUCT__entry(
108 __field(unsigned int, second)
109 __field(unsigned int, cycle)
110 __field(int, channel)
111 __field(int, src)
112 __field(int, dest)
113 __field(unsigned int, payload_quadlets)
114 __field(unsigned int, data_blocks)
115 __field(unsigned int, data_block_counter)
116 __field(unsigned int, packet_index)
117 __field(unsigned int, irq)
118 __field(unsigned int, index)
119 ),
120 TP_fast_assign(
121 __entry->second = cycles / CYCLES_PER_SECOND;
122 __entry->cycle = cycles % CYCLES_PER_SECOND;
123 __entry->channel = s->context->channel;
124 __entry->src = fw_parent_device(s->unit)->node_id;
125 __entry->dest = fw_parent_device(s->unit)->card->node_id;
126 __entry->payload_quadlets = payload_quadlets;
127 __entry->data_blocks = data_blocks,
128 __entry->data_block_counter = s->data_block_counter,
129 __entry->packet_index = s->packet_index;
130 __entry->irq = !!in_interrupt();
131 __entry->index = index;
132 ),
133 TP_printk(
134 "%02u %04u %04x %04x %02d %03u %3u %3u %02u %01u %02u",
135 __entry->second,
136 __entry->cycle,
137 __entry->src,
138 __entry->dest,
139 __entry->channel,
140 __entry->payload_quadlets,
141 __entry->data_blocks,
142 __entry->data_block_counter,
143 __entry->packet_index,
144 __entry->irq,
145 __entry->index)
146);
147
148TRACE_EVENT(out_packet_without_header,
149 TP_PROTO(const struct amdtp_stream *s, u32 cycles, unsigned int payload_length, unsigned int data_blocks, unsigned int index),
150 TP_ARGS(s, cycles, payload_length, data_blocks, index),
151 TP_STRUCT__entry(
152 __field(unsigned int, second)
153 __field(unsigned int, cycle)
154 __field(int, channel)
155 __field(int, src)
156 __field(int, dest)
157 __field(unsigned int, payload_quadlets)
158 __field(unsigned int, data_blocks)
159 __field(unsigned int, data_block_counter)
160 __field(unsigned int, packet_index)
161 __field(unsigned int, irq)
162 __field(unsigned int, index)
163 ),
164 TP_fast_assign(
165 __entry->second = cycles / CYCLES_PER_SECOND;
166 __entry->cycle = cycles % CYCLES_PER_SECOND;
167 __entry->channel = s->context->channel;
168 __entry->src = fw_parent_device(s->unit)->card->node_id;
169 __entry->dest = fw_parent_device(s->unit)->node_id;
170 __entry->payload_quadlets = payload_length / 4;
171 __entry->data_blocks = data_blocks,
172 __entry->data_blocks = s->data_block_counter,
173 __entry->packet_index = s->packet_index;
174 __entry->irq = !!in_interrupt();
175 __entry->index = index;
176 ),
177 TP_printk(
178 "%02u %04u %04x %04x %02d %03u %02u %03u %02u %01u %02u",
179 __entry->second,
180 __entry->cycle,
181 __entry->src,
182 __entry->dest,
183 __entry->channel,
184 __entry->payload_quadlets,
185 __entry->data_blocks,
186 __entry->data_block_counter,
187 __entry->packet_index,
188 __entry->irq,
189 __entry->index)
190);
191
104#endif 192#endif
105 193
106#undef TRACE_INCLUDE_PATH 194#undef TRACE_INCLUDE_PATH
diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
index a03b37bdc274..f6af8e64c2cd 100644
--- a/sound/firewire/amdtp-stream.c
+++ b/sound/firewire/amdtp-stream.c
@@ -479,6 +479,10 @@ static int handle_out_packet_without_header(struct amdtp_stream *s,
479 s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff; 479 s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff;
480 480
481 payload_length = data_blocks * 4 * s->data_block_quadlets; 481 payload_length = data_blocks * 4 * s->data_block_quadlets;
482
483 trace_out_packet_without_header(s, cycle, payload_length, data_blocks,
484 index);
485
482 if (queue_out_packet(s, payload_length) < 0) 486 if (queue_out_packet(s, payload_length) < 0)
483 return -EIO; 487 return -EIO;
484 488
@@ -617,6 +621,10 @@ static int handle_in_packet_without_header(struct amdtp_stream *s,
617 621
618 buffer = s->buffer.packets[s->packet_index].buffer; 622 buffer = s->buffer.packets[s->packet_index].buffer;
619 data_blocks = payload_quadlets / s->data_block_quadlets; 623 data_blocks = payload_quadlets / s->data_block_quadlets;
624
625 trace_in_packet_without_header(s, cycle, payload_quadlets, data_blocks,
626 index);
627
620 pcm_frames = s->process_data_blocks(s, buffer, data_blocks, NULL); 628 pcm_frames = s->process_data_blocks(s, buffer, data_blocks, NULL);
621 s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff; 629 s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff;
622 630