Skip to content

Commit a38d6c3

Browse files
committed
audio: pcm_converter: make global tables available to user-space
The pcm_converter depends on a set of global function tables to set up correct conversion functions. These objects need to be made available to user-space threads, so that pcm_converter can be also run in user-space. No impact to kernel-space use of pcm_converter. Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
1 parent cfa5f02 commit a38d6c3

3 files changed

Lines changed: 13 additions & 10 deletions

File tree

src/audio/pcm_converter/pcm_converter_generic.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <sof/common.h>
2828
#include <sof/compiler_attributes.h>
2929
#include <ipc/stream.h>
30+
#include <rtos/userspace_helper.h>
3031

3132
#include <stddef.h>
3233
#include <stdint.h>
@@ -669,7 +670,7 @@ static int pcm_convert_f_to_s32(const struct audio_stream *source,
669670
}
670671
#endif /* CONFIG_PCM_CONVERTER_FORMAT_FLOAT && CONFIG_PCM_CONVERTER_FORMAT_S32LE */
671672

672-
const struct pcm_func_map pcm_func_map[] = {
673+
APP_TASK_DATA const struct pcm_func_map pcm_func_map[] = {
673674
#if CONFIG_PCM_CONVERTER_FORMAT_U8
674675
{ SOF_IPC_FRAME_U8, SOF_IPC_FRAME_U8, just_copy },
675676
#endif /* CONFIG_PCM_CONVERTER_FORMAT_U8 */
@@ -732,7 +733,7 @@ const struct pcm_func_map pcm_func_map[] = {
732733
#endif /* CONFIG_PCM_CONVERTER_FORMAT_FLOAT && CONFIG_PCM_CONVERTER_FORMAT_S32LE */
733734
};
734735

735-
const size_t pcm_func_count = ARRAY_SIZE(pcm_func_map);
736+
APP_TASK_DATA const size_t pcm_func_count = ARRAY_SIZE(pcm_func_map);
736737

737738
#if CONFIG_PCM_CONVERTER_FORMAT_S16_C16_AND_S16_C32
738739
static int pcm_convert_s16_c16_to_s16_c32(const struct audio_stream *source,
@@ -1020,7 +1021,7 @@ static int pcm_convert_s24_c32_to_s24_c24_link_gtw(const struct audio_stream *so
10201021

10211022
#endif
10221023

1023-
const struct pcm_func_vc_map pcm_func_vc_map[] = {
1024+
APP_TASK_DATA const struct pcm_func_vc_map pcm_func_vc_map[] = {
10241025
#if CONFIG_PCM_CONVERTER_FORMAT_S16_C16_AND_S16_C32
10251026
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S16_LE,
10261027
pcm_convert_s16_c16_to_s16_c32 },
@@ -1101,6 +1102,6 @@ const struct pcm_func_vc_map pcm_func_vc_map[] = {
11011102
#endif
11021103
};
11031104

1104-
const size_t pcm_func_vc_count = ARRAY_SIZE(pcm_func_vc_map);
1105+
APP_TASK_DATA const size_t pcm_func_vc_count = ARRAY_SIZE(pcm_func_vc_map);
11051106

11061107
#endif

src/audio/pcm_converter/pcm_converter_hifi3.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <sof/audio/buffer.h>
1919
#include <sof/common.h>
2020
#include <sof/compiler_attributes.h>
21+
#include <rtos/userspace_helper.h>
2122
#include <ipc/stream.h>
2223
#include <xtensa/tie/xt_hifi3.h>
2324

@@ -764,7 +765,7 @@ static int pcm_convert_f_to_s32(const struct audio_stream *source,
764765
#endif /* CONFIG_PCM_CONVERTER_FORMAT_FLOAT && CONFIG_PCM_CONVERTER_FORMAT_32LE */
765766
#endif /* XCHAL_HAVE_FP */
766767

767-
const struct pcm_func_map pcm_func_map[] = {
768+
APP_TASK_DATA const struct pcm_func_map pcm_func_map[] = {
768769
#if CONFIG_PCM_CONVERTER_FORMAT_S16LE
769770
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, just_copy },
770771
#endif /* CONFIG_PCM_CONVERTER_FORMAT_S16LE */
@@ -807,7 +808,7 @@ const struct pcm_func_map pcm_func_map[] = {
807808
#endif /* CONFIG_PCM_CONVERTER_FORMAT_FLOAT && CONFIG_PCM_CONVERTER_FORMAT_S32LE */
808809
#endif /* XCHAL_HAVE_FP */
809810
};
810-
const size_t pcm_func_count = ARRAY_SIZE(pcm_func_map);
811+
APP_TASK_DATA const size_t pcm_func_count = ARRAY_SIZE(pcm_func_map);
811812

812813
#if CONFIG_PCM_CONVERTER_FORMAT_S16_C16_AND_S16_C32
813814
static int pcm_convert_s16_c16_to_s16_c32(const struct audio_stream *source,
@@ -1206,7 +1207,7 @@ static int pcm_convert_s24_c32_to_s24_c24(const struct audio_stream *source,
12061207
*/
12071208
#endif
12081209

1209-
const struct pcm_func_vc_map pcm_func_vc_map[] = {
1210+
APP_TASK_DATA const struct pcm_func_vc_map pcm_func_vc_map[] = {
12101211
#if CONFIG_PCM_CONVERTER_FORMAT_S16_C16_AND_S16_C32
12111212
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S16_LE,
12121213
pcm_convert_s16_c16_to_s16_c32 },
@@ -1283,6 +1284,6 @@ const struct pcm_func_vc_map pcm_func_vc_map[] = {
12831284
#endif
12841285
};
12851286

1286-
const size_t pcm_func_vc_count = ARRAY_SIZE(pcm_func_vc_map);
1287+
APP_TASK_DATA const size_t pcm_func_vc_count = ARRAY_SIZE(pcm_func_vc_map);
12871288

12881289
#endif

src/audio/pcm_converter/pcm_remap.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <sof/audio/pcm_converter.h>
77
#include <sof/audio/audio_stream.h>
8+
#include <rtos/userspace_helper.h>
89

910
static void mute_channel_c16(struct audio_stream *stream, int channel, int frames)
1011
{
@@ -423,7 +424,7 @@ static int remap_c16_to_c32_no_shift(const struct audio_stream *source, uint32_t
423424
/* Unfortunately, all these nice "if"s were commented out to suppress
424425
* CI "defined but not used" warnings.
425426
*/
426-
const struct pcm_func_map pcm_remap_func_map[] = {
427+
APP_TASK_DATA const struct pcm_func_map pcm_remap_func_map[] = {
427428
/* #if CONFIG_PCM_CONVERTER_FORMAT_S16LE */
428429
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, remap_c16},
429430
/* #endif */
@@ -474,4 +475,4 @@ const struct pcm_func_map pcm_remap_func_map[] = {
474475
/* #endif */
475476
};
476477

477-
const size_t pcm_remap_func_count = ARRAY_SIZE(pcm_remap_func_map);
478+
APP_TASK_DATA const size_t pcm_remap_func_count = ARRAY_SIZE(pcm_remap_func_map);

0 commit comments

Comments
 (0)