8#ifndef __SOF_AUDIO_BUFFER_H__
9#define __SOF_AUDIO_BUFFER_H__
24#include <sof/trace/trace.h>
26#include <ipc/topology.h>
45#define trace_buf_get_tr_ctx(buf_ptr) (&(buf_ptr)->tctx)
48#define buf_get_id(buf_ptr) ((buf_ptr)->stream.runtime_stream_params.id)
50#if defined(__ZEPHYR__) && defined(CONFIG_ZEPHYR_LOG)
53#define __BUF_FMT "buf:%u %#x "
55#define __BUF_FMT "buf:%u.%u "
58#define buf_err(buf_ptr, __e, ...) LOG_ERR(__BUF_FMT __e, buffer_pipeline_id(buf_ptr), \
59 buf_get_id(buf_ptr), ##__VA_ARGS__)
61#define buf_warn(buf_ptr, __e, ...) LOG_WRN(__BUF_FMT __e, buffer_pipeline_id(buf_ptr), \
62 buf_get_id(buf_ptr), ##__VA_ARGS__)
64#define buf_info(buf_ptr, __e, ...) LOG_INF(__BUF_FMT __e, buffer_pipeline_id(buf_ptr), \
65 buf_get_id(buf_ptr), ##__VA_ARGS__)
67#define buf_dbg(buf_ptr, __e, ...) LOG_DBG(__BUF_FMT __e, buffer_pipeline_id(buf_ptr), \
68 buf_get_id(buf_ptr), ##__VA_ARGS__)
72#define buf_err(buf_ptr, __e, ...) \
73 trace_dev_err(trace_buf_get_tr_ctx, buffer_pipeline_id, \
75 (__sparse_force const struct comp_buffer *)buf_ptr, \
79#define buf_warn(buf_ptr, __e, ...) \
80 trace_dev_warn(trace_buf_get_tr_ctx, buffer_pipeline_id, \
82 (__sparse_force const struct comp_buffer *)buf_ptr, \
86#define buf_info(buf_ptr, __e, ...) \
87 trace_dev_info(trace_buf_get_tr_ctx, buffer_pipeline_id, \
89 (__sparse_force const struct comp_buffer *)buf_ptr, \
93#if defined(CONFIG_LIBRARY)
94#define buf_dbg(buf_ptr, __e, ...)
96#define buf_dbg(buf_ptr, __e, ...) \
97 trace_dev_dbg(trace_buf_get_tr_ctx, buffer_pipeline_id, \
99 (__sparse_force const struct comp_buffer *)buf_ptr, \
108#define BUFF_CB_TYPE_PRODUCE BIT(0)
109#define BUFF_CB_TYPE_CONSUME BIT(1)
111#define BUFFER_UPDATE_IF_UNSET 0
112#define BUFFER_UPDATE_FORCE 1
115#define BUFF_PARAMS_FRAME_FMT BIT(0)
116#define BUFF_PARAMS_BUFFER_FMT BIT(1)
117#define BUFF_PARAMS_RATE BIT(2)
118#define BUFF_PARAMS_CHANNELS BIT(3)
121#define BUFFER_USAGE_SHARED true
122#define BUFFER_USAGE_NOT_SHARED false
156 void (*probe_cb_free)(
void *arg);
207#define buffer_from_list(ptr, dir) \
208 ((dir) == PPL_DIR_DOWNSTREAM ? \
209 container_of(ptr, struct comp_buffer, source_list) : \
210 container_of(ptr, struct comp_buffer, sink_list))
212#define buffer_set_cb(buffer, func, data, type) \
215 buffer->cb_data = data; \
216 buffer->cb_type = type; \
223 uint32_t align,
bool is_shared);
226 uint32_t
flags, uint32_t align,
bool is_shared);
static bool audio_buffer_is_shared(struct sof_audio_buffer *buffer)
Definition audio_buffer.h:213
static struct sof_audio_buffer * sof_audio_buffer_from_sink(struct sof_sink *sink)
return a pointer to struct sof_audio_buffer from sink pointer NOTE!
Definition audio_buffer.h:275
static struct sof_audio_buffer * sof_audio_buffer_from_source(struct sof_source *source)
return a pointer to struct sof_audio_buffer from source pointer NOTE!
Definition audio_buffer.h:285
void audio_buffer_free(struct sof_audio_buffer *buffer)
free buffer and all allocated resources
Audio Stream API definition.
struct comp_buffer * buffer_alloc(struct mod_alloc_ctx *alloc, size_t size, uint32_t flags, uint32_t align, bool is_shared)
static void comp_buffer_reset_source_list(struct comp_buffer *buffer)
Definition buffer.h:190
static void comp_buffer_set_source_component(struct comp_buffer *buffer, struct comp_dev *comp)
Definition buffer.h:179
int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignment)
int buffer_set_params(struct comp_buffer *buffer, struct sof_ipc_stream_params *params, bool force_update)
static struct comp_buffer * comp_buffer_get_from_sink(struct sof_sink *sink)
Definition buffer.h:242
struct comp_buffer * buffer_new(struct mod_alloc_ctx *alloc, const struct sof_ipc_buffer *desc, bool is_shared)
bool buffer_params_match(struct comp_buffer *buffer, struct sof_ipc_stream_params *params, uint32_t flag)
static void buffer_free(struct comp_buffer *buffer)
Definition buffer.h:249
static void buffer_stream_writeback(struct comp_buffer *buffer, uint32_t bytes)
Definition buffer.h:278
void buffer_zero(struct comp_buffer *buffer)
static struct comp_buffer * comp_buffer_get_from_source(struct sof_source *source)
Definition buffer.h:235
static struct comp_dev * buffer_get_comp(struct comp_buffer *buffer, int dir)
Definition buffer.h:306
struct comp_buffer * buffer_alloc_range(struct mod_alloc_ctx *alloc, size_t preferred_size, size_t minimum_size, uint32_t flags, uint32_t align, bool is_shared)
static struct comp_dev * comp_buffer_get_source_component(const struct comp_buffer *buffer)
Definition buffer.h:165
static void comp_buffer_set_sink_component(struct comp_buffer *buffer, struct comp_dev *comp)
Definition buffer.h:185
void comp_update_buffer_produce(struct comp_buffer *buffer, uint32_t bytes)
void comp_update_buffer_consume(struct comp_buffer *buffer, uint32_t bytes)
static struct comp_dev * comp_buffer_get_sink_component(const struct comp_buffer *buffer)
Definition buffer.h:173
int buffer_set_size_range(struct comp_buffer *buffer, size_t preferred_size, size_t minimum_size, uint32_t alignment)
static void comp_buffer_reset_sink_list(struct comp_buffer *buffer)
Definition buffer.h:195
int buffer_attach(struct comp_buffer *buffer, struct list_item *head, int dir)
static void buffer_init_stream(struct comp_buffer *buffer, size_t size)
Definition buffer.h:320
static uint32_t buffer_pipeline_id(const struct comp_buffer *buffer)
Definition buffer.h:314
static void buffer_stream_invalidate(struct comp_buffer *buffer, uint32_t bytes)
Definition buffer.h:270
void buffer_detach(struct comp_buffer *buffer, struct list_item *head, int dir)
#define container_of(ptr, type, member)
Definition common.h:119
static void audio_stream_invalidate(struct audio_stream *buffer, uint32_t bytes)
Invalidates (in DSP d-cache) the buffer in range [r_ptr, r_ptr+bytes], with rollover if necessary.
Definition audio_stream.h:758
void audio_stream_init(struct audio_stream *audio_stream, void *buff_addr, uint32_t size)
Initializes the buffer with specified memory block and size.
static void audio_stream_writeback(struct audio_stream *buffer, uint32_t bytes)
Writes back (from DSP d-cache) the buffer in range [w_ptr, w_ptr+bytes], with rollover if necessary.
Definition audio_stream.h:781
IPC definitions for streams.
static void list_init(struct list_item *list)
Definition list.h:25
#define list_item(item, type, member)
Definition list.h:80
#define PPL_DIR_DOWNSTREAM
Definition pipeline.h:49
Audio stream is a circular buffer aware of audio format of the data in the buffer so provides API for...
Definition audio_stream.h:52
struct sof_audio_stream_params runtime_stream_params
Definition audio_stream.h:66
void * addr
Buffer base address.
Definition audio_stream.h:59
struct comp_buffer * buffer
Definition buffer.h:202
uint32_t transaction_amount
Definition buffer.h:203
void * transaction_begin_address
Definition buffer.h:204
struct tr_ctx tctx
Definition buffer.h:139
struct list_item source_list
Definition buffer.h:146
struct list_item sink_list
Definition buffer.h:147
struct list_item buffers_list
Definition buffer.h:150
uint32_t core
Definition buffer.h:138
struct audio_stream stream
Definition buffer.h:134
struct comp_dev * source
Definition buffer.h:142
struct comp_dev * sink
Definition buffer.h:143
uint32_t flags
Definition buffer.h:137
struct sof_audio_buffer audio_buffer
Definition buffer.h:132
Audio component base device "class".
Definition component.h:645
uint32_t size
component's allocated size
Definition component.h:657
Definition audio_buffer.h:65
Definition topology.h:107