21#ifndef __SOF_LIB_DAI_LEGACY_H__
22#define __SOF_LIB_DAI_LEGACY_H__
24#include <platform/lib/dai.h>
33#include <sof/trace/trace.h>
50#define DAI_CLOCK_OUT 1
52#define DAI_DIR_PLAYBACK 0
53#define DAI_DIR_CAPTURE 1
55#define DAI_NUM_SLOT_MAPS 8
57#define DAI_INFO_TYPE 0
58#define DAI_INFO_DMA_CAPS 1
59#define DAI_INFO_DMA_DEV 2
64#define DAI_FLAGS_IRQ_CB BIT(0)
69#define DAI_CREAT BIT(0)
82 int (*set_config)(
struct dai *dai,
struct ipc_config_dai *config,
83 const void *spec_config);
84 int (*trigger)(
struct dai *dai,
int cmd,
int direction);
85 int (*get_hw_params)(
struct dai *dai,
86 struct sof_ipc_stream_params *params,
int dir);
87 int (*hw_params)(
struct dai *dai,
struct sof_ipc_stream_params *params);
88 int (*get_handshake)(
struct dai *dai,
int direction,
int stream_id);
89 int (*get_fifo)(
struct dai *dai,
int direction,
int stream_id);
90 int (*
probe)(
struct dai *dai);
91 int (*remove)(
struct dai *dai);
92 uint32_t (*get_init_delay_ms)(
struct dai *dai);
93 int (*get_fifo_depth)(
struct dai *dai,
int direction);
94 void (*copy)(
struct dai *dai);
107struct timestamp_data {
110 uint32_t walclk_rate;
113struct timestamp_ops {
114 int (*ts_config)(
struct dai *dai,
struct timestamp_cfg *cfg);
115 int (*ts_start)(
struct dai *dai,
struct timestamp_cfg *cfg);
116 int (*ts_stop)(
struct dai *dai,
struct timestamp_cfg *cfg);
117 int (*ts_get)(
struct dai *dai,
struct timestamp_cfg *cfg,
118 struct timestamp_data *tsd);
123 const struct sof_uuid_entry *uid;
128 struct timestamp_ops ts_ops;
139struct dai_plat_fifo_data {
150struct dai_plat_data {
153 const char *irq_name;
155 struct dai_plat_fifo_data fifo[2];
168 unsigned int frames);
175 struct dma_chan_data *chan;
177 struct dma_sg_config
config;
184 struct dai_group *
group;
221 struct k_spinlock
lock;
223 struct dai_plat_data plat_data;
224 const struct dai_driver *drv;
225 const struct dai_data *
dd;
232struct dai_type_info {
234 struct dai *dai_array;
239#define trace_dai_drv_get_tr_ctx(drv_p) ((drv_p)->tctx)
240#define trace_dai_drv_get_id(drv_p) (-1)
241#define trace_dai_drv_get_subid(drv_p) (-1)
243#define trace_dai_get_tr_ctx(dai_p) ((dai_p)->drv->tctx)
244#define trace_dai_get_id(dai_p) ((dai_p)->drv->type)
245#define trace_dai_get_subid(dai_p) ((dai_p)->index)
247#if defined(__ZEPHYR__) && defined(CONFIG_ZEPHYR_LOG)
249#define dai_cl_err(drv_p, __e, ...) LOG_ERR(__e, ##__VA_ARGS__)
251#define dai_cl_warn(drv_p, __e, ...) LOG_WRN(__e, ##__VA_ARGS__)
253#define dai_cl_info(drv_p, __e, ...) LOG_INF(__e, ##__VA_ARGS__)
255#define dai_cl_dbg(drv_p, __e, ...) LOG_DBG(__e, ##__VA_ARGS__)
258#define dai_err(dai_p, __e, ...) LOG_ERR(__e, ##__VA_ARGS__)
260#define dai_warn(dai_p, __e, ...) LOG_WRN(__e, ##__VA_ARGS__)
262#define dai_info(dai_p, __e, ...) LOG_INF(__e, ##__VA_ARGS__)
264#define dai_dbg(dai_p, __e, ...) LOG_DBG(__e, ##__VA_ARGS__)
269#define dai_cl_err(drv_p, __e, ...) \
270 trace_dev_err(trace_dai_drv_get_tr_ctx, \
271 trace_dai_drv_get_id, \
272 trace_dai_drv_get_subid, \
273 drv_p, __e, ##__VA_ARGS__)
275#define dai_cl_warn(drv_p, __e, ...) \
276 trace_dev_warn(trace_dai_drv_get_tr_ctx,\
277 trace_dai_drv_get_id, \
278 trace_dai_drv_get_subid, \
279 drv_p, __e, ##__VA_ARGS__)
281#define dai_cl_info(drv_p, __e, ...) \
282 trace_dev_info(trace_dai_drv_get_tr_ctx,\
283 trace_dai_drv_get_id, \
284 trace_dai_drv_get_subid, \
285 drv_p, __e, ##__VA_ARGS__)
287#define dai_cl_dbg(drv_p, __e, ...) \
288 trace_dev_dbg(trace_dai_drv_get_tr_ctx, \
289 trace_dai_drv_get_id, \
290 trace_dai_drv_get_subid, \
291 drv_p, __e, ##__VA_ARGS__)
295#define dai_err(dai_p, __e, ...) \
296 trace_dev_err(trace_dai_get_tr_ctx, \
298 trace_dai_get_subid, dai_p, __e, ##__VA_ARGS__)
300#define dai_warn(dai_p, __e, ...) \
301 trace_dev_warn(trace_dai_get_tr_ctx, \
303 trace_dai_get_subid, dai_p, __e, ##__VA_ARGS__)
305#define dai_info(dai_p, __e, ...) \
306 trace_dev_info(trace_dai_get_tr_ctx, \
308 trace_dai_get_subid, dai_p, __e, ##__VA_ARGS__)
310#define dai_dbg(dai_p, __e, ...) \
311 trace_dev_dbg(trace_dai_get_tr_ctx, \
313 trace_dai_get_subid, dai_p, __e, ##__VA_ARGS__)
380 const struct dai_type_info *dai_type_array;
381 size_t num_dai_types;
407#define dai_set_drvdata(dai, data) \
408 (dai->priv_data = data)
409#define dai_get_drvdata(dai) \
411#define dai_base(dai) \
413#define dai_irq(dai) \
415#define dai_fifo(dai, direction) \
416 dai->plat_data.fifo[direction].offset
422 const void *spec_config,
size_t size)
424 return dai->drv->ops.set_config(
dai, config, spec_config);
430static inline int dai_trigger(
struct dai *
dai,
int cmd,
int direction)
432 return dai->drv->ops.trigger(
dai, cmd, direction);
438static inline int dai_get_hw_params(
struct dai *
dai,
442 return dai->drv->ops.get_hw_params(
dai, params, dir);
448static inline int dai_hw_params(
struct dai *
dai,
451 if (
dai->drv->ops.hw_params)
452 return dai->drv->ops.hw_params(
dai, params);
463 return dai->drv->ops.get_handshake(
dai, direction, stream_id);
469static inline int dai_get_fifo(
struct dai *
dai,
int direction,
472 return dai->drv->ops.get_fifo(
dai, direction, stream_id);
478static inline int dai_probe(
struct dai *
dai)
480 return dai->drv->ops.probe(
dai);
486static inline int dai_remove(
struct dai *
dai)
488 return dai->drv->ops.remove(
dai);
496 if (
dai &&
dai->drv->ops.get_init_delay_ms)
497 return dai->drv->ops.get_init_delay_ms(
dai);
504 if (
dai &&
dai->drv->ops.get_fifo_depth)
505 return dai->drv->ops.get_fifo_depth(
dai, direction);
513static inline int dai_get_info(
struct dai *
dai,
int info)
521 case DAI_INFO_DMA_CAPS:
524 case DAI_INFO_DMA_DEV:
546 uint32_t mask, uint32_t
value)
551static inline const struct dai_info *dai_info_get(
void)
566 const void *spec_config);
577 const void *spec_config);
void dai_group_put(struct dai_group *group)
API to release DAI group.
int dai_get_fifo_depth(struct dai *dai, int direction)
Get Digital Audio interface fifo depth.
uint32_t dai_get_init_delay_ms(struct dai *dai)
Get DAI initial delay in milliseconds.
void dai_release_llp_slot(struct dai_data *dd)
release llp slot
int dai_config_dma_channel(struct dai_data *dd, struct comp_dev *dev, const void *config)
Configure DMA channel for DAI.
static uint32_t dai_read(struct dai *dai, uint32_t reg)
Definition dai-zephyr.h:181
int dai_config(struct dai_data *dd, struct comp_dev *dev, struct ipc_config_dai *common_cfg, const void *spec_cfg)
Configure DAI physical interface.
void dai_put(struct dai *dai)
API to release a platform DAI.
int(* channel_copy_func)(const struct audio_stream *src, unsigned int src_channel, struct audio_stream *dst, unsigned int dst_channel, unsigned int frames)
Definition dai-zephyr.h:112
static int dai_init(struct sof *sof)
API to initialize a platform DAI.
Definition dai-zephyr.h:220
void dai_set_link_hda_config(uint16_t *link_config, struct ipc_config_dai *common_config, const void *spec_config)
Configure HD Audio DMA params for DAI.
void dai_dma_position_update(struct dai_data *dd, struct comp_dev *dev)
update dai dma position for host driver.
int dai_assign_group(struct dai_data *dd, struct comp_dev *dev, uint32_t group_id)
Assign DAI to a group for simultaneous triggering.
int dai_get_handshake(struct dai *dai, int direction, int stream_id)
Get Digital Audio interface DMA Handshake.
struct dai * dai_get(uint32_t type, uint32_t index, uint32_t flags)
API to request a platform DAI.
void dai_dma_release(struct dai_data *dd, struct comp_dev *dev)
Reset DAI DMA config.
static void dai_write(struct dai *dai, uint32_t reg, uint32_t value)
Definition dai-zephyr.h:177
static void dai_update_bits(struct dai *dai, uint32_t reg, uint32_t mask, uint32_t value)
Definition dai-zephyr.h:186
struct dai_group * dai_group_get(uint32_t group_id, uint32_t flags)
API to request DAI group.
int dai_position(struct comp_dev *dev, struct sof_ipc_stream_posn *posn)
dai position for host driver.
int dai_set_config(struct dai *dai, struct ipc_config_dai *config, const void *spec_config, size_t size)
Digital Audio interface formatting.
static void io_reg_update_bits(uint32_t reg, uint32_t mask, uint32_t value)
Definition io.h:66
static uint32_t io_reg_read(uint32_t reg)
Definition io.h:56
static void io_reg_write(uint32_t reg, uint32_t val)
Definition io.h:61
#define list_item(item, type, member)
Definition list.h:80
PCM converter header file.
int(* pcm_converter_func)(const struct cir_buf_source *source, uint32_t src_channels, struct cir_buf_sink *sink, uint32_t sink_channels, size_t source_samples, uint32_t chmap)
PCM conversion function interface for data in circular buffer.
Definition pcm_converter.h:51
struct probe_pdata * probe
Definition sof.h:61
struct sof * sof_get(void)
const struct dai_info * dai_info
Definition sof.h:42
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
Audio component base device "class".
Definition component.h:645
DAI runtime data.
Definition dai-zephyr.h:119
struct sof_dma * dma
Definition dai-zephyr.h:130
struct comp_buffer * dma_buffer
Definition dai-zephyr.h:126
struct dai_group * group
Definition dai-zephyr.h:131
struct ipc_config_dai ipc_config
Definition dai-zephyr.h:145
bool delayed_dma_stop
Definition dai-zephyr.h:157
int xrun
Definition dai-zephyr.h:132
uint32_t stream_id
Definition dai-zephyr.h:122
struct dai * dai
Definition dai-zephyr.h:129
struct dma_sg_config config
Definition dai-zephyr.h:123
channel_copy_func channel_copy
Definition dai-zephyr.h:137
uint32_t chmap
Definition dai-zephyr.h:135
struct llp_slot_info slot_info
Definition dai-zephyr.h:160
pcm_converter_func process
Definition dai-zephyr.h:134
uint32_t period_bytes
Definition dai-zephyr.h:142
struct dai_ts_cfg ts_config
Definition dai-zephyr.h:128
struct comp_dev * dai_dev
Definition dai-zephyr.h:125
struct copier_gain_params * gain_data
Definition dai-zephyr.h:171
void * dai_spec_config
Definition dai-zephyr.h:146
uint64_t total_data_processed
Definition dai-zephyr.h:143
struct comp_buffer * local_buffer
Definition dai-zephyr.h:127
uint64_t wallclock
Definition dai-zephyr.h:148
DAI group information.
Definition dai-zephyr.h:72
int trigger_cmd
Trigger command to propagate.
Definition dai-zephyr.h:91
uint32_t trigger_counter
Number of DAIs to receive a trigger before processing begins.
Definition dai-zephyr.h:86
uint32_t num_dais
Number of DAIs in this group.
Definition dai-zephyr.h:81
struct list_item list
Group list.
Definition dai-zephyr.h:101
int trigger_ret
Last trigger error.
Definition dai-zephyr.h:96
uint32_t group_id
Group ID.
Definition dai-zephyr.h:76
Definition dai-zephyr.h:49
uint32_t index
Definition dai-zephyr.h:50
uint32_t dma_caps
Definition dai-zephyr.h:52
const struct dai_data * dd
Definition dai-zephyr.h:55
struct k_spinlock lock
Definition dai-zephyr.h:56
uint32_t dma_dev
Definition dai-zephyr.h:53
uint32_t type
Definition dai-zephyr.h:51
Definition ipc-config.h:65
llp slot info for memory window
Definition dai-zephyr.h:107
uint32_t reg_offset
Definition dai-zephyr.h:109
uint32_t node_id
Definition dai-zephyr.h:108
General firmware context.
Definition sof.h:44
const struct dai_info * dai_info
Definition sof.h:87
char value[]
Definition tlv.h:2
uint32_t type
Definition tlv.h:0