Merge "agm: fix multiple out of bound read issues in agm hidl interface"
diff --git a/service/inc/private/agm/device.h b/service/inc/private/agm/device.h
index 7fda4a3..9bd6a08 100644
--- a/service/inc/private/agm/device.h
+++ b/service/inc/private/agm/device.h
@@ -89,6 +89,7 @@
#define PCM_RT_PROXY 0x7
#define AUDIOSS_DMA 0x8
#define PCM_DUMMY 0x9
+#define BTFM_PROXY 0xa
#define AUDIO_OUTPUT 0x1 /**< playback usecases*/
#define AUDIO_INPUT 0x2 /**< capture/voice activation usecases*/
diff --git a/service/src/device_hw_ep.c b/service/src/device_hw_ep.c
index 155f0a0..bee6bce 100644
--- a/service/src/device_hw_ep.c
+++ b/service/src/device_hw_ep.c
@@ -178,6 +178,8 @@
hw_ep_info->intf = AUDIOSS_DMA;
else if (!strcmp(intf, "PCM_DUMMY"))
hw_ep_info->intf = PCM_DUMMY;
+ else if (!strcmp(intf, "BTFM_PROXY"))
+ hw_ep_info->intf = BTFM_PROXY;
else {
AGM_LOGE("No matching intf found\n");
return -EINVAL;
@@ -232,7 +234,7 @@
}
-static int populate_pcm_rt_proxy_ep_info(hw_ep_info_t *hw_ep_info, char *value)
+static int populate_btfm_rt_proxy_ep_info(hw_ep_info_t *hw_ep_info, char *value)
{
char arg[DEV_ARG_SIZE] = {0};
struct hw_ep_pcm_rt_proxy_config *pcm_rt_proxy_config;
@@ -410,7 +412,8 @@
case USB_AUDIO:
return populate_slim_dp_usb_ep_info(&dev_obj->hw_ep_info, value);
case PCM_RT_PROXY:
- return populate_pcm_rt_proxy_ep_info(&dev_obj->hw_ep_info, value);
+ case BTFM_PROXY:
+ return populate_btfm_rt_proxy_ep_info(&dev_obj->hw_ep_info, value);
case AUDIOSS_DMA:
return populate_audioss_dma_ep_info(&dev_obj->hw_ep_info, value);
case PCM_DUMMY:
diff --git a/service/src/graph_module.c b/service/src/graph_module.c
index f77aa0f..1a0cb70 100644
--- a/service/src/graph_module.c
+++ b/service/src/graph_module.c
@@ -744,10 +744,11 @@
int ret = 0;
struct device_obj *dev_obj = mod->dev_obj;
- if(dev_obj->hw_ep_info.intf == PCM_RT_PROXY || dev_obj->hw_ep_info.intf == PCM_DUMMY) {
+ if ((dev_obj->hw_ep_info.intf == PCM_RT_PROXY) ||
+ (dev_obj->hw_ep_info.intf == PCM_DUMMY) ||
+ (dev_obj->hw_ep_info.intf == BTFM_PROXY)) {
AGM_LOGD("no ep media config for %d\n", dev_obj->hw_ep_info.intf);
- }
- else {
+ } else {
ret = configure_hw_ep_media_config(mod, graph_obj);
if (ret) {
AGM_LOGE("hw_ep_media_config failed %d", ret);
@@ -772,19 +773,15 @@
break;
case DISPLAY_PORT:
case USB_AUDIO:
- AGM_LOGD("no ep configuration for %d\n", dev_obj->hw_ep_info.intf);
- break;
case PCM_RT_PROXY:
- AGM_LOGD("no ep configuration for %d\n", dev_obj->hw_ep_info.intf);
- break;
case AUDIOSS_DMA:
- AGM_LOGD("no ep configuration for %d\n", dev_obj->hw_ep_info.intf);
- break;
case PCM_DUMMY:
+ case BTFM_PROXY:
AGM_LOGD("no ep configuration for %d\n", dev_obj->hw_ep_info.intf);
break;
default:
AGM_LOGE("hw intf %d not enabled yet", dev_obj->hw_ep_info.intf);
+ ret = -EINVAL;
break;
}
return ret;
diff --git a/service/src/session_obj.c b/service/src/session_obj.c
index f3295b0..7809de4 100644
--- a/service/src/session_obj.c
+++ b/service/src/session_obj.c
@@ -1081,7 +1081,7 @@
pthread_mutex_lock(&hwep_lock);
- //For Slimbus EP - First configure the slave ports via device_prepare/start
+ //For Slimbus/CP EP - First configure the slave ports via device_prepare/start
//and then start the master side via graph_start.
list_for_each(node, &sess_obj->aif_pool) {
aif_obj = node_to_item(node, struct aif, node);
@@ -1090,8 +1090,9 @@
goto device_stop;
}
- if (aif_obj->dev_obj->hw_ep_info.intf == SLIMBUS) {
- AGM_LOGD("configuring device early - for SLIMBUS EPs\n");
+ if ((aif_obj->dev_obj->hw_ep_info.intf == SLIMBUS) ||
+ (aif_obj->dev_obj->hw_ep_info.intf == BTFM_PROXY)) {
+ AGM_LOGD("configuring device early - for SLIMBUS/Connectivity Proxy EPs\n");
if (aif_obj->state == AIF_OPENED || aif_obj->state == AIF_STOPPED) {
ret = device_prepare(aif_obj->dev_obj);
if (ret) {
@@ -1128,9 +1129,11 @@
goto unwind;
}
- //Continue/SKIP for SLIMBUS EP as they are started early.
- if (aif_obj->dev_obj->hw_ep_info.intf == SLIMBUS)
+ //Continue/SKIP for SLIMBUS/Connectivity Proxy EP as they are started early.
+ if ((aif_obj->dev_obj->hw_ep_info.intf == SLIMBUS) ||
+ (aif_obj->dev_obj->hw_ep_info.intf == BTFM_PROXY)) {
continue;
+ }
if (aif_obj->state == AIF_OPENED || aif_obj->state == AIF_STOPPED) {
ret = device_prepare(aif_obj->dev_obj);