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] 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 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel