[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