This time the target is to make the demuxer more modular so that it is
not coupled with file reading operations and it is easy to use
alsa-lib directly.
Signed-off-by: Jyri Sarha <jyri.sarha@intel.com>
The allocated packet should accommodate the header, the data, and the
checksum. The header size was missing from the condition from the
beginning, even if its there in realloc parameter. The bug should be
harmless waste of cycles thou.
Signed-off-by: Jyri Sarha <jyri.sarha@intel.com>
The sync_word_at() only checks for two things, if the len parameter is
greater than sizeof(uint32_t) and if the memory pointed p parameter
holds PROBE_EXTRACT_SYNC_WORD value. Now that the available bytes is
checked just before sync_word_at() call, the whole function starts to
look a bit pointless.
Signed-off-by: Jyri Sarha <jyri.sarha@intel.com>
Drop IPC3 probe DMA framing and use IPC4 framing for IPC3 mode
too. This change simplifies the code quite a bit. After this change
both the SOF firmware and sof-probe demux tool should be updated at
the same time.
Signed-off-by: Jyri Sarha <jyri.sarha@intel.com>
No functional runtime change, but changes to rtos partitioning and the
layout of headers .
This patch creates RTOS specifc header paths and updates spinlock.h
and kernel.h to show the new usage. Other headers will incrementally follow.
It reuses the current zephyr topleve directory and creates a new
toplevel xtos directory for xtos specific files.
Due to the mixing of RTOS, driver and library headers at the top level include
directory it was necessary to create rtos specific header directories i.e.
src/include/rtos-xtos
src/include/rtos-zephyr
These RTOS include directories will eventually contain RTOS specific headers
whilst common logic and structures will be placed in non RTOS directories.
This will also mean
"#include <sof/spinlock.h>"
will become
"#include <rtos/spinlock.h>"
and will allow easier visualisation of where and why RTOS headers are being used.
This will help to eliminate cross usage of headers between RTOSes.
Subsequqnt patches will move more headers and rtos specific wrppaer
source files into rtos specific locations.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Identify non-audio probe streams and write them out with ".bin"
extension and without the RIFF WAVE header.
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Modify code to correctly handle probe streams where sync word
can occur at any byte boundary, and where probe packet size may
not be aligned to 32bit word size.
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Without CMP0079 we cannot conditionally include libraries against SOF in
sub directories without seriously restructuring the project. This is
because the old policy requires the link target must be created in the
same folder. This does not work well from a configuration standpoint for
3P audio libraries trying to keep their config in src/audio/*. Rather
than enable the policy, lets simply upgrade since 3.13 is widely
available.
With this upgrade we can also remove the two version dependent checks at
the top of our scripts.
Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
you need to use a temp var always with realloc, otherwise you through
away your pointer to your memory (which is still valid) in the event of
realloc failing.
Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
following commit fixes a bug but to do the fix we need to allow
ourselves more room to add ifs, so lets pull out this function
Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
This reverts and replaces commit 2765b22049 ("probe-app: assume probe
packet aligned"). That commit applied a __builtin_assume_aligned(4) to
every pointer assignment of the following type:
uint32_t *ptr = struct probe_data_packet *packet;
Instead of using __builtin_assume_aligned(4) every time a
probe_data_packet is used like this, the probe_data_packet type
definition is now 32 bits aligned in only one place thanks to (packed,
aligned(4)).
struct probe_data_packet is made entirely of uint32_t members. It
is (packed) to avoid a 64 bits compiler hypothetically padding and
aligning these 32 bits members to 64 bits. However, (packed) alone is
roughly equivalent to aligned(1) (neither is part of the C standard)
which causes some gcc versions to warn about this:
sof/tools/probes/probes_main.c:228:5: error: converting a packed
‘struct probe_data_packet’ pointer (alignment 1) to a ‘uint32_t’
{aka ‘unsigned int’} pointer (alignment 4) may result in an
unaligned pointer value [-Werror=address-of-packed-member]
228 | w_ptr = (uint32_t *)packet;
| ^~~~~
Unlike "assuming" with __builtin_assume_aligned, (packed, aligned(4))
makes sure probe_data_packet are _actually_ 4 bytes aligned. As a
demontration, it stops the following _Static_assert() from failing:
modified src/probe/probe.c
@ -64,9 +64,12 @ struct probe_pdata {
struct probe_dma_ext ext_dma;
struct probe_dma_ext inject_dma[CONFIG_PROBE_DMA_MAX];
struct probe_point probe_points[CONFIG_PROBE_POINTS_MAX];
+ uint8_t dummy;
struct probe_data_packet header; // aligned(4)?
struct task dmap_work;
};
+_Static_assert(offsetof(struct probe_pdata, header) % 4 == 0 ,
+ "probe_data_packet is not 4 aligned");
In addition to gcc version 8 and 9, I tested and confirmed with
_Static_assert and pahole that the same attributes behave the same with
clang 9.0.1-2.fc31.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
Thats because probe packet struct is packed and aligned to 1
which will generate a warning (error) with pointer assigning
Signed-off-by: Adrian Bonislawski <adrian.bonislawski@linux.intel.com>
Probes will extract data for several probe points in one stream
with extra headers. This app will read the resulting file,
strip the headers and create wave files for each extracted buffer.
Usage to parse data and create wave files: ./sof-probes -p data.bin
Signed-off-by: Adrian Bonislawski <adrian.bonislawski@linux.intel.com>