qcacld-3.0: Move FTM cmd/event handle to common code
- replace the ftm command/event handle with common interfaces
- remove the event register from wma
- reconfigure the target_if_handle for FTM mode
- separate change will be raised to cleanup legacy code
Change-Id: If8e2dfc4c6bb400406be5d0d3fa53422db5c6fb5
CRs-fixed: 2162168
diff --git a/Kbuild b/Kbuild
index 6997edb..b772681 100644
--- a/Kbuild
+++ b/Kbuild
@@ -891,6 +891,35 @@
$(UMAC_GREEN_AP_DISP_DIR)/wlan_green_ap_api.o \
$(UMAC_GREEN_AP_DISP_DIR)/wlan_green_ap_ucfg_api.o \
$(WLAN_COMMON_ROOT)/target_if/green_ap/src/target_if_green_ap.o
+############# FTM CORE ############
+FTM_CORE_DIR := ftm
+TARGET_IF_FTM_DIR := target_if/ftm
+OS_IF_LINUX_FTM_DIR := os_if/linux/ftm
+
+FTM_CORE_SRC := $(WLAN_COMMON_ROOT)/$(FTM_CORE_DIR)/core/src
+FTM_DISP_SRC := $(WLAN_COMMON_ROOT)/$(FTM_CORE_DIR)/dispatcher/src
+TARGET_IF_FTM_SRC := $(WLAN_COMMON_ROOT)/$(TARGET_IF_FTM_DIR)/src
+OS_IF_FTM_SRC := $(WLAN_COMMON_ROOT)/$(OS_IF_LINUX_FTM_DIR)/src
+
+FTM_CORE_INC := $(WLAN_COMMON_INC)/$(FTM_CORE_DIR)/core/src
+FTM_DISP_INC := $(WLAN_COMMON_INC)/$(FTM_CORE_DIR)/dispatcher/inc
+TARGET_IF_FTM_INC := $(WLAN_COMMON_INC)/$(TARGET_IF_FTM_DIR)/inc
+OS_IF_FTM_INC := $(WLAN_COMMON_INC)/$(OS_IF_LINUX_FTM_DIR)/inc
+
+FTM_INC := -I$(FTM_DISP_INC) \
+ -I$(FTM_CORE_INC) \
+ -I$(OS_IF_FTM_INC) \
+ -I$(TARGET_IF_FTM_INC)
+
+FTM_OBJS := $(FTM_DISP_SRC)/wlan_ftm_init_deinit.o \
+ $(FTM_DISP_SRC)/wlan_ftm_ucfg_api.o \
+ $(FTM_CORE_SRC)/wlan_ftm_svc.o \
+ $(OS_IF_FTM_SRC)/wlan_cfg80211_ftm.o \
+ $(TARGET_IF_FTM_SRC)/target_if_ftm.o
+
+ifeq ($(CONFIG_LINUX_QCMBR),y)
+FTM_OBJS += $(OS_IF_FTM_SRC)/wlan_ioctl_ftm.o
+endif
############# UMAC_CMN_SERVICES ############
UMAC_COMMON_INC := -I$(WLAN_COMMON_INC)/umac/cmn_services/cmn_defs/inc \
@@ -1517,7 +1546,8 @@
$(TARGET_IF_INC) \
$(CLD_TARGET_IF_INC) \
$(OS_IF_INC) \
- $(GLOBAL_LMAC_IF_INC)
+ $(GLOBAL_LMAC_IF_INC) \
+ $(FTM_INC)
INCS += $(WMA_INC) \
$(UAPI_INC) \
@@ -1599,7 +1629,8 @@
$(SYS_OBJS) \
$(QDF_OBJS) \
$(CDS_OBJS) \
- $(DFS_OBJS)
+ $(DFS_OBJS) \
+ $(FTM_OBJS)
OBJS += $(WMA_OBJS) \
$(TXRX_OBJS) \
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index 5f304eb..53df097 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -81,6 +81,7 @@
#endif
#include <cdp_txrx_handle.h>
#include <wlan_cfg80211_scan.h>
+#include <wlan_cfg80211_ftm.h>
#ifdef FEATURE_WLAN_EXTSCAN
#include "wlan_hdd_ext_scan.h"
@@ -20427,38 +20428,17 @@
#if defined(QCA_WIFI_FTM)
case WLAN_HDD_TM_CMD_WLAN_FTM:
{
- int buf_len;
- void *buf;
- QDF_STATUS status;
-
- if (hdd_get_conparam() != QDF_GLOBAL_FTM_MODE) {
- hdd_err("Device is not in FTM mode");
- return -EINVAL;
- }
-
- if (!tb[WLAN_HDD_TM_ATTR_DATA]) {
- hdd_err("WLAN_HDD_TM_ATTR_DATA attribute is invalid");
- return -EINVAL;
- }
-
- buf = nla_data(tb[WLAN_HDD_TM_ATTR_DATA]);
- buf_len = nla_len(tb[WLAN_HDD_TM_ATTR_DATA]);
-
- hdd_debug("****FTM Tx cmd len = %d*****", buf_len);
-
- status = wlan_hdd_ftm_testmode_cmd(buf, buf_len);
-
- if (status != QDF_STATUS_SUCCESS)
- err = -EBUSY;
+ err = wlan_cfg80211_ftm_testmode_cmd(hdd_ctx->hdd_pdev,
+ data, len);
break;
}
#endif
-
default:
hdd_err("command: %d not supported",
- nla_get_u32(tb[WLAN_HDD_TM_ATTR_CMD]));
+ nla_get_u32(tb[WLAN_HDD_TM_ATTR_CMD]));
return -EOPNOTSUPP;
}
+
EXIT();
return err;
}
diff --git a/core/hdd/src/wlan_hdd_ftm.c b/core/hdd/src/wlan_hdd_ftm.c
index af76c4b..46fba90 100644
--- a/core/hdd/src/wlan_hdd_ftm.c
+++ b/core/hdd/src/wlan_hdd_ftm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -54,6 +54,7 @@
#include "ol_fw.h"
#include "wlan_hdd_cfg80211.h"
#include "hif.h"
+#include <wlan_ioctl_ftm.h>
#endif
#define HDD_FTM_WMA_PRE_START_TIMEOUT (30000) /* 30 seconds */
@@ -180,50 +181,17 @@
struct qcmbr_data *pqcmbr_data)
{
int ret = 0;
- struct qcmbr_queue *qcmbr_buf = NULL;
+ struct hdd_context *hdd_ctx;
- switch (pqcmbr_data->cmd) {
- case ATH_XIOCTL_UNIFIED_UTF_CMD: {
- pqcmbr_data->copy_to_user = 0;
- if (pqcmbr_data->length &&
- pqcmbr_data->length <= sizeof(pqcmbr_data->buf)) {
- if (wlan_hdd_ftm_testmode_cmd(pqcmbr_data->buf,
- pqcmbr_data->
- length)
- != QDF_STATUS_SUCCESS) {
- ret = -EBUSY;
- } else {
- ret = 0;
- }
- }
- }
- break;
+ hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+ ret = wlan_hdd_validate_context(hdd_ctx);
+ if (ret)
+ return ret;
- case ATH_XIOCTL_UNIFIED_UTF_RSP: {
- pqcmbr_data->copy_to_user = 1;
-
- spin_lock_bh(&qcmbr_queue_lock);
- if (!list_empty(&qcmbr_queue_head)) {
- qcmbr_buf = list_first_entry(&qcmbr_queue_head,
- struct qcmbr_queue,
- list);
- list_del(&qcmbr_buf->list);
- ret = 0;
- } else {
- ret = -1;
- }
- spin_unlock_bh(&qcmbr_queue_lock);
-
- if (!ret) {
- memcpy(pqcmbr_data->buf, qcmbr_buf->utf_buf,
- (MAX_UTF_LENGTH + 4));
- qdf_mem_free(qcmbr_buf);
- } else {
- ret = -EAGAIN;
- }
- }
- break;
- }
+ ret = wlan_ioctl_ftm_testmode_cmd(hdd_ctx->hdd_pdev,
+ pqcmbr_data->cmd,
+ pqcmbr_data->buf,
+ pqcmbr_data->length);
return ret;
}
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 7dcd862..f5a0122 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -2623,11 +2623,6 @@
hdd_ctx->driver_status = DRIVER_MODULES_OPENED;
hdd_info("Wlan transitioned (now OPENED)");
- if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) {
- sme_register_ftm_msg_processor(hdd_ctx->hHal,
- hdd_ftm_mc_process_msg);
- break;
- }
if (unint) {
hdd_debug("In phase-1 initialization don't enable modules");
break;
diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h
index 09f22df..bbf1a8e 100644
--- a/core/sme/inc/sme_api.h
+++ b/core/sme/inc/sme_api.h
@@ -485,9 +485,6 @@
#endif
-void sme_register_ftm_msg_processor(tHalHandle hal,
- hdd_ftm_msg_processor callback);
-
extern QDF_STATUS sme_enter_wowl(tHalHandle hHal,
void (*enter_wowl_callback_routine)(void
*callbackContext,
diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c
index b57559d..1758dfd 100644
--- a/core/sme/src/common/sme_api.c
+++ b/core/sme/src/common/sme_api.c
@@ -4158,29 +4158,6 @@
#endif
/**
- * sme_register_ftm_msg_processor() - registers hdd ftm message processor
- * function to MAC/SYS
- *
- * @hal: hal handle
- * @callback: hdd function that has to be registered
- *
- * Return: void
- */
-void sme_register_ftm_msg_processor(tHalHandle hal,
- hdd_ftm_msg_processor callback)
-{
- tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
-
- if (mac_ctx == NULL) {
- QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
- FL("mac ctx is NULL"));
- return;
- }
-
- mac_ctx->ftm_msg_processor_callback = callback;
-}
-
-/**
* sme_enter_wowl(): SME API exposed to HDD to request enabling of WOWL mode.
* @hal_ctx - The handle returned by mac_open.
* @enter_wowl_callback_routine - Callback routine provided by HDD.
diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c
index 27f6094..f866e3f 100644
--- a/core/wma/src/wma_main.c
+++ b/core/wma/src/wma_main.c
@@ -2580,11 +2580,6 @@
wma_handle->tx_chain_mask_cck = cds_cfg->tx_chain_mask_cck;
wma_handle->self_gen_frm_pwr = cds_cfg->self_gen_frm_pwr;
-
-#if defined(QCA_WIFI_FTM)
- if (cds_get_conparam() == QDF_GLOBAL_FTM_MODE)
- wma_utf_attach(wma_handle);
-#endif /* QCA_WIFI_FTM */
wma_init_max_no_of_peers(wma_handle, cds_cfg->max_station);
cds_cfg->max_station = wma_get_number_of_peers_supported(wma_handle);
@@ -2973,9 +2968,6 @@
qdf_mem_free(wma_handle->interfaces);
err_scn_context:
-#if defined(QCA_WIFI_FTM)
- wma_utf_detach(wma_handle);
-#endif /* QCA_WIFI_FTM */
qdf_mem_free(((p_cds_contextType) cds_context)->cfg_ctx);
OS_FREE(wmi_handle);
@@ -4058,12 +4050,6 @@
memctx));
}
-#if defined(QCA_WIFI_FTM)
- /* Detach UTF and unregister the handler */
- if (cds_get_conparam() == QDF_GLOBAL_FTM_MODE)
- wma_utf_detach(wma_handle);
-#endif /* QCA_WIFI_FTM */
-
if (NULL != wma_handle->pGetRssiReq) {
qdf_mem_free(wma_handle->pGetRssiReq);
wma_handle->pGetRssiReq = NULL;