From ba71da4f6cc822763cbd7c2f9542d6ce1a87ef43 Mon Sep 17 00:00:00 2001 From: Sandeep Puligilla Date: Tue, 4 Oct 2016 17:36:32 -0700 Subject: qcacld-3.0: Detect duplicate session open request Detect duplicate session request with same mac address and return failure to requestor. Change-Id: I0155f29e879e1c2a46a8b9efbcaf160353bf9c05 CRs-Fixed: 1072885 --- core/sme/src/csr/csr_api_roam.c | 155 +++++++++++++++++++++------------------- 1 file changed, 83 insertions(+), 72 deletions(-) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 300ce13d1556..fab7f0e48638 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -15340,59 +15340,67 @@ QDF_STATUS csr_process_add_sta_session_command(tpAniSirGlobal pMac, return status; } -QDF_STATUS csr_roam_open_session(tpAniSirGlobal pMac, +QDF_STATUS csr_roam_open_session(tpAniSirGlobal mac_ctx, csr_roam_completeCallback callback, void *pContext, uint8_t *pSelfMacAddr, uint8_t *pbSessionId, uint32_t type, uint32_t subType) { QDF_STATUS status = QDF_STATUS_SUCCESS; - uint32_t i, value = 0; + uint32_t i, value = 0, session_id; union { uint16_t nCfgValue16; tSirMacHTCapabilityInfo htCapInfo; } uHTCapabilityInfo; uint32_t nCfgValue = 0; - tCsrRoamSession *pSession; + tCsrRoamSession *session; *pbSessionId = CSR_SESSION_ID_INVALID; - for (i = 0; i < pMac->sme.max_intf_count; i++) { - sms_log(pMac, LOG1, FL("session:%d active:%d"), i, - pMac->roam.roamSession[i].sessionActive); - if (!CSR_IS_SESSION_VALID(pMac, i)) { - pSession = CSR_GET_SESSION(pMac, i); - if (!pSession) { - sms_log(pMac, LOGE, - FL - ("Session does not exist for interface %d"), + if (QDF_STATUS_SUCCESS == csr_roam_get_session_id_from_bssid(mac_ctx, + (struct qdf_mac_addr *)pSelfMacAddr, + &session_id)) { + sms_log(mac_ctx, LOGE, + FL("Session %d exists with mac address" + MAC_ADDRESS_STR), + session_id, MAC_ADDR_ARRAY(pSelfMacAddr)); + return QDF_STATUS_E_FAILURE; + } + + for (i = 0; i < mac_ctx->sme.max_intf_count; i++) { + sms_log(mac_ctx, LOG1, FL("session:%d active:%d"), i, + mac_ctx->roam.roamSession[i].sessionActive); + if (!CSR_IS_SESSION_VALID(mac_ctx, i)) { + session = CSR_GET_SESSION(mac_ctx, i); + if (!session) { + sms_log(mac_ctx, LOGE, + FL("Session does not exist for interface %d"), i); break; } status = QDF_STATUS_SUCCESS; - pSession->sessionActive = true; - pSession->sessionId = (uint8_t) i; + session->sessionActive = true; + session->sessionId = (uint8_t) i; /* Initialize FT related data structures only in STA mode */ - sme_ft_open(pMac, pSession->sessionId); + sme_ft_open(mac_ctx, session->sessionId); - pSession->callback = callback; - pSession->pContext = pContext; - qdf_mem_copy(&pSession->selfMacAddr, pSelfMacAddr, + session->callback = callback; + session->pContext = pContext; + qdf_mem_copy(&session->selfMacAddr, pSelfMacAddr, sizeof(struct qdf_mac_addr)); *pbSessionId = (uint8_t) i; status = - qdf_mc_timer_init(&pSession->hTimerRoaming, + qdf_mc_timer_init(&session->hTimerRoaming, QDF_TIMER_TYPE_SW, csr_roam_roaming_timer_handler, - &pSession->roamingTimerInfo); + &session->roamingTimerInfo); if (!QDF_IS_STATUS_SUCCESS(status)) { - sms_log(pMac, LOGE, - FL - ("cannot allocate memory for Roaming timer")); + sms_log(mac_ctx, LOGE, + FL("cannot allocate memory for Roaming timer")); break; } /* get the HT capability info */ - if (wlan_cfg_get_int(pMac, WNI_CFG_HT_CAP_INFO, &value) + if (wlan_cfg_get_int(mac_ctx, WNI_CFG_HT_CAP_INFO, &value) != eSIR_SUCCESS) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, @@ -15401,134 +15409,137 @@ QDF_STATUS csr_roam_open_session(tpAniSirGlobal pMac, break; } #ifdef FEATURE_WLAN_BTAMP_UT_RF - status = qdf_mc_timer_init(&pSession->hTimerJoinRetry, + status = qdf_mc_timer_init(&session->hTimerJoinRetry, QDF_TIMER_TYPE_SW, csr_roam_join_retry_timer_handler, - &pSession-> + &session-> joinRetryTimerInfo); if (!QDF_IS_STATUS_SUCCESS(status)) { - sms_log(pMac, LOGE, + sms_log(mac_ctx, LOGE, FL ("cannot allocate memory for join retry timer")); break; } #endif uHTCapabilityInfo.nCfgValue16 = 0xFFFF & value; - pSession->htConfig.ht_rx_ldpc = + session->htConfig.ht_rx_ldpc = uHTCapabilityInfo.htCapInfo.advCodingCap; - pSession->htConfig.ht_tx_stbc = + session->htConfig.ht_tx_stbc = uHTCapabilityInfo.htCapInfo.txSTBC; - pSession->htConfig.ht_rx_stbc = + session->htConfig.ht_rx_stbc = uHTCapabilityInfo.htCapInfo.rxSTBC; - pSession->htConfig.ht_sgi20 = + session->htConfig.ht_sgi20 = uHTCapabilityInfo.htCapInfo.shortGI20MHz; - pSession->htConfig.ht_sgi40 = + session->htConfig.ht_sgi40 = uHTCapabilityInfo.htCapInfo.shortGI40MHz; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_MAX_MPDU_LENGTH, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_MAX_MPDU_LENGTH, &nCfgValue); - pSession->vht_config.max_mpdu_len = nCfgValue; + session->vht_config.max_mpdu_len = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET, &nCfgValue); - pSession->vht_config.supported_channel_widthset = + session->vht_config.supported_channel_widthset = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_LDPC_CODING_CAP, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_LDPC_CODING_CAP, &nCfgValue); - pSession->vht_config.ldpc_coding = nCfgValue; + session->vht_config.ldpc_coding = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_SHORT_GI_80MHZ, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SHORT_GI_80MHZ, &nCfgValue); - pSession->vht_config.shortgi80 = nCfgValue; + session->vht_config.shortgi80 = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ, &nCfgValue); - pSession->vht_config.shortgi160and80plus80 = nCfgValue; + session->vht_config.shortgi160and80plus80 = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_TXSTBC, &nCfgValue); - pSession->vht_config.tx_stbc = nCfgValue; + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_TXSTBC, + &nCfgValue); + session->vht_config.tx_stbc = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_RXSTBC, &nCfgValue); - pSession->vht_config.rx_stbc = nCfgValue; + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_RXSTBC, + &nCfgValue); + session->vht_config.rx_stbc = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_SU_BEAMFORMER_CAP, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SU_BEAMFORMER_CAP, &nCfgValue); - pSession->vht_config.su_beam_former = nCfgValue; + session->vht_config.su_beam_former = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, &nCfgValue); - pSession->vht_config.su_beam_formee = nCfgValue; + session->vht_config.su_beam_formee = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, &nCfgValue); - pSession->vht_config.csnof_beamformer_antSup = + session->vht_config.csnof_beamformer_antSup = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS, &nCfgValue); - pSession->vht_config.num_soundingdim = nCfgValue; + session->vht_config.num_soundingdim = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_MU_BEAMFORMER_CAP, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_MU_BEAMFORMER_CAP, &nCfgValue); - pSession->vht_config.mu_beam_former = nCfgValue; + session->vht_config.mu_beam_former = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_MU_BEAMFORMEE_CAP, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_MU_BEAMFORMEE_CAP, &nCfgValue); - pSession->vht_config.mu_beam_formee = nCfgValue; + session->vht_config.mu_beam_formee = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_TXOP_PS, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_TXOP_PS, &nCfgValue); - pSession->vht_config.vht_txops = nCfgValue; + session->vht_config.vht_txops = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_HTC_VHTC_CAP, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_HTC_VHTC_CAP, &nCfgValue); - pSession->vht_config.htc_vhtcap = nCfgValue; + session->vht_config.htc_vhtcap = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_RX_ANT_PATTERN, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_RX_ANT_PATTERN, &nCfgValue); - pSession->vht_config.rx_antpattern = nCfgValue; + session->vht_config.rx_antpattern = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_TX_ANT_PATTERN, + wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_TX_ANT_PATTERN, &nCfgValue); - pSession->vht_config.tx_antpattern = nCfgValue; + session->vht_config.tx_antpattern = nCfgValue; nCfgValue = 0; - wlan_cfg_get_int(pMac, WNI_CFG_VHT_AMPDU_LEN_EXPONENT, + wlan_cfg_get_int(mac_ctx, + WNI_CFG_VHT_AMPDU_LEN_EXPONENT, &nCfgValue); - pSession->vht_config.max_ampdu_lenexp = nCfgValue; + session->vht_config.max_ampdu_lenexp = nCfgValue; - status = csr_issue_add_sta_for_session_req(pMac, i, + status = csr_issue_add_sta_for_session_req(mac_ctx, i, pSelfMacAddr, type, subType); break; } } - if (pMac->sme.max_intf_count == i) { + if (mac_ctx->sme.max_intf_count == i) { /* No session is available */ - sms_log(pMac, LOGE, + sms_log(mac_ctx, LOGE, "%s: Reached max interfaces: %d! Session creation will fail", - __func__, pMac->sme.max_intf_count); + __func__, mac_ctx->sme.max_intf_count); status = QDF_STATUS_E_RESOURCES; } return status; -- cgit v1.2.3 From ccd00e89a0ff4cbc29980f41f638e7ab532a76f4 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 14:14:45 -0700 Subject: Release 5.1.0.29T Release 5.1.0.29T Change-Id: I94e9f3abe6498420711e832526d003ff2f443bc0 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 d4785941ed5e..34c184099133 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "S" +#define QWLAN_VERSION_EXTRA "T" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29S" +#define QWLAN_VERSIONSTR "5.1.0.29T" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 5d95e631e3248e088f1034a7e53da1c0477c2bca Mon Sep 17 00:00:00 2001 From: "Selvaraj, Sridhar" Date: Wed, 14 Sep 2016 17:00:38 +0530 Subject: qcacld-3.0: Fix consecutive TDLS connection failure after TDLS add sta failure qcacld-2.0 to qcacld-3.0 propagation. Currently, Failure of TDLS add sta is leading to failure of next consecutive tdls connection. Fix is to update the failure info to HDD and return error to supplicant. Change-Id: I0d46a198f2abb87b4a4350b454deb98c5e3b8211 CRs-Fixed: 958534 --- core/hdd/src/wlan_hdd_assoc.c | 2 ++ core/hdd/src/wlan_hdd_tdls.c | 11 +++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index e008534fb224..8810512e169b 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -3634,6 +3634,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { hdd_err("Add Sta failed. status code(=%d)", pRoamInfo->statusCode); + pAdapter->tdlsAddStaStatus = QDF_STATUS_E_FAILURE; + } else { /* * Check if there is available index for this new TDLS diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 6204e72aee8b..eaac53a0a77f 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -3624,7 +3624,7 @@ int wlan_hdd_tdls_add_station(struct wiphy *wiphy, hddTdlsPeer_t *pTdlsPeer; uint16_t numCurrTdlsPeers; unsigned long rc; - long ret; + int ret; int rate_idx; ENTER(); @@ -3763,16 +3763,15 @@ int wlan_hdd_tdls_add_station(struct wiphy *wiphy, (WAIT_TIME_TDLS_ADD_STA)); if (!rc) { - QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, - "%s: timeout waiting for tdls add station indication", - __func__); - return -EPERM; + hdd_err("timeout waiting for tdls add station indication %ld peer link status %u", + rc, pTdlsPeer->link_status); + goto error; } if (QDF_STATUS_SUCCESS != pAdapter->tdlsAddStaStatus) { QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, "%s: Add Station is unsuccessful", __func__); - return -EPERM; + goto error; } return 0; -- cgit v1.2.3 From e9199ab7c701cd5ebd1b6ca184a64242c67bb2c7 Mon Sep 17 00:00:00 2001 From: "Selvaraj, Sridhar" Date: Wed, 14 Sep 2016 17:13:22 +0530 Subject: qcacld-3.0: Fix to send TDLS frames on peer sta index qcacld-2.0 to qcacld-3.0 propagation Currently, After p2p disconnection system role changes to unknown and due to which tx flag uses self station index which would send TDLS frames on self station index thus leading to TDLS connection failure after p2p session teardown. Fix is to use peer station index in tx flag while sending TDLS frames except TDLS discovery response which should go on self station index. Change-Id: I87ea8806a47730b553055e47bb3e7bdf0266b48f CRs-Fixed: 970761 --- core/mac/src/pe/lim/lim_process_tdls.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index 58a0addfb16e..1e87bd405276 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -520,14 +520,16 @@ tSirRetStatus lim_send_tdls_dis_req_frame(tpAniSirGlobal pMac, MAC_ADDR_ARRAY(peer_mac.bytes)); pMac->lim.tdls_frm_session_id = psessionEntry->peSessionId; - qdf_status = wma_tx_frameWithTxComplete(pMac, pPacket, (uint16_t) nBytes, - TXRX_FRM_802_11_DATA, - ANI_TXDIR_TODS, - TID_AC_VI, - lim_tx_complete, pFrame, - lim_mgmt_tdls_tx_complete, - HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME, - smeSessionId, false, 0); + qdf_status = wma_tx_frameWithTxComplete(pMac, pPacket, + (uint16_t) nBytes, + TXRX_FRM_802_11_DATA, + ANI_TXDIR_TODS, + TID_AC_VI, + lim_tx_complete, pFrame, + lim_mgmt_tdls_tx_complete, + HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME | + HAL_USE_PEER_STA_REQUESTED_MASK, + smeSessionId, false, 0); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { pMac->lim.tdls_frm_session_id = NO_SESSION; lim_log(pMac, LOGE, @@ -935,7 +937,8 @@ wma_tx_frame_with_tx_complete_send(tpAniSirGlobal pMac, void *pPacket, tid, lim_tx_complete, pFrame, lim_mgmt_tdls_tx_complete, - HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME, + HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME + | HAL_USE_PEER_STA_REQUESTED_MASK, smeSessionId, flag, 0); } #else @@ -954,7 +957,8 @@ wma_tx_frame_with_tx_complete_send(tpAniSirGlobal pMac, void *pPacket, tid, lim_tx_complete, pFrame, lim_mgmt_tdls_tx_complete, - HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME, + HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME + | HAL_USE_PEER_STA_REQUESTED_MASK, smeSessionId, false, 0); } #endif -- cgit v1.2.3 From 405ba71ae747eadc292eee02a5c2e9ff4d44fa47 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 15:52:49 -0700 Subject: Release 5.1.0.29U Release 5.1.0.29U Change-Id: Ia7f974a488976d3a1d88332a9fee0d6525b6289a 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 34c184099133..beff24740296 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "T" +#define QWLAN_VERSION_EXTRA "U" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29T" +#define QWLAN_VERSIONSTR "5.1.0.29U" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 2df78cc9c3867c072712cd5844984cf859ad09e7 Mon Sep 17 00:00:00 2001 From: Rajeev Kumar Date: Thu, 6 Oct 2016 16:45:12 -0700 Subject: qcacld-3.0: Clean up obsolete WMA power API wma_set_qpower_force_sleep WMA qpower API wma_set_qpower_force_sleep is obsolete and is no longer used. Clean up unused API wma_set_qpower_force_sleep. Change-Id: Iad32be5e11c345a542b8f8f6660987a4aff837c7 CRs-Fixed: 1075289 --- core/wma/src/wma_power.c | 113 ----------------------------------------------- 1 file changed, 113 deletions(-) diff --git a/core/wma/src/wma_power.c b/core/wma/src/wma_power.c index db0ba9243088..4c139f7b186a 100644 --- a/core/wma/src/wma_power.c +++ b/core/wma/src/wma_power.c @@ -715,119 +715,6 @@ static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma, return QDF_STATUS_SUCCESS; } -/** - * wma_set_qpower_force_sleep() - set qpower params in fw - * @wma: wma handle - * @vdev_id: vdev id - * @enable: value - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, - uint8_t enable) -{ - QDF_STATUS ret; - uint32_t cfg_data_val = 0; - /* get mac to acess CFG data base */ - struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); - uint32_t pspoll_count = WMA_DEFAULT_MAX_PSPOLL_BEFORE_WAKE; - - WMA_LOGE("Set QPower Force(1)/Normal(0) Sleep vdevId %d val %d", - vdev_id, enable); - - if (NULL == mac) { - WMA_LOGE("%s: Unable to get PE context", __func__); - return QDF_STATUS_E_NOMEM; - } - - /* Get Configured Ps Poll Count */ - if (wlan_cfg_get_int(mac, WNI_CFG_MAX_PS_POLL, - &cfg_data_val) != eSIR_SUCCESS) { - QDF_TRACE(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_ERROR, - "Failed to get value for WNI_CFG_MAX_PS_POLL"); - } - if (cfg_data_val) { - pspoll_count = (uint32_t) cfg_data_val; - } - - /* Enable QPower */ - ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, - WMI_STA_PS_ENABLE_QPOWER, 1); - - if (QDF_IS_STATUS_ERROR(ret)) { - WMA_LOGE("Enable QPower Failed vdevId %d", vdev_id); - return ret; - } - WMA_LOGD("QPower Enabled vdevId %d", vdev_id); - - /* Set the Wake Policy to WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD */ - ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, - WMI_STA_PS_PARAM_RX_WAKE_POLICY, - WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD); - - if (QDF_IS_STATUS_ERROR(ret)) { - WMA_LOGE("Setting wake policy to pspoll/uapsd Failed vdevId %d", - vdev_id); - return ret; - } - WMA_LOGD("Wake policy set to to pspoll/uapsd vdevId %d", vdev_id); - - if (enable) { - /* Set the Tx Wake Threshold */ - ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, - WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD, - WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER); - - if (QDF_IS_STATUS_ERROR(ret)) { - WMA_LOGE("Setting TxWake Threshold vdevId %d", vdev_id); - return ret; - } - WMA_LOGD("TxWake Threshold set to TX_WAKE_THRESHOLD_NEVER %d", - vdev_id); - } - - /* Set the QPower Ps Poll Count */ - ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, - WMI_STA_PS_PARAM_QPOWER_PSPOLL_COUNT, - pspoll_count); - - if (QDF_IS_STATUS_ERROR(ret)) { - WMA_LOGE("Set QPower Ps Poll Count Failed vdevId %d ps poll cnt %d", - vdev_id, pspoll_count); - return ret; - } - WMA_LOGD("Set QPower Ps Poll Count vdevId %d ps poll cnt %d", - vdev_id, pspoll_count); - - /* Enable Sta Mode Power save */ - ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, true); - - if (QDF_IS_STATUS_ERROR(ret)) { - WMA_LOGE("Enable Sta Mode Ps Failed vdevId %d", vdev_id); - return ret; - } - - /* Set Listen Interval */ - if (wlan_cfg_get_int(mac, WNI_CFG_LISTEN_INTERVAL, - &cfg_data_val) != eSIR_SUCCESS) { - QDF_TRACE(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_ERROR, - "Failed to get value for WNI_CFG_LISTEN_INTERVAL"); - cfg_data_val = POWERSAVE_DEFAULT_LISTEN_INTERVAL; - } - - ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, - WMI_VDEV_PARAM_LISTEN_INTERVAL, - cfg_data_val); - if (QDF_IS_STATUS_ERROR(ret)) { - /* Even it fails continue Fw will take default LI */ - WMA_LOGE("Failed to Set Listen Interval vdevId %d", vdev_id); - } - WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d", - vdev_id, cfg_data_val); - - return QDF_STATUS_SUCCESS; -} - /** * wma_get_qpower_config() - get qpower configuration * @wma: WMA handle -- cgit v1.2.3 From e62940e9d65f84deddfd9a70cf63ea90a7e2d69e Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 17:35:01 -0700 Subject: Release 5.1.0.29V Release 5.1.0.29V Change-Id: I372c04ea7e873dc5216225c827d02757a998cb08 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 beff24740296..b917a7540656 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "U" +#define QWLAN_VERSION_EXTRA "V" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29U" +#define QWLAN_VERSIONSTR "5.1.0.29V" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From ae6ae24d5000bbebe078b9303c4e6bc8b8d28b21 Mon Sep 17 00:00:00 2001 From: "Padma, Santhosh Kumar" Date: Wed, 5 Oct 2016 19:45:07 +0530 Subject: qcacld-3.0: Fix mgmtFrameSessionId in lim_send_p2p_action_frame Cleanup as part of lim_p2p_action_cnf triggers only when mgmtFrameSessionId is not 0xff. If cleanup does not happen in error scenario, it can result in not clearing cfgState->buf which can lead to dropping of further action frames in __wlan_hdd_mgmt_tx. Fix this by filling mgmtFrameSessionId with proper session id. Change-Id: Icc0f5b576ff71776dc448a673b6e12defe0c514e CRs-Fixed: 1074565 --- core/mac/src/pe/lim/lim_p2p.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/mac/src/pe/lim/lim_p2p.c b/core/mac/src/pe/lim/lim_p2p.c index 9485f127d6e1..096f78a16581 100644 --- a/core/mac/src/pe/lim/lim_p2p.c +++ b/core/mac/src/pe/lim/lim_p2p.c @@ -468,6 +468,7 @@ static void lim_tx_action_frame(tpAniSirGlobal mac_ctx, * need to go at OFDM rates. And BD rate2 we configured at 6Mbps. */ tx_flag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME; + mac_ctx->lim.mgmtFrameSessionId = sme_session_id; if ((SIR_MAC_MGMT_PROBE_RSP == fc->subType) || (mb_msg->noack)) { @@ -483,7 +484,6 @@ static void lim_tx_action_frame(tpAniSirGlobal mac_ctx, true : false); mac_ctx->lim.mgmtFrameSessionId = 0xff; } else { - mac_ctx->lim.mgmtFrameSessionId = mb_msg->sessionId; qdf_status = wma_tx_frameWithTxComplete(mac_ctx, packet, (uint16_t) msg_len, @@ -550,7 +550,9 @@ void lim_send_p2p_action_frame(tpAniSirGlobal mac_ctx, if ((!mac_ctx->lim.gpLimRemainOnChanReq) && (0 != mb_msg->wait)) { lim_log(mac_ctx, LOGE, FL("RemainOnChannel is not running")); + mac_ctx->lim.mgmtFrameSessionId = mb_msg->sessionId; lim_p2p_action_cnf(mac_ctx, false); + mac_ctx->lim.mgmtFrameSessionId = 0xff; return; } sme_session_id = mb_msg->sessionId; -- cgit v1.2.3 From f754bee3890abbd595189e24534b2136faa3a01f Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 18:46:05 -0700 Subject: Release 5.1.0.29W Release 5.1.0.29W Change-Id: I3af91053db071b62137116ecd62c782fa9d05b7c 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 b917a7540656..48eebffd2f06 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "V" +#define QWLAN_VERSION_EXTRA "W" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29V" +#define QWLAN_VERSIONSTR "5.1.0.29W" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From fef4c02f2c2e127292e360f18adec7f62fe92365 Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Mon, 26 Sep 2016 12:11:30 -0700 Subject: qcacld-3.0: Make lim_process* messages static functions lim_process_messages() and lim_process_deferred_message_queue are currently a global functions, but they are only referenced from within lim_process_message_queue.c. Making lim_process_messages() and lim_process_deferred_message_queue to be a static function and rearrange it to avoid any forward reference of it. Change-Id: I30c5b388814de5fc02fd0352ef41c324216af705 CRs-Fixed: 1071312 --- core/mac/src/pe/include/lim_api.h | 1 - core/mac/src/pe/lim/lim_process_message_queue.c | 76 +++++++++++-------------- core/mac/src/pe/lim/lim_types.h | 3 - 3 files changed, 33 insertions(+), 47 deletions(-) diff --git a/core/mac/src/pe/include/lim_api.h b/core/mac/src/pe/include/lim_api.h index 9e77bcc44fce..9afa50d2fcc2 100644 --- a/core/mac/src/pe/include/lim_api.h +++ b/core/mac/src/pe/include/lim_api.h @@ -136,7 +136,6 @@ uint32_t lim_post_msg_high_priority(tpAniSirGlobal mac, tSirMsgQ *msg); * and dispatch to various sub modules within LIM module. */ extern void lim_message_processor(tpAniSirGlobal, tpSirMsgQ); -extern void lim_process_messages(tpAniSirGlobal, tpSirMsgQ); /* DT test alt deferred 2 */ /** * Function to check the LIM state if system is in Scan/Learn state. */ diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index 37b326b6e863..728fda23726d 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -1256,34 +1256,6 @@ void lim_process_abort_scan_ind(tpAniSirGlobal mac_ctx, return; } -/** - * lim_message_processor() - Process messages from LIM. - * - * @mac_ctx: Pointer to the Global Mac Context. - * @msg: Received LIM message. - * - * Wrapper function for lim_process_messages when handling messages received by - * LIM.Could either defer messages or process them. - * - * Return: None. - */ -void lim_message_processor(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) -{ - if (eLIM_MLM_OFFLINE_STATE == mac_ctx->lim.gLimMlmState) { - pe_free_msg(mac_ctx, msg); - return; - } - - if (!def_msg_decision(mac_ctx, msg)) { - lim_process_messages(mac_ctx, msg); - /* process deferred message queue if allowed */ - if ((!(mac_ctx->lim.gLimAddtsSent)) && - (!(lim_is_system_in_scan_state(mac_ctx))) && - (true == GET_LIM_PROCESS_DEFD_MESGS(mac_ctx))) - lim_process_deferred_message_queue(mac_ctx); - } -} - static void lim_process_sme_obss_scan_ind(tpAniSirGlobal mac_ctx, struct sSirMsgQ *msg) { @@ -1319,12 +1291,12 @@ static void lim_process_sme_obss_scan_ind(tpAniSirGlobal mac_ctx, /** * lim_process_messages() - Process messages from upper layers. * - * @mac_ctx: Pointer to the Global Mac Context. - * @msg: Received message. + * @mac_ctx: Pointer to the Global Mac Context. + * @msg: Received message. * * Return: None. */ -void lim_process_messages(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) +static void lim_process_messages(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) { #ifdef FEATURE_AP_MCC_CH_AVOIDANCE uint8_t vdev_id = 0; @@ -2043,26 +2015,17 @@ void lim_process_messages(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) } /*** end lim_process_messages() ***/ /** - * lim_process_deferred_message_queue + * lim_process_deferred_message_queue() * - ***FUNCTION: * This function is called by LIM while exiting from Learn * mode. This function fetches messages posted to the LIM * deferred message queue limDeferredMsgQ. * - ***LOGIC: - * - ***ASSUMPTIONS: - * NA - * - ***NOTE: - * NA - * - * @param pMac - Pointer to Global MAC structure + * @pMac: Pointer to Global MAC structure * @return None */ -void lim_process_deferred_message_queue(tpAniSirGlobal pMac) +static void lim_process_deferred_message_queue(tpAniSirGlobal pMac) { tSirMsgQ limMsg = { 0, 0, 0 }; @@ -2089,6 +2052,33 @@ void lim_process_deferred_message_queue(tpAniSirGlobal pMac) } } /*** end lim_process_deferred_message_queue() ***/ +/** + * lim_message_processor() - Process messages from LIM. + * @mac_ctx: Pointer to the Global Mac Context. + * @msg: Received LIM message. + * + * Wrapper function for lim_process_messages when handling messages received by + * LIM. Could either defer messages or process them. + * + * Return: None. + */ +void lim_message_processor(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) +{ + if (eLIM_MLM_OFFLINE_STATE == mac_ctx->lim.gLimMlmState) { + pe_free_msg(mac_ctx, msg); + return; + } + + if (!def_msg_decision(mac_ctx, msg)) { + lim_process_messages(mac_ctx, msg); + /* process deferred message queue if allowed */ + if ((!(mac_ctx->lim.gLimAddtsSent)) && + (!(lim_is_system_in_scan_state(mac_ctx))) && + (true == GET_LIM_PROCESS_DEFD_MESGS(mac_ctx))) + lim_process_deferred_message_queue(mac_ctx); + } +} + /** * lim_process_normal_hdd_msg() - Process the message and defer if needed * @mac_ctx : Pointer to Global MAC structure diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index 571579dc4d87..2dd2df5994e7 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/core/mac/src/pe/lim/lim_types.h @@ -551,9 +551,6 @@ void lim_tear_down_link_with_ap(tpAniSirGlobal, uint8_t, tSirMacReasonCodes); /* / Function that processes Max retries interrupt from TFP */ void limHandleMaxRetriesInterrupt(uint32_t); -/* / Function that processes messages deferred during Learn mode */ -void lim_process_deferred_message_queue(tpAniSirGlobal); - /* / Function that defers the messages received */ uint32_t lim_defer_msg(tpAniSirGlobal, tSirMsgQ *); -- cgit v1.2.3 From d97be644896a7858c2adaeb1c1edf13c667557f3 Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Mon, 26 Sep 2016 15:40:34 -0700 Subject: qcacld-3.0: Remove unused message types lim_process_message() function references to unused message types that starts with eWNI_PMC*. Cleanup the code and remove the unused message type references from the code. Change-Id: I5c88cb2544f74cb8c5e05b9178071ddbfaf2de23 Depends-on: 1727734 CRs-Fixed: 1071366 --- core/mac/inc/wni_api.h | 5 ----- core/mac/src/pe/lim/lim_process_message_queue.c | 7 ------- core/mac/src/sys/legacy/src/utils/src/mac_trace.c | 4 ---- core/sme/src/common/sme_api.c | 2 -- 4 files changed, 18 deletions(-) diff --git a/core/mac/inc/wni_api.h b/core/mac/inc/wni_api.h index 09f6cdb9a044..d55945efa3c1 100644 --- a/core/mac/inc/wni_api.h +++ b/core/mac/inc/wni_api.h @@ -108,11 +108,6 @@ enum eWniMsgTypes { eWNI_SME_UPDATE_NOA, eWNI_SME_CLEAR_DFS_CHANNEL_LIST, eWNI_SME_GET_SNR_REQ, - /* General Power Save Messages */ - eWNI_PMC_MSG_TYPES_BEGIN, - - /* WOWL Messages */ - eWNI_PMC_SMPS_STATE_IND, eWNI_SME_RRM_MSG_TYPE_BEGIN, diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index 728fda23726d..2229f7f9bae7 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -1524,13 +1524,6 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) /* These messages are from HDD.No need to respond to HDD */ lim_process_normal_hdd_msg(mac_ctx, msg, false); break; - - case eWNI_PMC_SMPS_STATE_IND: - if (msg->bodyptr) { - qdf_mem_free(msg->bodyptr); - msg->bodyptr = NULL; - } - break; case eWNI_SME_SEND_ACTION_FRAME_IND: lim_send_p2p_action_frame(mac_ctx, msg); qdf_mem_free(msg->bodyptr); diff --git a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c index 064b17423e52..a76e2b49b6e9 100644 --- a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c +++ b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c @@ -286,10 +286,6 @@ uint8_t *mac_trace_get_sme_msg_string(uint16_t sme_msg) CASE_RETURN_STRING(eWNI_SME_CLEAR_DFS_CHANNEL_LIST); CASE_RETURN_STRING(eWNI_SME_GET_SNR_REQ); CASE_RETURN_STRING(eWNI_SME_LINK_STATUS_IND); - - CASE_RETURN_STRING(eWNI_PMC_MSG_TYPES_BEGIN); - - CASE_RETURN_STRING(eWNI_PMC_SMPS_STATE_IND); CASE_RETURN_STRING(eWNI_SME_RRM_MSG_TYPE_BEGIN); CASE_RETURN_STRING(eWNI_SME_NEIGHBOR_REPORT_REQ_IND); CASE_RETURN_STRING(eWNI_SME_NEIGHBOR_REPORT_IND); diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 7bfe3c9ff9a4..7577d99c6af0 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -2594,8 +2594,6 @@ QDF_STATUS sme_process_msg(tHalHandle hHal, cds_msg_t *pMsg) qdf_mem_free(pMsg->bodyptr); break; #endif - case eWNI_PMC_SMPS_STATE_IND: - break; case WNI_CFG_SET_CNF: case WNI_CFG_DNLD_CNF: case WNI_CFG_GET_RSP: -- cgit v1.2.3 From f1ba31e987229aaf9021bc40936979cf58ee1221 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 19:24:26 -0700 Subject: Release 5.1.0.29X Release 5.1.0.29X Change-Id: I7625c975d6f1be9198fb080426b46a3b781fd976 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 48eebffd2f06..b1b92fbc062a 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "W" +#define QWLAN_VERSION_EXTRA "X" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29W" +#define QWLAN_VERSIONSTR "5.1.0.29X" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 32eb50281c2d80bbeb50df5267392614d8e23bf5 Mon Sep 17 00:00:00 2001 From: Kabilan Kannan Date: Tue, 4 Oct 2016 12:24:50 -0700 Subject: qcacld-3.0: Clean up and refactor tdls module Currently the build fails, if we disable TDLS feature flag in the kbuild. Fix all the tdls conditional compilation issues to make a successfull build with tdls feature flag enabled/disabled. Change-Id: I78114474d9ebe65e76840cb581389535f3486e4f CRs-Fixed: 1066077 --- core/cds/inc/cds_concurrency.h | 14 +++++ core/cds/src/cds_concurrency.c | 2 + core/hdd/inc/wlan_hdd_assoc.h | 2 + core/hdd/inc/wlan_hdd_main.h | 2 - core/hdd/inc/wlan_hdd_tdls.h | 42 +++++++++++---- core/hdd/src/wlan_hdd_assoc.c | 51 ++++++++---------- core/hdd/src/wlan_hdd_ioctl.c | 3 +- core/hdd/src/wlan_hdd_tdls.c | 98 ++++++++++++++++++++++++++++++---- core/hdd/src/wlan_hdd_tx_rx.c | 14 ++--- core/mac/src/pe/include/lim_api.h | 17 ++++++ core/mac/src/pe/include/lim_session.h | 4 ++ core/mac/src/pe/lim/lim_api.c | 5 +- core/mac/src/pe/lim/lim_process_tdls.c | 9 ++++ core/mac/src/pe/lim/lim_types.h | 5 ++ core/sme/inc/csr_api.h | 21 +++++--- core/sme/src/csr/csr_api_roam.c | 13 ++--- 16 files changed, 222 insertions(+), 80 deletions(-) diff --git a/core/cds/inc/cds_concurrency.h b/core/cds/inc/cds_concurrency.h index efe9f70622e0..429d64e0d35b 100644 --- a/core/cds/inc/cds_concurrency.h +++ b/core/cds/inc/cds_concurrency.h @@ -592,8 +592,22 @@ struct cds_conc_connection_info { bool cds_is_connection_in_progress(void); void cds_dump_concurrency_info(void); + +#ifdef FEATURE_WLAN_TDLS bool cds_check_is_tdls_allowed(enum tQDF_ADAPTER_MODE device_mode); void cds_set_tdls_ct_mode(hdd_context_t *hdd_ctx); +#else +static inline bool cds_check_is_tdls_allowed(enum tQDF_ADAPTER_MODE device_mode) +{ + return false; +} + +static inline void cds_set_tdls_ct_mode(hdd_context_t *hdd_ctx) +{ + +} +#endif + void cds_set_concurrency_mode(enum tQDF_ADAPTER_MODE mode); void cds_clear_concurrency_mode(enum tQDF_ADAPTER_MODE mode); uint32_t cds_get_connection_count(void); diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 25155c2c18d5..7504b2315d25 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -3340,6 +3340,7 @@ void cds_dump_concurrency_info(void) hdd_ctx->mcc_mode = !cds_current_concurrency_is_scc(); } +#ifdef FEATURE_WLAN_TDLS /* * cds_check_is_tdls_allowed() - check is tdls allowed or not * @adapter: pointer to adapter @@ -3419,6 +3420,7 @@ set_state: cds_info("enable_tdls_connection_tracker %d", hdd_ctx->enable_tdls_connection_tracker); } +#endif /** * cds_set_concurrency_mode() - To set concurrency mode diff --git a/core/hdd/inc/wlan_hdd_assoc.h b/core/hdd/inc/wlan_hdd_assoc.h index f49cb125ed54..bf87fcf37fb1 100644 --- a/core/hdd/inc/wlan_hdd_assoc.h +++ b/core/hdd/inc/wlan_hdd_assoc.h @@ -272,6 +272,7 @@ int hdd_set_genie_to_csr(hdd_adapter_t *pAdapter, eCsrAuthType *RSNAuthType); */ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType); +#ifdef FEATURE_WLAN_TDLS /** * hdd_roam_register_tdlssta() - register new TDLS station * @pAdapter: pointer to adapter @@ -287,6 +288,7 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType); QDF_STATUS hdd_roam_register_tdlssta(hdd_adapter_t *pAdapter, const uint8_t *peerMac, uint16_t staId, uint8_t ucastSig, uint8_t qos); +#endif /** * hdd_perform_roam_set_key_complete() - perform set key complete diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 6f263d2b1b64..7d9926e58aac 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -54,9 +54,7 @@ #include #endif #include -#ifdef FEATURE_WLAN_TDLS #include "wlan_hdd_tdls.h" -#endif #include "wlan_hdd_tsf.h" #include "wlan_hdd_cfg80211.h" #include diff --git a/core/hdd/inc/wlan_hdd_tdls.h b/core/hdd/inc/wlan_hdd_tdls.h index 37e6243d572a..7fa22b27002d 100644 --- a/core/hdd/inc/wlan_hdd_tdls.h +++ b/core/hdd/inc/wlan_hdd_tdls.h @@ -710,8 +710,33 @@ void hdd_tdls_context_destroy(hdd_context_t *hdd_ctx); int wlan_hdd_tdls_antenna_switch(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter, uint32_t mode); -hdd_adapter_t *wlan_hdd_tdls_check_and_enable(hdd_context_t *hdd_ctx); +/** + * wlan_hdd_tdls_notify_connect() - Update tdls state for every + * connect event. + * @adapter: hdd adapter + * @csr_roam_info: csr information + * + * After every connect event in the system, check whether TDLS + * can be enabled in the system. If TDLS can be enabled, update the + * TDLS state as needed. + * + * Return: None + */ +void wlan_hdd_tdls_notify_connect(hdd_adapter_t *adapter, + tCsrRoamInfo *csr_roam_info); +/** + * wlan_hdd_tdls_notify_disconnect() - Update tdls state for every + * disconnect event. + * @adapter: hdd adapter + * + * After every disconnect event in the system, check whether TDLS + * can be disabled/enabled in the system and update the + * TDLS state as needed. + * + * Return: None + */ +void wlan_hdd_tdls_notify_disconnect(hdd_adapter_t *adapter); #else static inline void hdd_tdls_notify_mode_change(hdd_adapter_t *adapter, @@ -742,19 +767,18 @@ static inline int wlan_hdd_tdls_antenna_switch(hdd_context_t *hdd_ctx, { return 0; } - -static inline hdd_adapter_t *wlan_hdd_tdls_check_and_enable( - hdd_context_t *hdd_ctx) -{ - return NULL; -} - static inline void wlan_hdd_update_tdls_info(hdd_adapter_t *adapter, bool tdls_prohibited, bool tdls_chan_swit_prohibited) { } - +static inline void wlan_hdd_tdls_notify_connect(hdd_adapter_t *adapter, + tCsrRoamInfo *csr_roam_info) +{ +} +static inline void wlan_hdd_tdls_notify_disconnect(hdd_adapter_t *adapter) +{ +} #endif /* End of FEATURE_WLAN_TDLS */ #ifdef FEATURE_WLAN_DIAG_SUPPORT diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 8810512e169b..c5a5fcac0922 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -47,9 +47,7 @@ #include "wlan_hdd_cfg80211.h" #include "csr_inside_api.h" #include "wlan_hdd_p2p.h" -#ifdef FEATURE_WLAN_TDLS #include "wlan_hdd_tdls.h" -#endif #include "sme_api.h" #include "wlan_hdd_hostapd.h" #include @@ -1191,7 +1189,6 @@ static void hdd_send_association_event(struct net_device *dev, int we_event; char *msg; struct qdf_mac_addr peerMacAddr; - hdd_adapter_t *tdls_adapter; /* Added to find the auth type on the fly at run time */ /* rather than with cfg to see if FT is enabled */ @@ -1282,14 +1279,8 @@ static void hdd_send_association_event(struct net_device *dev, pAdapter->sessionId, &chan_info, pAdapter->device_mode); - - hdd_info("Assoc: Check and enable or disable TDLS state "); - if ((pAdapter->device_mode == QDF_STA_MODE || - pAdapter->device_mode == QDF_P2P_CLIENT_MODE) && - !pHddCtx->concurrency_marked) - wlan_hdd_update_tdls_info(pAdapter, - pCsrRoamInfo->tdls_prohibited, - pCsrRoamInfo->tdls_chan_swit_prohibited); + /* Update tdls module about connection event */ + wlan_hdd_tdls_notify_connect(pAdapter, pCsrRoamInfo); #ifdef MSM_PLATFORM #if defined(CONFIG_ICNSS) || defined(CONFIG_CNSS) @@ -1335,24 +1326,9 @@ static void hdd_send_association_event(struct net_device *dev, pAdapter->device_mode); } hdd_lpass_notify_disconnect(pAdapter); -#ifdef FEATURE_WLAN_TDLS - hdd_info("Disassoc: Check and enable or disable TDLS state "); - if ((pAdapter->device_mode == QDF_STA_MODE || - pAdapter->device_mode == QDF_P2P_CLIENT_MODE) && - !pHddCtx->concurrency_marked) { - wlan_hdd_update_tdls_info(pAdapter, - true, - true); - } - if (!pHddCtx->concurrency_marked) { - tdls_adapter = wlan_hdd_tdls_check_and_enable( - pHddCtx); - if (NULL != tdls_adapter) - wlan_hdd_update_tdls_info(tdls_adapter, - false, - false); - } -#endif + /* Update tdls module about the disconnection event */ + wlan_hdd_tdls_notify_disconnect(pAdapter); + #ifdef MSM_PLATFORM /* stop timer in sta/p2p_cli */ spin_lock_bh(&pHddCtx->bus_bw_lock); @@ -4037,6 +4013,23 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, return status; } +#else + +static inline QDF_STATUS hdd_roam_deregister_tdlssta(hdd_adapter_t *pAdapter, + uint8_t staId) +{ + return QDF_STATUS_SUCCESS; +} + +static inline QDF_STATUS +hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, + tCsrRoamInfo *pRoamInfo, + uint32_t roamId, + eRoamCmdStatus roamStatus, + eCsrRoamResult roamResult) +{ + return QDF_STATUS_SUCCESS; +} #endif #ifdef WLAN_FEATURE_11W diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index fcc2f5e0e7b6..61c1a77aec74 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -6639,8 +6639,7 @@ static int drv_cmd_set_antenna_mode(hdd_adapter_t *adapter, /* Check TDLS status and update antenna mode */ if ((QDF_STA_MODE == adapter->device_mode) && - cds_is_sta_active_connection_exists() && - (hdd_ctx->connected_peer_count > 0)) { + cds_is_sta_active_connection_exists()) { ret = wlan_hdd_tdls_antenna_switch(hdd_ctx, adapter, mode); if (0 != ret) diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index eaac53a0a77f..4abe1fef943f 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -1768,16 +1768,15 @@ int wlan_hdd_tdls_set_params(struct net_device *dev, } /** - * wlan_hdd_tdls_check_and_enable() - check system state and enable tdls + * wlan_hdd_tdls_get_adapter() - check system state and return hdd adapter * @hdd_ctx: hdd context * - * After every disassociation in the system, check whether TDLS - * can be enabled in the system. If TDLS possible return the - * corresponding hdd adapter to enable TDLS. + * If TDLS possible, return the corresponding hdd adapter + * to enable TDLS in the system. * * Return: hdd adapter pointer or NULL. */ -hdd_adapter_t *wlan_hdd_tdls_check_and_enable(hdd_context_t *hdd_ctx) +static hdd_adapter_t *wlan_hdd_tdls_get_adapter(hdd_context_t *hdd_ctx) { if (cds_get_connection_count() > 1) return NULL; @@ -1951,6 +1950,74 @@ void wlan_hdd_update_tdls_info(hdd_adapter_t *adapter, bool tdls_prohibited, return; } +/** + * wlan_hdd_tdls_notify_connect() - Update tdls state for every + * connect event. + * @adapter: hdd adapter + * @csr_roam_info: csr information + * + * After every connect event in the system, check whether TDLS + * can be enabled in the system. If TDLS can be enabled, update the + * TDLS state as needed. + * + * Return: None + */ +void wlan_hdd_tdls_notify_connect(hdd_adapter_t *adapter, + tCsrRoamInfo *csr_roam_info) +{ + hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter); + + hdd_info("Check and update TDLS state"); + + /* Association event */ + if ((adapter->device_mode == QDF_STA_MODE || + adapter->device_mode == QDF_P2P_CLIENT_MODE) && + !hdd_ctx->concurrency_marked) { + wlan_hdd_update_tdls_info(adapter, + csr_roam_info->tdls_prohibited, + csr_roam_info->tdls_chan_swit_prohibited); + } +} + +/** + * wlan_hdd_tdls_notify_disconnect() - Update tdls state for every + * disconnect event. + * @adapter: hdd adapter + * + * After every disconnect event in the system, check whether TDLS + * can be disabled/enabled in the system and update the + * TDLS state as needed. + * + * Return: None + */ +void wlan_hdd_tdls_notify_disconnect(hdd_adapter_t *adapter) +{ + hdd_adapter_t *temp_adapter; + hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter); + + hdd_info("Check and update TDLS state"); + + /* Disassociation event */ + if ((adapter->device_mode == QDF_STA_MODE || + adapter->device_mode == QDF_P2P_CLIENT_MODE) && + !hdd_ctx->concurrency_marked) { + wlan_hdd_update_tdls_info(adapter, true, true); + } + + /* If concurrency is not marked, then we have to + * check, whether TDLS could be enabled in the + * system after this disassoc event. + */ + if (!hdd_ctx->concurrency_marked) { + temp_adapter = wlan_hdd_tdls_get_adapter( + hdd_ctx); + if (NULL != temp_adapter) + wlan_hdd_update_tdls_info(temp_adapter, + false, + false); + } +} + /** * wlan_hdd_tdls_set_sta_id() - set station ID on a tdls peer * @pAdapter: HDD adapter @@ -2483,7 +2550,7 @@ void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter) hdd_err("TDLS set state is not cleared correctly !!!"); pHddCtx->concurrency_marked = false; } - tdls_adapter = wlan_hdd_tdls_check_and_enable(pHddCtx); + tdls_adapter = wlan_hdd_tdls_get_adapter(pHddCtx); if (tdls_adapter) wlan_hdd_update_tdls_info(tdls_adapter, false, false); } @@ -5134,6 +5201,11 @@ void wlan_hdd_tdls_update_rx_pkt_cnt(hdd_adapter_t *adapter, uint8_t valid_mac_entries; struct qdf_mac_addr *mac_addr; + hdd_ctx = WLAN_HDD_GET_CTX(adapter); + + if (!hdd_ctx->enable_tdls_connection_tracker) + return; + mac_addr = (struct qdf_mac_addr *)(skb->data+QDF_MAC_ADDR_SIZE); if (qdf_is_macaddr_group(mac_addr)) return; @@ -5143,7 +5215,6 @@ void wlan_hdd_tdls_update_rx_pkt_cnt(hdd_adapter_t *adapter, mac_addr, QDF_MAC_ADDR_SIZE) == 0) return; - hdd_ctx = WLAN_HDD_GET_CTX(adapter); tdls_ctx = adapter->sessionCtx.station.pHddTdlsCtx; qdf_spin_lock_bh(&hdd_ctx->tdls_ct_spinlock); @@ -5197,6 +5268,11 @@ void wlan_hdd_tdls_update_tx_pkt_cnt(hdd_adapter_t *adapter, uint8_t valid_mac_entries; struct qdf_mac_addr *mac_addr; + hdd_ctx = WLAN_HDD_GET_CTX(adapter); + + if (!hdd_ctx->enable_tdls_connection_tracker) + return; + mac_addr = (struct qdf_mac_addr *)skb->data; if (qdf_is_macaddr_group(mac_addr)) return; @@ -5206,7 +5282,6 @@ void wlan_hdd_tdls_update_tx_pkt_cnt(hdd_adapter_t *adapter, QDF_MAC_ADDR_SIZE) == 0) return; - hdd_ctx = WLAN_HDD_GET_CTX(adapter); tdls_ctx = adapter->sessionCtx.station.pHddTdlsCtx; qdf_spin_lock_bh(&hdd_ctx->tdls_ct_spinlock); @@ -5816,9 +5891,12 @@ int wlan_hdd_tdls_antenna_switch(hdd_context_t *hdd_ctx, { uint8_t tdls_peer_cnt; uint32_t vdev_nss; - hdd_station_ctx_t *sta_ctx = - WLAN_HDD_GET_STATION_CTX_PTR(adapter); + hdd_station_ctx_t *sta_ctx; + + if (hdd_ctx->connected_peer_count == 0) + return 0; + sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter); /* Check whether TDLS antenna switch is in progress */ if (hdd_ctx->tdls_nss_switch_in_progress) { if (hdd_ctx->tdls_nss_teardown_complete == false) { diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index 918973a91cee..0fea7d814579 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -47,18 +47,12 @@ #include #include "sap_api.h" #include "wlan_hdd_wmm.h" - -#ifdef FEATURE_WLAN_TDLS #include "wlan_hdd_tdls.h" -#endif #include - #include "wlan_hdd_ocb.h" #include "wlan_hdd_lro.h" - #include "cdp_txrx_peer_ops.h" #include "ol_txrx.h" - #include "wlan_hdd_nan_datapath.h" #include "pld_common.h" @@ -419,8 +413,8 @@ int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) hdd_station_ctx_t *pHddStaCtx = &pAdapter->sessionCtx.station; #ifdef QCA_PKT_PROTO_TRACE uint8_t proto_type = 0; -#endif /* QCA_PKT_PROTO_TRACE */ hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); +#endif /* QCA_PKT_PROTO_TRACE */ #ifdef QCA_WIFI_FTM if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE) { @@ -551,8 +545,7 @@ int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) pAdapter->stats.tx_bytes += skb->len; - if (hdd_ctx->enable_tdls_connection_tracker) - wlan_hdd_tdls_update_tx_pkt_cnt(pAdapter, skb); + wlan_hdd_tdls_update_tx_pkt_cnt(pAdapter, skb); ++pAdapter->stats.tx_packets; @@ -965,8 +958,7 @@ QDF_STATUS hdd_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf) qdf_nbuf_data_addr(rxBuf), sizeof(qdf_nbuf_data(rxBuf)), QDF_RX)); - if (pHddCtx->enable_tdls_connection_tracker) - wlan_hdd_tdls_update_rx_pkt_cnt(pAdapter, skb); + wlan_hdd_tdls_update_rx_pkt_cnt(pAdapter, skb); skb->dev = pAdapter->dev; skb->protocol = eth_type_trans(skb, skb->dev); diff --git a/core/mac/src/pe/include/lim_api.h b/core/mac/src/pe/include/lim_api.h index 9afa50d2fcc2..dc78c170d79e 100644 --- a/core/mac/src/pe/include/lim_api.h +++ b/core/mac/src/pe/include/lim_api.h @@ -164,6 +164,23 @@ extern void lim_trigger_sta_deletion(tpAniSirGlobal pMac, tpDphHashNode pStaDs, extern void lim_send_sme_tdls_del_sta_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry, uint16_t reasonCode); +/** + * lim_set_tdls_flags() - update tdls flags based on newer STA connection + * information + * @roam_sync_ind_ptr: pointer to roam offload structure + * @ft_session_ptr: pointer to PE session + * + * Set TDLS flags as per new STA connection capabilities. + * + * Return: None + */ +void lim_set_tdls_flags(roam_offload_synch_ind *roam_sync_ind_ptr, + tpPESession ft_session_ptr); +#else +static inline void lim_set_tdls_flags(roam_offload_synch_ind *roam_sync_ind_ptr, + tpPESession ft_session_ptr) +{ +} #endif /* / Function that checks for change in AP's capabilties on STA */ diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h index b8b34a98fb79..4b36c7ee704c 100644 --- a/core/mac/src/pe/include/lim_session.h +++ b/core/mac/src/pe/include/lim_session.h @@ -344,6 +344,10 @@ typedef struct sPESession /* Added to Support BT-AMP */ uint8_t freePeerIdxTail; uint16_t gLimNumOfCurrentSTAs; #ifdef FEATURE_WLAN_TDLS + /* TDLS parameters to check whether TDLS + * and TDLS channel switch is allowed in the + * AP network + */ uint32_t peerAIDBitmap[2]; bool tdls_prohibited; bool tdls_chan_swit_prohibited; diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index 2700e9ad55b7..136d0e920579 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -2070,10 +2070,7 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx, roam_sync_ind_ptr->join_rsp->nss = curr_sta_ds->nss; roam_sync_ind_ptr->join_rsp->max_rate_flags = lim_get_max_rate_flags(mac_ctx, curr_sta_ds); - roam_sync_ind_ptr->join_rsp->tdls_prohibited = - ft_session_ptr->tdls_prohibited; - roam_sync_ind_ptr->join_rsp->tdls_chan_swit_prohibited = - ft_session_ptr->tdls_chan_swit_prohibited; + lim_set_tdls_flags(roam_sync_ind_ptr, ft_session_ptr); roam_sync_ind_ptr->join_rsp->aid = ft_session_ptr->limAID; lim_fill_join_rsp_ht_caps(ft_session_ptr, roam_sync_ind_ptr->join_rsp); ft_session_ptr->limPrevSmeState = ft_session_ptr->limSmeState; diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index 1e87bd405276..b2e15757fba5 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -963,6 +963,15 @@ wma_tx_frame_with_tx_complete_send(tpAniSirGlobal pMac, void *pPacket, } #endif +void lim_set_tdls_flags(roam_offload_synch_ind *roam_sync_ind_ptr, + tpPESession ft_session_ptr) +{ + roam_sync_ind_ptr->join_rsp->tdls_prohibited = + ft_session_ptr->tdls_prohibited; + roam_sync_ind_ptr->join_rsp->tdls_chan_swit_prohibited = + ft_session_ptr->tdls_chan_swit_prohibited; +} + /* * TDLS setup Request frame on AP link */ diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index 2dd2df5994e7..5b6ec4673827 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/core/mac/src/pe/lim/lim_types.h @@ -538,6 +538,11 @@ static inline tSirRetStatus lim_delete_tdls_peers(tpAniSirGlobal mac_ctx, tpPESession session_entry) { return eSIR_SUCCESS; +} +static inline void lim_init_tdls_data(tpAniSirGlobal pMac, + tpPESession pSessionEntry) +{ + } #endif diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 517a01185aab..f36805226cb5 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -476,10 +476,12 @@ typedef enum { eCSR_ROAM_PREAUTH_STATUS_SUCCESS, eCSR_ROAM_PREAUTH_STATUS_FAILURE, eCSR_ROAM_HANDOVER_SUCCESS, -#ifdef FEATURE_WLAN_TDLS + /* + * TDLS callback events + */ eCSR_ROAM_TDLS_STATUS_UPDATE, eCSR_ROAM_RESULT_MGMT_TX_COMPLETE_IND, -#endif + /* Disaconnect all the clients */ eCSR_ROAM_DISCONNECT_ALL_P2P_CLIENTS, /* Stopbss triggered from SME due to different */ @@ -587,7 +589,7 @@ typedef enum { eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED, /* Assoc rejected due to concurrent session running on a diff channel */ eCSR_ROAM_RESULT_ASSOC_FAIL_CON_CHANNEL, -#ifdef FEATURE_WLAN_TDLS + /* TDLS events */ eCSR_ROAM_RESULT_ADD_TDLS_PEER, eCSR_ROAM_RESULT_UPDATE_TDLS_PEER, eCSR_ROAM_RESULT_DELETE_TDLS_PEER, @@ -598,7 +600,6 @@ typedef enum { eCSR_ROAM_RESULT_TDLS_SHOULD_TEARDOWN, eCSR_ROAM_RESULT_TDLS_SHOULD_PEER_DISCONNECTED, eCSR_ROAM_RESULT_TDLS_CONNECTION_TRACKER_NOTIFICATION, -#endif eCSR_ROAM_RESULT_IBSS_PEER_INFO_SUCCESS, eCSR_ROAM_RESULT_IBSS_PEER_INFO_FAILED, @@ -1386,6 +1387,11 @@ typedef struct tagCsrRoamInfo { uint32_t roc_scan_id; uint32_t rxChan; #ifdef FEATURE_WLAN_TDLS + /* + * TDLS parameters to check whether TDLS + * and TDLS channel switch is allowed in the + * AP network + */ uint8_t staType; bool tdls_prohibited; /* per ExtCap in Assoc/Reassoc resp */ bool tdls_chan_swit_prohibited; /* per ExtCap in Assoc/Reassoc resp */ @@ -1740,10 +1746,11 @@ QDF_STATUS csr_roam_issue_ft_roam_offload_synch(tHalHandle hHal, #endif typedef void (*tCsrLinkStatusCallback)(uint8_t status, void *pContext); #ifdef FEATURE_WLAN_TDLS -void csr_roam_fill_tdls_info(tCsrRoamInfo *roam_info, tpSirSmeJoinRsp join_rsp); +void csr_roam_fill_tdls_info(tpAniSirGlobal mac_ctx, tCsrRoamInfo *roam_info, + tpSirSmeJoinRsp join_rsp); #else -static inline void csr_roam_fill_tdls_info(tCsrRoamInfo *roam_info, - tpSirSmeJoinRsp join_rsp) +static inline void csr_roam_fill_tdls_info(tpAniSirGlobal mac_ctx, tCsrRoamInfo *roam_info, + tpSirSmeJoinRsp join_rsp) {} #endif diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index fab7f0e48638..896fa91b593d 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -19468,11 +19468,16 @@ fail: * * Return: None */ -void csr_roam_fill_tdls_info(tCsrRoamInfo *roam_info, tpSirSmeJoinRsp join_rsp) +void csr_roam_fill_tdls_info(tpAniSirGlobal mac_ctx, tCsrRoamInfo *roam_info, + tpSirSmeJoinRsp join_rsp) { roam_info->tdls_prohibited = join_rsp->tdls_prohibited; roam_info->tdls_chan_swit_prohibited = join_rsp->tdls_chan_swit_prohibited; + sms_log(mac_ctx, LOG1, + FL("tdls:prohibit: %d, chan_swit_prohibit: %d"), + roam_info->tdls_prohibited, + roam_info->tdls_chan_swit_prohibited); } #endif @@ -19717,11 +19722,7 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx, roam_info->chan_info.nss = roam_synch_data->join_rsp->nss; roam_info->chan_info.rate_flags = roam_synch_data->join_rsp->max_rate_flags; - csr_roam_fill_tdls_info(roam_info, roam_synch_data->join_rsp); - sms_log(mac_ctx, LOG1, - FL("tdls:prohibit: %d, chan_swit_prohibit: %d"), - roam_info->tdls_prohibited, - roam_info->tdls_chan_swit_prohibited); + csr_roam_fill_tdls_info(mac_ctx, roam_info, roam_synch_data->join_rsp); #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH src_profile = &roam_synch_data->join_rsp->HTProfile; dst_profile = &conn_profile->HTProfile; -- cgit v1.2.3 From fa2d77387f947807144dfec6470ee2722a92c195 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 19:57:24 -0700 Subject: Release 5.1.0.29Y Release 5.1.0.29Y Change-Id: I6abc5adbedf2b7184c7d3544f855acd09842a4e2 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 b1b92fbc062a..297efd304c3b 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "X" +#define QWLAN_VERSION_EXTRA "Y" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29X" +#define QWLAN_VERSIONSTR "5.1.0.29Y" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 1e6b9262adeae0f6fac78537759c34c0a0791b6c Mon Sep 17 00:00:00 2001 From: Archana Ramachandran Date: Fri, 30 Sep 2016 15:15:10 -0700 Subject: qcacld-3.0: Add range check for P2P NOA request parameters Add range check for P2P NOA parameters such as duration and interval to prevent integer overflow from binary operation. Change-Id: Iffa57d592af7ac6af7f67d80b85a276aa8faee4e CRs-Fixed: 1072839 --- core/hdd/src/wlan_hdd_p2p.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index ea3df68c7a47..1700a9c247c9 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -55,6 +55,7 @@ /* Ms to Time Unit Micro Sec */ #define MS_TO_TU_MUS(x) ((x) * 1024) +#define MAX_MUS_VAL (INT_MAX / 1024) static uint8_t *hdd_get_action_string(uint16_t MsgType) { @@ -1741,6 +1742,11 @@ int hdd_set_p2p_noa(struct net_device *dev, uint8_t *command) ret); return -EINVAL; } + if (count < 0 || interval < 0 || duration < 0 || + interval > MAX_MUS_VAL || duration > MAX_MUS_VAL) { + hdd_err("Invalid NOA parameters"); + return -EINVAL; + } hdd_info("P2P_SET GO NoA: count=%d interval=%d duration=%d", count, interval, duration); duration = MS_TO_TU_MUS(duration); -- cgit v1.2.3 From 4f7f2584024877b273135782e15c77df59caaeb2 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 20:34:35 -0700 Subject: Release 5.1.0.29Z Release 5.1.0.29Z Change-Id: I7be14ba7785a0207fef21c2d4461c6c364c10e3d 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 297efd304c3b..058abe50fc47 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "Y" +#define QWLAN_VERSION_EXTRA "Z" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29Y" +#define QWLAN_VERSIONSTR "5.1.0.29Z" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 561cdb9c4ab836a4da5b6b054803def86327eacc Mon Sep 17 00:00:00 2001 From: Deepak Dhamdhere Date: Fri, 2 Sep 2016 20:12:58 -0700 Subject: qcacld-3.0: Fix improper use of qdf_event_create Improper use of qdf_event_create caused QDF_ASSERT. Use qdf_event_reset in ol_txrx_peer_attach(). Use correct comparison for return value of qdf_wait_single_event(). CRs-Fixed: 1065451 Change-Id: I735fe12230b6558123f73d68f09fd126bf0406d6 --- core/dp/txrx/ol_txrx.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index 82c2b116b580..a80f6ac84aa8 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -1750,6 +1750,7 @@ ol_txrx_vdev_attach(ol_txrx_pdev_handle pdev, uint8_t vdev_id, enum wlan_op_mode op_mode) { struct ol_txrx_vdev_t *vdev; + QDF_STATUS qdf_status; /* preconditions */ TXRX_ASSERT2(pdev); @@ -1809,6 +1810,7 @@ ol_txrx_vdev_attach(ol_txrx_pdev_handle pdev, /* Default MAX Q depth for every VDEV */ vdev->ll_pause.max_q_depth = ol_tx_cfg_max_tx_queue_depth_ll(vdev->pdev->ctrl_pdev); + qdf_status = qdf_event_create(&vdev->wait_delete_comp); /* add this vdev into the pdev's list */ TAILQ_INSERT_TAIL(&pdev->vdev_list, vdev, vdev_list_elem); @@ -1986,6 +1988,7 @@ ol_txrx_vdev_detach(ol_txrx_vdev_handle vdev, return; } qdf_spin_unlock_bh(&pdev->peer_ref_mutex); + qdf_event_destroy(&vdev->wait_delete_comp); TXRX_PRINT(TXRX_PRINT_LEVEL_INFO1, "%s: deleting vdev obj %p (%02x:%02x:%02x:%02x:%02x:%02x)\n", @@ -2111,7 +2114,7 @@ ol_txrx_peer_attach(ol_txrx_vdev_handle vdev, uint8_t *peer_mac_addr) peer_mac_addr[4], peer_mac_addr[5]); if (qdf_atomic_read(&temp_peer->delete_in_progress)) { vdev->wait_on_peer_id = temp_peer->local_id; - qdf_event_create(&vdev->wait_delete_comp); + qdf_event_reset(&vdev->wait_delete_comp); wait_on_deletion = true; } else { qdf_spin_unlock_bh(&pdev->peer_ref_mutex); @@ -2125,10 +2128,10 @@ ol_txrx_peer_attach(ol_txrx_vdev_handle vdev, uint8_t *peer_mac_addr) /* wait for peer deletion */ rc = qdf_wait_single_event(&vdev->wait_delete_comp, PEER_DELETION_TIMEOUT); - if (!rc) { + if (QDF_STATUS_SUCCESS != rc) { TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, - "timedout waiting for peer(%d) deletion\n", - vdev->wait_on_peer_id); + "error waiting for peer(%d) deletion, status %d\n", + vdev->wait_on_peer_id, (int) rc); vdev->wait_on_peer_id = OL_TXRX_INVALID_LOCAL_PEER_ID; return NULL; } -- cgit v1.2.3 From f74d6f8a97f72758e2e05a5458a6ed9c0a8b79ec Mon Sep 17 00:00:00 2001 From: Deepak Dhamdhere Date: Fri, 16 Sep 2016 02:47:01 -0700 Subject: qcacld-3.0: Fix peer unmap/map handling during roaming Roam_synch indication processing in host performs peer detach/attach operations after firmware has already moved to the new peer. Out of sequence peer unmap and map events can mess up the reference count for reused peer_id values, which can lead to crash. Solution: While detaching a peer during roam sync indication processing, copy its peer_id_ref_cnt in peer_id_to_obj array to new variable in the same peer map for that peer id. Peer is deleted at that point. When the unmap events come in, decrement the old ref_cnt and map events increment the real ref_cnt. Once the old ref_cnt goes to 0, subsequent unmap operations apply to the real peer. CRs-Fixed: 1063177 Change-Id: I9b20f28f17dea1647a213b9f36060109264addf0 --- core/dp/txrx/ol_txrx.c | 62 +++++++++++++----- core/dp/txrx/ol_txrx.h | 1 + core/dp/txrx/ol_txrx_peer_find.c | 134 ++++++++++++++++++++++++++++++++++----- core/dp/txrx/ol_txrx_peer_find.h | 3 + core/dp/txrx/ol_txrx_types.h | 12 +++- core/wma/src/wma_dev_if.c | 10 ++- 6 files changed, 186 insertions(+), 36 deletions(-) diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index a80f6ac84aa8..8f1a565cba35 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -1224,12 +1224,6 @@ ol_txrx_pdev_post_attach(ol_txrx_pdev_handle pdev) c_element->tx_desc.htt_frag_desc = htt_frag_desc; c_element->tx_desc.htt_frag_desc_paddr = frag_paddr; } - QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_LOW, - "%s:%d - %d FRAG VA 0x%p FRAG PA 0x%llx", - __func__, __LINE__, i, - c_element->tx_desc.htt_frag_desc, - (long long unsigned int) - c_element->tx_desc.htt_frag_desc_paddr); #ifdef QCA_SUPPORT_TXDESC_SANITY_CHECKS c_element->tx_desc.pkt_type = 0xff; #ifdef QCA_COMPUTE_TX_DELAY @@ -2790,15 +2784,15 @@ void ol_txrx_peer_unref_delete(ol_txrx_peer_handle peer) * concurrently with the empty check. */ qdf_spin_lock_bh(&pdev->peer_ref_mutex); + if (qdf_atomic_dec_and_test(&peer->ref_cnt)) { u_int16_t peer_id; TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, - "Deleting peer %p (%02x:%02x:%02x:%02x:%02x:%02x)", + "Deleting peer %p (%pM) ref_cnt %d\n", peer, - peer->mac_addr.raw[0], peer->mac_addr.raw[1], - peer->mac_addr.raw[2], peer->mac_addr.raw[3], - peer->mac_addr.raw[4], peer->mac_addr.raw[5]); + peer->mac_addr.raw, + qdf_atomic_read(&peer->ref_cnt)); peer_id = peer->local_id; /* remove the reference to the peer from the hash table */ @@ -2949,14 +2943,15 @@ QDF_STATUS ol_txrx_clear_peer(uint8_t sta_id) } /** - * ol_txrx_peer_detach - Delete a peer's data object. - * @data_peer - the object to delete + * ol_txrx_peer_detach() - Delete a peer's data object. + * @peer - the object to detach * * When the host's control SW disassociates a peer, it calls - * this function to delete the peer's data object. The reference + * this function to detach and delete the peer. The reference * stored in the control peer object to the data peer * object (set up by a call to ol_peer_store()) is provided. * + * Return: None */ void ol_txrx_peer_detach(ol_txrx_peer_handle peer) { @@ -2992,9 +2987,12 @@ void ol_txrx_peer_detach(ol_txrx_peer_handle peer) qdf_spinlock_destroy(&peer->peer_info_lock); qdf_spinlock_destroy(&peer->bufq_lock); - /* set delete_in_progress to identify that wma - * is waiting for unmap massage for this peer */ + /* + * set delete_in_progress to identify that wma + * is waiting for unmap massage for this peer + */ qdf_atomic_set(&peer->delete_in_progress, 1); + /* * Remove the reference added during peer_attach. * The peer will still be left allocated until the @@ -3004,6 +3002,40 @@ void ol_txrx_peer_detach(ol_txrx_peer_handle peer) ol_txrx_peer_unref_delete(peer); } +/** + * ol_txrx_peer_detach_force_delete() - Detach and delete a peer's data object + * @peer - the object to detach + * + * Detach a peer and force the peer object to be removed. It is called during + * roaming scenario when the firmware has already deleted a peer. + * Peer object is freed immediately to avoid duplicate peers during roam sync + * indication processing. + * + * Return: None + */ +void ol_txrx_peer_detach_force_delete(ol_txrx_peer_handle peer) +{ + ol_txrx_pdev_handle pdev = peer->vdev->pdev; + + TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "%s peer %p, peer->ref_cnt %d", + __func__, peer, qdf_atomic_read(&peer->ref_cnt)); + + /* Clear the peer_id_to_obj map entries */ + qdf_spin_lock_bh(&pdev->peer_map_unmap_lock); + ol_txrx_peer_remove_obj_map_entries(pdev, peer); + qdf_spin_unlock_bh(&pdev->peer_map_unmap_lock); + + /* + * Set ref_cnt = 1 so that ol_txrx_peer_unref_delete() called by + * ol_txrx_peer_detach() will actually delete this peer entry properly. + */ + qdf_spin_lock_bh(&pdev->peer_ref_mutex); + qdf_atomic_set(&peer->ref_cnt, 1); + qdf_spin_unlock_bh(&pdev->peer_ref_mutex); + + ol_txrx_peer_detach(peer); +} + ol_txrx_peer_handle ol_txrx_peer_find_by_addr(struct ol_txrx_pdev_t *pdev, uint8_t *peer_mac_addr) { diff --git a/core/dp/txrx/ol_txrx.h b/core/dp/txrx/ol_txrx.h index e4d463db0e9c..daa4f0fde410 100644 --- a/core/dp/txrx/ol_txrx.h +++ b/core/dp/txrx/ol_txrx.h @@ -134,4 +134,5 @@ void htt_pkt_log_init(struct ol_txrx_pdev_t *handle, void *scn); QDF_STATUS ol_txrx_set_wisa_mode(ol_txrx_vdev_handle vdev, bool enable); void ol_txrx_update_mac_id(uint8_t vdev_id, uint8_t mac_id); +void ol_txrx_peer_detach_force_delete(ol_txrx_peer_handle peer); #endif /* _OL_TXRX__H_ */ diff --git a/core/dp/txrx/ol_txrx_peer_find.c b/core/dp/txrx/ol_txrx_peer_find.c index 37acb70c3aa8..f43670155242 100644 --- a/core/dp/txrx/ol_txrx_peer_find.c +++ b/core/dp/txrx/ol_txrx_peer_find.c @@ -327,14 +327,27 @@ static void ol_txrx_peer_find_map_detach(struct ol_txrx_pdev_t *pdev) qdf_mem_free(pdev->peer_id_to_obj_map); } -static inline void -ol_txrx_peer_find_add_id(struct ol_txrx_pdev_t *pdev, - uint8_t *peer_mac_addr, uint16_t peer_id) +/* + * ol_txrx_peer_find_add_id() - Add peer_id entry to peer + * + * @pdev: Handle to pdev object + * @peer_mac_addr: MAC address of peer provided by firmware + * @peer_id: peer_id provided by firmware + * + * Search for peer object for the MAC address, add the peer_id to + * its array of peer_id's and update the peer_id_to_obj map entry + * for that peer_id. Increment corresponding reference counts. + * + * Return: None + */ +static inline void ol_txrx_peer_find_add_id(struct ol_txrx_pdev_t *pdev, + uint8_t *peer_mac_addr, uint16_t peer_id) { struct ol_txrx_peer_t *peer; int status; int del_peer_ref = 0; int i; + bool found = false; /* check if there's already a peer object with this MAC address */ peer = @@ -366,10 +379,18 @@ ol_txrx_peer_find_add_id(struct ol_txrx_pdev_t *pdev, qdf_atomic_inc (&pdev->peer_id_to_obj_map[peer_id].peer_id_ref_cnt); - if (peer->peer_ids[0] == HTT_INVALID_PEER) + /* Check if entire peer_id array is empty */ + for (i = 0; i < MAX_NUM_PEER_ID_PER_PEER; i++) { + if (peer->peer_ids[i] != HTT_INVALID_PEER) { + found = true; + break; + } + } + if (!found) del_peer_ref = 1; - status = 1; + + /* find a place in peer_id array and insert peer_id */ for (i = 0; i < MAX_NUM_PEER_ID_PER_PEER; i++) { if (peer->peer_ids[i] == HTT_INVALID_PEER) { peer->peer_ids[i] = peer_id; @@ -506,7 +527,20 @@ void ol_txrx_peer_tx_ready_handler(ol_txrx_pdev_handle pdev, uint16_t peer_id) #endif - +/* + * ol_rx_peer_unmap_handler() - Handle peer unmap event from firmware + * + * @pdev: Handle to pdev pbject + * @peer_id: peer_id unmapped by firmware + * + * Decrement reference count for the peer_id in peer_id_to_obj_map, + * decrement reference count in corresponding peer object and clear the entry + * in peer's peer_ids array. + * In case of unmap events for a peer that is already deleted, just decrement + * del_peer_id_ref_cnt. + * + * Return: None + */ void ol_rx_peer_unmap_handler(ol_txrx_pdev_handle pdev, uint16_t peer_id) { struct ol_txrx_peer_t *peer; @@ -518,24 +552,39 @@ void ol_rx_peer_unmap_handler(ol_txrx_pdev_handle pdev, uint16_t peer_id) return; } - qdf_spin_lock(&pdev->peer_map_unmap_lock); + qdf_spin_lock_bh(&pdev->peer_map_unmap_lock); + if (qdf_atomic_read( + &pdev->peer_id_to_obj_map[peer_id].del_peer_id_ref_cnt)) { + /* This peer_id belongs to a peer already deleted */ + qdf_atomic_dec(&pdev->peer_id_to_obj_map[peer_id]. + del_peer_id_ref_cnt); + TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, + "%s: Remove the ID %d reference to deleted peer. del_peer_id_ref_cnt %d", + __func__, peer_id, + qdf_atomic_read(&pdev->peer_id_to_obj_map[peer_id]. + del_peer_id_ref_cnt)); + qdf_spin_unlock_bh(&pdev->peer_map_unmap_lock); + return; + } peer = pdev->peer_id_to_obj_map[peer_id].peer; if (peer == NULL) { - /* - * Currently peer IDs are assigned for vdevs as well as peers. - * If the peer ID is for a vdev, then the peer pointer stored - * in peer_id_to_obj_map will be NULL. - */ - qdf_spin_unlock(&pdev->peer_map_unmap_lock); + /* + * Currently peer IDs are assigned for vdevs as well as peers. + * If the peer ID is for a vdev, then the peer pointer stored + * in peer_id_to_obj_map will be NULL. + */ + TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, + "%s: peer not found for peer_id %d", + __func__, peer_id); + qdf_spin_unlock_bh(&pdev->peer_map_unmap_lock); return; } if (qdf_atomic_dec_and_test (&pdev->peer_id_to_obj_map[peer_id].peer_id_ref_cnt)) { pdev->peer_id_to_obj_map[peer_id].peer = NULL; - for (i = 0; i < MAX_NUM_PEER_ID_PER_PEER; i++) { if (peer->peer_ids[i] == peer_id) { peer->peer_ids[i] = HTT_INVALID_PEER; @@ -543,9 +592,6 @@ void ol_rx_peer_unmap_handler(ol_txrx_pdev_handle pdev, uint16_t peer_id) } } } - - qdf_spin_unlock(&pdev->peer_map_unmap_lock); - TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "%s: Remove the ID %d reference to peer %p peer_id_ref_cnt %d", __func__, peer_id, peer, @@ -557,6 +603,59 @@ void ol_rx_peer_unmap_handler(ol_txrx_pdev_handle pdev, uint16_t peer_id) * If there are no more references, delete the peer object. */ ol_txrx_peer_unref_delete(peer); + + qdf_spin_unlock_bh(&pdev->peer_map_unmap_lock); +} + +/** + * ol_txrx_peer_remove_obj_map_entries() - Remove matching pdev peer map entries + * @pdev: pdev handle + * @peer: peer to be removed + * + * Return: None + */ +void ol_txrx_peer_remove_obj_map_entries(ol_txrx_pdev_handle pdev, + struct ol_txrx_peer_t *peer) +{ + int i; + uint16_t peer_id; + int32_t peer_id_ref_cnt; + + for (i = 0; i < MAX_NUM_PEER_ID_PER_PEER; i++) { + peer_id = peer->peer_ids[i]; + if (peer_id == HTT_INVALID_PEER || + pdev->peer_id_to_obj_map[peer_id].peer == NULL) { + /* unused peer_id, or object is already dereferenced */ + continue; + } + if (pdev->peer_id_to_obj_map[peer_id].peer != peer) { + QDF_TRACE(QDF_MODULE_ID_TXRX, + QDF_TRACE_LEVEL_ERROR, + FL("peer pointer mismatch in peer_id_to_obj")); + continue; + } + peer_id_ref_cnt = qdf_atomic_read( + &pdev->peer_id_to_obj_map[peer_id]. + peer_id_ref_cnt); + QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_LOW, + FL("peer_id = %d, peer_id_ref_cnt = %d, index = %d"), + peer_id, peer_id_ref_cnt, i); + /* + * Transfer peer_id_ref_cnt into del_peer_id_ref_cnt so that + * ol_txrx_peer_unref_delete will decrement del_peer_id_ref_cnt + * and any map events will increment peer_id_ref_cnt. Otherwise + * accounting will be messed up. + * + * Add operation will ensure that back to back roaming in the + * middle of unmap/map event sequence will be accounted for. + */ + qdf_atomic_add(peer_id_ref_cnt, + &pdev->peer_id_to_obj_map[peer_id].del_peer_id_ref_cnt); + qdf_atomic_init(&pdev->peer_id_to_obj_map[peer_id]. + peer_id_ref_cnt); + pdev->peer_id_to_obj_map[peer_id].peer = NULL; + peer->peer_ids[i] = HTT_INVALID_PEER; + } } struct ol_txrx_peer_t *ol_txrx_assoc_peer_find(struct ol_txrx_vdev_t *vdev) @@ -623,4 +722,5 @@ void ol_txrx_peer_find_display(ol_txrx_pdev_handle pdev, int indent) } } } + #endif /* if TXRX_DEBUG_LEVEL */ diff --git a/core/dp/txrx/ol_txrx_peer_find.h b/core/dp/txrx/ol_txrx_peer_find.h index 43c2f141aac1..389c1764a3f5 100644 --- a/core/dp/txrx/ol_txrx_peer_find.h +++ b/core/dp/txrx/ol_txrx_peer_find.h @@ -107,6 +107,9 @@ void ol_txrx_peer_find_hash_erase(struct ol_txrx_pdev_t *pdev); struct ol_txrx_peer_t *ol_txrx_assoc_peer_find(struct ol_txrx_vdev_t *vdev); +void ol_txrx_peer_remove_obj_map_entries(ol_txrx_pdev_handle pdev, + struct ol_txrx_peer_t *peer); + #if defined(TXRX_DEBUG_LEVEL) && TXRX_DEBUG_LEVEL > 5 void ol_txrx_peer_find_display(ol_txrx_pdev_handle pdev, int indent); #else diff --git a/core/dp/txrx/ol_txrx_types.h b/core/dp/txrx/ol_txrx_types.h index 26ecfbafe83b..ee1bfb309a37 100644 --- a/core/dp/txrx/ol_txrx_types.h +++ b/core/dp/txrx/ol_txrx_types.h @@ -58,7 +58,7 @@ * multicast key the peer uses, and another ID to represent the * unicast key the peer uses. */ -#define MAX_NUM_PEER_ID_PER_PEER 8 +#define MAX_NUM_PEER_ID_PER_PEER 16 #define OL_TXRX_INVALID_NUM_PEERS (-1) @@ -484,9 +484,19 @@ struct ol_tx_flow_pool_t { #endif +/* + * struct ol_txrx_peer_id_map - Map of firmware peer_ids to peers on host + * @peer: Pointer to peer object + * @peer_id_ref_cnt: No. of firmware references to the peer_id + * @del_peer_id_ref_cnt: No. of outstanding unmap events for peer_id + * after the peer object is deleted on the host. + * + * peer_id is used as an index into the array of ol_txrx_peer_id_map. + */ struct ol_txrx_peer_id_map { struct ol_txrx_peer_t *peer; qdf_atomic_t peer_id_ref_cnt; + qdf_atomic_t del_peer_id_ref_cnt; }; /* diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 6a7d2084b79c..49a7a0993cfa 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -1079,9 +1079,13 @@ void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid, wma->interfaces[vdev_id].peer_count); return; } - if (peer) - ol_txrx_peer_detach(peer); + if (peer) { + if (roam_synch_in_progress) + ol_txrx_peer_detach_force_delete(peer); + else + ol_txrx_peer_detach(peer); + } peer_mac_addr = ol_txrx_peer_get_peer_mac_addr(peer); if (peer_mac_addr == NULL) { WMA_LOGE("%s: peer mac addr is NULL, Can't remove peer with peer_addr %pM vdevid %d peer_count %d", @@ -1146,8 +1150,8 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, WMA_LOGE("%s : Unable to attach peer %pM", __func__, peer_addr); goto err; } - if (roam_synch_in_progress) { + if (roam_synch_in_progress) { WMA_LOGE("%s: LFR3: Created peer %p with peer_addr %pM vdev_id %d," "peer_count - %d", __func__, peer, peer_addr, vdev_id, -- cgit v1.2.3 From e8ddb702e8d41ea27c0ba94f8d7ee67214198663 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 21:18:47 -0700 Subject: Release 5.1.0.30 Release 5.1.0.30 Change-Id: I04084060c44f6f732c49533ed074a805606f160e CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 058abe50fc47..4d4eff823d8b 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "Z" -#define QWLAN_VERSION_BUILD 29 +#define QWLAN_VERSION_EXTRA "" +#define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.29Z" +#define QWLAN_VERSIONSTR "5.1.0.30" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 538581282bad92c9421608d29e0c3a9bb1ab6ad6 Mon Sep 17 00:00:00 2001 From: "Poddar, Siddarth" Date: Tue, 6 Sep 2016 19:00:09 +0530 Subject: qcacld-3.0: Remove the processing for depreciated pktlog msg Remove the processing of following msg types PKTLOG_TYPE_TX_MSDU_ID, PKTLOG_TYPE_TX_FRM_HDR and PKTLOG_TYPE_TX_VIR_ADDR for ihelium as support for these events is removed from FW. Change-Id: Ic526507d8adf87e580bd5c23ad2e68e2154c38a8 CRs-Fixed: 1074043 --- core/utils/pktlog/pktlog_internal.c | 90 +++++++++++++++++++++++++++++-------- 1 file changed, 71 insertions(+), 19 deletions(-) diff --git a/core/utils/pktlog/pktlog_internal.c b/core/utils/pktlog/pktlog_internal.c index 4de2086be650..27549c7cfb05 100644 --- a/core/utils/pktlog/pktlog_internal.c +++ b/core/utils/pktlog/pktlog_internal.c @@ -220,6 +220,7 @@ char *pktlog_getbuf(struct ol_pktlog_dev_t *pl_dev, static struct txctl_frm_hdr frm_hdr; +#ifndef HELIUMPLUS static void process_ieee_hdr(void *data) { uint8_t dir; @@ -367,7 +368,9 @@ fill_ieee80211_hdr_data(struct ol_txrx_pdev_t *txrx_pdev, } } +#endif +#ifdef HELIUMPLUS A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) { /* @@ -398,25 +401,86 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) pl_hdr.missed_cnt = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MISSED_CNT_OFFSET) & ATH_PKTLOG_HDR_MISSED_CNT_MASK) >> ATH_PKTLOG_HDR_MISSED_CNT_SHIFT; -#ifdef HELIUMPLUS pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) & ATH_PKTLOG_HDR_LOG_TYPE_MASK) >> ATH_PKTLOG_HDR_LOG_TYPE_SHIFT; pl_hdr.macId = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MAC_ID_OFFSET) & ATH_PKTLOG_HDR_MAC_ID_MASK) >> ATH_PKTLOG_HDR_MAC_ID_SHIFT; + pl_hdr.size = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_SIZE_OFFSET) & + ATH_PKTLOG_HDR_SIZE_MASK) >> ATH_PKTLOG_HDR_SIZE_SHIFT; + pl_hdr.timestamp = *(pl_tgt_hdr + ATH_PKTLOG_HDR_TIMESTAMP_OFFSET); + pl_hdr.type_specific_data = + *(pl_tgt_hdr + ATH_PKTLOG_HDR_TYPE_SPECIFIC_DATA_OFFSET); + pl_info = pl_dev->pl_info; + + if (pl_hdr.log_type == PKTLOG_TYPE_TX_CTRL) { + size_t log_size = sizeof(frm_hdr) + pl_hdr.size; + void *txdesc_hdr_ctl = (void *) + pktlog_getbuf(pl_dev, pl_info, log_size, &pl_hdr); + qdf_assert(txdesc_hdr_ctl); + qdf_assert(pl_hdr.size < (370 * sizeof(u_int32_t))); + + qdf_mem_copy(txdesc_hdr_ctl, &frm_hdr, sizeof(frm_hdr)); + qdf_mem_copy((char *)txdesc_hdr_ctl + sizeof(frm_hdr), + ((void *)data + + sizeof(struct ath_pktlog_hdr)), + pl_hdr.size); + } + + if (pl_hdr.log_type == PKTLOG_TYPE_TX_STAT) { + struct ath_pktlog_tx_status txstat_log; + size_t log_size = pl_hdr.size; + + txstat_log.ds_status = (void *) + pktlog_getbuf(pl_dev, pl_info, + log_size, &pl_hdr); + qdf_assert(txstat_log.ds_status); + qdf_mem_copy(txstat_log.ds_status, + ((void *)data + sizeof(struct ath_pktlog_hdr)), + pl_hdr.size); + } + return A_OK; +} + #else +A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) +{ + /* + * Must include to process different types + * TX_CTL, TX_STATUS, TX_MSDU_ID, TX_FRM_HDR + */ + struct ol_pktlog_dev_t *pl_dev; + struct ath_pktlog_hdr pl_hdr; + struct ath_pktlog_info *pl_info; + uint32_t *pl_tgt_hdr; + + if (!txrx_pdev) { + qdf_print("Invalid pdev in %s\n", __func__); + return A_ERROR; + } + qdf_assert(txrx_pdev->pl_dev); + qdf_assert(data); + pl_dev = txrx_pdev->pl_dev; + + pl_tgt_hdr = (uint32_t *) data; + /* + * Makes the short words (16 bits) portable b/w little endian + * and big endian + */ + pl_hdr.flags = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_FLAGS_OFFSET) & + ATH_PKTLOG_HDR_FLAGS_MASK) >> + ATH_PKTLOG_HDR_FLAGS_SHIFT; + pl_hdr.missed_cnt = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MISSED_CNT_OFFSET) & + ATH_PKTLOG_HDR_MISSED_CNT_MASK) >> + ATH_PKTLOG_HDR_MISSED_CNT_SHIFT; pl_hdr.log_type = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) & ATH_PKTLOG_HDR_LOG_TYPE_MASK) >> ATH_PKTLOG_HDR_LOG_TYPE_SHIFT; -#endif pl_hdr.size = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_SIZE_OFFSET) & ATH_PKTLOG_HDR_SIZE_MASK) >> ATH_PKTLOG_HDR_SIZE_SHIFT; pl_hdr.timestamp = *(pl_tgt_hdr + ATH_PKTLOG_HDR_TIMESTAMP_OFFSET); -#ifdef HELIUMPLUS - pl_hdr.type_specific_data = - *(pl_tgt_hdr + ATH_PKTLOG_HDR_TYPE_SPECIFIC_DATA_OFFSET); -#endif + pl_info = pl_dev->pl_info; if (pl_hdr.log_type == PKTLOG_TYPE_TX_FRM_HDR) { @@ -454,7 +518,6 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) } if (pl_hdr.log_type == PKTLOG_TYPE_TX_CTRL) { -#if !defined(HELIUMPLUS) struct ath_pktlog_txctl txctl_log; size_t log_size = sizeof(txctl_log.priv); @@ -482,18 +545,6 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) qdf_mem_copy(txctl_log.txdesc_hdr_ctl, &txctl_log.priv, sizeof(txctl_log.priv)); /* Add Protocol information and HT specific information */ -#else - size_t log_size = sizeof(frm_hdr) + pl_hdr.size; - void *txdesc_hdr_ctl = (void *) - pktlog_getbuf(pl_dev, pl_info, log_size, &pl_hdr); - qdf_assert(txdesc_hdr_ctl); - qdf_assert(pl_hdr.size < (370 * sizeof(u_int32_t))); - - qdf_mem_copy(txdesc_hdr_ctl, &frm_hdr, sizeof(frm_hdr)); - qdf_mem_copy((char *)txdesc_hdr_ctl + sizeof(frm_hdr), - ((void *)data + sizeof(struct ath_pktlog_hdr)), - pl_hdr.size); -#endif /* !defined(HELIUMPLUS) */ } if (pl_hdr.log_type == PKTLOG_TYPE_TX_STAT) { @@ -528,6 +579,7 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) } return A_OK; } +#endif A_STATUS process_rx_info_remote(void *pdev, void *data) { -- cgit v1.2.3 From 744e152a9a1586d3c4d5ee5144615e8c07954618 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 10 Oct 2016 02:37:42 -0700 Subject: Release 5.1.0.30A Release 5.1.0.30A Change-Id: Ib38370edae55460eeedd78ec3cbbc6c69c687061 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 4d4eff823d8b..cdb2455bdf06 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "" +#define QWLAN_VERSION_EXTRA "A" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30" +#define QWLAN_VERSIONSTR "5.1.0.30A" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 5b7bae07fc7eb099750bd6791a7f33ff6028a0d3 Mon Sep 17 00:00:00 2001 From: Nitesh Shah Date: Wed, 28 Sep 2016 18:58:33 +0530 Subject: qcacld-3.0: Add SBS support in hw_mode_list The enhancement is to add SBS (Single Band Simultaneous) support in hw_mode_list. The WMI HW Mode definitions are redefined to use only for host purpose. Change-Id: I8b8c966b0130964c8e7de7967766629c955209d3 CRs-Fixed: 1072234 --- core/cds/inc/cds_concurrency.h | 13 ++++++- core/cds/src/cds_concurrency.c | 24 ++++++++---- core/hdd/src/wlan_hdd_wext.c | 2 + core/mac/inc/sir_api.h | 1 + core/wma/inc/wma.h | 88 ++++++++++++++++++++++++++++++++++++++++++ core/wma/inc/wma_api.h | 3 +- core/wma/src/wma_main.c | 57 ++++++++++++++++----------- core/wma/src/wma_utils.c | 76 ++++++++++++++++++++---------------- core/wma/src/wma_utils_ut.c | 2 +- 9 files changed, 200 insertions(+), 66 deletions(-) diff --git a/core/cds/inc/cds_concurrency.h b/core/cds/inc/cds_concurrency.h index 429d64e0d35b..951abffa6b0b 100644 --- a/core/cds/inc/cds_concurrency.h +++ b/core/cds/inc/cds_concurrency.h @@ -90,7 +90,7 @@ enum hw_mode_ss_config { /** * enum hw_mode_dbs_capab - DBS HW mode capability * @HW_MODE_DBS_NONE: Non DBS capable - * @HW_MODE_DBS: DFS capable + * @HW_MODE_DBS: DBS capable */ enum hw_mode_dbs_capab { HW_MODE_DBS_NONE, @@ -107,6 +107,16 @@ enum hw_mode_agile_dfs_capab { HW_MODE_AGILE_DFS, }; +/** + * enum hw_mode_sbs_capab - SBS HW mode capability + * @HW_MODE_SBS_NONE: Non SBS capable + * @HW_MODE_SBS: SBS capable + */ +enum hw_mode_sbs_capab { + HW_MODE_SBS_NONE, + HW_MODE_SBS, +}; + /** * enum cds_pcl_group_id - Identifies the pcl groups to be used * @CDS_PCL_GROUP_ID1_ID2: Use weights of group1 and group2 @@ -780,6 +790,7 @@ QDF_STATUS cds_pdev_set_hw_mode(uint32_t session_id, enum hw_mode_bandwidth mac1_bw, enum hw_mode_dbs_capab dbs, enum hw_mode_agile_dfs_capab dfs, + enum hw_mode_sbs_capab sbs, enum sir_conn_update_reason reason); enum cds_conc_next_action cds_need_opportunistic_upgrade(void); QDF_STATUS cds_next_actions(uint32_t session_id, diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 7504b2315d25..b7f3ab35172f 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -2485,8 +2485,8 @@ static void cds_pdev_set_hw_mode_cb(uint32_t status, hw_mode.mac0_tx_ss, hw_mode.mac0_rx_ss, hw_mode.mac0_bw); cds_info("MAC1: TxSS:%d, RxSS:%d, Bw:%d", hw_mode.mac1_tx_ss, hw_mode.mac1_rx_ss, hw_mode.mac1_bw); - cds_info("DBS:%d, Agile DFS:%d", - hw_mode.dbs_cap, hw_mode.agile_dfs_cap); + cds_info("DBS:%d, Agile DFS:%d, SBS:%d", + hw_mode.dbs_cap, hw_mode.agile_dfs_cap, hw_mode.sbs_cap); /* update conc_connection_list */ cds_update_hw_mode_conn_info(num_vdev_mac_entries, @@ -2544,8 +2544,8 @@ void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index, hw_mode.mac0_tx_ss, hw_mode.mac0_rx_ss, hw_mode.mac0_bw); cds_info("MAC1: TxSS:%d, RxSS:%d, Bw:%d", hw_mode.mac1_tx_ss, hw_mode.mac1_rx_ss, hw_mode.mac1_bw); - cds_info("DBS:%d, Agile DFS:%d", - hw_mode.dbs_cap, hw_mode.agile_dfs_cap); + cds_info("DBS:%d, Agile DFS:%d, SBS:%d", + hw_mode.dbs_cap, hw_mode.agile_dfs_cap, hw_mode.sbs_cap); /* update conc_connection_list */ cds_update_hw_mode_conn_info(num_vdev_mac_entries, @@ -2564,6 +2564,7 @@ void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index, * @mac1_bw: MAC1 bandwidth configuration * @dbs: HW DBS capability * @dfs: HW Agile DFS capability + * @sbs: HW SBS capability * @reason: Reason for connection update * * Sends the set hw mode to the SME module which will pass on @@ -2572,15 +2573,18 @@ void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index, * e.g.: To configure 2x2_80 * mac0_ss = HW_MODE_SS_2x2, mac0_bw = HW_MODE_80_MHZ * mac1_ss = HW_MODE_SS_0x0, mac1_bw = HW_MODE_BW_NONE - * dbs = HW_MODE_DBS_NONE, dfs = HW_MODE_AGILE_DFS_NONE + * dbs = HW_MODE_DBS_NONE, dfs = HW_MODE_AGILE_DFS_NONE, + * sbs = HW_MODE_SBS_NONE * e.g.: To configure 1x1_80_1x1_40 (DBS) * mac0_ss = HW_MODE_SS_1x1, mac0_bw = HW_MODE_80_MHZ * mac1_ss = HW_MODE_SS_1x1, mac1_bw = HW_MODE_40_MHZ - * dbs = HW_MODE_DBS, dfs = HW_MODE_AGILE_DFS_NONE + * dbs = HW_MODE_DBS, dfs = HW_MODE_AGILE_DFS_NONE, + * sbs = HW_MODE_SBS_NONE * e.g.: To configure 1x1_80_1x1_40 (Agile DFS) * mac0_ss = HW_MODE_SS_1x1, mac0_bw = HW_MODE_80_MHZ * mac1_ss = HW_MODE_SS_1x1, mac1_bw = HW_MODE_40_MHZ - * dbs = HW_MODE_DBS, dfs = HW_MODE_AGILE_DFS + * dbs = HW_MODE_DBS, dfs = HW_MODE_AGILE_DFS, + * sbs = HW_MODE_SBS_NONE * * Return: Success if the message made it down to the next layer */ @@ -2591,6 +2595,7 @@ QDF_STATUS cds_pdev_set_hw_mode(uint32_t session_id, enum hw_mode_bandwidth mac1_bw, enum hw_mode_dbs_capab dbs, enum hw_mode_agile_dfs_capab dfs, + enum hw_mode_sbs_capab sbs, enum sir_conn_update_reason reason) { int8_t hw_mode_index; @@ -2618,7 +2623,7 @@ QDF_STATUS cds_pdev_set_hw_mode(uint32_t session_id, } hw_mode_index = wma_get_hw_mode_idx_from_dbs_hw_list(mac0_ss, - mac0_bw, mac1_ss, mac1_bw, dbs, dfs); + mac0_bw, mac1_ss, mac1_bw, dbs, dfs, sbs); if (hw_mode_index < 0) { cds_err("Invalid HW mode index obtained"); return QDF_STATUS_E_FAILURE; @@ -6306,6 +6311,7 @@ QDF_STATUS cds_next_actions(uint32_t session_id, HW_MODE_SS_1x1, HW_MODE_40_MHZ, HW_MODE_DBS, HW_MODE_AGILE_DFS_NONE, + HW_MODE_SBS_NONE, reason); break; case CDS_SINGLE_MAC_UPGRADE: @@ -6318,6 +6324,7 @@ QDF_STATUS cds_next_actions(uint32_t session_id, HW_MODE_SS_0x0, HW_MODE_BW_NONE, HW_MODE_DBS_NONE, HW_MODE_AGILE_DFS_NONE, + HW_MODE_SBS_NONE, reason); /* * check if we have a beaconing entity that advertised 2x2 @@ -6334,6 +6341,7 @@ QDF_STATUS cds_next_actions(uint32_t session_id, HW_MODE_SS_0x0, HW_MODE_BW_NONE, HW_MODE_DBS_NONE, HW_MODE_AGILE_DFS_NONE, + HW_MODE_SBS_NONE, reason); break; default: diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 397bdcd2d019..fdb4e5dfdd7e 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -8067,6 +8067,7 @@ static int __iw_set_var_ints_getnone(struct net_device *dev, HW_MODE_SS_0x0, HW_MODE_BW_NONE, HW_MODE_DBS_NONE, HW_MODE_AGILE_DFS_NONE, + HW_MODE_SBS_NONE, SIR_UPDATE_REASON_UT); } else if (apps_args[0] == 1) { hdd_err("set hw mode for dual mac"); @@ -8077,6 +8078,7 @@ static int __iw_set_var_ints_getnone(struct net_device *dev, HW_MODE_SS_1x1, HW_MODE_40_MHZ, HW_MODE_DBS, HW_MODE_AGILE_DFS_NONE, + HW_MODE_SBS_NONE, SIR_UPDATE_REASON_UT); } } diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 58d0cd20635c..9610a2274c47 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -3333,6 +3333,7 @@ struct sir_hw_mode_params { uint8_t mac1_bw; uint8_t dbs_cap; uint8_t agile_dfs_cap; + uint8_t sbs_cap; }; /** diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index d2f86a0838ac..91857844c36c 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -389,6 +389,94 @@ enum ds_mode { #define WMA_DEFAULT_HW_MODE_INDEX 0xFFFF +/** + * WMA hardware mode list bit-mask definitions. + * Bits 4:0, 31:29 are unused. + * + * The below definitions are added corresponding to WMI DBS HW mode + * list to make it independent of firmware changes for WMI definitions. + * Currently these definitions have dependency with BIT positions of + * the existing WMI macros. Thus, if the BIT positions are changed for + * WMI macros, then these macros' BIT definitions are also need to be + * changed. + */ +#define WMA_HW_MODE_MAC0_TX_STREAMS_BITPOS (28) +#define WMA_HW_MODE_MAC0_RX_STREAMS_BITPOS (24) +#define WMA_HW_MODE_MAC1_TX_STREAMS_BITPOS (20) +#define WMA_HW_MODE_MAC1_RX_STREAMS_BITPOS (16) +#define WMA_HW_MODE_MAC0_BANDWIDTH_BITPOS (12) +#define WMA_HW_MODE_MAC1_BANDWIDTH_BITPOS (8) +#define WMA_HW_MODE_DBS_MODE_BITPOS (7) +#define WMA_HW_MODE_AGILE_DFS_MODE_BITPOS (6) +#define WMA_HW_MODE_SBS_MODE_BITPOS (5) + +#define WMA_HW_MODE_MAC0_TX_STREAMS_MASK \ + (0xf << WMA_HW_MODE_MAC0_TX_STREAMS_BITPOS) +#define WMA_HW_MODE_MAC0_RX_STREAMS_MASK \ + (0xf << WMA_HW_MODE_MAC0_RX_STREAMS_BITPOS) +#define WMA_HW_MODE_MAC1_TX_STREAMS_MASK \ + (0xf << WMA_HW_MODE_MAC1_TX_STREAMS_BITPOS) +#define WMA_HW_MODE_MAC1_RX_STREAMS_MASK \ + (0xf << WMA_HW_MODE_MAC1_RX_STREAMS_BITPOS) +#define WMA_HW_MODE_MAC0_BANDWIDTH_MASK \ + (0xf << WMA_HW_MODE_MAC0_BANDWIDTH_BITPOS) +#define WMA_HW_MODE_MAC1_BANDWIDTH_MASK \ + (0xf << WMA_HW_MODE_MAC1_BANDWIDTH_BITPOS) +#define WMA_HW_MODE_DBS_MODE_MASK \ + (0x1 << WMA_HW_MODE_DBS_MODE_BITPOS) +#define WMA_HW_MODE_AGILE_DFS_MODE_MASK \ + (0x1 << WMA_HW_MODE_AGILE_DFS_MODE_BITPOS) +#define WMA_HW_MODE_SBS_MODE_MASK \ + (0x1 << WMA_HW_MODE_SBS_MODE_BITPOS) + +#define WMA_HW_MODE_MAC0_TX_STREAMS_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_MAC0_TX_STREAMS_BITPOS, 4, value) +#define WMA_HW_MODE_MAC0_RX_STREAMS_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_MAC0_RX_STREAMS_BITPOS, 4, value) +#define WMA_HW_MODE_MAC1_TX_STREAMS_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_MAC1_TX_STREAMS_BITPOS, 4, value) +#define WMA_HW_MODE_MAC1_RX_STREAMS_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_MAC1_RX_STREAMS_BITPOS, 4, value) +#define WMA_HW_MODE_MAC0_BANDWIDTH_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_MAC0_BANDWIDTH_BITPOS, 4, value) +#define WMA_HW_MODE_MAC1_BANDWIDTH_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_MAC1_BANDWIDTH_BITPOS, 4, value) +#define WMA_HW_MODE_DBS_MODE_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_DBS_MODE_BITPOS, 1, value) +#define WMA_HW_MODE_AGILE_DFS_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_AGILE_DFS_MODE_BITPOS, 1, value) +#define WMA_HW_MODE_SBS_MODE_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, WMA_HW_MODE_SBS_MODE_BITPOS, 1, value) + +#define WMA_HW_MODE_MAC0_TX_STREAMS_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_MAC0_TX_STREAMS_MASK) >> \ + WMA_HW_MODE_MAC0_TX_STREAMS_BITPOS) +#define WMA_HW_MODE_MAC0_RX_STREAMS_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_MAC0_RX_STREAMS_MASK) >> \ + WMA_HW_MODE_MAC0_RX_STREAMS_BITPOS) +#define WMA_HW_MODE_MAC1_TX_STREAMS_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_MAC1_TX_STREAMS_MASK) >> \ + WMA_HW_MODE_MAC1_TX_STREAMS_BITPOS) +#define WMA_HW_MODE_MAC1_RX_STREAMS_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_MAC1_RX_STREAMS_MASK) >> \ + WMA_HW_MODE_MAC1_RX_STREAMS_BITPOS) +#define WMA_HW_MODE_MAC0_BANDWIDTH_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_MAC0_BANDWIDTH_MASK) >> \ + WMA_HW_MODE_MAC0_BANDWIDTH_BITPOS) +#define WMA_HW_MODE_MAC1_BANDWIDTH_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_MAC1_BANDWIDTH_MASK) >> \ + WMA_HW_MODE_MAC1_BANDWIDTH_BITPOS) +#define WMA_HW_MODE_DBS_MODE_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_DBS_MODE_MASK) >> \ + WMA_HW_MODE_DBS_MODE_BITPOS) +#define WMA_HW_MODE_AGILE_DFS_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_AGILE_DFS_MODE_MASK) >> \ + WMA_HW_MODE_AGILE_DFS_MODE_BITPOS) +#define WMA_HW_MODE_SBS_MODE_GET(hw_mode) \ + ((hw_mode & WMA_HW_MODE_SBS_MODE_MASK) >> \ + WMA_HW_MODE_SBS_MODE_BITPOS) + + /** * struct probeTime_dwellTime - probe time, dwell time map * @dwell_time: dwell time diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index 295973ba2bc7..890622b424e2 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -187,7 +187,8 @@ int8_t wma_get_hw_mode_idx_from_dbs_hw_list(enum hw_mode_ss_config mac0_ss, enum hw_mode_ss_config mac1_ss, enum hw_mode_bandwidth mac1_bw, enum hw_mode_dbs_capab dbs, - enum hw_mode_agile_dfs_capab dfs); + enum hw_mode_agile_dfs_capab dfs, + enum hw_mode_sbs_capab sbs); QDF_STATUS wma_get_hw_mode_from_idx(uint32_t idx, struct sir_hw_mode_params *hw_mode); int8_t wma_get_num_dbs_hw_modes(void); diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 3b5f543c30ac..3d65f13c23ca 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -4298,16 +4298,17 @@ void wma_dump_dbs_hw_mode(tp_wma_handle wma_handle) param = wma_handle->hw_mode.hw_mode_list[i]; WMA_LOGA("%s:[%d]-MAC0: tx_ss:%d rx_ss:%d bw_idx:%d", __func__, i, - WMI_DBS_HW_MODE_MAC0_TX_STREAMS_GET(param), - WMI_DBS_HW_MODE_MAC0_RX_STREAMS_GET(param), - WMI_DBS_HW_MODE_MAC0_BANDWIDTH_GET(param)); + WMA_HW_MODE_MAC0_TX_STREAMS_GET(param), + WMA_HW_MODE_MAC0_RX_STREAMS_GET(param), + WMA_HW_MODE_MAC0_BANDWIDTH_GET(param)); WMA_LOGA("%s:[%d]-MAC1: tx_ss:%d rx_ss:%d bw_idx:%d", __func__, i, - WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET(param), - WMI_DBS_HW_MODE_MAC1_RX_STREAMS_GET(param), - WMI_DBS_HW_MODE_MAC1_BANDWIDTH_GET(param)); - WMA_LOGA("%s:[%d] DBS:%d", __func__, i, - WMI_DBS_HW_MODE_DBS_MODE_GET(param)); + WMA_HW_MODE_MAC1_TX_STREAMS_GET(param), + WMA_HW_MODE_MAC1_RX_STREAMS_GET(param), + WMA_HW_MODE_MAC1_BANDWIDTH_GET(param)); + WMA_LOGA("%s:[%d] DBS:%d SBS:%d", __func__, i, + WMA_HW_MODE_DBS_MODE_GET(param), + WMA_HW_MODE_SBS_MODE_GET(param)); } } @@ -5018,6 +5019,7 @@ static void wma_get_hw_mode_params(WMI_MAC_PHY_CAPABILITIES *caps, * @mac1_ss_bw_info: TX-RX streams, BW for MAC1 * @pos: refers to hw_mode_index * @dbs_mode: dbs_mode for the dbs_hw_mode + * @sbs_mode: sbs_mode for the sbs_hw_mode * * This function sets TX-RX stream, bandwidth and DBS mode in * hw_mode_list. @@ -5027,32 +5029,36 @@ static void wma_get_hw_mode_params(WMI_MAC_PHY_CAPABILITIES *caps, static void wma_set_hw_mode_params(t_wma_handle *wma_handle, struct mac_ss_bw_info mac0_ss_bw_info, struct mac_ss_bw_info mac1_ss_bw_info, - uint32_t pos, uint32_t dbs_mode) + uint32_t pos, uint32_t dbs_mode, + uint32_t sbs_mode) { - WMI_DBS_HW_MODE_MAC0_TX_STREAMS_SET( + WMA_HW_MODE_MAC0_TX_STREAMS_SET( wma_handle->hw_mode.hw_mode_list[pos], mac0_ss_bw_info.mac_tx_stream); - WMI_DBS_HW_MODE_MAC0_RX_STREAMS_SET( + WMA_HW_MODE_MAC0_RX_STREAMS_SET( wma_handle->hw_mode.hw_mode_list[pos], mac0_ss_bw_info.mac_rx_stream); - WMI_DBS_HW_MODE_MAC0_BANDWIDTH_SET( + WMA_HW_MODE_MAC0_BANDWIDTH_SET( wma_handle->hw_mode.hw_mode_list[pos], mac0_ss_bw_info.mac_bw); - WMI_DBS_HW_MODE_MAC1_TX_STREAMS_SET( + WMA_HW_MODE_MAC1_TX_STREAMS_SET( wma_handle->hw_mode.hw_mode_list[pos], mac1_ss_bw_info.mac_tx_stream); - WMI_DBS_HW_MODE_MAC1_RX_STREAMS_SET( + WMA_HW_MODE_MAC1_RX_STREAMS_SET( wma_handle->hw_mode.hw_mode_list[pos], mac1_ss_bw_info.mac_rx_stream); - WMI_DBS_HW_MODE_MAC1_BANDWIDTH_SET( + WMA_HW_MODE_MAC1_BANDWIDTH_SET( wma_handle->hw_mode.hw_mode_list[pos], mac1_ss_bw_info.mac_bw); - WMI_DBS_HW_MODE_DBS_MODE_SET( + WMA_HW_MODE_DBS_MODE_SET( wma_handle->hw_mode.hw_mode_list[pos], dbs_mode); - WMI_DBS_HW_MODE_AGILE_DFS_SET( + WMA_HW_MODE_AGILE_DFS_SET( wma_handle->hw_mode.hw_mode_list[pos], - 0); + HW_MODE_AGILE_DFS_NONE); + WMA_HW_MODE_SBS_MODE_SET( + wma_handle->hw_mode.hw_mode_list[pos], + sbs_mode); } /** @@ -5068,7 +5074,8 @@ static QDF_STATUS wma_update_hw_mode_list(t_wma_handle *wma_handle) { struct extended_caps *phy_caps; WMI_MAC_PHY_CAPABILITIES *tmp; - uint32_t i, dbs_mode, hw_config_type, j = 0; + uint32_t i, hw_config_type, j = 0; + uint32_t dbs_mode, sbs_mode; struct mac_ss_bw_info mac0_ss_bw_info = {0}; struct mac_ss_bw_info mac1_ss_bw_info = {0}; @@ -5117,7 +5124,8 @@ static QDF_STATUS wma_update_hw_mode_list(t_wma_handle *wma_handle) wma_get_hw_mode_params(tmp, &mac0_ss_bw_info); hw_config_type = phy_caps->each_hw_mode_cap[i].hw_mode_config_type; - dbs_mode = 0; + dbs_mode = HW_MODE_DBS_NONE; + sbs_mode = HW_MODE_SBS_NONE; mac1_ss_bw_info.mac_tx_stream = 0; mac1_ss_bw_info.mac_rx_stream = 0; mac1_ss_bw_info.mac_bw = 0; @@ -5129,12 +5137,17 @@ static QDF_STATUS wma_update_hw_mode_list(t_wma_handle *wma_handle) /* Update for MAC1 */ tmp = &phy_caps->each_phy_cap_per_hwmode[j++]; wma_get_hw_mode_params(tmp, &mac1_ss_bw_info); - dbs_mode = 1; + if (hw_config_type == WMI_HW_MODE_DBS) + dbs_mode = HW_MODE_DBS; + if ((hw_config_type == WMI_HW_MODE_SBS_PASSIVE) || + (hw_config_type == WMI_HW_MODE_SBS)) + sbs_mode = HW_MODE_SBS; } /* Updating HW mode list */ wma_set_hw_mode_params(wma_handle, mac0_ss_bw_info, - mac1_ss_bw_info, i, dbs_mode); + mac1_ss_bw_info, i, dbs_mode, + sbs_mode); } wma_dump_dbs_hw_mode(wma_handle); return QDF_STATUS_SUCCESS; diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index b4aab11b8e34..fd9254d98a7f 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -2534,6 +2534,7 @@ void wma_get_tx_rx_ss_from_config(enum hw_mode_ss_config mac_ss, * @mac1_bw: Bandwidth of MAC1 of type 'hw_mode_bandwidth' * @dbs: DBS capability of type 'hw_mode_dbs_capab' * @dfs: Agile DFS capability of type 'hw_mode_agile_dfs_capab' + * @sbs: SBS capability of type 'hw_mode_sbs_capab' * * Fetches the HW mode index corresponding to the HW mode provided * @@ -2546,12 +2547,13 @@ static int8_t wma_get_matching_hw_mode_index(tp_wma_handle wma, uint32_t mac1_tx_ss, uint32_t mac1_rx_ss, enum hw_mode_bandwidth mac1_bw, enum hw_mode_dbs_capab dbs, - enum hw_mode_agile_dfs_capab dfs) + enum hw_mode_agile_dfs_capab dfs, + enum hw_mode_sbs_capab sbs) { uint32_t i; uint32_t t_mac0_tx_ss, t_mac0_rx_ss, t_mac0_bw; uint32_t t_mac1_tx_ss, t_mac1_rx_ss, t_mac1_bw; - uint32_t dbs_mode, agile_dfs_mode; + uint32_t dbs_mode, agile_dfs_mode, sbs_mode; int8_t found = -EINVAL; if (!wma) { @@ -2560,17 +2562,17 @@ static int8_t wma_get_matching_hw_mode_index(tp_wma_handle wma, } for (i = 0; i < wma->num_dbs_hw_modes; i++) { - t_mac0_tx_ss = WMI_DBS_HW_MODE_MAC0_TX_STREAMS_GET( + t_mac0_tx_ss = WMA_HW_MODE_MAC0_TX_STREAMS_GET( wma->hw_mode.hw_mode_list[i]); if (t_mac0_tx_ss != mac0_tx_ss) continue; - t_mac0_rx_ss = WMI_DBS_HW_MODE_MAC0_RX_STREAMS_GET( + t_mac0_rx_ss = WMA_HW_MODE_MAC0_RX_STREAMS_GET( wma->hw_mode.hw_mode_list[i]); if (t_mac0_rx_ss != mac0_rx_ss) continue; - t_mac0_bw = WMI_DBS_HW_MODE_MAC0_BANDWIDTH_GET( + t_mac0_bw = WMA_HW_MODE_MAC0_BANDWIDTH_GET( wma->hw_mode.hw_mode_list[i]); /* * Firmware advertises max bw capability as CBW 80+80 @@ -2580,31 +2582,36 @@ static int8_t wma_get_matching_hw_mode_index(tp_wma_handle wma, if (t_mac0_bw < mac0_bw) continue; - t_mac1_tx_ss = WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET( + t_mac1_tx_ss = WMA_HW_MODE_MAC1_TX_STREAMS_GET( wma->hw_mode.hw_mode_list[i]); if (t_mac1_tx_ss != mac1_tx_ss) continue; - t_mac1_rx_ss = WMI_DBS_HW_MODE_MAC1_RX_STREAMS_GET( + t_mac1_rx_ss = WMA_HW_MODE_MAC1_RX_STREAMS_GET( wma->hw_mode.hw_mode_list[i]); if (t_mac1_rx_ss != mac1_rx_ss) continue; - t_mac1_bw = WMI_DBS_HW_MODE_MAC1_BANDWIDTH_GET( + t_mac1_bw = WMA_HW_MODE_MAC1_BANDWIDTH_GET( wma->hw_mode.hw_mode_list[i]); if (t_mac1_bw < mac1_bw) continue; - dbs_mode = WMI_DBS_HW_MODE_DBS_MODE_GET( + dbs_mode = WMA_HW_MODE_DBS_MODE_GET( wma->hw_mode.hw_mode_list[i]); if (dbs_mode != dbs) continue; - agile_dfs_mode = WMI_DBS_HW_MODE_AGILE_DFS_GET( + agile_dfs_mode = WMA_HW_MODE_AGILE_DFS_GET( wma->hw_mode.hw_mode_list[i]); if (agile_dfs_mode != dfs) continue; + sbs_mode = WMA_HW_MODE_SBS_MODE_GET( + wma->hw_mode.hw_mode_list[i]); + if (sbs_mode != sbs) + continue; + found = i; WMA_LOGI("%s: hw_mode index %d found", __func__, i); @@ -2621,9 +2628,10 @@ static int8_t wma_get_matching_hw_mode_index(tp_wma_handle wma, * @mac1_bw: MAC1 bandwidth configuration * @dbs: HW DBS capability * @dfs: HW Agile DFS capability + * @sbs: HW SBS capability * * Get the HW mode index corresponding to the HW modes spatial stream, - * bandwidth, DBS and Agile DFS capability + * bandwidth, DBS, Agile DFS and SBS capability * * Return: Index number if a match is found or -negative value if not found */ @@ -2632,7 +2640,8 @@ int8_t wma_get_hw_mode_idx_from_dbs_hw_list(enum hw_mode_ss_config mac0_ss, enum hw_mode_ss_config mac1_ss, enum hw_mode_bandwidth mac1_bw, enum hw_mode_dbs_capab dbs, - enum hw_mode_agile_dfs_capab dfs) + enum hw_mode_agile_dfs_capab dfs, + enum hw_mode_sbs_capab sbs) { tp_wma_handle wma; uint32_t mac0_tx_ss, mac0_rx_ss; @@ -2651,14 +2660,14 @@ int8_t wma_get_hw_mode_idx_from_dbs_hw_list(enum hw_mode_ss_config mac0_ss, __func__, mac0_tx_ss, mac0_rx_ss, mac0_bw); WMA_LOGI("%s: MAC1: TxSS=%d, RxSS=%d, BW=%d", __func__, mac1_tx_ss, mac1_rx_ss, mac1_bw); - WMA_LOGI("%s: DBS capab=%d, Agile DFS capab=%d", - __func__, dbs, dfs); + WMA_LOGI("%s: DBS=%d, Agile DFS=%d, SBS=%d", + __func__, dbs, dfs, sbs); return wma_get_matching_hw_mode_index(wma, mac0_tx_ss, mac0_rx_ss, mac0_bw, mac1_tx_ss, mac1_rx_ss, mac1_bw, - dbs, dfs); + dbs, dfs, sbs); } /** @@ -2694,14 +2703,15 @@ QDF_STATUS wma_get_hw_mode_from_idx(uint32_t idx, param = wma->hw_mode.hw_mode_list[idx]; - hw_mode->mac0_tx_ss = WMI_DBS_HW_MODE_MAC0_TX_STREAMS_GET(param); - hw_mode->mac0_rx_ss = WMI_DBS_HW_MODE_MAC0_RX_STREAMS_GET(param); - hw_mode->mac0_bw = WMI_DBS_HW_MODE_MAC0_BANDWIDTH_GET(param); - hw_mode->mac1_tx_ss = WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET(param); - hw_mode->mac1_rx_ss = WMI_DBS_HW_MODE_MAC1_RX_STREAMS_GET(param); - hw_mode->mac1_bw = WMI_DBS_HW_MODE_MAC1_BANDWIDTH_GET(param); - hw_mode->dbs_cap = WMI_DBS_HW_MODE_DBS_MODE_GET(param); - hw_mode->agile_dfs_cap = WMI_DBS_HW_MODE_AGILE_DFS_GET(param); + hw_mode->mac0_tx_ss = WMA_HW_MODE_MAC0_TX_STREAMS_GET(param); + hw_mode->mac0_rx_ss = WMA_HW_MODE_MAC0_RX_STREAMS_GET(param); + hw_mode->mac0_bw = WMA_HW_MODE_MAC0_BANDWIDTH_GET(param); + hw_mode->mac1_tx_ss = WMA_HW_MODE_MAC1_TX_STREAMS_GET(param); + hw_mode->mac1_rx_ss = WMA_HW_MODE_MAC1_RX_STREAMS_GET(param); + hw_mode->mac1_bw = WMA_HW_MODE_MAC1_BANDWIDTH_GET(param); + hw_mode->dbs_cap = WMA_HW_MODE_DBS_MODE_GET(param); + hw_mode->agile_dfs_cap = WMA_HW_MODE_AGILE_DFS_GET(param); + hw_mode->sbs_cap = WMA_HW_MODE_SBS_MODE_GET(param); return QDF_STATUS_SUCCESS; } @@ -2763,7 +2773,7 @@ bool wma_is_hw_dbs_capable(void) for (i = 0; i < wma->num_dbs_hw_modes; i++) { param = wma->hw_mode.hw_mode_list[i]; WMA_LOGI("%s: HW param: %x", __func__, param); - if (WMI_DBS_HW_MODE_DBS_MODE_GET(param)) { + if (WMA_HW_MODE_DBS_MODE_GET(param)) { WMA_LOGI("%s: HW (%d) is DBS capable", __func__, i); found = 1; break; @@ -2866,14 +2876,14 @@ void wma_update_intf_hw_mode_params(uint32_t vdev_id, uint32_t mac_id, wma->interfaces[vdev_id].mac_id = mac_id; if (mac_id == 0) { wma->interfaces[vdev_id].tx_streams = - WMI_DBS_HW_MODE_MAC0_TX_STREAMS_GET(param); + WMA_HW_MODE_MAC0_TX_STREAMS_GET(param); wma->interfaces[vdev_id].rx_streams = - WMI_DBS_HW_MODE_MAC0_RX_STREAMS_GET(param); + WMA_HW_MODE_MAC0_RX_STREAMS_GET(param); } else { wma->interfaces[vdev_id].tx_streams = - WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET(param); + WMA_HW_MODE_MAC1_TX_STREAMS_GET(param); wma->interfaces[vdev_id].rx_streams = - WMI_DBS_HW_MODE_MAC1_RX_STREAMS_GET(param); + WMA_HW_MODE_MAC1_RX_STREAMS_GET(param); } } @@ -2929,15 +2939,15 @@ QDF_STATUS wma_get_dbs_hw_modes(bool *one_by_one_dbs, bool *two_by_two_dbs) uint32_t t_conf1_tx_ss, t_conf1_rx_ss; uint32_t dbs_mode; - t_conf0_tx_ss = WMI_DBS_HW_MODE_MAC0_TX_STREAMS_GET( + t_conf0_tx_ss = WMA_HW_MODE_MAC0_TX_STREAMS_GET( wma->hw_mode.hw_mode_list[i]); - t_conf0_rx_ss = WMI_DBS_HW_MODE_MAC0_RX_STREAMS_GET( + t_conf0_rx_ss = WMA_HW_MODE_MAC0_RX_STREAMS_GET( wma->hw_mode.hw_mode_list[i]); - t_conf1_tx_ss = WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET( + t_conf1_tx_ss = WMA_HW_MODE_MAC1_TX_STREAMS_GET( wma->hw_mode.hw_mode_list[i]); - t_conf1_rx_ss = WMI_DBS_HW_MODE_MAC1_RX_STREAMS_GET( + t_conf1_rx_ss = WMA_HW_MODE_MAC1_RX_STREAMS_GET( wma->hw_mode.hw_mode_list[i]); - dbs_mode = WMI_DBS_HW_MODE_DBS_MODE_GET( + dbs_mode = WMA_HW_MODE_DBS_MODE_GET( wma->hw_mode.hw_mode_list[i]); if (((((t_conf0_tx_ss == conf1_tx_ss) && diff --git a/core/wma/src/wma_utils_ut.c b/core/wma/src/wma_utils_ut.c index 45db586d9f9f..8eb5e3d302e8 100644 --- a/core/wma/src/wma_utils_ut.c +++ b/core/wma/src/wma_utils_ut.c @@ -73,7 +73,7 @@ void wma_set_dbs_capability_ut(uint32_t dbs) } for (i = 0; i < wma->num_dbs_hw_modes; i++) { - WMI_DBS_HW_MODE_DBS_MODE_SET(wma->hw_mode.hw_mode_list[i], + WMA_HW_MODE_DBS_MODE_SET(wma->hw_mode.hw_mode_list[i], dbs); } -- cgit v1.2.3 From e1e7cd1c40ce8cde6205d0e64df11d5a97802f72 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 10 Oct 2016 03:55:03 -0700 Subject: Release 5.1.0.30B Release 5.1.0.30B Change-Id: I524c0c9896eedb0e9907efb739d4e8392440de2e 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 cdb2455bdf06..532b170c49c1 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "A" +#define QWLAN_VERSION_EXTRA "B" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30A" +#define QWLAN_VERSIONSTR "5.1.0.30B" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From f7d62e1cccb99204178cae9baf49219d749acbd2 Mon Sep 17 00:00:00 2001 From: Mukul Sharma Date: Sat, 3 Sep 2016 15:16:22 +0530 Subject: qcacld-3.0: Add ini to raise bug on SSR re-init failure qcacld-2.0 to qcacld-3.0 propagation Currently, If SSR re-init get failed then host raise VOS_BUG. In this type of cases, OEM might prefer not to crash the device instead want wlan recovery using driver unload followed by load. Change-Id: If433aae949326af6a20df2190dd7356f211c4103 CRs-Fixed: 1017278 --- core/hdd/inc/wlan_hdd_cfg.h | 13 +++++++++++++ core/hdd/src/wlan_hdd_cfg.c | 11 +++++++++++ core/hdd/src/wlan_hdd_power.c | 5 ++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 7bbc547e51c0..ab19c7ac9331 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -3405,6 +3405,18 @@ enum dot11p_mode { #define CFG_ADAPTIVE_EXTSCAN_DWELL_MODE_MAX (4) #define CFG_ADAPTIVE_EXTSCAN_DWELL_MODE_DEFAULT (0) +/* + * This parameter will help to debug ssr reinit failure issues + * by raising vos bug so dumps can be collected. If OEM + * wants to avoid this crash, just disable this parameter. + * wlan driver will only recover after driver unload and load. + * Default: Enable + */ +#define CFG_BUG_ON_REINIT_FAILURE_NAME "g_bug_on_reinit_failure" +#define CFG_BUG_ON_REINIT_FAILURE_MIN (0) +#define CFG_BUG_ON_REINIT_FAILURE_MAX (1) +#define CFG_BUG_ON_REINIT_FAILURE_DEFAULT (1) + /* * This parameter will set the algo used in dwell time optimization during * pno scan. see enum wmi_dwelltime_adaptive_mode. @@ -4178,6 +4190,7 @@ struct hdd_config { uint8_t adapt_dwell_passive_mon_intval; uint8_t adapt_dwell_wifi_act_threshold; bool bug_report_for_no_scan_results; + bool bug_on_reinit_failure; #ifdef WLAN_FEATURE_NAN_DATAPATH bool enable_nan_datapath; uint8_t nan_datapath_ndi_channel; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 27b227ec7751..9e944e6d33eb 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -3965,6 +3965,14 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_INDOOR_CHANNEL_SUPPORT_MIN, CFG_INDOOR_CHANNEL_SUPPORT_MAX), + REG_VARIABLE(CFG_BUG_ON_REINIT_FAILURE_NAME, WLAN_PARAM_Integer, + struct hdd_config, bug_on_reinit_failure, + VAR_FLAGS_OPTIONAL | + VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BUG_ON_REINIT_FAILURE_DEFAULT, + CFG_BUG_ON_REINIT_FAILURE_MIN, + CFG_BUG_ON_REINIT_FAILURE_MAX), + REG_VARIABLE(CFG_INTERFACE_CHANGE_WAIT_NAME, WLAN_PARAM_Integer, struct hdd_config, iface_change_wait_time, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, @@ -5590,6 +5598,9 @@ void hdd_cfg_print(hdd_context_t *pHddCtx) hdd_info("Name = [%s] Value = [%u]", CFG_IDLE_TIME_NAME, pHddCtx->config->idle_time_conc); + hdd_info("Name = [%s] Value = [%d]", + CFG_BUG_ON_REINIT_FAILURE_NAME, + pHddCtx->config->bug_on_reinit_failure); hdd_info("Name = [%s] Value = [%u]", CFG_INTERFACE_CHANGE_WAIT_NAME, pHddCtx->config->iface_change_wait_time); diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 26e5f6641987..159346cc0e44 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -1495,6 +1495,7 @@ QDF_STATUS hdd_wlan_re_init(void) hdd_adapter_t *pAdapter; QDF_STATUS qdf_status; int ret; + bool bug_on_reinit_failure = CFG_BUG_ON_REINIT_FAILURE_DEFAULT; hdd_prevent_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_REINIT); @@ -1511,6 +1512,7 @@ QDF_STATUS hdd_wlan_re_init(void) hdd_alert("HDD context is Null"); goto err_re_init; } + bug_on_reinit_failure = pHddCtx->config->bug_on_reinit_failure; /* The driver should always be initialized in STA mode after SSR */ hdd_set_conparam(0); @@ -1591,7 +1593,8 @@ err_wiphy_unregister: err_re_init: /* Allow the phone to go to sleep */ hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_REINIT); - QDF_BUG(0); + if (bug_on_reinit_failure) + QDF_BUG(0); return -EPERM; success: -- cgit v1.2.3 From 61bb0bcd998a3ade96722b8b8e8a23c7fde591df Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 10 Oct 2016 04:33:23 -0700 Subject: Release 5.1.0.30C Release 5.1.0.30C Change-Id: I403a76b07b94278931713de0018e437f2dd920d8 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 532b170c49c1..f249bb0d40ee 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "B" +#define QWLAN_VERSION_EXTRA "C" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30B" +#define QWLAN_VERSIONSTR "5.1.0.30C" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 4afc226c491bb4d1a04bd5cbb52ca7024ad942b5 Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Thu, 6 Oct 2016 13:35:57 -0700 Subject: qcacld-3.0: Fix uninitialized variable use in cds_set_5g_channel_params Initialize pointers bonded_chan_ptr and bonded_chan_ptr2 in function with NULL and add check to avoid NULL/wild pointer dereference. Change-Id: I48e4417998d75a7a42d6e55106896709016ac61c CRs-Fixed: 1075098 --- core/cds/src/cds_reg_service.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/core/cds/src/cds_reg_service.c b/core/cds/src/cds_reg_service.c index 32cfc719d767..302c670c0aca 100644 --- a/core/cds/src/cds_reg_service.c +++ b/core/cds/src/cds_reg_service.c @@ -449,8 +449,8 @@ static void cds_set_5g_channel_params(uint16_t oper_ch, { enum channel_state chan_state = CHANNEL_STATE_ENABLE; enum channel_state chan_state2 = CHANNEL_STATE_ENABLE; - const struct bonded_chan *bonded_chan_ptr; - const struct bonded_chan *bonded_chan_ptr2; + const struct bonded_chan *bonded_chan_ptr = NULL; + const struct bonded_chan *bonded_chan_ptr2 = NULL; if (CH_WIDTH_MAX <= ch_params->ch_width) ch_params->ch_width = CH_WIDTH_80P80MHZ; @@ -481,16 +481,19 @@ static void cds_set_5g_channel_params(uint16_t oper_ch, bonded_chan_40mhz_array, QDF_ARRAY_SIZE(bonded_chan_40mhz_array), &bonded_chan_ptr2); - if (oper_ch == bonded_chan_ptr2->start_ch) - ch_params->sec_ch_offset = + if (bonded_chan_ptr && bonded_chan_ptr2) { + if (oper_ch == + bonded_chan_ptr2->start_ch) + ch_params->sec_ch_offset = PHY_DOUBLE_CHANNEL_LOW_PRIMARY; - else - ch_params->sec_ch_offset = + else + ch_params->sec_ch_offset = PHY_DOUBLE_CHANNEL_HIGH_PRIMARY; - ch_params->center_freq_seg0 = - (bonded_chan_ptr->start_ch + - bonded_chan_ptr->end_ch)/2; + ch_params->center_freq_seg0 = + (bonded_chan_ptr->start_ch + + bonded_chan_ptr->end_ch)/2; + } } break; } @@ -501,8 +504,10 @@ static void cds_set_5g_channel_params(uint16_t oper_ch, chan_state = cds_search_5g_bonded_channel(oper_ch, CH_WIDTH_80MHZ, &bonded_chan_ptr); - ch_params->center_freq_seg0 = (bonded_chan_ptr->start_ch + - bonded_chan_ptr->end_ch)/2; + if (bonded_chan_ptr) + ch_params->center_freq_seg0 = + (bonded_chan_ptr->start_ch + + bonded_chan_ptr->end_ch)/2; } QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO, "ch %d ch_wd %d freq0 %d freq1 %d", oper_ch, -- cgit v1.2.3 From 0a83fb550ff44e0f5d345a8c506e7d537eca87ff Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 10 Oct 2016 05:12:12 -0700 Subject: Release 5.1.0.30D Release 5.1.0.30D Change-Id: I480aa1260718be59210d13be56d5d28a9df18a2c 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 f249bb0d40ee..fff69542c2ab 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "C" +#define QWLAN_VERSION_EXTRA "D" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30C" +#define QWLAN_VERSIONSTR "5.1.0.30D" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From d53d1a85c67919ebb07b28ec02131576d81b1644 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 3 Oct 2016 12:57:33 -0700 Subject: qcacld-3.0: Cleanup code related to unit-test framework A previous unit-test framework change contained some outstanding clean code issues. Address the issues to ensure cleaner code is maintained. Change-Id: I889d4e12a7c00b5fc6cb409bc077466019442456 CRs-Fixed: 1073756 --- core/hdd/inc/wlan_hdd_driver_ops.h | 41 ++++++++++++++++ core/hdd/inc/wlan_hdd_power.h | 13 ++++++ core/hdd/src/wlan_hdd_driver_ops.c | 37 --------------- core/hdd/src/wlan_hdd_power.c | 96 +++++++++++++++----------------------- core/pld/inc/pld_common.h | 3 -- 5 files changed, 91 insertions(+), 99 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_driver_ops.h b/core/hdd/inc/wlan_hdd_driver_ops.h index f919e8decf1c..34c8c118c014 100644 --- a/core/hdd/inc/wlan_hdd_driver_ops.h +++ b/core/hdd/inc/wlan_hdd_driver_ops.h @@ -37,9 +37,50 @@ */ int wlan_hdd_register_driver(void); void wlan_hdd_unregister_driver(void); + +/** + * wlan_hdd_bus_suspend() - suspend the wlan bus + * + * This function is called by the platform driver to suspend the + * wlan bus + * + * @state: state + * + * Return: QDF_STATUS + */ int wlan_hdd_bus_suspend(pm_message_t state); + +/** + * wlan_hdd_bus_suspend_noirq() - handle .suspend_noirq callback + * + * This function is called by the platform driver to complete the + * bus suspend callback when device interrupts are disabled by kernel. + * Call HIF and WMA suspend_noirq callbacks to make sure there is no + * wake up pending from FW before allowing suspend. + * + * Return: 0 for success and -EBUSY if FW is requesting wake up + */ int wlan_hdd_bus_suspend_noirq(void); + +/** + * wlan_hdd_bus_resume(): wake up the bus + * + * This function is called by the platform driver to resume wlan + * bus + * + * Return: void + */ int wlan_hdd_bus_resume(void); + +/** + * wlan_hdd_bus_resume_noirq(): handle bus resume no irq + * + * This function is called by the platform driver to do bus + * resume no IRQ before calling resume callback. Call WMA and HIF + * layers to complete the resume_noirq. + * + * Return: 0 for success and negative error code for failure + */ int wlan_hdd_bus_resume_noirq(void); void hdd_hif_close(void *hif_ctx); int hdd_hif_open(struct device *dev, void *bdev, const hif_bus_id *bid, diff --git a/core/hdd/inc/wlan_hdd_power.h b/core/hdd/inc/wlan_hdd_power.h index 61f4d6d490c9..fee466599820 100644 --- a/core/hdd/inc/wlan_hdd_power.h +++ b/core/hdd/inc/wlan_hdd_power.h @@ -208,7 +208,20 @@ void hdd_wlan_suspend_resume_event(uint8_t state) {} * enabling/disabling appropriate copy engine irqs. */ #ifdef WLAN_SUSPEND_RESUME_TEST +/** + * hdd_wlan_fake_apps_resume() - Resume from unit-test triggered suspend + * @wiphy: wiphy struct from a validated hdd context + * + * Return: Zero on success, calls QDF_BUG() on failure + */ int hdd_wlan_fake_apps_resume(struct wiphy *wiphy); + +/** + * hdd_wlan_fake_apps_suspend() - Initiate a unit-test triggered suspend + * @wiphy: wiphy struct from a validated hdd context + * + * Return: Zero on success, suspend related non-zero error code on failure + */ int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy); #else static inline int hdd_wlan_fake_apps_resume(struct wiphy *wiphy) diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index a20fcb7b7836..a5a714834542 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/core/hdd/src/wlan_hdd_driver_ops.c @@ -558,16 +558,6 @@ done: return err; } -/** - * wlan_hdd_bus_suspend() - suspend the wlan bus - * - * This function is called by the platform driver to suspend the - * wlan bus - * - * @state: state - * - * Return: QDF_STATUS - */ int wlan_hdd_bus_suspend(pm_message_t state) { int ret; @@ -635,16 +625,6 @@ done: return err; } -/** - * wlan_hdd_bus_suspend_noirq() - handle .suspend_noirq callback - * - * This function is called by the platform driver to complete the - * bus suspend callback when device interrupts are disabled by kernel. - * Call HIF and WMA suspend_noirq callbacks to make sure there is no - * wake up pending from FW before allowing suspend. - * - * Return: 0 for success and -EBUSY if FW is requesting wake up - */ int wlan_hdd_bus_suspend_noirq(void) { int ret; @@ -700,14 +680,6 @@ static int __wlan_hdd_bus_resume(void) return status; } -/** - * wlan_hdd_bus_resume(): wake up the bus - * - * This function is called by the platform driver to resume wlan - * bus - * - * Return: void - */ int wlan_hdd_bus_resume(void) { int ret; @@ -758,15 +730,6 @@ int __wlan_hdd_bus_resume_noirq(void) return status; } -/** - * wlan_hdd_bus_resume_noirq(): handle bus resume no irq - * - * This function is called by the platform driver to do bus - * resume no IRQ before calling resume callback. Call WMA and HIF - * layers to complete the resume_noirq. - * - * Return: 0 for success and negative error code for failure - */ int wlan_hdd_bus_resume_noirq(void) { int ret; diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 159346cc0e44..ae0e24fed9c5 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -2356,7 +2356,7 @@ int hdd_set_qpower_config(hdd_context_t *hddctx, hdd_adapter_t *adapter, #ifdef WLAN_SUSPEND_RESUME_TEST /* - * On Rome/iHelium there are 12 CE irqs and #2 is the wake irq. This may not be + * On iHelium there are 12 CE irqs and #2 is the wake irq. This may not be * a valid assumption on future platforms. */ #define CE_IRQ_COUNT 12 @@ -2366,7 +2366,41 @@ static struct wiphy *g_wiphy; #define HDD_FA_SUSPENDED_BIT (0) static unsigned long fake_apps_state; -static int __hdd_wlan_fake_apps_resume(struct wiphy *wiphy); +/** + * __hdd_wlan_fake_apps_resume() - The core logic for + * hdd_wlan_fake_apps_resume() skipping the call to hif_fake_apps_resume(), + * which is only need for non-irq resume + * @wiphy: wiphy struct from a validated hdd context + * + * Return: Zero on success, calls QDF_BUG() on failure + */ +static void __hdd_wlan_fake_apps_resume(struct wiphy *wiphy) +{ + qdf_device_t qdf_dev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); + int i, resume_err; + + hdd_info("Unit-test resume WLAN"); + if (!test_and_clear_bit(HDD_FA_SUSPENDED_BIT, &fake_apps_state)) { + hdd_info("Not unit-test suspended; Nothing to do"); + return; + } + + /* disable wake irq */ + pld_disable_irq(qdf_dev->dev, CE_WAKE_IRQ); + + resume_err = wlan_hdd_bus_resume_noirq(); + QDF_BUG(resume_err == 0); + + /* simulate kernel enable irqs */ + for (i = 0; i < CE_IRQ_COUNT; i++) + pld_enable_irq(qdf_dev->dev, i); + + resume_err = wlan_hdd_bus_resume(); + QDF_BUG(resume_err == 0); + + resume_err = wlan_hdd_cfg80211_resume_wlan(wiphy); + QDF_BUG(resume_err == 0); +} /** * hdd_wlan_fake_apps_resume_irq_callback() - Irq callback function for resuming @@ -2386,12 +2420,6 @@ static void hdd_wlan_fake_apps_resume_irq_callback(uint32_t val) g_wiphy = NULL; } -/** - * hdd_wlan_fake_apps_suspend() - Initiate a unit-test triggered suspend - * @wiphy: wiphy struct from a validated hdd context - * - * Return: Zero on success, suspend related non-zero error code on failure - */ int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy) { qdf_device_t qdf_dev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); @@ -2449,62 +2477,12 @@ resume_done: return suspend_err; } -/** - * hdd_wlan_fake_apps_resume() - Resume from unit-test triggered suspend - * @wiphy: wiphy struct from a validated hdd context - * - * Return: Zero on success, calls QDF_BUG() on failure - */ int hdd_wlan_fake_apps_resume(struct wiphy *wiphy) { struct hif_opaque_softc *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); - int err; hif_fake_apps_resume(hif_ctx); - err = __hdd_wlan_fake_apps_resume(wiphy); - if (err) { - hif_fake_apps_suspend(hif_ctx, - hdd_wlan_fake_apps_resume_irq_callback); - return err; - } - - return 0; -} - -/** - * __hdd_wlan_fake_apps_resume() - The core logic for - * hdd_wlan_fake_apps_resume() skipping the call to hif_fake_apps_resume(), - * which is only need for non-irq resume - * @wiphy: wiphy struct from a validated hdd context - * - * Return: Zero on success, calls QDF_BUG() on failure - */ -static int __hdd_wlan_fake_apps_resume(struct wiphy *wiphy) -{ - qdf_device_t qdf_dev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); - int i, resume_err; - - hdd_info("Unit-test resume WLAN"); - if (!test_and_clear_bit(HDD_FA_SUSPENDED_BIT, &fake_apps_state)) { - hdd_info("Not unit-test suspended; Nothing to do"); - return 0; - } - - /* disable wake irq */ - pld_disable_irq(qdf_dev->dev, CE_WAKE_IRQ); - - resume_err = wlan_hdd_bus_resume_noirq(); - QDF_BUG(resume_err == 0); - - /* simulate kernel enable irqs */ - for (i = 0; i < CE_IRQ_COUNT; i++) - pld_enable_irq(qdf_dev->dev, i); - - resume_err = wlan_hdd_bus_resume(); - QDF_BUG(resume_err == 0); - - resume_err = wlan_hdd_cfg80211_resume_wlan(wiphy); - QDF_BUG(resume_err == 0); + __hdd_wlan_fake_apps_resume(wiphy); return 0; } diff --git a/core/pld/inc/pld_common.h b/core/pld/inc/pld_common.h index 4bb77b27cb94..bcf647b0b1a4 100644 --- a/core/pld/inc/pld_common.h +++ b/core/pld/inc/pld_common.h @@ -379,7 +379,4 @@ void *pld_smmu_get_mapping(struct device *dev); int pld_smmu_map(struct device *dev, phys_addr_t paddr, uint32_t *iova_addr, size_t size); unsigned int pld_socinfo_get_serial_number(struct device *dev); - -void pld_enable_irq(struct device *dev, unsigned int ce_id); -void pld_disable_irq(struct device *dev, unsigned int ce_id); #endif -- cgit v1.2.3 From 105d790504fe44853ff8e7d72f1342b62938e172 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 3 Oct 2016 16:27:59 -0700 Subject: qcacld-3.0: Log suspend failure reasons Increment counters for the various reasons a suspend might fail, and log them via print messages at time of failure. Change-Id: Ie1fb700577aee5f1b3a0d29277b81299a13dbde3 CRs-Fixed: 1073824 --- core/hdd/inc/wlan_hdd_main.h | 22 +++++++++++++++++++++- core/hdd/inc/wlan_hdd_power.h | 14 ++++++++++++++ core/hdd/src/wlan_hdd_driver_ops.c | 8 ++++++-- core/hdd/src/wlan_hdd_power.c | 25 +++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 7d9926e58aac..284cb7bce939 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1235,8 +1235,25 @@ struct acs_dfs_policy { uint8_t acs_channel; }; -/** Adapter structure definition */ +/** + * enum suspend_fail_reason: Reasons a WLAN suspend might fail + * SUSPEND_FAIL_IPA: IPA in progress + * SUSPEND_FAIL_RADAR: radar scan in progress + * SUSPEND_FAIL_ROAM: roaming in progress + * SUSPEND_FAIL_SCAN: scan in progress + * SUSPEND_FAIL_INITIAL_WAKEUP: received initial wakeup from firmware + * SUSPEND_FAIL_MAX_COUNT: the number of wakeup reasons, always at the end + */ +enum suspend_fail_reason { + SUSPEND_FAIL_IPA, + SUSPEND_FAIL_RADAR, + SUSPEND_FAIL_ROAM, + SUSPEND_FAIL_SCAN, + SUSPEND_FAIL_INITIAL_WAKEUP, + SUSPEND_FAIL_MAX_COUNT +}; +/** Adapter structure definition */ struct hdd_context_s { /** Global CDS context */ v_CONTEXT_t pcds_context; @@ -1510,6 +1527,9 @@ struct hdd_context_s { bool update_mac_addr_to_fw; struct acs_dfs_policy acs_policy; uint16_t wmi_max_len; + + /* counters for failed suspend reasons */ + uint32_t suspend_fail_stats[SUSPEND_FAIL_MAX_COUNT]; }; /*--------------------------------------------------------------------------- diff --git a/core/hdd/inc/wlan_hdd_power.h b/core/hdd/inc/wlan_hdd_power.h index fee466599820..abb69bd56e66 100644 --- a/core/hdd/inc/wlan_hdd_power.h +++ b/core/hdd/inc/wlan_hdd_power.h @@ -199,6 +199,20 @@ static inline void hdd_wlan_suspend_resume_event(uint8_t state) {} #endif /* FEATURE_WLAN_DIAG_SUPPORT */ +/** + * wlan_hdd_inc_suspend_stats() - Prints, then increments, then prints suspend + * failed statistics. + * @hdd_ctx: The HDD context to operate on + * @reason: The suspend failed reason to increment + * + * This function prints all of the suspend failed statistics, increments the + * specified suspend fail reason statistic, and prints the them all again. This + * is for easily keeping track of the most common reasons suspend fails. + * + * Return: none + */ +void wlan_hdd_inc_suspend_stats(hdd_context_t *hdd_ctx, + enum suspend_fail_reason reason); /* * Unit-test suspend/resume is a testing feature that allows putting firmware diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index a5a714834542..70295b12bcd0 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/core/hdd/src/wlan_hdd_driver_ops.c @@ -618,10 +618,14 @@ resume_hif_noirq: status = hif_bus_resume_noirq(hif_ctx); QDF_BUG(!status); done: - if (err == -EAGAIN) + if (err == -EAGAIN) { hdd_err("Firmware attempting wakeup, try again"); - else + wlan_hdd_inc_suspend_stats(hdd_ctx, + SUSPEND_FAIL_INITIAL_WAKEUP); + } else { hdd_err("suspend_noirq failed, status = %d", err); + } + return err; } diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index ae0e24fed9c5..87fdfdacaa21 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -1667,6 +1667,24 @@ static int wlan_hdd_set_powersave(hdd_adapter_t *adapter, return 0; } +static void wlan_hdd_print_suspend_fail_stats(hdd_context_t *hdd_ctx) +{ + hdd_err("ipa:%d, radar:%d, roam:%d, scan:%d, initial_wakeup:%d", + hdd_ctx->suspend_fail_stats[SUSPEND_FAIL_IPA], + hdd_ctx->suspend_fail_stats[SUSPEND_FAIL_RADAR], + hdd_ctx->suspend_fail_stats[SUSPEND_FAIL_ROAM], + hdd_ctx->suspend_fail_stats[SUSPEND_FAIL_SCAN], + hdd_ctx->suspend_fail_stats[SUSPEND_FAIL_INITIAL_WAKEUP]); +} + +void wlan_hdd_inc_suspend_stats(hdd_context_t *hdd_ctx, + enum suspend_fail_reason reason) +{ + wlan_hdd_print_suspend_fail_stats(hdd_ctx); + hdd_ctx->suspend_fail_stats[reason]++; + wlan_hdd_print_suspend_fail_stats(hdd_ctx); +} + /** * __wlan_hdd_cfg80211_resume_wlan() - cfg80211 resume callback * @wiphy: Pointer to wiphy @@ -1859,6 +1877,8 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, WLAN_HDD_GET_AP_CTX_PTR(pAdapter)-> dfs_cac_block_tx) { hdd_err("RADAR detection in progress, do not allow suspend"); + wlan_hdd_inc_suspend_stats(pHddCtx, + SUSPEND_FAIL_RADAR); return -EAGAIN; } else if (!pHddCtx->config->enableSapSuspend) { /* return -EOPNOTSUPP if SAP does not support @@ -1891,6 +1911,8 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, if (sme_sta_in_middle_of_roaming (pHddCtx->hHal, pAdapter->sessionId)) { hdd_err("Roaming in progress, do not allow suspend"); + wlan_hdd_inc_suspend_stats(pHddCtx, + SUSPEND_FAIL_ROAM); return -EAGAIN; } @@ -1905,6 +1927,8 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, msecs_to_jiffies(WLAN_WAIT_TIME_ABORTSCAN)); if (!status) { hdd_err("Timeout occurred while waiting for abort scan"); + wlan_hdd_inc_suspend_stats(pHddCtx, + SUSPEND_FAIL_SCAN); return -ETIME; } } @@ -1918,6 +1942,7 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, */ if (hdd_ipa_suspend(pHddCtx)) { hdd_err("IPA not ready to suspend!"); + wlan_hdd_inc_suspend_stats(pHddCtx, SUSPEND_FAIL_IPA); return -EAGAIN; } -- cgit v1.2.3 From 87c4428fd1af9cde0112b6b7e5bc02046141c6ab Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Thu, 6 Oct 2016 10:17:13 -0700 Subject: qcacld-3.0: Change RA Filtering to Enabled by Default As a fallback mechanism in case APF is disabled for any reason, ensure RA Filtering is enabled by default. Change-Id: Ib9163ca5dd89a7594c2e02b5f8c099ddbb5b3fc6 CRs-Fixed: 1075102 --- core/hdd/inc/wlan_hdd_cfg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index ab19c7ac9331..4ba70e7ca1cb 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2370,7 +2370,7 @@ typedef enum { #define CFG_RA_FILTER_ENABLE_NAME "gRAFilterEnable" #define CFG_RA_FILTER_ENABLE_MIN (0) #define CFG_RA_FILTER_ENABLE_MAX (1) -#define CFG_RA_FILTER_ENABLE_DEFAULT (0) +#define CFG_RA_FILTER_ENABLE_DEFAULT (1) #define CFG_RA_RATE_LIMIT_INTERVAL_NAME "gRArateLimitInterval" #define CFG_RA_RATE_LIMIT_INTERVAL_MIN (60) -- cgit v1.2.3 From 14ee4a788a31516d1d814ba3f4493cc4a4e44763 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 10 Oct 2016 13:01:05 -0700 Subject: Release 5.1.0.30E Release 5.1.0.30E Change-Id: I67fb71a0708ceb0de1bdde815a3d364971d7537b 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 fff69542c2ab..1e1d89827828 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "D" +#define QWLAN_VERSION_EXTRA "E" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30D" +#define QWLAN_VERSIONSTR "5.1.0.30E" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 43e872901a857966f1fe0d83396164f98633b42f Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 10 Oct 2016 10:38:25 -0700 Subject: qcacld-3.0: Parse timer params in setpno iwpriv command Currently, the setpno iwpriv command ignores timer related parameters. Expand the setpno iwpriv command logic to parse timer related parameters. Change-Id: Ib318d3821e7da0fb7b2887d935ec5f5c706e6263 CRs-Fixed: 1076096 --- core/hdd/src/wlan_hdd_wext.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index fdb4e5dfdd7e..6112c7527eae 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -9335,13 +9335,12 @@ void found_pref_network_cb(void *callbackContext, * for each network: * * - * - * for each timer: - * + * + * * * * e.g: - * 1 2 4 test 0 0 3 1 6 11 2 40 5 test2 4 4 6 1 2 3 4 5 6 1 0 2 5 2 300 0 1 + * 1 2 4 test 0 0 3 1 6 11 2 40 5 test2 4 4 6 1 2 3 4 5 6 1 0 5 2 1 * * this translates into: * ----------------------------- @@ -9357,10 +9356,8 @@ void found_pref_network_cb(void *callbackContext, * search on 6 channels 1, 2, 3, 4, 5 and 6 * bcast type is non-bcast (directed probe will be sent) * and must not meet any RSSI threshold - * 2 scan timers: * scan every 5 seconds 2 times - * then scan every 300 seconds until stopped - * enable on suspend + * enable on suspend */ static int __iw_set_pno(struct net_device *dev, struct iw_request_info *info, @@ -9526,6 +9523,17 @@ static int __iw_set_pno(struct net_device *dev, ptr += offset; } /* For ucNetworkCount */ + request.fast_scan_period = 0; + if (sscanf(ptr, "%u %n", &(request.fast_scan_period), &offset) > 0) { + request.fast_scan_period *= MSEC_PER_SEC; + ptr += offset; + } + + request.fast_scan_max_cycles = 0; + if (sscanf(ptr, "%hhu %n", &(request.fast_scan_max_cycles), + &offset) > 0) + ptr += offset; + params = sscanf(ptr, "%hhu %n", &(mode), &offset); request.modePNO = mode; -- cgit v1.2.3 From 02e3608a68179f14ac2fdd7698d378d493e8eec2 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 10 Oct 2016 17:16:23 -0700 Subject: Release 5.1.0.30F Release 5.1.0.30F Change-Id: I973a03e4d88ed9841e81f0609f840f5a6d59d105 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 1e1d89827828..dc208815b8ee 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "E" +#define QWLAN_VERSION_EXTRA "F" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30E" +#define QWLAN_VERSIONSTR "5.1.0.30F" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From ac39a10faeeea4634b42fcdd894b05b991b1be6c Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Fri, 7 Oct 2016 10:58:29 -0700 Subject: qcacld-3.0: Panic when wait for WMI_SERVICE_READY_EXT_EVENT times out Change ASSERT to BUG_ON when wait for WMI_SERVICE_READY_EXT_EVENT times out in insmod thread. Change-Id: Ie666fd0881969a503e6b3635cdc5bb7f223776ec CRs-Fixed: 1075166 --- core/cds/src/cds_api.c | 2 +- core/wma/src/wma_main.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 43a8ea336611..1cfb12871f5b 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -519,8 +519,8 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, "Failed to get ready event from target firmware"); + QDF_BUG(0); htc_stop(gp_cds_context->htc_ctx); - QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 3d65f13c23ca..bc2b52d0b308 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -121,8 +121,8 @@ static void wma_service_ready_ext_evt_timeout(void *data) } end: - /* Panic so that we can debug why FW is not responding */ - QDF_BUG(0); + /* Assert here. Panic is being called in insmod thread */ + QDF_ASSERT(0); } /** -- cgit v1.2.3 From 8cf22ab5afac1c35e022077d149fe3256bad5688 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 10 Oct 2016 22:12:21 -0700 Subject: Release 5.1.0.30G Release 5.1.0.30G Change-Id: I566ee17f2d1f05bebb3ddb47c8e30c1a8a8aad6a 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 dc208815b8ee..7dd8a95dbf7f 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "F" +#define QWLAN_VERSION_EXTRA "G" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30F" +#define QWLAN_VERSIONSTR "5.1.0.30G" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 018d7d3f31379852b56ef783fb1ace15f25d00eb Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 14:31:11 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_assoc We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_assoc. Change-Id: I89f3273ff3d2bf3f68d1e8c39dd967e07637b265 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_assoc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index c5a5fcac0922..09aab866e173 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -1425,7 +1425,7 @@ QDF_STATUS hdd_roam_deregister_sta(hdd_adapter_t *pAdapter, uint8_t staId) * * Return: None */ -void hdd_print_bss_info(hdd_station_ctx_t *hdd_sta_ctx) +static void hdd_print_bss_info(hdd_station_ctx_t *hdd_sta_ctx) { uint32_t *cap_info; @@ -1685,7 +1685,7 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, * * Return: None */ -void hdd_set_peer_authorized_event(uint32_t vdev_id) +static void hdd_set_peer_authorized_event(uint32_t vdev_id) { hdd_context_t *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); hdd_adapter_t *adapter = NULL; -- cgit v1.2.3 From f1bf3a6da093776268add62dbfb3069e5b2e5e97 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 15:48:13 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_cfg We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_cfg. Change-Id: Ie23da29a1515249c04185ad4e146d8c9f4256c0f CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_cfg.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 9e944e6d33eb..4ad684334918 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -5868,7 +5868,7 @@ static void hdd_override_all_ps(hdd_context_t *hdd_ctx) * * Return: none */ -void hdd_set_rx_mode_value(hdd_context_t *hdd_ctx) +static void hdd_set_rx_mode_value(hdd_context_t *hdd_ctx) { if (hdd_ctx->config->rx_mode & CFG_ENABLE_RX_THREAD && hdd_ctx->config->rx_mode & CFG_ENABLE_RPS) { @@ -6136,8 +6136,9 @@ static QDF_STATUS hdd_convert_string_to_array(char *str, uint8_t *array, * * Return: QDF_STATUS */ -QDF_STATUS hdd_hex_string_to_u8_array(char *str, uint8_t *hex_array, - uint8_t *len, uint8_t array_max_len) +static QDF_STATUS hdd_hex_string_to_u8_array(char *str, uint8_t *hex_array, + uint8_t *len, + uint8_t array_max_len) { return hdd_convert_string_to_array(str, hex_array, len, array_max_len, true); -- cgit v1.2.3 From 8b8a04bd1c267baf959d25e0e9b4313f8ae4a001 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 15:49:43 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_cfg80211 We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_cfg80211. Change-Id: I749b17dfc313fa72da49116a5452a5c63102f718 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_cfg80211.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 1d40f77e2804..ae1d71d7bf2b 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -2135,7 +2135,8 @@ wlan_hdd_cfg80211_get_concurrency_matrix(struct wiphy *wiphy, * This is called to turn ON or SET the feature flag for the requested feature. **/ #define NUM_BITS_IN_BYTE 8 -void wlan_hdd_cfg80211_set_feature(uint8_t *feature_flags, uint8_t feature) +static void wlan_hdd_cfg80211_set_feature(uint8_t *feature_flags, + uint8_t feature) { uint32_t index; uint8_t bit_mask; @@ -6607,10 +6608,10 @@ static int wlan_hdd_sap_get_nol(hdd_adapter_t *ap_adapter, uint8_t *nol, * * Return: Zero on success and non zero value on error */ -int wlan_hdd_validate_and_get_pre_cac_ch(hdd_context_t *hdd_ctx, - hdd_adapter_t *ap_adapter, - uint8_t channel, - uint8_t *pre_cac_chan) +static int wlan_hdd_validate_and_get_pre_cac_ch(hdd_context_t *hdd_ctx, + hdd_adapter_t *ap_adapter, + uint8_t channel, + uint8_t *pre_cac_chan) { uint32_t i, j; QDF_STATUS status; @@ -10423,6 +10424,7 @@ static int wlan_hdd_cfg80211_set_default_key(struct wiphy *wiphy, * Return: bss found in kernel cache */ #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)) && !defined(WITH_BACKPORTS) +static struct cfg80211_bss *wlan_hdd_cfg80211_get_bss(struct wiphy *wiphy, struct ieee80211_channel *channel, const u8 *bssid, const u8 *ssid, size_t ssid_len) @@ -10434,6 +10436,7 @@ struct cfg80211_bss *wlan_hdd_cfg80211_get_bss(struct wiphy *wiphy, WLAN_CAPABILITY_ESS); } #else +static struct cfg80211_bss *wlan_hdd_cfg80211_get_bss(struct wiphy *wiphy, struct ieee80211_channel *channel, const u8 *bssid, const u8 *ssid, size_t ssid_len) @@ -11664,7 +11667,7 @@ static int wlan_hdd_add_assoc_ie(hdd_wext_state_t *wext_state, * * Return: 0 for success, non-zero for failure */ -int wlan_hdd_cfg80211_set_ie(hdd_adapter_t *pAdapter, const uint8_t *ie, +static int wlan_hdd_cfg80211_set_ie(hdd_adapter_t *pAdapter, const uint8_t *ie, size_t ie_len) { hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); @@ -11991,8 +11994,8 @@ static bool hdd_is_wpaie_present(const uint8_t *ie, uint8_t ie_len) * * Return: 0 for success, non-zero for failure */ -int wlan_hdd_cfg80211_set_privacy(hdd_adapter_t *pAdapter, - struct cfg80211_connect_params *req) +static int wlan_hdd_cfg80211_set_privacy(hdd_adapter_t *pAdapter, + struct cfg80211_connect_params *req) { int status = 0; hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); @@ -12364,7 +12367,7 @@ static int wlan_hdd_cfg80211_connect(struct wiphy *wiphy, * * Return: 0 for success, non-zero for failure */ -int wlan_hdd_disconnect(hdd_adapter_t *pAdapter, u16 reason) +static int wlan_hdd_disconnect(hdd_adapter_t *pAdapter, u16 reason) { int status, result = 0; unsigned long rc; @@ -13929,6 +13932,7 @@ void wlan_hdd_cfg80211_update_replay_counter_callback(void *callbackContext, * * Return: 0 for success, non-zero for failure */ +static int __wlan_hdd_cfg80211_set_rekey_data(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_gtk_rekey_data *data) @@ -14017,6 +14021,7 @@ int __wlan_hdd_cfg80211_set_rekey_data(struct wiphy *wiphy, * * Return: 0 for success, non-zero for failure */ +static int wlan_hdd_cfg80211_set_rekey_data(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_gtk_rekey_data *data) @@ -14182,7 +14187,8 @@ wlan_hdd_cfg80211_set_mac_acl(struct wiphy *wiphy, * * Return: none */ -void wlan_hdd_cfg80211_lphb_ind_handler(void *pHddCtx, tSirLPHBInd *lphbInd) +static void wlan_hdd_cfg80211_lphb_ind_handler(void *pHddCtx, + tSirLPHBInd *lphbInd) { struct sk_buff *skb; -- cgit v1.2.3 From 510779e8bf49ee349702e86c6606b619dded6e3e Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 15:51:12 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_debugfs We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_debugfs. Change-Id: I6ebadd731e4d92a63025567ef75bc939faa0e546 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_debugfs.c | 1 + 1 file changed, 1 insertion(+) diff --git a/core/hdd/src/wlan_hdd_debugfs.c b/core/hdd/src/wlan_hdd_debugfs.c index cb1155f8e161..e5652b4f1c53 100644 --- a/core/hdd/src/wlan_hdd_debugfs.c +++ b/core/hdd/src/wlan_hdd_debugfs.c @@ -39,6 +39,7 @@ #define HDD_DISALLOW_LEGACY_HDDLOG 1 #include +#include #include #include -- cgit v1.2.3 From 7782cb90b89f749838b4e2347f43876c04194ab4 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 14:22:40 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_driver_ops We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_driver_ops. Change-Id: I6a941cd82af543d433427b5ce3aad80f7e1c8e57 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_driver_ops.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index 70295b12bcd0..57b1ce695434 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/core/hdd/src/wlan_hdd_driver_ops.c @@ -48,6 +48,7 @@ #include "bmi.h" #include "cdp_txrx_bus.h" #include "pld_common.h" +#include "wlan_hdd_driver_ops.h" #ifdef MODULE #define WLAN_MODULE_NAME module_name(THIS_MODULE) @@ -302,8 +303,9 @@ void hdd_hif_close(void *hif_ctx) * * Return: void */ -void hdd_init_qdf_ctx(struct device *dev, void *bdev, - enum qdf_bus_type bus_type, const struct hif_bus_id *bid) +static void hdd_init_qdf_ctx(struct device *dev, void *bdev, + enum qdf_bus_type bus_type, + const struct hif_bus_id *bid) { qdf_device_t qdf_dev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); @@ -470,7 +472,7 @@ static void wlan_hdd_shutdown(void) * * Return: void */ -void wlan_hdd_crash_shutdown(void) +static void wlan_hdd_crash_shutdown(void) { hif_crash_shutdown(cds_get_context(QDF_MODULE_ID_HIF)); } @@ -485,7 +487,7 @@ void wlan_hdd_crash_shutdown(void) * * Return: void */ -void wlan_hdd_notify_handler(int state) +static void wlan_hdd_notify_handler(int state) { if (!QDF_IS_EPPING_ENABLED(cds_get_conparam())) { int ret = 0; @@ -579,7 +581,7 @@ int wlan_hdd_bus_suspend(pm_message_t state) * * Return: 0 for success and -EBUSY if FW is requesting wake up */ -int __wlan_hdd_bus_suspend_noirq(void) +static int __wlan_hdd_bus_suspend_noirq(void) { hdd_context_t *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); void *hif_ctx; @@ -704,7 +706,7 @@ int wlan_hdd_bus_resume(void) * * Return: 0 for success and negative error code for failure */ -int __wlan_hdd_bus_resume_noirq(void) +static int __wlan_hdd_bus_resume_noirq(void) { hdd_context_t *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); void *hif_ctx; -- cgit v1.2.3 From cd2a079b97702e8b939a5f64510a9b97da927f63 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 15:17:13 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_ext_scan We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_ext_scan. Change-Id: I29c7ba3ef4e9eaa8a28268161a10f3b25249601d CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_ext_scan.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/hdd/src/wlan_hdd_ext_scan.c b/core/hdd/src/wlan_hdd_ext_scan.c index 0a172685416e..92241e2687e5 100644 --- a/core/hdd/src/wlan_hdd_ext_scan.c +++ b/core/hdd/src/wlan_hdd_ext_scan.c @@ -2435,8 +2435,8 @@ int wlan_hdd_cfg80211_extscan_set_significant_change(struct wiphy *wiphy, * * Return: none */ -void hdd_remove_dsrc_channels(struct wiphy *wiphy, uint32_t *chan_list, - uint8_t *num_channels) +static void hdd_remove_dsrc_channels(struct wiphy *wiphy, uint32_t *chan_list, + uint8_t *num_channels) { uint8_t num_chan_temp = 0; int i; @@ -2460,8 +2460,8 @@ void hdd_remove_dsrc_channels(struct wiphy *wiphy, uint32_t *chan_list, * Return: none */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)) -void hdd_remove_indoor_channels(struct wiphy *wiphy, uint32_t *chan_list, - uint8_t *num_channels) +static void hdd_remove_indoor_channels(struct wiphy *wiphy, uint32_t *chan_list, + uint8_t *num_channels) { uint8_t num_chan_temp = 0; int i, j, k; @@ -2485,8 +2485,8 @@ void hdd_remove_indoor_channels(struct wiphy *wiphy, uint32_t *chan_list, *num_channels = num_chan_temp; } #else -void hdd_remove_indoor_channels(struct wiphy *wiphy, uint32_t *chan_list, - uint8_t *num_channels) +static void hdd_remove_indoor_channels(struct wiphy *wiphy, uint32_t *chan_list, + uint8_t *num_channels) { *num_channels = 0; } -- cgit v1.2.3 From e4090f7d8796b6ef23c9afb659bc5ede7b09d144 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:00:23 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_hostapd We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_hostapd. Change-Id: I3b15af337185c28b2066e9d28e9e174cfc5ab76a CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_hostapd.c | 46 ++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 5ca394f7fcb3..559a6717f3e9 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -133,8 +133,8 @@ int hdd_sap_context_init(hdd_context_t *hdd_ctx) * * Return: None */ -void hdd_hostapd_channel_allow_suspend(hdd_adapter_t *pAdapter, - uint8_t channel) +static void hdd_hostapd_channel_allow_suspend(hdd_adapter_t *pAdapter, + uint8_t channel) { hdd_context_t *pHddCtx = (hdd_context_t *) (pAdapter->pHddCtx); @@ -169,8 +169,8 @@ void hdd_hostapd_channel_allow_suspend(hdd_adapter_t *pAdapter, * * Return - None */ -void hdd_hostapd_channel_prevent_suspend(hdd_adapter_t *pAdapter, - uint8_t channel) +static void hdd_hostapd_channel_prevent_suspend(hdd_adapter_t *pAdapter, + uint8_t channel) { hdd_context_t *pHddCtx = (hdd_context_t *) (pAdapter->pHddCtx); hdd_hostapd_state_t *pHostapdState = @@ -473,9 +473,20 @@ static int hdd_hostapd_set_mac_address(struct net_device *dev, void *addr) return ret; } -void hdd_hostapd_inactivity_timer_cb(void *usrDataForCallback) +/** + * hdd_hostapd_inactivity_timer_cb() - Inactivity timeout handler + * @context: Context registered with qdf_mc_timer_init() + * + * This is the callback function registered with qdf_mc_timer_init() + * to handle the AP inactivity timer. The @context registered is the + * struct net_device associated with the interface. When this + * function is called it means the AP inactivity timer has fired, and + * this function in turn indicates the timeout to userspace. + */ + +static void hdd_hostapd_inactivity_timer_cb(void *context) { - struct net_device *dev = (struct net_device *)usrDataForCallback; + struct net_device *dev = (struct net_device *)context; uint8_t we_custom_event[64]; union iwreq_data wrqu; #ifdef DISABLE_CONCURRENCY_AUTOSAVE @@ -533,8 +544,8 @@ void hdd_hostapd_inactivity_timer_cb(void *usrDataForCallback) EXIT(); } -void hdd_clear_all_sta(hdd_adapter_t *pHostapdAdapter, - void *usrDataForCallback) +static void hdd_clear_all_sta(hdd_adapter_t *pHostapdAdapter, + void *usrDataForCallback) { uint8_t staId = 0; struct net_device *dev; @@ -729,10 +740,10 @@ QDF_STATUS hdd_chan_change_notify(hdd_adapter_t *adapter, * Return: Success on sending notifying userspace * */ -QDF_STATUS hdd_send_radar_event(hdd_context_t *hdd_context, - eSapHddEvent event, - struct wlan_dfs_info dfs_info, - struct wireless_dev *wdev) +static QDF_STATUS hdd_send_radar_event(hdd_context_t *hdd_context, + eSapHddEvent event, + struct wlan_dfs_info dfs_info, + struct wireless_dev *wdev) { struct sk_buff *vendor_event; @@ -6309,10 +6320,11 @@ static void wlan_hdd_add_extra_ie(hdd_adapter_t *pHostapdAdapter, * * Return: 0 for success non-zero for failure */ -int wlan_hdd_cfg80211_alloc_new_beacon(hdd_adapter_t *pAdapter, - beacon_data_t **ppBeacon, - struct cfg80211_beacon_data *params, - int dtim_period) +static int +wlan_hdd_cfg80211_alloc_new_beacon(hdd_adapter_t *pAdapter, + beacon_data_t **ppBeacon, + struct cfg80211_beacon_data *params, + int dtim_period) { int size; beacon_data_t *beacon = NULL; @@ -6761,7 +6773,7 @@ QDF_STATUS wlan_hdd_config_acs(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter) * * Return: 0 for Success or Negative error codes. */ -int wlan_hdd_setup_driver_overrides(hdd_adapter_t *ap_adapter) +static int wlan_hdd_setup_driver_overrides(hdd_adapter_t *ap_adapter) { tsap_Config_t *sap_cfg = &ap_adapter->sessionCtx.ap.sapConfig; hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter); -- cgit v1.2.3 From d772063714dd665f0725e7f6c72ceb409a62427a Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:04:32 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_ipa We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_ipa. Change-Id: Ie789cc0c00ab6553ad4ca1a12968d50078afe763 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_ipa.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/hdd/src/wlan_hdd_ipa.c b/core/hdd/src/wlan_hdd_ipa.c index 0fa36477eed6..bb06854696c7 100644 --- a/core/hdd/src/wlan_hdd_ipa.c +++ b/core/hdd/src/wlan_hdd_ipa.c @@ -454,7 +454,7 @@ struct hdd_ipa_priv { * is broken. * This should be OK and IPA is not enabled yet */ -void *wlan_hdd_stub_priv_to_addr(uint32_t priv) +static void *wlan_hdd_stub_priv_to_addr(uint32_t priv) { void *vaddr; uint32_t ipa_priv = priv; @@ -464,7 +464,7 @@ void *wlan_hdd_stub_priv_to_addr(uint32_t priv) return vaddr; } -uint32_t wlan_hdd_stub_addr_to_priv(void *ptr) +static uint32_t wlan_hdd_stub_addr_to_priv(void *ptr) { uint32_t ipa_priv = 0; @@ -838,7 +838,7 @@ static void hdd_ipa_uc_rt_debug_handler(void *ctext) * * Return: none */ -void hdd_ipa_uc_rt_debug_destructor(struct sk_buff *skb) +static void hdd_ipa_uc_rt_debug_destructor(struct sk_buff *skb) { if (!ghdd_ipa) { HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR, @@ -4163,7 +4163,7 @@ fail_return: * * Return: none */ -void hdd_ipa_cleanup_pending_event(struct hdd_ipa_priv *hdd_ipa) +static void hdd_ipa_cleanup_pending_event(struct hdd_ipa_priv *hdd_ipa) { struct ipa_uc_pending_event *pending_event = NULL; -- cgit v1.2.3 From 64d8618a5304060bea644dc08dca40167e767b03 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:15:36 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_lro We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_lro. Change-Id: I5f640761078b877732d00b7eddabbd21996bbc71 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_lro.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/hdd/src/wlan_hdd_lro.c b/core/hdd/src/wlan_hdd_lro.c index 35902f28fee5..a312b8c548be 100644 --- a/core/hdd/src/wlan_hdd_lro.c +++ b/core/hdd/src/wlan_hdd_lro.c @@ -412,8 +412,9 @@ static void hdd_lro_desc_free(struct net_lro_desc *desc, * * Return: none */ -void hdd_lro_flush_pkt(struct net_lro_mgr *lro_mgr, - struct iphdr *iph, struct tcphdr *tcph, hdd_adapter_t *adapter) +static void hdd_lro_flush_pkt(struct net_lro_mgr *lro_mgr, + struct iphdr *iph, struct tcphdr *tcph, + hdd_adapter_t *adapter) { struct net_lro_desc *lro_desc; @@ -434,7 +435,7 @@ void hdd_lro_flush_pkt(struct net_lro_mgr *lro_mgr, * * Return: none */ -void hdd_lro_flush(void *data) +static void hdd_lro_flush(void *data) { hdd_adapter_t *adapter = (hdd_adapter_t *)data; struct hdd_lro_s *hdd_lro; -- cgit v1.2.3 From 590e201405c8c86f9fc6658aa057e9496ae8fed7 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:16:24 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_main We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_main. Change-Id: Ib96b87acf019bc602adddb36f54792b872e2ad6e CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_main.c | 53 +++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index fda3035e02ab..e5bffbaec4f0 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -206,7 +206,7 @@ void wlan_hdd_auto_shutdown_cb(void); * * Return: none */ -void hdd_set_rps_cpu_mask(hdd_context_t *hdd_ctx) +static void hdd_set_rps_cpu_mask(hdd_context_t *hdd_ctx) { hdd_adapter_t *adapter; hdd_adapter_list_node_t *adapter_node, *next; @@ -1631,7 +1631,7 @@ static int __hdd_mon_open(struct net_device *dev) * * Return: 0 for success; non-zero for failure */ -int hdd_mon_open(struct net_device *dev) +static int hdd_mon_open(struct net_device *dev) { int ret; @@ -1968,7 +1968,7 @@ static int __hdd_open(struct net_device *dev) * * Return: 0 for success; non-zero for failure */ -int hdd_open(struct net_device *dev) +static int hdd_open(struct net_device *dev) { int ret; @@ -2075,7 +2075,7 @@ static int __hdd_stop(struct net_device *dev) * * Return: 0 for success and error number for failure */ -int hdd_stop(struct net_device *dev) +static int hdd_stop(struct net_device *dev) { int ret; @@ -2524,13 +2524,10 @@ static hdd_adapter_t *hdd_alloc_station_adapter(hdd_context_t *hdd_ctx, return adapter; } -QDF_STATUS hdd_register_interface(hdd_adapter_t *adapter, - bool rtnl_held) +static QDF_STATUS hdd_register_interface(hdd_adapter_t *adapter, + bool rtnl_held) { struct net_device *pWlanDev = adapter->dev; - /* hdd_station_ctx_t *pHddStaCtx = &adapter->sessionCtx.station; */ - /* hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX( adapter ); */ - /* QDF_STATUS qdf_ret_status = QDF_STATUS_SUCCESS; */ if (rtnl_held) { if (strnchr(pWlanDev->name, strlen(pWlanDev->name), '%')) { @@ -2780,14 +2777,16 @@ void hdd_cleanup_actionframe(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter) * hdd_station_adapter_deinit() - De-initialize the station adapter * @hdd_ctx: global hdd context * @adapter: HDD adapter + * @rtnl_held: Used to indicate whether or not the caller is holding + * the kernel rtnl_mutex * * This function De-initializes the STA/P2P/OCB adapter. * * Return: None. */ -void hdd_station_adapter_deinit(hdd_context_t *hdd_ctx, - hdd_adapter_t *adapter, - bool rtnl_held) +static void hdd_station_adapter_deinit(hdd_context_t *hdd_ctx, + hdd_adapter_t *adapter, + bool rtnl_held) { ENTER_DEV(adapter->dev); @@ -2826,8 +2825,9 @@ void hdd_station_adapter_deinit(hdd_context_t *hdd_ctx, * * Return: None. */ -void hdd_ap_adapter_deinit(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter, - bool rtnl_held) +static void hdd_ap_adapter_deinit(hdd_context_t *hdd_ctx, + hdd_adapter_t *adapter, + bool rtnl_held) { ENTER_DEV(adapter->dev); @@ -2872,8 +2872,8 @@ void hdd_deinit_adapter(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter, EXIT(); } -void hdd_cleanup_adapter(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter, - bool rtnl_held) +static void hdd_cleanup_adapter(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter, + bool rtnl_held) { struct net_device *pWlanDev = NULL; @@ -2915,8 +2915,8 @@ void hdd_cleanup_adapter(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter, } } -QDF_STATUS hdd_check_for_existing_macaddr(hdd_context_t *hdd_ctx, - tSirMacAddr macAddr) +static QDF_STATUS hdd_check_for_existing_macaddr(hdd_context_t *hdd_ctx, + tSirMacAddr macAddr) { hdd_adapter_list_node_t *adapterNode = NULL, *pNext = NULL; hdd_adapter_t *adapter; @@ -3766,6 +3766,7 @@ static bool hdd_is_interface_up(hdd_adapter_t *adapter) #if defined CFG80211_CONNECT_BSS #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)) \ && !defined(WITH_BACKPORTS) && !defined(IEEE80211_PRIVACY) +static struct cfg80211_bss *hdd_cfg80211_get_bss(struct wiphy *wiphy, struct ieee80211_channel *channel, const u8 *bssid, const u8 *ssid, @@ -3777,6 +3778,7 @@ struct cfg80211_bss *hdd_cfg80211_get_bss(struct wiphy *wiphy, WLAN_CAPABILITY_ESS); } #else +static struct cfg80211_bss *hdd_cfg80211_get_bss(struct wiphy *wiphy, struct ieee80211_channel *channel, const u8 *bssid, const u8 *ssid, @@ -4654,7 +4656,7 @@ static void hdd_context_destroy(hdd_context_t *hdd_ctx) * * Return: None */ -void hdd_wlan_exit(hdd_context_t *hdd_ctx) +static void hdd_wlan_exit(hdd_context_t *hdd_ctx) { v_CONTEXT_t p_cds_context = hdd_ctx->pcds_context; QDF_STATUS qdf_status; @@ -5134,8 +5136,9 @@ static int hdd_wiphy_init(hdd_context_t *hdd_ctx) * Returns: None */ #ifdef MSM_PLATFORM -void hdd_pld_request_bus_bandwidth(hdd_context_t *hdd_ctx, - const uint64_t tx_packets, const uint64_t rx_packets) +static void hdd_pld_request_bus_bandwidth(hdd_context_t *hdd_ctx, + const uint64_t tx_packets, + const uint64_t rx_packets) { uint64_t total = tx_packets + rx_packets; uint64_t temp_rx = 0; @@ -5768,7 +5771,7 @@ static uint8_t hdd_get_safe_channel_from_pcl_and_acs_range( * * Return: None */ -void hdd_restart_sap(hdd_adapter_t *adapter, uint8_t channel) +static void hdd_restart_sap(hdd_adapter_t *adapter, uint8_t channel) { hdd_ap_ctx_t *hdd_ap_ctx; tHalHandle *hal_handle; @@ -6339,7 +6342,7 @@ list_destroy: * * Return: HDD context on success and ERR_PTR on failure */ -hdd_context_t *hdd_context_create(struct device *dev) +static hdd_context_t *hdd_context_create(struct device *dev) { QDF_STATUS status; int ret = 0; @@ -6748,7 +6751,7 @@ inline void hdd_ra_populate_cds_config(struct cds_config_info *cds_cfg, * * Return: 0 for Success, errno on failure */ -int hdd_update_cds_config(hdd_context_t *hdd_ctx) +static int hdd_update_cds_config(hdd_context_t *hdd_ctx) { struct cds_config_info *cds_cfg; @@ -7568,7 +7571,7 @@ out: * * Return: 0 on success and errno on failure. */ -int hdd_deconfigure_cds(hdd_context_t *hdd_ctx) +static int hdd_deconfigure_cds(hdd_context_t *hdd_ctx) { QDF_STATUS qdf_status; -- cgit v1.2.3 From d2291047613ef64b38acb4c760143a70b9debb58 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:18:50 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_p2p We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_p2p. Change-Id: Ifea057311a2fc0ec45d2137c2264311f8c9b2a3b CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_p2p.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index 1700a9c247c9..1587d02fbb46 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -375,7 +375,7 @@ int wlan_hdd_check_remain_on_channel(hdd_adapter_t *pAdapter) * * Return: None */ -void wlan_hdd_cancel_pending_roc(hdd_adapter_t *adapter) +static void wlan_hdd_cancel_pending_roc(hdd_adapter_t *adapter) { hdd_remain_on_chan_ctx_t *roc_ctx; unsigned long rc; @@ -463,7 +463,7 @@ void wlan_hdd_cleanup_remain_on_channel_ctx(hdd_adapter_t *pAdapter) } -void wlan_hdd_remain_on_chan_timeout(void *data) +static void wlan_hdd_remain_on_chan_timeout(void *data) { hdd_adapter_t *pAdapter = (hdd_adapter_t *) data; hdd_remain_on_chan_ctx_t *pRemainChanCtx; @@ -707,8 +707,8 @@ static int wlan_hdd_roc_request_enqueue(hdd_adapter_t *adapter, * * Return: None */ -void wlan_hdd_indicate_roc_drop(hdd_adapter_t *adapter, - hdd_remain_on_chan_ctx_t *ctx) +static void wlan_hdd_indicate_roc_drop(hdd_adapter_t *adapter, + hdd_remain_on_chan_ctx_t *ctx) { hdd_debug("indicate roc drop to userspace"); cfg80211_ready_on_channel( @@ -886,10 +886,11 @@ static int wlan_hdd_request_remain_on_channel(struct wiphy *wiphy, return 0; } -int __wlan_hdd_cfg80211_remain_on_channel(struct wiphy *wiphy, - struct wireless_dev *wdev, - struct ieee80211_channel *chan, - unsigned int duration, u64 *cookie) +static int __wlan_hdd_cfg80211_remain_on_channel(struct wiphy *wiphy, + struct wireless_dev *wdev, + struct ieee80211_channel *chan, + unsigned int duration, + u64 *cookie) { struct net_device *dev = wdev->netdev; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); @@ -1027,9 +1028,10 @@ void hdd_remain_chan_ready_handler(hdd_adapter_t *pAdapter, return; } -int __wlan_hdd_cfg80211_cancel_remain_on_channel(struct wiphy *wiphy, - struct wireless_dev *wdev, - u64 cookie) +static int +__wlan_hdd_cfg80211_cancel_remain_on_channel(struct wiphy *wiphy, + struct wireless_dev *wdev, + u64 cookie) { struct net_device *dev = wdev->netdev; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); @@ -1172,11 +1174,11 @@ int wlan_hdd_cfg80211_cancel_remain_on_channel(struct wiphy *wiphy, return ret; } -int __wlan_hdd_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev, - struct ieee80211_channel *chan, bool offchan, - unsigned int wait, - const u8 *buf, size_t len, bool no_cck, - bool dont_wait_for_ack, u64 *cookie) +static int __wlan_hdd_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev, + struct ieee80211_channel *chan, bool offchan, + unsigned int wait, + const u8 *buf, size_t len, bool no_cck, + bool dont_wait_for_ack, u64 *cookie) { struct net_device *dev = wdev->netdev; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); @@ -1602,9 +1604,9 @@ int wlan_hdd_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev, return ret; } -int __wlan_hdd_cfg80211_mgmt_tx_cancel_wait(struct wiphy *wiphy, - struct wireless_dev *wdev, - u64 cookie) +static int __wlan_hdd_cfg80211_mgmt_tx_cancel_wait(struct wiphy *wiphy, + struct wireless_dev *wdev, + u64 cookie) { return wlan_hdd_cfg80211_cancel_remain_on_channel(wiphy, wdev, cookie); } @@ -1942,6 +1944,7 @@ static uint8_t wlan_hdd_get_session_type(enum nl80211_iftype type) * * Return: the pointer of wireless dev, otherwise ERR_PTR. */ +static struct wireless_dev *__wlan_hdd_add_virtual_intf(struct wiphy *wiphy, const char *name, unsigned char name_assign_type, -- cgit v1.2.3 From c8d0c257305255493b12bef2567918dcbf3206be Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:19:50 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_power We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_power. Change-Id: I8ebc518eed2c56764eb18ef6881e1fb344b2f0d4 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_power.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 87fdfdacaa21..0efc8cbf05d9 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -544,7 +545,7 @@ void hdd_conf_ns_offload(hdd_adapter_t *adapter, bool fenable) * * Return: None */ -void __hdd_ipv6_notifier_work_queue(struct work_struct *work) +static void __hdd_ipv6_notifier_work_queue(struct work_struct *work) { hdd_adapter_t *pAdapter = container_of(work, hdd_adapter_t, ipv6NotifierWorkQueue); @@ -663,7 +664,7 @@ void hdd_conf_hostoffload(hdd_adapter_t *pAdapter, bool fenable) * * Return: None */ -void __hdd_ipv4_notifier_work_queue(struct work_struct *work) +static void __hdd_ipv4_notifier_work_queue(struct work_struct *work) { hdd_adapter_t *pAdapter = container_of(work, hdd_adapter_t, ipv4NotifierWorkQueue); -- cgit v1.2.3 From 87a24256c1639e09004bd981fb25f57186704aa9 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:20:52 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_regulatory We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_regulatory. Change-Id: Ie9252966d9b4bbb49d934516bae16ecc6a03f0f4 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_regulatory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_regulatory.c b/core/hdd/src/wlan_hdd_regulatory.c index bda6e48d4b6d..4487d5dd2500 100644 --- a/core/hdd/src/wlan_hdd_regulatory.c +++ b/core/hdd/src/wlan_hdd_regulatory.c @@ -173,7 +173,7 @@ struct regulatory *reg) * * Return: bool */ -bool hdd_is_world_regdomain(uint32_t reg_domain) +static bool hdd_is_world_regdomain(uint32_t reg_domain) { uint32_t temp_regd = reg_domain & ~WORLDWIDE_ROAMING_FLAG; -- cgit v1.2.3 From 0eed72f1ef8f2f6709b9fb21df4f9467dea33743 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:23:50 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_scan We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_scan. Change-Id: I877d7e7b7be30a9195daad63d09999bb87f4add4 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_scan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index 20c53b3c3c97..5feed800683e 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -598,7 +598,7 @@ static int wlan_hdd_scan_request_enqueue(hdd_adapter_t *adapter, * * Return: QDF_STATUS */ -QDF_STATUS wlan_hdd_scan_request_dequeue(hdd_context_t *hdd_ctx, +static QDF_STATUS wlan_hdd_scan_request_dequeue(hdd_context_t *hdd_ctx, uint32_t scan_id, struct cfg80211_scan_request **req, uint8_t *source, uint32_t *timestamp) { -- cgit v1.2.3 From 6376abe7a4a1b8ac823fed1c86fbca7bb753deb3 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:24:56 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_softap_tx_rx We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_softap_tx_rx. Change-Id: I26dd53307454d2c4dd887345eb77a9d362b5fdf2 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_softap_tx_rx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_softap_tx_rx.c b/core/hdd/src/wlan_hdd_softap_tx_rx.c index 8ff10be73848..ab6357535162 100644 --- a/core/hdd/src/wlan_hdd_softap_tx_rx.c +++ b/core/hdd/src/wlan_hdd_softap_tx_rx.c @@ -211,7 +211,8 @@ void hdd_softap_tx_resume_cb(void *adapter_context, bool tx_resume) * * Return: Always returns NETDEV_TX_OK */ -int __hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int __hdd_softap_hard_start_xmit(struct sk_buff *skb, + struct net_device *dev) { sme_ac_enum_type ac = SME_AC_BE; hdd_adapter_t *pAdapter = (hdd_adapter_t *) netdev_priv(dev); -- cgit v1.2.3 From dde34498807a66aed524b92314b257b961c20139 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 16:28:04 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_tsf We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_tsf. Change-Id: I37e98814da218d9322a8d3ac05a0e19523859281 CRs-Fixed: 1074336 --- core/hdd/inc/wlan_hdd_tsf.h | 1 + core/hdd/src/wlan_hdd_tsf.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_tsf.h b/core/hdd/inc/wlan_hdd_tsf.h index d53741ef1825..45e25223a505 100644 --- a/core/hdd/inc/wlan_hdd_tsf.h +++ b/core/hdd/inc/wlan_hdd_tsf.h @@ -61,6 +61,7 @@ enum hdd_tsf_capture_state { }; #ifdef WLAN_FEATURE_TSF +void wlan_hdd_tsf_init(struct hdd_context_s *hdd_ctx); int hdd_capture_tsf(struct hdd_adapter_s *adapter, uint32_t *buf, int len); int hdd_indicate_tsf(struct hdd_adapter_s *adapter, uint32_t *buf, int len); int wlan_hdd_cfg80211_handle_tsf_cmd(struct wiphy *wiphy, diff --git a/core/hdd/src/wlan_hdd_tsf.c b/core/hdd/src/wlan_hdd_tsf.c index e230925a7cd7..00ba66a82c59 100644 --- a/core/hdd/src/wlan_hdd_tsf.c +++ b/core/hdd/src/wlan_hdd_tsf.c @@ -30,6 +30,7 @@ */ #include "wlan_hdd_main.h" +#include "wlan_hdd_tsf.h" #include "wma_api.h" static struct completion tsf_sync_get_completion_evt; @@ -110,13 +111,13 @@ int hdd_capture_tsf(struct hdd_adapter_s *adapter, uint32_t *buf, int len) * Return: TSF_RETURN on Success, TSF_RESET_GPIO_FAIL on failure */ #ifdef QCA_WIFI_3_0 -int hdd_tsf_reset_gpio(struct hdd_adapter_s *adapter) +static int hdd_tsf_reset_gpio(struct hdd_adapter_s *adapter) { /* No GPIO Host timer sync for integrated WIFI Device */ return TSF_RETURN; } #else -int hdd_tsf_reset_gpio(struct hdd_adapter_s *adapter) +static int hdd_tsf_reset_gpio(struct hdd_adapter_s *adapter) { int ret; ret = wma_cli_set_command((int)adapter->sessionId, -- cgit v1.2.3 From 3ae708d442c05ecb919a80178832358403ead284 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 15:45:00 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_tx_rx We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_tx_rx. Change-Id: Ic1eaf337ff339e979c3f78e667be9539eb47f5dc CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_tx_rx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index 0fea7d814579..56056938c6d8 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -402,7 +402,7 @@ static void hdd_get_transmit_sta_id(hdd_adapter_t *adapter, * * Return: Always returns NETDEV_TX_OK */ -int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { QDF_STATUS status; sme_ac_enum_type ac; @@ -1099,7 +1099,7 @@ static void wlan_hdd_update_queue_oper_stats(hdd_adapter_t *adapter, * * Return: none */ -void wlan_hdd_update_txq_timestamp(struct net_device *dev) +static void wlan_hdd_update_txq_timestamp(struct net_device *dev) { struct netdev_queue *txq; int i; -- cgit v1.2.3 From af2a093bf5c07adea76812d0bee5d6382773a3c4 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 14:52:57 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_wext We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_wext. Change-Id: I35f793352b7a166018945f9a9ac8457bf58ee809 CRs-Fixed: 1074336 --- core/hdd/src/wlan_hdd_wext.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 6112c7527eae..445000efdb33 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -810,7 +810,8 @@ hdd_wlan_get_ibss_mac_addr_from_staid(hdd_adapter_t *pAdapter, * Return: QDF_STATUS_STATUS if the peer was found and displayed, * otherwise an appropriate QDF_STATUS_E_* failure code. */ -QDF_STATUS hdd_wlan_get_ibss_peer_info(hdd_adapter_t *pAdapter, uint8_t staIdx) +static QDF_STATUS hdd_wlan_get_ibss_peer_info(hdd_adapter_t *pAdapter, + uint8_t staIdx) { QDF_STATUS status = QDF_STATUS_E_FAILURE; tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -859,7 +860,7 @@ QDF_STATUS hdd_wlan_get_ibss_peer_info(hdd_adapter_t *pAdapter, uint8_t staIdx) * Return: QDF_STATUS_STATUS if the peer information was retrieved and * displayed, otherwise an appropriate QDF_STATUS_E_* failure code. */ -QDF_STATUS hdd_wlan_get_ibss_peer_info_all(hdd_adapter_t *pAdapter) +static QDF_STATUS hdd_wlan_get_ibss_peer_info_all(hdd_adapter_t *pAdapter) { QDF_STATUS status = QDF_STATUS_E_FAILURE; tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); @@ -1558,7 +1559,7 @@ int wlan_hdd_get_link_speed(hdd_adapter_t *sta_adapter, uint32_t *link_speed) * * Return: None */ -void hdd_statistics_cb(void *pStats, void *pContext) +static void hdd_statistics_cb(void *pStats, void *pContext) { hdd_adapter_t *pAdapter = (hdd_adapter_t *) pContext; hdd_stats_t *pStatsCache = NULL; @@ -1956,7 +1957,7 @@ static int __iw_set_commit(struct net_device *dev, struct iw_request_info *info, * * Return: 0 on success, error number otherwise */ -int iw_set_commit(struct net_device *dev, struct iw_request_info *info, +static int iw_set_commit(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { int ret; @@ -3308,8 +3309,8 @@ static int iw_set_frag_threshold(struct net_device *dev, * Return: 0 on success, non-zero on error */ static int __iw_get_power_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) { hdd_adapter_t *adapter; hdd_context_t *hdd_ctx; @@ -3335,9 +3336,9 @@ static int __iw_get_power_mode(struct net_device *dev, * * Return: 0 on success, error number otherwise */ -int iw_get_power_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int iw_get_power_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) { int ret; @@ -3358,8 +3359,8 @@ int iw_get_power_mode(struct net_device *dev, * Return: 0 on success, non-zero on error */ static int __iw_set_power_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) { hdd_adapter_t *adapter; hdd_context_t *hdd_ctx; @@ -3385,9 +3386,9 @@ static int __iw_set_power_mode(struct net_device *dev, * * Return: 0 on success, error number otherwise */ -int iw_set_power_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) +static int iw_set_power_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) { int ret; @@ -9291,8 +9292,8 @@ static int iw_get_statistics(struct net_device *dev, /*Max Len for PNO notification*/ #define MAX_PNO_NOTIFY_LEN 100 -void found_pref_network_cb(void *callbackContext, - tSirPrefNetworkFoundInd *pPrefNetworkFoundInd) +static void found_pref_network_cb(void *callbackContext, + tSirPrefNetworkFoundInd *pPrefNetworkFoundInd) { hdd_adapter_t *pAdapter = (hdd_adapter_t *) callbackContext; union iwreq_data wrqu; @@ -11146,7 +11147,7 @@ const struct iw_handler_def we_handler_def = { * * Returns: none */ -int hdd_set_wext(hdd_adapter_t *pAdapter) +static int hdd_set_wext(hdd_adapter_t *pAdapter) { hdd_wext_state_t *pwextBuf = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); -- cgit v1.2.3 From 6c3c2b56aaad5fb3f0c53c49cf77e6fc01a58186 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Fri, 7 Oct 2016 09:11:01 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in BMI We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in BMI. Change-Id: I701a9620ad93b41b5bcfd79d0c048f62e8151a18 CRs-Fixed: 1075533 --- core/bmi/src/bmi.c | 4 ++-- core/bmi/src/ol_fw.c | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/core/bmi/src/bmi.c b/core/bmi/src/bmi.c index 4b88469782a3..33f5986cca0d 100644 --- a/core/bmi/src/bmi.c +++ b/core/bmi/src/bmi.c @@ -333,7 +333,7 @@ QDF_STATUS bmi_write_soc_register(uint32_t address, uint32_t param, return QDF_STATUS_SUCCESS; } -QDF_STATUS +static QDF_STATUS bmilz_data(uint8_t *buffer, uint32_t length, struct ol_context *ol_ctx) { uint32_t cid; @@ -455,7 +455,7 @@ QDF_STATUS bmi_sign_stream_start(uint32_t address, uint8_t *buffer, return QDF_STATUS_SUCCESS; } -QDF_STATUS +static QDF_STATUS bmilz_stream_start(uint32_t address, struct ol_context *ol_ctx) { uint32_t cid; diff --git a/core/bmi/src/ol_fw.c b/core/bmi/src/ol_fw.c index e6178a43d3ee..a5fbb0222b62 100644 --- a/core/bmi/src/ol_fw.c +++ b/core/bmi/src/ol_fw.c @@ -848,8 +848,8 @@ ol_check_dataset_patch(struct hif_opaque_softc *scn, uint32_t *address) } -QDF_STATUS ol_fw_populate_clk_settings(A_refclk_speed_t refclk, - struct cmnos_clock_s *clock_s) +static QDF_STATUS ol_fw_populate_clk_settings(A_refclk_speed_t refclk, + struct cmnos_clock_s *clock_s) { if (!clock_s) return QDF_STATUS_E_FAILURE; @@ -913,7 +913,7 @@ QDF_STATUS ol_fw_populate_clk_settings(A_refclk_speed_t refclk, return QDF_STATUS_SUCCESS; } -QDF_STATUS ol_patch_pll_switch(struct ol_context *ol_ctx) +static QDF_STATUS ol_patch_pll_switch(struct ol_context *ol_ctx) { struct hif_opaque_softc *hif = ol_ctx->scn; QDF_STATUS status = QDF_STATUS_SUCCESS; @@ -1207,7 +1207,7 @@ end: /* AXI Start Address */ #define TARGET_ADDR (0xa0000) -void ol_transfer_codeswap_struct(struct ol_context *ol_ctx) +static void ol_transfer_codeswap_struct(struct ol_context *ol_ctx) { struct pld_codeswap_codeseg_info wlan_codeswap; QDF_STATUS rv; @@ -1411,8 +1411,8 @@ QDF_STATUS ol_download_firmware(struct ol_context *ol_ctx) return status; } -int ol_diag_read(struct hif_opaque_softc *scn, uint8_t *buffer, - uint32_t pos, size_t count) +static int ol_diag_read(struct hif_opaque_softc *scn, uint8_t *buffer, + uint32_t pos, size_t count) { int result = 0; @@ -1549,6 +1549,7 @@ out: return result; } +static void ol_dump_target_memory(struct hif_opaque_softc *scn, void *memory_block) { char *buffer_loc = memory_block; -- cgit v1.2.3 From a7d169b1dcec1ce41f93d530b8b210a4920869b9 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Fri, 7 Oct 2016 09:16:08 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in CDS We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in CDS. Change-Id: I40141f7a9e7394e0071b84b32a2d2b95cfa3a09b CRs-Fixed: 1075544 --- core/cds/src/cds_concurrency.c | 35 +++++++++++++++++++---------------- core/cds/src/cds_utils.c | 4 ++-- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index b7f3ab35172f..d0034479540a 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -3905,7 +3905,7 @@ void cds_decr_active_session(enum tQDF_ADAPTER_MODE mode, * * Return: None */ -void cds_dbs_opportunistic_timer_handler(void *data) +static void cds_dbs_opportunistic_timer_handler(void *data) { enum cds_conc_next_action action = CDS_NOP; cds_context_type *cds_ctx = (cds_context_type *)data; @@ -4063,7 +4063,7 @@ QDF_STATUS cds_init_policy_mgr(struct cds_sme_cbacks *sme_cbacks) * * Return: index in the connection table */ -uint32_t cds_get_connection_for_vdev_id(uint32_t vdev_id) +static uint32_t cds_get_connection_for_vdev_id(uint32_t vdev_id) { uint32_t conn_index = 0; for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS; @@ -4408,6 +4408,7 @@ QDF_STATUS cds_decr_connection_count(uint32_t vdev_id) * * Return: QDF_STATUS */ +static QDF_STATUS cds_get_connection_channels(uint8_t *channels, uint32_t *len, enum cds_pcl_channel_order order, bool skip_dfs_channel, @@ -4619,10 +4620,11 @@ void cds_update_with_safe_channel_list(uint8_t *pcl_channels, uint32_t *len, * * Return: Channel List */ -QDF_STATUS cds_get_channel_list(enum cds_pcl_type pcl, - uint8_t *pcl_channels, uint32_t *len, - enum cds_con_mode mode, - uint8_t *pcl_weights, uint32_t weight_len) +static QDF_STATUS cds_get_channel_list(enum cds_pcl_type pcl, + uint8_t *pcl_channels, uint32_t *len, + enum cds_con_mode mode, + uint8_t *pcl_weights, + uint32_t weight_len) { QDF_STATUS status = QDF_STATUS_E_FAILURE; uint32_t num_channels = WNI_CFG_VALID_CHANNEL_LIST_LEN; @@ -5136,7 +5138,7 @@ QDF_STATUS cds_get_pcl(enum cds_con_mode mode, * * Return: True/False */ -bool cds_disallow_mcc(uint8_t channel) +static bool cds_disallow_mcc(uint8_t channel) { uint32_t index = 0; bool match = false; @@ -5171,7 +5173,8 @@ bool cds_disallow_mcc(uint8_t channel) * * Return: True/False */ -bool cds_allow_new_home_channel(uint8_t channel, uint32_t num_connections) +static bool cds_allow_new_home_channel(uint8_t channel, + uint32_t num_connections) { bool status = true; @@ -5246,7 +5249,7 @@ bool cds_is_ibss_conn_exist(uint8_t *ibss_channel) * * Return: true if vht160 connection exist else false */ -bool cds_vht160_conn_exist(void) +static bool cds_vht160_conn_exist(void) { uint32_t conn_index; bool status = false; @@ -6123,9 +6126,9 @@ done: * * Return: None */ -void cds_nss_update_cb(void *context, uint8_t tx_status, uint8_t vdev_id, - uint8_t next_action, - enum sir_conn_update_reason reason) +static void cds_nss_update_cb(void *context, uint8_t tx_status, uint8_t vdev_id, + uint8_t next_action, + enum sir_conn_update_reason reason) { cds_context_type *cds_ctx; uint32_t conn_index = 0; @@ -6172,9 +6175,9 @@ void cds_nss_update_cb(void *context, uint8_t tx_status, uint8_t vdev_id, * * Return: QDF_STATUS enum */ -QDF_STATUS cds_complete_action(uint8_t new_nss, uint8_t next_action, - enum sir_conn_update_reason reason, - uint32_t session_id) +static QDF_STATUS cds_complete_action(uint8_t new_nss, uint8_t next_action, + enum sir_conn_update_reason reason, + uint32_t session_id) { QDF_STATUS status = QDF_STATUS_E_FAILURE; uint32_t index, count; @@ -8146,7 +8149,7 @@ QDF_STATUS qdf_init_connection_update(void) * Return: No change (CDS_NOP), MCC (CDS_SINGLE_MAC_UPGRADE), * DBS (CDS_DBS_DOWNGRADE) */ -enum cds_conc_next_action cds_get_current_pref_hw_mode(void) +static enum cds_conc_next_action cds_get_current_pref_hw_mode(void) { uint32_t num_connections; uint8_t band1, band2, band3; diff --git a/core/cds/src/cds_utils.c b/core/cds/src/cds_utils.c index 67d6d3f2494f..5ae79e495d9e 100644 --- a/core/cds/src/cds_utils.c +++ b/core/cds/src/cds_utils.c @@ -607,7 +607,7 @@ static void hmac_sha1_complete(struct crypto_async_request *req, int err) complete(&r->completion); } -int +static int hmac_sha1(uint8_t *key, uint8_t ksize, char *plaintext, uint8_t psize, uint8_t *output, uint8_t outlen) { @@ -768,7 +768,7 @@ static void hmac_md5_complete(struct crypto_async_request *req, int err) complete(&r->completion); } -int +static int hmac_md5(uint8_t *key, uint8_t ksize, char *plaintext, uint8_t psize, uint8_t *output, uint8_t outlen) { -- cgit v1.2.3 From 0d3a9d2a180369b25e0bec1d18ea8f8fb4a87ac2 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Fri, 7 Oct 2016 09:17:31 -0700 Subject: qcacld-3.0: Remove unused functions from cds_regdomain.c Functions get_reg_dmn_for_country & cds_get_reg_dmn_5g are no longer being used, so remove them. Change-Id: I03308f6fd7802acf7e80c01f15f42c99bb77ce7e CRs-Fixed: 1075544 --- core/cds/src/cds_regdomain.c | 41 ----------------------------------------- 1 file changed, 41 deletions(-) diff --git a/core/cds/src/cds_regdomain.c b/core/cds/src/cds_regdomain.c index e798389a5dd7..d8b90e47eb6c 100644 --- a/core/cds/src/cds_regdomain.c +++ b/core/cds/src/cds_regdomain.c @@ -691,25 +691,6 @@ int32_t cds_fill_some_regulatory_info(struct regulatory *reg) return 0; } -/** - * get_reg_dmn_for_country() - get regulatory domain for country - * @alpha2: country alpha2 - * - * Return: regulatory domain - */ -int32_t get_reg_dmn_for_country(uint8_t *alpha2) -{ - uint8_t i; - - for (i = 0; i < g_reg_dmn_tbl.all_countries_cnt; i++) { - if ((g_reg_dmn_tbl.all_countries[i].alpha2[0] == alpha2[0]) && - (g_reg_dmn_tbl.all_countries[i].alpha2[1] == alpha2[1])) - return g_reg_dmn_tbl.all_countries[i].reg_dmn_pair; - } - - return -1; -} - /** * cds_fill_and_send_ctl_to_fw() - fill and send ctl to firmware * @reg: the regulatory handle @@ -778,28 +759,6 @@ void cds_set_wma_dfs_region(uint8_t dfs_region) wma_set_dfs_region(wma, dfs_region); } -/** - * cds_get_reg_dmn_5g() - get the 5G reg-domain - * @reg_dmn: the complete reg domain - * - * Return: 5 G reg domain - */ -uint16_t cds_get_reg_dmn_5g(uint32_t reg_dmn) -{ - uint16_t i; - - for (i = 0; i < g_reg_dmn_tbl.reg_dmn_pairs_cnt; i++) { - if (g_reg_dmn_tbl.reg_dmn_pairs[i].reg_dmn_pair == reg_dmn) - return g_reg_dmn_tbl.reg_dmn_pairs[i].reg_dmn_5ghz; - } - - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "invalid regulatory domain/country code 0x%x", - reg_dmn); - - return 0; -} - /** * cds_reg_dmn_get_chanwidth_from_opclass() - return chan width based on opclass * @country: country name -- cgit v1.2.3 From b7102417bf36b75656d57d5f188b66fe2e6e098d Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 11 Oct 2016 10:06:14 -0700 Subject: Release 5.1.0.30H Release 5.1.0.30H Change-Id: I4f0f44bc22903fb4403c4794bd1b73109d9f6493 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 7dd8a95dbf7f..58e71043df8d 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "G" +#define QWLAN_VERSION_EXTRA "H" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30G" +#define QWLAN_VERSIONSTR "5.1.0.30H" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 10a7b71eccd55594d73eb66df47da3f7eb5895f5 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Fri, 7 Oct 2016 10:31:16 -0700 Subject: qcacld-3.0: Cleanup qpower vendor command The original qpower vendor command implementation incorrectly configured the qpower setting in firmware. Cleanup the implementation. Change-Id: Id84eb7cf579a29da30f3366edef24821fcd5be55 CRs-Fixed: 1075582 --- core/hdd/src/wlan_hdd_cfg80211.c | 2 +- core/hdd/src/wlan_hdd_power.c | 29 ++++++++--------------------- core/wma/inc/wma_api.h | 10 +++++++++- core/wma/src/wma_power.c | 24 +++++++++--------------- 4 files changed, 27 insertions(+), 38 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index ae1d71d7bf2b..eb8fedd49527 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -3933,7 +3933,7 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, u32 guard_time; uint8_t set_value; u32 ftm_capab; - uint8_t qpower; + u8 qpower; QDF_STATUS status; int attr_len; int access_policy = 0; diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 0efc8cbf05d9..55caa12744d3 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -2343,40 +2343,27 @@ int wlan_hdd_cfg80211_get_txpower(struct wiphy *wiphy, * Return: 0 on success; Errno on failure */ int hdd_set_qpower_config(hdd_context_t *hddctx, hdd_adapter_t *adapter, - uint8_t qpower) + u8 qpower) { - QDF_STATUS qdf_status; - int status; - bool is_timer_running; + QDF_STATUS status; if (!hddctx->config->enablePowersaveOffload) { hdd_err("qpower is disabled in configuration"); return -EINVAL; } + if (qpower > PS_DUTY_CYCLING_QPOWER || qpower < PS_LEGACY_NODEEPSLEEP) { - hdd_err("invalid qpower value=%d", qpower); + hdd_err("invalid qpower value: %d", qpower); return -EINVAL; } - hdd_info("updating qpower value=%d to wma", qpower); - qdf_status = wma_set_powersave_config(qpower); - if (qdf_status != QDF_STATUS_SUCCESS) { - hdd_err("failed to update qpower %d", - qdf_status); + + status = wma_set_qpower_config(adapter->sessionId, qpower); + if (status != QDF_STATUS_SUCCESS) { + hdd_err("failed to configure qpower: %d", status); return -EINVAL; } - is_timer_running = sme_is_auto_ps_timer_running( - WLAN_HDD_GET_HAL_CTX(adapter), - adapter->sessionId); - if (!is_timer_running) { - status = wlan_hdd_set_powersave(adapter, true, 0); - if (status != 0) { - hdd_err("failed to put device in power save mode %d", - status); - return -EINVAL; - } - } return 0; } diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index 890622b424e2..58d34ec38724 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -299,7 +299,6 @@ void wma_process_pdev_hw_mode_trans_ind(void *wma, wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param, wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry, struct sir_hw_mode_trans_ind *hw_mode_trans_ind); -QDF_STATUS wma_set_powersave_config(uint8_t val); QDF_STATUS wma_encrypt_decrypt_msg(WMA_HANDLE wma, struct encrypt_decrypt_req_params *encrypt_decrypt_params); @@ -317,4 +316,13 @@ QDF_STATUS wma_set_cts2self_for_p2p_go(void *wma_handle, uint32_t cts2self_for_p2p_go); QDF_STATUS wma_set_tx_rx_aggregation_size (struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size); + +/** + * wma_set_qpower_config() - update qpower config in wma + * @vdev_id: the Id of the vdev to configure + * @qpower: new qpower value + * + * Return: QDF_STATUS_SUCCESS on success, error number otherwise + */ +QDF_STATUS wma_set_qpower_config(uint8_t vdev_id, uint8_t qpower); #endif diff --git a/core/wma/src/wma_power.c b/core/wma/src/wma_power.c index 4c139f7b186a..e939c5267597 100644 --- a/core/wma/src/wma_power.c +++ b/core/wma/src/wma_power.c @@ -856,27 +856,21 @@ void wma_disable_sta_ps_mode(tp_wma_handle wma, tpDisablePsParams ps_req) } } -/** - * wma_set_powersave_config() - update power save config in wma - * @val: new power save value - * - * This function update qpower value in wma layer - * - * Return: QDF_STATUS_SUCCESS on success, error number otherwise - */ -QDF_STATUS wma_set_powersave_config(uint8_t val) +QDF_STATUS wma_set_qpower_config(uint8_t vdev_id, uint8_t qpower) { - tp_wma_handle wma_handle; - - wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA); - if (!wma_handle) { + if (!wma) { WMA_LOGE("%s: WMA context is invald!", __func__); return QDF_STATUS_E_INVAL; } - wma_handle->powersave_mode = val; - return QDF_STATUS_SUCCESS; + WMA_LOGI("configuring qpower: %d", qpower); + wma->powersave_mode = qpower; + return wma_unified_set_sta_ps_param(wma->wmi_handle, + vdev_id, + WMI_STA_PS_ENABLE_QPOWER, + wma_get_qpower_config(wma)); } /** -- cgit v1.2.3 From b4cbcd54235848b37313cce2602a2137d9f74d33 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 11 Oct 2016 10:43:40 -0700 Subject: Release 5.1.0.30I Release 5.1.0.30I Change-Id: I6136df1242c6f94a3a95129cd58d118a25bf9c15 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 58e71043df8d..cbc7e60fe45a 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "H" +#define QWLAN_VERSION_EXTRA "I" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30H" +#define QWLAN_VERSIONSTR "5.1.0.30I" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 5e06bd358d95b4f1060671331a8bdf506bfeab41 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Tue, 4 Oct 2016 12:49:10 -0700 Subject: qcacld-3.0: Null-check 5GHz band before configuration There is a null pointer dereference during 5GHz band configure when wifi mode is forced to 802.11b in the ini config file. Perform a null check before 5GHz configuration and skip if needed. Change-Id: I70b7576e7bf49fa66a8c88de49dad9a1643cc7cb CRs-Fixed: 1074146 --- core/hdd/src/wlan_hdd_main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index e5bffbaec4f0..75c5aec1d67f 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -1001,6 +1001,11 @@ static void hdd_update_tgt_vht_cap(hdd_context_t *hdd_ctx, wiphy->bands[IEEE80211_BAND_5GHZ]; uint32_t temp = 0; + if (!band_5g) { + hdd_info("5GHz band disabled, skipping capability population"); + return; + } + /* Get the current MPDU length */ status = sme_cfg_get_int(hdd_ctx->hHal, WNI_CFG_VHT_MAX_MPDU_LENGTH, -- cgit v1.2.3 From d9d97ee5e5f9641b3df081a772367809011f2da5 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 11 Oct 2016 14:56:31 -0700 Subject: Release 5.1.0.30J Release 5.1.0.30J Change-Id: Ife2c057c1421e36ca09ae2cb14912e25a1cadf2d 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 cbc7e60fe45a..4536fd5f7cc1 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "I" +#define QWLAN_VERSION_EXTRA "J" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30I" +#define QWLAN_VERSIONSTR "5.1.0.30J" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From fdb73435f6ac3b2caed9a6ec45e815c531d1a645 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Tue, 11 Oct 2016 08:07:27 -0700 Subject: qcacld-3.0: Fix potential reference of uninitialized roam profile Currently in hdd_send_re_assoc_event() there are several guard tests which protect the function from executing unless all of the prerequisite information is present. If any of the tests fail then the code performs centralized cleanup. One of the cleanups performed is to free the roam profile. Unfortunately at the time most of the guard tests are performed the roam profile has not been retrieved from SME, and has not been initialized in any other way. This would ultimately result in csr_roam_free_connect_profile() reading "garbage" values for pBssDesc and pAddIEAssoc. Address this issue by relocating the existing qdf_mem_zero() of the roam profile so that the roam profile is initialized before any of the guard tests are performed. Change-Id: I2a2ba92ffb5b73c3ba4f54482d8f2b37f6e2dad6 CRs-Fixed: 1076422 --- core/hdd/src/wlan_hdd_assoc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 09aab866e173..d8f35f4ecd79 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -1900,6 +1900,8 @@ static void hdd_send_re_assoc_event(struct net_device *dev, tCsrRoamConnectedProfile roam_profile; tHalHandle hal_handle = WLAN_HDD_GET_HAL_CTX(pAdapter); + qdf_mem_zero(&roam_profile, sizeof(roam_profile)); + if (!rspRsnIe) { hdd_err("Unable to allocate RSN IE"); goto done; @@ -1951,7 +1953,6 @@ static void hdd_send_re_assoc_event(struct net_device *dev, chan = ieee80211_get_channel(pAdapter->wdev.wiphy, (int)pCsrRoamInfo->pBssDesc->channelId); - qdf_mem_zero(&roam_profile, sizeof(tCsrRoamConnectedProfile)); sme_roam_get_connect_profile(hal_handle, pAdapter->sessionId, &roam_profile); bss = cfg80211_get_bss(pAdapter->wdev.wiphy, chan, -- cgit v1.2.3 From a2c732086354f31c03fa18fa0b9448b974695b76 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 11 Oct 2016 17:12:50 -0700 Subject: Release 5.1.0.30K Release 5.1.0.30K Change-Id: I6de44b9fb375325101161ec8a9587591047c5d1a 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 4536fd5f7cc1..5b7338a51058 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "J" +#define QWLAN_VERSION_EXTRA "K" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30J" +#define QWLAN_VERSIONSTR "5.1.0.30K" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 414e9f39a1cfc76ccacdad79bd017b6739baf52c Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 5 Oct 2016 15:46:19 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in wlan_hdd_tdls We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in wlan_hdd_tdls. Change-Id: I27b2be04166a61579d0013766094c660cff304e2 CRs-Fixed: 1074336 --- core/hdd/inc/wlan_hdd_tdls.h | 2 +- core/hdd/src/wlan_hdd_tdls.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_tdls.h b/core/hdd/inc/wlan_hdd_tdls.h index 7fa22b27002d..ca4d30cdb2c7 100644 --- a/core/hdd/inc/wlan_hdd_tdls.h +++ b/core/hdd/inc/wlan_hdd_tdls.h @@ -567,7 +567,7 @@ void wlan_hdd_tdls_disconnection_callback(hdd_adapter_t *pAdapter); void wlan_hdd_tdls_mgmt_completion_callback(hdd_adapter_t *pAdapter, uint32_t statusCode); -void wlan_hdd_tdls_tncrement_peer_count(hdd_adapter_t *pAdapter); +void wlan_hdd_tdls_increment_peer_count(hdd_adapter_t *pAdapter); void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter); diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 4abe1fef943f..a433ab503abf 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -1621,8 +1621,8 @@ static void wlan_hdd_tdls_implicit_enable(tdlsCtx_t *pHddTdlsCtx) * * Return: Void */ -void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, - eTDLSSupportMode tdls_mode, bool bUpdateLast) +static void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, + eTDLSSupportMode tdls_mode, bool bUpdateLast) { hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; QDF_STATUS status; -- cgit v1.2.3 From 7e5ac8eb10b25e2d0e0f555b0fbd3966719f505c Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Thu, 6 Oct 2016 18:37:52 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in cfg_api We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in cfg_api. Change-Id: I6c282c78da047a9979b90c52fdcfd7b1b7b3b46e CRs-Fixed: 1075090 --- core/mac/src/cfg/cfg_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/mac/src/cfg/cfg_api.c b/core/mac/src/cfg/cfg_api.c index c351063cff4c..8b15ba20a42f 100644 --- a/core/mac/src/cfg/cfg_api.c +++ b/core/mac/src/cfg/cfg_api.c @@ -71,7 +71,7 @@ uint32_t cfg_need_restart(tpAniSirGlobal pMac, uint16_t cfgId) return !!(pMac->cfg.gCfgEntry[cfgId].control & CFG_CTL_RESTART); } -void cfg_get_strindex(tpAniSirGlobal pMac, uint16_t cfgId) +static void cfg_get_strindex(tpAniSirGlobal pMac, uint16_t cfgId) { uint16_t i = 0; -- cgit v1.2.3 From 9902821db328ba97f55f2a6f9de92835a9f3bdd4 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Thu, 6 Oct 2016 18:39:59 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in dph_hash_table We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in dph_hash_table. Change-Id: I9513060929343a61c329e55e15f7e6ec18d1e166 CRs-Fixed: 1075090 --- core/mac/src/dph/dph_hash_table.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/mac/src/dph/dph_hash_table.c b/core/mac/src/dph/dph_hash_table.c index 6ff817c03b5d..ae22dd7973fb 100644 --- a/core/mac/src/dph/dph_hash_table.c +++ b/core/mac/src/dph/dph_hash_table.c @@ -96,7 +96,8 @@ void dph_hash_table_class_init(tpAniSirGlobal pMac, * @return None */ -uint16_t hash_function(tpAniSirGlobal pMac, uint8_t staAddr[], uint16_t numSta) +static uint16_t hash_function(tpAniSirGlobal pMac, uint8_t staAddr[], + uint16_t numSta) { int i; uint16_t sum = 0; -- cgit v1.2.3 From b9f21bca25df40033925cbf9473a8440cf516a03 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Thu, 6 Oct 2016 18:42:43 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in lim_admit_control We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in lim_admit_control. Change-Id: Ic2ff63f07d59d7242f0c37917201f239b00dfe37 CRs-Fixed: 1075090 --- core/mac/src/pe/lim/lim_admit_control.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/mac/src/pe/lim/lim_admit_control.c b/core/mac/src/pe/lim/lim_admit_control.c index a0644c3938c0..2ed47a0ab019 100644 --- a/core/mac/src/pe/lim/lim_admit_control.c +++ b/core/mac/src/pe/lim/lim_admit_control.c @@ -43,6 +43,7 @@ #include "lim_trace.h" #include "lim_send_sme_rsp_messages.h" #include "lim_types.h" +#include "lim_admit_control.h" #define ADMIT_CONTROL_LOGLEVEL LOG1 #define ADMIT_CONTROL_POLICY_LOGLEVEL LOG1 @@ -348,8 +349,9 @@ lim_admit_policy_oversubscription(tpAniSirGlobal mac_ctx, \return eSirRetStatus - status -------------------------------------------------------------*/ -tSirRetStatus lim_admit_policy(tpAniSirGlobal pMac, - tSirMacTspecIE *pTspec, tpPESession psessionEntry) +static tSirRetStatus lim_admit_policy(tpAniSirGlobal pMac, + tSirMacTspecIE *pTspec, + tpPESession psessionEntry) { tSirRetStatus retval = eSIR_FAILURE; tpLimAdmitPolicyInfo pAdmitPolicy = &pMac->lim.admitPolicyInfo; @@ -395,7 +397,7 @@ tSirRetStatus lim_admit_policy(tpAniSirGlobal pMac, /* ----------------------------------------------------------------------------- */ /* delete the specified tspec */ -void lim_tspec_delete(tpAniSirGlobal pMac, tpLimTspecInfo pInfo) +static void lim_tspec_delete(tpAniSirGlobal pMac, tpLimTspecInfo pInfo) { if (pInfo == NULL) return; @@ -500,7 +502,7 @@ lim_tspec_find_by_assoc_id(tpAniSirGlobal pMac, \return eSirRetStatus - status of the comparison -------------------------------------------------------------*/ -tSirRetStatus +static tSirRetStatus lim_find_tspec(tpAniSirGlobal pMac, uint16_t assocId, tSirMacTSInfo *pTsInfo, -- cgit v1.2.3 From 72c8e7c7e4cf8a7a529c99256c060d1fa27725d1 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Thu, 6 Oct 2016 18:43:52 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in lim_assoc_utils We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in lim_assoc_utils. Change-Id: I28ac7560d042f4d81560d3bbeea8ac18beb5e453 CRs-Fixed: 1075090 --- core/mac/src/pe/lim/lim_assoc_utils.c | 14 +++++++------- core/mac/src/pe/lim/lim_assoc_utils.h | 6 ++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 4aae611d0787..6fef5dca4475 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -1214,10 +1214,10 @@ lim_decide_ap_protection_on_delete(tpAniSirGlobal mac_ctx, * * Return: None */ -void lim_decide_short_preamble(tpAniSirGlobal mac_ctx, - tpDphHashNode sta_ds, - tpUpdateBeaconParams beacon_params, - tpPESession session_entry) +static void lim_decide_short_preamble(tpAniSirGlobal mac_ctx, + tpDphHashNode sta_ds, + tpUpdateBeaconParams beacon_params, + tpPESession session_entry) { uint32_t i; @@ -1270,7 +1270,7 @@ void lim_decide_short_preamble(tpAniSirGlobal mac_ctx, * the BSS. * Return: None */ -void +static void lim_decide_short_slot(tpAniSirGlobal mac_ctx, tpDphHashNode sta_ds, tpUpdateBeaconParams beacon_params, tpPESession session_entry) @@ -3403,7 +3403,7 @@ lim_del_bss(tpAniSirGlobal pMac, tpDphHashNode pStaDs, uint16_t bssIdx, * * Return : void */ -void lim_update_vhtcaps_assoc_resp(tpAniSirGlobal mac_ctx, +static void lim_update_vhtcaps_assoc_resp(tpAniSirGlobal mac_ctx, tpAddBssParams pAddBssParams, tDot11fIEVHTCaps *vht_caps, tpPESession psessionEntry) { @@ -3466,7 +3466,7 @@ void lim_update_vhtcaps_assoc_resp(tpAniSirGlobal mac_ctx, * * Return : void */ -void lim_update_vht_oper_assoc_resp(tpAniSirGlobal mac_ctx, +static void lim_update_vht_oper_assoc_resp(tpAniSirGlobal mac_ctx, tpAddBssParams pAddBssParams, tDot11fIEVHTOperation *vht_oper, tpPESession psessionEntry) { diff --git a/core/mac/src/pe/lim/lim_assoc_utils.h b/core/mac/src/pe/lim/lim_assoc_utils.h index 9e605f16dfa6..80f12be984a0 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.h +++ b/core/mac/src/pe/lim/lim_assoc_utils.h @@ -219,4 +219,10 @@ static inline void lim_send_sme_tsm_ie_ind(tpAniSirGlobal pMac, {} #endif /* FEATURE_WLAN_ESE */ +tSirRetStatus lim_populate_vht_mcs_set(tpAniSirGlobal pMac, + tpSirSupportedRates pRates, + tDot11fIEVHTCaps *pPeerVHTCaps, + tpPESession psessionEntry, + uint8_t nss); + #endif /* __LIM_ASSOC_UTILS_H */ -- cgit v1.2.3 From 5948a1869e19fb6c4e76822e13ae3638aeb58693 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Thu, 6 Oct 2016 18:47:06 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in lim_ibss_peer_mgmt We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in lim_ibss_peer_mgmt. Change-Id: I399108d2e880631f60afec51d2c6472d623f907d CRs-Fixed: 1075090 --- core/mac/src/pe/lim/lim_ibss_peer_mgmt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/mac/src/pe/lim/lim_ibss_peer_mgmt.c b/core/mac/src/pe/lim/lim_ibss_peer_mgmt.c index c6a14ad1df4e..fe04d3f6b952 100644 --- a/core/mac/src/pe/lim/lim_ibss_peer_mgmt.c +++ b/core/mac/src/pe/lim/lim_ibss_peer_mgmt.c @@ -668,7 +668,8 @@ void lim_ibss_init(tpAniSirGlobal pMac) * @return None */ -void lim_ibss_delete_all_peers(tpAniSirGlobal pMac, tpPESession psessionEntry) +static void lim_ibss_delete_all_peers(tpAniSirGlobal pMac, + tpPESession psessionEntry) { tLimIbssPeerNode *pCurrNode, *pTempNode; tpDphHashNode pStaDs; -- cgit v1.2.3 From d3d4b6af4cee16bca52bb78a3720282747e26551 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Fri, 7 Oct 2016 07:23:40 -0700 Subject: qcacld-3.0: Fix -Wmissing-prototypes in lim_process_assoc_rsp_frame We want to enable the compiler's -Wmissing-prototypes switch, but there is existing code that is generating warnings. Fix all warnings in lim_process_assoc_rsp_frame. Change-Id: I232343baf74227d525f1004ab2d57fd3d68702d4 CRs-Fixed: 1075090 --- core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c index 81f8714bfab8..359991de6e14 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c @@ -473,7 +473,7 @@ static void lim_update_stads_ext_cap(tpAniSirGlobal mac_ctx, * * Return: None */ -void lim_stop_reassoc_retry_timer(tpAniSirGlobal mac_ctx) +static void lim_stop_reassoc_retry_timer(tpAniSirGlobal mac_ctx) { mac_ctx->lim.reAssocRetryAttempt = 0; if ((NULL != mac_ctx->lim.pSessionEntry) -- cgit v1.2.3 From 901d75a1a14a0e13b68067636b8a11abf0a9955c Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 11 Oct 2016 23:47:21 -0700 Subject: Release 5.1.0.30L Release 5.1.0.30L Change-Id: I3f16e78cf03ed587ec6c7482c76164f61431640b 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 5b7338a51058..c730c5a56a0b 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "K" +#define QWLAN_VERSION_EXTRA "L" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30K" +#define QWLAN_VERSIONSTR "5.1.0.30L" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 3370212bf797e4131f077b552abc877fdb349fb2 Mon Sep 17 00:00:00 2001 From: Hanumanth Reddy Pothula Date: Fri, 7 Oct 2016 17:27:04 +0530 Subject: qcacld-3.0: Invalidate session ID after successful session close Presently, host sets session ID to invalid(0xFF) once it posts the message for sme to close session. During the close session if there are any north bound command pending in queue, Host is sending the command with invalid session ID to firmware, leading to device crash. Set session ID to invalid only once sme session is closed. Change-Id: Ib8a6a8e8a8af842064f6500b4bb62266eae7c1f8 CRs-Fixed: 1074111 --- core/hdd/src/wlan_hdd_hostapd.c | 1 + core/hdd/src/wlan_hdd_main.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 559a6717f3e9..bf299934952b 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -7674,6 +7674,7 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy, global_p2p_connection_status = P2P_NOT_ACTIVE; } #endif + pAdapter->sessionId = HDD_SESSION_ID_INVALID; EXIT(); return ret; } diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 75c5aec1d67f..bfbee90dfc03 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -3463,7 +3463,6 @@ static void hdd_wait_for_sme_close_sesion(hdd_context_t *hdd_ctx, sme_close_session(hdd_ctx->hHal, adapter->sessionId, hdd_sme_close_session_callback, adapter)) { - adapter->sessionId = HDD_SESSION_ID_INVALID; /* * Block on a completion variable. Can't wait * forever though. @@ -3477,7 +3476,9 @@ static void hdd_wait_for_sme_close_sesion(hdd_context_t *hdd_ctx, if (adapter->device_mode == QDF_NDI_MODE) hdd_ndp_session_end_handler(adapter); clear_bit(SME_SESSION_OPENED, &adapter->event_flags); + return; } + adapter->sessionId = HDD_SESSION_ID_INVALID; } } -- cgit v1.2.3 From 0b18c45266361e0cd88be707b80e4ddb67b8b939 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 12 Oct 2016 00:45:07 -0700 Subject: Release 5.1.0.30M Release 5.1.0.30M Change-Id: I82211cf75cc0b990207306bffbeb5d2836308d8c 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 c730c5a56a0b..b71ff74a2e42 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "L" +#define QWLAN_VERSION_EXTRA "M" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30L" +#define QWLAN_VERSIONSTR "5.1.0.30M" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 476deeb893c9917c2c2849ec5d57334fa59d2471 Mon Sep 17 00:00:00 2001 From: Srinivas Girigowda Date: Tue, 19 Jul 2016 16:21:29 -0700 Subject: qcacld-3.0: Fix buffer overwrite problem in CCXBEACONREQ This is a propagation from qcacld-2.0 to qcacld-3.0. Set the number of IE fields to minimum of input data and SIR_ESE_MAX_MEAS_IE_REQS Change-Id: Ie53cfec7872ab69530bbb8932f9f9e85fb319f92 CRs-Fixed: 993561 --- core/hdd/src/wlan_hdd_ioctl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index 61c1a77aec74..a45115aa7185 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -2642,7 +2642,7 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, if ('\0' == *inPtr) return -EINVAL; - /* get the first argument ie measurement token */ + /* Getting the first argument ie Number of IE fields */ v = sscanf(inPtr, "%31s ", buf); if (1 != v) return -EINVAL; @@ -2651,10 +2651,10 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, if (v < 0) return -EINVAL; + tempInt = QDF_MIN(tempInt, SIR_ESE_MAX_MEAS_IE_REQS); pEseBcnReq->numBcnReqIe = tempInt; - hdd_info("Number of Bcn Req Ie fields(%d)", - pEseBcnReq->numBcnReqIe); + hdd_info("Number of Bcn Req Ie fields: %d", pEseBcnReq->numBcnReqIe); for (j = 0; j < (pEseBcnReq->numBcnReqIe); j++) { for (i = 0; i < 4; i++) { -- cgit v1.2.3 From d79b3454965ff4847de828385dd6919280979b93 Mon Sep 17 00:00:00 2001 From: Srinivas Girigowda Date: Tue, 19 Jul 2016 18:39:46 -0700 Subject: qcacld-3.0: Add back these ese functions Due to incorrect merge resolve, these functions got removed. Add the functions back. Change-Id: I5bdaab2e93d221ca15179d8b35e9a86619e9b489 CRs-Fixed: 950762 --- core/hdd/src/wlan_hdd_ioctl.c | 125 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index a45115aa7185..4f5c3bb0db13 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -5548,6 +5548,127 @@ static int drv_cmd_ccx_beacon_req(hdd_adapter_t *adapter, goto exit; } +exit: + return ret; +} + +/** + * drv_cmd_ccx_plm_req() - Set ESE PLM request + * @adapter: Pointer to the HDD adapter + * @hdd_ctx: Pointer to the HDD context + * @command: Driver command string + * @command_len: Driver command string length + * @priv_data: Private data coming with the driver command. Unused here + * + * This function handles driver command that sets the ESE PLM request + * + * Return: 0 on success; negative errno otherwise + */ +static int drv_cmd_ccx_plm_req(hdd_adapter_t *adapter, + hdd_context_t *hdd_ctx, + uint8_t *command, + uint8_t command_len, + hdd_priv_data_t *priv_data) +{ + int ret = 0; + uint8_t *value = command; + QDF_STATUS status = QDF_STATUS_SUCCESS; + tpSirPlmReq pPlmRequest = NULL; + + pPlmRequest = qdf_mem_malloc(sizeof(tSirPlmReq)); + if (NULL == pPlmRequest) { + ret = -ENOMEM; + goto exit; + } + + status = hdd_parse_plm_cmd(value, pPlmRequest); + if (QDF_STATUS_SUCCESS != status) { + qdf_mem_free(pPlmRequest); + pPlmRequest = NULL; + ret = -EINVAL; + goto exit; + } + pPlmRequest->sessionId = adapter->sessionId; + + status = sme_set_plm_request(hdd_ctx->hHal, pPlmRequest); + if (QDF_STATUS_SUCCESS != status) { + qdf_mem_free(pPlmRequest); + pPlmRequest = NULL; + ret = -EINVAL; + goto exit; + } + +exit: + return ret; +} + +/** + * drv_cmd_set_ccx_mode() - Set ESE mode + * @adapter: Pointer to the HDD adapter + * @hdd_ctx: Pointer to the HDD context + * @command: Driver command string + * @command_len: Driver command string length + * @priv_data: Private data coming with the driver command. Unused here + * + * This function handles driver command that sets ESE mode + * + * Return: 0 on success; negative errno otherwise + */ +static int drv_cmd_set_ccx_mode(hdd_adapter_t *adapter, + hdd_context_t *hdd_ctx, + uint8_t *command, + uint8_t command_len, + hdd_priv_data_t *priv_data) +{ + int ret = 0; + uint8_t *value = command; + uint8_t eseMode = CFG_ESE_FEATURE_ENABLED_DEFAULT; + + /* + * Check if the features OKC/ESE/11R are supported simultaneously, + * then this operation is not permitted (return FAILURE) + */ + if (sme_get_is_ese_feature_enabled(hdd_ctx->hHal) && + hdd_is_okc_mode_enabled(hdd_ctx) && + sme_get_is_ft_feature_enabled(hdd_ctx->hHal)) { + hdd_warn("OKC/ESE/11R are supported simultaneously hence this operation is not permitted!"); + ret = -EPERM; + goto exit; + } + + /* Move pointer to ahead of SETCCXMODE */ + value = value + command_len + 1; + + /* Convert the value from ascii to integer */ + ret = kstrtou8(value, 10, &eseMode); + if (ret < 0) { + /* + * If the input value is greater than max value of datatype, + * then also kstrtou8 fails + */ + hdd_err("kstrtou8 failed range [%d - %d]", + CFG_ESE_FEATURE_ENABLED_MIN, + CFG_ESE_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } + + if ((eseMode < CFG_ESE_FEATURE_ENABLED_MIN) || + (eseMode > CFG_ESE_FEATURE_ENABLED_MAX)) { + hdd_err("Ese mode value %d is out of range (Min: %d Max: %d)", + eseMode, + CFG_ESE_FEATURE_ENABLED_MIN, + CFG_ESE_FEATURE_ENABLED_MAX); + ret = -EINVAL; + goto exit; + } + hdd_info("Received Command to change ese mode = %d", eseMode); + + hdd_ctx->config->isEseIniFeatureEnabled = eseMode; + sme_update_is_ese_feature_enabled(hdd_ctx->hHal, + adapter->sessionId, + eseMode); + exit: return ret; } @@ -7036,7 +7157,9 @@ static const hdd_drv_cmd_t hdd_drv_cmds[] = { {"SETCCXROAMSCANCHANNELS", drv_cmd_set_ccx_roam_scan_channels}, {"GETTSMSTATS", drv_cmd_get_tsm_stats}, {"SETCCKMIE", drv_cmd_set_cckm_ie}, - {"CCXBEACONREQ", drv_cmd_ccx_beacon_req}, + {"CCXBEACONREQ", drv_cmd_ccx_beacon_req}, + {"CCXPLMREQ", drv_cmd_ccx_plm_req}, + {"SETCCXMODE", drv_cmd_set_ccx_mode}, #endif /* FEATURE_WLAN_ESE */ {"SETMCRATE", drv_cmd_set_mc_rate}, {"MAXTXPOWER", drv_cmd_max_tx_power}, -- cgit v1.2.3 From 67e2da67cb054953463b7162e33d95afbc5fc1c9 Mon Sep 17 00:00:00 2001 From: Srinivas Girigowda Date: Tue, 19 Jul 2016 16:33:01 -0700 Subject: qcacld-3.0: Validate CCXBEACONREQ IE fields This is a qcacld-2.0 to qcacld-3.0 propagation. Validate CCXBEACONREQ IE fields. Change-Id: Ie64a642abdd7923e91801186aa5743094a739fc9 CRs-Fixed: 1025185 --- core/hdd/src/wlan_hdd_ioctl.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index 4f5c3bb0db13..fd4def55ed73 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -2620,7 +2620,8 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, tCsrEseBeaconReq *pEseBcnReq) { uint8_t *inPtr = pValue; - int tempInt = 0; + uint8_t input = 0; + uint32_t tempInt = 0; int j = 0, i = 0, v = 0; char buf[32]; @@ -2647,12 +2648,12 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, if (1 != v) return -EINVAL; - v = kstrtos32(buf, 10, &tempInt); + v = kstrtou8(buf, 10, &input); if (v < 0) return -EINVAL; - tempInt = QDF_MIN(tempInt, SIR_ESE_MAX_MEAS_IE_REQS); - pEseBcnReq->numBcnReqIe = tempInt; + input = QDF_MIN(input, SIR_ESE_MAX_MEAS_IE_REQS); + pEseBcnReq->numBcnReqIe = input; hdd_info("Number of Bcn Req Ie fields: %d", pEseBcnReq->numBcnReqIe); @@ -2683,14 +2684,14 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, if (1 != v) return -EINVAL; - v = kstrtos32(buf, 10, &tempInt); + v = kstrtou32(buf, 10, &tempInt); if (v < 0) return -EINVAL; switch (i) { case 0: /* Measurement token */ - if (tempInt <= 0) { - hdd_err("Invalid Measurement Token(%d)", + if (!tempInt) { + hdd_err("Invalid Measurement Token: %u", tempInt); return -EINVAL; } @@ -2699,10 +2700,10 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, break; case 1: /* Channel number */ - if ((tempInt <= 0) || + if (!tempInt || (tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX)) { - hdd_err("Invalid Channel Number(%d)", + hdd_err("Invalid Channel Number: %u", tempInt); return -EINVAL; } @@ -2712,7 +2713,7 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, case 2: /* Scan mode */ if ((tempInt < eSIR_PASSIVE_SCAN) || (tempInt > eSIR_BEACON_TABLE)) { - hdd_err("Invalid Scan Mode(%d) Expected{0|1|2}", + hdd_err("Invalid Scan Mode: %u Expected{0|1|2}", tempInt); return -EINVAL; } @@ -2720,13 +2721,12 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, break; case 3: /* Measurement duration */ - if (((tempInt <= 0) + if ((!tempInt && (pEseBcnReq->bcnReq[j].scanMode != eSIR_BEACON_TABLE)) || - ((tempInt < 0) && - (pEseBcnReq->bcnReq[j].scanMode == - eSIR_BEACON_TABLE))) { - hdd_err("Invalid Measurement Duration(%d)", + (pEseBcnReq->bcnReq[j].scanMode == + eSIR_BEACON_TABLE)) { + hdd_err("Invalid Measurement Duration: %u", tempInt); return -EINVAL; } @@ -2738,7 +2738,7 @@ static int hdd_parse_ese_beacon_req(uint8_t *pValue, } for (j = 0; j < pEseBcnReq->numBcnReqIe; j++) { - hdd_info("Index(%d) Measurement Token(%u) Channel(%u) Scan Mode(%u) Measurement Duration(%u)", + hdd_info("Index: %d Measurement Token: %u Channel: %u Scan Mode: %u Measurement Duration: %u", j, pEseBcnReq->bcnReq[j].measurementToken, pEseBcnReq->bcnReq[j].channel, -- cgit v1.2.3 From ca42292f2b0ae7dff67905aff60459db81967bc8 Mon Sep 17 00:00:00 2001 From: Srinivas Girigowda Date: Wed, 17 Aug 2016 18:29:42 -0700 Subject: qcacld-3.0: Update get_concurrency_matrix to advertise STA + NAN This is a qcacld-2.0 to qcacld-3.0 propagation. Update the get_concurrency_matrix API to advertise the support for STA + NAN concurrency. Change-Id: Ie178cdb8c01294ef103baebfd7805d80e4c3c3be CRs-Fixed: 987047 --- core/hdd/src/wlan_hdd_cfg80211.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index eb8fedd49527..8e18bcd66c0b 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -2068,11 +2068,13 @@ static int __wlan_hdd_cfg80211_get_concurrency_matrix(struct wiphy *wiphy, /* Fill feature combination matrix */ feature_sets = 0; feature_set_matrix[feature_sets++] = WIFI_FEATURE_INFRA | - WIFI_FEATURE_P2P; + WIFI_FEATURE_P2P; + feature_set_matrix[feature_sets++] = WIFI_FEATURE_INFRA | + WIFI_FEATURE_NAN; /* Add more feature combinations here */ feature_sets = QDF_MIN(feature_sets, max_feature_sets); - hdd_info("Number of feature sets:%d", feature_sets); + hdd_info("Number of feature sets: %d", feature_sets); hdd_info("Feature set matrix"); for (i = 0; i < feature_sets; i++) hdd_info("[%d] 0x%02X", i, feature_set_matrix[i]); -- cgit v1.2.3 From 29ac683dd2726d3f9a7d4076cba973b5993abf8c Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 12 Oct 2016 01:25:12 -0700 Subject: Release 5.1.0.30N Release 5.1.0.30N Change-Id: I9de09b7de2a7f9751428a08d3a3fea5cd1201abf 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 b71ff74a2e42..1f624b087c76 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "M" +#define QWLAN_VERSION_EXTRA "N" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30M" +#define QWLAN_VERSIONSTR "5.1.0.30N" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 0be56dfdbcc3f8d720910db5fdea2125160dac4e Mon Sep 17 00:00:00 2001 From: Rajeev Kumar Sirasanagandla Date: Thu, 8 Sep 2016 19:19:47 +0530 Subject: qcacld-3.0: Add ini to configure RTS profiles to FW qcacld-2.0 to qcacld-3.0 propagation INI parameter to configure different RTS profiles to firmware during wlan startup. Based on this value the FW shall configure any of the following parameters: - RTSCTS_DISABLED - RTSCTS_ENABLED_4_SECOND_RATESERIES - CTS2SELF_ENABLED_4_SECOND_RATESERIES - RTSCTS_ENABLED_4_SWRETRIES - CTS2SELF_ENABLED_4_SWRETRIES Change-Id: Id2a9d64e626288920e0d0a73badca9f9e241decb CRs-Fixed: 940886 --- core/hdd/inc/wlan_hdd_cfg.h | 18 ++++++++++++++++++ core/hdd/src/wlan_hdd_cfg.c | 7 +++++++ core/hdd/src/wlan_hdd_main.c | 9 +++++++++ 3 files changed, 34 insertions(+) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 4ba70e7ca1cb..c3cead689893 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1279,6 +1279,21 @@ typedef enum { #define CFG_ENABLE_FW_MODULE_LOG_LEVEL "gFwDebugModuleLoglevel" #define CFG_ENABLE_FW_MODULE_LOG_DEFAULT "" +/* + * gEnableRTSProfiles for configuring different RTS profiles + * to firmware. + * Following are the valid values for the rtsprofile: + * RTSCTS_DISABLED 0 + * RTSCTS_ENABLED_4_SECOND_RATESERIES 17 + * CTS2SELF_ENABLED_4_SECOND_RATESERIES 18 + * RTSCTS_ENABLED_4_SWRETRIES 33 + * CTS2SELF_ENABLED_4_SWRETRIES 34 + */ +#define CFG_ENABLE_FW_RTS_PROFILE "gEnableRTSProfiles" +#define CFG_ENABLE_FW_RTS_PROFILE_MIN (0) +#define CFG_ENABLE_FW_RTS_PROFILE_MAX (34) +#define CFG_ENABLE_FW_RTS_PROFILE_DEFAULT (33) + #ifdef FEATURE_GREEN_AP #define CFG_ENABLE_GREEN_AP_FEATURE "gEnableGreenAp" #define CFG_ENABLE_GREEN_AP_FEATURE_MIN (0) @@ -4024,6 +4039,9 @@ struct hdd_config { uint32_t enableFwLogLevel; uint8_t enableFwModuleLogLevel[FW_MODULE_LOG_LEVEL_STRING_LENGTH]; + /* RTS profile parameter */ + uint32_t rts_profile; + #ifdef WLAN_FEATURE_11W uint32_t pmfSaQueryMaxRetries; uint32_t pmfSaQueryRetryInterval; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 4ad684334918..b76a3c0bf566 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -3052,6 +3052,13 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_ENABLE_FW_DEBUG_LOG_LEVEL_MIN, CFG_ENABLE_FW_DEBUG_LOG_LEVEL_MAX), + REG_VARIABLE(CFG_ENABLE_FW_RTS_PROFILE, WLAN_PARAM_Integer, + struct hdd_config, rts_profile, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_FW_RTS_PROFILE_DEFAULT, + CFG_ENABLE_FW_RTS_PROFILE_MIN, + CFG_ENABLE_FW_RTS_PROFILE_MAX), + REG_VARIABLE_STRING(CFG_ENABLE_FW_MODULE_LOG_LEVEL, WLAN_PARAM_String, struct hdd_config, enableFwModuleLogLevel, VAR_FLAGS_OPTIONAL, diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index bfbee90dfc03..2dc3cf390050 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -3114,6 +3114,15 @@ int hdd_set_fw_params(hdd_adapter_t *adapter) hdd_set_fw_log_params(hdd_ctx, adapter); + ret = wma_cli_set_command(adapter->sessionId, + WMI_VDEV_PARAM_ENABLE_RTSCTS, + hdd_ctx->config->rts_profile, + VDEV_CMD); + if (ret) { + hdd_err("FAILED TO SET RTSCTS Profile ret:%d", ret); + goto error; + } + EXIT(); return 0; -- cgit v1.2.3 From 9d8c2f003c0cf4f5fd014f203745f96c5d6f5b32 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 12 Oct 2016 09:24:19 -0700 Subject: Release 5.1.0.30O Release 5.1.0.30O Change-Id: Ie55bb1f87e160cc458b6052bcf2b4acf5f534600 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 1f624b087c76..49136ac8471d 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "N" +#define QWLAN_VERSION_EXTRA "O" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30N" +#define QWLAN_VERSIONSTR "5.1.0.30O" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 1aa9c9ac126aa455a0a472796d3812710fc4f9a3 Mon Sep 17 00:00:00 2001 From: Kiran Kumar Lokere Date: Wed, 5 Oct 2016 18:50:59 -0700 Subject: qcacld-3.0: Add support to configure the 80MHz preference Add support to configure the 80MHz preference over 160MHz connection when the peer AP is capable of 160MHz 2x2 mode. Change-Id: I67d62a358141c470176667429f982053d162c4f8 CRs-Fixed: 1075815 --- core/hdd/inc/wlan_hdd_cfg.h | 9 +++++++++ core/hdd/src/wlan_hdd_cfg.c | 7 +++++++ core/hdd/src/wlan_hdd_main.c | 2 ++ core/mac/inc/ani_global.h | 1 + core/mac/src/pe/lim/lim_prop_exts_utils.c | 3 ++- core/sme/inc/sme_api.h | 2 ++ core/sme/src/common/sme_api.c | 12 ++++++++++++ 7 files changed, 35 insertions(+), 1 deletion(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index c3cead689893..9f3e1e44dc10 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1098,6 +1098,14 @@ typedef enum { #define CFG_VHT_ENABLE_2x2_CAP_FEATURE_MAX (1) #define CFG_VHT_ENABLE_2x2_CAP_FEATURE_DEFAULT (0) +/* 0 - Connects in 160MHz 1x1 when AP is 160MHz 2x2 + * 1 - Connects in 80MHz 2x2 when AP is 160MHz 2x2 + */ +#define CFG_STA_PREFER_80MHZ_OVER_160MHZ "gStaPrefer80MHzOver160MHz" +#define CFG_STA_PREFER_80MHZ_OVER_160MHZ_MIN (0) +#define CFG_STA_PREFER_80MHZ_OVER_160MHZ_MAX (1) +#define CFG_STA_PREFER_80MHZ_OVER_160MHZ_DEFAULT (1) + /* * NSS cfg bit definition. * STA BIT[0:1] @@ -4225,6 +4233,7 @@ struct hdd_config { bool enable_go_cts2self_for_sta; uint32_t tx_aggregation_size; uint32_t rx_aggregation_size; + bool sta_prefer_80MHz_over_160MHz; }; #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index b76a3c0bf566..1b99f3c6ae1b 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -2029,6 +2029,13 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_VDEV_TYPE_NSS_2G_MIN, CFG_VDEV_TYPE_NSS_2G_MAX), + REG_VARIABLE(CFG_STA_PREFER_80MHZ_OVER_160MHZ, WLAN_PARAM_Integer, + struct hdd_config, sta_prefer_80MHz_over_160MHz, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_STA_PREFER_80MHZ_OVER_160MHZ_DEFAULT, + CFG_STA_PREFER_80MHZ_OVER_160MHZ_MIN, + CFG_STA_PREFER_80MHZ_OVER_160MHZ_MAX), + REG_VARIABLE(CFG_VDEV_TYPE_NSS_5G, WLAN_PARAM_Integer, struct hdd_config, vdev_type_nss_5g, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 2dc3cf390050..fdd639078983 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -7458,6 +7458,8 @@ static int hdd_features_init(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter) /* FW capabilities received, Set the Dot11 mode */ sme_setdef_dot11mode(hdd_ctx->hHal); + sme_set_prefer_80MHz_over_160MHz(hdd_ctx->hHal, + hdd_ctx->config->sta_prefer_80MHz_over_160MHz); if (hdd_ctx->config->fIsImpsEnabled) diff --git a/core/mac/inc/ani_global.h b/core/mac/inc/ani_global.h index b4bb8fb0b8da..83d9cbd4067d 100644 --- a/core/mac/inc/ani_global.h +++ b/core/mac/inc/ani_global.h @@ -978,6 +978,7 @@ typedef struct sAniSirGlobal { int8_t first_scan_bucket_threshold; enum auth_tx_ack_status auth_ack_status; uint8_t user_configured_nss; + bool sta_prefer_80MHz_over_160MHz; } tAniSirGlobal; typedef enum { diff --git a/core/mac/src/pe/lim/lim_prop_exts_utils.c b/core/mac/src/pe/lim/lim_prop_exts_utils.c index 1f367b75a469..c263b366d36e 100644 --- a/core/mac/src/pe/lim/lim_prop_exts_utils.c +++ b/core/mac/src/pe/lim/lim_prop_exts_utils.c @@ -224,7 +224,8 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie, * AP supports Nss > 1 in 160MHz mode then connect the STA * in 2x2 80MHz mode instead of connecting in 160MHz mode. */ - if (vht_ch_wd > WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ) { + if ((vht_ch_wd > WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ) && + mac_ctx->sta_prefer_80MHz_over_160MHz) { if (!(IS_VHT_NSS_1x1(beacon_struct->VHTCaps.txMCSMap)) && (!IS_VHT_NSS_1x1(beacon_struct->VHTCaps.rxMCSMap))) diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index cfbbe22ec405..ce4bdac75066 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -1323,4 +1323,6 @@ QDF_STATUS sme_encrypt_decrypt_msg(tHalHandle hal, * Return: QDF_STATUS */ QDF_STATUS sme_set_cts2self_for_p2p_go(tHalHandle hal); +void sme_set_prefer_80MHz_over_160MHz(tHalHandle hal, + bool sta_prefer_80MHz_over_160MHz); #endif /* #if !defined( __SME_API_H ) */ diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 7577d99c6af0..fe98f63d4264 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -11212,6 +11212,18 @@ void sme_get_command_q_status(tHalHandle hHal) return; } +/** + * sme_set_prefer_80MHz_over_160MHz() - API to set sta_prefer_80MHz_over_160MHz + * @hal: The handle returned by macOpen + * @sta_prefer_80MHz_over_160MHz: sta_prefer_80MHz_over_160MHz config param + */ +void sme_set_prefer_80MHz_over_160MHz(tHalHandle hal, + bool sta_prefer_80MHz_over_160MHz) +{ + tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal); + mac_ctx->sta_prefer_80MHz_over_160MHz = sta_prefer_80MHz_over_160MHz; +} + #ifdef WLAN_FEATURE_DSRC /** * sme_set_dot11p_config() - API to set the 802.11p config -- cgit v1.2.3 From 327d4b3fc880ce6580e830788a759c20b59bb6a8 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 12 Oct 2016 11:03:48 -0700 Subject: Release 5.1.0.30P Release 5.1.0.30P Change-Id: I6ac966108bfd0d8ba9d1c19d37dbfdab113f6a81 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 49136ac8471d..825fdb196df9 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "O" +#define QWLAN_VERSION_EXTRA "P" #define QWLAN_VERSION_BUILD 30 -#define QWLAN_VERSIONSTR "5.1.0.30O" +#define QWLAN_VERSIONSTR "5.1.0.30P" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3