Skip to content

Commit b164d2f

Browse files
takaswietiwai
authored andcommitted
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 <[email protected]> Signed-off-by: Takashi Iwai <[email protected]>
1 parent 1f9d3d9 commit b164d2f

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

sound/firewire/amdtp-stream-trace.h

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,94 @@ TRACE_EVENT(out_packet,
101101
__entry->index)
102102
);
103103

104+
TRACE_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+
148+
TRACE_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+
104192
#endif
105193

106194
#undef TRACE_INCLUDE_PATH

sound/firewire/amdtp-stream.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,10 @@ static int handle_out_packet_without_header(struct amdtp_stream *s,
479479
s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff;
480480

481481
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+
482486
if (queue_out_packet(s, payload_length) < 0)
483487
return -EIO;
484488

@@ -617,6 +621,10 @@ static int handle_in_packet_without_header(struct amdtp_stream *s,
617621

618622
buffer = s->buffer.packets[s->packet_index].buffer;
619623
data_blocks = payload_quadlets / s->data_block_quadlets;
624+
625+
trace_in_packet_without_header(s, cycle, payload_quadlets, data_blocks,
626+
index);
627+
620628
pcm_frames = s->process_data_blocks(s, buffer, data_blocks, NULL);
621629
s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff;
622630

0 commit comments

Comments
 (0)