From 2d1d558a10d581202ac0e740c58165d7ffe095ed Mon Sep 17 00:00:00 2001 From: Kalikinkar dhara Date: Tue, 29 Jul 2014 13:02:06 -0700 Subject: qca_cld: Fix for Vendor specific IE for IBSS Need to append the vendor IE in beacon and probe resp buffer, in case vendor ie is not present. If vendor IE is present then, modify the info for the specific vendor IE. Change-Id: I8c95a749379296895c19105201e80fadcde2f6eb CRs-fixed: 701389 --- CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 32 +++++++------------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index 6c067fd3305c..ce84634d0364 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -6400,8 +6400,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 +6419,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 +6456,6 @@ limProcessModifyAddIEs(tpAniSirGlobal pMac, tANI_U32 *pMsg) pModifyAddIEs->modifyIE.ieIDLen, pModifyAddIEs->updateType); } - } else { -- cgit v1.2.3 From 22e0f9d26c7cc9dd07331e345ea6d4ccd086209f Mon Sep 17 00:00:00 2001 From: Nirav Shah Date: Fri, 25 Jul 2014 17:40:01 +0530 Subject: WMA: Make peer_count in wma per vdev Make peer_count in wma per vdev to make sure that wma_remove_peer it consider peer_count of its own vdev. Change-Id: I6c8fcce88883850033a0a438c87aed11b5e8cbcf CRs-FIXED: 700012 --- CORE/SERVICES/WMA/wma.c | 18 +++++++++--------- CORE/SERVICES/WMA/wma.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 611e4ee8defb..ad7f01c9fa75 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; } diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index fbe7e53fda98..ce74cdab16ad 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; -- cgit v1.2.3 From 3be2968a1be0ade1b120186ff6d7dc62a5f7ea6a Mon Sep 17 00:00:00 2001 From: Dhanashri Atre Date: Fri, 1 Aug 2014 15:34:30 -0700 Subject: wlan: qca_cld: Modify rx field flags in ring config for packet log Do not set the control, management, null, ppdu start and ppdu end flags in the ring config message when packet log is enabled. The control, management and null frames when received over HTT with status HTT_RX_IND_MPDU_STATUS_MGMT_CTRL are currently always dropped. The ppdu start and end flags are only used in monitor mode which is not supported on CLD. Change-Id: I82cb1a71153f0502b3251849e880650b712fb12d CRs-Fixed: 702799 --- CORE/CLD_TXRX/HTT/htt_h2t.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 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(); -- cgit v1.2.3 From af4d22df62cdde1a9f6a9470525d3367d6304096 Mon Sep 17 00:00:00 2001 From: Kiran Kumar Lokere Date: Mon, 4 Aug 2014 16:00:44 -0700 Subject: qcacld: Fix issues observed in static code analysis. Fix issues observed in static code analysis. Change-Id: I7bb30b9c791826fd02d05c8edbde2507ca813d96 CRs-Fixed: 704236 --- CORE/HDD/src/wlan_hdd_assoc.c | 5 +++ CORE/SERVICES/WMA/wma.c | 3 +- CORE/SME/inc/csrInternal.h | 6 --- CORE/SME/inc/sme_Api.h | 42 -------------------- CORE/SME/src/ccm/ccmApi.c | 15 ++++++- CORE/SME/src/csr/csrApiRoam.c | 66 ------------------------------- CORE/SME/src/sme_common/sme_Api.c | 82 --------------------------------------- 7 files changed, 21 insertions(+), 198 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 4da1261cd401..c845ed746462 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, diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index ad7f01c9fa75..4e45694c7367 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -25995,12 +25995,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/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h index 44036818851c..7bb111095c89 100644 --- a/CORE/SME/inc/csrInternal.h +++ b/CORE/SME/inc/csrInternal.h @@ -1436,15 +1436,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/sme_Api.h b/CORE/SME/inc/sme_Api.h index b7bc0127a5c3..7570188e4fae 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -1863,48 +1863,6 @@ eHalStatus sme_RoamRegisterCallback(tHalHandle hHal, void *pContext); #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 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/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index ecd52436694e..9af1531fa196 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -6376,88 +6376,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 -- cgit v1.2.3 From 94f323e190c5079482251ce0be40cd73bc7ed104 Mon Sep 17 00:00:00 2001 From: Xiaochang Duan Date: Fri, 1 Aug 2014 16:50:49 -0700 Subject: qcacld: fix the issue in number of connected TDLS peers When P-UAPSD is enabled and connected peer number is 1, TDLS teardown is triggered during scan. The root cause is that the connected peer's link status is not updated properly during NL80211_TDLS_DISABLE_LINK timeout handling: the connected TDLS peer's link status is changed to eTDLS_LINK_IDLE and this prevents the peer number from being properly updated later. Fix this issue by removing the code that updates the link status in the NL80211_TDLS_DISABLE_LINK timeout handling. Change-Id: Ifd7266e470674a06656895508d753636561f719e CRs-Fixed: 695477 --- CORE/HDD/src/wlan_hdd_cfg80211.c | 1 - 1 file changed, 1 deletion(-) diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index a2f478f6a268..ea7b8bb1c749 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -12548,7 +12548,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; -- cgit v1.2.3 From 932f6c307a82fd3ea4a4e8d24bff9f7dfb5f3553 Mon Sep 17 00:00:00 2001 From: Kumar Anand Date: Tue, 22 Jul 2014 15:04:30 -0700 Subject: wlan: remove obsolete pronto FTM code Rome CLD driver does not use the FTM code leveraged from integrated solution (Prima/Pronto). Removing all the obsolete Pronto FTM code from CLD driver. CRs-Fixed: 698257 Change-Id: I2a7aa543bd8b266928673fde6c4138e75d3470ca --- CORE/HDD/inc/wlan_hdd_ftm.h | 155 -- CORE/HDD/src/wlan_hdd_ftm.c | 4588 +--------------------------------- CORE/SVC/src/ptt/wlan_ptt_sock_svc.c | 3 +- CORE/VOSS/src/vos_nvitem.c | 5 +- 4 files changed, 37 insertions(+), 4714 deletions(-) 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/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 @@ -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); @@ -1680,36 +837,13 @@ 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,3609 +967,12 @@ 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 -) +#if defined(QCA_WIFI_FTM) +#if defined(LINUX_QCMBR) +static int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_data) { - 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) -{ - int ret = 0; - qcmbr_queue_t *qcmbr_buf = NULL; + int ret = 0; + qcmbr_queue_t *qcmbr_buf = NULL; switch (pqcmbr_data->cmd) { case ATH_XIOCTL_UNIFIED_UTF_CMD: { @@ -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(); - - 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); + cmd_data->len = len; + vos_mem_copy(cmd_data->data, data, len); - 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/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/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 -- cgit v1.2.3 From 1e8578fa5359d31bcf3c2727d61a425d41aee31f Mon Sep 17 00:00:00 2001 From: Manikandaraja Venkatachalapathy Date: Sun, 3 Aug 2014 19:40:17 -0700 Subject: qcacld: Add session id to debugfs wowl pattern debugfs wowl add pattern struct needs to populate a sessionid field similar to iwpriv add pattern Change-Id: Iee5a5059e76ce0560131dd37cd12abc527f218f9 CRs-Fixed: 703770 --- CORE/HDD/src/wlan_hdd_wowl.c | 2 ++ 1 file changed, 2 insertions(+) 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)", -- cgit v1.2.3 From c14a3f4694f4d3a1b0294a9c91cfc523ccbe0731 Mon Sep 17 00:00:00 2001 From: William Seto Date: Mon, 4 Aug 2014 11:29:43 -0700 Subject: wlan: Remove unused code under compile flags TDLS_INTERNAL & TDLS_NEGATIVE In CLD, we have TDLS code under below compile flags which is coming from Volans and is not used in Rome (and neither in Pronto). So, removing code that depends on these two flags being defined. Change-Id: Icd86fa0384e58ae2ffa90cd4e5164a7ba86ec24c CRs-Fixed: 701378 --- CORE/HDD/src/wlan_hdd_tdls.c | 15 - CORE/MAC/inc/aniGlobal.h | 24 - CORE/MAC/inc/sirApi.h | 160 -- CORE/MAC/inc/wniApi.h | 14 - CORE/MAC/src/include/sirParams.h | 5 - CORE/MAC/src/pe/include/limGlobal.h | 7 - CORE/MAC/src/pe/lim/limProcessActionFrame.c | 4 - CORE/MAC/src/pe/lim/limProcessMessageQueue.c | 114 -- CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 256 --- CORE/MAC/src/pe/lim/limProcessTdls.c | 2565 +----------------------- CORE/MAC/src/pe/lim/limSendMessages.c | 100 - CORE/MAC/src/pe/lim/limSendMessages.h | 5 - CORE/MAC/src/pe/lim/limTimerUtils.c | 33 - CORE/MAC/src/pe/lim/limTimerUtils.h | 5 - CORE/MAC/src/pe/lim/limTypes.h | 30 - CORE/MAC/src/pe/lim/limUtils.h | 6 - CORE/SME/inc/csrApi.h | 19 - CORE/SME/inc/csrInternal.h | 18 - CORE/SME/inc/smeInside.h | 30 - CORE/SME/inc/smeInternal.h | 7 - CORE/SME/inc/sme_Api.h | 13 - CORE/SME/src/csr/csrTdlsProcess.c | 511 ----- CORE/SME/src/sme_common/sme_Api.c | 118 -- CORE/SYS/legacy/src/system/src/sysEntryFunc.c | 47 - CORE/TL/src/wlan_qct_tl.c | 110 - 25 files changed, 56 insertions(+), 4160 deletions(-) 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/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 ; @@ -1058,9 +1037,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/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/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 @@ -1230,24 +1206,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); @@ -1288,11 +1246,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) case eWNI_SME_TDLS_ADD_STA_REQ: 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 @@ -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/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index ce84634d0364..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) @@ -6031,17 +5786,6 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) case eWNI_SME_TDLS_LINK_ESTABLISH_REQ: 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); 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,1949 +2269,101 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs, return ; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL /* - * find Peer in setup link list. + * Add STA for TDLS setup procedure */ - -tANI_U8 limTdlsFindLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac, - tLimTdlsLinkSetupPeer **setupPeer) +static tSirRetStatus limTdlsSetupAddSta(tpAniSirGlobal pMac, + tSirTdlsAddStaReq *pAddStaReq, + tpPESession psessionEntry) { - tLimTdlsLinkSetupInfo *setupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ; - tLimTdlsLinkSetupPeer *linkSetupList = setupInfo->tdlsLinkSetupList ; - tANI_U8 checkNode = TDLS_NODE_NOT_FOUND ; + tpDphHashNode pStaDs = NULL ; + tSirRetStatus status = eSIR_SUCCESS ; + tANI_U16 aid = 0 ; - while (linkSetupList != NULL) + pStaDs = dphLookupHashEntry(pMac, pAddStaReq->peerMac, &aid, + &psessionEntry->dph.dphHashTable); + if(NULL == pStaDs) { - if (vos_mem_compare((tANI_U8 *) peerMac, - (tANI_U8 *) linkSetupList->peerMac, - sizeof(tSirMacAddr)) ) + aid = limAssignPeerIdx(pMac, psessionEntry) ; + + if( !aid ) { - checkNode = TDLS_NODE_FOUND ; - *setupPeer = linkSetupList ; - break ; + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + ("%s: No more free AID for peer " MAC_ADDRESS_STR), + __func__, MAC_ADDR_ARRAY(pAddStaReq->peerMac)) ; + return eSIR_FAILURE; } - 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 ; + /* Set the aid in peerAIDBitmap as it has been assigned to TDLS peer */ + SET_PEER_AID_BITMAP(psessionEntry->peerAIDBitmap, aid); - 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)); + VOS_TRACE(VOS_MODULE_ID_PE, TDLS_DEBUG_LOG_LEVEL, + ("limTdlsSetupAddSta: Aid = %d, for peer =" MAC_ADDRESS_STR), + aid, MAC_ADDR_ARRAY(pAddStaReq->peerMac)); + pStaDs = dphGetHashEntry(pMac, aid, &psessionEntry->dph.dphHashTable); - if (vos_mem_compare((tANI_U8 *) peerMac, - (tANI_U8 *) &peerInfo->peerMac, sizeof(tSirMacAddr)) ) + if (pStaDs) { - break ; + (void) limDelSta(pMac, pStaDs, false /*asynchronous*/, psessionEntry); + limDeleteDphHashEntry(pMac, pStaDs->staAddr, aid, psessionEntry); } - 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)); + pStaDs = dphAddHashEntry(pMac, pAddStaReq->peerMac, aid, + &psessionEntry->dph.dphHashTable) ; - if (peerInfo->tdlsPeerState == state) + if(NULL == pStaDs) { - break ; + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + (" add hash entry failed")) ; + VOS_ASSERT(0) ; + return eSIR_FAILURE; } - 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 - */ -static tSirRetStatus limTdlsSetupAddSta(tpAniSirGlobal pMac, - tSirTdlsAddStaReq *pAddStaReq, - tpPESession psessionEntry) -{ - tpDphHashNode pStaDs = NULL ; - tSirRetStatus status = eSIR_SUCCESS ; - tANI_U16 aid = 0 ; - - pStaDs = dphLookupHashEntry(pMac, pAddStaReq->peerMac, &aid, - &psessionEntry->dph.dphHashTable); - if(NULL == pStaDs) - { - aid = limAssignPeerIdx(pMac, psessionEntry) ; - - if( !aid ) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("%s: No more free AID for peer " MAC_ADDRESS_STR), - __func__, MAC_ADDR_ARRAY(pAddStaReq->peerMac)) ; - return eSIR_FAILURE; - } - - /* Set the aid in peerAIDBitmap as it has been assigned to TDLS peer */ - SET_PEER_AID_BITMAP(psessionEntry->peerAIDBitmap, aid); - - VOS_TRACE(VOS_MODULE_ID_PE, TDLS_DEBUG_LOG_LEVEL, - ("limTdlsSetupAddSta: Aid = %d, for peer =" MAC_ADDRESS_STR), - aid, MAC_ADDR_ARRAY(pAddStaReq->peerMac)); - 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, pAddStaReq->peerMac, aid, - &psessionEntry->dph.dphHashTable) ; - - if(NULL == pStaDs) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - (" add hash entry failed")) ; - VOS_ASSERT(0) ; - return eSIR_FAILURE; - } - } - - limTdlsUpdateHashNodeInfo(pMac, pStaDs, pAddStaReq, psessionEntry) ; - - pStaDs->staType = STA_ENTRY_TDLS_PEER ; - - status = limAddSta(pMac, pStaDs, (pAddStaReq->tdlsAddOper == TDLS_OPER_UPDATE) ? true: false, psessionEntry); - - if(eSIR_SUCCESS != status) - { - /* should not fail */ - VOS_ASSERT(0) ; - } - return status ; -} - -/* - * Del STA, after Link is teardown or discovery response sent on direct link - */ -static tpDphHashNode limTdlsDelSta(tpAniSirGlobal pMac, tSirMacAddr peerMac, - tpPESession psessionEntry) -{ - tSirRetStatus status = eSIR_SUCCESS ; - tANI_U16 peerIdx = 0 ; - tpDphHashNode pStaDs = NULL ; - - pStaDs = dphLookupHashEntry(pMac, peerMac, &peerIdx, - &psessionEntry->dph.dphHashTable) ; - - if(pStaDs) - { - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("DEL STA peer MAC: "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(pStaDs->staAddr)); - - VOS_TRACE(VOS_MODULE_ID_PE, TDLS_DEBUG_LOG_LEVEL, - ("limTdlsDelSta: STA type = %x, sta idx = %x"),pStaDs->staType, - 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 ; - -} + limTdlsUpdateHashNodeInfo(pMac, pStaDs, pAddStaReq, psessionEntry) ; -/* - * 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 ; + pStaDs->staType = STA_ENTRY_TDLS_PEER ; - mmhMsg.type = msgType ; + status = limAddSta(pMac, pStaDs, (pAddStaReq->tdlsAddOper == TDLS_OPER_UPDATE) ? true: false, psessionEntry); - setupRspMsg = vos_mem_malloc(sizeof(tSirTdlsLinksetupRsp)); - if ( NULL == setupRspMsg ) + if(eSIR_SUCCESS != status) { + /* should not fail */ 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 ; + return status ; } /* - * Once Link is setup with PEER, send Add STA ind to SME + * Del STA, after Link is teardown or discovery response sent on direct link */ -static eHalStatus limSendSmeTdlsAddPeerInd(tpAniSirGlobal pMac, - tANI_U8 sessionId, tDphHashNode *pStaDs, tANI_U8 status) +static tpDphHashNode limTdlsDelSta(tpAniSirGlobal pMac, tSirMacAddr peerMac, + tpPESession psessionEntry) { - 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 ; - -} + tSirRetStatus status = eSIR_SUCCESS ; + tANI_U16 peerIdx = 0 ; + tpDphHashNode pStaDs = NULL ; -/* - * 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 ; + pStaDs = dphLookupHashEntry(pMac, peerMac, &peerIdx, + &psessionEntry->dph.dphHashTable) ; - peerInd = vos_mem_malloc(sizeof(tSirTdlsPeerInd)); - if ( NULL == peerInd ) + if(pStaDs) { - 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 ; -} + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, + ("DEL STA peer MAC: "MAC_ADDRESS_STR), + MAC_ADDR_ARRAY(pStaDs->staAddr)); -/* - * 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 ; + VOS_TRACE(VOS_MODULE_ID_PE, TDLS_DEBUG_LOG_LEVEL, + ("limTdlsDelSta: STA type = %x, sta idx = %x"),pStaDs->staType, + pStaDs->staIndex) ; - 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; + status = limDelSta(pMac, pStaDs, false, psessionEntry) ; } - 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 ; + return pStaDs ; } -/* - * 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..89213a2616bd 100644 --- a/CORE/MAC/src/pe/lim/limSendMessages.c +++ b/CORE/MAC/src/pe/lim/limSendMessages.c @@ -895,106 +895,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 @@ -72,11 +72,6 @@ enum eLIM_PERIODIC_PROBE_REQ_TIMER, #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, 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/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 7bb111095c89..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 diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h index 319f032dfe72..8428dd622070 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; @@ -311,14 +289,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 7570188e4fae..40660fcfd3c7 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -3362,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); /* 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/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 9af1531fa196..2d385ad5fecf 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) { @@ -11147,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) { 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 -- cgit v1.2.3 From 9b2e8472ee306256d212619e7706bbc4457de3f5 Mon Sep 17 00:00:00 2001 From: "Kanchanapally, Vidyullatha" Date: Wed, 30 Jul 2014 18:40:17 +0530 Subject: qcacld: Do not allow suspend if not in power save. When cfg80211 suspend is called immediately after roaming, the host misses posting ENTER_BMPS request to firmware since the AutoPSEnableTimer of 5 seconds may not have expired by then. This issue is now addressed by not allowing suspend if STA after connection is not in power save state and by reducing the AutoPSEnableTimer value to 1 second in case of roaming. Change-Id: I78fc77cba699220f1bd4e4f5fc2f5e7e18b40e91 CRs-Fixed: 703065 --- CORE/HDD/src/wlan_hdd_assoc.c | 7 +++++-- CORE/HDD/src/wlan_hdd_cfg80211.c | 13 +++++++++++++ CORE/SME/inc/pmcApi.h | 3 ++- CORE/SME/inc/smeInside.h | 1 + CORE/SME/inc/sme_Api.h | 12 +++++++++++- CORE/SME/src/pmc/pmcApi.c | 39 +++++++++++++++++++++++++++++++++++++-- CORE/SME/src/sme_common/sme_Api.c | 26 ++++++++++++++++++++++++-- 7 files changed, 93 insertions(+), 8 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index c845ed746462..5603c8cb6b78 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -2224,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 @@ -3042,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: @@ -3204,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, @@ -3220,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; diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index ea7b8bb1c749..b120375b1b04 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -13446,6 +13446,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/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 8428dd622070..dcd8f044dd52 100644 --- a/CORE/SME/inc/smeInside.h +++ b/CORE/SME/inc/smeInside.h @@ -212,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 diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 40660fcfd3c7..ff60e304de3a 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -3565,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); @@ -3777,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/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 2d385ad5fecf..011453c6be4e 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -12194,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); @@ -12202,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); @@ -13126,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 ) -- cgit v1.2.3 From 974bf54ed4ae8a4b66514ec51130df2f3708adad Mon Sep 17 00:00:00 2001 From: Ganesh Kondabattini Date: Fri, 1 Aug 2014 15:33:40 +0530 Subject: qcacld: Send ENTER BMPS RESP and EXIT BMPS RESP in failure cases In functions pmmOffloadEnterBmpsReqHandler and pmmOffloadExitBmpsReqHandler, the lim is not sending the response back to SME in failure cases. This can lead to SME active command queue stuck. This change also has improvements in vos_trace for debugging purpose. Change-Id: Ibfef515a44d3ee17cc336ba9c6250e9569e203ed CRs-Fixed: 697637 --- CORE/HDD/src/wlan_hdd_trace.c | 2 +- CORE/MAC/src/pe/lim/limTrace.c | 38 ++++++++++++++++++------------------- CORE/MAC/src/pe/pmm/pmmApi.c | 14 +++++++++++++- CORE/SME/src/sme_common/sme_Trace.c | 4 ++-- CORE/VOSS/inc/vos_trace.h | 2 +- CORE/VOSS/src/vos_trace.c | 4 ++-- 6 files changed, 38 insertions(+), 26 deletions(-) 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/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/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/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/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_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 #include #include - +#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(<raceLock, flags); -- cgit v1.2.3 From 904069e2162e52dfc49fa40e2c3c8d685a57217e Mon Sep 17 00:00:00 2001 From: Yuanyuan Liu Date: Wed, 16 Jul 2014 16:16:51 -0700 Subject: qcacld: Implement two new requirements for LPSS Implement two requirement for LPSS: 1. Report all scanable interface to LPSS 2. Add rssi in wlan status information Change-Id: Ie0d9c569a2993a4789c0c28e05615869df53af30 CRs-Fixed: 695572 --- CORE/HDD/inc/wlan_hdd_main.h | 8 ++++++++ CORE/HDD/src/wlan_hdd_cfg80211.c | 36 ++++++++++++++++------------------- CORE/HDD/src/wlan_hdd_early_suspend.c | 2 +- CORE/HDD/src/wlan_hdd_main.c | 36 ++++++++++++++++++++++++++++++++++- CORE/SVC/external/wlan_nlink_common.h | 1 + 5 files changed, 61 insertions(+), 22 deletions(-) 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_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index b120375b1b04..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; 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_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/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; -- cgit v1.2.3 From 2df668cddd9462576e2ea40cf47896990a7b0716 Mon Sep 17 00:00:00 2001 From: Prashanth Bhatta Date: Tue, 5 Aug 2014 11:50:27 -0700 Subject: qcacld: ipa: Changes to use CNSS APIs Add changes to use CNSS APIs for IPA module without which compilation fails on some of the platforms. Change-Id: Ib394750c22c97ac8cbb8bb4205b9ca2553673a35 CRs-fixed: 704934 --- CORE/HDD/src/wlan_hdd_ipa.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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); -- cgit v1.2.3 From 10c4ca4fea9427b600bab9772288ff0f2b69ed75 Mon Sep 17 00:00:00 2001 From: Krishna Kumaar Natarajan Date: Tue, 29 Jul 2014 18:25:44 -0700 Subject: qcacld: wlan: Fix to set correct phy mode As of now, if we have no channel bonding and the AP is 11G only we still set the phy mode to 11NGHT20. This change set will fix the incorrect phy mode setting by passing the dot11_mode to WMA layer Change-Id: Ia65c75aa911a316d091a9ece779b3376c7ee0602 CRs-Fixed: 701474 --- CORE/MAC/src/pe/lim/limAssocUtils.c | 6 +++++ CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c | 3 +++ CORE/MAC/src/pe/lim/limSendMessages.c | 1 + CORE/SERVICES/WMA/wma.c | 35 +++++++++++++++++++++----- CORE/SERVICES/WMA/wma.h | 1 + CORE/WDA/inc/legacy/halMsgApi.h | 3 +++ 6 files changed, 43 insertions(+), 6 deletions(-) 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/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/limSendMessages.c b/CORE/MAC/src/pe/lim/limSendMessages.c index 89213a2616bd..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) diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 4e45694c7367..39c2767c185b 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -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 diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index ce74cdab16ad..cd4e977c57f8 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -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/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 { -- cgit v1.2.3 From 7bc114ebf0915564b4c7a50f38bafab5af9232a5 Mon Sep 17 00:00:00 2001 From: Srinivas Girigowda Date: Tue, 5 Aug 2014 08:38:26 -0700 Subject: qcacld: Fix invalid argument error in connect This is the regression issue introduced by prior Change-Id: Icd29a5bf917a2cc360352336618a57c61d235403. The change removed the NULL sanity check for pRoamProfile. This pointer is never NULL, but the else case for the IF check is not removed. With this else case is associated with incorrect IF check, hence it returns Invalid argument. Fix this by removing else case Change-Id: Ib050e92306241f6ec37f929e0c6b5d3cc6362188 CRs-Fixed: 704761 --- CORE/HDD/src/wlan_hdd_assoc.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 5603c8cb6b78..11a8218ca028 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -3893,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 -- cgit v1.2.3 From 8f96e6b77a9496bef3fcd1fcbe4ac023df85b071 Mon Sep 17 00:00:00 2001 From: Pitani Venkata Rajesh Kumar Date: Tue, 5 Aug 2014 15:51:57 +0530 Subject: Cafstaging Release 1.0.0.162 Cafstaging Release 1.0.0.162 Change-Id: I05becb866d5e322bbb13533bd4e20b4b13ef97fa CRs-Fixed: 688141 --- CORE/MAC/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 -- cgit v1.2.3