qcacmn: add utf event exception handler for invalid pdev_id
For the case in DBS, the psoc and pdev is one-to-one mapping,
but firmware will send per pdev_id information to host according
to the radio being tested, add a backup query to SOC_ID if the
pdev_id passed along from utf_event is invalid/unsupported to
work around this case.
Change-Id: I67645da67a968b66b720f211a9a0815a4cc22845
CRs-fixed: 2286291
diff --git a/target_if/core/inc/target_if.h b/target_if/core/inc/target_if.h
index c852c9d..dda24e8 100644
--- a/target_if/core/inc/target_if.h
+++ b/target_if/core/inc/target_if.h
@@ -30,6 +30,8 @@
#include "wmi_unified_priv.h"
#include "wmi_unified_param.h"
+#define TGT_WMI_PDEV_ID_SOC 0 /* WMI SOC ID */
+
/* ASCII "TGT\0" */
#define TGT_MAGIC 0x54575400
diff --git a/target_if/ftm/src/target_if_ftm.c b/target_if/ftm/src/target_if_ftm.c
index 40a916d..c27f074 100644
--- a/target_if/ftm/src/target_if_ftm.c
+++ b/target_if/ftm/src/target_if_ftm.c
@@ -43,6 +43,7 @@
struct wmi_host_pdev_utf_event event;
struct wlan_lmac_if_ftm_rx_ops *ftm_rx_ops;
QDF_STATUS status = QDF_STATUS_E_FAILURE;
+ uint32_t pdev_id;
psoc = target_if_get_psoc_from_scn_hdl(sc);
if (!psoc) {
@@ -64,11 +65,18 @@
return QDF_STATUS_E_INVAL;
}
- pdev = wlan_objmgr_get_pdev_by_id(psoc, event.pdev_id, WLAN_FTM_ID);
+ pdev_id = event.pdev_id;
+ pdev = wlan_objmgr_get_pdev_by_id(psoc, pdev_id, WLAN_FTM_ID);
if (!pdev) {
- ftm_err("null pdev");
- wlan_objmgr_psoc_release_ref(psoc, WLAN_FTM_ID);
- return QDF_STATUS_E_INVAL;
+ pdev_id = TGT_WMI_PDEV_ID_SOC;
+ ftm_debug("Can't find pdev by pdev_id %d, try soc_id",
+ event.pdev_id);
+ pdev = wlan_objmgr_get_pdev_by_id(psoc, pdev_id, WLAN_FTM_ID);
+ if (!pdev) {
+ ftm_err("null pdev");
+ wlan_objmgr_psoc_release_ref(psoc, WLAN_FTM_ID);
+ return QDF_STATUS_E_INVAL;
+ }
}
ftm_rx_ops = target_if_ftm_get_rx_ops(psoc);