Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
7358052
(---section submitted PRs START)
kv2019i Mar 23, 2026
2cc0472
schedule: zephyr_ll_user: make the heap accessible from user-space
kv2019i Feb 13, 2026
191f33c
schedule: zephyr_ll_user: make double-mapping conditional
kv2019i May 27, 2026
2f89a5e
zephyr: lib: make sof_heap_alloc/free system calls
kv2019i May 8, 2026
2d1a82c
zephyr: boot_test: add capability to handle negative test
kv2019i May 27, 2026
0d5f1a8
zephyr: test: userspace: add negative tests for sof_heap_alloc()
kv2019i May 27, 2026
f629c90
zephyr: set SOF_USERSPACE_INTERFACE_ALLOC for LL user builds
kv2019i May 26, 2026
79479db
schedule: allocate the scheduler objects with sof_heap_alloc()
kv2019i Feb 26, 2026
96e2fb9
zephyr: wrapper: modify platform_dai_wallclock() for user-space
kv2019i Feb 26, 2026
41a87d9
schedule: add scheduler_init_context()
kv2019i Feb 27, 2026
34430ba
schedule: ll_schedule_domain: add domain_thread_init/free ops
kv2019i Mar 4, 2026
349d85b
schedule: zephyr_ll: implement user/kernel split with init_context()
kv2019i May 25, 2026
2fc6d0f
schedule: zephyr_ll: ISR check is not needed when LL in user-space
kv2019i Mar 31, 2026
662b981
(---section submitted PRs STOP)
kv2019i Mar 23, 2026
21b021d
(---section dai-zephyr START)
kv2019i Feb 19, 2026
d7ab8fa
audio: dai-zephyr: convert spinlock into mutex for properties
kv2019i Feb 17, 2026
5828777
audio: dai-zephyr: migrate to use dai_get_properties_copy()
kv2019i Feb 18, 2026
5cbecfa
dai: zephyr: replace k_mutex with sof_umutex for DAI lock
kv2019i Apr 22, 2026
8f0b98a
(---section dai-zephyr STOP)
kv2019i Feb 19, 2026
db035af
(---section audio module infra START)
kv2019i Mar 3, 2026
48783a9
audio: module_adapter: alloc from LL user heap if LL run in user
kv2019i May 5, 2026
f9ad3ca
(---section schduler changes START)
kv2019i Mar 3, 2026
c3b1bc7
schedule: zephyr_ll: convert pdata->sem into a dynamic object
kv2019i Feb 13, 2026
44e8744
schedule: zephyr_ll: add zephyr_ll_task_free()
kv2019i Feb 26, 2026
26d04c1
schedule: zephyr_ll: add zephyr_ll_grant_access()
kv2019i Feb 26, 2026
61b7477
(---section schduler changes END)
kv2019i Mar 3, 2026
4c365c0
(---section audio-user PRs START)
kv2019i Mar 25, 2026
e81393f
schedule: zephyr_domain: use a different thread name for user LL
kv2019i Mar 24, 2026
860cd9e
WIP: audio: module_adapter: use correct heap when freeing
kv2019i May 5, 2026
5ea7cf2
coherent: disable core debug checks for user-space builds
kv2019i Mar 20, 2026
991fb17
audio: module_adapter: make adapter buffering user-space compatible
kv2019i Mar 24, 2026
09082b7
audio: pipeline: use LL scheduler mutex for userspace pipeline triggers
kv2019i Feb 26, 2026
67ad76c
rtos: umutex.h: add new locking interface
kv2019i May 19, 2026
e97292d
schedule: zephyr_ll: replace k_mutex with sof_umutex for scheduler lock
kv2019i May 28, 2026
34bc297
ipc: ipc-helper: use list_mutex to guard buffer list in userspace LL
kv2019i Feb 13, 2026
b36103a
audio: pipeline: change locking strategy for user LL builds
kv2019i May 29, 2026
370b831
audio: buffer: move dp_heap_user lifecycle to IPC and module adapter
kv2019i May 5, 2026
93cd544
Revert "audio: buffer: move dp_heap_user lifecycle to IPC and module …
kv2019i May 5, 2026
5eff207
audio: host-zepher: add HOST_DMA_IPC_POSITION_UPDATES Kconfig
kv2019i May 21, 2026
cb28d3d
audio: copier: avoid IRQ lock/unlock in chmap code
kv2019i Mar 31, 2026
7998e28
audio: module_adapter: avoid IRQ lock/unlock in prepare()
kv2019i Mar 31, 2026
43f403f
audio: module_adapter: make data_blob compatible with user-space
kv2019i Apr 14, 2026
e6c1d5f
audio: module-adapter: make generic.c user-space compatible
kv2019i Apr 16, 2026
980bb20
audio: module_adapter: use module context for allocations
kv2019i May 8, 2026
4158c56
audio: module: generic: use module context for blob allocations
kv2019i May 8, 2026
bf41778
audio: make comp_drivers_get() accessible from user-space
kv2019i Apr 15, 2026
5186b00
dai: turn dai_get_device() into a syscall
kv2019i May 26, 2026
4cf9114
audio: chain_dma: add user-space memory and scheduling support
kv2019i Apr 21, 2026
1e2c12a
audio: chain-dma: use module context for allocations
kv2019i May 8, 2026
c80980c
(---section audio user PRs STOP)
kv2019i Mar 25, 2026
863ee72
(---section: IPC user support START)
kv2019i Mar 17, 2026
d50037c
ipc: move standalone-test check later in ipc_init()
kv2019i Feb 10, 2026
5b38212
userspace: split ipc files into user and kernel features. REVISIT memcpy
kv2019i Apr 1, 2026
164234c
ipc4: helper: use LL scheduler lock for userspace builds
kv2019i Mar 26, 2026
a25e503
WIP: ipc: implement user-space IPC handling for CREATE_PIPELINE
kv2019i Mar 12, 2026
28ede09
WIP: ipc: ipc4: route PIPELINE_DELETE to user-space handler
kv2019i Mar 30, 2026
3512020
ipc: make IPC stack thread size configurable
Apr 1, 2026
71c1d8b
ipc: ipc4: use sof_heap_alloc in ipc4_add_comp_dev()
kv2019i May 20, 2026
bdd4658
ipc: turn ipc_msg_reply() into a system call
kv2019i May 29, 2026
204fe5c
ipc: ipc4: use correct API to get DMA status
kv2019i Mar 19, 2026
775cde4
ipc: ipc4: dai: fix direct use of DMA driver calls
kv2019i May 20, 2026
edb82c3
ipc: use application heap for IPC pipeline and component allocations
kv2019i Mar 20, 2026
2654335
ipc: ipc4: helper: make ipc4_search_for_drv() userspace compatible
kv2019i Mar 31, 2026
47cfe4c
WIP: schedule: add multi-core support for user-space LL scheduler
kv2019i May 28, 2026
4a706ac
ipc: ipc-helper: trace context not used in user-space
kv2019i Apr 13, 2026
839788b
ipc: ipc4: use the core number from IPC config
kv2019i May 5, 2026
0e2ccd9
ipc: ipc4: helper: enable limited ipc_comp_connect() in user-space
kv2019i Apr 13, 2026
776c0cb
WIP: ipc: ipc4: route MOD_CONFIG_GET/SET to user-space handler
kv2019i Apr 10, 2026
912a9eb
WIP: ipc: ipc4: route MOD_BIND/UNBIND to user-space handler
kv2019i Apr 10, 2026
d22a132
WIP: ipc: ipc4: route MOD_INIT_INSTANCE to user-space handler
kv2019i May 11, 2026
2014e49
WIP: ipc: ipc4: route GLB_SET_PIPELINE_STATE to user-space handler
kv2019i Apr 16, 2026
4a3eaa1
WIP: ipc: ipc4: route MOD_LARGE_CONFIG_GET/SET user-space
kv2019i Apr 16, 2026
9f8fea9
(---section: IPC user support STOP)
kv2019i Mar 27, 2026
ade9408
(---section: IPC notifications START)
kv2019i May 8, 2026
be54c60
ipc: turn ipc_msg_send() into a system call if SOF_USERSPACE_LL=y
Apr 20, 2026
2096d46
ipc: make IPC message allocation userspace-safe
Apr 21, 2026
4e648d9
squash! ipc: make IPC message allocation userspace-safe
kv2019i May 29, 2026
5ebf273
ipc4: notification: make send_resource_notif() a syscall
Apr 23, 2026
5739b45
(---section: IPC notifications STOP)
kv2019i May 8, 2026
5fc88fd
(---section: LL operlay START)
kv2019i May 25, 2026
81c6994
app: overlays: ptl: add ll_usespace_overlay.conf
kv2019i Apr 14, 2026
2f9d91c
app: overlays: ptl: disable cold/dram execution for now
kv2019i May 6, 2026
48c03db
app: overlays: ptl: set CONFIG_SOF_ZEPHYR_LL_USER_HEAP_SIZE
kv2019i Apr 29, 2026
f92527b
squash! app: overlays: ptl: set CONFIG_SOF_ZEPHYR_LL_USER_HEAP_SIZE
kv2019i May 25, 2026
849fb4b
(---section: LL operlay STOP)
kv2019i May 25, 2026
8db3636
ipc: add a mod_alloc_ctx context to IPC context
kv2019i May 8, 2026
6861669
zephyr: lib: make vregion_alloc/free system calls
kv2019i May 19, 2026
213957f
(---section test-case START)
kv2019i Feb 19, 2026
0c52794
zephyr: test: userspace: add pipeline_two_components test
kv2019i Apr 22, 2026
9690015
(---section WIP mandatory changes START)
kv2019i Feb 19, 2026
177ea9b
audio: pipeline: enable position reporting for user-space pipelines
kv2019i Mar 17, 2026
a319bf3
WIP: schedule: limit user-LL to core0
kv2019i May 25, 2026
41a069c
WIP: ipc: expose coldrodata to IPC user thread
kv2019i Apr 16, 2026
fb93a0f
HACK: audio: collection of feature limitations to run LL in user
kv2019i Feb 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions app/overlays/ptl/ll_userspace_overlay.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
CONFIG_SOF_USERSPACE_LL=y

# Problem with DSP panics due to illegal instruction hit in user-space if cold
# store execution is enabled. Disable it for now until rootcause is found.
CONFIG_COLD_STORE_EXECUTE_DRAM=n

# temporary (but for now mandatory) settings
CONFIG_SOF_ZEPHYR_USERSPACE_MODULE_HEAP_SIZE=16384

# make the drivers work in user-space
CONFIG_SOF_USERSPACE_INTERFACE_DMA=y
CONFIG_DAI_USERSPACE=y

# disable features that don't work in user-space (at least yet)
CONFIG_COLD_STORE_EXECUTE_DEBUG=n
CONFIG_CROSS_CORE_STREAM=n
CONFIG_INTEL_ADSP_MIC_PRIVACY=n
CONFIG_XRUN_NOTIFICATIONS_ENABLE=n
CONFIG_SOF_BOOT_TEST_ALLOWED=n
CONFIG_SOF_TELEMETRY_PERFORMANCE_MEASUREMENTS=n
CONFIG_SOF_TELEMETRY_IO_PERFORMANCE_MEASUREMENTS=n

# disable llext (hits privilege issues in user-space now)
CONFIG_LLEXT_STORAGE_WRITABLE=n
CONFIG_LLEXT_EXPERIMENTAL=n
CONFIG_MODULES=n
48 changes: 48 additions & 0 deletions posix/include/rtos/mutex.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,52 @@ static inline int sys_mutex_unlock(struct sys_mutex *mutex)
return 0;
}

/* provide a no-op implementation for zephyr/sys/sem.h */

struct sys_sem {
};

static inline int sys_sem_init(struct sys_sem *sem, unsigned int initial_count,
unsigned int limit)
{
return 0;
}

static inline int sys_sem_give(struct sys_sem *sem)
{
return 0;
}

static inline int sys_sem_take(struct sys_sem *sem, k_timeout_t timeout)
{
return 0;
}

/**
* @brief User-space accessible mutex stub for host/testbench builds.
*/
struct sof_umutex {
struct k_mutex mutex; /**< Inline k_mutex for POSIX (no dynamic alloc needed) */
};

static inline int sof_umutex_init(struct sof_umutex *umutex)
{
return k_mutex_init(&umutex->mutex);
}

static inline int sof_umutex_lock(struct sof_umutex *umutex, k_timeout_t timeout)
{
return k_mutex_lock(&umutex->mutex, timeout);
}

static inline int sof_umutex_unlock(struct sof_umutex *umutex)
{
return k_mutex_unlock(&umutex->mutex);
}

static inline void sof_umutex_free(struct sof_umutex *umutex)
{
/* No-op on POSIX — no kernel objects to free */
}

#endif
13 changes: 13 additions & 0 deletions posix/include/rtos/umutex.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// SPDX-License-Identifier: BSD-3-Clause
//
// Copyright(c) 2026 Intel Corporation.
//

#ifndef __POSIX_RTOS_UMUTEX_H__
#define __POSIX_RTOS_UMUTEX_H__

#include <rtos/mutex.h>

/* sof_umutex type and operations are defined in rtos/mutex.h for POSIX */

#endif /* __POSIX_RTOS_UMUTEX_H__ */
8 changes: 8 additions & 0 deletions src/audio/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@ config HOST_DMA_STREAM_SYNCHRONIZATION
for each group, different than the default one determined by the system tick frequency.
This feature will allow host lower power consumption in scenarios with deep buffering.

config HOST_DMA_IPC_POSITION_UPDATES
bool "Support for stream position updates via IPC messages"
default y if IPC_MAJOR_3
help
Support firmware functionality to report stream position updates
by sending a IPC message whenever one period of audio is transfferred.
Most platforms provide more efficient ways to query the DMA status.

config COMP_CHAIN_DMA
bool "Chain DMA component"
depends on IPC_MAJOR_4
Expand Down
94 changes: 93 additions & 1 deletion src/audio/chain_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
#include <ipc/dai.h>
#include <ipc4/gateway.h>
#include <sof/schedule/ll_schedule.h>
#include <sof/schedule/ll_schedule_domain.h>
#include <sof/schedule/schedule.h>
#include <rtos/alloc.h>
#include <rtos/task.h>
#include <sof/lib/dma.h>
#include <sof/lib/memory.h>
Expand Down Expand Up @@ -59,6 +61,15 @@ struct chain_dma_data {
bool xrun_notification_sent;
#endif

#ifdef CONFIG_SOF_USERSPACE_LL
/** Kernel workqueue scheduling for chain DMA in userspace builds.
* Chain DMA needs kernel context for DMA operations, so it cannot
* run on the user-space LL timer thread.
*/
struct k_work_delayable dma_work;
bool stopped;
#endif

/* local host DMA config */
struct sof_dma *dma_host;
struct dma_chan_data *chan_host;
Expand Down Expand Up @@ -269,6 +280,25 @@ static enum task_state chain_task_run(void *data)
return SOF_TASK_STATE_RESCHEDULE;
}

#ifdef CONFIG_SOF_USERSPACE_LL
/** Kernel workqueue handler for chain DMA periodic task.
* Runs chain_task_run() in kernel context and reschedules if needed.
*/
static void chain_dma_work_handler(struct k_work *work)
{
struct k_work_delayable *dwork = k_work_delayable_from_work(work);
struct chain_dma_data *cd = CONTAINER_OF(dwork, struct chain_dma_data, dma_work);
enum task_state state;

if (cd->stopped)
return;

state = chain_task_run(cd);
if (state == SOF_TASK_STATE_RESCHEDULE && !cd->stopped)
k_work_reschedule(dwork, K_USEC(LL_TIMER_PERIOD_US));
}
#endif

static int chain_task_start(struct comp_dev *dev)
{
struct chain_dma_data *cd = comp_get_drvdata(dev);
Expand Down Expand Up @@ -310,6 +340,12 @@ static int chain_task_start(struct comp_dev *dev)
}
}

#ifdef CONFIG_SOF_USERSPACE_LL
cd->stopped = false;
k_work_init_delayable(&cd->dma_work, chain_dma_work_handler);
k_work_reschedule(&cd->dma_work, K_NO_WAIT);
cd->chain_task.state = SOF_TASK_STATE_QUEUED;
#else
ret = schedule_task_init_ll(&cd->chain_task, SOF_UUID(chain_dma_uuid),
SOF_SCHEDULE_LL_TIMER, SOF_TASK_PRI_HIGH,
chain_task_run, cd, 0, 0);
Expand All @@ -324,27 +360,38 @@ static int chain_task_start(struct comp_dev *dev)
schedule_task_free(&cd->chain_task);
goto error_task;
}
#endif

pm_policy_state_lock_get(PM_STATE_RUNTIME_IDLE, PM_ALL_SUBSTATES);

return 0;

#ifndef CONFIG_SOF_USERSPACE_LL
error_task:
chain_host_stop(dev);
chain_link_stop(dev);

return ret;
#endif
}

static int chain_task_pause(struct comp_dev *dev)
{
struct chain_dma_data *cd = comp_get_drvdata(dev);
int ret, ret2;

#ifdef CONFIG_SOF_USERSPACE_LL
if (cd->chain_task.state == SOF_TASK_STATE_FREE)
return 0;

cd->stopped = true;
cd->first_data_received = false;
#else
if (cd->chain_task.state == SOF_TASK_STATE_FREE)
return 0;

cd->first_data_received = false;
#endif
if (cd->stream_direction == SOF_IPC_STREAM_PLAYBACK) {
ret = chain_host_stop(dev);
ret2 = chain_link_stop(dev);
Expand All @@ -355,7 +402,12 @@ static int chain_task_pause(struct comp_dev *dev)
if (!ret)
ret = ret2;

#ifdef CONFIG_SOF_USERSPACE_LL
k_work_cancel_delayable_sync(&cd->dma_work, &(struct k_work_sync){});
cd->chain_task.state = SOF_TASK_STATE_FREE;
#else
schedule_task_free(&cd->chain_task);
#endif
pm_policy_state_lock_put(PM_STATE_RUNTIME_IDLE, PM_ALL_SUBSTATES);

return ret;
Expand Down Expand Up @@ -504,6 +556,7 @@ __cold static int chain_task_init(struct comp_dev *dev, uint8_t host_dma_id, uin
uint32_t fifo_size)
{
struct chain_dma_data *cd = comp_get_drvdata(dev);
struct mod_alloc_ctx *alloc_ctx = NULL;
uint32_t addr_align;
size_t buff_size;
void *buff_addr;
Expand Down Expand Up @@ -582,8 +635,14 @@ __cold static int chain_task_init(struct comp_dev *dev, uint8_t host_dma_id, uin
}

fifo_size = ALIGN_UP_INTERNAL(fifo_size, addr_align);

#ifdef CONFIG_SOF_USERSPACE_LL
alloc_ctx = ipc_get()->ll_alloc;
#endif

/* allocate not shared buffer */
cd->dma_buffer = buffer_alloc(NULL, fifo_size, SOF_MEM_FLAG_USER | SOF_MEM_FLAG_DMA,
cd->dma_buffer = buffer_alloc(alloc_ctx, fifo_size,
SOF_MEM_FLAG_USER | SOF_MEM_FLAG_DMA,
addr_align, BUFFER_USAGE_NOT_SHARED);

if (!cd->dma_buffer) {
Expand Down Expand Up @@ -643,14 +702,31 @@ __cold static struct comp_dev *chain_task_create(const struct comp_driver *drv,
if (host_dma_id >= max_chain_number)
return NULL;

#ifdef CONFIG_SOF_USERSPACE_LL
dev = sof_heap_alloc(sof_sys_user_heap_get(),
SOF_MEM_FLAG_USER | SOF_MEM_FLAG_COHERENT,
sizeof(*dev), 0);
if (!dev)
return NULL;

memset(dev, 0, sizeof(*dev));
comp_init(drv, dev, sizeof(*dev));
#else
dev = comp_alloc(drv, sizeof(*dev));
if (!dev)
return NULL;
#endif

#ifdef CONFIG_SOF_USERSPACE_LL
cd = sof_heap_alloc(sof_sys_user_heap_get(), SOF_MEM_FLAG_USER, sizeof(*cd), 0);
#else
cd = rzalloc(SOF_MEM_FLAG_USER, sizeof(*cd));
#endif
if (!cd)
goto error;

memset(cd, 0, sizeof(*cd));

cd->first_data_received = false;
cd->cs = scs ? 2 : 4;
cd->chain_task.state = SOF_TASK_STATE_INIT;
Expand All @@ -661,9 +737,17 @@ __cold static struct comp_dev *chain_task_create(const struct comp_driver *drv,
if (!ret)
return dev;

#ifdef CONFIG_SOF_USERSPACE_LL
sof_heap_free(sof_sys_user_heap_get(), cd);
#else
rfree(cd);
#endif
error:
#ifdef CONFIG_SOF_USERSPACE_LL
sof_heap_free(sof_sys_user_heap_get(), dev);
#else
comp_free_device(dev);
#endif
return NULL;
}

Expand All @@ -674,8 +758,16 @@ __cold static void chain_task_free(struct comp_dev *dev)
assert_can_be_cold();

chain_release(dev);
#ifdef CONFIG_SOF_USERSPACE_LL
sof_heap_free(sof_sys_user_heap_get(), cd);
#else
rfree(cd);
#endif
#ifdef CONFIG_SOF_USERSPACE_LL
sof_heap_free(sof_sys_user_heap_get(), dev);
#else
comp_free_device(dev);
#endif
}

static const struct comp_driver comp_chain_dma = {
Expand Down
8 changes: 8 additions & 0 deletions src/audio/component.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,14 @@ LOG_MODULE_REGISTER(component, CONFIG_SOF_LOG_LEVEL);

static APP_SYSUSER_BSS SHARED_DATA struct comp_driver_list cd;

#ifdef CONFIG_SOF_USERSPACE_LL
struct comp_driver_list *comp_drivers_get(void)
{
return platform_shared_get(&cd, sizeof(cd));
}
EXPORT_SYMBOL(comp_drivers_get);
#endif

SOF_DEFINE_REG_UUID(component);

DECLARE_TR_CTX(comp_tr, SOF_UUID(component_uuid), LOG_LEVEL_INFO);
Expand Down
16 changes: 15 additions & 1 deletion src/audio/copier/copier.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <rtos/interrupt.h>
#include <sof/ipc/msg.h>
#include <sof/ipc/topology.h>
#include <sof/schedule/ll_schedule_domain.h>
#include <rtos/interrupt.h>
#include <rtos/timer.h>
#include <rtos/cache.h>
Expand Down Expand Up @@ -824,7 +825,9 @@ __cold static int set_chmap(struct comp_dev *dev, const void *data, size_t data_
pcm_converter_func process;
pcm_converter_func converters[IPC4_COPIER_MODULE_OUTPUT_PINS_COUNT];
int i;
#ifndef CONFIG_SOF_USERSPACE_LL
uint32_t irq_flags;
#endif

assert_can_be_cold();

Expand Down Expand Up @@ -878,15 +881,26 @@ __cold static int set_chmap(struct comp_dev *dev, const void *data, size_t data_
}
}

/* Atomically update chmap, process and converters */
/* Atomically update chmap, process and converters.
* In user-space builds irq_local_disable() is privileged,
* use the LL scheduler lock instead.
*/
#ifdef CONFIG_SOF_USERSPACE_LL
zephyr_ll_lock_sched(cpu_get_id());
#else
irq_local_disable(irq_flags);
#endif

cd->dd[0]->chmap = chmap_cfg->channel_map;
cd->dd[0]->process = process;
for (i = 0; i < IPC4_COPIER_MODULE_OUTPUT_PINS_COUNT; i++)
cd->converter[i] = converters[i];

#ifdef CONFIG_SOF_USERSPACE_LL
zephyr_ll_unlock_sched(cpu_get_id());
#else
irq_local_enable(irq_flags);
#endif

return 0;
}
Expand Down
2 changes: 2 additions & 0 deletions src/audio/copier/host_copier.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,9 @@ struct host_data {

/* stream info */
struct sof_ipc_stream_posn posn; /* TODO: update this */
#if CONFIG_HOST_DMA_IPC_POSITION_UPDATES
struct ipc_msg *msg; /**< host notification */
#endif
#if CONFIG_XRUN_NOTIFICATIONS_ENABLE
bool xrun_notification_sent;
#endif
Expand Down
Loading
Loading