Skip to content

Commit e16862b

Browse files
committed
audio: dai: Pass bespoke config size through dai_set_config chain
Update dai_set_config() to accept and propagate the size parameter for bespoke DAI configuration data, matching the updated Zephyr DAI driver API. Changes: - Add size_t size parameter to dai_set_config() function - Update dai_set_config() signature in dai-zephyr.h header - Pass copier_cfg->gtw_cfg.config_length as size in IPC4 dai_config() - Forward size parameter to dai_config_set() Zephyr driver API call This change completes the integration with the new Zephyr DAI API that requires explicit size validation for bespoke configuration blobs, enabling proper bounds checking in DAI drivers. Signed-off-by: Adrian Bonislawski <adrian.bonislawski@intel.com>
1 parent e896e15 commit e16862b

5 files changed

Lines changed: 8 additions & 6 deletions

File tree

src/audio/dai-zephyr.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ static int dai_trigger_op(struct dai *dai, int cmd, int direction)
143143

144144
/* called from src/ipc/ipc3/handler.c and src/ipc/ipc4/dai.c */
145145
__cold int dai_set_config(struct dai *dai, struct ipc_config_dai *common_config,
146-
const void *spec_config)
146+
const void *spec_config, size_t size)
147147
{
148148
const struct device *dev = dai->dev;
149149
const struct sof_ipc_dai_config *sof_cfg = spec_config;
@@ -198,7 +198,7 @@ __cold int dai_set_config(struct dai *dai, struct ipc_config_dai *common_config,
198198
return -EINVAL;
199199
}
200200

201-
return dai_config_set(dev, &cfg, cfg_params);
201+
return dai_config_set(dev, &cfg, cfg_params, size);
202202
}
203203

204204
/* called from ipc/ipc3/dai.c */

src/include/sof/lib/dai-legacy.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ void dai_put(struct dai *dai);
419419
* \brief Digital Audio interface formatting
420420
*/
421421
static inline int dai_set_config(struct dai *dai, struct ipc_config_dai *config,
422-
const void *spec_config)
422+
const void *spec_config, size_t size)
423423
{
424424
return dai->drv->ops.set_config(dai, config, spec_config);
425425
}

src/include/sof/lib/dai-zephyr.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ void dai_put(struct dai *dai);
237237
/**
238238
* \brief Digital Audio interface formatting
239239
*/
240-
int dai_set_config(struct dai *dai, struct ipc_config_dai *config, const void *spec_config);
240+
int dai_set_config(struct dai *dai, struct ipc_config_dai *config,
241+
const void *spec_config, size_t size);
241242

242243
/**
243244
* \brief Get Digital Audio interface DMA Handshake

src/ipc/ipc3/handler.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ static int ipc_dai_config_set(struct sof_ipc_dai_config *config,
579579
}
580580

581581
/* configure DAI */
582-
ret = dai_set_config(dai, config_dai, config);
582+
ret = dai_set_config(dai, config_dai, config, sizeof(*config));
583583
dai_put(dai); /* free ref immediately */
584584
if (ret < 0) {
585585
ipc_cmd_err(&ipc_tr, "ipc: dai %d,%d config failed %d", config->type,

src/ipc/ipc4/dai.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,8 @@ __cold int dai_config(struct dai_data *dd, struct comp_dev *dev,
396396
if (ret < 0)
397397
return ret;
398398

399-
return dai_set_config(dd->dai, common_config, copier_cfg->gtw_cfg.config_data);
399+
return dai_set_config(dd->dai, common_config,
400+
copier_cfg->gtw_cfg.config_data, copier_cfg->gtw_cfg.config_length);
400401
}
401402

402403
#if CONFIG_ZEPHYR_NATIVE_DRIVERS

0 commit comments

Comments
 (0)