/* SPDX-License-Identifier: BSD-3-Clause */ /* * Copyright(c) 2023 Intel Corporation. All rights reserved. * * Author: Marcin Rajwa * Adrian Warecki */ #ifndef __MODULE_MODULE_GENERIC__ #define __MODULE_MODULE_GENERIC__ #include #include #include #include "interface.h" #include "../ipc4/base-config.h" #define module_get_private_data(mod) ((mod)->priv.private) #define module_set_private_data(mod, data) ((mod)->priv.private = data) /** * \struct module_config * \brief Module config container, used for both config types. */ struct module_config { size_t size; /**< Specifies the size of whole config */ bool avail; /**< Marks config as available to use.*/ void *data; /**< tlv config, a pointer to memory where config is stored. */ const void *init_data; /**< Initial IPC configuration. */ #if CONFIG_IPC_MAJOR_4 struct ipc4_base_module_cfg base_cfg; #endif }; /** private, runtime module data */ struct module_data { void *private; /**< self object, memory tables etc here */ struct module_config cfg; /**< module configuration data */ #ifdef SOF_MODULE_API_PRIVATE enum module_state state; size_t new_cfg_size; /**< size of new module config data */ void *runtime_params; const struct module_interface *ops; /**< module specific operations */ struct module_memory memory; /**< memory allocated by module */ struct module_processing_data mpd; /**< shared data comp <-> module */ void *module_adapter; /**ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP */ struct list_item dp_queue_ll_to_dp_list; struct list_item dp_queue_dp_to_ll_list; }; }; struct comp_buffer *source_comp_buffer; /**< single source component buffer */ struct comp_buffer *sink_comp_buffer; /**< single sink compoonent buffer */ /* module-specific flags for comp_verify_params() */ uint32_t verify_params_flags; /* flag to indicate module does not pause */ bool no_pause; /* * flag to indicate that the sink buffer writeback should be skipped. It will be handled * in the module's process callback */ bool skip_sink_buffer_writeback; /* * flag to indicate that the source buffer invalidate should be skipped. It will be handled * in the module's process callback */ bool skip_src_buffer_invalidate; /* * True for module with one source component buffer and one sink component buffer * to enable reduction of module processing overhead. False if component uses * multiple buffers. */ bool stream_copy_single_to_single; /* flag to insure that module is loadable */ bool is_native_sof; /* pointer to system services for loadable modules */ uint32_t *sys_service; /* total processed data after stream started */ uint64_t total_data_consumed; uint64_t total_data_produced; /* max source/sinks supported by the module */ uint32_t max_sources; uint32_t max_sinks; #endif /* SOF_MODULE_PRIVATE */ }; #endif /* __MODULE_MODULE_GENERIC__ */