summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2014-08-07 12:59:57 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2014-08-07 12:59:57 -0700
commit7bfb44d9963a30eaab2375c31b05970d30b7ff64 (patch)
treed8d5465e5dae4c106c6255f61594ccc533dc6ba7
parentc04205e88a8d60a16cbbca85e2ddab11f2c7eceb (diff)
parent19a01eff859a160a006d673f1409c618c290fdc8 (diff)
Merge "Release 1.0.0.162 QCACLD WLAN Driver"
-rw-r--r--CORE/CLD_TXRX/HTT/htt_h2t.c32
-rw-r--r--CORE/HDD/inc/wlan_hdd_ftm.h155
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h8
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c14
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c50
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_ftm.c4580
-rw-r--r--CORE/HDD/src/wlan_hdd_ipa.c15
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c36
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c15
-rw-r--r--CORE/HDD/src/wlan_hdd_trace.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_wowl.c2
-rw-r--r--CORE/MAC/inc/aniGlobal.h24
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/sirApi.h160
-rw-r--r--CORE/MAC/inc/wniApi.h14
-rw-r--r--CORE/MAC/src/include/sirParams.h5
-rw-r--r--CORE/MAC/src/pe/include/limGlobal.h7
-rw-r--r--CORE/MAC/src/pe/lim/limAssocUtils.c6
-rw-r--r--CORE/MAC/src/pe/lim/limProcessActionFrame.c4
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMessageQueue.c114
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c3
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c288
-rw-r--r--CORE/MAC/src/pe/lim/limProcessTdls.c2453
-rw-r--r--CORE/MAC/src/pe/lim/limSendMessages.c101
-rw-r--r--CORE/MAC/src/pe/lim/limSendMessages.h5
-rw-r--r--CORE/MAC/src/pe/lim/limTimerUtils.c33
-rw-r--r--CORE/MAC/src/pe/lim/limTimerUtils.h5
-rw-r--r--CORE/MAC/src/pe/lim/limTrace.c38
-rw-r--r--CORE/MAC/src/pe/lim/limTypes.h30
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.h6
-rw-r--r--CORE/MAC/src/pe/pmm/pmmApi.c14
-rw-r--r--CORE/SERVICES/WMA/wma.c56
-rw-r--r--CORE/SERVICES/WMA/wma.h3
-rw-r--r--CORE/SME/inc/csrApi.h19
-rw-r--r--CORE/SME/inc/csrInternal.h24
-rw-r--r--CORE/SME/inc/pmcApi.h3
-rw-r--r--CORE/SME/inc/smeInside.h31
-rw-r--r--CORE/SME/inc/smeInternal.h7
-rw-r--r--CORE/SME/inc/sme_Api.h67
-rw-r--r--CORE/SME/src/ccm/ccmApi.c15
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c66
-rw-r--r--CORE/SME/src/csr/csrTdlsProcess.c511
-rw-r--r--CORE/SME/src/pmc/pmcApi.c39
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c226
-rw-r--r--CORE/SME/src/sme_common/sme_Trace.c4
-rw-r--r--CORE/SVC/external/wlan_nlink_common.h1
-rw-r--r--CORE/SVC/src/ptt/wlan_ptt_sock_svc.c3
-rw-r--r--CORE/SYS/legacy/src/system/src/sysEntryFunc.c47
-rw-r--r--CORE/TL/src/wlan_qct_tl.c110
-rw-r--r--CORE/VOSS/inc/vos_trace.h2
-rw-r--r--CORE/VOSS/src/vos_nvitem.c5
-rw-r--r--CORE/VOSS/src/vos_trace.c4
-rw-r--r--CORE/WDA/inc/legacy/halMsgApi.h3
54 files changed, 351 insertions, 9120 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt_h2t.c b/CORE/CLD_TXRX/HTT/htt_h2t.c
index a2c61bff2c67..3ac693fd6f13 100644
--- a/CORE/CLD_TXRX/HTT/htt_h2t.c
+++ b/CORE/CLD_TXRX/HTT/htt_h2t.c
@@ -227,13 +227,31 @@ htt_h2t_rx_ring_cfg_msg_ll(struct htt_pdev_t *pdev)
#ifndef REMOVE_PKT_LOG
if (ol_cfg_is_packet_log_enabled(pdev->ctrl_pdev))
{
- enable_ctrl_data = 1;
- enable_mgmt_data = 1;
- enable_null_data = 1;
- enable_phy_data = 1;
- enable_hdr = 1;
- enable_ppdu_start= 1;
- enable_ppdu_end = 1;
+ if (ol_cfg_is_full_reorder_offload(pdev->ctrl_pdev)) {
+ /* In fw with full reorder offload, when pktlog is enabled mgmt/ctrl/
+ null frames are routed to fw remote ring which are discarded with
+ the error bit set. As a result they are not sent to the BA state
+ machine which causes a problem.
+ Disable ctrl/mgmt/null flag since frames with status
+ HTT_RX_IND_MPDU_STATUS_MGMT_CTRL are always dropped by the host.
+ The ppdu start and end flags are only used in monitor mode which
+ is not supported on CLD.*/
+ enable_ctrl_data = 0;
+ enable_mgmt_data = 0;
+ enable_null_data = 0;
+ enable_phy_data = 1;
+ enable_hdr = 1;
+ enable_ppdu_start= 0;
+ enable_ppdu_end = 0;
+ } else {
+ enable_ctrl_data = 1;
+ enable_mgmt_data = 1;
+ enable_null_data = 1;
+ enable_phy_data = 1;
+ enable_hdr = 1;
+ enable_ppdu_start= 1;
+ enable_ppdu_end = 1;
+ }
/* Disable ASPM when pkt log is enabled */
adf_os_print("Pkt log is enabled\n");
htt_htc_disable_aspm();
diff --git a/CORE/HDD/inc/wlan_hdd_ftm.h b/CORE/HDD/inc/wlan_hdd_ftm.h
index 97217240af40..d470d24e13e9 100644
--- a/CORE/HDD/inc/wlan_hdd_ftm.h
+++ b/CORE/HDD/inc/wlan_hdd_ftm.h
@@ -38,104 +38,6 @@
#define WLAN_FTM_SUCCESS 0
#define WLAN_FTM_FAILURE 1
-#define WLAN_FTM_START 1
-#define WLAN_FTM_STOP 2
-#define WLAN_FTM_CMD 3
-
-
-#define WLAN_FTM_PHY_CMD 100
-#define SIR_HAL_FTM_CMD 10
-#define QUALCOMM_MODULE_TYPE 2
-#define WLAN_FTM_COMMAND_TIME_OUT 1000
-#define PHYDBG_PREAMBLE_NOT_SUPPORTED 0xFF
-/* Private ioctls and their sub-ioctls */
-#define WLAN_FTM_PRIV_SET_INT_GET_NONE (SIOCIWFIRSTPRIV + 0)
-#define WE_FTM_ON_OFF 1
-#define WE_TX_PKT_GEN 2
-#define WE_SET_TX_IFS 3
-#define WE_SET_TX_PKT_CNT 4
-#define WE_SET_TX_PKT_LEN 5
-#define WE_SET_CHANNEL 6
-#define WE_SET_TX_POWER 7
-#define WE_CLEAR_RX_PKT_CNT 8
-#define WE_RX 9
-#define WE_ENABLE_CHAIN 10
-#define WE_SET_PWR_CNTL_MODE 11
-#define WE_ENABLE_DPD 12
-#define WE_SET_CB 13
-
-/* Private ioctls and their sub-ioctls */
-#define WLAN_FTM_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1)
-#define WE_GET_CHANNEL 1
-#define WE_GET_TX_POWER 2
-#define WE_GET_RX_PKT_CNT 3
-
-/* Private ioctls and their sub-ioctls */
-#define WLAN_FTM_PRIV_SET_INT_GET_INT (SIOCIWFIRSTPRIV + 2)
-
-/* Private ioctls and their sub-ioctls */
-#define WLAN_FTM_PRIV_SET_CHAR_GET_NONE (SIOCIWFIRSTPRIV + 3)
-#define WE_SET_MAC_ADDRESS 1
-#define WE_SET_TX_RATE 2
-
-/* Private ioctls and their sub-ioctls */
-#define WLAN_FTM_PRIV_SET_THREE_INT_GET_NONE (SIOCIWFIRSTPRIV + 4)
-#define WE_SET_WLAN_DBG 1
-
-/* Private ioctls and their sub-ioctls */
-#define WLAN_FTM_PRIV_GET_CHAR_SET_NONE (SIOCIWFIRSTPRIV + 5)
-#define WE_GET_MAC_ADDRESS 1
-#define WE_GET_TX_RATE 2
-#define WE_GET_FTM_VERSION 3
-#define WE_GET_FTM_STATUS 4
-#define WE_GET_RX_RSSI 5
-
-/* Private ioctls and their sub-ioctls */
-#define WLAN_FTM_PRIV_SET_NONE_GET_NONE (SIOCIWFIRSTPRIV + 6)
-#define WE_SET_NV_DEFAULTS 1
-
-#define WE_FTM_MAX_STR_LEN 1024
-
-#define MAX_NV_TABLE_SIZE 40000
-
-typedef enum {
- WLAN_FTM_CMD_START = 1,
- WLAN_FTM_CMD_STOP,
- WLAN_FTM_CMD_CMD
-} wlan_hdd_ftm_cmds;
-typedef struct ftm_hdr_s {
- v_U16_t cmd_id;
- v_U16_t data_len;
- v_U16_t respPktSize;
-} ftm_hdr_t;
-
-/* The request buffer of FTM which contains a byte of command and the request */
-typedef struct wlan_hdd_ftm_payload_s {
- v_U16_t ftm_cmd_type;
- v_U8_t pFtmCmd[1];
-}wlan_hdd_ftm_payload;
-#define SIZE_OF_FTM_DIAG_HEADER_LEN 12
-/* the FTM command/response structure */
-typedef struct wlan_hdd_ftm_request_s
-{
- v_U8_t cmd_code;
- v_U8_t sub_sys_id;
- v_U16_t mode_id;
- ftm_hdr_t ftm_hdr;
- v_U16_t module_type;
- wlan_hdd_ftm_payload ftmpkt;
-}wlan_hdd_ftm_request_t;
-
-typedef struct wlan_hdd_ftm_response_s
-{
- v_U8_t cmd_code;
- v_U8_t sub_sys_id;
- v_U16_t mode_id;
- ftm_hdr_t ftm_hdr;
- v_U16_t ftm_err_code;
- wlan_hdd_ftm_payload ftmpkt;
-}wlan_hdd_ftm_response_t;
-
typedef enum {
WLAN_FTM_INITIALIZED,
WLAN_FTM_STOPPED,
@@ -144,72 +46,15 @@ typedef enum {
typedef struct wlan_hdd_ftm_status_s
{
v_U8_t ftm_state;
- wlan_hdd_ftm_request_t *pRequestBuf;
- wlan_hdd_ftm_response_t *pResponseBuf;
- tAniNlHdr *wnl;
/**vos event */
vos_event_t ftm_vos_event;
/** completion variable for ftm command to complete*/
struct completion ftm_comp_var;
v_BOOL_t IsCmdPending;
- v_BOOL_t cmd_iwpriv;
-
- /** Large size of NV Table Handle **/
- eNvTable processingNVTable;
- v_U32_t targetNVTableSize;
- v_U8_t *targetNVTablePointer;
- v_U32_t processedNVTableSize;
- v_U8_t *tempNVTableBuffer;
-
} wlan_hdd_ftm_status_t;
-typedef struct ftm_msg_s
-{
- /* This field can be used as sequence
- number/dialogue token for matching request/response */
- v_U16_t type;
-
- /* This guy carries the command buffer along with command id */
- void *cmd_ptr;
- v_U32_t bodyval;
-} ftm_msg_t;
-typedef struct ftm_rsp_msg_s
-{
- v_U16_t msgId;
- v_U16_t msgBodyLength;
- v_U32_t respStatus;
- v_U8_t *msgResponse;
-} ftm_rsp_msg_t;
-
-typedef struct rateIndex2Preamble
-{
- v_U16_t rate_index;
- v_U16_t Preamble;
-} rateIndex2Preamble_t;
-typedef struct freq_chan_s
-{
- v_U16_t freq;
- v_U16_t chan;
-} freq_chan_t;
-
-typedef struct rateStr2rateIndex_s
-{
- v_U16_t rate_index;
- char rate_str[30];
-} rateStr2rateIndex_t;
-
-
-#define FTM_SWAP16(A) ((((tANI_U16)(A) & 0xff00) >> 8) | \
- (((tANI_U16)(A) & 0x00ff) << 8) \
- )
-#define PTT_HEADER_LENGTH 8
-
-#define FTM_VOS_EVENT_WAIT_TIME 10000
-
-#define SIZE_OF_TABLE(a) (sizeof(a) / sizeof(a[0]))
int wlan_hdd_ftm_open(hdd_context_t *pHddCtx);
-void wlan_hdd_process_ftm_cmd (hdd_context_t *pHddCtx,tAniNlHdr *wnl);
int wlan_hdd_ftm_close(hdd_context_t *pHddCtx);
#if defined(QCA_WIFI_FTM)
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 2522285a0aa8..4f71219bcbb1 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -227,6 +227,10 @@
#define HDD_MIN_TX_POWER (-100) // minimum tx power
#define HDD_MAX_TX_POWER (+100) // maximum tx power
+#ifdef WLAN_FEATURE_LPSS
+#define HDD_RSSI_THRESHOLD 10 /* RSSI threshold set to 10 for temp */
+#endif
+
typedef v_U8_t tWlanHddMacAddr[HDD_MAC_ADDR_LEN];
/*
@@ -1009,6 +1013,9 @@ struct hdd_adapter_s
#endif
v_S7_t rssi;
+#ifdef WLAN_FEATURE_LPSS
+ v_S7_t last_rssi_send;
+#endif
tANI_U8 snr;
@@ -1670,6 +1677,7 @@ void wlan_hdd_send_status_pkg(hdd_adapter_t *pAdapter,
void wlan_hdd_send_version_pkg(v_U32_t fw_version,
v_U32_t chip_id,
const char *chip_name);
+void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx);
#endif
void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len);
#ifdef FEATURE_WLAN_AUTO_SHUTDOWN
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 4da1261cd401..11a8218ca028 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -1398,6 +1398,11 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs
if ( eCSR_ROAM_RESULT_ASSOCIATED == roamResult )
{
+ if (NULL == pRoamInfo) {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ FL("pRoamInfo is NULL"));
+ return eHAL_STATUS_FAILURE;
+ }
if ( !hddDisconInProgress )
{
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
@@ -2219,7 +2224,8 @@ static eHalStatus hdd_RoamSetKeyCompleteHandler( hdd_adapter_t *pAdapter, tCsrRo
{
sme_PsOffloadEnableDeferredPowerSave(
WLAN_HDD_GET_HAL_CTX(pAdapter),
- pAdapter->sessionId);
+ pAdapter->sessionId,
+ pHddStaCtx->hdd_ReassocScenario);
}
}
else
@@ -3037,6 +3043,7 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId,
(WLAN_HDD_GET_CTX(pAdapter))->hdd_mcastbcast_filter_set = FALSE;
}
pHddStaCtx->ft_carrier_on = FALSE;
+ pHddStaCtx->hdd_ReassocScenario = FALSE;
break;
case eCSR_ROAM_FT_START:
@@ -3199,7 +3206,6 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId,
before the ENTER_BMPS_REQ ensures Listen Interval is
regained back to LI * Modulated DTIM */
hdd_set_pwrparams(pHddCtx);
- pHddStaCtx->hdd_ReassocScenario = VOS_FALSE;
/* At this point, device should not be in BMPS;
if due to unexpected scenario, if we are in BMPS,
@@ -3215,6 +3221,8 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId,
}
}
halStatus = hdd_RoamSetKeyCompleteHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult );
+ if (eCSR_ROAM_RESULT_AUTHENTICATED == roamResult)
+ pHddStaCtx->hdd_ReassocScenario = VOS_FALSE;
}
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
pRoamInfo->roamSynchInProgress = VOS_FALSE;
@@ -3885,8 +3893,6 @@ int iw_set_essid(struct net_device *dev,
hddLog( LOGE, FL("Disconnect event timed out"));
}
}
- } else {
- return -EINVAL;
}
/** when cfg80211 defined, wpa_supplicant wext driver uses
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index a2f478f6a268..2f4415602681 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -5951,10 +5951,6 @@ static int __wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy,
eCsrRoamBssType LastBSSType;
hdd_config_t *pConfig = NULL;
eMib_dot11DesiredBssType connectedBssType;
-#ifdef WLAN_FEATURE_LPSS
- hdd_adapter_t *pDataAdapter = NULL;
- hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL;
-#endif
unsigned long rc;
VOS_STATUS vstatus;
eHalStatus hstatus;
@@ -6275,22 +6271,7 @@ done:
#endif /* WLAN_BTAMP_FEATURE */
#ifdef WLAN_FEATURE_LPSS
- vstatus = hdd_get_front_adapter(pHddCtx, &pAdapterNode);
- while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == vstatus) {
- pDataAdapter = pAdapterNode->pAdapter;
- if (pDataAdapter) {
- if (pDataAdapter->device_mode == WLAN_HDD_INFRA_STATION)
- break;
- if (pDataAdapter->device_mode == WLAN_HDD_P2P_CLIENT)
- break;
- if (pDataAdapter->device_mode == WLAN_HDD_P2P_DEVICE)
- break;
- }
- vstatus = hdd_get_next_adapter (pHddCtx, pAdapterNode, &pNext);
- pAdapterNode = pNext;
- }
-
- wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0);
+ wlan_hdd_send_all_scan_intf_info(pHddCtx);
#endif
EXIT();
@@ -10511,6 +10492,10 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy,
eDataRate11ACMaxMcs vhtMaxMcs;
#endif /* WLAN_FEATURE_11AC */
+#ifdef WLAN_FEATURE_LPSS
+ v_S7_t last_rssi_send;
+#endif /* WLAN_FEATURE_LPSS */
+
ENTER();
if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) ||
@@ -10531,9 +10516,20 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy,
return status;
}
+#ifdef WLAN_FEATURE_LPSS
+ last_rssi_send = pAdapter->last_rssi_send;
+#endif
wlan_hdd_get_rssi(pAdapter, &sinfo->signal);
sinfo->filled |= STATION_INFO_SIGNAL;
+#ifdef WLAN_FEATURE_LPSS
+ if ((pAdapter->rssi >= last_rssi_send + HDD_RSSI_THRESHOLD) ||
+ (pAdapter->rssi <= last_rssi_send - HDD_RSSI_THRESHOLD)) {
+ pAdapter->last_rssi_send = pAdapter->rssi;
+ wlan_hdd_send_status_pkg(pAdapter, pHddStaCtx, 1, 1);
+ }
+#endif
+
wlan_hdd_get_station_stats(pAdapter);
rate_flags = pAdapter->hdd_stats.ClassA_stat.tx_rate_flags;
@@ -12548,7 +12544,6 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy,
rc = wait_for_completion_timeout(&pAdapter->tdls_del_station_comp,
msecs_to_jiffies(WAIT_TIME_TDLS_DEL_STA));
if (!rc) {
- wlan_hdd_tdls_set_peer_link_status(pTdlsPeer, eTDLS_LINK_IDLE);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: Del station timed out", __func__);
return -EPERM;
@@ -13447,6 +13442,19 @@ int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy,
hddLog(LOG1, FL("Roaming in progress, do not allow suspend"));
return -EAGAIN;
}
+
+ if (pHddCtx->cfg_ini->enablePowersaveOffload &&
+ pHddCtx->cfg_ini->fIsBmpsEnabled &&
+ ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) ||
+ (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode))) {
+ if (!sme_PsOffloadIsStaInPowerSave(pHddCtx->hHal,
+ pAdapter->sessionId)) {
+ hddLog(VOS_TRACE_LEVEL_DEBUG,
+ FL("STA is not in power save, Do not allow suspend"));
+ return -EAGAIN;
+ }
+ }
+
if (pScanInfo->mScanPending && pAdapter->request)
{
INIT_COMPLETION(pScanInfo->abortscan_event_var);
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 4b9e0cae5c6d..f426b2f5158c 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -2204,7 +2204,7 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc)
vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE);
#ifdef WLAN_FEATURE_LPSS
- wlan_hdd_send_status_pkg(pAdapter, NULL, 1, 0);
+ wlan_hdd_send_all_scan_intf_info(pHddCtx);
wlan_hdd_send_version_pkg(pHddCtx->target_fw_version,
pHddCtx->target_hw_version,
pHddCtx->target_hw_name);
diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c
index 870fb7402aa4..068b1198589b 100644
--- a/CORE/HDD/src/wlan_hdd_ftm.c
+++ b/CORE/HDD/src/wlan_hdd_ftm.c
@@ -47,9 +47,9 @@
when who what, where, why
-------- --- --------------------------------------------------------
- 04/20/11 Leo/Henri Convergence for Prima and Volans. Single image
- for FTM and mission mode
- 04/5/09 Shailender Created module.
+ 07/18/14 kanand Cleanup. Remove legacy Prima code and retain support for Rome only
+ 04/20/11 Leo/Henri Convergence for Prima and Volans. Single image for FTM and mission mode
+ 04/05/09 Shailender Created module.
==========================================================================*/
#include <vos_mq.h>
@@ -68,7 +68,6 @@
#include "vos_nvitem.h"
#include "wlan_hdd_main.h"
#include "qwlan_version.h"
-
#include "wlan_nv.h"
#include "wlan_qct_wda.h"
#include "cfgApi.h"
@@ -91,436 +90,9 @@
#endif
#endif
-#define RXMODE_DISABLE_ALL 0
-#define RXMODE_ENABLE_ALL 1
-#define RXMODE_ENABLE_11GN 2
-#define RXMODE_ENABLE_11B 3
-
-#define FTM_CHAIN_SEL_NO_RX_TX 0
-#define FTM_CHAIN_SEL_R0_ON 1
-#define FTM_CHAIN_SEL_T0_ON 2
-#define FTM_CHAIN_SEL_R0_T0_ON 3
-#define FTM_CHAIN_SEL_MAX 3
-
-#ifndef QWLAN_PHYDBG_BASE
-#define QWLAN_PHYDBG_BASE 0x03004000
-#endif /* QWLAN_PHYDBG_BASE */
-
-#ifndef QWLAN_PHYDBG_TXPKT_CNT_REG
-#define QWLAN_PHYDBG_TXPKT_CNT_REG (QWLAN_PHYDBG_BASE + 0x6C)
-#define QWLAN_PHYDBG_TXPKT_CNT_CNT_MASK 0xFFFF
-#endif
-
-#ifndef QWLAN_AGC_BASE
-#define QWLAN_AGC_BASE 0x03013C00
-#endif /* QWLAN_AGC_BASE */
-
-#ifndef QWLAN_AGC_CHANNEL_FREQ_REG
-#define QWLAN_AGC_CHANNEL_FREQ_REG (QWLAN_AGC_BASE + 0x34)
-#define QWLAN_AGC_CHANNEL_FREQ_FREQ_MASK 0x1FFF
-#endif /* QWLAN_AGC_CHANNEL_FREQ_REG */
-
-#ifndef QWLAN_AGC_SUBBAND_CONFIG_REG
-#define QWLAN_AGC_SUBBAND_CONFIG_REG (QWLAN_AGC_BASE + 0x30)
-#define QWLAN_AGC_SUBBAND_CONFIG_STG2_SUBBAND_MASK 0x03
-#endif /* QWLAN_AGC_SUBBAND_CONFIG_REG */
-
-#ifndef QWLAN_RFAPB_BASE
-#define QWLAN_RFAPB_BASE 0x0E02F800
-#endif /* QWLAN_RFAPB_BASE */
-
-#ifndef QWLAN_RFAPB_REV_ID_REG
-#define QWLAN_RFAPB_REV_ID_REG (QWLAN_RFAPB_BASE + 0x00)
-#endif /* QWLAN_RFAPB_REV_ID_REG */
-
-#ifndef QWLAN_TXCTL_BASE
-#define QWLAN_TXCTL_BASE 0x03012000
-#endif /* QWLAN_TXCTL_BASE */
-
-#ifndef QWLAN_TXCTL_FSHIFT_REG
-#define QWLAN_TXCTL_FSHIFT_REG (QWLAN_TXCTL_BASE + 0x20)
-#define QWLAN_TXCTL_FSHIFT_BW14_OFFSET 0x02
-#define QWLAN_TXCTL_FSHIFT_BW14_MASK 0x1C
-#define QWLAN_TXCTL_FSHIFT_BW12_OFFSET 0x00
-#define QWLAN_TXCTL_FSHIFT_BW12_MASK 0x03
-#endif /* QWLAN_TXCTL_FSHIFT_REG */
-
-/* To set 4MAC addresses from given first MAC address,
- * Last byte value within given MAC address must less than 0xFF - 3 */
-#define QWLAN_MAX_MAC_LAST_BYTE_VALUE 0xFC
-#define NV_EMBEDDED_VERSION 0x80
-
-#define QWLAN_TXFIR_CFG_DPD_BYPASS_MASK 0x8
-
-typedef struct {
- tANI_U32 tableSize; /* Whole NV Table Size */
- tANI_U32 chunkSize; /* Current Chunk Size < 2K */
- eNvTable nvTable;
- tANI_U8 tableData; /* Filled by host driver */
-} pttGetNvTable;
-
-typedef struct {
- tANI_U32 tableSize; /* Whole NV Table Size */
- tANI_U32 chunkSize; /* Current Chunk Size < 2K */
- eNvTable nvTable;
- tANI_U8 tableData;
-} pttSetNvTable;
-
-extern const sHalNv nvDefaults;
-static int wlan_ftm_register_wext(hdd_adapter_t *pAdapter);
static int wlan_ftm_stop(hdd_context_t *pHddCtx);
-VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len);
static int hdd_ftm_service_registration(hdd_context_t *pHddCtx);
-/* for PRIMA: all the available frequency, channal pair i the table are defined for channel frequency @ RF center frequency
- Since it is associated to agc.channel_freq register for mapping.
- For channel bonding, the channel number is +2 or -2 for CB with primary high, or with primary low respectively.
-*/
-static const freq_chan_t freq_chan_tbl[] = {
- {2412, 1}, {2417, 2},{2422, 3}, {2427, 4}, {2432, 5}, {2437, 6}, {2442, 7},
- {2447, 8}, {2452, 9},{2457, 10},{2462, 11},{2467 ,12},{2472, 13},{2484, 14}
-};
-
-static rateStr2rateIndex_t rateName_rateIndex_tbl[] =
-{
- { HAL_PHY_RATE_11B_LONG_1_MBPS, "11B_LONG_1_MBPS"},
- { HAL_PHY_RATE_11B_LONG_2_MBPS, "11B_LONG_2_MBPS"},
- { HAL_PHY_RATE_11B_LONG_5_5_MBPS, "11B_LONG_5_5_MBPS"},
- { HAL_PHY_RATE_11B_LONG_11_MBPS, "11B_LONG_11_MBPS"},
- { HAL_PHY_RATE_11B_SHORT_2_MBPS, "11B_SHORT_2_MBPS"},
- { HAL_PHY_RATE_11B_SHORT_5_5_MBPS, "11B_SHORT_5_5_MBPS"},
- { HAL_PHY_RATE_11B_SHORT_11_MBPS, "11B_SHORT_11_MBPS"},
- //Spica_Virgo 11A 20MHz Rates
- { HAL_PHY_RATE_11A_6_MBPS, "11A_6_MBPS"},
- { HAL_PHY_RATE_11A_9_MBPS, "11A_9_MBPS"},
- { HAL_PHY_RATE_11A_12_MBPS, "11A_12_MBPS"},
- { HAL_PHY_RATE_11A_18_MBPS, "11A_18_MBPS"},
- { HAL_PHY_RATE_11A_24_MBPS, "11A_24_MBPS"},
- { HAL_PHY_RATE_11A_36_MBPS, "11A_36_MBPS"},
- { HAL_PHY_RATE_11A_48_MBPS, "11A_48_MBPS"},
- { HAL_PHY_RATE_11A_54_MBPS, "11A_54_MBPS"},
-
-//MCS Index #0-15 (20MHz)
- { HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, "MCS_6_5_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_13_MBPS, "MCS_13_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_19_5_MBPS, "MCS_19_5_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_26_MBPS, "MCS_26_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_39_MBPS, "MCS_39_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_52_MBPS, "MCS_52_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, "MCS_58_5_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_65_MBPS, "MCS_65_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, "MCS_72_2_MBPS"},
-
-//MCS Index #8-15 (40MHz)
-
- { HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, "MCS_CB_13_B_MBPS" },
- { HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, "MCS_CB_27_MBPS" },
- { HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, "MCS_CB_40_5_MBPS" },
- { HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, "MCS_CB_54_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, "MCS_CB_81_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, "MCS_CB_108_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, "MCS_CB_121_5_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, "MCS_CB_135_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, "MCS_CB_15_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, "MCS_CB_30_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, "MCS_CB_45_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, "MCS_CB_60_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, "MCS_CB_90_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, "MCS_CB_120_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, "MCS_CB_135_MBPS"},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, "MCS_CB_150_MBPS"},
-
-#ifdef WLAN_FEATURE_11AC
- /*11AC rate 20MHZ Normal GI*/
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, "MCS_VHT20_NGI_6_5_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, "MCS_VHT20_NGI_13_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS,"MCS_VHT20_NGI_19_5_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, "MCS_VHT20_NGI_26_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, "MCS_VHT20_NGI_39_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, "MCS_VHT20_NGI_52_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS,"MCS_VHT20_NGI_58_5_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, "MCS_VHT20_NGI_65_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, "MCS_VHT20_NGI_78_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS,"MCS_VHT20_NGI_86_5_MBPS"},
-
- /*11AC rate 20MHZ Short GI*/
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, "MCS_VHT20_SGI_7_2_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS,"MCS_VHT20_SGI_14_4_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS,"MCS_VHT20_SGI_21_6_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS,"MCS_VHT20_SGI_28_8_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS,"MCS_VHT20_SGI_43_3_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS,"MCS_VHT20_SGI_57_7_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, "MCS_VHT20_SGI_65_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS,"MCS_VHT20_SGI_72_2_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS,"MCS_VHT20_SGI_86_6_MBPS"},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS,"MCS_VHT20_SGI_96_1_MBPS"},
-
- /*11AC rates 40MHZ normal GI*/
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS,
- "MCS_VHT40_NGI_CB_13_5_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS,
- "MCS_VHT40_NGI_CB_27_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS,
- "MCS_VHT40_NGI_CB_40_5_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS,
- "MCS_VHT40_NGI_CB_54_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS,
- "MCS_VHT40_NGI_CB_81_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS,
- "MCS_VHT40_NGI_CB_108_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS,
- "MCS_VHT40_NGI_CB_121_5_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS,
- "MCS_VHT40_NGI_CB_135_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS,
- "MCS_VHT40_NGI_CB_162_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS,
- "MCS_VHT40_NGI_CB_180_MBPS"},
-
- /*11AC rates 40MHZ short GI*/
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS,
- "MCS_VHT40_SGI_CB_15_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS,
- "MCS_VHT40_SGI_CB_30_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS,
- "MCS_VHT40_SGI_CB_45_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS,
- "MCS_VHT40_SGI_CB_60_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS,
- "MCS_VHT40_SGI_CB_90_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS,
- "MCS_VHT40_SGI_CB_120_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS,
- "MCS_VHT40_SGI_CB_135_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS,
- "MCS_VHT40_SGI_CB_150_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS,
- "MCS_VHT40_SGI_CB_180_MBPS"},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS,
- "MCS_VHT40_SGI_CB_200_MBPS"},
-
- /*11AC rates 80 MHZ normal GI*/
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS,
- "MCS_VHT80_NGI_CB_29_3_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS,
- "MCS_VHT80_NGI_CB_58_5_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS,
- "MCS_VHT80_NGI_CB_87_8_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS,
- "MCS_VHT80_NGI_CB_117_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS,
- "MCS_VHT80_NGI_CB_175_5_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS,
- "MCS_VHT80_NGI_CB_234_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS,
- "MCS_VHT80_NGI_CB_263_3_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS,
- "MCS_VHT80_NGI_CB_292_5_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS,
- "MCS_VHT80_NGI_CB_351_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS,
- "MCS_VHT80_NGI_CB_390_MBPS"},
-
- /*11AC rates 80 MHZ short GI*/
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS,
- "MCS_VHT80_SGI_CB_32_5_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS,
- "MCS_VHT80_SGI_CB_65_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS,
- "MCS_VHT80_SGI_CB_97_5_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS,
- "MCS_VHT80_SGI_CB_130_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS,
- "MCS_VHT80_SGI_CB_195_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS,
- "MCS_VHT80_SGI_CB_260_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS,
- "MCS_VHT80_SGI_CB_292_5_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS,
- "MCS_VHT80_SGI_CB_325_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS,
- "MCS_VHT80_SGI_CB_390_MBPS"},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS,
- "MCS_VHT80_SGI_CB_433_3_MBPS"},
-#endif
-
-};
-
-static rateIndex2Preamble_t rate_index_2_preamble_table[] =
-{
-
- { HAL_PHY_RATE_11B_LONG_1_MBPS, PHYDBG_PREAMBLE_LONGB},
- { HAL_PHY_RATE_11B_LONG_2_MBPS, PHYDBG_PREAMBLE_LONGB},
- { HAL_PHY_RATE_11B_LONG_5_5_MBPS, PHYDBG_PREAMBLE_LONGB},
- { HAL_PHY_RATE_11B_LONG_11_MBPS, PHYDBG_PREAMBLE_LONGB},
- { HAL_PHY_RATE_11B_SHORT_2_MBPS, PHYDBG_PREAMBLE_SHORTB},
- { HAL_PHY_RATE_11B_SHORT_5_5_MBPS, PHYDBG_PREAMBLE_SHORTB},
- { HAL_PHY_RATE_11B_SHORT_11_MBPS, PHYDBG_PREAMBLE_SHORTB},
-
-
- //Spica_Virgo 11A 20MHz Rates
- { HAL_PHY_RATE_11A_6_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_9_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_12_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_18_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_24_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_36_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_48_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_54_MBPS, PHYDBG_PREAMBLE_OFDM},
-
- // 11A 20MHz Rates
- { HAL_PHY_RATE_11A_DUP_6_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_DUP_9_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_DUP_12_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_DUP_18_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_DUP_24_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_DUP_36_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_DUP_48_MBPS, PHYDBG_PREAMBLE_OFDM},
- { HAL_PHY_RATE_11A_DUP_54_MBPS, PHYDBG_PREAMBLE_OFDM},
-
- //MCS Index #0-15 (20MHz)
- { HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_13_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_19_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_26_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_39_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_52_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_65_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_7_2_MBPS, PHYDBG_PREAMBLE_NOT_SUPPORTED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_14_4_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_21_7_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_28_9_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_43_3_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS, PHYDBG_PREAMBLE_NOT_SUPPORTED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, PHYDBG_PREAMBLE_MIXED},
-
- //MCS index (40MHz)
- { HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, PHYDBG_PREAMBLE_MIXED},
-
-#ifdef WLAN_FEATURE_11AC
- /*11AC rate 20MHZ Normal GI*/
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS,PHYDBG_PREAMBLE_MIXED},
-
- /*11AC rate 20MHZ Short GI*/
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS,PHYDBG_PREAMBLE_MIXED},
-
- /*11AC rates 40MHZ normal GI*/
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, PHYDBG_PREAMBLE_MIXED},
-
- /*11AC rates 40MHZ short GI*/
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS,PHYDBG_PREAMBLE_MIXED},
-
- /*11AC rates 80 MHZ normal GI*/
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, PHYDBG_PREAMBLE_MIXED},
-
- /*11AC rates 80 MHZ short GI*/
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS,PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, PHYDBG_PREAMBLE_MIXED},
- { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS,PHYDBG_PREAMBLE_MIXED},
-#endif
-};
-
-static unsigned int valid_channel[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 36, 40, 44, 48,
- 52, 56, 60, 64, 100, 104, 108,
- 112, 116, 120, 124, 128, 132,
- 136, 140, 149, 153, 157, 161,
- 165, 208, 212, 216, 240, 244,
- 248, 252, 0 };
-static unsigned int valid_channel_cb40[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 38,
- 42, 46, 50, 54, 58, 62, 102, 106,
- 110, 114, 118, 122, 126, 130, 134,
- 138, 151, 155, 159, 163, 210, 214,
- 242, 246, 250, 0 };
-static unsigned int valid_channel_cb80[] = { 7, 42, 46, 50, 54, 58, 106, 110,
- 114, 118, 122, 126, 130, 134, 155,
- 159, 246, 0 };
-
-typedef struct
-{
- tANI_BOOLEAN frameGenEnabled;
- tANI_BOOLEAN wfmEnabled;
- sPttFrameGenParams frameParams;
- v_U16_t txpower;
- v_U16_t rxmode;
- v_U16_t chainSelect;
- ePhyChanBondState cbmode;
-
-} FTM_STATUS ;
-static FTM_STATUS ftm_status;
-
-//tpAniSirGlobal pMac;
-static tPttMsgbuffer *pMsgBuf;
-
#if defined(QCA_WIFI_FTM)
#if defined(LINUX_QCMBR)
#define ATH_XIOCTL_UNIFIED_UTF_CMD 0x1000
@@ -541,34 +113,6 @@ DEFINE_SPINLOCK(qcmbr_queue_lock);
#endif
#endif
-static void _ftm_status_init(void)
-{
- tANI_U8 addr1[ANI_MAC_ADDR_SIZE] = { 0x00, 0x11, 0x11, 0x11, 0x11, 0x11 }; //dest
- tANI_U8 addr2[ANI_MAC_ADDR_SIZE] = { 0x00, 0x22, 0x22, 0x22, 0x22, 0x22 }; //sour
- tANI_U8 addr3[ANI_MAC_ADDR_SIZE] = { 0x00, 0x33, 0x33, 0x33, 0x33, 0x33 }; //bssId
-
- ftm_status.wfmEnabled = eANI_BOOLEAN_FALSE;
- ftm_status.frameGenEnabled = eANI_BOOLEAN_FALSE;
- ftm_status.frameParams.numTestPackets = 0; //Continuous
- ftm_status.frameParams.interFrameSpace = 10;
- ftm_status.frameParams.rate = HAL_PHY_RATE_11A_6_MBPS;
- ftm_status.frameParams.payloadContents = TEST_PAYLOAD_RANDOM;
- ftm_status.frameParams.payloadLength = 2000;
- ftm_status.frameParams.payloadFillByte = 0xA5;
- ftm_status.frameParams.pktAutoSeqNum = eANI_BOOLEAN_FALSE;
- ftm_status.frameParams.tx_mode = 0;
- ftm_status.frameParams.crc = 0;
- ftm_status.frameParams.preamble = PHYDBG_PREAMBLE_OFDM;
- memcpy(&ftm_status.frameParams.addr1[0], addr1, ANI_MAC_ADDR_SIZE);
- memcpy(&ftm_status.frameParams.addr2[0], addr2, ANI_MAC_ADDR_SIZE);
- memcpy(&ftm_status.frameParams.addr3[0], addr3, ANI_MAC_ADDR_SIZE);
- ftm_status.txpower = 2 ;
- ftm_status.rxmode = RXMODE_ENABLE_ALL; /* macStart() enables all receive pkt types */
- ftm_status.chainSelect = FTM_CHAIN_SEL_R0_T0_ON;
- ftm_status.cbmode = 0 ; //none channel bonding
-
- return;
-}
/**---------------------------------------------------------------------------
@@ -836,16 +380,6 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex
goto err_wda_close;
}
- vStatus = vos_nv_get_dictionary_data();
-
- if (!VOS_IS_STATUS_SUCCESS(vStatus))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "%s : failed to get dictionary data for NV %d",
- __func__, vStatus);
- goto err_wda_close;
- }
-
/* If we arrive here, both threads dispacthing messages correctly */
/* Now proceed to open the MAC */
@@ -914,7 +448,7 @@ err_htc_close:
err_bmi_close:
BMICleanup(pHifContext);
-#endif /* #QCA_WIFI_2_0 && QCA_WIFI_FTM */
+#endif /* QCA_WIFI_FTM */
err_sched_close:
vos_sched_close(gpVosContext);
@@ -1034,308 +568,6 @@ static VOS_STATUS wlan_ftm_vos_close( v_CONTEXT_t vosContext )
return VOS_STATUS_SUCCESS;
}
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_set_txifs() -
-
- This function is used for
-
- \param - pAdapter - Pointer HDD Context.
- - ifs
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-
-
-static VOS_STATUS wlan_ftm_priv_set_txifs(hdd_adapter_t *pAdapter,v_U32_t ifs)
-{
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- /* do not allow to change setting when tx pktgen is enabled */
- if (ftm_status.frameGenEnabled)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txifs when pktgen is enabled.",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (ifs > 100000) //max = (MSK_24 / ONE_MICROSECOND)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:ifs value is invalid %x", __func__, ifs);
- return VOS_STATUS_E_FAILURE;
- }
-
- ftm_status.frameParams.interFrameSpace = ifs;
-
- return VOS_STATUS_SUCCESS;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_set_txpktcnt() -
-
- This function is used for
-
- \param - pAdapter - Pointer HDD Context.
- - ifs
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_set_txpktcnt(hdd_adapter_t *pAdapter,v_U32_t cnt)
-{
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- /* do not allow to change setting when tx pktgen is enabled */
- if (ftm_status.frameGenEnabled)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txpktcnt when pktgen is enabled.",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (cnt > QWLAN_PHYDBG_TXPKT_CNT_CNT_MASK) //0xFFFF
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:pktcnt value is invalid %08x", __func__, cnt);
- return VOS_STATUS_E_FAILURE;
- }
-
- ftm_status.frameParams.numTestPackets = cnt;
-
- return VOS_STATUS_SUCCESS;
-}
-
-static VOS_STATUS wlan_ftm_priv_set_txpktlen(hdd_adapter_t *pAdapter,v_U32_t len)
-{
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- /* do not allow to change setting when tx pktgen is enabled */
- if (ftm_status.frameGenEnabled)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txpktcnt when pktgen is enabled.",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (len > 4095) //4096
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:payload len is invalid %08x", __func__, len);
- return VOS_STATUS_E_FAILURE;
- }
-
- ftm_status.frameParams.payloadLength = (tANI_U16)len;
-
- return VOS_STATUS_SUCCESS;
-}
-
-
-static VOS_STATUS wlan_ftm_priv_enable_chain(hdd_adapter_t *pAdapter,v_U16_t chainSelect)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- v_U16_t chainSelect_save = chainSelect;
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- unsigned long rc;
-
- if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (chainSelect > FTM_CHAIN_SEL_MAX)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Invalid chain %08x", __func__, chainSelect);
- return VOS_STATUS_E_FAILURE;
- }
-
- /* do not allow to change setting when tx pktgen is enabled */
- if (ftm_status.frameGenEnabled)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot select chain when pktgen is enabled.",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- switch (chainSelect)
- {
- case FTM_CHAIN_SEL_NO_RX_TX:
- chainSelect = PHY_CHAIN_SEL_NO_RX_TX;
- break;
-
- case FTM_CHAIN_SEL_R0_ON:
- chainSelect = PHY_CHAIN_SEL_R0_ON;
- break;
-
- case FTM_CHAIN_SEL_T0_ON:
- chainSelect = PHY_CHAIN_SEL_T0_ON;
- break;
- }
-
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_ENABLE_CHAINS;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttEnableChains) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
- pMsgBody->EnableChains.chainSelect = chainSelect;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var failed"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- ftm_status.chainSelect = chainSelect_save;
-done:
-
- return status;
-}
-
-/**---------------------------------------------------------------------------
- --------------------------------------------------------------------------*/
-static VOS_STATUS wlan_ftm_priv_get_status(hdd_adapter_t *pAdapter,char *buf)
-{
- int ii;
- int lenBuf = WE_FTM_MAX_STR_LEN;
- int lenRes = 0;
- char *chain[] = {
- "None",
- "R0,R1",
- "R0",
- "R1",
- "T0",
- "R0,R1,T0"
- };
- char *rx[] = {
- "disable",
- "11b/g/n",
- "11g/n",
- "11b"
- };
- char *tx[] = {
- "stopped",
- "started",
- };
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- lenRes = snprintf(buf, lenBuf, "\n chainSelect: %s\n rxmode: %s\n "
- "txpktgen: %s\n txifs: %d\n txrate: ",
- chain[ftm_status.chainSelect], rx[ftm_status.rxmode],
- tx[ftm_status.frameGenEnabled],
- ftm_status.frameParams.interFrameSpace);
- if ((lenRes < 0) || (lenRes >= lenBuf))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("failed to copy data into buf %d"), lenRes);
- return VOS_STATUS_E_FAILURE;
- }
-
- buf += lenRes;
- lenBuf -= lenRes;
-
- for (ii = 0; ii < SIZE_OF_TABLE(rateName_rateIndex_tbl); ii++)
- {
- if (rateName_rateIndex_tbl[ii].rate_index == ftm_status.frameParams.rate)
- break;
- }
-
- if (ii < SIZE_OF_TABLE(rateName_rateIndex_tbl))
- {
- lenRes = strlcpy(buf, rateName_rateIndex_tbl[ii].rate_str, lenBuf);
- }
- else
- {
- lenRes = strlcpy(buf, "invalid", lenBuf);
- }
- if ((lenRes < 0) || (lenRes >= lenBuf))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("failed to copy data into buf %d"), lenRes);
- return VOS_STATUS_E_FAILURE;
- }
-
- buf += lenRes;
- lenBuf -= lenRes;
-
- lenRes = snprintf(buf, lenBuf, "\n txpower: %d\n txpktcnt: %d\n "
- "txpktlen: %d\n", ftm_status.txpower,
- ftm_status.frameParams.numTestPackets,
- ftm_status.frameParams.payloadLength);
-
- if ((lenRes < 0) || (lenRes >= lenBuf))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("failed to copy data into buf %d"), lenRes);
- return VOS_STATUS_E_FAILURE;
- }
-
- return VOS_STATUS_SUCCESS;
-}
-
-
-void HEXDUMP(char *s0, char *s1, int len)
-{
- int i = 0, j = 0;
- printk(KERN_EMERG "%s\n :", s0);
-
- if (len > 8)
- {
- for (j = 0; j < len/8; j++)
- {
- printk(KERN_EMERG "%02x %02x %02x %02x %02x %02x %02x %02x",
- s1[j*8], s1[j*8+1], s1[j*8+2], s1[j*8+3], s1[j*8+4],
- s1[j*8+5],s1[j*8+6],s1[j*8+7] );
- }
- len = len - j*8;
- }
- for (i = 0; i< len; i++) {
- printk(KERN_EMERG "%02x ", s1[j*8+i]);
- }
- printk("\n");
-}
-
/*---------------------------------------------------------------------------
\brief vos_ftm_preStart() -
@@ -1437,7 +669,7 @@ VOS_STATUS vos_ftm_preStart( v_CONTEXT_t vosContext )
return VOS_STATUS_E_FAILURE;
}
wma_wait_for_ready_event(gpVosContext->pWDAContext);
-#endif /* QCA_WIFI_2_0 && QCA_WIFI_FTM */
+#endif /* QCA_WIFI_FTM */
return VOS_STATUS_SUCCESS;
}
@@ -1489,12 +721,14 @@ int wlan_hdd_ftm_open(hdd_context_t *pHddCtx)
if ( NULL == pHddCtx->hHal )
{
hddLog(VOS_TRACE_LEVEL_ERROR,"%s: HAL context is null", __func__);
- goto err_sal_close;
+ goto err_ftm_close;
}
return VOS_STATUS_SUCCESS;
-err_sal_close:
+
+err_ftm_close:
wlan_ftm_vos_close(pVosContext);
+
err_vos_status_failure:
return VOS_STATUS_E_FAILURE;
}
@@ -1510,78 +744,20 @@ static int hdd_ftm_service_registration(hdd_context_t *pHddCtx)
goto err_adapter_open_failure;
}
- if( wlan_ftm_register_wext(pAdapter)!= 0 )
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s: hdd_register_wext failed", __func__);
- goto err_sal_close;
- }
-
-#ifndef QCA_WIFI_FTM
- //Initialize the nlink service
- if(nl_srv_init() != 0)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s: nl_srv_init failed", __func__);
- goto err_ftm_register_wext_close;
- }
-
-#ifdef WLAN_KD_READY_NOTIFIER
- pHddCtx->kd_nl_init = 1;
-#endif /* WLAN_KD_READY_NOTIFIER */
-
-#ifdef PTT_SOCK_SVC_ENABLE
- //Initialize the PTT service
- if(ptt_sock_activate_svc(pHddCtx) != 0)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s: ptt_sock_activate_svc failed", __func__);
- goto err_nl_srv_init;
- }
-#endif
-#endif
-
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.targetNVTablePointer = NULL;
- pHddCtx->ftm.processedNVTableSize = 0;
- pHddCtx->ftm.tempNVTableBuffer = (v_U8_t *)vos_mem_malloc(MAX_NV_TABLE_SIZE);
- if(NULL == pHddCtx->ftm.tempNVTableBuffer)
- {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: NV Table Buffer Alloc Fail", __func__);
- VOS_ASSERT(0);
- goto err_nl_srv_init;
- }
- vos_mem_zero((v_VOID_t *)pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
-
- _ftm_status_init();
/* Initialize the ftm vos event */
if (vos_event_init(&pHddCtx->ftm.ftm_vos_event) != VOS_STATUS_SUCCESS)
{
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: Unable to init probeEvent", __func__);
VOS_ASSERT(0);
- vos_mem_free(pHddCtx->ftm.tempNVTableBuffer);
- goto err_nl_srv_init;
+ goto err_adapter_close;
}
pHddCtx->ftm.ftm_state = WLAN_FTM_INITIALIZED;
return VOS_STATUS_SUCCESS;
-err_nl_srv_init:
-#ifndef QCA_WIFI_FTM
-#ifdef WLAN_KD_READY_NOTIFIER
-nl_srv_exit(pHddCtx->ptt_pid);
-#else
-nl_srv_exit();
-#endif /* WLAN_KD_READY_NOTIFIER */
-#endif
-
-#ifndef QCA_WIFI_FTM
-err_ftm_register_wext_close:
-#endif
-hdd_UnregisterWext(pAdapter->dev);
-
-err_sal_close:
+err_adapter_close:
hdd_close_all_adapters( pHddCtx );
err_adapter_open_failure:
@@ -1604,7 +780,6 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx)
return VOS_STATUS_E_NOMEM;
}
- /*release the wlan_hdd_process_ftm_cmd(), if waiting for any response.*/
if (pHddCtx->ftm.IsCmdPending == TRUE)
{
if (vos_event_set(&pHddCtx->ftm.ftm_vos_event)!= VOS_STATUS_SUCCESS)
@@ -1621,24 +796,7 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx)
wlan_ftm_stop(pHddCtx);
}
-#ifdef WLAN_KD_READY_NOTIFIER
- nl_srv_exit(pHddCtx->ptt_pid);
-#else
- nl_srv_exit();
-#endif /* WLAN_KD_READY_NOTIFIER */
- //TODO----------
- //Deregister the device with the kernel
- hdd_UnregisterWext(pAdapter->dev);
-
hdd_close_all_adapters( pHddCtx );
-#if 0
- if(test_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags))
- {
- unregister_netdev(pAdapter->dev);
- clear_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags);
- }
-#endif
- //-----------------
vosStatus = vos_sched_close( vosContext );
if (!VOS_IS_STATUS_SUCCESS(vosStatus)) {
@@ -1658,7 +816,6 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx)
"%s: Failed to destroy ftm_vos Event",__func__);
VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) );
}
- vos_mem_free(pHddCtx->ftm.tempNVTableBuffer);
//Free up dynamically allocated members inside HDD Adapter
kfree(pHddCtx->cfg_ini);
@@ -1682,34 +839,11 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx)
/**---------------------------------------------------------------------------
- \brief wlan_ftm_send_response() -
-
- The function sends the response to the ptt socket application running in user space.
-
- \param - pAdapter - Pointer HDD Context.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_send_response(hdd_context_t *pHddCtx){
-
- if( ptt_sock_send_msg_to_app(&pHddCtx->ftm.wnl->wmsg, 0, ANI_NL_MSG_PUMAC, pHddCtx->ftm.wnl->nlh.nlmsg_pid) < 0) {
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Ptt Socket error sending message to the app!!"));
- return VOS_STATUS_E_FAILURE;
- }
- return VOS_STATUS_SUCCESS;
-}
-
-/**---------------------------------------------------------------------------
-
\brief wlan_hdd_ftm_start() -
- This function gets called when the FTM start commands received from the ptt socket application and
- it starts the following modules.
- 1) SAL Start.
- 2) BAL Start.
+ This function starts the following modules.
+ 1) WDA Start.
+ 2) HTC Start.
3) MAC Start to download the firmware.
@@ -1730,7 +864,7 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx)
}
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "%s: Starting Libra SW", __func__);
+ "%s: Starting CLD SW", __func__);
/* We support only one instance for now ...*/
if (pVosContext == NULL)
@@ -1748,10 +882,6 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx)
goto err_status_failure;
}
- /*
- Prima needs to start the WDA correctly instead of BAL and SAL
- */
-
/* Vos preStart is calling */
if ( !VOS_IS_STATUS_SUCCESS(vos_ftm_preStart(pHddCtx->pvosContext) ) )
{
@@ -1810,7 +940,6 @@ static int wlan_ftm_stop(hdd_context_t *pHddCtx)
return VOS_STATUS_E_FAILURE;
}
- //if(pHddCtx->ftm.cmd_iwpriv == TRUE)
{
/* STOP MAC only */
v_VOID_t *hHal;
@@ -1838,3606 +967,9 @@ int hdd_ftm_stop(hdd_context_t *pHddCtx)
}
#endif
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_get_nv_table() -
- Get Specific NV table
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 1, Process Host command success
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_ftm_get_nv_table
-(
- hdd_context_t *pHddCtx,
- tPttMsgbuffer *ftmCmd
-)
-{
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- pttGetNvTable *nvTable = (pttGetNvTable *)&ftmCmd->msgBody.GetNvTable;
- v_SIZE_t nvSize;
- sHalNv *nvContents = NULL;
-
-
- if (NULL == pHddCtx)
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Not valid driver context");
- return -EINVAL;
- }
-
- /* Test first chunk of NV table */
- if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) ||
- (0 == pHddCtx->ftm.processedNVTableSize))
- {
- nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
- if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- FL("Fail to get cached NV value Status %d"), nvStatus);
- return -EIO;
- }
-
- switch (nvTable->nvTable)
- {
- case NV_TABLE_RATE_POWER_SETTINGS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pwrOptimum);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pwrOptimum;
- break;
-
- case NV_TABLE_REGULATORY_DOMAINS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.regDomains);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.regDomains;
- break;
-
- case NV_TABLE_DEFAULT_COUNTRY:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.defaultCountryTable);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.defaultCountryTable;
- break;
-
- case NV_TABLE_TPC_POWER_TABLE:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.plutCharacterized);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.plutCharacterized[0];
- break;
-
- case NV_TABLE_TPC_PDADC_OFFSETS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.plutPdadcOffset);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.plutPdadcOffset[0];
- break;
-
- case NV_TABLE_VIRTUAL_RATE:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pwrOptimum_virtualRate);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pwrOptimum_virtualRate[0];
- break;
-
- case NV_TABLE_RSSI_CHANNEL_OFFSETS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.rssiChanOffsets);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.rssiChanOffsets[0];
- break;
-
- case NV_TABLE_HW_CAL_VALUES:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.hwCalValues);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.hwCalValues;
- break;
-
- case NV_TABLE_FW_CONFIG:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.fwConfig);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.fwConfig;
- break;
-
- case NV_TABLE_ANTENNA_PATH_LOSS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.antennaPathLoss);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.antennaPathLoss[0];
- break;
-
- case NV_TABLE_PACKET_TYPE_POWER_LIMITS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pktTypePwrLimits);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pktTypePwrLimits[0][0];
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Not Valid NV Table %d", nvTable->nvTable);
- return -EIO;
- break;
- }
-
- if (pHddCtx->ftm.targetNVTableSize != nvTable->tableSize)
- {
- /* Invalid table size, discard and initialize data */
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Invalid Table Size %d for Table %d"
- " expected size %d", nvTable->tableSize, nvTable->nvTable,
- pHddCtx->ftm.targetNVTableSize);
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- return -EINVAL;
- }
-
- /* Set Current Processing NV table type */
- pHddCtx->ftm.processingNVTable = nvTable->nvTable;
- /* Copy target NV table value into temp context buffer */
- vos_mem_copy(pHddCtx->ftm.tempNVTableBuffer,
- pHddCtx->ftm.targetNVTablePointer,
- pHddCtx->ftm.targetNVTableSize);
-
- }
-
- if (pHddCtx->ftm.processingNVTable != nvTable->nvTable)
- {
- /* Invalid table type */
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Invalid NV Table, now Processing %d, not %d",
- pHddCtx->ftm.processingNVTable, nvTable->nvTable);
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
-
- return -EINVAL;
- }
-
- /* Copy next chunk of NV table value into response buffer */
- vos_mem_copy(&nvTable->tableData,
- pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize,
- nvTable->chunkSize);
- /* Update processed pointer to prepare next chunk copy */
- pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize;
-
- if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize)
- {
- /* Finished to process last chunk of data, initialize buffer */
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- }
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_set_nv_table() -
- Set Specific NV table as given
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 1, Process Host command success
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_ftm_set_nv_table
-(
- hdd_context_t *pHddCtx,
- tPttMsgbuffer *ftmCmd
-)
-{
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- pttSetNvTable *nvTable = (pttSetNvTable *)&ftmCmd->msgBody.SetNvTable;
- v_SIZE_t nvSize;
- sHalNv *nvContents = NULL;
-
- if (NULL == pHddCtx)
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Not valid driver context");
- return -EINVAL;
- }
-
- /* Test first chunk of NV table */
- if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) ||
- (0 == pHddCtx->ftm.processedNVTableSize))
- {
- nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
- if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- FL("Fail to get cached NV value Status %d"), nvStatus);
- return -EINVAL;
- }
-
- switch (nvTable->nvTable)
- {
- case NV_TABLE_RATE_POWER_SETTINGS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pwrOptimum);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pwrOptimum;
- break;
-
- case NV_TABLE_REGULATORY_DOMAINS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.regDomains);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.regDomains;
- break;
-
- case NV_TABLE_DEFAULT_COUNTRY:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.defaultCountryTable);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.defaultCountryTable;
- break;
-
- case NV_TABLE_TPC_POWER_TABLE:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.plutCharacterized);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.plutCharacterized[0];
- break;
-
- case NV_TABLE_TPC_PDADC_OFFSETS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.plutPdadcOffset);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.plutPdadcOffset[0];
- break;
-
- case NV_TABLE_VIRTUAL_RATE:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pwrOptimum_virtualRate);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pwrOptimum_virtualRate[0];
- break;
-
- case NV_TABLE_RSSI_CHANNEL_OFFSETS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.rssiChanOffsets);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.rssiChanOffsets[0];
- break;
-
- case NV_TABLE_HW_CAL_VALUES:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.hwCalValues);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.hwCalValues;
- break;
-
- case NV_TABLE_FW_CONFIG:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.fwConfig);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.fwConfig;
- break;
-
- case NV_TABLE_ANTENNA_PATH_LOSS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.antennaPathLoss);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.antennaPathLoss[0];
- break;
-
- case NV_TABLE_PACKET_TYPE_POWER_LIMITS:
- pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pktTypePwrLimits);
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pktTypePwrLimits[0][0];
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Not Valid NV Table %d", nvTable->nvTable);
- return -EIO;
- break;
- }
-
- /* Set Current Processing NV table type */
- pHddCtx->ftm.processingNVTable = nvTable->nvTable;
- if (pHddCtx->ftm.targetNVTableSize != nvTable->tableSize)
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Invalid Table Size %d", nvTable->tableSize);
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- return -EINVAL;
- }
- }
-
- if (pHddCtx->ftm.processingNVTable != nvTable->nvTable)
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Invalid NV Table, now Processing %d, not %d",
- pHddCtx->ftm.processingNVTable, nvTable->nvTable);
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- return -EINVAL;
- }
- vos_mem_copy(pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize,
- &nvTable->tableData,
- nvTable->chunkSize);
-
- pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize;
- if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize)
- {
- vos_mem_copy(pHddCtx->ftm.targetNVTablePointer,
- pHddCtx->ftm.tempNVTableBuffer,
- pHddCtx->ftm.targetNVTableSize);
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- }
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_blank_nv() -
- Set all NV table value as default
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 0, Process Host command success
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_ftm_blank_nv_table
-(
- tPttMsgbuffer *ftmCmd
-)
-{
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- v_SIZE_t nvSize;
- v_SIZE_t itemSize;
- sHalNv *nvContents = NULL;
-
- nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
- if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- FL("Fail to get cached NV value Status %d"), nvStatus);
- return -EIO;
- }
-
- itemSize = sizeof(nvContents->tables.pwrOptimum);
- memcpy(&nvContents->tables.pwrOptimum,
- &nvDefaults.tables.pwrOptimum,
- itemSize);
-
- itemSize = sizeof(nvContents->tables.regDomains);
- memcpy(&nvContents->tables.regDomains,
- &nvDefaults.tables.regDomains,
- itemSize);
-
- itemSize = sizeof(nvContents->tables.defaultCountryTable);
- memcpy(&nvContents->tables.defaultCountryTable,
- &nvDefaults.tables.defaultCountryTable,
- itemSize);
-
- itemSize = sizeof(nvContents->tables.plutCharacterized);
- memcpy(&nvContents->tables.plutCharacterized[0],
- &nvDefaults.tables.plutCharacterized[0],
- itemSize);
-
- itemSize = sizeof(nvContents->tables.plutPdadcOffset);
- memcpy(&nvContents->tables.plutPdadcOffset[0],
- &nvDefaults.tables.plutPdadcOffset[0],
- itemSize);
-
- itemSize = sizeof(nvContents->tables.pwrOptimum_virtualRate);
- memcpy(&nvContents->tables.pwrOptimum_virtualRate[0],
- &nvDefaults.tables.pwrOptimum_virtualRate[0],
- itemSize);
-
- itemSize = sizeof(nvContents->tables.rssiChanOffsets);
- memcpy(&nvContents->tables.rssiChanOffsets[0],
- &nvDefaults.tables.rssiChanOffsets[0],
- itemSize);
-
- itemSize = sizeof(nvContents->tables.hwCalValues);
- memcpy(&nvContents->tables.hwCalValues,
- &nvDefaults.tables.hwCalValues,
- itemSize);
-
- itemSize = sizeof(nvContents->tables.antennaPathLoss);
- memcpy(&nvContents->tables.antennaPathLoss[0],
- &nvDefaults.tables.antennaPathLoss[0],
- itemSize);
-
- itemSize = sizeof(nvContents->tables.pktTypePwrLimits);
- memcpy(&nvContents->tables.pktTypePwrLimits[0][0],
- &nvDefaults.tables.pktTypePwrLimits[0][0],
- itemSize);
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_delete_nv_table() -
- Delete Specific NV table
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 1, Process Host command success
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_ftm_delete_nv_table
-(
- tPttMsgbuffer *ftmCmd
-)
-{
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- tMsgPttDelNvTable *nvTable = (tMsgPttDelNvTable *)&ftmCmd->msgBody.DelNvTable;
- v_SIZE_t nvSize;
- v_SIZE_t itemSize;
- sHalNv *nvContents = NULL;
-
- nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
- if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- FL("Fail to get cached NV value Status %d"), nvStatus);
- return -EIO;
- }
-
- switch (nvTable->nvTable)
- {
- case NV_TABLE_RATE_POWER_SETTINGS:
- itemSize = sizeof(nvContents->tables.pwrOptimum);
- memcpy(&nvContents->tables.pwrOptimum,
- &nvDefaults.tables.pwrOptimum,
- itemSize);
- break;
-
- case NV_TABLE_REGULATORY_DOMAINS:
- itemSize = sizeof(nvContents->tables.regDomains);
- memcpy(&nvContents->tables.regDomains,
- &nvDefaults.tables.regDomains,
- itemSize);
- break;
-
- case NV_TABLE_DEFAULT_COUNTRY:
- itemSize = sizeof(nvContents->tables.defaultCountryTable);
- memcpy(&nvContents->tables.defaultCountryTable,
- &nvDefaults.tables.defaultCountryTable,
- itemSize);
- break;
-
- case NV_TABLE_TPC_POWER_TABLE:
- itemSize = sizeof(nvContents->tables.plutCharacterized);
- memcpy(&nvContents->tables.plutCharacterized[0],
- &nvDefaults.tables.plutCharacterized[0],
- itemSize);
- break;
-
- case NV_TABLE_TPC_PDADC_OFFSETS:
- itemSize = sizeof(nvContents->tables.plutPdadcOffset);
- memcpy(&nvContents->tables.plutPdadcOffset[0],
- &nvDefaults.tables.plutPdadcOffset[0],
- itemSize);
- break;
-
- case NV_TABLE_VIRTUAL_RATE:
- itemSize = sizeof(nvContents->tables.pwrOptimum_virtualRate);
- memcpy(&nvContents->tables.pwrOptimum_virtualRate[0],
- &nvDefaults.tables.pwrOptimum_virtualRate[0],
- itemSize);
- break;
-
- case NV_TABLE_RSSI_CHANNEL_OFFSETS:
- itemSize = sizeof(nvContents->tables.rssiChanOffsets);
- memcpy(&nvContents->tables.rssiChanOffsets[0],
- &nvDefaults.tables.rssiChanOffsets[0],
- itemSize);
- break;
-
- case NV_TABLE_HW_CAL_VALUES:
- itemSize = sizeof(nvContents->tables.hwCalValues);
- memcpy(&nvContents->tables.hwCalValues,
- &nvDefaults.tables.hwCalValues,
- itemSize);
- break;
-
- case NV_TABLE_FW_CONFIG:
- itemSize = sizeof(nvContents->tables.fwConfig);
- memcpy(&nvContents->tables.fwConfig,
- &nvDefaults.tables.fwConfig,
- itemSize);
- break;
-
- case NV_TABLE_ANTENNA_PATH_LOSS:
- itemSize = sizeof(nvContents->tables.antennaPathLoss);
- memcpy(&nvContents->tables.antennaPathLoss[0],
- &nvDefaults.tables.antennaPathLoss[0],
- itemSize);
- break;
-
- case NV_TABLE_PACKET_TYPE_POWER_LIMITS:
- itemSize = sizeof(nvContents->tables.pktTypePwrLimits);
- memcpy(&nvContents->tables.pktTypePwrLimits[0][0],
- &nvDefaults.tables.pktTypePwrLimits[0][0],
- itemSize);
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Not Valid NV Table %d", nvTable->nvTable);
- return -EIO;
- break;
- }
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_get_nv_field() -
- Get Specific NV field
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 1, Process Host command success
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_ftm_get_nv_field
-(
- tPttMsgbuffer *ftmCmd
-)
-{
- sNvFields nvFieldDataBuffer;
- tMsgPttGetNvField *nvField = (tMsgPttGetNvField *)&ftmCmd->msgBody.GetNvField;
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- sHalNv *nvContents = NULL;
- v_SIZE_t nvSize;
-
- nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
- if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- FL("Fail to get cached NV value Status %d"), nvStatus);
- return -EIO;
- }
- memcpy(&nvFieldDataBuffer, &nvContents->fields, sizeof(sNvFields));
-
- switch (nvField->nvField)
- {
- case NV_COMMON_PRODUCT_ID:
- memcpy((void *)&nvField->fieldData,
- &nvFieldDataBuffer.productId,
- sizeof(nvFieldDataBuffer.productId));
- break;
-
- case NV_COMMON_PRODUCT_BANDS:
- memcpy((void *)&nvField->fieldData,
- &nvFieldDataBuffer.productBands,
- sizeof(nvFieldDataBuffer.productBands));
- break;
-
- case NV_COMMON_NUM_OF_TX_CHAINS:
- memcpy((void *)&nvField->fieldData,
- &nvFieldDataBuffer.numOfTxChains,
- sizeof(nvFieldDataBuffer.numOfTxChains));
- break;
-
- case NV_COMMON_NUM_OF_RX_CHAINS:
- memcpy((void *)&nvField->fieldData,
- &nvFieldDataBuffer.numOfRxChains,
- sizeof(nvFieldDataBuffer.numOfRxChains));
- break;
-
- case NV_COMMON_MAC_ADDR:
- memcpy((void *)&nvField->fieldData,
- &nvFieldDataBuffer.macAddr[0],
- NV_FIELD_MAC_ADDR_SIZE);
- break;
-
- case NV_COMMON_MFG_SERIAL_NUMBER:
- memcpy((void *)&nvField->fieldData,
- &nvFieldDataBuffer.mfgSN[0],
- NV_FIELD_MFG_SN_SIZE);
- break;
-
- case NV_COMMON_WLAN_NV_REV_ID:
- memcpy((void *)&nvField->fieldData,
- &nvFieldDataBuffer.wlanNvRevId,
- sizeof(nvFieldDataBuffer.wlanNvRevId));
- break;
-
- case NV_COMMON_COUPLER_TYPE:
- memcpy((void *)&nvField->fieldData,
- &nvFieldDataBuffer.couplerType,
- sizeof(nvFieldDataBuffer.couplerType));
- break;
-
- case NV_COMMON_NV_VERSION:
- {
- VOS_STATUS nvEmbededStatus = VOS_STATUS_SUCCESS;
- v_U8_t nvVersion = nvFieldDataBuffer.nvVersion;
-
- nvEmbededStatus = vos_nv_isEmbeddedNV();
-
- if ( nvEmbededStatus == VOS_STATUS_SUCCESS )
- {
- // High bit is set to indicate embedded NV..
- nvVersion = nvVersion | NV_EMBEDDED_VERSION;
- }
-
- memcpy((void *)&nvField->fieldData,
- &nvVersion,
- sizeof(nvFieldDataBuffer.nvVersion));
- }
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Not Valid NV field %d", nvField->nvField);
- return -EIO;
- break;
- }
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_set_nv_field() -
- Set Specific NV field
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 1, Process Host command success
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_ftm_set_nv_field
-(
- tPttMsgbuffer *ftmCmd
-)
-{
- tMsgPttSetNvField *nvField = (tMsgPttSetNvField *)&ftmCmd->msgBody.SetNvField;
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- v_SIZE_t nvSize;
- sHalNv *nvContents = NULL;
- v_U8_t macLoop;
- v_U8_t *pNVMac;
- v_U8_t lastByteMAC;
-
-
- nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
- if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- FL("Fail to get cached NV value Status %d"), nvStatus);
- return -EIO;
- }
-
- switch (nvField->nvField)
- {
- case NV_COMMON_PRODUCT_ID:
- memcpy(&nvContents->fields.productId,
- &nvField->fieldData,
- sizeof(nvContents->fields.productId));
- break;
-
- case NV_COMMON_PRODUCT_BANDS:
- memcpy(&nvContents->fields.productBands,
- &nvField->fieldData,
- sizeof(nvContents->fields.productBands));
- break;
-
- case NV_COMMON_NUM_OF_TX_CHAINS:
- memcpy(&nvContents->fields.numOfTxChains,
- &nvField->fieldData,
- sizeof(nvContents->fields.numOfTxChains));
- break;
-
- case NV_COMMON_NUM_OF_RX_CHAINS:
- memcpy(&nvContents->fields.numOfRxChains,
- &nvField->fieldData,
- sizeof(nvContents->fields.numOfRxChains));
- break;
-
- case NV_COMMON_MAC_ADDR:
- /* If Last byte is larger than 252 (0xFC), return Error,
- * Since 3MACs should be derived from first MAC */
- if(QWLAN_MAX_MAC_LAST_BYTE_VALUE <
- nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1])
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Last Byte of the seed MAC is too large 0x%x",
- nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1]);
- return -EILSEQ;
- }
-
- pNVMac = (v_U8_t *)nvContents->fields.macAddr;
- lastByteMAC = nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1];
- for(macLoop = 0; macLoop < VOS_MAX_CONCURRENCY_PERSONA; macLoop++)
- {
- nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1] =
- lastByteMAC + macLoop;
- vos_mem_copy(pNVMac + (macLoop * NV_FIELD_MAC_ADDR_SIZE),
- &nvField->fieldData.macAddr.macAddr1[0],
- NV_FIELD_MAC_ADDR_SIZE);
- }
- break;
-
- case NV_COMMON_MFG_SERIAL_NUMBER:
- memcpy(&nvContents->fields.mfgSN[0],
- &nvField->fieldData,
- NV_FIELD_MFG_SN_SIZE);
- break;
-
- case NV_COMMON_WLAN_NV_REV_ID:
- memcpy(&nvContents->fields.wlanNvRevId,
- &nvField->fieldData,
- sizeof(nvContents->fields.wlanNvRevId));
- break;
-
- case NV_COMMON_COUPLER_TYPE:
- memcpy(&nvContents->fields.couplerType,
- &nvField->fieldData,
- sizeof(nvContents->fields.couplerType));
- break;
-
- case NV_COMMON_NV_VERSION:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Cannot modify NV version field %d", nvField->nvField);
- return -EIO;
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Not Valid NV field %d", nvField->nvField);
- return -EIO;
- break;
- }
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_store_nv_table() -
- Store Cached NV information into Flash Memory, file
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 0, Process Host command success
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_ftm_store_nv_table
-(
- tPttMsgbuffer *ftmCmd
-)
-{
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- v_SIZE_t nvSize;
- sHalNv *nvContents = NULL;
- tMsgPttStoreNvTable *nvTable = (tMsgPttStoreNvTable *)&ftmCmd->msgBody.StoreNvTable;
- void *tablePtr = NULL;
- unsigned int tableSize = 0;
- VNV_TYPE tableVNVType = VNV_FIELD_IMAGE;
-
- nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize);
- if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- FL("Fail to get cached NV value Status %d"), nvStatus);
- return -EIO;
- }
-
- /* Set Platform type as PRIMA */
- nvContents->fields.wlanNvRevId = 2;
-
- switch(nvTable->nvTable)
- {
- case NV_FIELDS_IMAGE:
- tablePtr = (void *)&nvContents->fields;
- tableSize = sizeof(nvContents->fields);
- tableVNVType = VNV_FIELD_IMAGE;
- break;
-
- case NV_TABLE_RATE_POWER_SETTINGS:
- tablePtr = (void *)&nvContents->tables.pwrOptimum[0];
- tableSize = sizeof(nvContents->tables.pwrOptimum);
- tableVNVType = VNV_RATE_TO_POWER_TABLE;
- break;
-
- case NV_TABLE_REGULATORY_DOMAINS:
- tablePtr = (void *)&nvContents->tables.regDomains[0];
- tableSize = sizeof(nvContents->tables.regDomains);
- tableVNVType = VNV_REGULARTORY_DOMAIN_TABLE;
- break;
-
- case NV_TABLE_DEFAULT_COUNTRY:
- tablePtr = (void *)&nvContents->tables.defaultCountryTable;
- tableSize = sizeof(nvContents->tables.defaultCountryTable);
- tableVNVType = VNV_DEFAULT_LOCATION;
- break;
-
- case NV_TABLE_TPC_POWER_TABLE:
- tablePtr = (void *)&nvContents->tables.plutCharacterized[0];
- tableSize = sizeof(nvContents->tables.plutCharacterized);
- tableVNVType = VNV_TPC_POWER_TABLE;
- break;
-
- case NV_TABLE_TPC_PDADC_OFFSETS:
- tablePtr = (void *)&nvContents->tables.plutPdadcOffset[0];
- tableSize = sizeof(nvContents->tables.plutPdadcOffset);
- tableVNVType = VNV_TPC_PDADC_OFFSETS;
- break;
-
- case NV_TABLE_VIRTUAL_RATE:
- tablePtr = (void *)&nvContents->tables.pwrOptimum_virtualRate[0];
- tableSize = sizeof(nvContents->tables.pwrOptimum_virtualRate);
- tableVNVType = VNV_TABLE_VIRTUAL_RATE;
- break;
-
- case NV_TABLE_RSSI_CHANNEL_OFFSETS:
- tablePtr = (void *)&nvContents->tables.rssiChanOffsets[0];
- tableSize = sizeof(nvContents->tables.rssiChanOffsets);
- tableVNVType = VNV_RSSI_CHANNEL_OFFSETS;
- break;
-
- case NV_TABLE_HW_CAL_VALUES:
- tablePtr = (void *)&nvContents->tables.hwCalValues;
- tableSize = sizeof(nvContents->tables.hwCalValues);
- tableVNVType = VNV_HW_CAL_VALUES;
- break;
-
- case NV_TABLE_FW_CONFIG:
- tablePtr = (void *)&nvContents->tables.fwConfig;
- tableSize = sizeof(nvContents->tables.fwConfig);
- tableVNVType = VNV_FW_CONFIG;
- break;
-
- case NV_TABLE_ANTENNA_PATH_LOSS:
- tablePtr = (void *)&nvContents->tables.antennaPathLoss[0];
- tableSize = sizeof(nvContents->tables.antennaPathLoss);
- tableVNVType = VNV_ANTENNA_PATH_LOSS;
- break;
-
- case NV_TABLE_PACKET_TYPE_POWER_LIMITS:
- tablePtr = (void *)&nvContents->tables.pktTypePwrLimits[0][0];
- tableSize = sizeof(nvContents->tables.pktTypePwrLimits);
- tableVNVType = VNV_PACKET_TYPE_POWER_LIMITS;
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Not Supported Table Type %d", nvTable->nvTable);
- return -EIO;
- break;
-
- }
-
- nvStatus = vos_nv_write(tableVNVType,
- tablePtr,
- tableSize);
- if(VOS_STATUS_SUCCESS != nvStatus)
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Failed update nv item %d", nvStatus);
- return -EIO;
- }
-
- return 1;
-}
-
-/* --------------------------------------------------------------------------
- \brief wlan_hdd_ftm_get_nv_bin() -
- Get NV bin read from Flash Memory, file
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 0, Process Host command success
---------------------------------------------------------------------------*/
-
-static int wlan_hdd_ftm_get_nv_bin
-(
- v_U16_t msgId,
- hdd_context_t *pHddCtx,
- tPttMsgbuffer *ftmCmd
-)
-{
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- pttGetNvTable *nvTable = (pttGetNvTable *)&ftmCmd->msgBody.GetNvBin;
- v_SIZE_t nvSize;
- v_U8_t *nvContents;
- v_U16_t offset = 0;
-
-
- if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) ||
- (0 == pHddCtx->ftm.processedNVTableSize))
- {
- if ( msgId == PTT_MSG_GET_NV_BIN )
- {
- nvStatus = vos_nv_getNVEncodedBuffer((void **)&nvContents, &nvSize);
- }
- else
- {
- nvStatus = vos_nv_getNVDictionary((void **)&nvContents, &nvSize);
- }
-
- if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents))
- {
- VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- FL("Fail to get cached NV value Status %d"), nvStatus);
- return -EIO;
- }
-
- switch (nvTable->nvTable)
- {
- case NV_BINARY_IMAGE:
- pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)nvContents;
- break;
- default:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Not Valid NV Table %d", nvTable->nvTable);
- return -EIO;
- break;
- }
-
- /* Set Current Processing NV table type */
- pHddCtx->ftm.processingNVTable = nvTable->nvTable;
- if ( msgId == PTT_MSG_GET_NV_BIN )
- {
- pHddCtx->ftm.targetNVTableSize = nvSize + sizeof(v_U32_t);
- /* Validity Period */
- pHddCtx->ftm.tempNVTableBuffer[0] = 0xFF;
- pHddCtx->ftm.tempNVTableBuffer[1] = 0xFF;
- pHddCtx->ftm.tempNVTableBuffer[2] = 0xFF;
- pHddCtx->ftm.tempNVTableBuffer[3] = 0xFF;
- offset = sizeof(v_U32_t);
- }
- else
- {
- pHddCtx->ftm.targetNVTableSize = nvSize;
- offset = 0;
- }
-
- /* Copy target NV table value into temp context buffer */
- vos_mem_copy(&pHddCtx->ftm.tempNVTableBuffer[offset],
- pHddCtx->ftm.targetNVTablePointer,
- pHddCtx->ftm.targetNVTableSize);
- }
-
-
- if (pHddCtx->ftm.processingNVTable != nvTable->nvTable)
- {
- /* Invalid table type */
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Invalid NV Table, now Processing %d, not %d",
- pHddCtx->ftm.processingNVTable, nvTable->nvTable);
-
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
-
- return -EINVAL;
- }
-
- nvTable->tableSize = pHddCtx->ftm.targetNVTableSize;
-
- /* Update processed pointer to prepare next chunk copy */
- if ( (nvTable->chunkSize + pHddCtx->ftm.processedNVTableSize) >
- pHddCtx->ftm.targetNVTableSize )
- {
- nvTable->chunkSize =
- (pHddCtx->ftm.targetNVTableSize - pHddCtx->ftm.processedNVTableSize);
- }
-
- /* Copy next chunk of NV table value into response buffer */
- vos_mem_copy(
- &nvTable->tableData,
- pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize,
- nvTable->chunkSize);
-
- pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize;
-
- if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize)
- {
- /* Finished to process last chunk of data, initialize buffer */
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- }
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_set_nv_bin() -
- Set NV bin to Flash Memory, file
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 0, Process Host command success
-
-+----------------------------------------------------------------------------*/
-
-static int wlan_hdd_ftm_set_nv_bin
-(
- hdd_context_t *pHddCtx,
- tPttMsgbuffer *ftmCmd
-)
-{
- VOS_STATUS nvStatus = VOS_STATUS_SUCCESS;
- pttSetNvTable *nvTable = (pttSetNvTable *)&ftmCmd->msgBody.SetNvBin;
-
- /* Test first chunk of NV table */
- if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) ||
- (0 == pHddCtx->ftm.processedNVTableSize))
- {
- switch (nvTable->nvTable)
- {
- case NV_BINARY_IMAGE:
- pHddCtx->ftm.targetNVTableSize = nvTable->tableSize;
- break;
- default:
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Not Valid NV Table %d", nvTable->nvTable);
- return -EIO;
- break;
- }
-
- /* Set Current Processing NV table type */
- pHddCtx->ftm.processingNVTable = nvTable->nvTable;
- pHddCtx->ftm.processedNVTableSize = 0;
-
- if (pHddCtx->ftm.targetNVTableSize != nvTable->tableSize)
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Invalid Table Size %d", nvTable->tableSize);
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- return -EINVAL;
- }
- }
-
- if (pHddCtx->ftm.processingNVTable != nvTable->nvTable)
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Invalid NV Table, now Processing %d, not %d",
- pHddCtx->ftm.processingNVTable, nvTable->nvTable);
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- return -EINVAL;
- }
-
- vos_mem_copy(
- pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize,
- &nvTable->tableData,
- nvTable->chunkSize);
-
- pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize;
-
- if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize)
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Processing Done!! write encoded Buffer %d",
- pHddCtx->ftm.targetNVTableSize);
-
- nvStatus = wlan_write_to_efs ((v_U8_t*)pHddCtx->ftm.tempNVTableBuffer,
- (v_U16_t)pHddCtx->ftm.targetNVTableSize);
-
- if ((VOS_STATUS_SUCCESS != nvStatus))
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Fail to set NV Binary %d", nvStatus);
- return -EIO;
- }
-
- nvStatus = vos_nv_setNVEncodedBuffer(
- (v_U8_t*)pHddCtx->ftm.tempNVTableBuffer,
- (v_SIZE_t)pHddCtx->ftm.targetNVTableSize);
-
- if ((VOS_STATUS_SUCCESS != nvStatus))
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
- "Fail to set NV Binary %d", nvStatus);
- return -EIO;
- }
-
- pHddCtx->ftm.processingNVTable = NV_MAX_TABLE;
- pHddCtx->ftm.targetNVTableSize = 0;
- pHddCtx->ftm.processedNVTableSize = 0;
- vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE);
- }
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_ftm_temp_get_rel_num() -
- Get internal release number
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- -1, Process Host command fail, vail out
- 0, Process Host command success
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_ftm_temp_get_rel_num
-(
- tPttMsgbuffer *ftmCmd
-)
-{
- tMsgPttGetBuildReleaseNumber *relNum = (tMsgPttGetBuildReleaseNumber *)&ftmCmd->msgBody.GetBuildReleaseNumber;
-
- relNum->relParams.drvMjr = QWLAN_VERSION_MAJOR;
- relNum->relParams.drvMnr = QWLAN_VERSION_MINOR;
- relNum->relParams.drvPtch = QWLAN_VERSION_PATCH;
- relNum->relParams.drvBld = QWLAN_VERSION_BUILD;
- relNum->relParams.pttMax = 10;
- relNum->relParams.pttMin = 1;
-
- return 1;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_process_ftm_host_cmd() -
- process any command should be handled within host.
- decide any command should be send to HAL or not
-
- \param - ftmCmd - Pointer FTM Commad Buffer
-
- \return - int
- < 0, Process Host command fail, bail out
- 0, Process Host command success, not need to send CMD to HAL
- 1, Process Host command success, need to send CMD to HAL
-
- --------------------------------------------------------------------------*/
-int wlan_hdd_process_ftm_host_cmd
-(
- hdd_context_t *pHddCtx,
- void *ftmCmd
-)
-{
- tPttMsgbuffer *pFTMCmd = (tPttMsgbuffer *)ftmCmd;
- int needToRouteHal = 1;
- int hostState = 1;
-
- switch(pFTMCmd->msgId)
- {
- case PTT_MSG_GET_NV_TABLE:
- hostState = wlan_hdd_ftm_get_nv_table(pHddCtx, pFTMCmd);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_SET_NV_TABLE:
- hostState = wlan_hdd_ftm_set_nv_table(pHddCtx, pFTMCmd);
- /* Temp NV Operation will be isolated to host
- needToRouteHal = 1; */
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_BLANK_NV:
- hostState = wlan_hdd_ftm_blank_nv_table(pFTMCmd);
- needToRouteHal = 1;
- break;
-
- case PTT_MSG_DEL_NV_TABLE:
- hostState = wlan_hdd_ftm_delete_nv_table(pFTMCmd);
- needToRouteHal = 1;
- break;
-
- case PTT_MSG_GET_NV_FIELD:
- hostState = wlan_hdd_ftm_get_nv_field(pFTMCmd);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_SET_NV_FIELD:
- hostState = wlan_hdd_ftm_set_nv_field(pFTMCmd);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_STORE_NV_TABLE:
- hostState = wlan_hdd_ftm_store_nv_table(pFTMCmd);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_GET_NV_BIN:
- case PTT_MSG_GET_DICTIONARY:
- hostState = wlan_hdd_ftm_get_nv_bin(pFTMCmd->msgId, pHddCtx, pFTMCmd);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_SET_NV_BIN:
- hostState = wlan_hdd_ftm_set_nv_bin(pHddCtx, pFTMCmd);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_DBG_READ_REGISTER:
- wpalReadRegister(pFTMCmd->msgBody.DbgReadRegister.regAddr,
- &pFTMCmd->msgBody.DbgReadRegister.regValue);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_DBG_WRITE_REGISTER:
- wpalWriteRegister(pFTMCmd->msgBody.DbgWriteRegister.regAddr,
- pFTMCmd->msgBody.DbgWriteRegister.regValue);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_DBG_READ_MEMORY:
- wpalReadDeviceMemory(pFTMCmd->msgBody.DbgReadMemory.memAddr,
- (unsigned char *)pFTMCmd->msgBody.DbgReadMemory.pMemBuf,
- pFTMCmd->msgBody.DbgReadMemory.nBytes);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_DBG_WRITE_MEMORY:
- wpalWriteDeviceMemory(pFTMCmd->msgBody.DbgWriteMemory.memAddr,
- (unsigned char *)pFTMCmd->msgBody.DbgWriteMemory.pMemBuf,
- pFTMCmd->msgBody.DbgWriteMemory.nBytes);
- needToRouteHal = 0;
- break;
-
- case PTT_MSG_GET_BUILD_RELEASE_NUMBER:
- wlan_hdd_ftm_temp_get_rel_num(pFTMCmd);
- needToRouteHal = 0;
- break;
-
- default:
- needToRouteHal = 1;
- break;
- }
-
- if( 0 > hostState)
- {
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "Host Command Handle Fail, Bailout");
- return hostState;
- }
-
- return needToRouteHal;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_hdd_process_ftm_cmd() -
-
- This function process the commands received from the ptt socket application.
-
- \param - pAdapter - Pointer HDD Context.
-
- \param - wnl - Pointer to the ANI netlink header.
-
- \return - none
-
- --------------------------------------------------------------------------*/
-
-void wlan_hdd_process_ftm_cmd
-(
- hdd_context_t *pHddCtx,
- tAniNlHdr *wnl
-)
-{
- wlan_hdd_ftm_request_t *pRequestBuf = (wlan_hdd_ftm_request_t*)(((v_U8_t*)(&wnl->wmsg))+sizeof(tAniHdr)) ;
- v_U16_t cmd_len;
- v_U8_t *pftm_data;
- pVosContextType pVosContext = (pVosContextType)(pHddCtx->pvosContext);
- int hostState;
- tPttMsgbuffer *tempRspBuffer = NULL;
-
- ENTER();
-
- //Delay to fix NV write failure on JB
- vos_busy_wait(10000); //10ms
-
- if (!pRequestBuf) {
-
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s: request buffer is null", __func__);
- return ;
- }
-
- if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HDD, NULL))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN,
- "%s: Load/Unload in Progress. Ignoring FTM Command %d",
- __func__, pRequestBuf->ftmpkt.ftm_cmd_type);
- }
-
-
- /*Save the received request*/
- pHddCtx->ftm.pRequestBuf = pRequestBuf;
-
- pHddCtx->ftm.pResponseBuf = (wlan_hdd_ftm_response_t*)pRequestBuf;
- /*Save the received request netlink header used for sending the response*/
- pHddCtx->ftm.wnl = wnl;
- if (pRequestBuf->module_type != QUALCOMM_MODULE_TYPE) {
-
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Invalid Module Type =%d", __func__,pRequestBuf->module_type);
-
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE;
- wlan_ftm_send_response(pHddCtx);
- return ;
- }
-
- switch (pRequestBuf->ftmpkt.ftm_cmd_type)
- {
- case WLAN_FTM_START:
- if (pHddCtx->ftm.ftm_state == WLAN_FTM_STARTED) {
-
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s: FTM has already started =%d", __func__,pRequestBuf->ftmpkt.ftm_cmd_type);
- pHddCtx->ftm.pResponseBuf->ftm_hdr.data_len -= 1;
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS;
- wlan_ftm_send_response(pHddCtx);
- return;
- }
-
- if (wlan_hdd_ftm_start(pVosContext->pHDDContext) != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: : Failed to start WLAN FTM"
- ,__func__);
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE;
- wlan_ftm_send_response(pHddCtx);
- return;
- }
- /* Ptt application running on the host PC expects the length to be one byte less that what we have received*/
- pHddCtx->ftm.pResponseBuf->ftm_hdr.data_len -= 1;
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS;
- pHddCtx->ftm.pResponseBuf->ftmpkt.ftm_cmd_type = 0;
-
- wlan_ftm_send_response(pHddCtx);
-
- break;
-
- case WLAN_FTM_STOP:
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) {
-
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: FTM has not started", __func__);
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS;
- wlan_ftm_send_response(pHddCtx);
- return;
- }
-
- if (VOS_STATUS_SUCCESS != wlan_ftm_stop(pHddCtx)) {
-
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE;
- wlan_ftm_send_response(pHddCtx);
- return;
- }
-
- pHddCtx->ftm.ftm_state = WLAN_FTM_STOPPED;
- /* This would send back the Command Success Status */
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS;
-
- wlan_ftm_send_response(pHddCtx);
-
- break;
-
- case WLAN_FTM_CMD:
- /* if it is regular FTM command, pass it to HAL PHY */
- if(pHddCtx->ftm.IsCmdPending == TRUE) {
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: FTM command pending for process", __func__);
- return;
- }
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) {
-
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: FTM has not started", __func__);
-
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE;
- wlan_ftm_send_response(pHddCtx);
- return;
-
- }
- vos_event_reset(&pHddCtx->ftm.ftm_vos_event);
- cmd_len = pRequestBuf->ftm_hdr.data_len;
- cmd_len -= (sizeof(wlan_hdd_ftm_request_t)- sizeof(pRequestBuf->ftmpkt.ftm_cmd_type));
- pftm_data = pRequestBuf->ftmpkt.pFtmCmd;
-
- hostState = wlan_hdd_process_ftm_host_cmd(pHddCtx, pftm_data);
- if (0 == hostState)
- {
- tempRspBuffer = (tPttMsgbuffer *)vos_mem_malloc(((tPttMsgbuffer *)pftm_data)->msgBodyLength);
- if (NULL == tempRspBuffer)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- "%s:: temp Mem Alloc Fail", __func__);
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE;
- wlan_ftm_send_response(pHddCtx);
- return;
- }
- memcpy(tempRspBuffer, pftm_data, ((tPttMsgbuffer *)pftm_data)->msgBodyLength);
- tempRspBuffer->msgResponse = PTT_STATUS_SUCCESS;
- memcpy((unsigned char *)&pHddCtx->ftm.pResponseBuf->ftmpkt,
- (unsigned char *) tempRspBuffer,
- tempRspBuffer->msgBodyLength);
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS;
- wlan_ftm_send_response(pHddCtx);
- vos_mem_free(tempRspBuffer);
- return;
- }
- else if (0 > hostState)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR, "*** Host Command Handle Fail ***");
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE;
- wlan_ftm_send_response(pHddCtx);
- return;
- }
-
- //HEXDUMP("Request:",(char*)pftm_data,cmd_len);
-
- /*Post the command to the HAL*/
- if (wlan_ftm_postmsg(pftm_data, cmd_len) != VOS_STATUS_SUCCESS) {
-
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: FTM command failed", __func__);
- return;
-
- }
-
- /*After successful posting of message the command should be pending*/
- pHddCtx->ftm.IsCmdPending = TRUE;
-
- /*Wait here until you get the response from HAL*/
- if (vos_wait_single_event(&pHddCtx->ftm.ftm_vos_event, FTM_VOS_EVENT_WAIT_TIME)!= VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s: vos_wait_single_event failed",__func__);
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE;
- wlan_ftm_send_response(pHddCtx);
- pHddCtx->ftm.IsCmdPending = FALSE;
- return;
- }
-
- /*This check will handle the case where the completion is sent by
- wlan_hdd_process_ftm_cmd() and not by the HAL*/
- if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HDD, NULL))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN,
- "%s: Load/Unload in Progress. Ignoring FTM Command %d"
- , __func__, pRequestBuf->ftmpkt.ftm_cmd_type);
-
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE;
- wlan_ftm_send_response(pHddCtx);
- pHddCtx->ftm.IsCmdPending = FALSE;
- return ;
- }
-
- cmd_len = be16_to_cpu(pHddCtx->ftm.wnl->wmsg.length);
-
- //HEXDUMP("Response to QXDM:", (char *)&pAdapter->ftm.wnl->wmsg, cmd_len);
-
- wlan_ftm_send_response(pHddCtx);
- pHddCtx->ftm.IsCmdPending = FALSE;
- break;
-
- default:
-
- hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: Command not supported", __func__);
- return;
- }
-
- EXIT();
- return;
-} /* wlan_adp_ftm_cmd() */
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_start_stop_ftm() -
-
- This function is used for start/stop the ftm driver.
-
- \param - pAdapter - Pointer HDD Context.
- - start - 1/0 to start/stop ftm driver.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_start_stop_ftm(hdd_adapter_t *pAdapter,
- v_U16_t start)
-{
- VOS_STATUS status;
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (start)
- {
- pHddCtx->ftm.cmd_iwpriv = TRUE;
- status = wlan_hdd_ftm_start(pHddCtx);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "FTM Start Failed");
- return VOS_STATUS_E_FAILURE;
- }
- if (NULL == pMsgBuf)
- {
- pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer));
- if (NULL == pMsgBuf)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:pMsgBuf is NULL", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- }
- }
- else
- {
- status = wlan_ftm_stop(pHddCtx);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "FTM Stop Failed");
- return VOS_STATUS_E_FAILURE;
- }
- pHddCtx->ftm.ftm_state = WLAN_FTM_STOPPED;
- if (pMsgBuf)
- {
- vos_mem_free((v_VOID_t * )pMsgBuf);
- pMsgBuf = NULL;
- }
- }
- return VOS_STATUS_SUCCESS;
-}
-
-
-static VOS_STATUS validate_channel(unsigned int channel,unsigned int cb)
-{
- unsigned int *table = NULL;
- int index = 0;
-
- if (PHY_SINGLE_CHANNEL_CENTERED == cb)
- table = valid_channel;
- else if (cb >= PHY_DOUBLE_CHANNEL_LOW_PRIMARY &&
- cb <= PHY_DOUBLE_CHANNEL_HIGH_PRIMARY)
- table = valid_channel_cb40;
- else if (cb >= PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED &&
- cb <= PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH)
- table = valid_channel_cb80;
-
- if (NULL == table)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s failed to find channel table %d",
- __func__, cb);
- return VOS_STATUS_E_FAILURE;
- }
-
- while (table[index] != 0)
- {
- if (table[index] == channel)
- return VOS_STATUS_SUCCESS;
-
- index++;
- }
-
- return VOS_STATUS_E_FAILURE;
-}
-
-
-static unsigned int get_primary_channel(unsigned int center_channel,unsigned int cb)
-{
- unsigned int primary_channel = center_channel;
-
- if (center_channel <= 14)
- return primary_channel ;
-
- switch (cb)
- {
- case PHY_DOUBLE_CHANNEL_LOW_PRIMARY:
- case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED:
- case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW:
- primary_channel -= 2;
- break;
-
-
- case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY:
- case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED:
- case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH:
- primary_channel += 2;
- break;
-
- case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW:
- primary_channel -= 6;
- break;
-
- case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH:
- primary_channel += 6;
- break;
- }
-
- return primary_channel;
-
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_set_channel() -
-
- This function is used for setting the channel to the halphy ptt module.
-
- \param - pAdapter - Pointer HDD Context.
- - channel - Channel Number 1-14.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_set_channel(hdd_adapter_t *pAdapter,v_U16_t channel)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (VOS_STATUS_SUCCESS != validate_channel(channel, ftm_status.cbmode))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Invalid Channel Number. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- vos_mem_set(pMsgBuf, sizeof(*pMsgBuf), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_SET_CHANNEL;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttSetChannel) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
-
- pMsgBody->SetChannel.chId = get_primary_channel(channel, ftm_status.cbmode);
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Channel =%d", pMsgBody->SetChannel.chId);
- pMsgBody->SetChannel.cbState = ftm_status.cbmode ;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
-
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
-
- }
-done:
-
- return status;
-}
-
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_set_pwr_cntl_mode() -
-
- This function is used for setting the power control mode for tx.
-
- \param - pAdapter - Pointer HDD Context.
- - pwr_mode - power control mode 0-2.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_set_pwr_cntl_mode(hdd_adapter_t *pAdapter,
- v_U16_t pwr_mode)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (pwr_mode > 2)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:invalid control mode.valid mode is 0 , 1, 2.", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBody = &pMsgBuf->msgBody;
- pMsgBuf->msgId = PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttCloseTpcLoop) + PTT_HEADER_LENGTH;
-
- pMsgBody->CloseTpcLoop.tpcClose = pwr_mode;
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf, pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- done:
- return status;
-
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_set_txpower() -
-
- This function is used for setting the txpower to the halphy ptt module.
-
- \param - pAdapter - Pointer HDD Context.
- - txpower - txpower Number 1-18.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_set_txpower(hdd_adapter_t *pAdapter,
- v_U16_t txpower)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- /* do not allow to change setting when tx pktgen is enabled, although halphy does allow changing tx power
- * when tx pktgen is enabled
- */
- if (ftm_status.frameGenEnabled)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:cannot set txpower when pktgen is enabled.", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if(!(txpower >= 9 && txpower <= 24))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Invalid tx power. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBody = &pMsgBuf->msgBody;
- pMsgBuf->msgId = PTT_MSG_SET_TX_POWER;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttSetTxPower) + PTT_HEADER_LENGTH;
-
- pMsgBody->SetTxPower.dbmPwr = txpower*100;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- ftm_status.txpower = txpower ;
- done:
-
- return status;
-
-}
-
-
-static VOS_STATUS wlan_ftm_priv_enable_dpd(hdd_adapter_t *pAdapter,
- v_U16_t enable)
-{
- tANI_U32 value = 0;
- tANI_U32 reg_addr;
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
-#ifdef WCN_PRONTO
- reg_addr = 0xfb018000;
-#else
- reg_addr = 0x03018000;
-#endif
- wpalReadRegister(reg_addr, &value);
- if (enable)
- {
- value &= (~QWLAN_TXFIR_CFG_DPD_BYPASS_MASK);
- }
- else
- {
- value |= QWLAN_TXFIR_CFG_DPD_BYPASS_MASK;
- }
-
- wpalWriteRegister(reg_addr, value);
-
- return VOS_STATUS_SUCCESS;
-}
-
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_set_txrate() -
-
- This function is used for setting the txrate to the halphy ptt module.
- It converts the user input string for txrate to the tx rate index.
-
- \param - pAdapter - Pointer HDD Context.
- - txrate - Pointer to the tx rate string.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_set_txrate(hdd_adapter_t *pAdapter,char *txrate)
-{
- int ii;
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm.", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- /* do not allow to change setting when tx pktgen is enabled */
- if (ftm_status.frameGenEnabled)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txrate when pktgen is enabled.", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- for(ii = 0; ii < SIZE_OF_TABLE(rateName_rateIndex_tbl); ii++)
- {
- if(!strcmp(rateName_rateIndex_tbl[ii].rate_str,txrate))
- break;
- }
- if(ii >= SIZE_OF_TABLE(rateName_rateIndex_tbl))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid Rate String", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- ftm_status.frameParams.rate = rateName_rateIndex_tbl[ii].rate_index;
- ftm_status.frameParams.preamble = rate_index_2_preamble_table[rateName_rateIndex_tbl[ii].rate_index].Preamble;
-
- return VOS_STATUS_SUCCESS;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_start_stop_tx_pktgen() -
-
- This function is used for start/stop the tx packet generation.
-
- \param - pAdapter - Pointer HDD Context.
- - startStop - Value( 1/0) start/stop the tx packet generation.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U16_t startStop)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (startStop != 1 && startStop != 0)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Tx value is invalid ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if ((ftm_status.frameGenEnabled && startStop == 1) ||
- (!ftm_status.frameGenEnabled && startStop == 0))
- {
- return VOS_STATUS_SUCCESS ;
- }
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
-
- if (startStop == 1)
- {
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_CONFIG_TX_PACKET_GEN;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttConfigTxPacketGen) + PTT_HEADER_LENGTH;
- pMsgBody = &pMsgBuf->msgBody;
- pMsgBody->ConfigTxPacketGen.frameParams = ftm_status.frameParams ;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:posting PTT_MSG_CONFIG_TX_PACKET_GEN failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s: PTT_MSG_CONFIG_TX_PACKET_GEN failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- }
-
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_START_STOP_TX_PACKET_GEN;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttStartStopTxPacketGen) + PTT_HEADER_LENGTH;
- pMsgBody = &pMsgBuf->msgBody;
- pMsgBody->StartStopTxPacketGen.startStop = startStop;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
- if(status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
-done:
-
- if (status == VOS_STATUS_SUCCESS)
- {
- if (startStop == 1)
- {
- ftm_status.frameGenEnabled = eANI_BOOLEAN_TRUE;
- }
- else
- {
- ftm_status.frameGenEnabled = eANI_BOOLEAN_FALSE;
- }
- }
-
- return status;
-}
-
-
-
-static VOS_STATUS wlan_ftm_priv_set_cb(hdd_adapter_t *pAdapter, v_U16_t cbmode)
-{
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (cbmode > PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:cb mode value is invalid ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- ftm_status.cbmode = cbmode;
-
- return VOS_STATUS_SUCCESS;
-
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_rx_mode() -
-
- This function is used for start/stop the rx packet generation.
-
- \param - pAdapter - Pointer HDD Context.
- - rxmode - 0-disable RX.
- - 1-rx ALL frames
- - 2-rx 11 g/n frames
- - 3-rx 11b frames
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_rx_mode(hdd_adapter_t *pAdapter,v_U16_t rxmode)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (rxmode > 3)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Rx mode value is invalid ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
-
- pMsgBuf->msgId = PTT_MSG_SET_RX_DISABLE_MODE;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttSetRxDisableMode) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
-
- switch(rxmode)
- {
- case RXMODE_DISABLE_ALL:
- pMsgBody->SetRxDisableMode.disabled.agPktsDisabled = VOS_TRUE;
- pMsgBody->SetRxDisableMode.disabled.bPktsDisabled = VOS_TRUE;
- pMsgBody->SetRxDisableMode.disabled.slrPktsDisabled= VOS_TRUE;
- break;
-
- case RXMODE_ENABLE_ALL:
- pMsgBody->SetRxDisableMode.disabled.agPktsDisabled = VOS_FALSE;
- pMsgBody->SetRxDisableMode.disabled.bPktsDisabled = VOS_FALSE;
- pMsgBody->SetRxDisableMode.disabled.slrPktsDisabled= VOS_FALSE;
- break;
-
- case RXMODE_ENABLE_11GN:
- pMsgBody->SetRxDisableMode.disabled.agPktsDisabled = VOS_FALSE;
- pMsgBody->SetRxDisableMode.disabled.bPktsDisabled = VOS_TRUE;
- pMsgBody->SetRxDisableMode.disabled.slrPktsDisabled= VOS_TRUE;
- break;
-
- case RXMODE_ENABLE_11B:
- pMsgBody->SetRxDisableMode.disabled.agPktsDisabled = VOS_TRUE;
- pMsgBody->SetRxDisableMode.disabled.bPktsDisabled = VOS_FALSE;
- pMsgBody->SetRxDisableMode.disabled.slrPktsDisabled= VOS_TRUE;
- break;
-
- }
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL(" wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- ftm_status.rxmode = rxmode ;
-done:
-
- return status;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_rx_pkt_clear() -
-
- This function sets the rx pkt count to zero.
-
- \param - pAdapter - Pointer HDD Context.
- - rx_pkt_clear - rx_pkt_clear value.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_rx_pkt_clear(hdd_adapter_t *pAdapter,v_U16_t rx_pkt_clear)
-{
- VOS_STATUS status;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (rx_pkt_clear != 1)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Invalid rx_pkt_clear value ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_RESET_RX_PACKET_STATISTICS;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttResetRxPacketStatistics) + PTT_HEADER_LENGTH;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-done:
-
- return status;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_get_channel() -
-
- This function gets the channel number from the halphy ptt module and
- returns the channel number to the application.
-
- \param - pAdapter - Pointer HDD Context.
- - pChannel - Poniter to get the Channel number.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pChannel)
-{
- unsigned long rc;
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- v_U16_t freq;
- v_U8_t indx=0;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_DBG_READ_REGISTER;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttDbgReadRegister) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
- pMsgBody->DbgReadRegister.regAddr = QWLAN_AGC_CHANNEL_FREQ_REG;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
-
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- freq = ((v_U16_t)pMsgBody->DbgReadRegister.regValue & QWLAN_AGC_CHANNEL_FREQ_FREQ_MASK);
-
- while ((indx < SIZE_OF_TABLE(freq_chan_tbl)) && (freq != freq_chan_tbl[indx].freq))
- indx++;
- if (indx >= SIZE_OF_TABLE(freq_chan_tbl))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid Frequency!!!", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- *pChannel = freq_chan_tbl[indx].chan;
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Channel = %d freq = %d", *pChannel, freq);
- done:
-
- return status;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_get_txpower() -
-
- This function gets the TX power from the halphy ptt module and
- returns the TX power to the application.
-
- \param - pAdapter - Pointer HDD Context.
- - pTxPwr - Poniter to get the Tx power.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_get_txpower(hdd_adapter_t *pAdapter,v_U16_t *pTxPwr)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_GET_TX_POWER_REPORT;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttGetTxPowerReport) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s: PTT_MSG_GET_TX_POWER_REPORT failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- *pTxPwr = ((((pMsgBody->GetTxPowerReport.pwrTemplateIndex & 0x1F) + 4)*50)/100);
-
- done:
-
- return status;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_get_ftm_version() -
-
- This function gets ftm driver and firmware version.
-
- \param - pAdapter - Pointer HDD Context.
- - pTxRate - Poniter to get the Tx rate.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- v_U32_t reg_val;
- char *buf = pftmVer;
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- int lenRes = 0;
- int lenBuf = WE_FTM_MAX_STR_LEN;
- unsigned long rc;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (!pMsgBuf) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s: pMsgBuf is NULL", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_DBG_READ_REGISTER;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttDbgReadRegister) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
- pMsgBody->DbgReadRegister.regAddr = QWLAN_RFAPB_REV_ID_REG;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
-
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- reg_val = (v_U16_t)pMsgBody->DbgReadRegister.regValue;
-
- init_completion(&pHddCtx->ftm.ftm_comp_var);
-
- pMsgBuf->msgId = PTT_MSG_GET_BUILD_RELEASE_NUMBER;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttGetBuildReleaseNumber) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- lenRes = snprintf(buf, lenBuf, "%s_",WLAN_CHIP_VERSION);
- if(lenRes < 0 || lenRes >= lenBuf)
- {
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- buf += lenRes;
- lenBuf -= lenRes;
-
- /*Read the RevID*/
- lenRes = snprintf(buf, lenBuf, "%x.%x-",(v_U8_t)(reg_val >> 8), (v_U8_t)(reg_val &0x000000FF));
- if(lenRes < 0 || lenRes >= lenBuf)
- {
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- buf += lenRes;
- lenBuf -= lenRes;
-
- lenRes = snprintf(buf, lenBuf, "%s-", QWLAN_VERSIONSTR);
- if(lenRes < 0 || lenRes >= lenBuf)
- {
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- buf += lenRes;
- lenBuf -= lenRes;
-
-
-done:
-
- return status;
-
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_get_txrate() -
-
- This function gets the TX rate from the halphy ptt module and
- returns the TX rate to the application.
-
- \param - pAdapter - Pointer HDD Context.
- - pTxRate - Poniter to get the Tx rate.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_get_txrate(hdd_adapter_t *pAdapter,char *pTxRate)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- v_U16_t rate_index,ii;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- if (!pMsgBuf) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s: pMsgBuf is NULL", __func__);
- return VOS_STATUS_E_FAILURE;
- }
-
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_GET_TX_POWER_REPORT;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttGetTxPowerReport) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse == PTT_STATUS_SUCCESS) {
-
- rate_index = pMsgBody->GetTxPowerReport.rate;
- }
- else {
- /*Return the default rate*/
- //rate_index = HAL_PHY_RATE_11A_6_MBPS;
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s: PTT_MSG_GET_TX_POWER_REPORT failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- for(ii = 0; ii < SIZE_OF_TABLE(rateName_rateIndex_tbl); ii++) {
- if(rateName_rateIndex_tbl[ii].rate_index == rate_index)
- break;
- }
- if(ii >= SIZE_OF_TABLE(rateName_rateIndex_tbl))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid Rate Index", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- strlcpy(pTxRate,rateName_rateIndex_tbl[ii].rate_str, WE_FTM_MAX_STR_LEN);
-done:
-
- return status;
-
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_get_rx_pkt_count() -
-
- This function gets the rx pkt count from the halphy ptt module and
- returns the rx pkt count to the application.
-
- \param - pAdapter - Pointer HDD Context.
- - pRxPktCnt - Poniter to get the rx pkt count.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_get_rx_pkt_count(hdd_adapter_t *pAdapter,v_U16_t *pRxPktCnt)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_GET_RX_PKT_COUNTS;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttGetRxPktCounts) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- *pRxPktCnt = pMsgBody->GetRxPktCounts.counters.totalRxPackets;
-done:
-
- return status;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_get_rx_rssi() -
-
- This function gets the rx rssi from the halphy ptt module and
- returns the rx rssi to the application.
-
- \param - pAdapter - Pointer HDD Context.
- - buf - Poniter to get rssi of Rx chains
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_get_rx_rssi(hdd_adapter_t *pAdapter,char *buf)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
- unsigned long rc;
- long ret;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_GET_RX_RSSI;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttGetRxRssi) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- ret = snprintf(buf, WE_FTM_MAX_STR_LEN, " R0:%d, R1:%d",
- pMsgBody->GetRxRssi.rssi.rx[0],
- pMsgBody->GetRxRssi.rssi.rx[1]);
-
- if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN )
- {
- status = VOS_STATUS_E_FAILURE;
- }
-
-done:
-
- return status;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_get_mac_address() -
-
- This function gets the mac address from the halphy ptt module and
- returns the mac address to the application.
-
- \param - pAdapter - Pointer HDD Context.
- - buf - Poniter to get the mac address.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *buf)
-{
- v_BOOL_t itemIsValid = VOS_FALSE;
- v_U8_t macAddr[VOS_MAC_ADDRESS_LEN] = {0, 0x0a, 0xf5, 4,5, 6};
- int ret;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__);
- return VOS_STATUS_E_FAILURE;
- }
- /*Check the NV FIELD is valid or not*/
- if (vos_nv_getValidity(VNV_FIELD_IMAGE, &itemIsValid) == VOS_STATUS_SUCCESS)
- {
- if (itemIsValid == VOS_TRUE)
- {
- vos_nv_readMacAddress(macAddr);
-
- ret = snprintf(buf, WE_FTM_MAX_STR_LEN,
- "%02x:%02x:%02x:%02x:%02x:%02x",
- MAC_ADDR_ARRAY(macAddr));
- if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN )
- {
- return VOS_STATUS_E_FAILURE;
- }
- }
- }
- else
- {
- /*Return Hard coded mac address*/
- ret = snprintf(buf, WE_FTM_MAX_STR_LEN,
- "%02x:%02x:%02x:%02x:%02x:%02x",
- MAC_ADDR_ARRAY(macAddr));
-
- if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN )
- {
- return VOS_STATUS_E_FAILURE;
- }
- }
- return VOS_STATUS_SUCCESS;
-}
-
-/**---------------------------------------------------------------------------
-
- \brief wlan_ftm_priv_set_mac_address() -
-
- This function sets the mac address to the halphy ptt module and
- sends the netlink message to the ptt socket application which writes
- the macaddress to the qcom_wlan_nv.bin file
-
- \param - pAdapter - Pointer HDD Context.
- - buf - Poniter to the macaddress.
-
- \return - 0 for success, non zero for failure
-
- --------------------------------------------------------------------------*/
-
-static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *buf)
-{
- uPttMsgs *pMsgBody;
- VOS_STATUS status;
- int macAddr[VOS_MAC_ADDRESS_LEN];
- v_U8_t *pMacAddress;
- v_U8_t ii;
- unsigned long rc;
-
- hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx;
-
- if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ftm has not started. Please start the ftm. ", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0);
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- pMsgBuf->msgId = PTT_MSG_SET_NV_FIELD;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttSetNvField) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
- pMsgBody->SetNvField.nvField = NV_COMMON_MAC_ADDR;
-
- /*We get the mac address in string format "XX:XX:XX:XX:XX:XX" convert to hex*/
- if (6 != sscanf(buf,"%02x:%02x:%02x:%02x:%02x:%02x",&macAddr[0],(int*)&macAddr[1],(int*)&macAddr[2],(int*)&macAddr[3],(int*)&macAddr[4],(int*)&macAddr[5]))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "Invalid MacAddress Input %s", buf);
- return VOS_STATUS_E_FAILURE;
- }
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
- "MacAddress = " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(macAddr));
-
-
- pMacAddress = &pMsgBody->SetNvField.fieldData.macAddr.macAddr1[0];
-
- for(ii = 0; ii < VOS_MAC_ADDRESS_LEN; ii++)
- pMacAddress[ii] = (v_U8_t)macAddr[ii];
-
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
- "pMacAddress = " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pMacAddress));
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed!!", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-
- if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:Ptt response status failed", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "NV_COMMON_MAC_ADDR Success!!!");
-
- init_completion(&pHddCtx->ftm.ftm_comp_var);
- memset( pMsgBuf,0,sizeof(tPttMsgbuffer));
-
- pMsgBuf->msgId = PTT_MSG_STORE_NV_TABLE;
- pMsgBuf->msgBodyLength = sizeof(tMsgPttStoreNvTable) + PTT_HEADER_LENGTH;
-
- pMsgBody = &pMsgBuf->msgBody;
-
- pMsgBody->StoreNvTable.nvTable = NV_FIELDS_IMAGE;
-
- status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength);
-
- if (status != VOS_STATUS_SUCCESS)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s:wlan_ftm_postmsg failed!!!!", __func__);
- status = VOS_STATUS_E_FAILURE;
- goto done;
- }
- rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var,
- msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT));
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("wait on ftm_comp_var timed out"));
- }
-done:
-
- return VOS_STATUS_SUCCESS;
-}
-
-/* set param sub-ioctls */
-static int iw_ftm_setchar_getnone(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int ret,sub_cmd;
- unsigned int length;
- char *pointer,*param;
- VOS_STATUS status;
- hdd_adapter_t *pAdapter;
-
- ret =0;
- pointer = wrqu->data.pointer;
- length = wrqu->data.length;
- sub_cmd = wrqu->data.flags;
- pAdapter = (hdd_adapter_t *)netdev_priv(dev);
-
- /* we cannot use iotctl_private_iw_point in kernel to allocate memory
- * to store data from userspace as IW_SETCHAR_GETNONE is defined as
- * odd number which assigns set_args to zero.we assisgn memory using
- * kzalloc here to hold userspace data
- */
- param = kzalloc(length + 1, GFP_KERNEL);
- if (!param)
- return -EINVAL;
-
- if (copy_from_user(param, pointer, length))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "%s:Failed to get user data %s", __func__, param);
- ret = -EINVAL;
- goto OUT;
- }
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "%s: Received length %d", __func__, length);
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "%s: Received parameters %s", __func__, param);
-
- switch(sub_cmd)
- {
- case WE_SET_MAC_ADDRESS:
- {
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "SET MAC ADDRESS");
-
- status = wlan_ftm_priv_set_mac_address(pAdapter, param);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,
- "wlan_ftm_priv_set_mac_address Failed =%d", status);
-
- ret = -EINVAL;
- }
-
- break;
- }
- case WE_SET_TX_RATE:
- {
- status = wlan_ftm_priv_set_txrate(pAdapter, param);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,
- "wlan_ftm_priv_set_txrate Failed =%d", status);
-
- ret = -EINVAL;
- }
-
- break;
- }
- default:
- {
- hddLog(LOGE, "%s: Invalid sub command %d", __func__, sub_cmd);
- ret = -EINVAL;
- break;
- }
- }
-
-OUT:
- kfree(param);
- return ret;
-}
-
-static int iw_ftm_setint_getnone(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- hdd_adapter_t *pAdapter = (netdev_priv(dev));
- int *value = (int *)extra;
- int sub_cmd = value[0];
- int set_value = value[1];
- int ret = 0; /* success */
- VOS_STATUS status;
-
- switch(sub_cmd)
- {
- case WE_FTM_ON_OFF:
- {
- status = wlan_ftm_priv_start_stop_ftm(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"%s Failed =%d", __func__, status);
- ret = -EINVAL;
- }
-
- break;
- }
-
- case WE_TX_PKT_GEN:
- status = wlan_ftm_priv_start_stop_tx_pktgen(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_start_stop_tx_pktgen Failed =%d", status);
- ret = -EINVAL;
- }
- break;
-
- case WE_SET_TX_IFS:
- status = wlan_ftm_priv_set_txifs(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txifs Failed =%d", status);
- ret = -EINVAL;
- }
- break;
-
- case WE_SET_TX_PKT_CNT:
- status = wlan_ftm_priv_set_txpktcnt(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txpktcnt Failed =%d", status);
- ret = -EINVAL;
- }
- break;
-
- case WE_SET_TX_PKT_LEN:
- status = wlan_ftm_priv_set_txpktlen(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txpktlen Failed =%d", status);
- ret = -EINVAL;
- }
- break;
-
- case WE_SET_CHANNEL:
- {
- status = wlan_ftm_priv_set_channel(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_channel Failed =%d", status);
- ret = -EINVAL;
- }
- break;
- }
- case WE_SET_TX_POWER:
- {
- status = wlan_ftm_priv_set_txpower(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txpower Failed =%d", status);
- ret = -EINVAL;
- }
- break;
- }
- case WE_CLEAR_RX_PKT_CNT:
- {
- status = wlan_ftm_priv_rx_pkt_clear(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_rx_pkt_clear Failed =%d", status);
- ret = -EINVAL;
- }
- break;
- }
- case WE_RX:
- {
- status = wlan_ftm_priv_rx_mode(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_rx_mode Failed =%d", status);
- ret = -EINVAL;
- }
- break;
- }
- case WE_ENABLE_CHAIN:
- {
- status = wlan_ftm_priv_enable_chain(pAdapter,set_value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_enable_chain Failed =%d", status);
- ret = -EINVAL;
- }
- break;
- }
-
- case WE_SET_PWR_CNTL_MODE:
- {
- status = wlan_ftm_priv_set_pwr_cntl_mode(pAdapter, set_value);
- if (status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL, "set_pwr_cntl_mode failed = %d",
- status);
- ret = -EINVAL;
- }
- break;
- }
-
- case WE_ENABLE_DPD:
- {
- status = wlan_ftm_priv_enable_dpd(pAdapter, set_value);
- if (status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL, "enable_dpd failed = %d", status);
- ret = -EINVAL;
- }
- break;
- }
-
- case WE_SET_CB:
- {
- status = wlan_ftm_priv_set_cb(pAdapter, set_value);
- if (status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL, "set_cb failed = %d", status);
- ret = -EINVAL;
- }
- break;
- }
-
- default:
- {
- hddLog(LOGE, "Invalid IOCTL setvalue command %d value %d",
- sub_cmd, set_value);
- break;
- }
- }
-
- return ret;
-}
-
-/* get param sub-ioctls */
-static int iw_ftm_setnone_getint(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- hdd_adapter_t *pAdapter = (netdev_priv(dev));
- int *value = (int *)extra;
- int ret = 0; /* success */
- VOS_STATUS status;
-
- switch (value[0])
- {
- case WE_GET_CHANNEL:
- {
- status = wlan_ftm_priv_get_channel(pAdapter,(v_U16_t*)value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_get_channel Failed =%d", status);
- ret = -EINVAL;
- }
- break;
- }
- case WE_GET_TX_POWER:
- {
- status = wlan_ftm_priv_get_txpower(pAdapter,(v_U16_t*)value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_get_txpower Failed =%d", status);
- ret = -EINVAL;
- }
- break;
- }
- case WE_GET_RX_PKT_CNT:
- {
- status = wlan_ftm_priv_get_rx_pkt_count(pAdapter,(v_U16_t*)value);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_get_rx_pkt_count Failed =%d", status);
- ret = -EINVAL;
- }
- break;
- }
- default:
- {
- hddLog(LOGE, "Invalid IOCTL get_value command %d ",value[0]);
- break;
- }
- }
-
- return ret;
-}
-
-static int iw_ftm_get_char_setnone(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int sub_cmd = wrqu->data.flags;
- VOS_STATUS status;
- hdd_adapter_t *pAdapter = (netdev_priv(dev));
-
- switch(sub_cmd)
- {
- case WE_GET_MAC_ADDRESS:
- {
- status = wlan_ftm_priv_get_mac_address(pAdapter, extra);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_mac_address failed =%d", status);
- return -EINVAL;
- }
- wrqu->data.length = strlen(extra)+1;
- break;
- }
- case WE_GET_TX_RATE:
- {
- status = wlan_ftm_priv_get_txrate(pAdapter, extra);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_txrate failed =%d", status);
- return -EINVAL;
- }
-
- wrqu->data.length = strlen(extra)+1;
- break;
- }
- case WE_GET_FTM_VERSION:
- {
- status = wlan_ftm_priv_get_ftm_version(pAdapter, extra);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_mac_address failed =%d", status);
- return -EINVAL;
- }
- wrqu->data.length = strlen(extra)+1;
- break;
- }
- case WE_GET_FTM_STATUS:
- {
- status = wlan_ftm_priv_get_status(pAdapter, extra);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_status failed =%d", status);
- return -EINVAL;
- }
-
- wrqu->data.length = strlen(extra)+1;
- break;
- }
- case WE_GET_RX_RSSI:
- {
- status = wlan_ftm_priv_get_rx_rssi(pAdapter, extra);
-
- if(status != VOS_STATUS_SUCCESS)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_rx_rssi failed =%d", status);
- return -EINVAL;
- }
-
- wrqu->data.length = strlen(extra)+1;
- break;
- }
- default:
- {
- hddLog(LOGE, "%s: Invalid IOCTL command %d", __func__, sub_cmd );
- break;
- }
- }
-
- return 0;
-}
-
-VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len)
-{
-#if defined(MSM_PLATFORM)
- tAniHdr *wmsg = NULL;
- v_U8_t *pBuf;
- hdd_context_t *pHddCtx = NULL;
- v_CONTEXT_t pVosContext= NULL;
-
- pBuf = (v_U8_t*)vos_mem_malloc(sizeof(tAniHdr) + sizeof(v_U32_t)+ data_len);
- if(pBuf == NULL)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pBuf is NULL",__func__);
- return VOS_STATUS_E_NOMEM;
- }
- wmsg = (tAniHdr*)pBuf;
- wmsg->type = PTT_MSG_FTM_CMDS_TYPE;
- wmsg->length = data_len + sizeof(tAniHdr)+ sizeof(v_U32_t);
- wmsg->length = FTM_SWAP16(wmsg->length);
- pBuf += sizeof(tAniHdr);
-
- /*Get the global context */
- pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL);
-
- /*Get the Hdd Context */
- //pAdapter = ((VosContextType*)(pVosContext))->pHDDContext;
- pHddCtx = (hdd_context_t *)(((VosContextType*)(pVosContext))->pHDDContext);
-
- /* EfS command Code */
- *(v_U32_t*)pBuf = 0x000000EF;
-
- pBuf += sizeof(v_U32_t);
-
- memcpy(pBuf, pData,data_len);
-
- if(pHddCtx->ftm.cmd_iwpriv == TRUE) {
- if( ptt_sock_send_msg_to_app(wmsg, 0, ANI_NL_MSG_PUMAC, pHddCtx->ptt_pid) < 0) {
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Ptt Socket error sending message to the app!!"));
- vos_mem_free((v_VOID_t*)wmsg);
- return VOS_STATUS_E_FAILURE;
- }
- }
- else {
- if( ptt_sock_send_msg_to_app(wmsg, 0, ANI_NL_MSG_PUMAC, pHddCtx->ftm.wnl->nlh.nlmsg_pid) < 0) {
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Ptt Socket error sending message to the app!!"));
- vos_mem_free((v_VOID_t*)wmsg);
- return VOS_STATUS_E_FAILURE;
- }
- }
-
- vos_mem_free((v_VOID_t*)wmsg);
-#endif //FTM and ANDROID
-
- return VOS_STATUS_SUCCESS;
-}
-
-/* action sub-ioctls */
-static int iw_ftm_setnone_getnone(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
-{
- int sub_cmd = wrqu->data.flags;
- int ret = 0; /* success */
-
- switch (sub_cmd)
- {
- case WE_SET_NV_DEFAULTS:
- {
- v_U8_t *pu8buf,*pTempBuf;
- v_U16_t size;
- size = sizeof(v_U32_t) + sizeof(sHalNv);
- hddLog(VOS_TRACE_LEVEL_INFO_HIGH,"HAL NV Size =%d", size);
- pu8buf = vos_mem_malloc(size);
- if(pu8buf == NULL)
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pu8buf is NULL",__func__);
- return VOS_STATUS_E_NOMEM;
- }
- memset(pu8buf,0,size);
- pTempBuf = pu8buf;
- pTempBuf += sizeof(v_U32_t);
- memcpy(pTempBuf,&nvDefaults,sizeof(sHalNv));
-
- wlan_write_to_efs(pu8buf,size);
- vos_mem_free(pu8buf);
- }
-
- default:
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,"%s: unknown ioctl %d", __func__, sub_cmd);
- hddLog(LOGE, "Invalid IOCTL action command %d ", sub_cmd);
- break;
- }
- }
-
- return ret;
-}
-
-static const iw_handler we_ftm_private[] = {
-
- [WLAN_FTM_PRIV_SET_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_ftm_setint_getnone, //set priv ioctl
- [WLAN_FTM_PRIV_SET_NONE_GET_INT - SIOCIWFIRSTPRIV] = iw_ftm_setnone_getint, //get priv ioctl
- [WLAN_FTM_PRIV_SET_CHAR_GET_NONE - SIOCIWFIRSTPRIV] = iw_ftm_setchar_getnone, //get priv ioctl
- [WLAN_FTM_PRIV_GET_CHAR_SET_NONE - SIOCIWFIRSTPRIV] = iw_ftm_get_char_setnone,
- [WLAN_FTM_PRIV_SET_NONE_GET_NONE - SIOCIWFIRSTPRIV] = iw_ftm_setnone_getnone, //action priv ioctl
-};
-
-/*Maximum command length can be only 15 */
-static const struct iw_priv_args we_ftm_private_args[] = {
-
- /* handlers for main ioctl */
- { WLAN_FTM_PRIV_SET_INT_GET_NONE,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "" },
-
- { WE_FTM_ON_OFF,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "ftm" },
-
- { WE_TX_PKT_GEN,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "tx" },
-
- { WE_SET_TX_IFS,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "set_txifs" },
-
- { WE_SET_TX_PKT_CNT,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "set_txpktcnt" },
-
- { WE_SET_TX_PKT_LEN,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "set_txpktlen" },
-
- { WE_SET_CHANNEL,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "set_channel" },
-
- { WE_SET_TX_POWER,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "set_txpower" },
-
- { WE_CLEAR_RX_PKT_CNT,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "clr_rxpktcnt" },
-
- { WE_RX,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "rx" },
-
- { WE_ENABLE_CHAIN,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "ena_chain" },
-
- { WE_SET_PWR_CNTL_MODE,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "pwr_cntl_mode" },
-
- { WE_ENABLE_DPD,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "ena_dpd" },
-
- { WE_SET_CB,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- 0,
- "set_cb" },
-
- /* handlers for main ioctl */
- { WLAN_FTM_PRIV_SET_NONE_GET_INT,
- 0,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- "" },
-
- { WE_GET_CHANNEL,
- 0,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- "get_channel" },
-
- { WE_GET_TX_POWER,
- 0,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- "get_txpower" },
-
- { WE_GET_RX_PKT_CNT,
- 0,
- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
- "get_rxpktcnt" },
-
- /* handlers for main ioctl */
- { WLAN_FTM_PRIV_SET_CHAR_GET_NONE,
- IW_PRIV_TYPE_CHAR| 512,
- 0,
- "" },
-
- { WE_SET_MAC_ADDRESS,
- IW_PRIV_TYPE_CHAR| 512,
- 0,
- "set_mac_address" },
-
- { WE_SET_TX_RATE,
- IW_PRIV_TYPE_CHAR | 512,
- 0,
- "set_txrate" },
-
- /* handlers for main ioctl */
- { WLAN_FTM_PRIV_GET_CHAR_SET_NONE,
- 0,
- IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN,
- "" },
-
- { WE_GET_MAC_ADDRESS,
- 0,
- IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN,
- "get_mac_address" },
-
- { WE_GET_FTM_VERSION,
- 0,
- IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN,
- "ftm_version" },
-
- { WE_GET_TX_RATE,
- 0,
- IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN,
- "get_txrate" },
-
- { WE_GET_FTM_STATUS,
- 0,
- IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN,
- "get_status" },
-
- { WE_GET_RX_RSSI,
- 0,
- IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN,
- "get_rx_rssi" },
-
- /* handlers for main ioctl */
- { WLAN_FTM_PRIV_SET_NONE_GET_NONE,
- 0,
- 0,
- "" },
-
- /* handlers for sub-ioctl */
- { WE_SET_NV_DEFAULTS,
- 0,
- 0,
- "set_nv_defaults" },
-
-};
-
-const struct iw_handler_def we_ftm_handler_def = {
- .num_standard = 0,
- .num_private = sizeof(we_ftm_private) / sizeof(we_ftm_private[0]),
- .num_private_args = sizeof(we_ftm_private_args) / sizeof(we_ftm_private_args[0]),
-
- .standard = (iw_handler *)NULL,
- .private = (iw_handler *)we_ftm_private,
- .private_args = we_ftm_private_args,
- .get_wireless_stats = NULL,
-};
-
-static int wlan_ftm_register_wext(hdd_adapter_t *pAdapter)
-{
-
- //hdd_wext_state_t *pwextBuf = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter);
-
- // Zero the memory. This zeros the profile structure.
- //memset(pwextBuf, 0,sizeof(hdd_wext_state_t));
-
- pAdapter->dev->wireless_handlers = (struct iw_handler_def *)&we_ftm_handler_def;
-
- return 0;
-}
-
#if defined(QCA_WIFI_FTM)
#if defined(LINUX_QCMBR)
-int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_data)
+static int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_data)
{
int ret = 0;
qcmbr_queue_t *qcmbr_buf = NULL;
@@ -5456,6 +988,7 @@ int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_data)
}
}
break;
+
case ATH_XIOCTL_UNIFIED_UTF_RSP: {
pqcmbr_data->copy_to_user = 1;
if (!list_empty(&qcmbr_queue_head)) {
@@ -5555,7 +1088,7 @@ int wlan_hdd_qcmbr_unified_ioctl(hdd_adapter_t *pAdapter, struct ifreq *ifr)
return ret;
}
-void WLANQCMBR_McProcessMsg(v_VOID_t *message)
+static void WLANQCMBR_McProcessMsg(v_VOID_t *message)
{
qcmbr_queue_t *qcmbr_buf = NULL;
u_int32_t data_len;
@@ -5569,7 +1102,7 @@ void WLANQCMBR_McProcessMsg(v_VOID_t *message)
spin_unlock_bh(&qcmbr_queue_lock);
}
}
-#endif
+#endif /*LINUX_QCMBR*/
VOS_STATUS WLANFTM_McProcessMsg (v_VOID_t *message)
{
@@ -5617,74 +1150,15 @@ VOS_STATUS wlan_hdd_ftm_testmode_cmd(void *data, int len)
return VOS_STATUS_E_NOMEM;
}
- cmd_data->len = len;
- vos_mem_copy(cmd_data->data, data, len);
-
- if (wlan_ftm_postmsg((v_U8_t *)cmd_data, sizeof(*cmd_data))) {
- vos_mem_free(cmd_data->data);
- vos_mem_free(cmd_data);
- return VOS_STATUS_E_FAILURE;
- }
-
- return VOS_STATUS_SUCCESS;
-}
-#else
-VOS_STATUS WLANFTM_McProcessMsg (v_VOID_t *message)
-{
- ftm_rsp_msg_t *pFtmMsgRsp;
-
- VOS_STATUS vos_status = VOS_STATUS_SUCCESS;
- hdd_context_t *pHddCtx;
- v_CONTEXT_t pVosContext= NULL;
-
- ENTER();
+ cmd_data->len = len;
+ vos_mem_copy(cmd_data->data, data, len);
- pFtmMsgRsp = (ftm_rsp_msg_t *)message;
-
- if (!message )
- {
- VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
- "WLAN FTM:Invalid parameter sent on WLANFTM_ProcessMainMessage");
- return VOS_STATUS_E_INVAL;
- }
- /*Get the global context */
- pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL);
-
- /*Get the Hdd Context */
- pHddCtx = ((VosContextType*)(pVosContext))->pHDDContext;
-
- if (pHddCtx->ftm.cmd_iwpriv == TRUE) {
-
- memcpy((char*)pMsgBuf, (char*)message, pFtmMsgRsp->msgBodyLength);
- complete(&pHddCtx->ftm.ftm_comp_var);
- }
- else {
- /*Response length to Ptt App*/
- pHddCtx->ftm.wnl->wmsg.length = sizeof(tAniHdr)+ SIZE_OF_FTM_DIAG_HEADER_LEN + pFtmMsgRsp->msgBodyLength;
-
- /*Ptt App expects the response length in LE */
- pHddCtx->ftm.wnl->wmsg.length = FTM_SWAP16(pHddCtx->ftm.wnl->wmsg.length);
-
- /*Response expects the length to be in */
- pHddCtx->ftm.pResponseBuf->ftm_hdr.data_len = pHddCtx->ftm.pRequestBuf->ftm_hdr.data_len -
- sizeof(pHddCtx->ftm.pRequestBuf->ftm_hdr.data_len);
-
- /*Copy the message*/
- memcpy((char*)&pHddCtx->ftm.pResponseBuf->ftmpkt,(char*)message,pFtmMsgRsp->msgBodyLength);
-
- /*Update the error code*/
- pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS;
-
- vos_status = vos_event_set(&pHddCtx->ftm.ftm_vos_event);
-
- if (!VOS_IS_STATUS_SUCCESS(vos_status))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD vos_event_set failed!!"));
+ if (wlan_ftm_postmsg((v_U8_t *)cmd_data, sizeof(*cmd_data))) {
+ vos_mem_free(cmd_data->data);
+ vos_mem_free(cmd_data);
return VOS_STATUS_E_FAILURE;
- }
- }
- EXIT();
- return VOS_STATUS_SUCCESS;
+ }
+ return VOS_STATUS_SUCCESS;
}
-#endif
+#endif /*QCA_WIFI_FTM*/
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
index 033ecf182103..053b9e870c57 100644
--- a/CORE/HDD/src/wlan_hdd_ipa.c
+++ b/CORE/HDD/src/wlan_hdd_ipa.c
@@ -1203,8 +1203,13 @@ static int hdd_ipa_setup_rm(struct hdd_ipa_priv *hdd_ipa)
}
vos_wake_lock_init(&hdd_ipa->wake_lock, "wlan_ipa");
+#ifdef CONFIG_CNSS
+ cnss_init_delayed_work(&hdd_ipa->wake_lock_work,
+ hdd_ipa_wake_lock_timer_func);
+#else
INIT_DELAYED_WORK(&hdd_ipa->wake_lock_work,
hdd_ipa_wake_lock_timer_func);
+#endif
adf_os_spinlock_init(&hdd_ipa->rm_lock);
hdd_ipa->rm_state = HDD_IPA_RM_RELEASED;
hdd_ipa->wake_lock_released = true;
@@ -1235,7 +1240,9 @@ static void hdd_ipa_destory_rm_resource(struct hdd_ipa_priv *hdd_ipa)
cancel_delayed_work_sync(&hdd_ipa->wake_lock_work);
vos_wake_lock_destroy(&hdd_ipa->wake_lock);
+#ifdef WLAN_OPEN_SOURCE
cancel_work_sync(&hdd_ipa->rm_work);
+#endif
adf_os_spinlock_destroy(&hdd_ipa->rm_lock);
ipa_rm_inactivity_timer_destroy(IPA_RM_RESOURCE_WLAN_PROD);
@@ -1803,7 +1810,9 @@ static void hdd_ipa_i2w_cb(void *priv, enum ipa_dp_evt_type evt,
* If we are here means, host is not suspended, wait for the work queue
* to finish.
*/
+#ifdef WLAN_OPEN_SOURCE
flush_work(&hdd_ipa->pm_work);
+#endif
return hdd_ipa_send_pkt_to_tl(iface_context, ipa_tx_desc);
}
@@ -2812,7 +2821,11 @@ VOS_STATUS hdd_ipa_init(hdd_context_t *hdd_ctx)
adf_os_spinlock_init(&iface_context->interface_lock);
}
+#ifdef CONFIG_CNSS
+ cnss_init_work(&hdd_ipa->pm_work, hdd_ipa_pm_send_pkt_to_tl);
+#else
INIT_WORK(&hdd_ipa->pm_work, hdd_ipa_pm_send_pkt_to_tl);
+#endif
adf_os_spinlock_init(&hdd_ipa->pm_lock);
adf_nbuf_queue_init(&hdd_ipa->pm_queue_head);
@@ -2871,7 +2884,9 @@ VOS_STATUS hdd_ipa_cleanup(hdd_context_t *hdd_ctx)
if (!hdd_ipa_is_enabled(hdd_ctx))
return VOS_STATUS_SUCCESS;
+#ifdef WLAN_OPEN_SOURCE
cancel_work_sync(&hdd_ipa->pm_work);
+#endif
adf_os_spin_lock_bh(&hdd_ipa->pm_lock);
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index c2ad7262b1f1..5a9493e34914 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -12089,7 +12089,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
#endif
#ifdef WLAN_FEATURE_LPSS
- wlan_hdd_send_status_pkg(pAdapter, NULL, 1, 0);
+ wlan_hdd_send_all_scan_intf_info(pHddCtx);
wlan_hdd_send_version_pkg(pHddCtx->target_fw_version,
pHddCtx->target_hw_version,
pHddCtx->target_hw_name);
@@ -13357,6 +13357,7 @@ int wlan_hdd_gen_wlan_status_pack(struct wlan_status_data *data,
data->vdev_mode = pAdapter->device_mode;
if (pHddStaCtx) {
data->is_connected = is_connected;
+ data->rssi = pAdapter->rssi;
data->freq = vos_chan_to_freq(pHddStaCtx->conn_info.operationChannel);
if (WLAN_SVC_MAX_SSID_LEN >= pHddStaCtx->conn_info.SSID.SSID.length) {
data->ssid_len = pHddStaCtx->conn_info.SSID.SSID.length;
@@ -13620,6 +13621,39 @@ void wlan_hdd_send_version_pkg(v_U32_t fw_version,
wlan_hdd_send_svc_nlink_msg(WLAN_SVC_WLAN_VERSION_IND,
&data, sizeof(struct wlan_version_data));
}
+
+void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx)
+{
+ hdd_adapter_t *pDataAdapter = NULL;
+ hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL;
+ v_BOOL_t scan_intf_found = VOS_FALSE;
+ VOS_STATUS status;
+
+ if (!pHddCtx) {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: NULL pointer for pHddCtx",
+ __func__);
+ return;
+ }
+
+ status = hdd_get_front_adapter(pHddCtx, &pAdapterNode);
+ while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == status) {
+ pDataAdapter = pAdapterNode->pAdapter;
+ if (pDataAdapter) {
+ if (pDataAdapter->device_mode == WLAN_HDD_INFRA_STATION ||
+ pDataAdapter->device_mode == WLAN_HDD_P2P_CLIENT ||
+ pDataAdapter->device_mode == WLAN_HDD_P2P_DEVICE) {
+ scan_intf_found = VOS_TRUE;
+ wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0);
+ }
+ }
+ status = hdd_get_next_adapter(pHddCtx, pAdapterNode, &pNext);
+ pAdapterNode = pNext;
+ }
+
+ if (!scan_intf_found)
+ wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0);
+}
#endif
#ifdef FEATURE_WLAN_AUTO_SHUTDOWN
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index 7560d63cee89..1803644468cc 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -139,11 +139,6 @@ static v_VOID_t wlan_hdd_tdls_start_peer_discover_timer(tdlsCtx_t *pHddTdlsCtx,
}
pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter,
- &pHddTdlsCtx->peerDiscoverTimer,
- discoveryExpiry);
-#endif
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "beacon rssi: %d",
pHddTdlsCtx->ap_rssi);
@@ -1741,11 +1736,6 @@ void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter)
pHddTdlsCtx->discovery_sent_cnt = 0;
wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter,
- &pHddTdlsCtx->peerDiscoverTimer,
- pHddTdlsCtx->threshold_config.discovery_period_t);
-#endif
}
mutex_unlock(&pHddCtx->tdls_lock);
@@ -2020,11 +2010,6 @@ static void wlan_hdd_tdls_implicit_enable(tdlsCtx_t *pHddTdlsCtx)
wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter,
- &pHddTdlsCtx->peerDiscoverTimer,
- pHddTdlsCtx->threshold_config.discovery_period_t);
-#endif
}
void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx,
diff --git a/CORE/HDD/src/wlan_hdd_trace.c b/CORE/HDD/src/wlan_hdd_trace.c
index 69100959954c..f7d683e6522a 100644
--- a/CORE/HDD/src/wlan_hdd_trace.c
+++ b/CORE/HDD/src/wlan_hdd_trace.c
@@ -107,7 +107,7 @@ static tANI_U8 *hddTraceGetEventString(tANI_U32 code)
void hddTraceDump(void *pMac, tpvosTraceRecord pRecord, tANI_U16 recIndex)
{
- hddLog(LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ",
+ hddLog(LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ",
recIndex, pRecord->time, pRecord->session,
"HDD Event:", hddTraceGetEventString(pRecord->code),
pRecord->data);
diff --git a/CORE/HDD/src/wlan_hdd_wowl.c b/CORE/HDD/src/wlan_hdd_wowl.c
index 219a5b8a7c88..af1dc841aaa9 100644
--- a/CORE/HDD/src/wlan_hdd_wowl.c
+++ b/CORE/HDD/src/wlan_hdd_wowl.c
@@ -386,6 +386,8 @@ v_BOOL_t hdd_add_wowl_ptrn_debugfs(hdd_adapter_t *pAdapter, v_U8_t pattern_idx,
localPattern.ucPatternId = pattern_idx;
localPattern.ucPatternByteOffset = pattern_offset;
localPattern.ucPatternSize = pattern_len;
+ localPattern.sessionId = sessionId;
+
if (localPattern.ucPatternSize > SIR_WOWL_BCAST_PATTERN_MAX_SIZE) {
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: WoW pattern size (%d) greater than max (%d)",
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 70eda75d5919..b5586204e88a 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -242,11 +242,6 @@ typedef struct sLimTimers
TX_TIMER gLimEseTsmTimer;
#endif
TX_TIMER gLimRemainOnChannelTimer;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- TX_TIMER gLimTdlsDisRspWaitTimer;
- TX_TIMER gLimTdlsLinkSetupRspTimeouTimer;
- TX_TIMER gLimTdlsLinkSetupCnfTimeoutTimer;
-#endif
TX_TIMER gLimPeriodicJoinProbeReqTimer;
TX_TIMER gLimDisassocAckTimer;
@@ -853,22 +848,6 @@ typedef struct sAniSirLim
//////////////////////////////// HT RELATED //////////////////////////////////////////
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- //////////////////////////////// TDLS RELATED //////////////////////////////////////////
-
- tSirTdlsDisReq gLimTdlsDisReq ;
- //tLimDisResultList *gTdlsDisResultList ;
- tLimDisResultList *gLimTdlsDisResultList ;
- tANI_U8 gLimTdlsDisStaCount ;
- tANI_U8 gAddStaDisRspWait ;
-
- tLimTdlsLinkSetupInfo gLimTdlsLinkSetupInfo;
-
- /* to track if direct link is b/g/n, this can be independent of AP link */
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- tANI_U32 gLimTdlsNegativeBehavior;
-#endif
-#endif
#ifdef FEATURE_WLAN_TDLS
tANI_U8 gLimAddStaTdls ;
tANI_U8 gLimTdlsLinkMode ;
@@ -1059,9 +1038,6 @@ typedef struct sAniSirGlobal
#ifdef FEATURE_OEM_DATA_SUPPORT
tOemDataStruct oemData;
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- tCsrTdlsCtxStruct tdlsCtx ;
-#endif
tPmcInfo pmc;
tSmeBtcInfo btc;
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 3aef267db70f..321ee2d2654a 100644
--- a/CORE/MAC/inc/qwlan_version.h
+++ b/CORE/MAC/inc/qwlan_version.h
@@ -42,9 +42,9 @@ BRIEF DESCRIPTION:
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 0
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 161
+#define QWLAN_VERSION_BUILD 162
-#define QWLAN_VERSIONSTR "1.0.0.161"
+#define QWLAN_VERSIONSTR "1.0.0.162"
#ifdef QCA_WIFI_2_0
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index b3de29820154..d7b166da7270 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -4412,166 +4412,6 @@ typedef struct sSirTdlsEventNotify
#endif
#endif /* FEATURE_WLAN_TDLS */
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-typedef enum tdlsListType
-{
- TDLS_DIS_LIST,
- TDLS_SETUP_LIST
-}eTdlsListType ;
-
-typedef enum tdlsStates
-{
- TDLS_LINK_IDLE_STATE,
- TDLS_LINK_DIS_INIT_STATE,
- TDLS_LINK_DIS_RSP_WAIT_STATE,
- TDLS_DIS_REQ_PROCESS_STATE,
- TDLS_DIS_RSP_SENT_WAIT_STATE,
- TDLS_DIS_RSP_SENT_DONE_STATE,
- TDLS_LINK_DIS_DONE_STATE,
- TDLS_LINK_SETUP_START_STATE,
- TDLS_LINK_SETUP_WAIT_STATE,
- TDLS_LINK_SETUP_RSP_WAIT_STATE,
- TDLS_LINK_SETUP_DONE_STATE,
- TDLS_LINK_TEARDOWN_START_STATE,
- TDLS_LINK_TEARDOWN_DONE_STATE,
- TDLS_LINK_SETUP_STATE
-}eSirTdlsStates ;
-
-typedef struct sSirTdlsPeerInfo
-{
- tSirMacAddr peerMac;
- tANI_U8 sessionId;
- tANI_U8 dialog ;
- tSirMacCapabilityInfo capabilityInfo ;
- tSirMacRateSet tdlsPeerSuppRates ;
- tSirMacRateSet tdlsPeerExtRates ;
- //tDot11fIEHTCaps tdlsPeerHtCaps ;
- tSirMacHTCapabilityInfo tdlsPeerHtCaps ;
- tSirMacHTParametersInfo tdlsPeerHtParams ;
- tSirMacExtendedHTCapabilityInfo tdlsPeerHtExtCaps ;
- tANI_U8 supportedMCSSet[SIZE_OF_SUPPORTED_MCS_SET];
-
- //tDot11fIEExtCapability tdlsPeerExtenCaps ;
- tSirMacRsnInfo tdlsPeerRsn ;
- tANI_U16 tdlsPeerFtIe ;
- tANI_U16 tdlsPeerTimeoutIntvl ;
- tANI_U16 tdlsPeerSuppChan ;
- tANI_U16 tdlsPeerSuppReguClass ;
- tANI_S8 tdlsPeerRssi ;
- tANI_U16 tdlsPeerState ;
- /* flags to indicate optional IE's are in */
- tANI_U8 ExtRatesPresent ;
- tANI_U8 rsnIePresent ;
- tANI_U8 htCapPresent ;
- tANI_U8 delStaNeeded ;
-
-} tSirTdlsPeerInfo, *tpSirSmeTdlsPeerInfo ;
-
-/* TDLS Request struct SME-->PE */
-typedef struct sSirTdlsDiscoveryReq
-{
- tANI_U16 messageType; // eWNI_SME_TDLS_DISCOVERY_START_REQ
- tANI_U16 length;
- tANI_U8 sessionId; // Session ID
- tANI_U16 transactionId; // Transaction ID for cmd
- tANI_U8 reqType;
- tANI_U8 dialog;
- tSirMacAddr bssid; // For multi-session, for PE to locate peSession ID
- tSirMacAddr peerMac;
-} tSirTdlsDisReq, *tpSirSmeTdlsDisReq ;
-
-typedef struct sSirTdlsLinkSetupReq
-{
- tANI_U16 messageType; // eWNI_SME_TDLS_LINK_START_REQ
- tANI_U16 length;
- tANI_U8 sessionId; // Session ID
- tANI_U16 transactionId; // Transaction ID for cmd
- tANI_U8 dialog;
- tSirMacAddr bssid; // For multi-session, for PE to locate peSession ID
- tSirMacAddr peerMac;
-} tSirTdlsSetupReq, *tpSirSmeTdlsSetupReq ;
-
-typedef struct sSirTdlsTeardownReq
-{
- tANI_U16 messageType; // eWNI_SME_TDLS_TEARDOWN_REQ
- tANI_U16 length;
- tANI_U8 sessionId; // Session ID
- tANI_U16 transactionId; // Transaction ID for cmd
- tSirMacAddr bssid; // For multi-session, for PE to locate peSession ID
- tSirMacAddr peerMac;
-} tSirTdlsTeardownReq, *tpSirSmeTdlsTeardownReq ;
-
-
-/* TDLS response struct PE-->SME */
-typedef struct sSirTdlsDiscoveryRsp
-{
- tANI_U16 messageType;
- tANI_U16 length;
- tSirResultCodes statusCode;
- tANI_U16 numDisSta ;
- tSirTdlsPeerInfo tdlsDisPeerInfo[0];
-} tSirTdlsDisRsp, *tpSirSmeTdlsDiscoveryRsp;
-
-typedef struct sSirTdlsLinkSetupRsp
-{
- tANI_U16 messageType;
- tANI_U16 length;
- tSirResultCodes statusCode;
- tSirMacAddr peerMac;
-} tSirTdlsLinksetupRsp ;
-
-typedef struct sSirTdlsLinkSetupInd
-{
- tANI_U16 messageType;
- tANI_U16 length;
- tSirResultCodes statusCode;
- tSirMacAddr peerMac;
-} tSirTdlsLinkSetupInd ;
-
-
-typedef struct sSirTdlsTeardownRsp
-{
- tANI_U16 messageType;
- tANI_U16 length;
- tSirResultCodes statusCode;
- tSirMacAddr peerMac;
-} tSirTdlsTeardownRsp ;
-
-typedef struct sSirTdlsPeerInd
-{
- tANI_U16 messageType;
- tANI_U16 length;
- tSirMacAddr peerMac;
- tANI_U8 sessionId; // Session ID
- tANI_U16 staId ;
- tANI_U16 staType ;
- tANI_U8 ucastSig;
- tANI_U8 bcastSig;
-} tSirTdlsPeerInd ;
-
-typedef struct sSirTdlsLinkEstablishInd
-{
- tANI_U16 messageType;
- tANI_U16 length;
- tANI_U8 bIsResponder; /* if this is 1, self is initiator and peer is reponder */
- tANI_U8 linkIdenOffset; /* offset of LinkIdentifierIE.bssid[0] from ptiTemplateBuf */
- tANI_U8 ptiBufStatusOffset; /* offset of BufferStatus from ptiTemplateBuf */
- tANI_U8 ptiTemplateLen;
- tANI_U8 ptiTemplateBuf[64];
- tANI_U8 extCapability[8];
-/* This will be part of PTI template when sent by PE
- tANI_U8 linkIdentifier[20];
-*/
-} tSirTdlsLinkEstablishInd, *tpSirTdlsLinkEstablishInd;
-
-typedef struct sSirTdlsLinkTeardownInd
-{
- tANI_U16 messageType;
- tANI_U16 length;
- tANI_U16 staId;
-} tSirTdlsLinkTeardownInd, *tpSirTdlsLinkTeardownInd;
-
-#endif /* FEATURE_WLAN_TDLS_INTERNAL */
typedef struct sSirActiveModeSetBcnFilterReq
{
diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h
index ce24720314b7..18aabb777c05 100644
--- a/CORE/MAC/inc/wniApi.h
+++ b/CORE/MAC/inc/wniApi.h
@@ -346,20 +346,6 @@ enum eWniMsgTypes
//SIR_LIM_MSG_TYPES_BEGIN+0xB0 = 12B0 (which means max of 176 messages and
//eWNI_SME_TDLS_DEL_STA_RSP = 175.
//Should fix above issue to enable TDLS_INTERNAL
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-#error ERROR_TDLS_INTERNAL
- eWNI_SME_TDLS_DISCOVERY_START_REQ,
- eWNI_SME_TDLS_DISCOVERY_START_RSP,
- eWNI_SME_TDLS_DISCOVERY_START_IND,
- eWNI_SME_TDLS_LINK_START_REQ,
- eWNI_SME_TDLS_LINK_START_RSP,
- eWNI_SME_TDLS_LINK_START_IND,
- eWNI_SME_TDLS_TEARDOWN_REQ,
- eWNI_SME_TDLS_TEARDOWN_RSP,
- eWNI_SME_TDLS_TEARDOWN_IND,
- eWNI_SME_ADD_TDLS_PEER_IND,
- eWNI_SME_DELETE_TDLS_PEER_IND,
-#endif
eWNI_SME_SET_BCN_FILTER_REQ,
eWNI_SME_RESET_AP_CAPS_CHANGED,
#ifdef WLAN_FEATURE_11W
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 9f69127426d7..d4fd9ec3065e 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -815,11 +815,6 @@ typedef struct sSirMbMsgP2p
#define SIR_LIM_DEAUTH_ACK_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x27)
#define SIR_LIM_PERIODIC_JOIN_PROBE_REQ_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x28)
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-#define SIR_LIM_TDLS_DISCOVERY_RSP_WAIT (SIR_LIM_TIMEOUT_MSG_START + 0x29)
-#define SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x2A)
-#define SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x2B)
-#endif
#define SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE (SIR_LIM_TIMEOUT_MSG_START + 0x2C)
#define SIR_LIM_MSG_TYPES_END (SIR_LIM_MSG_TYPES_BEGIN+0xFF)
diff --git a/CORE/MAC/src/pe/include/limGlobal.h b/CORE/MAC/src/pe/include/limGlobal.h
index cf92870edb87..3fddb1c32ff3 100644
--- a/CORE/MAC/src/pe/include/limGlobal.h
+++ b/CORE/MAC/src/pe/include/limGlobal.h
@@ -692,13 +692,6 @@ typedef struct sLimSpecMgmtInfo
tANI_BOOLEAN fRadarIntrConfigured; /* Whether radar interrupt has been configured */
}tLimSpecMgmtInfo, *tpLimSpecMgmtInfo;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-typedef struct sLimDisResultList
-{
- struct sLimDisResultList *next ;
- tSirTdlsPeerInfo tdlsDisPeerInfo ;
-}tLimDisResultList ;
-#endif
#ifdef FEATURE_WLAN_TDLS
/*
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index c46418268129..113853347c5a 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -3707,6 +3707,9 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,
pAddBssParams->llaCoexist, pAddBssParams->llbCoexist,
pAddBssParams->llgCoexist, pAddBssParams->ht20Coexist);
+ pAddBssParams->dot11_mode = psessionEntry->dot11mode;
+ limLog(pMac, LOG2, FL("dot11_mode:%d"), pAddBssParams->dot11_mode);
+
// Use the advertised capabilities from the received beacon/PR
@@ -4326,6 +4329,9 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry
MAC_ADDR_ARRAY(pAddBssParams->staContext.staMac),
pAddBssParams->staContext.shortPreambleSupported);
+ pAddBssParams->dot11_mode = psessionEntry->dot11mode;
+ limLog(pMac, LOG2, FL("dot11_mode:%d"), pAddBssParams->dot11_mode);
+
if (IS_DOT11_MODE_HT(psessionEntry->dot11mode) && ( pBeaconStruct->HTCaps.present ))
{
pAddBssParams->staContext.us32MaxAmpduDuration = 0;
diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
index f83cde3be830..9d482d9cd685 100644
--- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
@@ -2552,9 +2552,6 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps
#ifdef FEATURE_WLAN_TDLS
case SIR_MAC_TDLS_DIS_RSP:
{
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- limProcessTdlsPublicActionFrame(pMac, (tANI_U32*)pRxPacketInfo, psessionEntry) ;
-#else
tpSirMacMgmtHdr pHdr;
tANI_U32 frameLen;
tANI_S8 rssi;
@@ -2567,7 +2564,6 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps
limSendSmeMgmtFrameInd(pMac, pHdr->fc.subType,
(tANI_U8*)pHdr, frameLen + sizeof(tSirMacMgmtHdr), 0,
WDA_GET_RX_CH( pRxPacketInfo ), psessionEntry, rssi);
-#endif
}
break;
#endif
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index d26dea8088f1..3eea3723f58a 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -770,27 +770,6 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg)
break;
case SIR_MAC_DATA_FRAME:
{
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- /*
- * if we reach here, following cases are possible.
- * Possible cases: a) if frame translation is disabled.
- * b) Some frame with ADRR2 filter enabled may come
- * here.
- */
- tANI_U8 *dataOffset = WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
- tANI_U8 *rfc1042Hdr = (tANI_U8 *)(dataOffset + RFC1042_HDR_LENGTH) ;
- tANI_U16 ethType = GET_BE16(rfc1042Hdr) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS frame with 80211 Header")) ;
- if(ETH_TYPE_89_0d == ethType)
- {
- tANI_U8 payloadType = (rfc1042Hdr + ETH_TYPE_LEN)[0] ;
- if(PAYLOAD_TYPE_TDLS == payloadType)
- {
- limProcessTdlsFrame(pMac, (tANI_U32*)pRxPacketInfo) ;
- }
- }
-#endif
#if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD)
/* We accept data frame (IAPP frame) only if Session is
* present and ese connection is established on that
@@ -1190,9 +1169,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
vos_pkt_t *pVosPkt;
VOS_STATUS vosStatus;
tSirMsgQ limMsgNew;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- tANI_U32 *pBD = NULL ;
-#endif
/* The original limMsg which we were deferring have the
* bodyPointer point to 'BD' instead of 'Vos pkt'. If we don't make a copy
@@ -1231,24 +1207,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
break;
}
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- /*
- * TDLS frames comes as translated frames as well as
- * MAC 802.11 data frames..
- */
- limGetBDfromRxPacket(pMac, limMsgNew.bodyptr, &pBD);
- if(0 != WDA_GET_RX_FT_DONE(pBD))
- {
- /*
- * TODO: check for scanning state and set deferMesg flag
- * accordingly..
- */
- deferMsg = false ;
-
- limProcessTdlsFrame(pMac, pBD) ;
- }
- else
-#endif
limHandle80211Frames(pMac, &limMsgNew, &deferMsg);
if ( deferMsg == true )
@@ -1289,11 +1247,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
case eWNI_SME_TDLS_DEL_STA_REQ:
case eWNI_SME_TDLS_LINK_ESTABLISH_REQ:
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- case eWNI_SME_TDLS_DISCOVERY_START_REQ:
- case eWNI_SME_TDLS_LINK_START_REQ:
- case eWNI_SME_TDLS_TEARDOWN_REQ:
-#endif
case eWNI_SME_RESET_AP_CAPS_CHANGED:
// These messages are from HDD
limProcessNormalHddMsg(pMac, limMsg, true); //need to response to hdd
@@ -1804,73 +1757,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
#endif
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- /*
- * Here discovery timer expires, now we can go ahead and collect all
- * the dicovery responses PE has process till now and send this
- * responses to SME..
- */
- case SIR_LIM_TDLS_DISCOVERY_RSP_WAIT:
- {
- //fetch the sessionEntry based on the sessionId
- tpPESession psessionEntry = peFindSessionBySessionId(pMac,
- pMac->lim.limTimers.gLimTdlsDisRspWaitTimer.sessionId) ;
- if(NULL == psessionEntry)
- {
- limLog(pMac, LOGP,FL("Session Does not exist for given sessionID %d"), pMac->lim.limTimers.gLimTdlsDisRspWaitTimer.sessionId);
- return;
- }
-
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- ("Discovery Rsp timer expires ")) ;
- limSendSmeTdlsDisRsp(pMac, eSIR_SUCCESS,
- eWNI_SME_TDLS_DISCOVERY_START_RSP) ;
- break ;
- }
-
- /*
- * we initiated link setup and did not receive TDLS setup rsp
- * from TDLS peer STA, send failure RSP to SME.
- */
- case SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT:
- {
- tANI_U8 *peerMac = (tANI_U8 *)limMsg->bodyval ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS setup rsp timer expires ")) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("TDLS setup rsp timer expires for peer:"
- MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac));
-
- limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ;
- if(NULL != setupPeer)
- {
- limTdlsDelLinkPeer( pMac, peerMac) ;
- }
-
- limSendSmeTdlsLinkStartRsp(pMac, eSIR_FAILURE, peerMac,
- eWNI_SME_TDLS_LINK_START_RSP) ;
- break ;
- }
- case SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT:
- {
- tANI_U8 *peerMac = (tANI_U8 *)limMsg->bodyval ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS setup CNF timer expires ")) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("TDLS setup CNF timer expires for peer: "
- MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac));
- limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ;
- if(NULL != setupPeer)
- {
- limTdlsDelLinkPeer( pMac, peerMac) ;
- }
- break ;
- }
-#endif /* FEATURE_WLAN_TDLS TIMER */
case WDA_ADD_BSS_RSP:
limProcessMlmAddBssRsp( pMac, limMsg );
break;
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index 8ffb3719585e..d6608fa6e9f5 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -1721,6 +1721,9 @@ limMlmAddBss (
pAddBssParams->extSetStaKeyParamValid = 0;
#endif
+ pAddBssParams->dot11_mode = psessionEntry->dot11mode;
+ limLog(pMac, LOG2, FL("dot11_mode:%d"), pAddBssParams->dot11_mode);
+
msgQ.type = WDA_ADD_BSS_REQ;
msgQ.reserved = 0;
msgQ.bodyptr = pAddBssParams;
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 6c067fd3305c..6f42fb4aad7b 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -5437,251 +5437,6 @@ void limProcessRegdDefdSmeReqAfterNOAStart(tpAniSirGlobal pMac)
}
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * Process Discovery request recieved from SME and transmit to AP.
- */
-static tSirRetStatus limProcessSmeDisStartReq(tpAniSirGlobal pMac,
- tANI_U32 *pMsgBuf)
-{
- /* get all discovery request parameters */
- tSirTdlsDisReq *disReq = (tSirTdlsDisReq *) pMsgBuf ;
- tpPESession psessionEntry;
- tANI_U8 sessionId;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Discovery Req Recieved")) ;
-
- if((psessionEntry = peFindSessionByBssid(pMac, disReq->bssid, &sessionId))
- == NULL)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- "PE Session does not exist for given sme sessionId %d",
- disReq->sessionId);
- goto lim_tdls_dis_start_error;
- }
-
- /* check if we are in proper state to work as TDLS client */
- if (psessionEntry->limSystemRole != eLIM_STA_ROLE)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- "dis req received in wrong system Role %d",
- psessionEntry->limSystemRole);
- goto lim_tdls_dis_start_error;
- }
-
- /*
- * if we are still good, go ahead and check if we are in proper state to
- * do TDLS discovery procedure.
- */
- if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) &&
- (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE))
- {
-
- limLog(pMac, LOGE, "dis req received in invalid LIMsme \
- state (%d)", psessionEntry->limSmeState);
- goto lim_tdls_dis_start_error;
- }
-
- /*
- * if we are still good, go ahead and transmit TDLS discovery request,
- * and save Dis Req info for future reference.
- */
-
- /* save dis request message for matching dialog token */
- vos_mem_copy((tANI_U8 *) &pMac->lim.gLimTdlsDisReq,
- (tANI_U8 *) disReq, sizeof(tSirTdlsDisReq));
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- "Transmit Discovery Request Frame") ;
- /* format TDLS discovery request frame and transmit it */
- limSendTdlsDisReqFrame(pMac, disReq->peerMac, disReq->dialog,
- psessionEntry) ;
-
- /* prepare for response */
- pMac->lim.gLimTdlsDisStaCount = 0 ;
- pMac->lim.gLimTdlsDisResultList = NULL ;
-
- /*
- * start TDLS discovery request timer to wait for discovery responses
- * from all TDLS enabled clients in BSS.
- */
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Start Discovery request Timeout Timer")) ;
- MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, 0,
- eLIM_TDLS_DISCOVERY_RSP_WAIT));
-
- /* assign appropriate sessionId to the timer object */
- pMac->lim.limTimers.gLimTdlsDisRspWaitTimer.sessionId =
- psessionEntry->peSessionId;
-
- if (tx_timer_activate(&pMac->lim.limTimers.gLimTdlsDisRspWaitTimer)
- != TX_SUCCESS)
- {
- limLog(pMac, LOGP, FL("TDLS discovery response timer \
- activation failed!"));
- goto lim_tdls_dis_start_error;
- }
- /*
- * when timer expired, eWNI_SME_TDLS_DISCOVERY_START_RSP is sent
- * back to SME
- */
- return (eSIR_SUCCESS) ;
-lim_tdls_dis_start_error:
- /* in error case, PE has to sent the response SME immediately with error code */
- limSendSmeTdlsDisRsp(pMac, eSIR_FAILURE,
- eWNI_SME_TDLS_DISCOVERY_START_RSP);
- return eSIR_FAILURE;
-}
-/*
- * Process link start request recieved from SME and transmit to AP.
- */
-eHalStatus limProcessSmeLinkStartReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
-{
- /* get all discovery request parameters */
- tSirTdlsSetupReq *setupReq = (tSirTdlsSetupReq *) pMsgBuf ;
- tLimTdlsLinkSetupInfo *linkSetupInfo;
- tpPESession psessionEntry;
- tANI_U8 sessionId;
- eHalStatus status;
-
- if((psessionEntry = peFindSessionByBssid(pMac,
- setupReq->bssid, &sessionId)) == NULL)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- "PE Session does not exist for given sme sessionId %d",
- setupReq->sessionId);
- goto lim_tdls_link_start_error;
- }
-
- /* check if we are in proper state to work as TDLS client */
- if (psessionEntry->limSystemRole != eLIM_STA_ROLE)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- "TDLS link setup req received in wrong system Role %d",
- psessionEntry->limSystemRole);
- goto lim_tdls_link_start_error;
- }
-
- /*
- * if we are still good, go ahead and check if we are in proper state to
- * do TDLS setup procedure.
- */
- if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) &&
- (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE))
- {
- limLog(pMac, LOGE, "Setup request in invalid LIMsme \
- state (%d)", pMac->lim.gLimSmeState);
- goto lim_tdls_link_start_error;
- }
-
- /*
- * Now, go ahead and transmit TDLS discovery request, and save setup Req
- * info for future reference.
- */
- /* create node for Link setup */
- linkSetupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ;
-
- status = limTdlsPrepareSetupReqFrame(pMac, linkSetupInfo, setupReq->dialog,
- setupReq->peerMac, psessionEntry) ;
- if(eHAL_STATUS_SUCCESS == status)
- /* in case of success, eWNI_SME_TDLS_LINK_START_RSP is sent back to SME later when
- TDLS setup cnf TX complete is successful. */
- return eSIR_SUCCESS;
-
-lim_tdls_link_start_error:
- /* in case of error, return immediately to SME */
- limSendSmeTdlsLinkStartRsp(pMac, eSIR_FAILURE, setupReq->peerMac,
- eWNI_SME_TDLS_LINK_START_RSP);
- return eSIR_FAILURE ;
-}
-
-/*
- * Process link teardown request recieved from SME and transmit to AP.
- */
-eHalStatus limProcessSmeTeardownReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
-{
- /* get all discovery request parameters */
- tSirTdlsTeardownReq *teardownReq = (tSirTdlsTeardownReq *) pMsgBuf ;
- tLimTdlsLinkSetupPeer *setupPeer;
- tpPESession psessionEntry;
- tANI_U8 sessionId;
-
- if((psessionEntry = peFindSessionByBssid(pMac, teardownReq->bssid, &sessionId)) == NULL)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- "PE Session does not exist for given sme sessionId %d", teardownReq->sessionId);
- goto lim_tdls_teardown_req_error;
- }
-
- /* check if we are in proper state to work as TDLS client */
- if (psessionEntry->limSystemRole != eLIM_STA_ROLE)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- "TDLS teardown req received in wrong system Role %d", psessionEntry->limSystemRole);
- goto lim_tdls_teardown_req_error;
- }
-
- /*
- * if we are still good, go ahead and check if we are in proper state to
- * do TDLS setup procedure.
- */
- if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) &&
- (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE))
- {
- limLog(pMac, LOGE, "TDLS teardwon req received in invalid LIMsme \
- state (%d)", psessionEntry->limSmeState);
- goto lim_tdls_teardown_req_error;
- }
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- "Teardown for peer = " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(teardownReq->peerMac));
- /*
- * Now, go ahead and transmit TDLS teardown request, and save teardown info
- * info for future reference.
- */
- /* Verify if this link is setup */
- setupPeer = NULL ;
- limTdlsFindLinkPeer(pMac, teardownReq->peerMac, &setupPeer);
- if(NULL == setupPeer)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("invalid Peer on teardown ")) ;
- goto lim_tdls_teardown_req_error;
- }
-
-
- (setupPeer)->tdls_prev_link_state = (setupPeer)->tdls_link_state ;
- (setupPeer)->tdls_link_state = TDLS_LINK_TEARDOWN_START_STATE ;
- /* TDLS_sessionize: check sessionId in case */
- if((setupPeer)->tdls_sessionId != psessionEntry->peSessionId)
- {
- limLog(pMac, LOGE, "TDLS teardown req; stored sessionId (%d) not matched from peSessionId (%d)", \
- (setupPeer)->tdls_sessionId, psessionEntry->limSmeState);
- (setupPeer)->tdls_sessionId = psessionEntry->peSessionId;
- }
-
- /* format TDLS teardown request frame and transmit it */
- if(eSIR_SUCCESS != limSendTdlsTeardownFrame(pMac, teardownReq->peerMac,
- eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON, psessionEntry, NULL, 0 ))
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("couldn't send teardown frame ")) ;
- goto lim_tdls_teardown_req_error;
- }
- /* in case of success, eWNI_SME_TDLS_TEARDOWN_RSP is sent back to SME later when
- TDLS teardown TX complete is successful. --> see limTdlsTeardownTxComplete() */
- return eSIR_SUCCESS;
-lim_tdls_teardown_req_error:
- /* in case of error, return immediately to SME */
- limSendSmeTdlsTeardownRsp(pMac, eSIR_FAILURE, teardownReq->peerMac,
- eWNI_SME_TDLS_TEARDOWN_RSP);
- return eSIR_FAILURE;
-}
-
-
-#endif
static void
__limProcessSmeResetApCapsChange(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
@@ -6032,17 +5787,6 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
limProcesSmeTdlsLinkEstablishReq(pMac, pMsgBuf);
break;
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- case eWNI_SME_TDLS_DISCOVERY_START_REQ:
- limProcessSmeDisStartReq(pMac, pMsgBuf);
- break ;
- case eWNI_SME_TDLS_LINK_START_REQ:
- limProcessSmeLinkStartReq(pMac, pMsgBuf);
- break ;
- case eWNI_SME_TDLS_TEARDOWN_REQ:
- limProcessSmeTeardownReq(pMac, pMsgBuf);
- break ;
-#endif
case eWNI_SME_RESET_AP_CAPS_CHANGED:
__limProcessSmeResetApCapsChange(pMac, pMsgBuf);
break;
@@ -6400,8 +6144,7 @@ limProcessModifyAddIEs(tpAniSirGlobal pMac, tANI_U32 *pMsg)
{
tpSirModifyIEsInd pModifyAddIEs = (tpSirModifyIEsInd)pMsg;
tANI_U8 sessionId;
- tANI_U16 bufferLen = 0;
- tANI_U8 *pBuffer = NULL;
+ tANI_BOOLEAN ret = FALSE;
/* Incoming message has smeSession, use BSSID to find PE session*/
tpPESession psessionEntry = peFindSessionByBssid(pMac,
@@ -6420,41 +6163,27 @@ limProcessModifyAddIEs(tpAniSirGlobal pMac, tANI_U32 *pMsg)
case eUPDATE_IE_PROBE_RESP:
{
/* Probe resp */
- if ((bufferLen = psessionEntry->addIeParams.probeRespDataLen)
- == 0)
- {
- limLog(pMac, LOGE, FL("probe resp add ie not present %d"),
- psessionEntry->addIeParams.probeRespDataLen);
- break;
- }
- /* vendor IE and oui 0x00, 0x16, 0x32 */
- /* search through the buffer and modify the IE */
- pBuffer = psessionEntry->addIeParams.probeRespData_buff;
break;
}
case eUPDATE_IE_ASSOC_RESP:
/* assoc resp IE */
if (psessionEntry->addIeParams.assocRespDataLen == 0)
{
- limLog(pMac, LOGE, FL("assoc resp add ie not present %d"),
- psessionEntry->addIeParams.assocRespDataLen);
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ FL("assoc resp add ie not present %d"),
+ psessionEntry->addIeParams.assocRespDataLen);
}
/* search through the buffer and modify the IE */
break;
case eUPDATE_IE_PROBE_BCN:
+ {
/*probe beacon IE*/
- if ((bufferLen = psessionEntry->addIeParams.probeRespBCNDataLen)
- == 0)
+ if (ret == TRUE && pModifyAddIEs->modifyIE.notify)
{
- limLog(pMac, LOGE,
- FL("probe resp Bcn add ie not present %d"),
- psessionEntry->addIeParams.probeRespBCNDataLen);
- break;
+ limHandleParamUpdate(pMac, pModifyAddIEs->updateType);
}
- /* vendor IE and oui 0x00, 0x16, 0x32 */
- /* search through the buffer and modify the IE */
- pBuffer = psessionEntry->addIeParams.probeRespBCNData_buff;
break;
+ }
default:
limLog(pMac, LOGE, FL("unhandled buffer type %d."),
pModifyAddIEs->updateType);
@@ -6471,7 +6200,6 @@ limProcessModifyAddIEs(tpAniSirGlobal pMac, tANI_U32 *pMsg)
pModifyAddIEs->modifyIE.ieIDLen,
pModifyAddIEs->updateType);
}
-
}
else
{
diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c
index 379f749c752d..f0ae2927af5b 100644
--- a/CORE/MAC/src/pe/lim/limProcessTdls.c
+++ b/CORE/MAC/src/pe/lim/limProcessTdls.c
@@ -98,25 +98,6 @@ If there is other IOT issue because of this bandage, define NO_PAD...
#define TDLS_DEBUG_LOG_LEVEL VOS_TRACE_LEVEL_INFO
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/* forword declarations */
-static tSirRetStatus limTdlsDisAddSta(tpAniSirGlobal pMac, tSirMacAddr peerMac,
- tSirTdlsPeerInfo *peerInfo, tpPESession psessionEntry) ;
-static eHalStatus limSendSmeTdlsLinkSetupInd(tpAniSirGlobal pMac,
- tSirMacAddr peerMac, tANI_U8 status);
-static eHalStatus limSendSmeTdlsDelPeerInd(tpAniSirGlobal pMac,
- tANI_U8 sessionId, tDphHashNode *pStaDs, tANI_U8 status) ;
-static tSirTdlsPeerInfo *limTdlsFindDisPeerByState(tpAniSirGlobal pMac,
- tANI_U8 state);
-static tANI_U8 limTdlsFindSetupPeerByState(tpAniSirGlobal pMac, tANI_U8 state,
- tLimTdlsLinkSetupPeer **setupPeer) ;
-static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peer_mac);
-
-static tSirRetStatus limTdlsLinkTeardown(tpAniSirGlobal pMac, tSirMacAddr peer_mac);
-static tpDphHashNode limTdlsDelSta(tpAniSirGlobal pMac, tSirMacAddr peerMac,
- tpPESession psessionEntry) ;
-
-#endif
static tSirRetStatus limTdlsSetupAddSta(tpAniSirGlobal pMac,
tSirTdlsAddStaReq *pAddStaReq,
tpPESession psessionEntry) ;
@@ -337,42 +318,10 @@ const tANI_U8* limTraceTdlsActionString( tANI_U8 tdlsActionCode )
*/
void limInitTdlsData(tpAniSirGlobal pMac, tpPESession pSessionEntry)
{
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- pMac->lim.gLimTdlsDisResultList = NULL ;
- pMac->lim.gLimTdlsDisStaCount = 0 ;
- vos_mem_set(&pMac->lim.gLimTdlsDisReq, sizeof(tSirTdlsDisReq), 0);
- vos_mem_set(&pMac->lim.gLimTdlsLinkSetupInfo, sizeof(tLimTdlsLinkSetupInfo), 0);
- pMac->lim.gAddStaDisRspWait = 0 ;
-
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- /* when reassociated, negative behavior will not be kept */
- /* you have to explicitly enable negative behavior per (re)association */
- pMac->lim.gLimTdlsNegativeBehavior = 0;
-#endif
-#endif
limInitPeerIdxpool(pMac, pSessionEntry) ;
return ;
}
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
-void limTdlsSetNegativeBehavior(tpAniSirGlobal pMac, tANI_U8 value, tANI_BOOLEAN on)
-{
- if(on) {
- if(value == 255)
- pMac->lim.gLimTdlsNegativeBehavior = 0XFFFFFFFF;
- else
- pMac->lim.gLimTdlsNegativeBehavior |= (1 << (value-1));
- }
- else {
- if(value == 255)
- pMac->lim.gLimTdlsNegativeBehavior = 0;
- else
- pMac->lim.gLimTdlsNegativeBehavior &= ~(1 << (value-1));
- }
- LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,("%d %d -> gLimTdlsNegativeBehavior= 0x%lx"),
- value, on, pMac->lim.gLimTdlsNegativeBehavior));
-}
-#endif
/*
* prepare TDLS frame header, it includes
* | | | |
@@ -602,16 +551,6 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac,
header_offset = limPrepareTdlsFrameHeader(pMac, pFrame,
LINK_IDEN_ADDR_OFFSET(tdlsDisReq), TDLS_LINK_AP, TDLS_INITIATOR, TID_AC_VI, psessionEntry) ;
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_DSCV_REQ)
- {
- tdlsDisReq.LinkIdentifier.bssid[4] = 0xde;
- tdlsDisReq.LinkIdentifier.bssid[5] = 0xad;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS negative running: wrong BSSID " MAC_ADDRESS_STR " in TDLS Discovery Req"),
- MAC_ADDR_ARRAY(tdlsDisReq.LinkIdentifier.bssid));
- }
-#endif
status = dot11fPackTDLSDisReq( pMac, &tdlsDisReq, pFrame
+ header_offset, nPayload, &nPayload );
@@ -674,236 +613,8 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac,
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * Once Discovery response is sent successfully (or failure) on air, now send
- * response to PE and send del STA to HAL.
- */
-eHalStatus limTdlsDisRspTxComplete(tpAniSirGlobal pMac,
- tANI_U32 txCompleteSuccess)
-{
- eHalStatus status = eHAL_STATUS_SUCCESS ;
- tpDphHashNode pStaDs = NULL ;
- tSirTdlsPeerInfo *peerInfo = 0 ;
-
- /* find peer by looking into the list by expected state */
- peerInfo = limTdlsFindDisPeerByState(pMac, TDLS_DIS_RSP_SENT_WAIT_STATE) ;
-
- if(NULL == peerInfo)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("DisRspTxComplete: No TDLS state machine waits for this event"));
- VOS_ASSERT(0) ;
- return eHAL_STATUS_FAILURE;
- }
-
- peerInfo->tdlsPeerState = TDLS_DIS_RSP_SENT_DONE_STATE ;
-
- if(peerInfo->delStaNeeded)
- {
- tpPESession psessionEntry;
-
- peerInfo->delStaNeeded = false ;
- psessionEntry = peFindSessionBySessionId (pMac, peerInfo->sessionId);
-
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("DisRspTxComplete: sessionID %d is not found"), peerInfo->sessionId);
- return eHAL_STATUS_FAILURE;
- }
- /* send del STA to remove context for this TDLS STA */
- pStaDs = limTdlsDelSta(pMac, peerInfo->peerMac, psessionEntry) ;
-
- /* now send indication to SME-->HDD->TL to remove STA from TL */
- if(pStaDs)
- {
- limSendSmeTdlsDelPeerInd(pMac, psessionEntry->smeSessionId,
- pStaDs, eSIR_SUCCESS) ;
- }
- else
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("DisRspTxComplete: staDs not found for " MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY((peerInfo)->peerMac));
- VOS_ASSERT(0) ;
- return eHAL_STATUS_FAILURE;
- }
- }
- if(!txCompleteSuccess)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TX complete failure for Dis RSP"));
- limSendSmeTdlsDisRsp(pMac, eSIR_FAILURE,
- eWNI_SME_TDLS_DISCOVERY_START_IND) ;
- status = eHAL_STATUS_FAILURE;
- }
- else
- {
- limSendSmeTdlsDisRsp(pMac, eSIR_SUCCESS,
- eWNI_SME_TDLS_DISCOVERY_START_IND) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("TX complete Success for Dis RSP"));
- status = eHAL_STATUS_SUCCESS ;
- }
- return status ;
-}
-#endif
-
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * Once setup CNF is sent successfully (or failure) on air, now send
- * response to PE and send del STA to HAL.
- */
-eHalStatus limTdlsSetupCnfTxComplete(tpAniSirGlobal pMac,
- tANI_U32 txCompleteSuccess)
-{
- eHalStatus status = eHAL_STATUS_SUCCESS ;
- tLimTdlsLinkSetupPeer *peerInfo = 0 ;
- /* find peer by looking into the list by expected state */
- limTdlsFindSetupPeerByState(pMac,
- TDLS_LINK_SETUP_RSP_WAIT_STATE, &peerInfo) ;
-
- if(NULL == peerInfo)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsSetupCnfTxComplete: No TDLS state machine waits for this event"));
- VOS_ASSERT(0) ;
- return eHAL_STATUS_FAILURE;
- }
-
- (peerInfo)->tdls_prev_link_state = (peerInfo)->tdls_link_state ;
- (peerInfo)->tdls_link_state = TDLS_LINK_SETUP_DONE_STATE ;
-
- if(!txCompleteSuccess)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TX complete Failure for setup CNF"));
- limSendSmeTdlsLinkStartRsp(pMac, eSIR_FAILURE, (peerInfo)->peerMac,
- eWNI_SME_TDLS_LINK_START_RSP) ;
- status = eHAL_STATUS_FAILURE;
- }
- else
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("RSP-->SME peer MAC = " MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY((peerInfo)->peerMac));
-
- limSendSmeTdlsLinkStartRsp(pMac, eSIR_SUCCESS, (peerInfo)->peerMac,
- eWNI_SME_TDLS_LINK_START_RSP) ;
-
- /* tdls_hklee: prepare PTI template and send it to HAL */
- limTdlsLinkEstablish(pMac, (peerInfo)->peerMac);
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("TX complete Success for setup CNF"));
- status = eHAL_STATUS_SUCCESS ;
- }
- return status ;
-}
-#endif
-
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * Tx Complete for Teardown frame
- */
-eHalStatus limTdlsTeardownTxComplete(tpAniSirGlobal pMac,
- tANI_U32 txCompleteSuccess)
-{
- eHalStatus status = eHAL_STATUS_SUCCESS ;
- tpDphHashNode pStaDs = NULL ;
- tLimTdlsLinkSetupPeer *peerInfo = 0 ;
- tpPESession psessionEntry = NULL ;
-
- /* find peer by looking into the list by expected state */
- limTdlsFindSetupPeerByState(pMac,
- TDLS_LINK_TEARDOWN_START_STATE, &peerInfo) ;
-
- if(NULL == peerInfo)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsTeardownTxComplete: No TDLS state machine waits for this event"));
- VOS_ASSERT(0) ;
- return eHAL_STATUS_FAILURE;
- }
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("teardown peer Mac = " MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY((peerInfo)->peerMac));
-
- psessionEntry = peFindSessionBySessionId(pMac, (peerInfo)->tdls_sessionId);
-
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsTeardownTxComplete: sessionID %d is not found"), (peerInfo)->tdls_sessionId);
- VOS_ASSERT(0) ;
- return eHAL_STATUS_FAILURE;
- }
-
- if(!txCompleteSuccess)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TX complete failure for Teardown ")) ;
-
- /*
- * we should be sending Teradown to AP with status code
- * eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE, we are not worried if
- * that is delivered or not, any way we removing this peer STA from our
- * list
- */
- if(NULL != psessionEntry)
- {
- limSendTdlsTeardownFrame(pMac, (peerInfo)->peerMac,
- eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE, psessionEntry, NULL, 0) ;
- }
- }
-
- if(TDLS_LINK_SETUP_WAIT_STATE != (peerInfo)->tdls_prev_link_state)
- {
- (peerInfo)->tdls_prev_link_state = (peerInfo)->tdls_link_state ;
- (peerInfo)->tdls_link_state = TDLS_LINK_TEARDOWN_DONE_STATE ;
- /* send del STA to remove context for this TDLS STA */
- if(NULL != psessionEntry)
- {
- /* tdls_hklee: send message to HAL before it is deleted */
- limTdlsLinkTeardown(pMac, (peerInfo)->peerMac) ;
-
- pStaDs = limTdlsDelSta(pMac, (peerInfo)->peerMac, psessionEntry) ;
- }
-
- /* now send indication to SME-->HDD->TL to remove STA from TL */
- if(!pStaDs)
- {
- VOS_ASSERT(0) ;
- return eSIR_FAILURE ;
- }
- limSendSmeTdlsDelPeerInd(pMac, psessionEntry->smeSessionId,
- pStaDs, eSIR_SUCCESS) ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("TX complete SUCCESS for Teardown")) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Prev State = %d"), (peerInfo)->tdls_prev_link_state) ;
- limSendSmeTdlsTeardownRsp(pMac, eSIR_SUCCESS, (peerInfo)->peerMac,
- eWNI_SME_TDLS_TEARDOWN_RSP) ;
- /* Delete Peer for Link Peer List */
- limTdlsDelLinkPeer(pMac, (peerInfo)->peerMac) ;
- }
- else
- {
- (peerInfo)->tdls_prev_link_state = (peerInfo)->tdls_link_state ;
- (peerInfo)->tdls_link_state = TDLS_LINK_TEARDOWN_DONE_STATE ;
- limSendSmeTdlsTeardownRsp(pMac, eSIR_SUCCESS, (peerInfo)->peerMac,
- eWNI_SME_TDLS_TEARDOWN_IND) ;
- }
-
- status = eHAL_STATUS_SUCCESS ;
- return status ;
-}
-#endif
/*
* This static function is consistent with any kind of TDLS management
@@ -1099,16 +810,6 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac,
sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId);
}
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_DSCV_RSP)
- {
- tdlsDisRsp.LinkIdentifier.bssid[4] = 0xde;
- tdlsDisRsp.LinkIdentifier.bssid[5] = 0xad;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS negative running: wrong BSSID " MAC_ADDRESS_STR " in TDLS Discovery Rsp"),
- MAC_ADDR_ARRAY(tdlsDisRsp.LinkIdentifier.bssid));
- }
-#endif
status = dot11fPackTDLSDisRsp( pMac, &tdlsDisRsp, pFrame +
sizeof( tSirMacMgmtHdr ),
nPayload, &nPayload );
@@ -1369,16 +1070,6 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac,
header_offset = limPrepareTdlsFrameHeader(pMac, pFrame,
LINK_IDEN_ADDR_OFFSET(tdlsSetupReq), TDLS_LINK_AP, TDLS_INITIATOR, TID_AC_BK, psessionEntry) ;
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_REQ)
- {
- tdlsSetupReq.LinkIdentifier.bssid[4] = 0xde;
- tdlsSetupReq.LinkIdentifier.bssid[5] = 0xad;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS negative running: wrong BSSID " MAC_ADDRESS_STR " in TDLS Setup Req"),
- MAC_ADDR_ARRAY(tdlsSetupReq.LinkIdentifier.bssid));
- }
-#endif
limLog( pMac, LOGW, FL("%s: SupportedChnlWidth %x rxMCSMap %x rxMCSMap %x txSupDataRate %x"),
__func__, tdlsSetupReq.VHTCaps.supportedChannelWidthSet, tdlsSetupReq.VHTCaps.rxMCSMap,
tdlsSetupReq.VHTCaps.txMCSMap, tdlsSetupReq.VHTCaps.txSupDataRate );
@@ -1807,16 +1498,6 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac,
TDLS_LINK_AP, TDLS_RESPONDER,
TID_AC_BK, psessionEntry) ;
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_RSP)
- {
- tdlsSetupRsp.LinkIdentifier.bssid[4] = 0xde;
- tdlsSetupRsp.LinkIdentifier.bssid[5] = 0xad;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS negative running: wrong BSSID " MAC_ADDRESS_STR " in TDLS Setup Rsp"),
- MAC_ADDR_ARRAY(tdlsSetupRsp.LinkIdentifier.bssid));
- }
-#endif
limLog( pMac, LOGW, FL("%s: SupportedChnlWidth %x rxMCSMap %x rxMCSMap %x txSupDataRate %x"),
__func__, tdlsSetupRsp.VHTCaps.supportedChannelWidthSet, tdlsSetupRsp.VHTCaps.rxMCSMap,
tdlsSetupRsp.VHTCaps.txMCSMap, tdlsSetupRsp.VHTCaps.txSupDataRate );
@@ -2016,13 +1697,6 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac,
LINK_IDEN_ADDR_OFFSET(tdlsSetupCnf), TDLS_LINK_AP, TDLS_INITIATOR,
TID_AC_VI, psessionEntry) ;
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_STATUS_37_IN_SETUP_CNF) {
- tdlsSetupCnf.StatusCode.statusCode = 37;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS negative running: StatusCode = 37 in TDLS Setup Cnf"));
- }
-#endif
status = dot11fPackTDLSSetupCnf( pMac, &tdlsSetupCnf, pFrame
+ header_offset, nPayload, &nPayload );
@@ -2106,178 +1780,6 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac,
return eSIR_SUCCESS;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * Convert HT caps to lim based HT caps
- */
-static void limTdlsCovertHTCaps(tpAniSirGlobal pMac,
- tSirTdlsPeerInfo *peerInfo, tDot11fIEHTCaps *HTCaps)
-{
-
- /* HT Capability Info */
- peerInfo->tdlsPeerHtCaps.advCodingCap = HTCaps->advCodingCap ;
- peerInfo->tdlsPeerHtCaps.supportedChannelWidthSet =
- HTCaps->supportedChannelWidthSet ;
- peerInfo->tdlsPeerHtCaps.mimoPowerSave = HTCaps->mimoPowerSave ;
- peerInfo->tdlsPeerHtCaps.greenField = HTCaps->greenField ;
- peerInfo->tdlsPeerHtCaps.shortGI20MHz = HTCaps->shortGI20MHz ;
- peerInfo->tdlsPeerHtCaps.shortGI40MHz = HTCaps->shortGI40MHz ;
- peerInfo->tdlsPeerHtCaps.txSTBC = HTCaps->txSTBC ;
- peerInfo->tdlsPeerHtCaps.rxSTBC = HTCaps->rxSTBC ;
- peerInfo->tdlsPeerHtCaps.delayedBA = HTCaps->delayedBA;
- peerInfo->tdlsPeerHtCaps.maximalAMSDUsize = HTCaps->maximalAMSDUsize ;
- peerInfo->tdlsPeerHtCaps.dsssCckMode40MHz = HTCaps->dsssCckMode40MHz ;
- peerInfo->tdlsPeerHtCaps.psmp = HTCaps->stbcControlFrame ;
- peerInfo->tdlsPeerHtCaps.stbcControlFrame = HTCaps->stbcControlFrame ;
- peerInfo->tdlsPeerHtCaps.lsigTXOPProtection =
- HTCaps->lsigTXOPProtection ;
-
- /* HT Capa parameters */
- peerInfo->tdlsPeerHtParams.maxRxAMPDUFactor = HTCaps->maxRxAMPDUFactor ;
- peerInfo->tdlsPeerHtParams.mpduDensity = HTCaps->mpduDensity ;
- peerInfo->tdlsPeerHtParams.reserved = HTCaps->reserved1 ;
-
- /* Extended HT caps */
- peerInfo->tdlsPeerHtExtCaps.pco = HTCaps->pco ;
- peerInfo->tdlsPeerHtExtCaps.transitionTime = HTCaps->transitionTime ;
- peerInfo->tdlsPeerHtExtCaps.mcsFeedback = HTCaps->mcsFeedback ;
- vos_mem_copy( peerInfo->supportedMCSSet,
- HTCaps->supportedMCSSet, SIZE_OF_SUPPORTED_MCS_SET) ;
-
- return ;
-}
-
-/*
- * update capability info..
- */
-void tdlsUpdateCapInfo(tSirMacCapabilityInfo *capabilityInfo,
- tDot11fFfCapabilities *Capabilities)
-{
-
- capabilityInfo->ess = Capabilities->ess;
- capabilityInfo->ibss = Capabilities->ibss;
- capabilityInfo->cfPollable = Capabilities->cfPollable;
- capabilityInfo->cfPollReq = Capabilities->cfPollReq;
- capabilityInfo->privacy = Capabilities->privacy;
- capabilityInfo->shortPreamble = Capabilities->shortPreamble;
- capabilityInfo->pbcc = Capabilities->pbcc;
- capabilityInfo->channelAgility = Capabilities->channelAgility;
- capabilityInfo->spectrumMgt = Capabilities->spectrumMgt;
- capabilityInfo->qos = Capabilities->qos;
- capabilityInfo->shortSlotTime = Capabilities->shortSlotTime;
- capabilityInfo->apsd = Capabilities->apsd;
- capabilityInfo->rrm = Capabilities->rrm;
- capabilityInfo->dsssOfdm = Capabilities->dsssOfdm;
- capabilityInfo->immediateBA = Capabilities->immediateBA;
-
- return ;
-}
-
-/*
- * update Peer info from the link request frame recieved from Peer..
- * in list of STA participating in TDLS link setup
- */
-void limTdlsUpdateLinkReqPeerInfo(tpAniSirGlobal pMac,
- tLimTdlsLinkSetupPeer *setupPeer,
- tDot11fTDLSSetupReq *setupReq)
-{
-
- /* Populate peer info of tdls discovery result */
-
- tdlsUpdateCapInfo(&setupPeer->capabilityInfo, &setupReq->Capabilities) ;
-
- if(setupReq->SuppRates.present)
- {
- ConvertSuppRates( pMac, &setupPeer->supportedRates,
- &setupReq->SuppRates );
- }
-
- /* update QOS info, needed for Peer U-APSD session */
- if(setupReq->QOSCapsStation.present)
- {
- ConvertQOSCapsStation(pMac->hHdd, &setupPeer->qosCaps,
- &setupReq->QOSCapsStation) ;
- LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,("setupReq->SPLen=%d (be %d %d %d %d vo) more %d qack %d."),
- setupReq->QOSCapsStation.max_sp_length, setupReq->QOSCapsStation.acbe_uapsd,
- setupReq->QOSCapsStation.acbk_uapsd, setupReq->QOSCapsStation.acvi_uapsd,
- setupReq->QOSCapsStation.acvo_uapsd, setupReq->QOSCapsStation.more_data_ack,
- setupReq->QOSCapsStation.qack));
- }
-
- if (setupReq->ExtSuppRates.present)
- {
- setupPeer->ExtRatesPresent = 1;
- ConvertExtSuppRates( pMac, &setupPeer->extendedRates,
- &setupReq->ExtSuppRates );
- }
- /* update HT caps */
- if (setupReq->HTCaps.present)
- {
- vos_mem_copy( &setupPeer->tdlsPeerHTCaps,
- &setupReq->HTCaps, sizeof(tDot11fIEHTCaps)) ;
- }
- /* Update EXT caps */
- if (setupReq->ExtCap.present)
- {
- vos_mem_copy( &setupPeer->tdlsPeerExtCaps,
- &setupReq->ExtCap, sizeof(tDot11fIEExtCap)) ;
- }
-
- return ;
-}
-
-/*
- * update peer Info recieved with TDLS setup RSP
- */
-void limTdlsUpdateLinkRspPeerInfo(tpAniSirGlobal pMac,
- tLimTdlsLinkSetupPeer *setupPeer,
- tDot11fTDLSSetupRsp *setupRsp)
-{
-
- /* Populate peer info of tdls discovery result */
- tdlsUpdateCapInfo(&setupPeer->capabilityInfo, &setupRsp->Capabilities) ;
-
- if(setupRsp->SuppRates.present)
- {
- tDot11fIESuppRates *suppRates = &setupRsp->SuppRates ;
- ConvertSuppRates( pMac, &setupPeer->supportedRates, suppRates);
- }
-
- /* update QOS info, needed for Peer U-APSD session */
- if(setupRsp->QOSCapsStation.present)
- {
- ConvertQOSCapsStation(pMac->hHdd, &setupPeer->qosCaps,
- &setupRsp->QOSCapsStation) ;
- LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("setupRsp->SPLen=%d (be %d %d %d %d vo) more %d qack %d."),
- setupRsp->QOSCapsStation.max_sp_length, setupRsp->QOSCapsStation.acbe_uapsd,
- setupRsp->QOSCapsStation.acbk_uapsd, setupRsp->QOSCapsStation.acvi_uapsd,
- setupRsp->QOSCapsStation.acvo_uapsd, setupRsp->QOSCapsStation.more_data_ack,
- setupRsp->QOSCapsStation.qack));
- }
-
- if(setupRsp->ExtSuppRates.present)
- {
- setupPeer->ExtRatesPresent = 1;
- ConvertExtSuppRates( pMac, &setupPeer->extendedRates,
- &setupRsp->ExtSuppRates );
- }
- /* update HT caps */
- if (setupRsp->HTCaps.present)
- {
- vos_mem_copy(&setupPeer->tdlsPeerHTCaps,
- &setupRsp->HTCaps, sizeof(tDot11fIEHTCaps)) ;
- }
-
- /* update EXT caps */
- if (setupRsp->ExtCap.present)
- {
- vos_mem_copy( &setupPeer->tdlsPeerExtCaps,
- &setupRsp->ExtCap, sizeof(tDot11fIEExtCap)) ;
- }
-
- return ;
-}
-#endif
/* This Function is similar to PopulateDot11fHTCaps, except that the HT Capabilities
* are considered from the AddStaReq rather from the cfg.dat as in PopulateDot11fHTCaps
@@ -2767,1311 +2269,6 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs,
return ;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * find Peer in setup link list.
- */
-
-tANI_U8 limTdlsFindLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac,
- tLimTdlsLinkSetupPeer **setupPeer)
-{
- tLimTdlsLinkSetupInfo *setupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ;
- tLimTdlsLinkSetupPeer *linkSetupList = setupInfo->tdlsLinkSetupList ;
- tANI_U8 checkNode = TDLS_NODE_NOT_FOUND ;
-
- while (linkSetupList != NULL)
- {
- if (vos_mem_compare((tANI_U8 *) peerMac,
- (tANI_U8 *) linkSetupList->peerMac,
- sizeof(tSirMacAddr)) )
- {
- checkNode = TDLS_NODE_FOUND ;
- *setupPeer = linkSetupList ;
- break ;
- }
- linkSetupList = linkSetupList->next;
- }
-
- return ((TDLS_NODE_FOUND == checkNode) ? eSIR_SUCCESS : eSIR_FAILURE ) ;
-}
-
-/*
- * find peer in Discovery list.
- * Dicovery list get populated in two instances, a) Recieved responses in reply
- * to discovery request b) If discover request is received from TDLS peer STA
- */
-tSirTdlsPeerInfo *limTdlsFindDisPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac)
-{
- tLimDisResultList *discoveryList = pMac->lim.gLimTdlsDisResultList ;
- tSirTdlsPeerInfo *peerInfo = NULL ;
-
- while (discoveryList != NULL)
- {
- peerInfo = &discoveryList->tdlsDisPeerInfo ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Peer in discovery list = " MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(peerInfo->peerMac));
-
- if (vos_mem_compare((tANI_U8 *) peerMac,
- (tANI_U8 *) &peerInfo->peerMac, sizeof(tSirMacAddr)) )
- {
- break ;
- }
- discoveryList = discoveryList->next;
- }
-
- return peerInfo ;
-}
-
-/*
- * find peer in Discovery list by looking into peer state.
- * Dicovery list get populated in two instances, a) Recieved responses in reply
- * to discovery request b) If discover request is received from TDLS peer STA
- */
-static tSirTdlsPeerInfo *limTdlsFindDisPeerByState(tpAniSirGlobal pMac,
- tANI_U8 state)
-{
- tLimDisResultList *discoveryList = pMac->lim.gLimTdlsDisResultList ;
- tSirTdlsPeerInfo *peerInfo = NULL ;
-
- while (discoveryList != NULL)
- {
- peerInfo = &discoveryList->tdlsDisPeerInfo ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("peerInfo Mac = " MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(peerInfo->peerMac));
-
- if (peerInfo->tdlsPeerState == state)
- {
- break ;
- }
- discoveryList = discoveryList->next;
- }
-
- return peerInfo ;
-}
-
-/*
- * find peer in Setup list by looking into peer state.
- * setup list get populated in two instances, a) Recieved responses in reply
- * to setup request b) If discover request is received from TDLS peer STA
- */
-static tANI_U8 limTdlsFindSetupPeerByState(tpAniSirGlobal pMac, tANI_U8 state,
- tLimTdlsLinkSetupPeer **setupPeer)
-{
-
- tLimTdlsLinkSetupInfo *setupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ;
- tLimTdlsLinkSetupPeer *linkSetupList = setupInfo->tdlsLinkSetupList ;
- tANI_U8 checkNode = TDLS_NODE_NOT_FOUND ;
-
- while (linkSetupList != NULL)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("peer state = %02x"), (linkSetupList)->tdls_link_state) ;
- if((linkSetupList)->tdls_link_state == state)
- {
- checkNode = TDLS_NODE_FOUND ;
- *setupPeer = linkSetupList ;
- break ;
- }
- linkSetupList = (linkSetupList)->next;
- }
-
- return ((TDLS_NODE_FOUND == checkNode) ? eSIR_SUCCESS: eSIR_FAILURE) ;
-}
-
-
-/*
- * delete Peer from Setup Link
- */
-void limTdlsDelLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac)
-{
- tLimTdlsLinkSetupInfo *setupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ;
- tLimTdlsLinkSetupPeer **linkSetupList = &setupInfo->tdlsLinkSetupList ;
- tLimTdlsLinkSetupPeer *currentNode = NULL ;
- tLimTdlsLinkSetupPeer *prevNode = NULL ;
-
- for(currentNode = *linkSetupList ; currentNode != NULL ;
- prevNode = currentNode, currentNode = currentNode->next)
- {
- if (vos_mem_compare( (tANI_U8 *) peerMac,
- (tANI_U8 *) currentNode->peerMac,
- sizeof(tSirMacAddr)) )
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Del Node for Peer = " MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(currentNode->peerMac));
- /* if it's first Node */
- if(NULL == prevNode)
- {
- *linkSetupList = currentNode->next ;
- }
- else
- {
- prevNode->next = currentNode->next ;
- }
- vos_mem_free(currentNode) ;
- return ;
- }
- }
-
- return ;
-}
-
-
-
-/*
- * TDLS discovery request frame received from TDLS peer STA..
- */
-static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac,
- tANI_U8 *pBody, tANI_U32 frmLen )
-{
- tDot11fTDLSDisReq tdlsDisReq = {{0}} ;
- tANI_U32 status = 0 ;
- tLimDisResultList *tdlsDisResult = NULL ;
- tLimDisResultList **disResultList = &pMac->lim.gLimTdlsDisResultList ;
- tSirMacAddr peerMac = {0} ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
- tSirTdlsPeerInfo *peerInfo = NULL ;
- tpPESession psessionEntry = NULL ;
- tANI_U8 sessionId = 0 ;
-
- status = dot11fUnpackTDLSDisReq(pMac, pBody, frmLen, &tdlsDisReq) ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_WARN,
- ("TDLS dis request dialog = %d"), tdlsDisReq.DialogToken.token);
-
- if ( DOT11F_FAILED( status ) )
- {
- limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request "
- "frame (0x%08x, %d bytes):"),status, frmLen);
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- return eSIR_FAILURE;
- }
- else if ( DOT11F_WARNED( status ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS "
- "discovery Request frame (0x%08x, %d bytes):"),
- status, frmLen );
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- }
-
- /*
- * find session entry using BSSID in link identifier, not using MAC
- * header beacuse, there is cases in TDLS, there may be BSSID will not
- * be present in header
- */
- psessionEntry = peFindSessionByBssid(pMac,
- &tdlsDisReq.LinkIdentifier.bssid[0], &sessionId) ;
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("no Session entry for TDLS session (bssid "MAC_ADDR_ARRAY")"),
- MAC_ADDR_ARRAY(tdlsDisReq.LinkIdentifier.bssid));
-
- return eSIR_FAILURE;
- }
-
- /* varify BSSID */
- status = vos_mem_compare( &psessionEntry->bssId[0],
- &tdlsDisReq.LinkIdentifier.bssid[0], sizeof(tSirMacAddr)) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("lim BSSID "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY( psessionEntry->bssId));
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Dis req from BSSID "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(tdlsDisReq.LinkIdentifier.bssid));
- if(!status)
- {
- limLog( pMac, LOGE, FL("TDLS discovery request frame from other BSS -> something wrong. Check RXP filter")) ;
-
- return eSIR_FAILURE ;
- }
-
- /*
- * check if this is echo of our transmitted discovery request
- * drop it here, TODO: better to drop this in TL.
- */
- status = vos_mem_compare( psessionEntry->selfMacAddr,
- &tdlsDisReq.LinkIdentifier.InitStaAddr[0],
- sizeof(tSirMacAddr)) ;
- if(status)
- {
- limLog( pMac, LOGE, FL("Echo of our TDLS discovery request frame")) ;
- return eSIR_FAILURE ;
- }
-
- /*
- * while processing Discovery request from Peer,
- * STA_MAC--> MAC of TDLS discovery initiator
- * STA_PEER_MAC--> MAC of TDLS discovery responder.
- */
- vos_mem_copy( peerMac,
- &tdlsDisReq.LinkIdentifier.InitStaAddr[0],
- sizeof(tSirMacAddr)) ;
- /* TODO, do more validation */
-
- /* see if discovery is already in progress */
- peerInfo = limTdlsFindDisPeer(pMac, peerMac) ;
-
- if(NULL == peerInfo)
- {
- /*
- * we are allocating peer info for individual peers found in TDLS
- * discovery, we need to keep adding TDLS peers till we have timed
- * out. We are freeing this memory at the time we are sending this
- * collected peer info to SME.
- */
- tdlsDisResult = vos_mem_malloc(sizeof(tLimDisResultList));
- if ( NULL == tdlsDisResult )
- {
- limLog(pMac, LOGP, FL("alloc fail for TDLS discovery "
- "reponse info")) ;
- return eSIR_FAILURE ;
- }
-
-
- peerInfo = &tdlsDisResult->tdlsDisPeerInfo ;
- peerInfo->tdlsPeerState = TDLS_DIS_REQ_PROCESS_STATE ;
- peerInfo->dialog = tdlsDisReq.DialogToken.token ;
-
- peerInfo->sessionId = psessionEntry->peSessionId;
-
- /* Populate peer info of tdls discovery result */
- vos_mem_copy( peerInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ;
-
- /*
- * Now, as per D13, there will not be any Supp rates, ext Supp rates
- * info in Discovery request frames, so we are populating this info
- * locally to pass it to ADD STA.
- */
- do
- {
- tDot11fIESuppRates suppRates = {0} ;
- tDot11fIEExtSuppRates extSuppRates = {0} ;
- tANI_U16 caps = 0 ;
- tDot11fFfCapabilities capsInfo = {0} ;
- tDot11fIEHTCaps HTCaps = {0} ;
- /* populate supported rate IE */
- PopulateDot11fSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL,
- &suppRates, psessionEntry );
- ConvertSuppRates( pMac, &peerInfo->tdlsPeerSuppRates,
- &suppRates);
- /* Populate extended supported rates */
- PopulateDot11fExtSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL,
- &extSuppRates, psessionEntry );
-
- peerInfo->ExtRatesPresent = 1;
- ConvertExtSuppRates( pMac, &peerInfo->tdlsPeerExtRates,
- &extSuppRates);
-
- if(cfgGetCapabilityInfo(pMac, &caps, psessionEntry) != eSIR_SUCCESS)
- {
- /*
- * Could not get Capabilities value
- * from CFG. Log error.
- */
- limLog(pMac, LOGP,
- FL("could not retrieve Capabilities value"));
- }
- swapBitField16(caps, ( tANI_U16* )&capsInfo );
- /* update Caps Info */
- tdlsUpdateCapInfo(&peerInfo->capabilityInfo, &capsInfo) ;
-
- PopulateDot11fHTCaps( pMac, psessionEntry, &HTCaps );
- limTdlsCovertHTCaps(pMac, peerInfo, &HTCaps) ;
-
- } while (0) ;
-
- /* now add this new found discovery node into tdls discovery list */
- tdlsDisResult->next = *disResultList ;
- *disResultList = tdlsDisResult ;
- pMac->lim.gLimTdlsDisStaCount++ ;
-
- /* See if for this peer already entry in setup Link */
- limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ;
-
- /*
- * if there is no entry for this peer in setup list, we need to
- * do add sta for this peer to transmit discovery rsp.
- */
- if(NULL == setupPeer)
- {
- /* To start with, send add STA request to HAL */
- pMac->lim.gLimAddStaTdls = true ;
- peerInfo->delStaNeeded = true ;
-
- if(eSIR_FAILURE == limTdlsDisAddSta(pMac, peerMac,
- peerInfo, psessionEntry))
- {
- VOS_ASSERT(0) ;
- limLog(pMac, LOGE, "Add STA for dis response is failed ") ;
- return eSIR_FAILURE ;
- }
- } /* use setup link sta ID for discovery rsp */
- else
- {
- peerInfo->delStaNeeded = false ;
- limSendTdlsDisRspFrame(pMac, peerInfo->peerMac, peerInfo->dialog, psessionEntry) ;
- peerInfo->tdlsPeerState = TDLS_DIS_RSP_SENT_WAIT_STATE ;
- }
-
- }
- else
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("discovery procedure in progress for this peer")) ;
- }
-
- return eSIR_SUCCESS ;
-}
-
-/* Process TDLS setup Request Frame */
-
-static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac,
- tANI_U8 *pBody, tANI_U32 frmLen)
-{
-
- tDot11fTDLSSetupReq tdlsSetupReq = {{0}} ;
- tANI_U32 status = 0 ;
- tpPESession psessionEntry = NULL ;
- tANI_U8 sessionId = 0 ;
- tANI_U8 currentState = TDLS_LINK_SETUP_WAIT_STATE ;
- tANI_U8 previousState = TDLS_LINK_IDLE_STATE ;
- /* create node for Link setup */
- tLimTdlsLinkSetupInfo *linkSetupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
- tLimTdlsLinkSetupPeer *tmpSetupPeer = NULL ;
-
- status = dot11fUnpackTDLSSetupReq(pMac, pBody, frmLen, &tdlsSetupReq) ;
-
- if ( DOT11F_FAILED( status ) )
- {
- limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request "
- "frame (0x%08x, %d bytes):"),status, frmLen);
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- return eSIR_FAILURE;
- }
- else if ( DOT11F_WARNED( status ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS "
- "setup Request frame (0x%08x, %d bytes):"),
- status, frmLen );
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- }
- /*
- * find session entry using BSSID in link identifier, not using MAC
- * header beacuse, there is cases in TDLS, there may be BSSID will not
- * be present in header
- */
- psessionEntry = peFindSessionByBssid(pMac,
- &tdlsSetupReq.LinkIdentifier.bssid[0], &sessionId) ;
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("no Session entry for TDLS session (bssid "
- MAC_ADDRESS_STR")"),
- MAC_ADDR_ARRAY(tdlsSetupReq.LinkIdentifier.bssid));
-
- return eSIR_FAILURE ;
- }
- /* TODO: we don;t need this check now, varify BSSID */
- status = vos_mem_compare( psessionEntry->bssId,
- &tdlsSetupReq.LinkIdentifier.bssid[0],
- sizeof(tSirMacAddr)) ;
-
- if(!status)
- {
- limLog( pMac, LOGE, FL("TDLS setup request frame from other BSS -> something wrong. Check RXP filter")) ;
-
- limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr,
- tdlsSetupReq.DialogToken.token, psessionEntry,
- TDLS_SETUP_STATUS_FAILURE, NULL, 0 ) ;
- return eSIR_FAILURE ;
- }
-
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_RSP_TIMEOUT_TO_SETUP_REQ)
- {
- /* simply ignore this setup request packet */
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS negative running: ignore TDLS Setup Req packet"));
- return eSIR_SUCCESS ;
- }
- if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_SEND_REQ_TO_SETUP_REQ)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("TDLS negative running: send TDLS Setup Req to peer TDLS Setup Req"));
- /* format TDLS discovery request frame and transmit it */
- limSendTdlsLinkSetupReqFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, tdlsSetupReq.DialogToken.token, psessionEntry,
- NULL, 0) ;
- }
-#endif
- /* TODO, do more validation */
-
- if(!limTdlsFindLinkPeer(pMac,
- &tdlsSetupReq.LinkIdentifier.InitStaAddr[0],
- &tmpSetupPeer))
- {
- tANI_U32 tdlsStateStatus = TDLS_LINK_SETUP_START_STATE ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("Link is already setup with this peer" )) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("state = %d"), tmpSetupPeer->tdls_link_state) ;
-
- if(tmpSetupPeer == NULL)
- {
- VOS_ASSERT(0) ;
- return eSIR_FAILURE ;
-
- }
- switch(tmpSetupPeer->tdls_link_state)
- {
-
- case TDLS_LINK_SETUP_START_STATE:
- {
- v_SINT_t macCompare = 0 ;
- macCompare= vos_mem_compare2(tmpSetupPeer->peerMac,
- psessionEntry->selfMacAddr, sizeof(tSirMacAddr)) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("MAC comparison Rslt = %d"), macCompare ) ;
- if(0 > macCompare)
- {
- /*
- * Delete our Setup Request/Peer info and honour Peer
- * Setup Request, go ahead and respond for this
- */
- /* Deactivate the timer */
- tx_timer_deactivate(&tmpSetupPeer->gLimTdlsLinkSetupRspTimeoutTimer) ;
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
- if((pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_SEND_REQ_TO_SETUP_REQ)
- != LIM_TDLS_NEGATIVE_SEND_REQ_TO_SETUP_REQ)
-#endif
- limSendSmeTdlsLinkStartRsp(pMac, eSIR_FAILURE,
- tmpSetupPeer->peerMac, eWNI_SME_TDLS_LINK_START_RSP);
-
- limTdlsDelLinkPeer(pMac, tmpSetupPeer->peerMac) ;
- tdlsStateStatus = TDLS_LINK_IDLE_STATE ;
- }
- else if(0 < macCompare)
- {
- /*
- * Go ahead with current setup as peer is going to
- * respond for setup request
- */
- tdlsStateStatus = TDLS_LINK_SETUP_START_STATE ;
- }
- else
- {
- /* same MAC, not possible */
- VOS_ASSERT(0) ;
- }
-
- break ;
- }
-
- case TDLS_LINK_SETUP_DONE_STATE:
- {
- tpDphHashNode pStaDs = NULL ;
-
- previousState = TDLS_LINK_SETUP_WAIT_STATE ;
- currentState = TDLS_LINK_TEARDOWN_START_STATE ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("link Setup Done state " )) ;
- tmpSetupPeer->tdls_prev_link_state = previousState ;
- tmpSetupPeer->tdls_link_state = currentState ;
- setupPeer = tmpSetupPeer ;
-
- /* tdls_hklee: send message to HAL before it is deleted, cause */
- limTdlsLinkTeardown(pMac, (setupPeer)->peerMac) ;
-
- /* send del STA to remove context for this TDLS STA */
- pStaDs = limTdlsDelSta(pMac, (setupPeer)->peerMac, psessionEntry) ;
-
- /* now send indication to SME-->HDD->TL to remove STA from TL */
-
- if(pStaDs)
- {
- limSendSmeTdlsDelPeerInd(pMac, psessionEntry->smeSessionId,
- pStaDs, eSIR_SUCCESS) ;
-
- /* send Teardown Ind to SME */
- limSendSmeTdlsTeardownRsp(pMac, eSIR_SUCCESS, (setupPeer)->peerMac,
- eWNI_SME_TDLS_TEARDOWN_IND) ;
- /* remove node from setup list */
- limTdlsDelLinkPeer(pMac, (setupPeer)->peerMac) ;
- }
- tdlsStateStatus = TDLS_LINK_IDLE_STATE ;
- break ;
-
- }
- default:
- {
- VOS_ASSERT(0) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("link Setup is Recieved in unknown state" )) ;
- break ;
- }
- }
- if(tdlsStateStatus == TDLS_LINK_SETUP_START_STATE)
- return eSIR_FAILURE ;
- }
-
- if(currentState != TDLS_LINK_TEARDOWN_START_STATE)
- {
- /*
- * Now we are sure to send discovery response frame to TDLS discovery
- * initiator, we don't care, if this request is unicast ro broadcast,
- * we simply, send discovery response frame on direct link.
- */
- setupPeer = vos_mem_malloc(sizeof( tLimTdlsLinkSetupPeer ));
- if ( NULL == setupPeer )
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ( "Unable to allocate memory during ADD_STA" ));
- return eSIR_MEM_ALLOC_FAILED;
- }
-
- setupPeer->dialog = tdlsSetupReq.DialogToken.token ;
- setupPeer->tdls_prev_link_state = previousState ;
- setupPeer->tdls_link_state = currentState ;
- /* TDLS_sessionize: remember sessionId for future */
- setupPeer->tdls_sessionId = psessionEntry->peSessionId;
- setupPeer->tdls_bIsResponder = 0;
-
- vos_mem_copy(setupPeer->peerMac,
- &tdlsSetupReq.LinkIdentifier.InitStaAddr[0],
- sizeof(tSirMacAddr)) ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Setup REQ MAC = " MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(setupPeer->peerMac));
-
- limTdlsUpdateLinkReqPeerInfo(pMac, setupPeer, &tdlsSetupReq) ;
- pMac->lim.gLimAddStaTdls = true ;
-
- /* To start with, send add STA request to HAL */
- if(eSIR_FAILURE == limTdlsSetupAddSta(pMac, setupPeer->peerMac,
- setupPeer, psessionEntry))
- {
- VOS_ASSERT(0) ;
- vos_mem_free((void **) &setupPeer) ;
- return eSIR_FAILURE ;
- }
-
- limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr,
- tdlsSetupReq.DialogToken.token, psessionEntry,
- TDLS_SETUP_STATUS_SUCCESS, NULL, 0) ;
-
- limStartTdlsTimer(pMac, psessionEntry->peSessionId,
- &setupPeer->gLimTdlsLinkSetupCnfTimeoutTimer,
- (tANI_U32)setupPeer->peerMac,
- WNI_CFG_TDLS_LINK_SETUP_CNF_TIMEOUT,
- SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT) ;
-
- /* update setup peer list */
- setupPeer->next = linkSetupInfo->tdlsLinkSetupList ;
- linkSetupInfo->tdlsLinkSetupList = setupPeer ;
- }
- else
- {
- setupPeer->dialog = tdlsSetupReq.DialogToken.token ;
- setupPeer->tdls_prev_link_state = previousState ;
- setupPeer->tdls_link_state = currentState ;
- /* TDLS_sessionize: remember sessionId for future */
- setupPeer->tdls_sessionId = psessionEntry->peSessionId;
- setupPeer->tdls_bIsResponder = 0;
-
- vos_mem_copy( setupPeer->peerMac,
- &tdlsSetupReq.LinkIdentifier.InitStaAddr[0],
- sizeof(tSirMacAddr)) ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Setup REQ MAC = "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(setupPeer->peerMac));
-
- limTdlsUpdateLinkReqPeerInfo(pMac, setupPeer, &tdlsSetupReq) ;
- limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr,
- tdlsSetupReq.DialogToken.token, psessionEntry,
- TDLS_SETUP_STATUS_SUCCESS, NULL, 0) ;
-
- limStartTdlsTimer(pMac, psessionEntry->peSessionId,
- &setupPeer->gLimTdlsLinkSetupCnfTimeoutTimer,
- (tANI_U32)setupPeer->peerMac,
- WNI_CFG_TDLS_LINK_SETUP_CNF_TIMEOUT,
- SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT) ;
- }
-
-
- return eSIR_SUCCESS ;
-
-}
-
-/*
- * TDLS discovery request frame received from TDLS peer STA..
- */
-static tSirRetStatus limProcessTdlsSetupRspFrame(tpAniSirGlobal pMac,
- tANI_U8 *pBody, tANI_U32 frmLen )
-{
- tDot11fTDLSSetupRsp tdlsSetupRsp = {{0}} ;
- tANI_U32 status = 0 ;
- tSirMacAddr peerMac = {0} ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
- tpPESession psessionEntry = NULL ;
- tANI_U8 sessionId = 0 ;
-
- status = dot11fUnpackTDLSSetupRsp(pMac, pBody, frmLen, &tdlsSetupRsp) ;
-
- if ( DOT11F_FAILED( status ) )
- {
- limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request "
- "frame (0x%08x, %d bytes):"),status, frmLen);
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- return eSIR_FAILURE;
- }
- else if ( DOT11F_WARNED( status ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS "
- "discovery Request frame (0x%08x, %d bytes):"),
- status, frmLen );
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- }
-
- /*
- * find session entry using BSSID in link identifier, not using MAC
- * header beacuse, there is cases in TDLS, there may be BSSID will not
- * be present in header
- */
- psessionEntry = peFindSessionByBssid(pMac,
- &tdlsSetupRsp.LinkIdentifier.bssid[0], &sessionId) ;
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("no Session entry for TDLS session (bssid "
- MAC_ADDRESS_STR")"),
- MAC_ADDR_ARRAY(tdlsSetupRsp.LinkIdentifier.bssid));
-
- return eSIR_FAILURE;
- }
-
- /* varify BSSID */
- status = vos_mem_compare( psessionEntry->bssId,
- &tdlsSetupRsp.LinkIdentifier.bssid[0],
- sizeof(tSirMacAddr)) ;
-
- if(!status)
- {
- limLog( pMac, LOGE, FL("TDLS discovery request frame from other BSS -> something wrong. Check RXP filter")) ;
-
- VOS_ASSERT(0) ;
- return eSIR_FAILURE ;
- }
- vos_mem_copy( peerMac,
- &tdlsSetupRsp.LinkIdentifier.RespStaAddr[0],
- sizeof(tSirMacAddr)) ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("TDLS setup RSP peer = "MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac));
- limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ;
-
- if(NULL == setupPeer)
- {
- limLog( pMac, LOGE, FL("unknown setup Response frame other BSS")) ;
- return eSIR_FAILURE ;
- }
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("deactivating Setup RSP timer")) ;
-
- /* Deactivate the timer */
- tx_timer_deactivate(&(setupPeer)->gLimTdlsLinkSetupRspTimeoutTimer) ;
-
- /*
- * TDLS Setup RSP is recieved with Failure, Delete this STA entry
- * don't respond with TDLS CNF frame.
- */
- if(TDLS_SETUP_STATUS_SUCCESS != tdlsSetupRsp.Status.status)
- {
- limTdlsDelLinkPeer(pMac, (setupPeer)->peerMac) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("setup RSP with Failure Code")) ;
- return eSIR_FAILURE ;
- }
-
- /* update Link Info */
- limTdlsUpdateLinkRspPeerInfo(pMac, setupPeer, &tdlsSetupRsp) ;
-
- /* TODO, do more validation */
-
-
- /*
- * Now we are sure to send link setup CNF frame to TDLS link setup
- * reponded, now we will create dph hash entry and send add STA to HAL
- */
-
- pMac->lim.gLimAddStaTdls = true ;
- if(eSIR_FAILURE == limTdlsSetupAddSta(pMac, peerMac,
- setupPeer, psessionEntry))
- {
- /* through error */
- VOS_ASSERT(0) ;
- return eSIR_FAILURE ;
- }
- /* TDLS_HKLEE_FIXME: now we add some delay for AddSta_Rsp comes */
-
-
- /* send TDLS confim frame to TDLS Peer STA */
- limSendTdlsLinkSetupCnfFrame(pMac, peerMac, tdlsSetupRsp.DialogToken.token, 0, psessionEntry, NULL, 0) ;
-
- /*
- * set the tdls_link_state to TDLS_LINK_SETUP_RSP_WAIT_STATE, and
- * wait for Setup CNF transmission on air, once we receive tx complete
- * message, we will change the peer state and send message to SME
- * callback..
- */
- (setupPeer)->tdls_prev_link_state = (setupPeer)->tdls_link_state ;
- (setupPeer)->tdls_link_state = TDLS_LINK_SETUP_RSP_WAIT_STATE ;
-
- return eSIR_SUCCESS ;
-}
-/*
- * TDLS setup CNF frame processing ..
- */
-
-static tSirRetStatus limProcessTdlsSetupCnfFrame(tpAniSirGlobal pMac,
- tANI_U8 *pBody, tANI_U32 frmLen)
-{
- tDot11fTDLSSetupCnf tdlsSetupCnf = {{0}} ;
- tANI_U32 status = 0 ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
- tpPESession psessionEntry = NULL ;
- tANI_U8 sessionId = 0 ;
-
- status = dot11fUnpackTDLSSetupCnf(pMac, pBody, frmLen, &tdlsSetupCnf) ;
-
- if ( DOT11F_FAILED( status ) )
- {
- limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response "
- "frame (0x%08x, %d bytes):"),status, frmLen);
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- return eSIR_FAILURE;
- }
- else if ( DOT11F_WARNED( status ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS "
- "discovery Response frame (0x%08x, %d bytes):"),
- status, frmLen );
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- }
- /*
- * find session entry using BSSID in link identifier, not using MAC
- * header beacuse, there is cases in TDLS, there may be BSSID will not
- * be present in header
- */
- psessionEntry = peFindSessionByBssid(pMac,
- &tdlsSetupCnf.LinkIdentifier.bssid[0], &sessionId) ;
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("no Session entry for TDLS session (bssid "
- MAC_ADDRESS_STR")"),
- MAC_ADDR_ARRAY(tdlsSetupCnf.LinkIdentifier.bssid));
-
- return eSIR_FAILURE;
- }
-
- /* varify BSSID */
- status = vos_mem_compare( psessionEntry->bssId,
- &tdlsSetupCnf.LinkIdentifier.bssid[0],
- sizeof(tSirMacAddr)) ;
-
- if(!status)
- {
- limLog( pMac, LOGE, FL("TDLS setup CNF frame other BSS -> something wrong. Check RXP filter")) ;
-
- VOS_ASSERT(0) ;
- return eSIR_FAILURE ;
- }
- /* TODO, do more validation */
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("setup Cnf peer MAc = "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(tdlsSetupCnf.LinkIdentifier.InitStaAddr));
-
- limTdlsFindLinkPeer(pMac,
- &tdlsSetupCnf.LinkIdentifier.InitStaAddr[0],
- &setupPeer) ;
-
- if(NULL == setupPeer)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- (" unknown setup CNF frame")) ;
- VOS_ASSERT(0) ;
- return eSIR_FAILURE ;
- }
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("setup CNF peer MAC = "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY((setupPeer)->peerMac));
- /*T match dialog token, before proceeding further */
- if((setupPeer)->dialog != tdlsSetupCnf.DialogToken.token)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("setup CNF frame not matching with setup RSP")) ;
- VOS_ASSERT(0) ;
- return eSIR_FAILURE ;
- }
-
- /*
- * Now we are sure that, this set CNF is for us, now stop
- * the running timer..
- */
- tx_timer_deactivate(&(setupPeer)->gLimTdlsLinkSetupCnfTimeoutTimer) ;
-
- /* change TDLS peer State */
- (setupPeer)->tdls_prev_link_state = (setupPeer)->tdls_link_state ;
- (setupPeer)->tdls_link_state = TDLS_LINK_SETUP_DONE_STATE ;
-
- /* send indication to SME that, new link is setup */
- limSendSmeTdlsLinkSetupInd(pMac, (setupPeer)->peerMac, eSIR_SUCCESS) ;
-
- /* tdls_hklee: prepare PTI template and send it to HAL */
- limTdlsLinkEstablish(pMac, (setupPeer)->peerMac);
-
- return eSIR_SUCCESS ;
-
-}
-
-/*
- * TDLS discovery response frame processing ..
- */
-
-static tSirRetStatus limProcessTdlsDisRspFrame(tpAniSirGlobal pMac,
- tANI_U8 *pBody, tANI_U32 frmLen,
- tANI_S8 rssi, tpPESession psessionEntry)
-{
- tDot11fTDLSDisRsp tdlsDisRsp = {{0}} ;
- tANI_U32 status = 0 ;
- tLimDisResultList *tdlsDisResult = NULL ;
- tLimDisResultList **disResultList = &pMac->lim.gLimTdlsDisResultList ;
- tSirTdlsDisReq *prevDisReq = &pMac->lim.gLimTdlsDisReq ;
-
- status = dot11fUnpackTDLSDisRsp(pMac, pBody, frmLen, &tdlsDisRsp) ;
-
- if ( DOT11F_FAILED( status ) )
- {
- limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response "
- "frame (0x%08x, %d bytes):"),status, frmLen);
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- return eSIR_FAILURE;
- }
- else if ( DOT11F_WARNED( status ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS "
- "discovery Response frame (0x%08x, %d bytes):"),
- status, frmLen );
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pFrame, nFrame);)
- }
- /*TODO: match dialog token, before proceeding further */
-
- /* varify BSSID */
- status = vos_mem_compare( psessionEntry->bssId,
- &tdlsDisRsp.LinkIdentifier.bssid[0],
- sizeof(tSirMacAddr)) ;
-
- if(!status)
- {
- limLog( pMac, LOGW, FL(" TDLS discovery Response frame other BSS")) ;
- return eSIR_FAILURE ;
- }
- /* TODO, do more validation */
-
- if(tdlsDisRsp.DialogToken.token != prevDisReq->dialog)
- {
- limLog( pMac, LOGW, FL(" wrong TDLS discovery Response frame")) ;
- return eSIR_FAILURE ;
- }
-
- pMac->lim.gLimTdlsDisStaCount++ ;
-
- /*
- * we are allocating peer info for individual peers found in TDLS
- * discovery, we need to keep adding TDLS peers till we have timed
- * out. We are freeing this memory at the time we are sending this
- * collected peer info to SME.
- */
- tdlsDisResult = vos_mem_malloc(sizeof(tLimDisResultList));
- if ( NULL == tdlsDisResult )
- {
- limLog(pMac, LOGP, FL("alloc fail for TDLS discovery reponse info")) ;
- return eSIR_FAILURE ;
- }
-
- do
- {
- tSirTdlsPeerInfo *peerInfo = &tdlsDisResult->tdlsDisPeerInfo ;
-
- /* Populate peer info of tdls discovery result */
- peerInfo->sessionId = psessionEntry->peSessionId;
- /*
- * When we receive DIS RSP from peer MAC,
- * STA_MAC_OFFSET will carry peer MAC address and PEER MAC OFFSET
- * will carry our MAC.
- */
- vos_mem_copy( peerInfo->peerMac,
- &tdlsDisRsp.LinkIdentifier.RespStaAddr[0],
- sizeof(tSirMacAddr)) ;
-
- /* update RSSI for this TDLS peer STA */
- peerInfo->tdlsPeerRssi = rssi ;
-
- /* update Caps Info */
- tdlsUpdateCapInfo(&peerInfo->capabilityInfo,
- &tdlsDisRsp.Capabilities) ;
-
- /* update Supp rates */
- if(tdlsDisRsp.SuppRates.present)
- {
- ConvertSuppRates( pMac, &peerInfo->tdlsPeerSuppRates,
- &tdlsDisRsp.SuppRates );
- }
-
- /* update EXT supp rates */
- if(tdlsDisRsp.ExtSuppRates.present)
- {
- peerInfo->ExtRatesPresent = 1;
- ConvertExtSuppRates( pMac, &peerInfo->tdlsPeerExtRates,
- &tdlsDisRsp.ExtSuppRates );
- }
- /* update HT caps */
- if (tdlsDisRsp.HTCaps.present)
- {
- vos_mem_copy( &peerInfo->tdlsPeerHtCaps, &tdlsDisRsp.HTCaps,
- sizeof( tDot11fIEHTCaps ) );
- }
- } while(0) ;
-
- /* now add this new found discovery node into tdls discovery list */
- tdlsDisResult->next = *disResultList ;
- *disResultList = tdlsDisResult ;
-
- return eSIR_SUCCESS ;
-}
-
-/*
- * Process TDLS Teardown request frame from TDLS peer STA
- */
-static tSirRetStatus limProcessTdlsTeardownFrame(tpAniSirGlobal pMac,
- tANI_U8 *pBody, tANI_U32 frmLen )
-{
- tDot11fTDLSTeardown tdlsTeardown = {{0}} ;
- tANI_U32 status = 0 ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
- tpPESession psessionEntry = NULL ;
- tANI_U8 sessionId = 0 ;
-
- status = dot11fUnpackTDLSTeardown(pMac, pBody, frmLen, &tdlsTeardown) ;
-
- if ( DOT11F_FAILED( status ) )
- {
- limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response "
- "frame (0x%08x, %d bytes):"),status, frmLen);
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- return eSIR_FAILURE;
- }
- else if ( DOT11F_WARNED( status ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS "
- "discovery Response frame (0x%08x, %d bytes):"),
- status, frmLen );
- PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);)
- }
-
- /*
- * find session entry using BSSID in link identifier, not using MAC
- * header beacuse, there is cases in TDLS, there may be BSSID will not
- * be present in header
- */
- psessionEntry = peFindSessionByBssid(pMac,
- &tdlsTeardown.LinkIdentifier.bssid[0], &sessionId) ;
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("no Session entry for TDLS session (bssid "
- MAC_ADDRESS_STR")"),
- MAC_ADDR_ARRAY(tdlsTeardown.LinkIdentifier.bssid));
-
- return eSIR_FAILURE;
- }
-
- /* varify BSSID */
- status = vos_mem_compare( psessionEntry->bssId,
- &tdlsTeardown.LinkIdentifier.bssid[0],
- sizeof(tSirMacAddr)) ;
-
-
- if(!status)
- {
- limLog( pMac, LOGE, FL("Teardown from other BSS -> something wrong. Check RXP filter")) ;
- VOS_ASSERT(0) ;
- return eSIR_FAILURE ;
- }
-
- limTdlsFindLinkPeer(pMac,
- &tdlsTeardown.LinkIdentifier.InitStaAddr[0],
- &setupPeer) ;
-
- if(NULL == setupPeer)
- {
- limLog( pMac, LOGE, FL("Teardown from unknown peer. --> ignored") );
-
- return eSIR_FAILURE ;
- }
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("teardown for peer "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY((setupPeer)->peerMac));
-
- switch(tdlsTeardown.Reason.code)
- {
- case eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON:
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("teardown with unspecified reason")) ;
- break ;
- }
- case eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE:
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- (" Teardown from AP, TDLS peer unreachable")) ;
- break ;
- }
- default:
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- (" unknown teardown")) ;
- break ;
- }
- }
-
- /* change TDLS peer State */
- (setupPeer)->tdls_prev_link_state = (setupPeer)->tdls_link_state ;
- (setupPeer)->tdls_link_state = TDLS_LINK_TEARDOWN_START_STATE ;
-
- do
- {
- tpDphHashNode pStaDs = NULL ;
-
- /* tdls_hklee: send message to HAL before it is deleted, cause */
- limTdlsLinkTeardown(pMac, (setupPeer)->peerMac) ;
-
- /* send del STA to remove context for this TDLS STA */
- pStaDs = limTdlsDelSta(pMac, (setupPeer)->peerMac, psessionEntry) ;
-
- /* now send indication to SME-->HDD->TL to remove STA from TL */
-
- if(pStaDs)
- {
- limSendSmeTdlsDelPeerInd(pMac, psessionEntry->smeSessionId,
- pStaDs, eSIR_SUCCESS) ;
-
- /* send Teardown Ind to SME */
- limSendSmeTdlsTeardownRsp(pMac, eSIR_SUCCESS, (setupPeer)->peerMac,
- eWNI_SME_TDLS_TEARDOWN_IND) ;
- /* remove node from setup list */
- limTdlsDelLinkPeer(pMac, (setupPeer)->peerMac) ;
- }
-
- }while(0) ;
-
- return status ;
-}
-
-/*
- * Common processing of TDLS action frames recieved
- */
-void limProcessTdlsFrame(tpAniSirGlobal pMac, tANI_U32 *pBd)
-{
- tANI_U8 *pBody = WDA_GET_RX_MPDU_DATA(pBd);
- tANI_U8 pOffset = ((0 == WDA_GET_RX_FT_DONE(pBd))
- ? (( sizeof( eth_890d_header ))) :(0)) ;
-
- tANI_U8 category = (pBody + pOffset + PAYLOAD_TYPE_TDLS_SIZE)[0] ;
- tANI_U8 action = (pBody + pOffset + PAYLOAD_TYPE_TDLS_SIZE)[1] ;
- tANI_U32 frameLen = WDA_GET_RX_PAYLOAD_LEN(pBd) ;
- tANI_U8 *tdlsFrameBody = (pBody + pOffset + PAYLOAD_TYPE_TDLS_SIZE) ;
-
- if(category != SIR_MAC_ACTION_TDLS)
- {
- limLog( pMac, LOGE, FL("Invalid TDLS action frame=(%d). Ignored"), category );
- return ;
- }
-
- frameLen -= (pOffset + PAYLOAD_TYPE_TDLS_SIZE) ;
- LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("Received TDLS action %d (%s)"),
- action, limTraceTdlsActionString(action) ));
-
- switch(action)
- {
-
- case SIR_MAC_TDLS_SETUP_REQ:
- {
- limProcessTdlsSetupReqFrame(pMac, tdlsFrameBody, frameLen) ;
- break ;
- }
- case SIR_MAC_TDLS_SETUP_RSP:
- {
- limProcessTdlsSetupRspFrame(pMac, tdlsFrameBody, frameLen) ;
- break ;
- }
- case SIR_MAC_TDLS_SETUP_CNF:
- {
- limProcessTdlsSetupCnfFrame(pMac, tdlsFrameBody, frameLen) ;
- break ;
- }
- case SIR_MAC_TDLS_TEARDOWN:
- {
- limProcessTdlsTeardownFrame(pMac, tdlsFrameBody, frameLen) ;
- break ;
- }
- case SIR_MAC_TDLS_DIS_REQ:
- {
- limProcessTdlsDisReqFrame(pMac, tdlsFrameBody, frameLen) ;
- break ;
- }
- case SIR_MAC_TDLS_PEER_TRAFFIC_IND:
- case SIR_MAC_TDLS_CH_SWITCH_REQ:
- case SIR_MAC_TDLS_CH_SWITCH_RSP:
- case SIR_MAC_TDLS_PEER_TRAFFIC_RSP:
- default:
- {
- break ;
- }
- }
-
- return ;
-}
-
-/*
- * ADD sta for dis response fame sent on direct link
- */
-static tSirRetStatus limTdlsDisAddSta(tpAniSirGlobal pMac, tSirMacAddr peerMac,
- tSirTdlsPeerInfo *peerInfo, tpPESession psessionEntry)
-{
- tpDphHashNode pStaDs = NULL ;
- tSirRetStatus status = eSIR_SUCCESS ;
- tANI_U16 aid = 0 ;
-
- if(NULL == peerInfo)
- {
- VOS_ASSERT(0) ;
- return status ;
-
- }
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("ADD STA peer MAC: "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(peerMac));
-
-
- if(NULL != dphLookupHashEntry(pMac, peerMac,
- &aid, &psessionEntry->dph.dphHashTable))
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- (" there is hash entry for this client")) ;
- status = eSIR_FAILURE ;
- VOS_ASSERT(0) ;
- return status ;
- }
-
- aid = limAssignPeerIdx(pMac, psessionEntry) ;
-
- /* Set the aid in peerAIDBitmap as it has been assigned to TDLS peer */
- SET_PEER_AID_BITMAP(psessionEntry->peerAIDBitmap, aid);
-
- pStaDs = dphGetHashEntry(pMac, aid, &psessionEntry->dph.dphHashTable);
-
- if (pStaDs)
- {
- (void) limDelSta(pMac, pStaDs, false /*asynchronous*/, psessionEntry);
- limDeleteDphHashEntry(pMac, pStaDs->staAddr, aid, psessionEntry);
- }
- pStaDs = dphAddHashEntry(pMac, peerMac, aid,
- &psessionEntry->dph.dphHashTable) ;
-
- if(NULL == pStaDs)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- (" add hash entry failed")) ;
- status = eSIR_FAILURE ;
- VOS_ASSERT(0) ;
- return status;
- }
- if(eSIR_SUCCESS == status)
- {
-#ifdef TDLS_RATE_DEBUG
- tSirMacRateSet *suppRates = &peerInfo->tdlsPeerSuppRates ;
- tSirMacRateSet *extRates = &peerInfo->tdlsPeerExtRates ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("pSta DS [%p] "), pStaDs) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("peerInfo->tdlsPeerSuppRates = [%p]"),
- (tANI_U8 *)&peerInfo->tdlsPeerSuppRates) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("peerInfo->tdlsPeerExtRates = [%p]"),
- (tANI_U8 *)&peerInfo->tdlsPeerExtRates) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("peerInfo->tdlsPeerPropRates = [%p]"),
- (tANI_U8 *)&pStaDs->mlmStaContext.propRateSet) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("peerInfo->mcs = [%p]"),
- (tANI_U8 *)peerInfo->supportedMCSSet) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("num of supp rates = %02x"), suppRates->numRates) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("num of ext rates = %01x"), extRates->numRates) ;
-#endif
-
- /* Populate matching rate set */
-#ifdef WLAN_FEATURE_11AC
- if(eSIR_FAILURE == limPopulateMatchingRateSet(pMac, pStaDs,
- &peerInfo->tdlsPeerSuppRates,
- &peerInfo->tdlsPeerExtRates,
- peerInfo->supportedMCSSet,
- &pStaDs->mlmStaContext.propRateSet,
- psessionEntry, NULL))
-#else
- if(eSIR_FAILURE == limPopulateMatchingRateSet(pMac, pStaDs,
- &peerInfo->tdlsPeerSuppRates,
- &peerInfo->tdlsPeerExtRates,
- peerInfo->supportedMCSSet,
- &pStaDs->mlmStaContext.propRateSet,
- psessionEntry))
-#endif
- {
- VOS_ASSERT(0) ;
- }
-
-
- pStaDs->mlmStaContext.capabilityInfo = peerInfo->capabilityInfo;
- vos_mem_copy( pStaDs->staAddr, peerMac, sizeof(tSirMacAddr)) ;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Add STA for Peer: "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(pStaDs->staAddr));
-
-
- pStaDs->staType = STA_ENTRY_TDLS_PEER ;
-
- status = limAddSta(pMac, pStaDs, false, psessionEntry);
-
- if(eSIR_SUCCESS != status)
- {
- /* should not fail */
- VOS_ASSERT(0) ;
- }
- }
-
- return status ;
-}
-#endif
/*
* Add STA for TDLS setup procedure
*/
@@ -4162,554 +2359,11 @@ static tpDphHashNode limTdlsDelSta(tpAniSirGlobal pMac, tSirMacAddr peerMac,
pStaDs->staIndex) ;
status = limDelSta(pMac, pStaDs, false, psessionEntry) ;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- if(eSIR_SUCCESS == status)
- {
- limDeleteDphHashEntry(pMac, pStaDs->staAddr, peerIdx, psessionEntry) ;
- limReleasePeerIdx(pMac, peerIdx, psessionEntry) ;
- }
- else
- {
- VOS_ASSERT(0) ;
- }
-#endif
}
return pStaDs ;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
-* Prepare link establish message for HAL, construct PTI template.
-*
-*/
-static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peerMac)
-{
- tANI_U8 pFrame[64] ;
- tDot11fTDLSPeerTrafficInd tdlsPtiTemplate ;
- tANI_U32 status = 0 ;
- tANI_U32 nPayload = 0 ;
- tANI_U32 nBytes = 0 ;
- tANI_U32 header_offset = 0 ;
- tANI_U16 aid = 0 ;
- tDphHashNode *pStaDs = NULL ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
- tpPESession psessionEntry = NULL ;
-
-
- limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ;
- if(NULL == setupPeer) {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsLinkEstablish: cannot find peer mac "
- "in tdls linksetup list: "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(peerMac));
- return eSIR_FAILURE;
- }
-
- psessionEntry = peFindSessionBySessionId(pMac,
- setupPeer->tdls_sessionId) ;
-
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsLinkEstablish: sessionID %d is not found"), setupPeer->tdls_sessionId);
- VOS_ASSERT(0) ;
- return eHAL_STATUS_FAILURE;
- }
-
- pStaDs = dphLookupHashEntry(pMac, peerMac, &aid, &psessionEntry->dph.dphHashTable) ;
- if(pStaDs == NULL) {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsLinkEstablish: cannot find peer mac "
- "in hash table: "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(peerMac));
- return eSIR_FAILURE;
- }
-
- vos_mem_set( ( tANI_U8* )&tdlsPtiTemplate,
- sizeof( tDot11fTDLSPeerTrafficInd ), 0 );
-
- /*
- * setup Fixed fields,
- */
- tdlsPtiTemplate.Category.category = SIR_MAC_ACTION_TDLS;
- tdlsPtiTemplate.Action.action = SIR_MAC_TDLS_PEER_TRAFFIC_IND;
- tdlsPtiTemplate.DialogToken.token = 0 ; /* filled by firmware at the time of transmission */
- /* CHECK_PTI_LINK_IDENTIFIER_INITIATOR_ADDRESS: initator address should be TDLS link setup's initiator address,
- then below code makes such an way */
- PopulateDot11fLinkIden( pMac, psessionEntry, &tdlsPtiTemplate.LinkIdentifier,
- peerMac, !setupPeer->tdls_bIsResponder) ;
-
- /* PUBufferStatus will be filled by firmware at the time of transmission */
- tdlsPtiTemplate.PUBufferStatus.present = 1;
-
- /* TODO: get ExtendedCapabilities IE */
-
- /*
- * now we pack it. First, how much space are we going to need?
- */
- status = dot11fGetPackedTDLSPeerTrafficIndSize ( pMac, &tdlsPtiTemplate, &nPayload);
- if ( DOT11F_FAILED( status ) )
- {
- limLog( pMac, LOGP, FL("Failed to calculate the packed size for a PTI template (0x%08x)."), status );
- /* We'll fall back on the worst case scenario: */
- nPayload = sizeof( tdlsPtiTemplate );
- }
- else if ( DOT11F_WARNED( status ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while calculating the packed size for a PTI template (0x%08x)."), status );
- }
-
- /*
- * This frame is going out from PE as data frames with special ethertype
- * 89-0d.
- * 8 bytes of RFC 1042 header
- */
-
- nBytes = nPayload + sizeof( tSirMacMgmtHdr )
- + sizeof( eth_890d_header )
- + PAYLOAD_TYPE_TDLS_SIZE ;
-
- if(nBytes > 64) {
- limLog( pMac, LOGE, FL("required memory for PTI frame is %ld, but reserved only 64."), nBytes);
- nBytes = 64;
- }
- /* zero out the memory */
- vos_mem_set( pFrame, sizeof(pFrame), 0 );
-
- /* fill out the buffer descriptor */
-
- header_offset = limPrepareTdlsFrameHeader(pMac, pFrame,
- LINK_IDEN_ADDR_OFFSET(tdlsPtiTemplate), TDLS_LINK_AP, !setupPeer->tdls_bIsResponder, psessionEntry) ;
-
- status = dot11fPackTDLSPeerTrafficInd ( pMac, &tdlsPtiTemplate, pFrame
- + header_offset, nPayload, &nPayload );
-
- if ( DOT11F_FAILED( status ) )
- {
- limLog( pMac, LOGE, FL("Failed to pack a PTI template (0x%08x)."),
- status );
- return eSIR_FAILURE;
- }
- else if ( DOT11F_WARNED( status ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while packing TDLS "
- "Peer Traffic Indication (0x%08x)."), status );
- }
-
- LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("bIsResponder=%d, header_offset=%ld, linkIdenOffset=%d, ptiBufStatusOffset=%d "),
- setupPeer->tdls_bIsResponder, header_offset, PTI_LINK_IDEN_OFFSET, PTI_BUF_STATUS_OFFSET));
-
- limSendTdlsLinkEstablish(pMac, setupPeer->tdls_bIsResponder,
- header_offset+PTI_LINK_IDEN_OFFSET, header_offset+PTI_BUF_STATUS_OFFSET,
- nBytes, pFrame, (tANI_U8 *)&setupPeer->tdlsPeerExtCaps);
-
- return eSIR_SUCCESS;
-}
-
-/*
-* Prepare link teardown message for HAL from peer_mac
-*
-*/
-static tSirRetStatus limTdlsLinkTeardown(tpAniSirGlobal pMac, tSirMacAddr peerMac)
-{
- tDphHashNode *pStaDs = NULL ;
- tANI_U16 aid = 0 ;
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
- tpPESession psessionEntry = NULL ;
-
-
- limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ;
- if(NULL == setupPeer) {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsLinkTeardown: cannot find peer mac "
- "in tdls linksetup list: "
- MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac));
- return eSIR_FAILURE;
- }
-
- psessionEntry = peFindSessionBySessionId(pMac,
- setupPeer->tdls_sessionId) ;
-
- if(NULL == psessionEntry)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsLinkTeardown: sessionID %d is not found"), setupPeer->tdls_sessionId);
- VOS_ASSERT(0) ;
- return eHAL_STATUS_FAILURE;
- }
-
-
-
- pStaDs = dphLookupHashEntry(pMac, peerMac, &aid, &psessionEntry->dph.dphHashTable);
-
- if(pStaDs == NULL) {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("limTdlsLinkTeardown: cannot find peer mac "
- "in hash table: "
- MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac));
- return eSIR_FAILURE;
- }
-
- limSendTdlsLinkTeardown(pMac, pStaDs->staIndex);
-
- return eSIR_SUCCESS;
-}
-
-/*
- * Prepare Discovery RSP message for SME, collect peerINfo for all the
- * peers discovered and delete/clean discovery lists in PE.
- */
-
-static tSirTdlsDisRsp *tdlsPrepareTdlsDisRsp(tpAniSirGlobal pMac,
- tSirTdlsDisRsp *disRsp, tANI_U8 disStaCount)
-{
- tANI_U32 disMsgRspSize = sizeof(tSirTdlsDisRsp);
- tANI_U8 status = eHAL_STATUS_SUCCESS ;
-
- /*
- * allocate memory for tdls discovery response, allocated memory should
- * be alloc_mem = tdlsStaCount * sizeof(peerinfo)
- * + siezeof tSirTdlsDisRsp.
- */
- disMsgRspSize += (disStaCount * sizeof(tSirTdlsPeerInfo));
-
- /* now allocate memory */
-
- disRsp = vos_mem_malloc(disMsgRspSize);
- if ( NULL == disRsp )
- {
- limLog(pMac, LOGP, FL("AllocateMemory failed for DIS RSP"));
- return NULL ;
- }
-
- if(disStaCount)
- {
- tLimDisResultList *tdlsDisRspList = pMac->lim.gLimTdlsDisResultList ;
- tSirTdlsPeerInfo *peerInfo = &disRsp->tdlsDisPeerInfo[0] ;
-
- tLimDisResultList *currentNode = tdlsDisRspList ;
- while(tdlsDisRspList != NULL)
- {
-
- vos_mem_copy( (tANI_U8 *)peerInfo,
- (tANI_U8 *) &tdlsDisRspList->tdlsDisPeerInfo,
- sizeof(tSirTdlsPeerInfo));
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
- ("Msg Sent to PE, peer MAC: "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(peerInfo->peerMac));
- disStaCount-- ;
- peerInfo++ ;
- currentNode = tdlsDisRspList ;
- tdlsDisRspList = tdlsDisRspList->next ;
- vos_mem_free(currentNode) ;
- /* boundary condition check, may be fatal */
- if(((!disStaCount) && (tdlsDisRspList))
- || ((!tdlsDisRspList) && disStaCount))
- {
- limLog(pMac, LOG1, FL("mismatch in dis sta count and "
- "number of nodes in list")) ;
- VOS_ASSERT(0) ;
- return NULL ;
- }
- } /* end of while */
-
- /* All discovery STA processed */
- pMac->lim.gLimTdlsDisResultList = NULL ;
-
- } /* end of if dis STA count */
-
- return (disRsp) ;
-}
-
-/* Send Teardown response back to PE */
-
-void limSendSmeTdlsTeardownRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode,
- tSirMacAddr peerMac, tANI_U16 msgType)
-{
- tSirMsgQ mmhMsg = {0} ;
- tSirTdlsTeardownRsp *teardownRspMsg = NULL ;
- tANI_U8 status = eHAL_STATUS_SUCCESS ;
-
- mmhMsg.type = msgType ;
-
- teardownRspMsg = vos_mem_malloc(sizeof(tSirTdlsTeardownRsp));
- if ( NULL == teardownRspMsg )
- {
- VOS_ASSERT(0) ;
- }
- vos_mem_copy( teardownRspMsg->peerMac, (tANI_U8 *)peerMac,
- sizeof(tSirMacAddr)) ;
- teardownRspMsg->statusCode = statusCode ;
- mmhMsg.bodyptr = teardownRspMsg ;
- mmhMsg.bodyval = 0;
- limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
-
- return ;
-
-}
-
-/*
- * Send Link start RSP back to SME after link is setup or failed
- */
-void limSendSmeTdlsLinkStartRsp(tpAniSirGlobal pMac,
- tSirResultCodes statusCode,
- tSirMacAddr peerMac,
- tANI_U16 msgType)
-{
- tSirMsgQ mmhMsg = {0} ;
- tSirTdlsLinksetupRsp *setupRspMsg = NULL ;
- tANI_U8 status = eHAL_STATUS_SUCCESS ;
-
- mmhMsg.type = msgType ;
-
- setupRspMsg = vos_mem_malloc(sizeof(tSirTdlsLinksetupRsp));
- if ( NULL == setupRspMsg )
- {
- VOS_ASSERT(0) ;
- }
-
- vos_mem_copy( setupRspMsg->peerMac, (tANI_U8 *)peerMac,
- sizeof(tSirMacAddr)) ;
- setupRspMsg->statusCode = statusCode ;
- mmhMsg.bodyptr = setupRspMsg ;
- mmhMsg.bodyval = 0;
- limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
-
- return ;
-}
-
-/*
- * Send TDLS discovery RSP back to SME
- */
-void limSendSmeTdlsDisRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode,
- tANI_U16 msgType)
-{
- tSirMsgQ mmhMsg = {0} ;
- tSirTdlsDisRsp *tdlsDisRsp = NULL ;
-
- mmhMsg.type = msgType ;
-
- if(eSIR_SME_SUCCESS == statusCode)
- {
- tANI_U8 tdlsStaCount = pMac->lim.gLimTdlsDisStaCount ;
-
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("no of TDLS STA discovered: %d"), tdlsStaCount) ;
- tdlsDisRsp = tdlsPrepareTdlsDisRsp(pMac, tdlsDisRsp, tdlsStaCount) ;
-
- if(tdlsDisRsp)
- {
- tdlsDisRsp->numDisSta = tdlsStaCount ;
- }
- else
- {
- limLog(pMac, LOGP, FL("fatal failure for TDLS DIS RSP"));
- VOS_ASSERT(0) ;
- return ;
- }
- /* all Discovery STA is processed */
- pMac->lim.gLimTdlsDisStaCount = 0 ;
- }
- else
- {
- tdlsDisRsp = tdlsPrepareTdlsDisRsp(pMac, tdlsDisRsp, 0) ;
- }
-
- tdlsDisRsp->statusCode = statusCode ;
- mmhMsg.bodyptr = tdlsDisRsp ;
- mmhMsg.bodyval = 0;
- limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
-
- return ;
-}
-
-/*
- * Once Link is setup with PEER, send Add STA ind to SME
- */
-static eHalStatus limSendSmeTdlsAddPeerInd(tpAniSirGlobal pMac,
- tANI_U8 sessionId, tDphHashNode *pStaDs, tANI_U8 status)
-{
- tSirMsgQ mmhMsg = {0} ;
- tSirTdlsPeerInd *peerInd = NULL ;
- mmhMsg.type = eWNI_SME_ADD_TDLS_PEER_IND ;
-
- peerInd = vos_mem_malloc(sizeof(tSirTdlsPeerInd));
- if ( NULL == peerInd )
- {
- PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));)
- return eSIR_FAILURE;
- }
-
- vos_mem_copy( peerInd->peerMac,
- (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr));
- peerInd->sessionId = sessionId;
- peerInd->staId = pStaDs->staIndex ;
- peerInd->ucastSig = pStaDs->ucUcastSig ;
- peerInd->bcastSig = pStaDs->ucBcastSig ;
- peerInd->length = sizeof(tSmeIbssPeerInd) ;
-
- mmhMsg.bodyptr = peerInd ;
- mmhMsg.bodyval = 0;
- limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
-
- return eSIR_SUCCESS ;
-
-}
-
-/*
- * Once link is teardown, send Del Peer Ind to SME
- */
-static eHalStatus limSendSmeTdlsDelPeerInd(tpAniSirGlobal pMac,
- tANI_U8 sessionId, tDphHashNode *pStaDs, tANI_U8 status)
-{
- tSirMsgQ mmhMsg = {0} ;
- tSirTdlsPeerInd *peerInd = NULL ;
- mmhMsg.type = eWNI_SME_DELETE_TDLS_PEER_IND ;
-
- peerInd = vos_mem_malloc(sizeof(tSirTdlsPeerInd));
- if ( NULL == peerInd )
- {
- PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));)
- return eSIR_FAILURE;
- }
-
- vos_mem_copy( peerInd->peerMac,
- (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr));
- peerInd->sessionId = sessionId;
- peerInd->staId = pStaDs->staIndex ;
- peerInd->ucastSig = pStaDs->ucUcastSig ;
- peerInd->bcastSig = pStaDs->ucBcastSig ;
- peerInd->length = sizeof(tSmeIbssPeerInd) ;
-
- mmhMsg.bodyptr = peerInd ;
-
- mmhMsg.bodyval = 0;
- limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
- return eSIR_SUCCESS ;
-
-}
-
-/*
- * Send Link setup Ind to SME, This is the case where, link setup is
- * initiated by peer STA
- */
-static eHalStatus limSendSmeTdlsLinkSetupInd(tpAniSirGlobal pMac,
- tSirMacAddr peerMac, tANI_U8 status)
-{
- tSirMsgQ mmhMsg = {0} ;
- tSirTdlsLinkSetupInd *setupInd = NULL ;
-
- mmhMsg.type = eWNI_SME_TDLS_LINK_START_IND ;
- setupInd = vos_mem_malloc(sizeof(tSirTdlsLinkSetupInd));
- if ( NULL == setupInd )
- {
- PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));)
- return eSIR_FAILURE;
- }
-
- vos_mem_copy( setupInd->peerMac,
- (tANI_U8 *) peerMac, sizeof(tSirMacAddr));
- setupInd->length = sizeof(tSirTdlsLinkSetupInd);
- setupInd->statusCode = status ;
- mmhMsg.bodyptr = setupInd ;
- mmhMsg.bodyval = 0;
- limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
-
- return eSIR_SUCCESS ;
-
-}
-
-/*
- * Setup RSP timer handler
- */
-void limTdlsLinkSetupRspTimerHandler(void *pMacGlobal, tANI_U32 timerId)
-{
-
- tANI_U32 statusCode;
- tSirMsgQ msg;
- tpAniSirGlobal pMac = (tpAniSirGlobal)pMacGlobal;
-
- /* Prepare and post message to LIM Message Queue */
-
- msg.type = SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT;
- msg.bodyptr = NULL ;
- msg.bodyval = timerId ;
-
- if ((statusCode = limPostMsgApi(pMac, &msg)) != eSIR_SUCCESS)
- limLog(pMac, LOGE,
- FL("posting message %X to LIM failed, reason=%d"),
- msg.type, statusCode);
- return ;
-}
-
-/*
- * Link setup CNF timer
- */
-void limTdlsLinkSetupCnfTimerHandler(void *pMacGlobal, tANI_U32 timerId)
-{
-
- tANI_U32 statusCode;
- tSirMsgQ msg;
- tpAniSirGlobal pMac = (tpAniSirGlobal)pMacGlobal;
-
- // Prepare and post message to LIM Message Queue
-
- msg.type = SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT;
- msg.bodyptr = NULL ;
- msg.bodyval = timerId ;
-
- if ((statusCode = limPostMsgApi(pMac, &msg)) != eSIR_SUCCESS)
- limLog(pMac, LOGE,
- FL("posting message %X to LIM failed, reason=%d"),
- msg.type, statusCode);
- return ;
-}
-
-/*
- * start TDLS timer
- */
-void limStartTdlsTimer(tpAniSirGlobal pMac, tANI_U8 sessionId, TX_TIMER *timer,
- tANI_U32 timerId, tANI_U16 timerType, tANI_U32 timerMsg)
-{
- tANI_U32 cfgValue = (timerMsg == SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT)
- ? WNI_CFG_TDLS_LINK_SETUP_RSP_TIMEOUT
- : WNI_CFG_TDLS_LINK_SETUP_CNF_TIMEOUT ;
-
- void *timerFunc = (timerMsg == SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT)
- ? (limTdlsLinkSetupRspTimerHandler)
- : limTdlsLinkSetupCnfTimerHandler ;
-
- /* TODO: Read timer vals from CFG */
-
- cfgValue = SYS_MS_TO_TICKS(cfgValue);
- /*
- * create TDLS discovery response wait timer and activate it
- */
- if (tx_timer_create(timer, "TDLS link setup timers", timerFunc,
- timerId, cfgValue, 0, TX_NO_ACTIVATE) != TX_SUCCESS)
- {
- limLog(pMac, LOGP,
- FL("could not create TDLS discovery response wait timer"));
- return;
- }
-
- //assign appropriate sessionId to the timer object
- timer->sessionId = sessionId;
-
- MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, 0,
- eLIM_TDLS_DISCOVERY_RSP_WAIT));
- if (tx_timer_activate(timer) != TX_SUCCESS)
- {
- limLog(pMac, LOGP, FL("TDLS link setup timer activation failed!"));
- return ;
- }
-
- return ;
-
-}
-#endif
/*
* Once Link is setup with PEER, send Add STA ind to SME
@@ -4798,41 +2452,6 @@ eHalStatus limProcessTdlsAddStaRsp(tpAniSirGlobal pMac, void *msg,
pStaDs->ucBcastSig = pAddStaParams->ucBcastSig;
pStaDs->mlmStaContext.mlmState = eLIM_MLM_LINK_ESTABLISHED_STATE;
pStaDs->valid = 1 ;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- status = limSendSmeTdlsAddPeerInd(pMac, psessionEntry->smeSessionId,
- pStaDs, eSIR_SUCCESS ) ;
- if(eSIR_FAILURE == status)
- {
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("Peer IND msg to SME failed")) ;
- vos_mem_free( pAddStaParams );
- return eSIR_FAILURE ;
- }
-
- /*
- * Now, there is two things a) ADD STA RSP for ADD STA request sent
- * after recieving discovery request from Peer.
- * now we have to send discovery response, if there is any pending
- * discovery equest..
- */
- do
- {
- tSirTdlsPeerInfo *peerInfo = limTdlsFindDisPeer(pMac,
- pAddStaParams->staMac) ;
-
-
- if(peerInfo)
- {
- /*
- * send TDLS discovery response frame on direct link, state machine
- * is rolling.., once discovery response is get Acked, we will
- * send response to SME based on TxComplete callback results
- */
- limSendTdlsDisRspFrame(pMac, peerInfo->peerMac, peerInfo->dialog, psessionEntry) ;
- peerInfo->tdlsPeerState = TDLS_DIS_RSP_SENT_WAIT_STATE ;
- }
- } while(0) ;
-#endif
add_sta_error:
status = limSendSmeTdlsAddStaRsp(pMac, psessionEntry->smeSessionId,
pAddStaParams->staMac, pAddStaParams->updateSta, pStaDs, status) ;
@@ -4951,78 +2570,6 @@ void PopulateDot11fTdlsExtCapability(tpAniSirGlobal pMac,
return ;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * Public Action frame common processing
- * This Function will be moved/merged to appropriate place
- * once other public action frames (particularly 802.11k)
- * is in place
- */
-void limProcessTdlsPublicActionFrame(tpAniSirGlobal pMac, tANI_U32 *pBd,
- tpPESession psessionEntry)
-{
- tANI_U32 frameLen = WDA_GET_RX_PAYLOAD_LEN(pBd) ;
- tANI_U8 *pBody = WDA_GET_RX_MPDU_DATA(pBd) ;
- tANI_S8 rssi = (tANI_S8)WDA_GET_RX_RSSI_DB(pBd) ;
-
- limProcessTdlsDisRspFrame(pMac, pBody, frameLen, rssi, psessionEntry) ;
- return ;
-}
-
-eHalStatus limTdlsPrepareSetupReqFrame(tpAniSirGlobal pMac,
- tLimTdlsLinkSetupInfo *linkSetupInfo,
- tANI_U8 dialog, tSirMacAddr peerMac,
- tpPESession psessionEntry)
-{
- tLimTdlsLinkSetupPeer *setupPeer = NULL ;
-
- /*
- * we allocate the TDLS setup Peer Memory here, we will free'd this
- * memory after teardown, if the link is successfully setup or
- * free this memory if any timeout is happen in link setup procedure
- */
-
- setupPeer = vos_mem_malloc(sizeof( tLimTdlsLinkSetupPeer ));
- if ( NULL == setupPeer )
- {
- limLog( pMac, LOGP,
- FL( "Unable to allocate memory during ADD_STA" ));
- VOS_ASSERT(0) ;
- return eSIR_MEM_ALLOC_FAILED;
- }
- setupPeer->dialog = dialog ;
- setupPeer->tdls_prev_link_state = setupPeer->tdls_link_state ;
- setupPeer->tdls_link_state = TDLS_LINK_SETUP_START_STATE ;
-
- /* TDLS_sessionize: remember sessionId for future */
- setupPeer->tdls_sessionId = psessionEntry->peSessionId;
- setupPeer->tdls_bIsResponder = 1;
-
- /*
- * we only populate peer MAC, so it can assit us to find the
- * TDLS peer after response/or after response timeout
- */
- vos_mem_copy(setupPeer->peerMac, peerMac,
- sizeof(tSirMacAddr)) ;
- /* format TDLS discovery request frame and transmit it */
- limSendTdlsLinkSetupReqFrame(pMac, peerMac, dialog, psessionEntry, NULL, 0) ;
-
- limStartTdlsTimer(pMac, psessionEntry->peSessionId,
- &setupPeer->gLimTdlsLinkSetupRspTimeoutTimer,
- (tANI_U32)setupPeer->peerMac,
- WNI_CFG_TDLS_LINK_SETUP_RSP_TIMEOUT,
- SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT) ;
- /* update setup peer list */
- setupPeer->next = linkSetupInfo->tdlsLinkSetupList ;
- linkSetupInfo->tdlsLinkSetupList = setupPeer ;
-
- /* in case of success, eWNI_SME_TDLS_LINK_START_RSP is sent back to
- * SME later when TDLS setup cnf TX complete is successful. --> see
- * limTdlsSetupCnfTxComplete()
- */
- return eSIR_SUCCESS ;
-}
-#endif
/*
* Process Send Mgmt Request from SME and transmit to AP.
diff --git a/CORE/MAC/src/pe/lim/limSendMessages.c b/CORE/MAC/src/pe/lim/limSendMessages.c
index df4895de5c35..834d15f14af5 100644
--- a/CORE/MAC/src/pe/lim/limSendMessages.c
+++ b/CORE/MAC/src/pe/lim/limSendMessages.c
@@ -258,6 +258,7 @@ tSirRetStatus limSendSwitchChnlParams(tpAniSirGlobal pMac,
vos_mem_copy( pChnlParams->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) );
pChnlParams->peSessionId = peSessionId;
pChnlParams->vhtCapable = pSessionEntry->vhtCapability;
+ pChnlParams->dot11_mode = pSessionEntry->dot11mode;
/*Set DFS flag for DFS channel*/
if (vos_nv_getChannelEnabledState(chnlNumber) == NV_CHANNEL_DFS)
@@ -895,106 +896,6 @@ tSirRetStatus limSetUserPos(tpAniSirGlobal pMac,
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/** ---------------------------------------------------------
-\fn limSendTdlsLinkEstablish
-\brief LIM sends a message to HAL to set tdls direct link
-\param tpAniSirGlobal pMac
-\param
-\return None
- -----------------------------------------------------------*/
-tSirRetStatus limSendTdlsLinkEstablish(tpAniSirGlobal pMac, tANI_U8 bIsPeerResponder, tANI_U8 linkIdenOffset,
- tANI_U8 ptiBufStatusOffset, tANI_U8 ptiFrameLen, tANI_U8 *ptiFrame, tANI_U8 *extCapability)
-{
- tSirMsgQ msgQ;
- tSirRetStatus retCode;
- tpSirTdlsLinkEstablishInd pTdlsLinkEstablish = NULL;
-
- // Allocate memory.
- pTdlsLinkEstablish = vos_mem_malloc(sizeof(tSirTdlsLinkEstablishInd));
- if ( NULL == pTdlsLinkEstablish )
- {
- limLog( pMac, LOGP,
- FL( "Unable to allocate memory while sending Tdls Link Establish " ));
-
- retCode = eSIR_SME_RESOURCES_UNAVAILABLE;
- return retCode;
- }
-
- vos_mem_set((tANI_U8 *) pTdlsLinkEstablish, sizeof(tSirTdlsLinkEstablishInd), 0);
-
- pTdlsLinkEstablish->bIsResponder = !!bIsPeerResponder;
- pTdlsLinkEstablish->linkIdenOffset = linkIdenOffset;
- pTdlsLinkEstablish->ptiBufStatusOffset = ptiBufStatusOffset;
- pTdlsLinkEstablish->ptiTemplateLen = ptiFrameLen;
- /* Copy ptiFrame template */
- vos_mem_copy(pTdlsLinkEstablish->ptiTemplateBuf, ptiFrame, ptiFrameLen);
- /* Copy extended capabilities */
- vos_mem_copy((tANI_U8 *) pTdlsLinkEstablish->extCapability, extCapability, sizeof(pTdlsLinkEstablish->extCapability));
-
- msgQ.type = SIR_HAL_TDLS_LINK_ESTABLISH;
- msgQ.reserved = 0;
- msgQ.bodyptr = pTdlsLinkEstablish;
- msgQ.bodyval = 0;
-
- MTRACE(macTraceMsgTx(pMac, 0, msgQ.type));
-
- retCode = (tANI_U32)wdaPostCtrlMsg(pMac, &msgQ);
- if (retCode != eSIR_SUCCESS)
- {
- vos_mem_free(pTdlsLinkEstablish);
- limLog(pMac, LOGP, FL("Posting tdls link establish %d failed, reason = %x "), retCode);
- }
-
- return retCode;
-}
-
-/** ---------------------------------------------------------
-\fn limSendTdlsLinkTeardown
-\brief LIM sends a message to HAL to indicate tdls direct link is teardowned
-\param tpAniSirGlobal pMac
-\param
-\return None
- -----------------------------------------------------------*/
-tSirRetStatus limSendTdlsLinkTeardown(tpAniSirGlobal pMac, tANI_U16 staId)
-{
- tSirMsgQ msgQ;
- tSirRetStatus retCode;
- tpSirTdlsLinkTeardownInd pTdlsLinkTeardown = NULL;
-
- // Allocate memory.
- pTdlsLinkTeardown = vos_mem_malloc(sizeof(tSirTdlsLinkTeardownInd));
- if ( NULL == pTdlsLinkTeardown )
- {
- limLog( pMac, LOGP,
- FL( "Unable to allocate memory while sending Tdls Link Teardown " ));
-
- retCode = eSIR_SME_RESOURCES_UNAVAILABLE;
- return retCode;
- }
-
- vos_mem_set((tANI_U8 *) pTdlsLinkTeardown, sizeof(tSirTdlsLinkTeardownInd), 0);
-
- pTdlsLinkTeardown->staId = staId;
-
- msgQ.type = SIR_HAL_TDLS_LINK_TEARDOWN;
- msgQ.reserved = 0;
- msgQ.bodyptr = pTdlsLinkTeardown;
- msgQ.bodyval = 0;
-
- MTRACE(macTraceMsgTx(pMac, 0, msgQ.type));
-
- retCode = (tANI_U32)wdaPostCtrlMsg(pMac, &msgQ);
- if (retCode != eSIR_SUCCESS)
- {
- vos_mem_free(pTdlsLinkTeardown);
- limLog(pMac, LOGP, FL("Posting tdls link teardown %d failed, reason = %x "), retCode);
- }
-
- return retCode;
-}
-
-#endif
#ifdef WLAN_FEATURE_11W
/** ---------------------------------------------------------
diff --git a/CORE/MAC/src/pe/lim/limSendMessages.h b/CORE/MAC/src/pe/lim/limSendMessages.h
index 3d0136c289c7..5258cae97bbd 100644
--- a/CORE/MAC/src/pe/lim/limSendMessages.h
+++ b/CORE/MAC/src/pe/lim/limSendMessages.h
@@ -101,11 +101,6 @@ void limSetActiveEdcaParams(tpAniSirGlobal pMac, tSirMacEdcaParamRecord *plocalE
tSirRetStatus limSendBeaconFilterInfo(tpAniSirGlobal pMac, tpPESession psessionEntry);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-tSirRetStatus limSendTdlsLinkEstablish(tpAniSirGlobal pMac, tANI_U8 bIsPeerResponder, tANI_U8 linkIdenOffset, \
- tANI_U8 ptiBufStatusOffset, tANI_U8 ptiFrameLen, tANI_U8 *ptiFrame, tANI_U8 *extCapability);
-tSirRetStatus limSendTdlsLinkTeardown(tpAniSirGlobal pMac, tANI_U16 staId);
-#endif
#ifdef WLAN_FEATURE_11W
tSirRetStatus limSendExcludeUnencryptInd(tpAniSirGlobal pMac,
tANI_BOOLEAN excludeUnenc,
diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.c b/CORE/MAC/src/pe/lim/limTimerUtils.c
index 0c6ac73f99c7..6918a391b861 100644
--- a/CORE/MAC/src/pe/lim/limTimerUtils.c
+++ b/CORE/MAC/src/pe/lim/limTimerUtils.c
@@ -455,39 +455,6 @@ limCreateTimers(tpAniSirGlobal pMac)
FL("call to create background scan timer failed"));
goto err_timer;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- /*
- * create TDLS timers..
- * a) TDLS discovery response timer.
- */
-
- if (wlan_cfgGetInt(pMac, WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT,
- &cfgValue) != eSIR_SUCCESS)
- {
- /*
- * Could not get discovery response Timeout value
- * from CFG. Log error.
- */
- limLog(pMac, LOGP,
- FL("could not retrieve ReassocFailureTimeout value"));
- }
- cfgValue = SYS_MS_TO_TICKS(cfgValue);
-
- /*
- * create TDLS discovery response wait timer and activate it later
- */
- if (tx_timer_create(&pMac->lim.limTimers.gLimTdlsDisRspWaitTimer,
- "TDLS discovery response WAIT",
- limTimerHandler,
- SIR_LIM_TDLS_DISCOVERY_RSP_WAIT,
- cfgValue, 0,
- TX_NO_ACTIVATE) != TX_SUCCESS)
- {
- limLog(pMac, LOGP,
- FL("could not create TDLS discovery response wait timer"));
- goto err_timer;
- }
-#endif
}
diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.h b/CORE/MAC/src/pe/lim/limTimerUtils.h
index 266a68fc5554..e7fca727cd00 100644
--- a/CORE/MAC/src/pe/lim/limTimerUtils.h
+++ b/CORE/MAC/src/pe/lim/limTimerUtils.h
@@ -73,11 +73,6 @@ enum
#ifdef FEATURE_WLAN_ESE
eLIM_TSM_TIMER,
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- eLIM_TDLS_DISCOVERY_RSP_WAIT,
- eLIM_TDLS_LINK_SETUP_RSP_TIMEOUT,
- eLIM_TDLS_LINK_SETUP_CNF_TIMEOUT,
-#endif
eLIM_DISASSOC_ACK_TIMER,
eLIM_DEAUTH_ACK_TIMER,
eLIM_PERIODIC_JOIN_PROBE_REQ_TIMER,
diff --git a/CORE/MAC/src/pe/lim/limTrace.c b/CORE/MAC/src/pe/lim/limTrace.c
index 4104c92e84f5..5f1e1981d6fe 100644
--- a/CORE/MAC/src/pe/lim/limTrace.c
+++ b/CORE/MAC/src/pe/lim/limTrace.c
@@ -150,15 +150,15 @@ void limTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, tANI_U16 recInd
switch (pRecord->code) {
case TRACE_CODE_MLM_STATE:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"MLM State:", limTraceGetMlmStateString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_SME_STATE:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"SME State:", limTraceGetSmeStateString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_TX_MGMT:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"TX Mgmt:", frameSubtypeStr[pRecord->data], pRecord->data );
break;
@@ -169,84 +169,84 @@ void limTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, tANI_U16 recInd
}
else
{
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(%d) SN: %d ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(%d) SN: %d ", recIndex, pRecord->time, pRecord->session,
"RX Mgmt:", frameSubtypeStr[LIM_TRACE_GET_SUBTYPE(pRecord->data)],
LIM_TRACE_GET_SUBTYPE(pRecord->data),
LIM_TRACE_GET_SSN(pRecord->data) );
}
break;
case TRACE_CODE_RX_MGMT_DROP:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(%d) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(%d) ", recIndex, pRecord->time, pRecord->session,
"Drop RX Mgmt:", __limTraceGetMgmtDropReasonString((tANI_U16)pRecord->data), pRecord->data);
break;
case TRACE_CODE_RX_MGMT_TSF:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s0x%x(%d) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s0x%x(%d) ", recIndex, pRecord->time, pRecord->session,
"RX Mgmt TSF:", " ", pRecord->data, pRecord->data );
break;
case TRACE_CODE_TX_COMPLETE:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %d " , recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %d " , recIndex, pRecord->time, pRecord->session,
"TX Complete", pRecord->data );
break;
case TRACE_CODE_TX_SME_MSG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"TX SME Msg:", macTraceGetSmeMsgString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_RX_SME_MSG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX Sme Msg:",
macTraceGetSmeMsgString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_TX_WDA_MSG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"TX WDA Msg:", macTraceGetWdaMsgString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_RX_WDA_MSG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX WDA Msg:",
macTraceGetWdaMsgString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_TX_LIM_MSG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"TX LIM Msg:", macTraceGetLimMsgString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_RX_LIM_MSG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX LIM Msg",
macTraceGetLimMsgString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_TX_CFG_MSG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"TX CFG Msg:", macTraceGetCfgMsgString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_RX_CFG_MSG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX CFG Msg:",
macTraceGetCfgMsgString((tANI_U16)MAC_TRACE_GET_MSG_ID(pRecord->data)),
pRecord->data );
break;
case TRACE_CODE_TIMER_ACTIVATE:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"Timer Actvtd", __limTraceGetTimerString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_TIMER_DEACTIVATE:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session,
"Timer DeActvtd", __limTraceGetTimerString((tANI_U16)pRecord->data), pRecord->data );
break;
case TRACE_CODE_INFO_LOG:
- limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session,
"INFORMATION_LOG", macTraceGetInfoLogString((tANI_U16)pRecord->data), pRecord->data );
break;
default :
- limLog(pMac, LOGE, "%04d %012u S%d %-14s(%d) (0x%x) ", recIndex, pRecord->time, pRecord->session,
+ limLog(pMac, LOGE, "%04d %012llu S%d %-14s(%d) (0x%x) ", recIndex, pRecord->time, pRecord->session,
"Unknown Code", pRecord->code, pRecord->data );
break;
}
diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h
index 0816410ca0f1..b6a4d76e40f3 100644
--- a/CORE/MAC/src/pe/lim/limTypes.h
+++ b/CORE/MAC/src/pe/lim/limTypes.h
@@ -703,18 +703,6 @@ tSirRetStatus limSendRadioMeasureReportActionFrame(tpAniSirGlobal, tANI_U8, tANI
void limProcessIappFrame(tpAniSirGlobal, tANI_U8 *,tpPESession);
#endif
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac,
- tSirMacAddr peer_mac, tANI_U8 dialog, tpPESession psessionEntry);
-tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac,
- tSirMacAddr peerMac, tANI_U8 dialog, tpPESession psessionEntry,
- tANI_U8* addIe, tANI_U16 len);
-
-eHalStatus limTdlsPrepareSetupReqFrame(tpAniSirGlobal pMac,
- tLimTdlsLinkSetupInfo *linkSetupInfo,
- tANI_U8 dialog, tSirMacAddr peerMac,
- tpPESession psessionEntry);
-#endif
#ifdef FEATURE_WLAN_TDLS
void limInitTdlsData(tpAniSirGlobal, tpPESession);
tSirRetStatus limProcessSmeTdlsMgmtSendReq(tpAniSirGlobal pMac,
@@ -1064,24 +1052,6 @@ void limSendP2PActionFrame(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
void limAbortRemainOnChan(tpAniSirGlobal pMac, tANI_U8 sessionId);
tSirRetStatus __limProcessSmeNoAUpdate(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf);
void limProcessRegdDefdSmeReqAfterNOAStart(tpAniSirGlobal pMac);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-void limProcessTdlsFrame(tpAniSirGlobal, tANI_U32 *);
-void limProcessTdlsPublicActionFrame(tpAniSirGlobal pMac, tANI_U32 *pBd,
- tpPESession) ;
-#ifdef FEATURE_WLAN_TDLS_NEGATIVE
-#define LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_DSCV_REQ 0x1 /* 5.1.4-5 */
-#define LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_REQ 0x2 /* 5.2.4-16 */
-#define LIM_TDLS_NEGATIVE_STATUS_37_IN_SETUP_CNF 0x4 /* 5.2.4-10 */
-#define LIM_TDLS_NEGATIVE_SEND_REQ_TO_SETUP_REQ 0x8 /* 5.2.4-20/32 */
-#define LIM_TDLS_NEGATIVE_RSP_TIMEOUT_TO_SETUP_REQ 0x10 /* 5.2.3.4 */
-#define LIM_TDLS_NEGATIVE_TREAT_TDLS_PROHIBIT_AP 0x20 /* 5.2.4-49 */
- /* following is not paticularily tested in WFA test plan, but will help to validate our TDLS behavior in-house */
-#define LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_DSCV_RSP 0x40
-#define LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_RSP 0x80
-
-void limTdlsSetNegativeBehavior(tpAniSirGlobal pMac, tANI_U8 value, tANI_BOOLEAN on);
-#endif
-#endif
void limProcessDisassocAckTimeout(tpAniSirGlobal pMac);
void limProcessDeauthAckTimeout(tpAniSirGlobal pMac);
diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h
index 107ab9d70c6b..9ec2556ff79c 100644
--- a/CORE/MAC/src/pe/lim/limUtils.h
+++ b/CORE/MAC/src/pe/lim/limUtils.h
@@ -567,12 +567,6 @@ void peSetResumeChannel(tpAniSirGlobal pMac, tANI_U16 channel, ePhyChanBondState
--------------------------------------------------------------------------*/
void peGetResumeChannel(tpAniSirGlobal pMac, tANI_U8* resumeChannel, ePhyChanBondState* resumePhyCbState);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-tANI_U8 limTdlsFindLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac, tLimTdlsLinkSetupPeer **setupPeer);
-void limTdlsDelLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac);
-void limStartTdlsTimer(tpAniSirGlobal pMac, tANI_U8 sessionId, TX_TIMER *timer, tANI_U32 timerId,
- tANI_U16 timerType, tANI_U32 timerMsg);
-#endif
void limGetShortSlotFromPhyMode(tpAniSirGlobal pMac, tpPESession psessionEntry, tANI_U32 phyMode,
tANI_U8 *pShortSlotEnable);
diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c
index 59faacfe941e..f19742704859 100644
--- a/CORE/MAC/src/pe/pmm/pmmApi.c
+++ b/CORE/MAC/src/pe/pmm/pmmApi.c
@@ -3155,7 +3155,10 @@ tSirRetStatus pmmOffloadEnterBmpsReqHandler(tpAniSirGlobal pMac,
if (NULL == pEnablePsReqParams)
{
pmmLog(pMac, LOGE,
- FL("Memory allocation failed for pEnablePsReqParams"));
+ FL("Memory allocation failed for pEnablePsReqParams"));
+ limSendSmeRsp(pMac, eWNI_PMC_ENTER_BMPS_RSP, eSIR_FAILURE,
+ psessionEntry->smeSessionId,
+ psessionEntry->transactionId);
return eSIR_MEM_ALLOC_FAILED;
}
@@ -3187,6 +3190,9 @@ tSirRetStatus pmmOffloadEnterBmpsReqHandler(tpAniSirGlobal pMac,
{
pmmLog(pMac, LOGE, FL("Posting WDA_ENTER_BMPS_REQ failed"));
vos_mem_free(pEnablePsReqParams);
+ limSendSmeRsp(pMac, eWNI_PMC_ENTER_BMPS_RSP, eSIR_FAILURE,
+ psessionEntry->smeSessionId,
+ psessionEntry->transactionId);
return eSIR_FAILURE;
}
/*
@@ -3296,6 +3302,9 @@ tSirRetStatus pmmOffloadExitBmpsReqHandler(tpAniSirGlobal pMac,
if (NULL == pDisablePsReqParams)
{
pmmLog(pMac, LOGE, FL("Memory allocation failed for tDisablePsParams"));
+ limSendSmeRsp(pMac, eWNI_PMC_EXIT_BMPS_RSP, eSIR_FAILURE,
+ psessionEntry->smeSessionId,
+ psessionEntry->transactionId);
return eSIR_MEM_ALLOC_FAILED;
}
@@ -3315,6 +3324,9 @@ tSirRetStatus pmmOffloadExitBmpsReqHandler(tpAniSirGlobal pMac,
{
pmmLog(pMac, LOGE, FL("Posting WDA_EXIT_BMPS_REQ failed"));
vos_mem_free(pDisablePsReqParams);
+ limSendSmeRsp(pMac, eWNI_PMC_EXIT_BMPS_RSP, eSIR_FAILURE,
+ psessionEntry->smeSessionId,
+ psessionEntry->transactionId);
return eSIR_FAILURE;
}
/*
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 611e4ee8defb..39c2767c185b 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -1220,18 +1220,18 @@ static void wma_remove_peer(tp_wma_handle wma, u_int8_t *bssid,
#define PEER_ALL_TID_BITMASK 0xffffffff
u_int32_t peer_tid_bitmap = PEER_ALL_TID_BITMASK;
u_int8_t *peer_addr = bssid;
- if (!wma->peer_count)
+ if (!wma->interfaces[vdev_id].peer_count)
{
WMA_LOGE("%s: Can't remove peer with peer_addr %pM vdevid %d peer_count %d",
- __func__, bssid, vdev_id, wma->peer_count);
+ __func__, bssid, vdev_id, wma->interfaces[vdev_id].peer_count);
return;
}
if (peer)
ol_txrx_peer_detach(peer);
- wma->peer_count--;
+ wma->interfaces[vdev_id].peer_count--;
WMA_LOGE("%s: Removed peer with peer_addr %pM vdevid %d peer_count %d",
- __func__, bssid, vdev_id, wma->peer_count);
+ __func__, bssid, vdev_id, wma->interfaces[vdev_id].peer_count);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
if (roam_synch_in_progress)
return;
@@ -5485,9 +5485,9 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev,
{
ol_txrx_peer_handle peer;
- if (++wma->peer_count > wma->wlan_resource_config.num_peers) {
+ if (++wma->interfaces[vdev_id].peer_count > wma->wlan_resource_config.num_peers) {
WMA_LOGP("%s, the peer count exceeds the limit %d",
- __func__, wma->peer_count - 1);
+ __func__, wma->interfaces[vdev_id].peer_count - 1);
goto err;
}
peer = ol_txrx_peer_attach(pdev, vdev, peer_addr);
@@ -5499,7 +5499,7 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev,
WMA_LOGE("%s: Created peer with peer_addr %pM vdev_id %d,"
"peer_count - %d",__func__, peer_addr, vdev_id,
- wma->peer_count);
+ wma->interfaces[vdev_id].peer_count);
return VOS_STATUS_SUCCESS;
}
#endif
@@ -5510,7 +5510,7 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev,
goto err;
}
WMA_LOGE("%s: Created peer with peer_addr %pM vdev_id %d, peer_count - %d",
- __func__, peer_addr, vdev_id, wma->peer_count);
+ __func__, peer_addr, vdev_id, wma->interfaces[vdev_id].peer_count);
#ifdef QCA_IBSS_SUPPORT
/* for each remote ibss peer, clear its keys */
@@ -5531,7 +5531,7 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev,
return VOS_STATUS_SUCCESS;
err:
- wma->peer_count--;
+ wma->interfaces[vdev_id].peer_count--;
return VOS_STATUS_E_FAILURE;
}
@@ -8866,7 +8866,7 @@ VOS_STATUS wma_process_dhcp_ind(tp_wma_handle wma_handle,
}
static WLAN_PHY_MODE wma_chan_to_mode(u8 chan, ePhyChanBondState chan_offset,
- u8 vht_capable)
+ u8 vht_capable, u8 dot11_mode)
{
WLAN_PHY_MODE phymode = MODE_UNKNOWN;
@@ -8874,8 +8874,29 @@ static WLAN_PHY_MODE wma_chan_to_mode(u8 chan, ePhyChanBondState chan_offset,
if ((chan >= WMA_11G_CHANNEL_BEGIN) && (chan <= WMA_11G_CHANNEL_END)) {
switch (chan_offset) {
case PHY_SINGLE_CHANNEL_CENTERED:
- /* Configure MODE_11NG_HT20 for self vdev(for vht too) */
- phymode = vht_capable ? MODE_11AC_VHT20_2G :MODE_11NG_HT20;
+ /* In case of no channel bonding, use dot11_mode
+ * to set phy mode
+ */
+ switch (dot11_mode) {
+ case WNI_CFG_DOT11_MODE_11A:
+ phymode = MODE_11A;
+ break;
+ case WNI_CFG_DOT11_MODE_11B:
+ phymode = MODE_11B;
+ break;
+ case WNI_CFG_DOT11_MODE_11G:
+ phymode = MODE_11G;
+ break;
+ case WNI_CFG_DOT11_MODE_11G_ONLY:
+ phymode = MODE_11GONLY;
+ break;
+ default:
+ /* Configure MODE_11NG_HT20 for
+ * self vdev(for vht too)
+ */
+ phymode = MODE_11NG_HT20;
+ break;
+ }
break;
case PHY_DOUBLE_CHANNEL_LOW_PRIMARY:
case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY:
@@ -8920,8 +8941,9 @@ static WLAN_PHY_MODE wma_chan_to_mode(u8 chan, ePhyChanBondState chan_offset,
break;
}
}
- WMA_LOGD("%s: phymode %d channel %d offset %d vht_capable %d", __func__,
- phymode, chan, chan_offset, vht_capable);
+ WMA_LOGD("%s: phymode %d channel %d offset %d vht_capable %d "
+ "dot11_mode %d", __func__, phymode, chan,
+ chan_offset, vht_capable, dot11_mode);
return phymode;
}
@@ -8978,7 +9000,7 @@ static VOS_STATUS wma_vdev_start(tp_wma_handle wma,
/* Fill channel info */
chan->mhz = vos_chan_to_freq(req->chan);
chanmode = wma_chan_to_mode(req->chan, req->chan_offset,
- req->vht_capable);
+ req->vht_capable, req->dot11_mode);
intr[cmd->vdev_id].chanmode = chanmode; /* save channel mode */
intr[cmd->vdev_id].ht_capable = req->ht_capable;
@@ -9655,6 +9677,7 @@ static void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params)
req.chan = params->channelNumber;
req.chan_offset = params->secondaryChannelOffset;
req.vht_capable = params->vhtCapable;
+ req.dot11_mode = params->dot11_mode;
#ifdef WLAN_FEATURE_VOWIFI
req.max_txpow = params->maxTxPower;
#else
@@ -25995,12 +26018,13 @@ void wma_process_roam_synch_complete(WMA_HANDLE handle,
u_int16_t len;
len = sizeof(wmi_roam_synch_complete_fixed_param);
- wma_handle->interfaces[synchcnf->sessionId].roam_synch_in_progress = VOS_FALSE;
if (!wma_handle || !wma_handle->wmi_handle) {
WMA_LOGE("%s: WMA is closed, can not issue roam synch cnf",
__func__);
return;
}
+ wma_handle->interfaces[synchcnf->sessionId].roam_synch_in_progress =
+ VOS_FALSE;
wmi_buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
if (!wmi_buf) {
WMA_LOGE("%s: wmai_buf_alloc failed", __func__);
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index fbe7e53fda98..cd4e977c57f8 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -502,6 +502,7 @@ struct wma_txrx_node {
#endif
v_BOOL_t ps_enabled;
u_int32_t dtim_policy;
+ u_int32_t peer_count;
v_BOOL_t roam_synch_in_progress;
};
@@ -619,7 +620,6 @@ typedef struct {
u_int32_t scan_id;
struct wma_txrx_node *interfaces;
pdev_cli_config_t pdevconfig;
- u_int32_t peer_count;
struct list_head vdev_resp_queue;
adf_os_spinlock_t vdev_respq_lock;
adf_os_spinlock_t vdev_detach_lock;
@@ -1280,6 +1280,7 @@ struct wma_vdev_start_req {
u_int8_t vht_capable;
u_int8_t ht_capable;
int32_t dfs_pri_multiplier;
+ u_int8_t dot11_mode;
};
struct wma_set_key_params {
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 2aed57d778f9..c3c21a9b52fe 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1511,25 +1511,6 @@ typedef struct tagCsrTdlsSendMgmt
}tCsrTdlsSendMgmt;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-typedef struct tagCsrTdlsDisRequest
-{
- tSirMacAddr peerMac;
- tANI_U8 disType;
-}tCsrTdlsDisRequest;
-
-typedef struct tagCsrTdlsSetupRequest
-{
- tSirMacAddr peerMac;
- tANI_U8 linkIndex;
-}tCsrTdlsSetupRequest;
-
-typedef struct tagCsrTdlsTeardownRequest
-{
- tSirMacAddr peerMac;
- tANI_U8 linkIndex;
-}tCsrTdlsTeardownRequest ;
-#endif
#endif
typedef void * tScanResultHandle;
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 44036818851c..6fed9fb387f8 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -805,24 +805,6 @@ typedef struct tagCsrScanStruct
csrScanCompleteCallback callback11dScanDone;
}tCsrScanStruct;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * struct to carry TDLS discovery info..
- */
-typedef struct sCsrTdlsContext
-{
- tDblLinkList tdlsPotentialPeerList ;
- tANI_U16 tdlsCommonFlag ;
- tANI_U16 tdlsCommonState ;
- tANI_U16 tdlsPeerCount ;
-}tCsrTdlsCtxStruct;
-
-typedef struct sCsrTdlsPeerLinkInfo
-{
- tListElem tdlsPeerStaLink ;
- tSirTdlsPeerInfo tdlsDisPeerInfo ;
-}tCsrTdlsPeerLinkinfo ;
-#endif
@@ -1436,15 +1418,9 @@ eHalStatus csrStop(tpAniSirGlobal pMac, tHalStopType stopType);
eHalStatus csrReady(tpAniSirGlobal pMac);
#ifdef FEATURE_WLAN_WAPI
-eHalStatus csrRoamGetBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 *pNum,
- tBkidCacheInfo *pBkidCache);
-
eHalStatus csrScanGetBKIDCandidateList(tpAniSirGlobal pMac, tANI_U32 sessionId,
tBkidCandidateInfo *pBkidList, tANI_U32 *pNumItems );
-tANI_U32 csrRoamGetNumBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId);
-eHalStatus csrRoamSetBKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache,
- tANI_U32 numItems );
/* ---------------------------------------------------------------------------
\fn csrRoamGetWapiReqIE
\brief return the WAPI IE CSR passes to PE to JOIN request or START_BSS request
diff --git a/CORE/SME/inc/pmcApi.h b/CORE/SME/inc/pmcApi.h
index e60447ffef72..46ee179ceb1e 100644
--- a/CORE/SME/inc/pmcApi.h
+++ b/CORE/SME/inc/pmcApi.h
@@ -635,7 +635,8 @@ tANI_BOOLEAN pmcOffloadIsPowerSaveEnabled (tHalHandle hHal, tANI_U32 sessionId,
tPmcPowerSavingMode psMode);
eHalStatus PmcOffloadEnableDeferredStaModePowerSave(tHalHandle hHal,
- tANI_U32 sessionId);
+ tANI_U32 sessionId,
+ tANI_BOOLEAN isReassoc);
eHalStatus PmcOffloadDisableDeferredStaModePowerSave(tHalHandle hHal,
tANI_U32 sessionId);
diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h
index 319f032dfe72..dcd8f044dd52 100644
--- a/CORE/SME/inc/smeInside.h
+++ b/CORE/SME/inc/smeInside.h
@@ -152,23 +152,6 @@ typedef struct TdlsDelStaInfo
{
tSirMacAddr peerMac;
} tTdlsDelStaCmdInfo;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-typedef struct TdlsDisReqCmdinfo
-{
- tSirMacAddr peerMac;
- tANI_U8 tdlsDisType;
-} tTdlsDisReqCmdinfo;
-
-typedef struct tdlsLinkSetupReqCmdinfo
-{
- tSirMacAddr peerMac;
-} tTdlsLinkSetupReqCmdinfo;
-
-typedef struct tdlsLinkTeardownCmdinfo
-{
- tSirMacAddr peerMac;
-} tTdlsLinkTeardownCmdinfo;
-#endif
/*
* TDLS cmd info, CMD from SME to PE.
*/
@@ -177,11 +160,6 @@ typedef struct s_tdls_cmd
tANI_U32 size;
union
{
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- tTdlsDisReqCmdinfo tdlsDisReqCmdInfo ;
- tTdlsLinkSetupReqCmdinfo tdlsLinkSetupReqCmdInfo ;
- tTdlsLinkTeardownCmdinfo tdlsLinkTeardownCmdInfo ;
-#endif
tTdlsLinkEstablishCmdInfo tdlsLinkEstablishCmdInfo;
tTdlsSendMgmtCmdInfo tdlsSendMgmtCmdInfo;
tTdlsAddStaCmdInfo tdlsAddStaCmdInfo;
@@ -234,6 +212,7 @@ void purgeSmeSessionCmdList(tpAniSirGlobal pMac, tANI_U32 sessionId,
tANI_BOOLEAN smeCommandPending(tpAniSirGlobal pMac);
tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
tANI_BOOLEAN pmcOffloadProcessCommand(tpAniSirGlobal pMac,tSmeCmd *pCommand);
+tANI_BOOLEAN pmcOffloadIsStaInPowerSave(tpAniSirGlobal pMac, tANI_U32 sessionId);
//this function is used to abort a command where the normal processing of the command
//is terminated without going through the normal path. it is here to take care of callbacks for
@@ -311,14 +290,6 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac,tSmeCmd *pCommand );
eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd );
eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac,v_U16_t msg_type,
void *pMsgBuf);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-eHalStatus csrTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId,
- tCsrTdlsDisRequest *tdlsDisReq);
-eHalStatus csrTdlsSetupReq(tHalHandle hHal, tANI_U8 sessionId,
- tCsrTdlsSetupRequest *tdlsSetupReq);
-eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId,
- tCsrTdlsTeardownRequest *teardown);
-#endif
#endif /* FEATURE_WLAN_TDLS */
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR)
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index 9c78bd354b9e..ce9772d8755d 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -76,13 +76,6 @@ typedef enum eSmeCommandType
eSmeCommandTdlsAddPeer,
eSmeCommandTdlsDelPeer,
eSmeCommandTdlsLinkEstablish,
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- eSmeCommandTdlsDiscovery,
- eSmeCommandTdlsLinkSetup,
- eSmeCommandTdlsLinkTear,
- eSmeCommandTdlsEnterUapsd,
- eSmeCommandTdlsExitUapsd,
-#endif
#endif
//PMC
eSmePmcCommandMask = 0x20000, //To identify PMC commands
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index b7bc0127a5c3..ff60e304de3a 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -1864,48 +1864,6 @@ eHalStatus sme_RoamRegisterCallback(tHalHandle hHal,
#ifdef FEATURE_WLAN_WAPI
/* ---------------------------------------------------------------------------
- \fn sme_RoamSetBKIDCache
- \brief The SME API exposed to HDD to allow HDD to provde SME the BKID
- candidate list.
- \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after
- it is opened (by calling halOpen).
- \param pBKIDCache - caller allocated buffer point to an array of tBkidCacheInfo
- \param numItems - a variable that has the number of tBkidCacheInfo allocated
- when retruning, this is the number of items put into pBKIDCache
- \return eHalStatus - when fail, it usually means the buffer allocated is not
- big enough and pNumItems has the number of tBkidCacheInfo.
- ---------------------------------------------------------------------------*/
-eHalStatus sme_RoamSetBKIDCache( tHalHandle hHal, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache,
- tANI_U32 numItems );
-
-/* ---------------------------------------------------------------------------
- \fn sme_RoamGetBKIDCache
- \brief The SME API exposed to HDD to allow HDD to request SME to return its
- BKID cache.
- \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after
- it is opened (by calling halOpen).
- \param pNum - caller allocated memory that has the space of the number of
- tBkidCacheInfo as input. Upon returned, *pNum has the needed number of entries
- in SME cache.
- \param pBkidCache - Caller allocated memory that contains BKID cache, if any,
- upon return
- \return eHalStatus - when fail, it usually means the buffer allocated is not
- big enough.
- ---------------------------------------------------------------------------*/
-eHalStatus sme_RoamGetBKIDCache(tHalHandle hHal, tANI_U32 *pNum,
- tBkidCacheInfo *pBkidCache);
-
-/* ---------------------------------------------------------------------------
- \fn sme_RoamGetNumBKIDCache
- \brief The SME API exposed to HDD to allow HDD to request SME to return the
- number of BKID cache entries.
- \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after
- it is opened (by calling halOpen).
- \return tANI_U32 - the number of BKID cache entries.
- ---------------------------------------------------------------------------*/
-tANI_U32 sme_RoamGetNumBKIDCache(tHalHandle hHal, tANI_U32 sessionId);
-
-/* ---------------------------------------------------------------------------
\fn sme_ScanGetBKIDCandidateList
\brief a wrapper function to return the BKID candidate list
\param pBkidList - caller allocated buffer point to an array of
@@ -3404,19 +3362,6 @@ void sme_SetTdlsPowerSaveProhibited(tHalHandle hHal, tANI_U32 sessionId,
-------------------------------------------------------------------------*/
v_BOOL_t sme_IsPmcBmps(tHalHandle hHal);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-typedef struct smeTdlsDisResult
-{
- tSirMacAddr tdlsPeerMac;
- v_S7_t tdlsPeerRssi;
-} tSmeTdlsDisResult;
-
-VOS_STATUS sme_StartTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
-v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal,
- tSmeTdlsDisResult *disResult, v_U8_t listType);
-VOS_STATUS sme_StartTdlsLinkSetupReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
-VOS_STATUS sme_StartTdlsLinkTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
-#endif /* FEATURE_WLAN_TDLS_INTERNAL */
eHalStatus sme_UpdateDfsSetting(tHalHandle hHal, tANI_U8 fUpdateEnableDFSChnlScan);
/*
@@ -3620,7 +3565,8 @@ eHalStatus sme_ConfigDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMo
eHalStatus sme_PsOffloadEnablePowerSave (tHalHandle hHal, tANI_U32 sessionId);
eHalStatus sme_PsOffloadDisablePowerSave (tHalHandle hHal, tANI_U32 sessionId);
eHalStatus sme_PsOffloadEnableDeferredPowerSave (tHalHandle hHal,
- tANI_U32 sessionId);
+ tANI_U32 sessionId,
+ tANI_BOOLEAN isReassoc);
eHalStatus sme_PsOffloadDisableDeferredPowerSave (tHalHandle hHal,
tANI_U32 sessionId);
@@ -3832,6 +3778,15 @@ v_BOOL_t sme_GetDFSScanMode(tHalHandle hHal);
-------------------------------------------------------------------------*/
tANI_BOOLEAN sme_staInMiddleOfRoaming(tHalHandle hHal, tANI_U8 sessionId);
+/* ---------------------------------------------------------------------------
+ \fn sme_PsOffloadIsStaInPowerSave
+ \brief This function returns TRUE if STA is in power save
+ \param hHal - HAL handle for device
+ \param sessionId - Session Identifier
+ \- return TRUE or FALSE
+ -------------------------------------------------------------------------*/
+tANI_BOOLEAN sme_PsOffloadIsStaInPowerSave(tHalHandle hHal, tANI_U8 sessionId);
+
#ifdef FEATURE_WLAN_EXTSCAN
/* ---------------------------------------------------------------------------
\fn sme_GetValidChannelsByBand
diff --git a/CORE/SME/src/ccm/ccmApi.c b/CORE/SME/src/ccm/ccmApi.c
index c37605bdc7d8..7f6648a83a71 100644
--- a/CORE/SME/src/ccm/ccmApi.c
+++ b/CORE/SME/src/ccm/ccmApi.c
@@ -632,7 +632,14 @@ eHalStatus ccmCfgGetInt(tHalHandle hHal, tANI_U32 cfgId, tANI_U32 *pValue)
{
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
eHalStatus status = eHAL_STATUS_SUCCESS ;
- tCfgReq *req = pMac->ccm.comp[cfgId] ;
+ tCfgReq *req;
+
+ if (cfgId >= CFG_PARAM_MAX_NUM) {
+ smsLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);
+ return eHAL_STATUS_INVALID_PARAMETER;
+ }
+
+ req = pMac->ccm.comp[cfgId] ;
if (req && req->state == eCCM_REQ_DONE)
{
@@ -658,6 +665,12 @@ eHalStatus ccmCfgGetStr(tHalHandle hHal, tANI_U32 cfgId, tANI_U8 *pBuf, tANI_U32
return eHAL_STATUS_FAILURE;
hHdd = halHandle2HddHandle(hHal);
+
+ if (cfgId >= CFG_PARAM_MAX_NUM) {
+ smsLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);
+ return eHAL_STATUS_INVALID_PARAMETER;
+ }
+
req = pMac->ccm.comp[cfgId] ;
if (req && req->state == eCCM_REQ_DONE && (tANI_U32)req->length <= *pLength)
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 7da1867f2b94..582f5ffc553e 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -12386,72 +12386,6 @@ static void csrRoamUpdateConnectedProfileFromNewBss( tpAniSirGlobal pMac, tANI_U
return;
}
-#ifdef FEATURE_WLAN_WAPI
-eHalStatus csrRoamSetBKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache,
- tANI_U32 numItems )
-{
- eHalStatus status = eHAL_STATUS_INVALID_PARAMETER;
- tCsrRoamSession *pSession;
- if(!CSR_IS_SESSION_VALID( pMac, sessionId ))
- {
- smsLog(pMac, LOGE, FL(" Invalid session ID"));
- return status;
- }
- smsLog(pMac, LOGW, "csrRoamSetBKIDCache called, numItems = %d", numItems);
- pSession = CSR_GET_SESSION( pMac, sessionId );
- if(numItems <= CSR_MAX_BKID_ALLOWED)
- {
- status = eHAL_STATUS_SUCCESS;
- //numItems may be 0 to clear the cache
- pSession->NumBkidCache = (tANI_U16)numItems;
- if(numItems && pBKIDCache)
- {
- vos_mem_copy(pSession->BkidCacheInfo, pBKIDCache,
- sizeof(tBkidCacheInfo) * numItems);
- status = eHAL_STATUS_SUCCESS;
- }
- }
- return (status);
-}
-eHalStatus csrRoamGetBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 *pNum,
- tBkidCacheInfo *pBkidCache)
-{
- eHalStatus status = eHAL_STATUS_INVALID_PARAMETER;
- tCsrRoamSession *pSession;
- if(!CSR_IS_SESSION_VALID( pMac, sessionId ))
- {
- smsLog(pMac, LOGE, FL(" Invalid session ID"));
- return status;
- }
- pSession = CSR_GET_SESSION( pMac, sessionId );
- if(pNum && pBkidCache)
- {
- if(pSession->NumBkidCache == 0)
- {
- *pNum = 0;
- status = eHAL_STATUS_SUCCESS;
- }
- else if(*pNum >= pSession->NumBkidCache)
- {
- if(pSession->NumBkidCache > CSR_MAX_PMKID_ALLOWED)
- {
- smsLog(pMac, LOGE, FL("NumPmkidCache :%d is more than CSR_MAX_PMKID_ALLOWED, resetting to CSR_MAX_PMKID_ALLOWED"),
- pSession->NumBkidCache);
- pSession->NumBkidCache = CSR_MAX_PMKID_ALLOWED;
- }
- vos_mem_copy(pBkidCache, pSession->BkidCacheInfo,
- sizeof(tBkidCacheInfo) * pSession->NumBkidCache);
- *pNum = pSession->NumBkidCache;
- status = eHAL_STATUS_SUCCESS;
- }
- }
- return (status);
-}
-tANI_U32 csrRoamGetNumBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId)
-{
- return (pMac->roam.roamSession[sessionId].NumBkidCache);
-}
-#endif /* FEATURE_WLAN_WAPI */
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
eHalStatus csrRoamSetPSK_PMK (tpAniSirGlobal pMac, tANI_U32 sessionId,
tANI_U8 *pPSK_PMK)
diff --git a/CORE/SME/src/csr/csrTdlsProcess.c b/CORE/SME/src/csr/csrTdlsProcess.c
index 167ac7d6bea0..fe94a0a82b18 100644
--- a/CORE/SME/src/csr/csrTdlsProcess.c
+++ b/CORE/SME/src/csr/csrTdlsProcess.c
@@ -51,18 +51,6 @@
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * initialize Discovery list
- */
-eHalStatus csrTdlsInitPeerList(tpAniSirGlobal pMac )
-{
- tCsrTdlsCtxStruct *tdlsDisInfo = &pMac->tdlsCtx ;
- csrLLOpen(pMac->hHdd, &tdlsDisInfo->tdlsPotentialPeerList) ;
-
- return eHAL_STATUS_SUCCESS ;
-}
-#endif
/*
* common routine to remove TDLS cmd from SME command list..
@@ -351,109 +339,6 @@ eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr pee
return status ;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * TDLS request API, called from HDD to enable TDLS discovery request
- * in SME/CSR and send message to PE to trigger TDLS discovery procedure.
- */
-eHalStatus csrTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsDisRequest *tdlsDisReq)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- tSmeCmd *tdlsDisReqCmd ;
- eHalStatus status = eHAL_STATUS_FAILURE ;
-
- if(tdlsDisReq)
- {
- tdlsDisReqCmd = csrGetCommandBuffer(pMac) ;
-
- if(tdlsDisReqCmd)
- {
- tTdlsDisReqCmdinfo *disReqCmdInfo =
- &tdlsDisReqCmd->u.tdlsCmd.u.tdlsDisReqCmdInfo ;
-
- tdlsDisReqCmd->sessionId = sessionId;
-
- disReqCmdInfo->tdlsDisType = tdlsDisReq->disType ;
- vos_mem_copy(disReqCmdInfo->peerMac,
- tdlsDisReq->peerMac, sizeof(tSirMacAddr)) ;
- tdlsDisReqCmd->command = eSmeCommandTdlsDiscovery ;
- tdlsDisReqCmd->u.tdlsCmd.size = sizeof(tTdlsDisReqCmdinfo) ;
- smePushCommand(pMac, tdlsDisReqCmd, FALSE) ;
- status = eHAL_STATUS_SUCCESS ;
- }
- }
-
- return status ;
-}
-
-/*
- * TDLS request API, called from HDD to enable TDLS link setup request
- * in SME/CSR and send message to PE to trigger TDLS link setup procedure.
- */
-eHalStatus csrTdlsSetupReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSetupRequest *tdlsSetupReq)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- tSmeCmd *tdlsSetupReqCmd ;
- eHalStatus status = eHAL_STATUS_FAILURE ;
-
- if(tdlsSetupReq)
- {
- tdlsSetupReqCmd = csrGetCommandBuffer(pMac) ;
-
- if(tdlsSetupReqCmd)
- {
- tTdlsLinkSetupReqCmdinfo *setupCmdInfo =
- &tdlsSetupReqCmd->u.tdlsCmd.u.tdlsLinkSetupReqCmdInfo ;
-
- tdlsSetupReqCmd->sessionId = sessionId;
-
- vos_mem_copy(setupCmdInfo->peerMac,
- tdlsSetupReq->peerMac, sizeof(tSirMacAddr)) ;
- tdlsSetupReqCmd->command = eSmeCommandTdlsLinkSetup ;
- tdlsSetupReqCmd->u.tdlsCmd.size = sizeof(tTdlsLinkSetupReqCmdinfo) ;
- smePushCommand(pMac, tdlsSetupReqCmd, FALSE) ;
- status = eHAL_STATUS_SUCCESS ;
- }
- }
-
- return status ;
-}
-/*
- * TDLS request API, called from HDD to enable TDLS link teardown request
- * in SME/CSR and send message to PE to trigger TDLS link teardown procedure.
- */
-eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId,
- tCsrTdlsTeardownRequest *tdlsTeardownReq)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- tSmeCmd *tdlsTeardownReqCmd ;
- eHalStatus status = eHAL_STATUS_FAILURE ;
-
- if(tdlsTeardownReq)
- {
- tdlsTeardownReqCmd = csrGetCommandBuffer(pMac) ;
-
- if(tdlsTeardownReqCmd)
- {
- tTdlsLinkTeardownCmdinfo *teardownCmdInfo =
- &tdlsTeardownReqCmd->u.tdlsCmd.u.tdlsLinkTeardownCmdInfo ;
-
- tdlsTeardownReqCmd->sessionId = sessionId;
-
- vos_mem_copy(teardownCmdInfo->peerMac,
- tdlsTeardownReq->peerMac, sizeof(tSirMacAddr)) ;
- tdlsTeardownReqCmd->command = eSmeCommandTdlsLinkTear ;
- tdlsTeardownReqCmd->u.tdlsCmd.size =
- sizeof(tTdlsLinkTeardownCmdinfo) ;
- smePushCommand(pMac, tdlsTeardownReqCmd, FALSE) ;
- status = eHAL_STATUS_SUCCESS ;
- }
- }
-
- return status ;
-}
-
-#endif
/*
* TDLS messages sent to PE .
@@ -683,9 +568,6 @@ eHalStatus csrTdlsProcessDelSta( tpAniSirGlobal pMac, tSmeCmd *cmd )
eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd)
{
eSmeCommandType cmdType = cmd->command ;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- tTdlsCmd tdlsCmd = cmd->u.tdlsCmd ;
-#endif
tANI_BOOLEAN status = eANI_BOOLEAN_TRUE;
switch(cmdType)
{
@@ -725,122 +607,6 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd)
}
}
break;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- case eSmeCommandTdlsDiscovery:
- {
- tTdlsDisReqCmdinfo *disReqCmdInfo = &tdlsCmd.u.tdlsDisReqCmdInfo ;
- tSirTdlsDisReq *disReq = NULL ;
- tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId );
-
- disReq = vos_mem_malloc(sizeof(tSirTdlsDisReq));
- if ( NULL == disReq )
- status = eHAL_STATUS_FAILURE;
- else
- status = eHAL_STATUS_SUCCESS;
-
- if(!HAL_STATUS_SUCCESS( status ) )
- {
- smsLog( pMac, LOGE, "dis Req alloc failed " );
- VOS_ASSERT(0) ;
- break ;
- }
- disReq->sessionId = cmd->sessionId;
- disReq->transactionId = 0; /* TODO ? */
- disReq->reqType = disReqCmdInfo->tdlsDisType ;
- vos_mem_copy( disReq->bssid, pSession->pConnectBssDesc->bssId,
- sizeof (tSirMacAddr));
- vos_mem_copy( disReq->peerMac,
- disReqCmdInfo->peerMac, sizeof(tSirMacAddr)) ;
- smsLog( pMac, LOGE, "sending TDLS discovery to PE " );
- status = tdlsSendMessage(pMac, eWNI_SME_TDLS_DISCOVERY_START_REQ,
- (void *)disReq , sizeof(tSirTdlsDisReq)) ;
- if(HAL_STATUS_SUCCESS( status ) )
- {
- status = eANI_BOOLEAN_FALSE ;
- }
- /* TODO: Add error handling */
-
- break ;
- }
- case eSmeCommandTdlsLinkSetup:
- {
- tTdlsLinkSetupReqCmdinfo *linkSetupReqCmdInfo =
- &tdlsCmd.u.tdlsLinkSetupReqCmdInfo ;
- tSirTdlsSetupReq *setupReq = NULL ;
- tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId );
-
- setupReq = vos_mem_malloc(sizeof(tSirTdlsSetupReq));
- if ( NULL == setupReq )
- status = eHAL_STATUS_FAILURE;
- else
- status = eHAL_STATUS_SUCCESS;
-
-
- if(!HAL_STATUS_SUCCESS( status ) )
- {
- smsLog( pMac, LOGE, "dis Req alloc failed " );
- VOS_ASSERT(0) ;
- break ;
- }
- setupReq->sessionId = cmd->sessionId;
- setupReq->transactionId = 0; /* TODO ? */
-
- vos_mem_copy( setupReq->bssid, pSession->pConnectBssDesc->bssId,
- sizeof (tSirMacAddr));
- vos_mem_copy( setupReq->peerMac,
- linkSetupReqCmdInfo->peerMac, sizeof(tSirMacAddr)) ;
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("sending TDLS link setup to PE "));
- status = tdlsSendMessage(pMac, eWNI_SME_TDLS_LINK_START_REQ,
- (void *)setupReq , sizeof(tSirTdlsSetupReq) ) ;
-
- if(HAL_STATUS_SUCCESS( status ) )
- {
- status = eANI_BOOLEAN_FALSE ;
- }
- /* TODO: Add error handling */
- break ;
- }
- case eSmeCommandTdlsLinkTear:
- {
- tTdlsLinkTeardownCmdinfo *linkTeardownCmdInfo =
- &tdlsCmd.u.tdlsLinkTeardownCmdInfo ;
- tSirTdlsTeardownReq *teardownReq = NULL ;
- tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId );
-
- teardownReq = vos_mem_malloc(sizeof(tSirTdlsTeardownReq));
- if ( NULL == teardownReq )
- status = eHAL_STATUS_FAILURE;
- else
- status = eHAL_STATUS_SUCCESS;
-
- if(!HAL_STATUS_SUCCESS( status ) )
- {
- smsLog( pMac, LOGE, "teardown Req alloc failed " );
- VOS_ASSERT(0) ;
- break ;
- }
- teardownReq->sessionId = cmd->sessionId;
- teardownReq->transactionId = 0; /* TODO ? */
-
- vos_mem_copy( teardownReq->bssid, pSession->pConnectBssDesc->bssId,
- sizeof (tSirMacAddr));
- vos_mem_copy( &teardownReq->peerMac,
- linkTeardownCmdInfo->peerMac, sizeof(tSirMacAddr)) ;
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("teardown request..")) ;
- status = tdlsSendMessage(pMac, eWNI_SME_TDLS_TEARDOWN_REQ,
- (void *)teardownReq , sizeof(tSirTdlsTeardownReq)) ;
-
- if(HAL_STATUS_SUCCESS( status ) )
- {
- status = eANI_BOOLEAN_FALSE ;
- }
- /* TODO: Add error handling */
- break ;
- }
-#endif
default:
{
/* TODO: Add defualt handling */
@@ -907,137 +673,6 @@ eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd )
return status;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * Find specific TDLS peer (based on peer MAC address).
- */
-tCsrTdlsPeerLinkinfo *findTdlsPeer(tpAniSirGlobal pMac,
- tDblLinkList *peerList, tSirMacAddr peerMac)
-{
- tListElem *pEntry = NULL ;
- tCsrTdlsPeerLinkinfo *peerLinkInfo = NULL ;
- tSirTdlsPeerInfo *peerInfo = NULL ;
-
- pEntry = csrLLPeekHead( peerList, LL_ACCESS_LOCK );
- while(pEntry)
- {
- peerLinkInfo = GET_BASE_ADDR( pEntry, tCsrTdlsPeerLinkinfo,
- tdlsPeerStaLink) ;
- peerInfo = &peerLinkInfo->tdlsDisPeerInfo ;
-
- if ( vos_mem_compare( (tANI_U8 *)peerInfo->peerMac,
- (tANI_U8 *) peerMac, sizeof(tSirMacAddr)) )
- {
- break ;
- }
-
- pEntry = csrLLNext( peerList, pEntry, LL_ACCESS_LOCK) ;
- }
-
- return ((pEntry) ? peerLinkInfo: NULL) ;
-}
-/*
- * Delete TDLD peer info, called from TDLS teardown request.
- */
-static eHalStatus tdlsDeleteTdlsPeerInfo(tpAniSirGlobal pMac,
- tSirMacAddr peerMac)
-{
- tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ;
- tCsrTdlsPeerLinkinfo *peerInfo =
- findTdlsPeer(pMac, &disInfo->tdlsPotentialPeerList, peerMac) ;
- eHalStatus status = eHAL_STATUS_FAILURE ;
-
- if((csrLLRemoveEntry(&disInfo->tdlsPotentialPeerList,
- &peerInfo->tdlsPeerStaLink, LL_ACCESS_NOLOCK)))
- {
- vos_mem_free((void *)peerInfo) ;
- status = eHAL_STATUS_SUCCESS;
-
- }
-
- return status ;
-}
-
-/*
- * UPDATE TDLS peer state to TDLS LINK STATE, this will be called after
- * link is successfully setup with TDLS Peer.
- */
-static eHalStatus tdlsUpdateTdlsPeerState(tpAniSirGlobal pMac,
- tSirMacAddr peerMac,tANI_U8 state )
-{
- tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ;
- tCsrTdlsPeerLinkinfo *peerLinkInfo =
- findTdlsPeer(pMac, &disInfo->tdlsPotentialPeerList, peerMac) ;
- eHalStatus status = eHAL_STATUS_FAILURE ;
-
- if(peerLinkInfo)
- {
- tSirTdlsPeerInfo *peerInfo = &peerLinkInfo->tdlsDisPeerInfo ;
- peerInfo->tdlsPeerState = state ;
- status = eHAL_STATUS_SUCCESS ;
- }
- else
- {
- /* TODO: update this peer found in link setup in peer list */
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("This TDLS client is not in discovery list ") );
- status = eHAL_STATUS_SUCCESS ;
- }
-
- return status ;
-}
-
-/*
- * save TDLS peer info, this will be called after successfull completion
- * of TDLS discovery procedure.
- */
-static eHalStatus tdlsSaveTdlsPeerInfo(tpAniSirGlobal pMac,
- tSirTdlsPeerInfo *disPeerInfo)
-{
- tCsrTdlsPeerLinkinfo *peerInfo = NULL ;
- tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ;
- eHalStatus status = eHAL_STATUS_FAILURE ;
- /*
- * Ok, allocate memory for peer info here
- * we allocate memory for each peer here and free his memory
- * at the time the peer node is getting deleted, possible case is
- * teardown
- */
- peerInfo = vos_mem_malloc(sizeof(tCsrTdlsPeerLinkinfo));
- if ( NULL = peerInfo )
- status = eHAL_STATUS_FAILURE;
- else
- status = eHAL_STATUS_SUCCESS;
-
- /*
- * go ahead and copy peerInfo and insert this node info discovery rsp
- * database.
- */
- if (HAL_STATUS_SUCCESS(status))
- {
- vos_mem_set( &peerInfo->tdlsDisPeerInfo,
- sizeof(tSirTdlsPeerInfo), 0);
- vos_mem_copy( &peerInfo->tdlsDisPeerInfo, disPeerInfo,
- sizeof(tSirTdlsPeerInfo));
-
- /*
- * update TDLS client count to indicate there is tdls client
- * in tdls potential peer list.
- */
- disInfo->tdlsPeerCount++ ;
-
- /*
- * finally insert this tdls peer info into tdls potential peer list
- */
- csrLLInsertTail( &disInfo->tdlsPotentialPeerList,
- &peerInfo->tdlsPeerStaLink, LL_ACCESS_LOCK );
- }
-
- return status ;
-
-}
-
-#endif
/*
* TDLS Message processor, will be called after TDLS message recieved from
* PE
@@ -1142,152 +777,6 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType,
csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsLinkEstablish);
break;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- case eWNI_SME_TDLS_DISCOVERY_START_RSP:
- {
- /* remove pending eSmeCommandTdlsDiscovery command */
- csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsDiscovery) ;
- }
- /* fall through .. */
- case eWNI_SME_TDLS_DISCOVERY_START_IND:
- {
- tSirTdlsDisRsp *disRsp = (tSirTdlsDisRsp *)pMsgBuf ;
-
- if(eSIR_SME_SUCCESS == disRsp->statusCode)
- {
- tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ;
- tANI_U16 disStaCount = disRsp->numDisSta ;
- tCsrTdlsPeerLinkinfo *peerLinkInfo = NULL ;
- tANI_U8 i = 0 ;
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("DIS START RSP/IND recieved sta count = %d"), disStaCount) ;
- for( ; i < disStaCount ; i++)
- {
- tSirTdlsPeerInfo *peerInfo = &disRsp->tdlsDisPeerInfo[i] ;
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("SME, peer MAC: "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(peerInfo->peerMac));
-
- peerLinkInfo = findTdlsPeer(pMac,
- &disInfo->tdlsPotentialPeerList,
- peerInfo->peerMac) ;
-
- if(NULL == peerLinkInfo)
- {
- /* update discovery data base, if this is new entry */
- tdlsSaveTdlsPeerInfo(pMac, peerInfo) ;
- }
- else
- {
- /* update RSSI of existing peer */
- tSirTdlsPeerInfo *newPeerInfo =
- &peerLinkInfo->tdlsDisPeerInfo ;
- newPeerInfo->tdlsPeerRssi = peerInfo->tdlsPeerRssi ;
- }
- }
- if(0 == i)
- {
- smsLog( pMac, LOGW, "there is no tdls client \
- discovered .." ) ;
- }
- }
- else
- {
- smsLog( pMac, LOGW, "there is no tdls client discovered .." );
- }
- /* Now free the memory for this message */
- break ;
- }
- case eWNI_SME_TDLS_LINK_START_RSP:
- {
- /* remove pending eSmeCommandTdlsLinkSetup command */
- csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsLinkSetup) ;
- }
- /* fall through .. */
- case eWNI_SME_TDLS_LINK_START_IND:
- {
- tSirTdlsLinksetupRsp *linkSetupRsp =
- (tSirTdlsLinksetupRsp *) pMsgBuf ;
-
- if(eSIR_SME_SUCCESS == linkSetupRsp->statusCode)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("Link setup for Peer "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(linkSetupRsp->peerMac));
-
- tdlsUpdateTdlsPeerState(pMac, linkSetupRsp->peerMac,
- TDLS_LINK_SETUP_STATE) ;
- }
- else
- {
- smsLog( pMac, LOGW, "failure receieved in link setup .." );
- }
- break ;
- }
-
- case eWNI_SME_TDLS_TEARDOWN_RSP:
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("TEARDOWN RSP from PE ")) ;
- /* remove pending eSmeCommandTdlsLinkTear command */
- csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsLinkTear) ;
- }
- /* fall through .. */
- case eWNI_SME_TDLS_TEARDOWN_IND:
- {
- tSirTdlsTeardownRsp *linkTearRsp =
- (tSirTdlsTeardownRsp *) pMsgBuf ;
- if(eSIR_SME_SUCCESS == linkTearRsp->statusCode)
- {
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("Teardown peer MAC = "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(linkTearRsp->peerMac));
- tdlsDeleteTdlsPeerInfo(pMac, linkTearRsp->peerMac) ;
- }
- else
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("failure receieved in Teardown .." ));
- }
- break ;
- }
- case eWNI_SME_ADD_TDLS_PEER_IND:
- {
- tSirTdlsPeerInd *peerInd = (tSirTdlsPeerInd *) pMsgBuf ;
- vos_mem_copy( &roamInfo.peerMac, peerInd->peerMac,
- sizeof(tSirMacAddr)) ;
- roamInfo.staId = peerInd->staId ;
- roamInfo.ucastSig = peerInd->ucastSig ;
- roamInfo.bcastSig = peerInd->bcastSig ;
- /*
- * register peer with TL, we have to go through HDD as this is
- * the only way to register any STA with TL.
- */
- csrRoamCallCallback(pMac, peerInd->sessionId, &roamInfo, 0,
- eCSR_ROAM_TDLS_STATUS_UPDATE,
- eCSR_ROAM_RESULT_ADD_TDLS_PEER);
- break ;
-
- }
- case eWNI_SME_DELETE_TDLS_PEER_IND:
- {
- tSirTdlsPeerInd *peerInd = (tSirTdlsPeerInd *) pMsgBuf ;
- vos_mem_copy( &roamInfo.peerMac, peerInd->peerMac,
- sizeof(tSirMacAddr)) ;
- roamInfo.staId = peerInd->staId ;
- /*
- * register peer with TL, we have to go through HDD as this is
- * the only way to register any STA with TL.
- */
- csrRoamCallCallback(pMac, peerInd->sessionId, &roamInfo, 0,
- eCSR_ROAM_TDLS_STATUS_UPDATE,
- eCSR_ROAM_RESULT_DELETE_TDLS_PEER);
- break ;
-
- }
-#endif
case eWNI_SME_TDLS_SHOULD_DISCOVER:
{
tSirTdlsEventNotify *tevent = (tSirTdlsEventNotify *) pMsgBuf;
diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c
index e7a15c8c5895..50bc4c9e45aa 100644
--- a/CORE/SME/src/pmc/pmcApi.c
+++ b/CORE/SME/src/pmc/pmcApi.c
@@ -3917,6 +3917,31 @@ eHalStatus pmcOffloadStopUapsd(tHalHandle hHal, tANI_U32 sessionId)
return status;
}
+tANI_BOOLEAN pmcOffloadIsStaInPowerSave(tpAniSirGlobal pMac, tANI_U32 sessionId)
+{
+ tpPsOffloadPerSessionInfo pmc;
+ tANI_BOOLEAN StainPS = TRUE;
+
+ if(!CSR_IS_SESSION_VALID(pMac, sessionId))
+ {
+ smsLog(pMac, LOGE, FL("Invalid SessionId %x"), sessionId);
+ return TRUE;
+ }
+
+ /* Check whether the give session is Infra and in Connected State */
+ if(!csrIsConnStateConnectedInfra(pMac, sessionId))
+ {
+ smsLog(pMac, LOG1, FL("Sta not infra/connected state %d"), sessionId);
+ return TRUE;
+ }
+ else
+ {
+ pmc = &pMac->pmcOffloadInfo.pmc[sessionId];
+ StainPS = (pmc->pmcState == BMPS) || (pmc->pmcState == UAPSD);
+ return StainPS;
+ }
+}
+
tANI_BOOLEAN pmcOffloadProcessCommand(tpAniSirGlobal pMac, tSmeCmd *pCommand)
{
eHalStatus status = eHAL_STATUS_SUCCESS;
@@ -4236,11 +4261,13 @@ tANI_BOOLEAN pmcOffloadIsPowerSaveEnabled (tHalHandle hHal, tANI_U32 sessionId,
}
eHalStatus PmcOffloadEnableDeferredStaModePowerSave(tHalHandle hHal,
- tANI_U32 sessionId)
+ tANI_U32 sessionId,
+ tANI_BOOLEAN isReassoc)
{
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
tpPsOffloadPerSessionInfo pmc = &pMac->pmcOffloadInfo.pmc[sessionId];
eHalStatus status = eHAL_STATUS_FAILURE;
+ tANI_U32 timer_value;
if (!pMac->pmcOffloadInfo.staPsEnabled)
{
@@ -4249,8 +4276,16 @@ eHalStatus PmcOffloadEnableDeferredStaModePowerSave(tHalHandle hHal,
return status;
}
+ if(isReassoc)
+ timer_value = AUTO_PS_ENTRY_TIMER_DEFAULT_VALUE;
+ else
+ timer_value = AUTO_DEFERRED_PS_ENTRY_TIMER_DEFAULT_VALUE;
+
+ pmcLog(pMac, LOG1, FL("Start AutoPsTimer for %d isReassoc:%d "),
+ timer_value, isReassoc);
+
status = pmcOffloadStartAutoStaPsTimer(pMac, sessionId,
- AUTO_DEFERRED_PS_ENTRY_TIMER_DEFAULT_VALUE);
+ timer_value);
if (eHAL_STATUS_SUCCESS == status)
{
smsLog(pMac, LOG2,
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index ecd52436694e..011453c6be4e 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -1104,13 +1104,6 @@ sme_process_cmd:
case eSmeCommandTdlsAddPeer:
case eSmeCommandTdlsDelPeer:
case eSmeCommandTdlsLinkEstablish:
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- case eSmeCommandTdlsDiscovery:
- case eSmeCommandTdlsLinkSetup:
- case eSmeCommandTdlsLinkTear:
- case eSmeCommandTdlsEnterUapsd:
- case eSmeCommandTdlsExitUapsd:
-#endif
{
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
"sending TDLS Command 0x%x to PE", pCommand->command);
@@ -2538,16 +2531,6 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg)
case eWNI_SME_TDLS_SHOULD_DISCOVER:
case eWNI_SME_TDLS_SHOULD_TEARDOWN:
case eWNI_SME_TDLS_PEER_DISCONNECTED:
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- case eWNI_SME_TDLS_DISCOVERY_START_RSP:
- case eWNI_SME_TDLS_DISCOVERY_START_IND:
- case eWNI_SME_TDLS_LINK_START_RSP:
- case eWNI_SME_TDLS_LINK_START_IND:
- case eWNI_SME_TDLS_TEARDOWN_RSP:
- case eWNI_SME_TDLS_TEARDOWN_IND:
- case eWNI_SME_ADD_TDLS_PEER_IND:
- case eWNI_SME_DELETE_TDLS_PEER_IND:
-#endif
{
if (pMsg->bodyptr)
{
@@ -6376,88 +6359,6 @@ VOS_STATUS sme_GetWcnssHardwareVersion(tHalHandle hHal,
#ifdef FEATURE_WLAN_WAPI
-/* ---------------------------------------------------------------------------
- \fn sme_RoamSetBKIDCache
- \brief The SME API exposed to HDD to allow HDD to provde SME the BKID
- candidate list.
- \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after
- it is opened (by calling halOpen).
- \param pBKIDCache - caller allocated buffer point to an array of tBkidCacheInfo
- \param numItems - a variable that has the number of tBkidCacheInfo allocated
- when retruning, this is the number of items put into pBKIDCache
- \return eHalStatus - when fail, it usually means the buffer allocated is not
- big enough and pNumItems has the number of tBkidCacheInfo.
- ---------------------------------------------------------------------------*/
-eHalStatus sme_RoamSetBKIDCache( tHalHandle hHal, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache,
- tANI_U32 numItems )
-{
- eHalStatus status = eHAL_STATUS_FAILURE;
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-
- status = sme_AcquireGlobalLock( &pMac->sme );
- if ( HAL_STATUS_SUCCESS( status ) )
- {
- status = csrRoamSetBKIDCache( pMac, sessionId, pBKIDCache, numItems );
- sme_ReleaseGlobalLock( &pMac->sme );
- }
-
- return (status);
-}
-
-/* ---------------------------------------------------------------------------
- \fn sme_RoamGetBKIDCache
- \brief The SME API exposed to HDD to allow HDD to request SME to return its
- BKID cache.
- \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after
- it is opened (by calling halOpen).
- \param pNum - caller allocated memory that has the space of the number of
- tBkidCacheInfo as input. Upon returned, *pNum has the needed number of entries
- in SME cache.
- \param pBkidCache - Caller allocated memory that contains BKID cache, if any,
- upon return
- \return eHalStatus - when fail, it usually means the buffer allocated is not
- big enough.
- ---------------------------------------------------------------------------*/
-eHalStatus sme_RoamGetBKIDCache(tHalHandle hHal, tANI_U32 *pNum,
- tBkidCacheInfo *pBkidCache)
-{
- eHalStatus status = eHAL_STATUS_FAILURE;
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-
- status = sme_AcquireGlobalLock( &pMac->sme );
- if ( HAL_STATUS_SUCCESS( status ) )
- {
- smsLog(pMac, LOGE, FL(" !!!!!!!!!!!!!!!!!!SessionId is hardcoded"));
- status = csrRoamGetBKIDCache( pMac, 0, pNum, pBkidCache );
- sme_ReleaseGlobalLock( &pMac->sme );
- }
-
- return (status);
-}
-
-/* ---------------------------------------------------------------------------
- \fn sme_RoamGetNumBKIDCache
- \brief The SME API exposed to HDD to allow HDD to request SME to return the
- number of BKID cache entries.
- \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after
- it is opened (by calling halOpen).
- \return tANI_U32 - the number of BKID cache entries.
- ---------------------------------------------------------------------------*/
-tANI_U32 sme_RoamGetNumBKIDCache(tHalHandle hHal, tANI_U32 sessionId)
-{
- eHalStatus status = eHAL_STATUS_FAILURE;
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- tANI_U32 numBkidCache = 0;
-
- status = sme_AcquireGlobalLock( &pMac->sme );
- if ( HAL_STATUS_SUCCESS( status ) )
- {
- numBkidCache = csrRoamGetNumBKIDCache( pMac, sessionId );
- sme_ReleaseGlobalLock( &pMac->sme );
- }
-
- return (numBkidCache);
-}
/* ---------------------------------------------------------------------------
\fn sme_ScanGetBKIDCandidateList
@@ -11229,107 +11130,6 @@ v_BOOL_t sme_IsPmcBmps(tHalHandle hHal)
return (BMPS == pmcGetPmcState(hHal));
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*
- * SME API to start TDLS discovery Procedure
- */
-VOS_STATUS sme_StartTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tCsrTdlsDisRequest disReq = {{0}} ;
- vos_mem_copy(disReq.peerMac, peerMac, sizeof(tSirMacAddr)) ;
- status = csrTdlsDiscoveryReq(hHal, sessionId, &disReq) ;
-
- return status ;
-
-}
-
-/*
- * Process TDLS discovery results
- */
-v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal,
- tSmeTdlsDisResult *disResult, v_U8_t listType)
-{
- tCsrTdlsPeerLinkinfo *peerLinkInfo = NULL ;
- tSirTdlsPeerInfo *peerInfo = NULL ;
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ;
- tDblLinkList *peerList = &disInfo->tdlsPotentialPeerList ;
- tListElem *pEntry = NULL ;
- v_U8_t peerCnt = 0 ;
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- ("TDLS peer count = %d"),disInfo->tdlsPeerCount ) ;
- pEntry = csrLLPeekHead( peerList, LL_ACCESS_LOCK );
- while(pEntry)
- {
- peerLinkInfo = GET_BASE_ADDR( pEntry, tCsrTdlsPeerLinkinfo,
- tdlsPeerStaLink) ;
- peerInfo = &peerLinkInfo->tdlsDisPeerInfo ;
-
- switch(listType)
- {
- case TDLS_SETUP_LIST:
- {
- if(TDLS_LINK_SETUP_STATE == peerInfo->tdlsPeerState)
- {
- vos_mem_copy(disResult[peerCnt].tdlsPeerMac,
- peerInfo->peerMac, sizeof(tSirMacAddr));
- disResult[peerCnt].tdlsPeerRssi = peerInfo->tdlsPeerRssi ;
- peerCnt++ ;
- }
- break ;
- }
- case TDLS_DIS_LIST:
- {
- vos_mem_copy(disResult[peerCnt].tdlsPeerMac,
- peerInfo->peerMac, sizeof(tSirMacAddr));
- disResult[peerCnt].tdlsPeerRssi = peerInfo->tdlsPeerRssi ;
- peerCnt++ ;
- break ;
- }
- default:
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- ("unknown list type ")) ;
- break ;
- }
- }
-
- pEntry = csrLLNext( peerList, pEntry, LL_ACCESS_LOCK) ;
- }
-
- return peerCnt ;
-
-}
-
-/*
- * SME API to start TDLS link setup Procedure.
- */
-VOS_STATUS sme_StartTdlsLinkSetupReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tCsrTdlsSetupRequest setupReq = {{0}} ;
- vos_mem_copy(setupReq.peerMac, peerMac, sizeof(tSirMacAddr)) ;
- status = csrTdlsSetupReq(hHal, sessionId, &setupReq) ;
- return status ;
-
-}
-
-/*
- * SME API to start TDLS link Teardown Procedure.
- */
-VOS_STATUS sme_StartTdlsLinkTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac)
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tCsrTdlsTeardownRequest teardownReq = {{0}} ;
- vos_mem_copy(teardownReq.peerMac, peerMac, sizeof(tSirMacAddr)) ;
- status = csrTdlsTeardownReq(hHal, sessionId, &teardownReq) ;
- return status ;
-
-}
-
-#endif /* FEATURE_WLAN_TDLS */
eHalStatus sme_UpdateDfsSetting(tHalHandle hHal, tANI_U8 fUpdateEnableDFSChnlScan)
{
@@ -12394,7 +12194,8 @@ eHalStatus sme_PsOffloadDisablePowerSave (tHalHandle hHal, tANI_U32 sessionId)
}
eHalStatus sme_PsOffloadEnableDeferredPowerSave (tHalHandle hHal,
- tANI_U32 sessionId)
+ tANI_U32 sessionId,
+ tANI_BOOLEAN isReassoc)
{
eHalStatus status = eHAL_STATUS_FAILURE;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
@@ -12402,7 +12203,8 @@ eHalStatus sme_PsOffloadEnableDeferredPowerSave (tHalHandle hHal,
status = sme_AcquireGlobalLock(&pMac->sme);
if (HAL_STATUS_SUCCESS( status ))
{
- status = PmcOffloadEnableDeferredStaModePowerSave(hHal, sessionId);
+ status = PmcOffloadEnableDeferredStaModePowerSave(hHal, sessionId,
+ isReassoc);
sme_ReleaseGlobalLock( &pMac->sme );
}
return (status);
@@ -13326,6 +13128,26 @@ tANI_BOOLEAN sme_staInMiddleOfRoaming(tHalHandle hHal, tANI_U8 sessionId)
return ret;
}
+/* ---------------------------------------------------------------------------
+ \fn sme_PsOffloadIsStaInPowerSave
+ \brief This function returns TRUE if STA is in power save
+ \param hHal - HAL handle for device
+ \param sessionId - Session Identifier
+ \return TRUE or FALSE
+ -------------------------------------------------------------------------*/
+tANI_BOOLEAN sme_PsOffloadIsStaInPowerSave(tHalHandle hHal, tANI_U8 sessionId)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tANI_BOOLEAN ret = FALSE;
+
+ if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
+ ret = pmcOffloadIsStaInPowerSave(pMac, sessionId);
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
+ return ret;
+}
+
VOS_STATUS sme_UpdateDSCPtoUPMapping( tHalHandle hHal,
sme_QosWmmUpType *dscpmapping,
v_U8_t sessionId )
diff --git a/CORE/SME/src/sme_common/sme_Trace.c b/CORE/SME/src/sme_common/sme_Trace.c
index b8751c0d0749..0295cbfc9468 100644
--- a/CORE/SME/src/sme_common/sme_Trace.c
+++ b/CORE/SME/src/sme_common/sme_Trace.c
@@ -187,13 +187,13 @@ static void smeTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord,
{
if (TRACE_CODE_SME_COMMAND == pRecord->code)
{
- smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex,
+ smsLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x)", recIndex,
pRecord->time, pRecord->session, "SME COMMAND:",
smeTraceGetCommandString(pRecord->data), pRecord->data );
}
else
{
- smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex,
+ smsLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x)", recIndex,
pRecord->time, pRecord->session, "RX HDD MSG:",
smeTraceGetRxMsgString(pRecord->code), pRecord->data );
}
diff --git a/CORE/SVC/external/wlan_nlink_common.h b/CORE/SVC/external/wlan_nlink_common.h
index ae7151e1c645..d3d38ecf6df9 100644
--- a/CORE/SVC/external/wlan_nlink_common.h
+++ b/CORE/SVC/external/wlan_nlink_common.h
@@ -132,6 +132,7 @@ struct wlan_status_data {
uint8_t is_on;
uint8_t vdev_id;
uint8_t is_connected;
+ int8_t rssi;
uint8_t ssid_len;
uint8_t country_code[WLAN_SVC_COUNTRY_CODE_LEN];
uint32_t vdev_mode;
diff --git a/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c b/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c
index 3732d26fce90..5914c733e2cd 100644
--- a/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c
+++ b/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c
@@ -263,7 +263,8 @@ static void ptt_proc_quarky_msg(tAniNlHdr *wnl, tAniHdr *wmsg, int radio)
ptt_sock_send_msg_to_app(wmsg, 0, ANI_NL_MSG_PUMAC, wnl->nlh.nlmsg_pid);
break;
case PTT_MSG_FTM_CMDS_TYPE:
- wlan_hdd_process_ftm_cmd(pAdapterHandle,wnl);
+ PTT_TRACE(VOS_TRACE_LEVEL_ERROR, "%s: unsupported FTM msg cmd [0x%X], length [0x%X]\n",
+ __func__, ani_msg_type, be16_to_cpu(wmsg->length ));
break;
default:
PTT_TRACE(VOS_TRACE_LEVEL_ERROR, "%s: Unknown ANI Msg [0x%X], length [0x%X]\n",
diff --git a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
index 5f46c879764e..ec3bd6f99a87 100644
--- a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
+++ b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
@@ -197,53 +197,6 @@ sysBbtProcessMessageCore(tpAniSirGlobal pMac, tpSirMsgQ pMsg, tANI_U32 type,
}
else if (type == SIR_MAC_DATA_FRAME)
{
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- /*
- * if we reached here, probably this frame can be TDLS frame.
- */
- v_U16_t ethType = 0 ;
- v_U8_t *mpduHdr = NULL ;
- v_U8_t *ethTypeOffset = NULL ;
-
- /*
- * Peek into payload and extract ethtype.
- * In TDLS we can recieve TDLS frames with MAC HEADER (802.11) and also
- * without MAC Header (Particularly TDLS action frames on direct link.
- */
- mpduHdr = (v_U8_t *)WDA_GET_RX_MAC_HEADER(pBd) ;
-
-#define SIR_MAC_ETH_HDR_LEN (14)
- if(0 != WDA_GET_RX_FT_DONE(pBd))
- {
- ethTypeOffset = mpduHdr + SIR_MAC_ETH_HDR_LEN - sizeof(ethType) ;
- }
- else
- {
- ethTypeOffset = mpduHdr + WDA_GET_RX_MPDU_HEADER_LEN(pBd)
- + RFC1042_HDR_LENGTH ;
- }
-
- ethType = GET_BE16(ethTypeOffset) ;
- if(ETH_TYPE_89_0d == ethType)
- {
-
- VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- ("TDLS Data Frame \n")) ;
- /* Post the message to PE Queue */
- PELOGE(sysLog(pMac, LOGE, FL("posting to TDLS frame to lim\n"));)
-
- ret = (tSirRetStatus) limPostMsgApi(pMac, pMsg);
- if (ret != eSIR_SUCCESS)
- {
- PELOGE(sysLog(pMac, LOGE, FL("posting to LIM2 failed, \
- ret %d\n"), ret);)
- goto fail;
- }
- else
- return eSIR_SUCCESS;
- }
- /* fall through if ethType != TDLS, which is error case */
-#endif
#ifdef FEATURE_WLAN_ESE
PELOGW(sysLog(pMac, LOGW, FL("IAPP Frame...\n")););
//Post the message to PE Queue
diff --git a/CORE/TL/src/wlan_qct_tl.c b/CORE/TL/src/wlan_qct_tl.c
index a1c62f176d59..fa47eabc5a14 100644
--- a/CORE/TL/src/wlan_qct_tl.c
+++ b/CORE/TL/src/wlan_qct_tl.c
@@ -345,25 +345,6 @@ WLANTL_GetEtherType
v_U16_t * usEtherType
);
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/* FIXME_MUST: during TDLS integration to main/latest, WLANTL_GetEtherType() conflicts.
-But there is difference. existing WLANTL_GetEtherType() expects vosDataBuff->offset points to MPDU Header,
-wherease TDLS expect vosDataBuff->offset should still points to RxBd.
-So far, data frmae stripped RxBD and passed to data frame handler.
-(RxBd should not be stripped in case TDLS, because it will be eventually routed to mgmt packet
-handler, where RX BD should be preserved)
-To avoid breaking existing functionality, for now, I temporarily rename to
-WLANTL_GetEtherType_2(). Eventually this function should be removed and merged to WLANTL_GetEtherType()
-*/
-static VOS_STATUS
-WLANTL_GetEtherType_2
-(
- v_U8_t * aucBDHeader,
- vos_pkt_t * vosDataBuff,
- v_U8_t ucMPDUHLen,
- v_U16_t * usEtherType
-);
-#endif
#ifdef FEATURE_WLAN_WAPI
/*---------------------------------------------------------------------------
* Adding a global variable to be used when doing frame translation in TxAuth
@@ -5476,10 +5457,6 @@ WLANTL_RxFrames
static v_U8_t first_data_pkt_arrived;
v_U32_t uDPUSig;
v_U16_t usPktLen;
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- v_U8_t ucMPDUHLen = 0 ;
- v_U16_t usEtherType = 0;
-#endif
v_BOOL_t bForwardIAPPwithLLC = VOS_FALSE;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
@@ -5580,13 +5557,6 @@ WLANTL_RxFrames
continue;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- if ( WLANTL_IS_DATA_FRAME(ucFrmType))
- {
- ucMPDUHLen = (v_U8_t)WDA_GET_RX_MPDU_HEADER_LEN(pvBDHeader);
- WLANTL_GetEtherType_2(pvBDHeader, vosTempBuff, ucMPDUHLen, &usEtherType) ;
- }
-#endif
vos_pkt_get_packet_length(vosTempBuff, &usPktLen);
/*---------------------------------------------------------------------
@@ -5594,9 +5564,6 @@ WLANTL_RxFrames
---------------------------------------------------------------------*/
if ( WLANTL_IS_MGMT_FRAME(ucFrmType)
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
- || (WLANTL_IS_TDLS_FRAME(usEtherType))
-#endif
)
{
TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH,
@@ -12147,83 +12114,6 @@ VOS_STATUS WLANTL_GetSoftAPStatistics(v_PVOID_t pAdapter, WLANTL_TRANSFER_STA_TY
return vosStatus;
}
-#ifdef FEATURE_WLAN_TDLS_INTERNAL
-/*==========================================================================
- FUNCTION WLANTL_GetEtherType_2
-
- DESCRIPTION Extract Ether type information from the BD
-
- DEPENDENCIES NONE
-
- PARAMETERS in aucBDHeader - BD header
- in vosDataBuff - data buffer
- in ucMPDUHLen - MPDU header length
- out pUsEtherType - pointer to Ethertype
-
- RETURN VALUE VOS_STATUS_SUCCESS : if the EtherType is successfully extracted
- VOS_STATUS_FAILURE : if the EtherType extraction failed and
- the packet was dropped
-
- SIDE EFFECTS NONE
-
-============================================================================*/
-static VOS_STATUS WLANTL_GetEtherType_2
-(
- v_U8_t * aucBDHeader,
- vos_pkt_t * vosDataBuff,
- v_U8_t ucMPDUHLen,
- v_U16_t * pUsEtherType
-)
-{
- v_U8_t ucOffset;
- v_U16_t usEtherType = *pUsEtherType;
- v_SIZE_t usLLCSize = sizeof(usEtherType);
- VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
- //v_U8_t ucLLCHeader;
- v_U8_t ucMPDUHOffset ;
- /*------------------------------------------------------------------------
- Check if LLC is present - if not, TL is unable to determine type
- ------------------------------------------------------------------------*/
- //ucMPDUHOffset = (v_U8_t)WLANHAL_RX_BD_GET_MPDU_H_OFFSET(aucBDHeader) ;
- //ucLLCHeader = (v_U8_t)WLANHAL_RX_BD_GET_LLC(aucBDHeader);
- ucMPDUHOffset = (v_U8_t)WDA_GET_RX_MPDU_HEADER_OFFSET(aucBDHeader);
-
- if ( VOS_TRUE == WDA_IS_RX_LLC_PRESENT(aucBDHeader) )
- {
- ucOffset = ucMPDUHOffset + WLANTL_802_3_HEADER_LEN - sizeof(usEtherType);
- }
- else
- {
- ucOffset = WLANHAL_RX_BD_HEADER_SIZE + ucMPDUHLen
- + WLANTL_LLC_PROTO_TYPE_OFFSET;
- }
-
- /*------------------------------------------------------------------------
- Extract LLC type
- ------------------------------------------------------------------------*/
- vosStatus = vos_pkt_extract_data( vosDataBuff, ucOffset,
- (v_PVOID_t)&usEtherType, &usLLCSize);
-
- /* TODO: Do it in better way */
- if(vos_be16_to_cpu(usEtherType) == 0x890d)
- {
- VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
- ("TDLS frame llc %x"), vos_be16_to_cpu(usEtherType)) ;
- }
-
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH,
- "WLAN TL:Ether type retrieved before endianess conv: %d",
- usEtherType);
-
- usEtherType = vos_be16_to_cpu(usEtherType);
- *pUsEtherType = usEtherType;
-
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH,
- "WLAN TL:Ether type retrieved: %d", usEtherType);
-
- return vosStatus;
-}
-#endif /* FEATURE_WLAN_TDLS */
/*===============================================================================
FUNCTION WLANTL_IsReplayPacket
diff --git a/CORE/VOSS/inc/vos_trace.h b/CORE/VOSS/inc/vos_trace.h
index 27d85c4c79e8..c7bd2ddbaf64 100644
--- a/CORE/VOSS/inc/vos_trace.h
+++ b/CORE/VOSS/inc/vos_trace.h
@@ -110,7 +110,7 @@ typedef enum
------------------------------------------------------------------------*/
typedef struct svosTraceRecord
{
- v_U32_t time;
+ v_U64_t time;
v_U8_t module;
v_U8_t code;
v_U8_t session;
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
index a6d5752ff6d8..0575dcc64878 100644
--- a/CORE/VOSS/src/vos_nvitem.c
+++ b/CORE/VOSS/src/vos_nvitem.c
@@ -739,7 +739,10 @@ const sRegulatoryChannel * regChannels = nvDefaults.tables.regDomains[0].channel
/*----------------------------------------------------------------------------
Function Definitions and Documentation
* -------------------------------------------------------------------------*/
-VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len);
+VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len)
+{
+ return VOS_STATUS_SUCCESS;
+}
/**------------------------------------------------------------------------
\brief vos_nv_init() - initialize the NV module
The \a vos_nv_init() initializes the NV module. This read the binary
diff --git a/CORE/VOSS/src/vos_trace.c b/CORE/VOSS/src/vos_trace.c
index bef18b6ce9cf..3f8057ec64c9 100644
--- a/CORE/VOSS/src/vos_trace.c
+++ b/CORE/VOSS/src/vos_trace.c
@@ -61,7 +61,7 @@
#include <vos_trace.h>
#include <aniGlobal.h>
#include <wlan_logging_sock_svc.h>
-
+#include "adf_os_time.h"
/*--------------------------------------------------------------------------
Preprocessor definitions and constants
------------------------------------------------------------------------*/
@@ -529,7 +529,7 @@ void vos_trace(v_U8_t module, v_U8_t code, v_U8_t session, v_U32_t data)
rec->code = code;
rec->session = session;
rec->data = data;
- rec->time = vos_timer_get_system_time();
+ rec->time = adf_get_boottime();
rec->module = module;
gvosTraceData.numSinceLastDump ++;
spin_unlock_irqrestore(&ltraceLock, flags);
diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h
index ffaaf68aa239..c692075e1675 100644
--- a/CORE/WDA/inc/legacy/halMsgApi.h
+++ b/CORE/WDA/inc/legacy/halMsgApi.h
@@ -534,6 +534,7 @@ typedef struct
tANI_U8 reassocReq; // Set only during roaming reassociation
tANI_U16 chainMask;
tANI_U16 smpsMode;
+ tANI_U8 dot11_mode;
} tAddBssParams, * tpAddBssParams;
typedef struct
@@ -1022,6 +1023,8 @@ typedef struct
tANI_U8 isDfsChannel;
tANI_U8 vhtCapable;
+
+ tANI_U8 dot11_mode;
}tSwitchChannelParams, *tpSwitchChannelParams;
typedef struct CSAOffloadParams {