[alsa-devel] [PATCH 0/3] ALSA: firewire-lib/firewire-motu: add tracepoints for IEC 61883-1/6 variants
Takashi Iwai
tiwai at suse.de
Tue Apr 11 11:49:51 CEST 2017
On Sun, 09 Apr 2017 14:33:26 +0200,
Takashi Sakamoto wrote:
>
> Hi,
>
> ALSA IEC 61883-1/6 engine already supports some tracepoints to probe events
> for a part of parameters about incoming/outgoing packets. The main purpose
> of the tracepoints to assists users/developers for further work to the
> engine. For example, users can gather the parameters and developers use it
> to investigate quirks of actual units. Actually, as I reported [0], some
> drivers in ALSA firewire stack seems to have timestamping issue which have
> never resolved by any Free Software [1], and further investigation is
> required for users/developers to improves the engine.
>
> My recent works add support for some variants of IEC 61883-1/6. Existent
> tracepoints are unavailable for a part of the variants. Furthermore,
> in a part of the variants, presentation timestamp is transferred by
> a different way against IEC 61883-1/6. It's better to trace packet
> parameters for the variants, as well as for compliant protocols to
> IEC 61883-1/6.
>
> This patchset adds some tracepoints for the purpose, mainly for RME
> Fireface series and MOTU FireWire series. Below code/command is a sample to
> work with perf(1) for tracepoints on ALSA driver for MOTU FireWire series,
> added at third patch. The final command outputs contents of data chunks for
> message from units. Please install or build perf command with python 2
> support, in advance.
>
> $ cat ./motu.py
> import os
> import sys
>
> sys.path.append(os.environ['PERF_EXEC_PATH'] + \
> '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
>
> from perf_trace_context import *
> from Core import *
>
> # For a case that several MOTU FireWire units on the same bus.
> cycles = {}
>
> def snd_firewire_lib__in_packet(name, context, cpu, secs, nsecs,
> pid, comm, callchain,
> second, cycle, channel, src, dest,
> cip_header0, cip_header1, payload_quadlets,
> packet_index, irq, index):
> global cycles
>
> if src not in cycles:
> cycles[src] = {}
> cycles[src]['sec'] = second
> cycles[src]['cycle'] = cycle
>
> def snd_firewire_motu__in_data_block_message(name, context, cpu, secs, nsecs,
> pid, comm, callchain,
> src, dst, data_blocks, messages):
> global cycles
>
> if src not in cycles:
> return
>
> print('{0} sec {1} cycle'.format(cycles[src]['sec'], cycles[src]['cycle']))
> for i in range(data_blocks):
> offset = i * 8
> msg = messages[offset:offset + 8]
> print(' {0}: {1[5]:02x}{1[4]:02x}{1[3]:02x}{1[2]:02x}{1[1]:02x}{1[0]:02x}'.format(i, msg))
> $ ~/linux.git/tools/perf/perf record -a -e snd_firewire_motu:in_data_block_message -e snd_firewire_lib:in_packet
> ^C
> $ PERF_EXEC_PATH=~/linux.git/tools/perf/ ~/linux.git/tools/perf/perf script -s ./motu.py
> ...
> 7 sec 7999 cycle
> 0: 000000805854
> 1: 0000008050fc
> 2: 0000808050a4
> 3: 00003f80504c
> 4: 0000008048f4
> 5: 00000080489c
> 6: 000080804844
> 7: 00003f8040ec
> 0 sec 0 cycle
> 0 sec 1 cycle
> 0: 000000804094
> 1: 0000008050fc
> 2: 0000808050a4
> 3: 00003f80504c
> 4: 0000008048f4
> 5: 00000080489c
> 6: 000080804844
> 7: 00003f8058ac
> 0 sec 2 cycle
> 0: 000000805854
> 1: 0000008050fc
> 2: 0000808050a4
> 3: 00003f80504c
> 4: 0000008048f4
> 5: 00000080605c
> 6: 000080806004
> 7: 00003f8058ac
> ...
>
> [0] [alsa-devel] Dice packet sequence quirk and ALSA firewire stack in Linux 4.6
> http://mailman.alsa-project.org/pipermail/alsa-devel/2016-May/107715.html
> [1] This is not resolved in FFADO, user space library to drive the units, too.
> Some workarounds are applied to the library, but it can not work well depending
> on units and protocols.
>
> Takashi Sakamoto (3):
> ALSA: firewire_lib: add tracepoints for packets without CIP headers
> ALSA: firewire-motu: add tracepoints for SPH in IEC 61883-1 fashion
> ALSA: firewire-motu: add tracepoints for messages for unique protocol
Applied all three patches now. Thanks.
Takashi
More information about the Alsa-devel
mailing list