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
This commit is contained in:
Ryan Hsu 2018-01-02 13:57:56 -08:00 • committed by snandini
commit c8b27a4352
7 changed files with 49 additions and 115 deletions

35
Kbuild
View file

@ -891,6 +891,35 @@ UMAC_GREEN_AP_OBJS := $(UMAC_GREEN_AP_CORE_DIR)/wlan_green_ap_main.o \
$(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 @@ INCS := $(HDD_INC) \
$(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 @@ OBJS := $(HDD_OBJS) \
$(SYS_OBJS) \
$(QDF_OBJS) \
$(CDS_OBJS) \
$(DFS_OBJS)
$(DFS_OBJS) \
$(FTM_OBJS)
OBJS += $(WMA_OBJS) \
$(TXRX_OBJS) \

View file

@ -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 @@ static int __wlan_hdd_cfg80211_testmode(struct wiphy *wiphy,
#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;
}

View file

@ -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 @@ static int wlan_hdd_qcmbr_command(struct hdd_adapter *adapter,
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;
}

View file

@ -2623,11 +2623,6 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx,
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;

View file

@ -485,9 +485,6 @@ static inline void sme_deregister_oem_data_rsp_callback(tHalHandle h_hal)
#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,

View file

@ -4157,29 +4157,6 @@ QDF_STATUS sme_oem_get_capability(tHalHandle hal,
}
#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.

View file

@ -2580,11 +2580,6 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
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 @@ err_event_init:
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 @@ QDF_STATUS wma_close(void)
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;