Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ec77b82 authored by Vidyakumar Athota's avatar Vidyakumar Athota
Browse files

ASoC: msm: qdsp6v2: assign decoder memory to ADSP



Get the physical address of memory from ion FD and
assign it to ADSP for secure playback scenario.

Change-Id: I51019f5da6fb5fedefc81504b192f985b851ab12
Signed-off-by: default avatarVidyakumar Athota <vathota@codeaurora.org>
parent 92c993fd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -639,7 +639,7 @@ int q6asm_send_audio_effects_params(struct audio_client *ac, char *params,
int q6asm_send_stream_cmd(struct audio_client *ac,
			  struct msm_adsp_event_data *data);

int q6asm_send_ion_fd(struct audio_client *ac, int fd);
int q6asm_audio_map_shm_fd(struct audio_client *ac, int fd);

int q6asm_send_rtic_event_ack(struct audio_client *ac,
			      void *param, uint32_t params_length);
+15 −1
Original line number Diff line number Diff line
/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2016, 2017 The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -20,6 +20,8 @@
#define AVCS_CMDRSP_ADSP_EVENT_GET_STATE	0x0001290D

bool q6core_is_adsp_ready(void);
int q6core_add_remove_pool_pages(phys_addr_t buf_add, uint32_t bufsz,
			uint32_t mempool_id, bool add_pages);

#define ADSP_CMD_SET_DTS_EAGLE_DATA_ID 0x00012919
#define DTS_EAGLE_LICENSE_ID           0x00028346
@@ -153,4 +155,16 @@ struct avcs_cmd_deregister_topologies {
int32_t core_set_license(uint32_t key, uint32_t module_id);
int32_t core_get_license_status(uint32_t module_id);

#define ADSP_MEMORY_MAP_HLOS_PHYSPOOL 4
#define AVCS_CMD_ADD_POOL_PAGES 0x0001292E
#define AVCS_CMD_REMOVE_POOL_PAGES 0x0001292F

struct avs_mem_assign_region {
	struct apr_hdr       hdr;
	u32                  pool_id;
	u32                  size;
	u32                  addr_lsw;
	u32                  addr_msw;
} __packed;

#endif /* __Q6CORE_H__ */
+155 −22
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@

#include <sound/apr_audio-v2.h>
#include <sound/q6asm-v2.h>
#include <sound/q6core.h>
#include <sound/compress_params.h>
#include <sound/compress_offload.h>
#include <sound/compress_driver.h>
@@ -103,6 +104,7 @@ struct msm_compr_pdata {
	bool use_legacy_api; /* indicates use older asm apis*/
	struct msm_compr_dec_params *dec_params[MSM_FRONTEND_DAI_MAX];
	struct msm_compr_ch_map *ch_map[MSM_FRONTEND_DAI_MAX];
	int32_t ion_fd[MSM_FRONTEND_DAI_MAX];
};

struct msm_compr_audio {
@@ -156,6 +158,8 @@ struct msm_compr_audio {
	uint32_t start_delay_lsw;
	uint32_t start_delay_msw;

	int32_t shm_ion_fd;

	uint64_t marker_timestamp;

	struct msm_compr_gapless_state gapless_state;
@@ -1506,6 +1510,40 @@ static int msm_compr_configure_dsp_for_capture(struct snd_compr_stream *cstream)
	return ret;
}

static int msm_compr_map_unmap_fd(int fd, bool add_pages)
{
	ion_phys_addr_t paddr;
	size_t pa_len = 0;
	int ret = 0;
	u8 assign_type;

	if (add_pages)
		assign_type = HLOS_TO_ADSP;
	else
		assign_type = ADSP_TO_HLOS;

	ret = msm_audio_ion_phys_assign("audio_lib_mem_client", fd,
					&paddr, &pa_len, assign_type);
	if (ret) {
		pr_err("%s: audio lib ION phys failed, rc = %d\n",
			__func__, ret);
		goto done;
	}

	ret = q6core_add_remove_pool_pages(paddr, pa_len,
				 ADSP_MEMORY_MAP_HLOS_PHYSPOOL, add_pages);
	if (ret) {
		pr_err("%s: add remove pages failed, rc = %d\n", __func__, ret);
		/* Assign back to HLOS if add pages cmd failed */
		if (add_pages)
			msm_audio_ion_phys_assign("audio_lib_mem_client", fd,
						&paddr, &pa_len, ADSP_TO_HLOS);
	}

done:
	return ret;
}

static int msm_compr_playback_open(struct snd_compr_stream *cstream)
{
	struct snd_compr_runtime *runtime = cstream->runtime;
@@ -1513,6 +1551,7 @@ static int msm_compr_playback_open(struct snd_compr_stream *cstream)
	struct msm_compr_audio *prtd;
	struct msm_compr_pdata *pdata =
			snd_soc_platform_get_drvdata(rtd->platform);
	int ret = 0;

	pr_debug("%s\n", __func__);
	prtd = kzalloc(sizeof(struct msm_compr_audio), GFP_KERNEL);
@@ -1528,19 +1567,16 @@ static int msm_compr_playback_open(struct snd_compr_stream *cstream)
		 kzalloc(sizeof(struct msm_compr_audio_effects), GFP_KERNEL);
	if (!pdata->audio_effects[rtd->dai_link->be_id]) {
		pr_err("%s: Could not allocate memory for effects\n", __func__);
		pdata->cstream[rtd->dai_link->be_id] = NULL;
		kfree(prtd);
		return -ENOMEM;
		ret = -ENOMEM;
		goto effect_err;
	}
	pdata->dec_params[rtd->dai_link->be_id] =
		 kzalloc(sizeof(struct msm_compr_dec_params), GFP_KERNEL);
	if (!pdata->dec_params[rtd->dai_link->be_id]) {
		pr_err("%s: Could not allocate memory for dec params\n",
			__func__);
		kfree(pdata->audio_effects[rtd->dai_link->be_id]);
		pdata->cstream[rtd->dai_link->be_id] = NULL;
		kfree(prtd);
		return -ENOMEM;
		ret = -ENOMEM;
		goto param_err;
	}
	prtd->codec = FORMAT_MP3;
	prtd->bytes_received = 0;
@@ -1584,19 +1620,32 @@ static int msm_compr_playback_open(struct snd_compr_stream *cstream)
				(app_cb)compr_event_handler, prtd);
	if (!prtd->audio_client) {
		pr_err("%s: Could not allocate memory for client\n", __func__);
		kfree(pdata->audio_effects[rtd->dai_link->be_id]);
		kfree(pdata->dec_params[rtd->dai_link->be_id]);
		pdata->cstream[rtd->dai_link->be_id] = NULL;
		runtime->private_data = NULL;
		kfree(prtd);
		return -ENOMEM;
		ret = -ENOMEM;
		goto ac_err;
	}
	pr_debug("%s: session ID %d\n", __func__, prtd->audio_client->session);
	prtd->audio_client->perf_mode = false;
	prtd->session_id = prtd->audio_client->session;
	msm_adsp_init_mixer_ctl_pp_event_queue(rtd);

	if (pdata->ion_fd[rtd->dai_link->be_id] > 0) {
		ret = msm_compr_map_unmap_fd(
				pdata->ion_fd[rtd->dai_link->be_id], true);
		if (ret < 0)
			goto map_err;
	}
	return 0;

map_err:
	q6asm_audio_client_free(prtd->audio_client);
ac_err:
	kfree(pdata->dec_params[rtd->dai_link->be_id]);
param_err:
	kfree(pdata->audio_effects[rtd->dai_link->be_id]);
effect_err:
	pdata->cstream[rtd->dai_link->be_id] = NULL;
	runtime->private_data = NULL;
	kfree(prtd);
	return ret;
}

static int msm_compr_capture_open(struct snd_compr_stream *cstream)
@@ -1675,6 +1724,8 @@ static int msm_compr_playback_free(struct snd_compr_stream *cstream)
	int dir = IN, ret = 0, stream_id;
	unsigned long flags;
	uint32_t stream_index;
	ion_phys_addr_t paddr;
	size_t pa_len = 0;

	pr_debug("%s\n", __func__);

@@ -1748,6 +1799,15 @@ static int msm_compr_playback_free(struct snd_compr_stream *cstream)
	}

	q6asm_audio_client_buf_free_contiguous(dir, ac);
	if (prtd->shm_ion_fd > 0)
		msm_audio_ion_phys_assign("audio_shm_mem_client",
					  prtd->shm_ion_fd,
					  &paddr, &pa_len, ADSP_TO_HLOS);
	if (pdata->ion_fd[soc_prtd->dai_link->be_id] > 0) {
		msm_compr_map_unmap_fd(pdata->ion_fd[soc_prtd->dai_link->be_id],
					false);
		pdata->ion_fd[soc_prtd->dai_link->be_id] = 0;
	}

	q6asm_audio_client_free(ac);
	msm_adsp_clean_mixer_ctl_pp_event_queue(soc_prtd);
@@ -3655,7 +3715,7 @@ done:
	return ret;
}

static int msm_compr_ion_fd_map_put(struct snd_kcontrol *kcontrol,
static int msm_compr_shm_ion_fd_map_put(struct snd_kcontrol *kcontrol,
				    struct snd_ctl_elem_value *ucontrol)
{
	struct snd_soc_component *comp = snd_kcontrol_chip(kcontrol);
@@ -3664,7 +3724,6 @@ static int msm_compr_ion_fd_map_put(struct snd_kcontrol *kcontrol,
				snd_soc_component_get_drvdata(comp);
	struct snd_compr_stream *cstream = NULL;
	struct msm_compr_audio *prtd;
	int fd;
	int ret = 0;

	if (fe_id >= MSM_FRONTEND_DAI_MAX) {
@@ -3694,10 +3753,34 @@ static int msm_compr_ion_fd_map_put(struct snd_kcontrol *kcontrol,
		goto done;
	}

	memcpy(&fd, ucontrol->value.bytes.data, sizeof(fd));
	ret = q6asm_send_ion_fd(prtd->audio_client, fd);
	memcpy(&prtd->shm_ion_fd, ucontrol->value.bytes.data,
		sizeof(prtd->shm_ion_fd));
	ret = q6asm_audio_map_shm_fd(prtd->audio_client, prtd->shm_ion_fd);
	if (ret < 0)
		pr_err("%s: failed to register ion fd\n", __func__);
		pr_err("%s: failed to map shm mem\n", __func__);
done:
	return ret;
}

static int msm_compr_lib_ion_fd_map_put(struct snd_kcontrol *kcontrol,
				    struct snd_ctl_elem_value *ucontrol)
{
	struct snd_soc_component *comp = snd_kcontrol_chip(kcontrol);
	unsigned long fe_id = kcontrol->private_value;
	struct msm_compr_pdata *pdata = (struct msm_compr_pdata *)
				snd_soc_component_get_drvdata(comp);
	int ret = 0;

	if (fe_id >= MSM_FRONTEND_DAI_MAX) {
		pr_err("%s Received out of bounds invalid fe_id %lu\n",
			__func__, fe_id);
		ret = -EINVAL;
		goto done;
	}

	memcpy(&pdata->ion_fd[fe_id], ucontrol->value.bytes.data,
		   sizeof(pdata->ion_fd[fe_id]));

done:
	return ret;
}
@@ -4329,7 +4412,7 @@ static int msm_compr_add_channel_map_control(struct snd_soc_pcm_runtime *rtd)
	return 0;
}

static int msm_compr_add_io_fd_cmd_control(struct snd_soc_pcm_runtime *rtd)
static int msm_compr_add_shm_ion_fd_cmd_control(struct snd_soc_pcm_runtime *rtd)
{
	const char *mixer_ctl_name = "Playback ION FD";
	const char *deviceNo = "NN";
@@ -4341,7 +4424,52 @@ static int msm_compr_add_io_fd_cmd_control(struct snd_soc_pcm_runtime *rtd)
		.name = "?",
		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
		.info = msm_adsp_stream_cmd_info,
		.put = msm_compr_ion_fd_map_put,
		.put = msm_compr_shm_ion_fd_map_put,
		.private_value = 0,
		}
	};

	if (!rtd) {
		pr_err("%s NULL rtd\n", __func__);
		ret = -EINVAL;
		goto done;
	}

	ctl_len = strlen(mixer_ctl_name) + 1 + strlen(deviceNo) + 1;
	mixer_str = kzalloc(ctl_len, GFP_KERNEL);
	if (!mixer_str) {
		ret = -ENOMEM;
		goto done;
	}

	snprintf(mixer_str, ctl_len, "%s %d", mixer_ctl_name, rtd->pcm->device);
	fe_ion_fd_config_control[0].name = mixer_str;
	fe_ion_fd_config_control[0].private_value = rtd->dai_link->be_id;
	pr_debug("%s: Registering new mixer ctl %s\n", __func__, mixer_str);
	ret = snd_soc_add_platform_controls(rtd->platform,
				fe_ion_fd_config_control,
				ARRAY_SIZE(fe_ion_fd_config_control));
	if (ret < 0)
		pr_err("%s: failed to add ctl %s\n", __func__, mixer_str);

	kfree(mixer_str);
done:
	return ret;
}

static int msm_compr_add_lib_ion_fd_cmd_control(struct snd_soc_pcm_runtime *rtd)
{
	const char *mixer_ctl_name = "Playback ION LIB FD";
	const char *deviceNo = "NN";
	char *mixer_str = NULL;
	int ctl_len = 0, ret = 0;
	struct snd_kcontrol_new fe_ion_fd_config_control[1] = {
		{
		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
		.name = "?",
		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
		.info = msm_adsp_stream_cmd_info,
		.put = msm_compr_lib_ion_fd_map_put,
		.private_value = 0,
		}
	};
@@ -4442,11 +4570,16 @@ static int msm_compr_new(struct snd_soc_pcm_runtime *rtd)
		pr_err("%s: Could not add Compr ADSP Stream Callback Control\n",
			__func__);

	rc = msm_compr_add_io_fd_cmd_control(rtd);
	rc = msm_compr_add_shm_ion_fd_cmd_control(rtd);
	if (rc)
		pr_err("%s: Could not add Compr ion fd Control\n",
			__func__);

	rc = msm_compr_add_lib_ion_fd_cmd_control(rtd);
	if (rc)
		pr_err("%s: Could not add Compr ion lib fd Control\n",
			__func__);

	rc = msm_compr_add_event_ack_cmd_control(rtd);
	if (rc)
		pr_err("%s: Could not add Compr event ack Control\n",
+145 −9
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <sound/initval.h>
#include <sound/control.h>
#include <sound/q6asm-v2.h>
#include <sound/q6core.h>
#include <sound/pcm_params.h>
#include <sound/timer.h>
#include <sound/tlv.h>
@@ -45,6 +46,7 @@ static DEFINE_MUTEX(transcode_loopback_session_lock);

struct trans_loopback_pdata {
	struct snd_compr_stream *cstream[MSM_FRONTEND_DAI_MAX];
	int32_t ion_fd[MSM_FRONTEND_DAI_MAX];
};

struct loopback_stream {
@@ -79,6 +81,7 @@ struct msm_transcode_loopback {

	int session_id;
	struct audio_client *audio_client;
	int32_t shm_ion_fd;
};

/* Transcode loopback global info struct */
@@ -179,6 +182,40 @@ static void populate_codec_list(struct msm_transcode_loopback *trans,
	}
}

static int msm_transcode_map_unmap_fd(int fd, bool add_pages)
{
	ion_phys_addr_t paddr;
	size_t pa_len = 0;
	int ret = 0;
	u8 assign_type;

	if (add_pages)
		assign_type = HLOS_TO_ADSP;
	else
		assign_type = ADSP_TO_HLOS;

	ret = msm_audio_ion_phys_assign("audio_lib_mem_client", fd,
					&paddr, &pa_len, assign_type);
	if (ret) {
		pr_err("%s: audio lib ION phys failed, rc = %d\n", __func__,
			ret);
		goto done;
	}

	ret = q6core_add_remove_pool_pages(paddr, pa_len,
				 ADSP_MEMORY_MAP_HLOS_PHYSPOOL, add_pages);
	if (ret) {
		pr_err("%s: add remove pages failed, rc = %d\n", __func__, ret);
		/* Assign back to HLOS if add pages cmd failed */
		if (add_pages)
			msm_audio_ion_phys_assign("audio_lib_mem_client", fd,
						&paddr, &pa_len, ADSP_TO_HLOS);
	}

done:
	return ret;
}

static int msm_transcode_loopback_open(struct snd_compr_stream *cstream)
{
	int ret = 0;
@@ -224,6 +261,13 @@ static int msm_transcode_loopback_open(struct snd_compr_stream *cstream)
			goto exit;
		}
		msm_adsp_init_mixer_ctl_pp_event_queue(rtd);
		if (pdata->ion_fd[rtd->dai_link->be_id] > 0) {
			ret = msm_transcode_map_unmap_fd(
					pdata->ion_fd[rtd->dai_link->be_id],
					true);
			if (ret < 0)
				goto exit;
		}
	}

	pr_debug("%s: num stream%d, stream name %s\n", __func__,
@@ -274,7 +318,11 @@ static int msm_transcode_loopback_free(struct snd_compr_stream *cstream)
	struct snd_compr_runtime *runtime = cstream->runtime;
	struct msm_transcode_loopback *trans = runtime->private_data;
	struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(cstream);
	struct trans_loopback_pdata *pdata = snd_soc_platform_get_drvdata(
								rtd->platform);
	int ret = 0;
	ion_phys_addr_t paddr;
	size_t pa_len = 0;

	mutex_lock(&trans->lock);

@@ -286,6 +334,19 @@ static int msm_transcode_loopback_free(struct snd_compr_stream *cstream)
	if (cstream->direction == SND_COMPRESS_PLAYBACK) {
		memset(&trans->sink, 0, sizeof(struct loopback_stream));
		msm_adsp_clean_mixer_ctl_pp_event_queue(rtd);
		if (trans->shm_ion_fd > 0) {
			msm_audio_ion_phys_assign("audio_shm_mem_client",
						  trans->shm_ion_fd,
						  &paddr, &pa_len,
						  ADSP_TO_HLOS);
			trans->shm_ion_fd = 0;
		}
		if (pdata->ion_fd[rtd->dai_link->be_id] > 0) {
			msm_transcode_map_unmap_fd(
					pdata->ion_fd[rtd->dai_link->be_id],
					false);
			pdata->ion_fd[rtd->dai_link->be_id] = 0;
		}
	} else if (cstream->direction == SND_COMPRESS_CAPTURE) {
		memset(&trans->source, 0, sizeof(struct loopback_stream));
	}
@@ -557,7 +618,7 @@ done:
	return ret;
}

static int msm_transcode_ion_fd_map_put(struct snd_kcontrol *kcontrol,
static int msm_transcode_shm_ion_fd_map_put(struct snd_kcontrol *kcontrol,
				    struct snd_ctl_elem_value *ucontrol)
{
	struct snd_soc_component *comp = snd_kcontrol_chip(kcontrol);
@@ -566,7 +627,6 @@ static int msm_transcode_ion_fd_map_put(struct snd_kcontrol *kcontrol,
				snd_soc_component_get_drvdata(comp);
	struct snd_compr_stream *cstream = NULL;
	struct msm_transcode_loopback *prtd;
	int fd;
	int ret = 0;

	if (fe_id >= MSM_FRONTEND_DAI_MAX) {
@@ -596,10 +656,34 @@ static int msm_transcode_ion_fd_map_put(struct snd_kcontrol *kcontrol,
		goto done;
	}

	memcpy(&fd, ucontrol->value.bytes.data, sizeof(fd));
	ret = q6asm_send_ion_fd(prtd->audio_client, fd);
	memcpy(&prtd->shm_ion_fd, ucontrol->value.bytes.data,
		sizeof(prtd->shm_ion_fd));
	ret = q6asm_audio_map_shm_fd(prtd->audio_client, prtd->shm_ion_fd);
	if (ret < 0)
		pr_err("%s: failed to register ion fd\n", __func__);
		pr_err("%s: failed to map shm mem\n", __func__);
done:
	return ret;
}


static int msm_transcode_lib_ion_fd_map_put(struct snd_kcontrol *kcontrol,
				    struct snd_ctl_elem_value *ucontrol)
{
	struct snd_soc_component *comp = snd_kcontrol_chip(kcontrol);
	unsigned long fe_id = kcontrol->private_value;
	struct trans_loopback_pdata *pdata = (struct trans_loopback_pdata *)
				snd_soc_component_get_drvdata(comp);
	int ret = 0;

	if (fe_id >= MSM_FRONTEND_DAI_MAX) {
		pr_err("%s Received out of bounds invalid fe_id %lu\n",
			__func__, fe_id);
		ret = -EINVAL;
		goto done;
	}

	memcpy(&pdata->ion_fd[fe_id], ucontrol->value.bytes.data,
		   sizeof(pdata->ion_fd[fe_id]));
done:
	return ret;
}
@@ -773,7 +857,8 @@ done:
	return ret;
}

static int msm_transcode_add_ion_fd_cmd_control(struct snd_soc_pcm_runtime *rtd)
static int msm_transcode_add_shm_ion_fd_cmd_control(
					struct snd_soc_pcm_runtime *rtd)
{
	const char *mixer_ctl_name = "Playback ION FD";
	const char *deviceNo = "NN";
@@ -785,7 +870,53 @@ static int msm_transcode_add_ion_fd_cmd_control(struct snd_soc_pcm_runtime *rtd)
		.name = "?",
		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
		.info = msm_adsp_stream_cmd_info,
		.put = msm_transcode_ion_fd_map_put,
		.put = msm_transcode_shm_ion_fd_map_put,
		.private_value = 0,
		}
	};

	if (!rtd) {
		pr_err("%s NULL rtd\n", __func__);
		ret = -EINVAL;
		goto done;
	}

	ctl_len = strlen(mixer_ctl_name) + 1 + strlen(deviceNo) + 1;
	mixer_str = kzalloc(ctl_len, GFP_KERNEL);
	if (!mixer_str) {
		ret = -ENOMEM;
		goto done;
	}

	snprintf(mixer_str, ctl_len, "%s %d", mixer_ctl_name, rtd->pcm->device);
	fe_ion_fd_config_control[0].name = mixer_str;
	fe_ion_fd_config_control[0].private_value = rtd->dai_link->be_id;
	pr_debug("%s: Registering new mixer ctl %s\n", __func__, mixer_str);
	ret = snd_soc_add_platform_controls(rtd->platform,
				fe_ion_fd_config_control,
				ARRAY_SIZE(fe_ion_fd_config_control));
	if (ret < 0)
		pr_err("%s: failed to add ctl %s\n", __func__, mixer_str);

	kfree(mixer_str);
done:
	return ret;
}

static int msm_transcode_add_lib_ion_fd_cmd_control(
					struct snd_soc_pcm_runtime *rtd)
{
	const char *mixer_ctl_name = "Playback ION LIB FD";
	const char *deviceNo = "NN";
	char *mixer_str = NULL;
	int ctl_len = 0, ret = 0;
	struct snd_kcontrol_new fe_ion_fd_config_control[1] = {
		{
		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
		.name = "?",
		.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
		.info = msm_adsp_stream_cmd_info,
		.put = msm_transcode_lib_ion_fd_map_put,
		.private_value = 0,
		}
	};
@@ -877,9 +1008,14 @@ static int msm_transcode_loopback_new(struct snd_soc_pcm_runtime *rtd)
		pr_err("%s: ADSP Stream callback Control open failed\n",
			__func__);

	rc = msm_transcode_add_ion_fd_cmd_control(rtd);
	rc = msm_transcode_add_shm_ion_fd_cmd_control(rtd);
	if (rc)
		pr_err("%s: Could not add transcode shm ion fd Control\n",
			__func__);

	rc = msm_transcode_add_lib_ion_fd_cmd_control(rtd);
	if (rc)
		pr_err("%s: Could not add transcode ion fd Control\n",
		pr_err("%s: Could not add transcode lib ion fd Control\n",
			__func__);

	rc = msm_transcode_add_event_ack_cmd_control(rtd);
+5 −16
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@

#include <sound/apr_audio-v2.h>
#include <sound/q6asm-v2.h>
#include <sound/q6core.h>
#include <sound/q6audio-v2.h>
#include <sound/audio_cal_utils.h>
#include <sound/adsp_err.h>
@@ -7117,13 +7118,10 @@ fail_cmd:
	return rc;
}

int q6asm_send_ion_fd(struct audio_client *ac, int fd)
int q6asm_audio_map_shm_fd(struct audio_client *ac, int fd)
{
	struct ion_client *client;
	struct ion_handle *handle;
	ion_phys_addr_t paddr;
	size_t pa_len = 0;
	void *vaddr;
	int ret;
	int sz = 0;
	struct avs_rtic_shared_mem_addr shm;
@@ -7139,19 +7137,10 @@ int q6asm_send_ion_fd(struct audio_client *ac, int fd)
		goto fail_cmd;
	}

	ret = msm_audio_ion_import("audio_mem_client",
				   &client,
				   &handle,
				   fd,
				   NULL,
				   0,
				   &paddr,
				   &pa_len,
				   &vaddr);
	ret = msm_audio_ion_phys_assign("audio_shm_mem_client", fd,
					&paddr, &pa_len, HLOS_TO_ADSP);
	if (ret) {
		pr_err("%s: audio ION import failed, rc = %d\n",
		       __func__, ret);
		ret = -ENOMEM;
		pr_err("%s: shm ION phys failed, rc = %d\n", __func__, ret);
		goto fail_cmd;
	}
	/* get payload length */
Loading