diff --git a/src/audio/component.c b/src/audio/component.c index 05ae5060a49f..4f617f6ddc04 100644 --- a/src/audio/component.c +++ b/src/audio/component.c @@ -234,3 +234,27 @@ void audio_stream_copy_to_linear(const struct audio_stream __sparse_cache *sourc snk += bytes_copied; } } + +/** See comp_ops::copy */ +int comp_copy(struct comp_dev *dev) +{ + int ret = 0; + + assert(dev->drv->ops.copy); + + /* copy only if we are the owner of the component */ + if (cpu_is_me(dev->ipc_config.core)) { +#if CONFIG_PERFORMANCE_COUNTERS + perf_cnt_init(&dev->pcd); +#endif + + ret = dev->drv->ops.copy(dev); + +#if CONFIG_PERFORMANCE_COUNTERS + perf_cnt_stamp(&dev->pcd, comp_perf_info, dev); + perf_cnt_average(&dev->pcd, comp_perf_avg_info, dev); +#endif + } + + return ret; +} diff --git a/src/audio/mixer/mixer.c b/src/audio/mixer/mixer.c index a0664e07b55b..345a4648e731 100644 --- a/src/audio/mixer/mixer.c +++ b/src/audio/mixer/mixer.c @@ -470,7 +470,10 @@ static const struct comp_driver comp_mixer = { }, }; -static SHARED_DATA struct comp_driver_info comp_mixer_info = { +#ifndef UNIT_TEST +static +#endif +SHARED_DATA struct comp_driver_info comp_mixer_info = { .drv = &comp_mixer, }; diff --git a/src/include/sof/audio/component_ext.h b/src/include/sof/audio/component_ext.h index 8dba1d7df043..42dea60f9548 100644 --- a/src/include/sof/audio/component_ext.h +++ b/src/include/sof/audio/component_ext.h @@ -171,35 +171,8 @@ static inline int comp_prepare(struct comp_dev *dev) return 0; } -/** See comp_ops::copy */ -static inline int comp_copy(struct comp_dev *dev) -{ - int ret = 0; - - assert(dev->drv->ops.copy); - - /* copy only if we are the owner of the component */ - if (cpu_is_me(dev->ipc_config.core)) { -/* BugLink: https://github.com/zephyrproject-rtos/zephyr/issues/43786 - * TODO: Remove this once the bug gets fixed. - */ -#ifndef __ZEPHYR__ - perf_cnt_init(&dev->pcd); -#endif - - ret = dev->drv->ops.copy(dev); +int comp_copy(struct comp_dev *dev); -/* BugLink: https://github.com/zephyrproject-rtos/zephyr/issues/43786 - * TODO: Remove this once the bug gets fixed. - */ -#ifndef __ZEPHYR__ - perf_cnt_stamp(&dev->pcd, comp_perf_info, dev); - perf_cnt_average(&dev->pcd, comp_perf_avg_info, dev); -#endif - } - - return ret; -} /** See comp_ops::get_attribute */ static inline int comp_get_attribute(struct comp_dev *dev, uint32_t type, diff --git a/src/include/sof/audio/mixer.h b/src/include/sof/audio/mixer.h index 752453867fa9..455c4884c0aa 100644 --- a/src/include/sof/audio/mixer.h +++ b/src/include/sof/audio/mixer.h @@ -17,6 +17,7 @@ #ifdef UNIT_TEST void sys_comp_mixer_init(void); +extern struct comp_driver_info comp_mixer_info; #endif #define MIXER_GENERIC diff --git a/test/cmocka/src/audio/buffer/CMakeLists.txt b/test/cmocka/src/audio/buffer/CMakeLists.txt index d6419f3cb2fc..403b5f7d8498 100644 --- a/test/cmocka/src/audio/buffer/CMakeLists.txt +++ b/test/cmocka/src/audio/buffer/CMakeLists.txt @@ -12,6 +12,7 @@ cmocka_test(buffer_copy ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(buffer_new @@ -27,6 +28,7 @@ cmocka_test(buffer_new ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(buffer_wrap @@ -42,6 +44,7 @@ cmocka_test(buffer_wrap ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(buffer_write @@ -57,4 +60,5 @@ cmocka_test(buffer_write ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) diff --git a/test/cmocka/src/audio/mixer/CMakeLists.txt b/test/cmocka/src/audio/mixer/CMakeLists.txt index 1de8de608b12..55f0129ab9a1 100644 --- a/test/cmocka/src/audio/mixer/CMakeLists.txt +++ b/test/cmocka/src/audio/mixer/CMakeLists.txt @@ -3,6 +3,7 @@ cmocka_test(mixer mixer_test.c comp_mock.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ${PROJECT_SOURCE_DIR}/test/cmocka/src/notifier_mocks.c ${PROJECT_SOURCE_DIR}/src/audio/buffer.c ${PROJECT_SOURCE_DIR}/src/audio/mixer/mixer.c diff --git a/test/cmocka/src/audio/mixer/comp_mock.c b/test/cmocka/src/audio/mixer/comp_mock.c index 75cb747de363..c3aab9544a23 100644 --- a/test/cmocka/src/audio/mixer/comp_mock.c +++ b/test/cmocka/src/audio/mixer/comp_mock.c @@ -79,6 +79,6 @@ static struct comp_driver_info comp_mock_info = { void sys_comp_mock_init(void) { - comp_register(&comp_mock_info); + mock_comp_register(&comp_mock_info); } diff --git a/test/cmocka/src/audio/mixer/comp_mock.h b/test/cmocka/src/audio/mixer/comp_mock.h index 63e78e16009a..9a83c5a84c24 100644 --- a/test/cmocka/src/audio/mixer/comp_mock.h +++ b/test/cmocka/src/audio/mixer/comp_mock.h @@ -11,3 +11,4 @@ #define SOF_COMP_MOCK ((uint32_t)-1) void sys_comp_mock_init(void); +int mock_comp_register(struct comp_driver_info *info); diff --git a/test/cmocka/src/audio/mixer/mixer_test.c b/test/cmocka/src/audio/mixer/mixer_test.c index 38c994132c2b..877fb9237dfc 100644 --- a/test/cmocka/src/audio/mixer/mixer_test.c +++ b/test/cmocka/src/audio/mixer/mixer_test.c @@ -39,7 +39,7 @@ struct comp_dev *post_mixer_comp; struct comp_buffer *post_mixer_buf; /* Mocking comp_register here so we can register our components properly */ -int comp_register(struct comp_driver_info *info) +int mock_comp_register(struct comp_driver_info *info) { void *dst; int err; @@ -63,6 +63,12 @@ int comp_register(struct comp_driver_info *info) return err; } +static void ut_comp_mixer_init(void) +{ + mock_comp_register(platform_shared_get(&comp_mixer_info, + sizeof(comp_mixer_info))); +} + struct source { struct comp_dev *comp; struct comp_buffer *buf; @@ -180,7 +186,7 @@ static void activate_periph_comps(struct mix_test_case *tc) static int test_group_setup(void **state) { - sys_comp_mixer_init(); + ut_comp_mixer_init(); sys_comp_mock_init(); return 0; diff --git a/test/cmocka/src/audio/pipeline/CMakeLists.txt b/test/cmocka/src/audio/pipeline/CMakeLists.txt index f636407f51f9..f1cff35f5ffa 100644 --- a/test/cmocka/src/audio/pipeline/CMakeLists.txt +++ b/test/cmocka/src/audio/pipeline/CMakeLists.txt @@ -19,6 +19,7 @@ endif() cmocka_test(pipeline_new pipeline_new.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc3/helper.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-common.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-helper.c @@ -29,11 +30,13 @@ cmocka_test(pipeline_new ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(pipeline_connect_upstream pipeline_connect_upstream.c pipeline_connection_mocks.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc3/helper.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-common.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-helper.c @@ -44,11 +47,13 @@ cmocka_test(pipeline_connect_upstream ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(pipeline_free pipeline_free.c pipeline_connection_mocks.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc3/helper.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-common.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-helper.c @@ -59,4 +64,5 @@ cmocka_test(pipeline_free ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) diff --git a/test/cmocka/src/audio/selector/CMakeLists.txt b/test/cmocka/src/audio/selector/CMakeLists.txt index e173216a6e3b..301373c37689 100644 --- a/test/cmocka/src/audio/selector/CMakeLists.txt +++ b/test/cmocka/src/audio/selector/CMakeLists.txt @@ -25,6 +25,7 @@ add_library(audio_for_selector STATIC ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) sof_append_relative_path_definitions(audio_for_selector) diff --git a/test/cmocka/src/audio/volume/CMakeLists.txt b/test/cmocka/src/audio/volume/CMakeLists.txt index 8e25f1685ad8..ecd8ae6f8701 100644 --- a/test/cmocka/src/audio/volume/CMakeLists.txt +++ b/test/cmocka/src/audio/volume/CMakeLists.txt @@ -27,6 +27,7 @@ add_library(audio_for_volume STATIC ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) sof_append_relative_path_definitions(audio_for_volume) diff --git a/test/cmocka/src/math/fft/CMakeLists.txt b/test/cmocka/src/math/fft/CMakeLists.txt index 3786223ab244..b9e2b1cf076f 100644 --- a/test/cmocka/src/math/fft/CMakeLists.txt +++ b/test/cmocka/src/math/fft/CMakeLists.txt @@ -16,4 +16,5 @@ cmocka_test(fft ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c ${PROJECT_SOURCE_DIR}/test/cmocka/src/common_mocks.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c )