From acf3561f35f3ad3d3da282f44b91dd7e7a42e863 Mon Sep 17 00:00:00 2001 From: Manjunathappa Prakash Date: Mon, 3 Oct 2016 17:22:16 -0700 Subject: qcacld-3.0: Do NULL check on adapter->dev in hdd_lro_flush Fix the issue due NULL pointer access on adapter->dev. One of the instance this happened is inside __hdd_hostapd_uninit(). Change-Id: Ie2a3e41d446261cd32729b8eb8f12e23134a8828 CRs-Fixed: 1073808 --- core/hdd/src/wlan_hdd_lro.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_lro.c b/core/hdd/src/wlan_hdd_lro.c index 857d2c154a7a..35902f28fee5 100644 --- a/core/hdd/src/wlan_hdd_lro.c +++ b/core/hdd/src/wlan_hdd_lro.c @@ -461,7 +461,9 @@ void hdd_lro_flush(void *data) while (NULL != adapter_node && QDF_STATUS_SUCCESS == status) { adapter = adapter_node->pAdapter; hdd_lro = &adapter->lro_info; - if (adapter->dev->features & NETIF_F_LRO) { + if (adapter->dev == NULL) { + hdd_err("vdev interface going down"); + } else if (adapter->dev->features & NETIF_F_LRO) { qdf_spin_lock_bh(&hdd_lro->lro_mgr_arr_access_lock); for (i = 0; i < hdd_lro->lro_mgr->max_desc; i++) { if (hdd_lro->lro_mgr->lro_arr[i].active) { -- cgit v1.2.3 From a2bbaddd9d0e70c535b86503b47b713aa30f9586 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 5 Oct 2016 11:55:31 -0700 Subject: Release 5.1.0.29K Release 5.1.0.29K Change-Id: Icdfe0c05382e946e76f3e34bc7a5542aba5f4da8 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 7e897c074a79..c11b0d1c1d6d 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 29 -#define QWLAN_VERSIONSTR "5.1.0.29J" +#define QWLAN_VERSIONSTR "5.1.0.29K" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 75c1ca7de8c66042ee8b316714665d69f835befc Mon Sep 17 00:00:00 2001 From: Archana Ramachandran Date: Mon, 22 Aug 2016 17:20:25 -0700 Subject: qcacld-3.0: Fix HDD logging API in wlan_hdd_assoc HDD should use new logging API i.e., hdd_* CRs-Fixed: 937586 Change-Id: Iabe36591e6aae45cb837f0f434ccafd743f3b746 --- core/hdd/src/wlan_hdd_assoc.c | 703 +++++++++++++++++++----------------------- 1 file changed, 314 insertions(+), 389 deletions(-) diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 312349735478..196a20ecf74e 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -32,6 +32,9 @@ * */ +/* denote that this file does not allow legacy hddLog */ +#define HDD_DISALLOW_LEGACY_HDDLOG 1 + #include "wlan_hdd_includes.h" #include #include "dot11f.h" @@ -142,9 +145,8 @@ hdd_conn_set_authenticated(hdd_adapter_t *pAdapter, uint8_t authState) hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); /* save the new connection state */ - hddLog(LOG1, - FL("Authenticated state Changed from oldState:%d to State:%d"), - pHddStaCtx->conn_info.uIsAuthenticated, authState); + hdd_notice("Authenticated state Changed from oldState:%d to State:%d", + pHddStaCtx->conn_info.uIsAuthenticated, authState); pHddStaCtx->conn_info.uIsAuthenticated = authState; /* Check is pending ROC request or not when auth state changed */ @@ -972,9 +974,8 @@ hdd_send_ft_assoc_response(struct net_device *dev, u8 *pFTAssocRsp = NULL; if (pCsrRoamInfo->nAssocRspLength == 0) { - hddLog(LOGE, - FL("pCsrRoamInfo->nAssocRspLength=%d"), - (int)pCsrRoamInfo->nAssocRspLength); + hdd_err("pCsrRoamInfo->nAssocRspLength=%d", + (int)pCsrRoamInfo->nAssocRspLength); return; } @@ -982,18 +983,19 @@ hdd_send_ft_assoc_response(struct net_device *dev, (u8 *) (pCsrRoamInfo->pbFrames + pCsrRoamInfo->nBeaconLength + pCsrRoamInfo->nAssocReqLength); if (pFTAssocRsp == NULL) { - hddLog(LOGE, FL("AssocReq or AssocRsp is NULL")); + hdd_err("AssocReq or AssocRsp is NULL"); return; } /* pFTAssocRsp needs to point to the IEs */ pFTAssocRsp += FT_ASSOC_RSP_IES_OFFSET; - hddLog(LOG1, FL("AssocRsp is now at %02x%02x"), - (unsigned int)pFTAssocRsp[0], (unsigned int)pFTAssocRsp[1]); + hdd_notice("AssocRsp is now at %02x%02x", + (unsigned int)pFTAssocRsp[0], + (unsigned int)pFTAssocRsp[1]); /* We need to send the IEs to the supplicant. */ buff = kmalloc(IW_GENERIC_IE_MAX, GFP_ATOMIC); if (buff == NULL) { - hddLog(LOGE, FL("kmalloc unable to allocate memory")); + hdd_err("kmalloc unable to allocate memory"); return; } /* Send the Assoc Resp, the supplicant needs this for initial Auth. */ @@ -1042,20 +1044,19 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) sme_get_rici_es(pHddCtx->hHal, pAdapter->sessionId, (u8 *) ricIe, DOT11F_IE_RICDESCRIPTOR_MAX_LEN, &ric_ies_length); if (ric_ies_length == 0) { - hddLog(LOGW, - FL("RIC IEs is of length 0 not sending RIC Information for now")); + hdd_warn("RIC IEs is of length 0 not sending RIC Information for now"); } ftEvent.ric_ies = ricIe; ftEvent.ric_ies_len = ric_ies_length; - hddLog(LOG1, FL("RIC IEs is of length %d"), (int)ric_ies_length); + hdd_notice("RIC IEs is of length %d", (int)ric_ies_length); sme_get_ft_pre_auth_response(pHddCtx->hHal, pAdapter->sessionId, (u8 *) ftIe, DOT11F_IE_FTINFO_MAX_LEN, &auth_resp_len); if (auth_resp_len == 0) { - hddLog(LOGE, FL("AuthRsp FTIES is of length 0")); + hdd_err("AuthRsp FTIES is of length 0"); return; } @@ -1066,9 +1067,9 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) ftEvent.ies = (u8 *) (ftIe + QDF_MAC_ADDR_SIZE); ftEvent.ies_len = auth_resp_len - QDF_MAC_ADDR_SIZE; - hddLog(LOG1, FL("ftEvent.ies_len %zu"), ftEvent.ies_len); - hddLog(LOG1, FL("ftEvent.ric_ies_len %zu"), ftEvent.ric_ies_len); - hddLog(LOG1, FL("ftEvent.target_ap %2x-%2x-%2x-%2x-%2x-%2x"), + hdd_notice("ftEvent.ies_len %zu", ftEvent.ies_len); + hdd_notice("ftEvent.ric_ies_len %zu", ftEvent.ric_ies_len); + hdd_notice("ftEvent.target_ap %2x-%2x-%2x-%2x-%2x-%2x", ftEvent.target_ap[0], ftEvent.target_ap[1], ftEvent.target_ap[2], ftEvent.target_ap[3], ftEvent.target_ap[4], ftEvent.target_ap[5]); @@ -1079,7 +1080,7 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) /* We need to send the IEs to the supplicant */ buff = kmalloc(IW_CUSTOM_MAX, GFP_ATOMIC); if (buff == NULL) { - hddLog(LOGE, FL("kmalloc unable to allocate memory")); + hdd_err("kmalloc unable to allocate memory"); return; } qdf_mem_zero(buff, IW_CUSTOM_MAX); @@ -1090,8 +1091,7 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) (u8 *) &(buff[str_len]), (IW_CUSTOM_MAX - str_len), &ric_ies_length); if (ric_ies_length == 0) { - hddLog(LOGW, - FL("RIC IEs is of length 0 not sending RIC Information for now")); + hdd_warn("RIC IEs is of length 0 not sending RIC Information for now"); } else { wrqu.data.length = str_len + ric_ies_length; wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buff); @@ -1106,7 +1106,7 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) if (auth_resp_len == 0) { kfree(buff); - hddLog(LOGE, FL("AuthRsp FTIES is of length 0")); + hdd_err("AuthRsp FTIES is of length 0"); return; } @@ -1139,15 +1139,15 @@ hdd_send_new_ap_channel_info(struct net_device *dev, hdd_adapter_t *pAdapter, tSirBssDescription *descriptor = pCsrRoamInfo->pBssDesc; if (descriptor == NULL) { - hddLog(LOGE, FL("pCsrRoamInfo->pBssDesc(%p)"), descriptor); + hdd_err("pCsrRoamInfo->pBssDesc(%p)", descriptor); return; } /* * Send the Channel event, the supplicant needs this to generate * the Adjacent AP report. */ - hddLog(LOGW, FL("Sending up an SIOCGIWFREQ, channelId(%d)"), - descriptor->channelId); + hdd_warn("Sending up an SIOCGIWFREQ, channelId(%d)", + descriptor->channelId); memset(&wrqu, '\0', sizeof(wrqu)); wrqu.freq.m = descriptor->channelId; wrqu.freq.e = 0; @@ -1177,24 +1177,25 @@ hdd_send_update_beacon_ies_event(hdd_adapter_t *pAdapter, memset(&wrqu, '\0', sizeof(wrqu)); if (0 == pCsrRoamInfo->nBeaconLength) { - hddLog(LOGW, FL("pCsrRoamInfo->nBeaconFrameLength = 0")); + hdd_warn("pCsrRoamInfo->nBeaconFrameLength = 0"); return; } pBeaconIes = (u8 *) (pCsrRoamInfo->pbFrames + BEACON_FRAME_IES_OFFSET); if (pBeaconIes == NULL) { - hddLog(LOGW, FL("Beacon IEs is NULL")); + hdd_warn("Beacon IEs is NULL"); return; } /* pBeaconIes needs to point to the IEs */ - hddLog(LOG1, FL("Beacon IEs is now at %02x%02x"), - (unsigned int)pBeaconIes[0], (unsigned int)pBeaconIes[1]); - hddLog(LOG1, FL("Beacon IEs length = %d"), - pCsrRoamInfo->nBeaconLength - BEACON_FRAME_IES_OFFSET); + hdd_notice("Beacon IEs is now at %02x%02x", + (unsigned int)pBeaconIes[0], + (unsigned int)pBeaconIes[1]); + hdd_notice("Beacon IEs length = %d", + pCsrRoamInfo->nBeaconLength - BEACON_FRAME_IES_OFFSET); /* We need to send the IEs to the supplicant. */ buff = kmalloc(IW_CUSTOM_MAX, GFP_ATOMIC); if (buff == NULL) { - hddLog(LOGE, FL("kmalloc unable to allocate memory")); + hdd_err("kmalloc unable to allocate memory"); return; } qdf_mem_zero(buff, IW_CUSTOM_MAX); @@ -1222,8 +1223,8 @@ hdd_send_update_beacon_ies_event(hdd_adapter_t *pAdapter, else buff[strLen] = 0; /* last chunk */ - hddLog(LOG1, FL("Beacon IEs length to supplicant = %d"), - currentLen); + hdd_notice("Beacon IEs length to supplicant = %d", + currentLen); wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buff); } while (totalIeLen > 0); @@ -1261,13 +1262,13 @@ static void hdd_send_association_event(struct net_device *dev, if (NULL != pCsrRoamInfo) if (pCsrRoamInfo->roamSynchInProgress) /* change logging before release */ - hddLog(LOG4, "LFR3:hdd_send_association_event"); + hdd_info("LFR3:hdd_send_association_event"); #endif if (eConnectionState_Associated == pHddStaCtx->conn_info.connState) { tSirSmeChanInfo chan_info; if (!pCsrRoamInfo) { - hddLog(LOGE, FL("STA in associated state but pCsrRoamInfo is null")); + hdd_err("STA in associated state but pCsrRoamInfo is null"); return; } @@ -1283,14 +1284,12 @@ static void hdd_send_association_event(struct net_device *dev, P2P_CLIENT_CONNECTING_STATE_1) { global_p2p_connection_status = P2P_CLIENT_CONNECTED_STATE_1; - hddLog(LOGE, - "[P2P State] Changing state from Connecting state to Connected State for 8-way Handshake"); + hdd_err("[P2P State] Changing state from Connecting state to Connected State for 8-way Handshake"); } else if (global_p2p_connection_status == P2P_CLIENT_CONNECTING_STATE_2) { global_p2p_connection_status = P2P_CLIENT_COMPLETED_STATE; - hddLog(LOGE, - "[P2P State] Changing state from Connecting state to P2P Client Connection Completed"); + hdd_err("[P2P State] Changing state from Connecting state to P2P Client Connection Completed"); } } #endif @@ -1497,8 +1496,7 @@ QDF_STATUS hdd_roam_deregister_sta(hdd_adapter_t *pAdapter, uint8_t staId) qdf_status = ol_txrx_clear_peer(staId); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGE, - FL("ol_txrx_clear_peer() failed for staID %d. Status(%d) [0x%08X]"), + hdd_err("ol_txrx_clear_peer() failed for staID %d. Status(%d) [0x%08X]", staId, qdf_status, qdf_status); } return qdf_status; @@ -1579,11 +1577,11 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, bool sendDisconInd = true; if (dev == NULL) { - hddLog(LOGE, FL("net_dev is released return")); + hdd_err("net_dev is released return"); return QDF_STATUS_E_FAILURE; } /* notify apps that we can't pass traffic anymore */ - hddLog(LOG1, FL("Disabling queues")); + hdd_notice("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_CONTROL_PATH); @@ -1609,8 +1607,7 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, pHddStaCtx->conn_info.connState) || (eConnectionState_NotConnected == pHddStaCtx->conn_info.connState)) { - hddLog(LOG1, - FL("HDD has initiated a disconnect, no need to send disconnect indication to kernel")); + hdd_notice("HDD has initiated a disconnect, no need to send disconnect indication to kernel"); sendDisconInd = false; } @@ -1665,14 +1662,12 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, P2P_CLIENT_CONNECTED_STATE_1) { global_p2p_connection_status = P2P_CLIENT_DISCONNECTED_STATE; - hddLog(LOGE, - "[P2P State] 8 way Handshake completed and moved to disconnected state"); + hdd_err("[P2P State] 8 way Handshake completed and moved to disconnected state"); } else if (global_p2p_connection_status == P2P_CLIENT_COMPLETED_STATE) { global_p2p_connection_status = P2P_NOT_ACTIVE; - hddLog(LOGE, - "[P2P State] P2P Client is removed and moved to inactive state"); + hdd_err("[P2P State] P2P Client is removed and moved to inactive state"); } } #endif @@ -1700,11 +1695,10 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, if (0 == pHddStaCtx->conn_info.staId[i]) continue; sta_id = pHddStaCtx->conn_info.staId[i]; - hddLog(LOG1, FL("Deregister StaID %d"), sta_id); + hdd_info("Deregister StaID %d", sta_id); vstatus = hdd_roam_deregister_sta(pAdapter, sta_id); if (!QDF_IS_STATUS_SUCCESS(vstatus)) { - hddLog(LOGE, - FL("hdd_roamDeregisterSTA() failed to for staID %d. Status= %d [0x%x]"), + hdd_err("hdd_roamDeregisterSTA() failed to for staID %d. Status= %d [0x%x]", sta_id, status, status); status = QDF_STATUS_E_FAILURE; } @@ -1733,8 +1727,7 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, */ vstatus = hdd_roam_deregister_sta(pAdapter, sta_id); if (!QDF_IS_STATUS_SUCCESS(vstatus)) { - hddLog(LOGE, - FL("hdd_roam_deregister_sta() failed to for staID %d. Status= %d [0x%x]"), + hdd_err("hdd_roam_deregister_sta() failed to for staID %d. Status= %d [0x%x]", sta_id, status, status); status = QDF_STATUS_E_FAILURE; } @@ -1782,8 +1775,7 @@ void hdd_set_peer_authorized_event(uint32_t vdev_id) adapter = hdd_get_adapter_by_vdev(hdd_ctx, vdev_id); if (adapter == NULL) { - hddLog(LOGE, - "%s: Invalid vdev_id", __func__); + hdd_err("Invalid vdev_id"); } complete(&adapter->sta_authorized_event); } @@ -1812,7 +1804,7 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter, } if (sta_id >= WLAN_MAX_STA_COUNT) { - hddLog(LOGE, "Invalid sta id :%d", sta_id); + hdd_err("Invalid sta id :%d", sta_id); return QDF_STATUS_E_INVAL; } @@ -1822,13 +1814,13 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter, peer_mac_addr = ol_txrx_peer_get_peer_mac_addr(peer); if (peer_mac_addr == NULL) { - hddLog(LOGE, "peer mac addr is NULL"); + hdd_err("peer mac addr is NULL"); return QDF_STATUS_E_FAULT; } err = ol_txrx_peer_state_update(pdev, peer_mac_addr, sta_state); if (err != QDF_STATUS_SUCCESS) { - hddLog(LOGE, "peer state update failed"); + hdd_err("peer state update failed"); return QDF_STATUS_E_FAULT; } #ifdef WLAN_FEATURE_ROAM_OFFLOAD @@ -1846,7 +1838,7 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter, hdd_set_peer_authorized_event, pAdapter->sessionId); if (err != QDF_STATUS_SUCCESS) { - hddLog(LOGE, "Failed to set the peer state to authorized"); + hdd_err("Failed to set the peer state to authorized"); return QDF_STATUS_E_FAULT; } @@ -1861,8 +1853,7 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter, &pAdapter->sta_authorized_event, msecs_to_jiffies(HDD_PEER_AUTHORIZE_WAIT)); if (!rc) { - hddLog(LOG1, "%s: timeout waiting for sta_authorized_event", - __func__); + hdd_notice("timeout waiting for sta_authorized_event"); } vdev = ol_txrx_get_vdev_for_peer(peer); ol_txrx_vdev_unpause(vdev, @@ -1907,8 +1898,8 @@ QDF_STATUS hdd_roam_register_sta(hdd_adapter_t *pAdapter, staDesc.is_qos_enabled = 0; #ifdef FEATURE_WLAN_WAPI - hddLog(LOG1, FL("WAPI STA Registered: %d"), - pAdapter->wapi_info.fIsWapiSta); + hdd_notice("WAPI STA Registered: %d", + pAdapter->wapi_info.fIsWapiSta); if (pAdapter->wapi_info.fIsWapiSta) staDesc.is_wapi_supported = 1; else @@ -1926,9 +1917,8 @@ QDF_STATUS hdd_roam_register_sta(hdd_adapter_t *pAdapter, qdf_status = ol_txrx_register_peer(&staDesc); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGW, - "ol_txrx_register_peer() failed to register. Status=%d [0x%08X]", - qdf_status, qdf_status); + hdd_warn("ol_txrx_register_peer() failed to register. Status=%d [0x%08X]", + qdf_status, qdf_status); return qdf_status; } @@ -1949,8 +1939,7 @@ QDF_STATUS hdd_roam_register_sta(hdd_adapter_t *pAdapter, hdd_conn_set_authenticated(pAdapter, true); } else { - hddLog(LOG3, - "ULA auth StaId= %d. Changing TL state to CONNECTED at Join time", + hdd_info("ULA auth StaId= %d. Changing TL state to CONNECTED at Join time", pHddStaCtx->conn_info.staId[0]); qdf_status = hdd_change_peer_state(pAdapter, staDesc.sta_id, @@ -1995,7 +1984,7 @@ static void hdd_send_re_assoc_event(struct net_device *dev, tHalHandle hal_handle = WLAN_HDD_GET_HAL_CTX(pAdapter); if (!rspRsnIe) { - hddLog(LOGE, FL("Unable to allocate RSN IE")); + hdd_err("Unable to allocate RSN IE"); goto done; } @@ -2004,12 +1993,12 @@ static void hdd_send_re_assoc_event(struct net_device *dev, goto done; } if (pCsrRoamInfo == NULL) { - hddLog(LOGE, FL("Invalid CSR roam info")); + hdd_err("Invalid CSR roam info"); goto done; } if (pCsrRoamInfo->nAssocRspLength == 0) { - hddLog(LOGE, FL("Invalid assoc response length")); + hdd_err("Invalid assoc response length"); goto done; } @@ -2021,8 +2010,8 @@ static void hdd_send_re_assoc_event(struct net_device *dev, /* pFTAssocRsp needs to point to the IEs */ pFTAssocRsp += FT_ASSOC_RSP_IES_OFFSET; - hddLog(LOG1, FL("AssocRsp is now at %02x%02x"), - (unsigned int)pFTAssocRsp[0], (unsigned int)pFTAssocRsp[1]); + hdd_info("AssocRsp is now at %02x%02x", + (unsigned int)pFTAssocRsp[0], (unsigned int)pFTAssocRsp[1]); /* * Active session count is decremented upon disconnection, but during @@ -2058,7 +2047,7 @@ static void hdd_send_re_assoc_event(struct net_device *dev, #endif if (bss == NULL) - hddLog(LOGE, FL("Get BSS returned NULL")); + hdd_err("Get BSS returned NULL"); buf_ptr = buf_ssid_ie; *buf_ptr = SIR_MAC_SSID_EID; buf_ptr++; @@ -2146,9 +2135,8 @@ static int hdd_change_sta_state_authenticated(hdd_adapter_t *adapter, AUTO_PS_ENTRY_TIMER_DEFAULT_VALUE : AUTO_DEFERRED_PS_ENTRY_TIMER_DEFAULT_VALUE; - hddLog(LOG1, - "Changing TL state to AUTHENTICATED for StaId= %d", - hddstactx->conn_info.staId[0]); + hdd_info("Changing TL state to AUTHENTICATED for StaId= %d", + hddstactx->conn_info.staId[0]); /* Connections that do not need Upper layer authentication, * transition TL to 'Authenticated' state after the keys are set @@ -2195,7 +2183,7 @@ static QDF_STATUS hdd_roam_set_key_complete_handler(hdd_adapter_t *pAdapter, ENTER(); if (NULL == pRoamInfo) { - hddLog(LOG2, FL("pRoamInfo is NULL")); + hdd_info("pRoamInfo is NULL"); return QDF_STATUS_E_FAILURE; } /* @@ -2204,7 +2192,7 @@ static QDF_STATUS hdd_roam_set_key_complete_handler(hdd_adapter_t *pAdapter, * (those that do not require upper layer authentication) we can put TL * directly into 'authenticated' state. */ - hddLog(LOG2, "Set Key completion roamStatus =%d roamResult=%d " + hdd_info("Set Key completion roamStatus =%d roamResult=%d " MAC_ADDRESS_STR, roamStatus, roamResult, MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes)); @@ -2223,8 +2211,7 @@ static QDF_STATUS hdd_roam_set_key_complete_handler(hdd_adapter_t *pAdapter, &pRoamInfo->peerMac, &staId); if (QDF_STATUS_SUCCESS == qdf_status) { - hddLog(LOG2, - "WLAN TL STA Ptk Installed for STAID=%d", + hdd_info("WLAN TL STA Ptk Installed for STAID=%d", staId); pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE; @@ -2329,7 +2316,7 @@ void hdd_perform_roam_set_key_complete(hdd_adapter_t *pAdapter) pHddStaCtx->roam_info.roamStatus, eCSR_ROAM_RESULT_AUTHENTICATED); if (qdf_ret_status != QDF_STATUS_SUCCESS) - hddLog(LOGE, FL("Set Key complete failure")); + hdd_err("Set Key complete failure"); pHddStaCtx->roam_info.deferKeyComplete = false; } @@ -2379,13 +2366,13 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, pHddStaCtx->conn_info.connState)) && ((eCSR_ROAM_RESULT_ASSOCIATED == roamResult) || (eCSR_ROAM_ASSOCIATION_FAILURE == roamStatus))) { - hddLog(LOG1, FL("Disconnect from HDD in progress")); + hdd_info("Disconnect from HDD in progress"); hddDisconInProgress = true; } if (eCSR_ROAM_RESULT_ASSOCIATED == roamResult) { if (NULL == pRoamInfo) { - hddLog(LOGE, FL("pRoamInfo is NULL")); + hdd_err("pRoamInfo is NULL"); return QDF_STATUS_E_FAILURE; } if (!hddDisconInProgress) { @@ -2464,8 +2451,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, if ((WLAN_MAX_STA_COUNT + 3) > pRoamInfo->staId) pHddCtx->sta_to_adapter[pRoamInfo->staId] = pAdapter; else - hddLog(LOGE, "%s: Wrong Staid: %d", __func__, - pRoamInfo->staId); + hdd_err("Wrong Staid: %d", pRoamInfo->staId); pHddCtx->sta_to_adapter[pRoamInfo->staId] = pAdapter; @@ -2543,15 +2529,14 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, * pFTAssocRsp needs to point to the IEs */ pFTAssocRsp += FT_ASSOC_RSP_IES_OFFSET; - hddLog(LOG1, - FL("AssocRsp is now at %02x%02x"), - (unsigned int)pFTAssocRsp[0], - (unsigned int)pFTAssocRsp[1]); + hdd_info("AssocRsp is now at %02x%02x", + (unsigned int)pFTAssocRsp[0], + (unsigned int)pFTAssocRsp[1]); assocRsplen = pRoamInfo->nAssocRspLength - FT_ASSOC_RSP_IES_OFFSET; } else { - hddLog(LOGE, FL("AssocRsp is NULL")); + hdd_err("AssocRsp is NULL"); assocRsplen = 0; } @@ -2566,12 +2551,11 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, */ pFTAssocReq += FT_ASSOC_REQ_IES_OFFSET; - hddLog(LOG1, - FL("pFTAssocReq is now at %02x%02x"), - (unsigned int) - pFTAssocReq[0], - (unsigned int) - pFTAssocReq[1]); + hdd_info("pFTAssocReq is now at %02x%02x", + (unsigned int) + pFTAssocReq[0], + (unsigned int) + pFTAssocReq[1]); assocReqlen = pRoamInfo->nAssocReqLength - FT_ASSOC_REQ_IES_OFFSET; @@ -2584,7 +2568,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, pRoamInfo->nAssocReqLength; } } else { - hddLog(LOGE, FL("AssocReq is NULL")); + hdd_err("AssocReq is NULL"); assocReqlen = 0; } @@ -2607,18 +2591,17 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, cds_decr_session_set_pcl (pAdapter->device_mode, pAdapter->sessionId); - hddLog(LOG1, - FL("ft_carrier_on is %d, sending roamed indication"), - ft_carrier_on); + hdd_info("ft_carrier_on is %d, sending roamed indication", + ft_carrier_on); chan = ieee80211_get_channel (pAdapter->wdev.wiphy, (int)pRoamInfo->pBssDesc-> channelId); - hddLog(LOG1, - "assocReqlen %d assocRsplen %d", - assocReqlen, - assocRsplen); + hdd_info( + "assocReqlen %d assocRsplen %d", + assocReqlen, + assocRsplen); hdd_notice( "Reassoc Req IE dump"); @@ -2672,9 +2655,8 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, deferKeyComplete = true; } } else if (!hddDisconInProgress) { - hddLog(LOG1, - FL("ft_carrier_on is %d, sending connect indication"), - ft_carrier_on); + hdd_info("ft_carrier_on is %d, sending connect indication", + ft_carrier_on); hdd_connect_result(dev, pRoamInfo-> bssid.bytes, @@ -2711,13 +2693,12 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, reqRsnIe, reqRsnLength); else { - hddLog(LOG1, - FL("sending connect indication to nl80211:for bssid " - MAC_ADDRESS_STR - " result:%d and Status:%d"), - MAC_ADDR_ARRAY - (pRoamInfo->bssid.bytes), - roamResult, roamStatus); + hdd_info("sending connect indication to nl80211:for bssid " + MAC_ADDRESS_STR + " result:%d and Status:%d", + MAC_ADDR_ARRAY + (pRoamInfo->bssid.bytes), + roamResult, roamStatus); /* inform connect result to nl80211 */ hdd_connect_result(dev, @@ -2752,7 +2733,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, * hdd_roam_register_sta will flush any cached * data frames immediately. */ - hddLog(LOG1, FL("Enabling queues")); + hdd_info("Enabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_WAKE_ALL_NETIF_QUEUE, WLAN_CONTROL_PATH); @@ -2796,9 +2777,8 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, ); hdd_conn_set_authenticated(pAdapter, false); } else { - hddLog(LOG2, - FL("staId: %d Changing TL state to AUTHENTICATED"), - pHddStaCtx->conn_info.staId[0]); + hdd_info("staId: %d Changing TL state to AUTHENTICATED", + pHddStaCtx->conn_info.staId[0]); qdf_status = hdd_change_peer_state(pAdapter, pHddStaCtx->conn_info.staId[0], @@ -2824,9 +2804,9 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, /* Start the tx queues */ #ifdef WLAN_FEATURE_ROAM_OFFLOAD if (pRoamInfo->roamSynchInProgress) - hddLog(LOG3, "LFR3:netif_tx_wake_all_queues"); + hdd_info("LFR3:netif_tx_wake_all_queues"); #endif - hddLog(LOG1, FL("Enabling queues")); + hdd_info("Enabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_WAKE_ALL_NETIF_QUEUE, WLAN_CONTROL_PATH); @@ -2837,8 +2817,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, #endif if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGE, - "STA register with TL failed. status(=%d) [%08X]", + hdd_err("STA register with TL failed. status(=%d) [%08X]", qdf_status, qdf_status); } #ifdef WLAN_FEATURE_11W @@ -2886,21 +2865,19 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, if (eCSR_ROAM_ASSOCIATION_FAILURE == roamStatus && !hddDisconInProgress) { if (pRoamInfo) { - hddLog(LOGE, - FL("send connect failure to nl80211: for bssid " - MAC_ADDRESS_STR - " result:%d and Status:%d reasoncode %d"), - MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes), - roamResult, roamStatus, - pRoamInfo->reasonCode); + hdd_err("send connect failure to nl80211: for bssid " + MAC_ADDRESS_STR + " result:%d and Status:%d reasoncode %d", + MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes), + roamResult, roamStatus, + pRoamInfo->reasonCode); pHddStaCtx->conn_info.assoc_status_code = pRoamInfo->statusCode; } else - hddLog(LOGE, - FL("connect failed: for bssid " + hdd_err("connect failed: for bssid " MAC_ADDRESS_STR - " result:%d and Status:%d "), + " result:%d and Status:%d ", MAC_ADDR_ARRAY(pWextState->req_bssId.bytes), roamResult, roamStatus); @@ -2990,7 +2967,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, } hdd_wmm_init(pAdapter); - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_CONTROL_PATH); @@ -3030,8 +3007,9 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, eRoamCmdStatus roamStatus, eCsrRoamResult roamResult) { - hddLog(LOG1, "%s: id %d, status %d, result %d", - pAdapter->dev->name, roamId, roamStatus, roamResult); + hdd_info("%s: id %d, status %d, result %d", + pAdapter->dev->name, roamId, + roamStatus, roamResult); switch (roamResult) { /* both IBSS Started and IBSS Join should come in here. */ @@ -3078,21 +3056,20 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, unsigned int freq; #endif /* we created the IBSS, notify supplicant */ - hddLog(LOG1, - FL("%s: created ibss " MAC_ADDRESS_STR), - pAdapter->dev->name, - MAC_ADDR_ARRAY(pRoamInfo->pBssDesc->bssId)); + hdd_info("%s: created ibss " MAC_ADDRESS_STR, + pAdapter->dev->name, + MAC_ADDR_ARRAY( + pRoamInfo->pBssDesc->bssId)); /* we must first give cfg80211 the BSS information */ bss = wlan_hdd_cfg80211_update_bss_db(pAdapter, pRoamInfo); if (NULL == bss) { - hddLog(LOGE, - FL("%s: unable to create IBSS entry"), - pAdapter->dev->name); + hdd_err("%s: unable to create IBSS entry", + pAdapter->dev->name); return; } - hddLog(LOG1, FL("Enabling queues")); + hdd_info("Enabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_START_ALL_NETIF_QUEUE_N_CARRIER, WLAN_CONTROL_PATH); @@ -3114,9 +3091,9 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, bss->bssid, chan, GFP_KERNEL); else - hddLog(LOGE, FL("%s: chanId: %d, can't find channel"), - pAdapter->dev->name, - (int)pRoamInfo->pBssDesc->channelId); + hdd_err("%s: chanId: %d, can't find channel", + pAdapter->dev->name, + (int)pRoamInfo->pBssDesc->channelId); #else cfg80211_ibss_joined(pAdapter->dev, bss->bssid, GFP_KERNEL); @@ -3137,14 +3114,13 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, case eCSR_ROAM_RESULT_IBSS_START_FAILED: { - hddLog(LOGE, - FL("%s: unable to create IBSS"), pAdapter->dev->name); + hdd_err("%s: unable to create IBSS", pAdapter->dev->name); break; } default: - hddLog(LOGE, FL("%s: unexpected result %d"), - pAdapter->dev->name, (int)roamResult); + hdd_err("%s: unexpected result %d", + pAdapter->dev->name, (int)roamResult); break; } @@ -3169,8 +3145,8 @@ bool hdd_save_peer(hdd_station_ctx_t *sta_ctx, uint8_t sta_id, for (idx = 0; idx < SIR_MAX_NUM_STA_IN_IBSS; idx++) { if (0 == sta_ctx->conn_info.staId[idx]) { - hddLog(LOG1, FL("adding peer: %pM, sta_id: %d, at idx: %d"), - peer_mac_addr, sta_id, idx); + hdd_info("adding peer: %pM, sta_id: %d, at idx: %d", + peer_mac_addr, sta_id, idx); sta_ctx->conn_info.staId[idx] = sta_id; qdf_copy_macaddr( &sta_ctx->conn_info.peerMacAddress[idx], @@ -3250,7 +3226,7 @@ static bool roam_remove_ibss_station(hdd_adapter_t *pAdapter, uint8_t staId) /* Last peer departed, set the IBSS state appropriately */ pHddStaCtx->conn_info.connState = eConnectionState_IbssDisconnected; - hddLog(LOGE, "Last IBSS Peer Departed!!!"); + hdd_err("Last IBSS Peer Departed!!!"); } /* Find next active staId, to have a valid sta trigger for TL. */ if (fSuccess == true) { @@ -3299,8 +3275,7 @@ static QDF_STATUS roam_ibss_connect_handler(hdd_adapter_t *pAdapter, /* add bss_id to cfg80211 data base */ bss = wlan_hdd_cfg80211_update_bss_db(pAdapter, pRoamInfo); if (NULL == bss) { - hddLog(LOGE, - FL("%s: unable to create IBSS entry"), + hdd_err("%s: unable to create IBSS entry", pAdapter->dev->name); return QDF_STATUS_E_FAILURE; } @@ -3342,8 +3317,8 @@ hdd_roam_mic_error_indication_handler(hdd_adapter_t *pAdapter, memcpy(msg.src_addr.sa_data, pRoamInfo->u.pMICFailureInfo->taMacAddr, sizeof(pRoamInfo->u.pMICFailureInfo->taMacAddr)); - hddLog(LOG1, "MIC MAC " MAC_ADDRESS_STR, - MAC_ADDR_ARRAY(msg.src_addr.sa_data)); + hdd_info("MIC MAC " MAC_ADDRESS_STR, + MAC_ADDR_ARRAY(msg.src_addr.sa_data)); if (pRoamInfo->u.pMICFailureInfo->multicast == eSIR_TRUE) msg.flags = IW_MICFAILURE_GROUP; @@ -3412,7 +3387,7 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter), pRoamInfo->staId, &pRoamInfo->peerMac)) { - hddLog(LOGW, "Max reached: Can't register new IBSS peer"); + hdd_warn("Max reached: Can't register new IBSS peer"); break; } @@ -3425,8 +3400,7 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, &pRoamInfo->peerMac, pRoamInfo->pBssDesc); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGE, - "Cannot register STA with TL for IBSS. Failed with qdf_status = %d [%08X]", + hdd_err("Cannot register STA with TL for IBSS. Failed with qdf_status = %d [%08X]", qdf_status, qdf_status); } pHddStaCtx->ibss_sta_generation++; @@ -3451,8 +3425,8 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, qdf_copy_macaddr(&pHddStaCtx->ibss_enc_key.peerMac, &pRoamInfo->peerMac); - hddLog(LOG2, "New peer joined set PTK encType=%d", - pHddStaCtx->ibss_enc_key.encType); + hdd_info("New peer joined set PTK encType=%d", + pHddStaCtx->ibss_enc_key.encType); qdf_status = sme_roam_set_key(WLAN_HDD_GET_HAL_CTX @@ -3462,13 +3436,12 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, &roamId); if (QDF_STATUS_SUCCESS != qdf_status) { - hddLog(LOGE, - FL("sme_roam_set_key failed, status=%d"), - qdf_status); + hdd_err("sme_roam_set_key failed, status=%d", + qdf_status); return QDF_STATUS_E_FAILURE; } } - hddLog(LOG1, FL("Enabling queues")); + hdd_info("Enabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_START_ALL_NETIF_QUEUE_N_CARRIER, WLAN_CONTROL_PATH); @@ -3488,8 +3461,7 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); if (!roam_remove_ibss_station(pAdapter, pRoamInfo->staId)) - hddLog(LOGW, - "IBSS peer departed by cannot find peer in our registration table with TL"); + hdd_warn("IBSS peer departed by cannot find peer in our registration table with TL"); hdd_err("IBSS Peer Departed from SME " "with peerMac " MAC_ADDRESS_STR " BSSID: " @@ -3510,10 +3482,9 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, } case eCSR_ROAM_RESULT_IBSS_INACTIVE: { - hddLog(LOG3, - "Received eCSR_ROAM_RESULT_IBSS_INACTIVE from SME"); + hdd_info("Received eCSR_ROAM_RESULT_IBSS_INACTIVE from SME"); /* Stop only when we are inactive */ - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_CONTROL_PATH); @@ -3574,7 +3545,7 @@ QDF_STATUS hdd_roam_register_tdlssta(hdd_adapter_t *pAdapter, /* Register the Station with TL... */ qdf_status = ol_txrx_register_peer(&staDesc); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGE, FL("ol_txrx_register_peer() failed to register. Status=%d [0x%08X]"), + hdd_err("ol_txrx_register_peer() failed to register. Status=%d [0x%08X]", qdf_status, qdf_status); return qdf_status; } @@ -3595,8 +3566,8 @@ static QDF_STATUS hdd_roam_deregister_tdlssta(hdd_adapter_t *pAdapter, QDF_STATUS qdf_status; qdf_status = ol_txrx_clear_peer(staId); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGW, FL("ol_txrx_clear_peer() failed for staID %d. Status=%d [0x%08X]"), - staId, qdf_status, qdf_status); + hdd_warn("ol_txrx_clear_peer() failed for staID %d. Status=%d [0x%08X]", + staId, qdf_status, qdf_status); } return qdf_status; } @@ -3688,8 +3659,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, hddTdlsPeer_t *curr_peer; uint32_t reason; - hddLog(LOG2, - ("hdd_tdlsStatusUpdate: %s staIdx %d " MAC_ADDRESS_STR), + hdd_info("hdd_tdlsStatusUpdate: %s staIdx %d " MAC_ADDRESS_STR, roamResult == eCSR_ROAM_RESULT_ADD_TDLS_PEER ? "ADD_TDLS_PEER" : roamResult == @@ -3712,9 +3682,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes)); if (!pHddTdlsCtx) { - hddLog(LOG1, - FL("TDLS ctx is null, ignore roamResult (%d)"), - roamResult); + hdd_info("TDLS ctx is null, ignore roamResult (%d)", + roamResult); return status; } @@ -3722,7 +3691,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, case eCSR_ROAM_RESULT_ADD_TDLS_PEER: { if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hddLog(LOGE, FL("Add Sta failed. status code(=%d)"), + hdd_err("Add Sta failed. status code(=%d)", pRoamInfo->statusCode); } else { /* @@ -3741,10 +3710,9 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, pHddCtx->tdlsConnInfo[staIdx]. staId = pRoamInfo->staId; - hddLog(LOGW, - ("TDLS: STA IDX at %d is %d " + hdd_warn("TDLS: STA IDX at %d is %d " "of mac " - MAC_ADDRESS_STR), + MAC_ADDRESS_STR, staIdx, pHddCtx-> tdlsConnInfo[staIdx]. @@ -3769,8 +3737,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, peerMac.bytes, pRoamInfo-> staId)) { - hddLog(LOGE, - "wlan_hdd_tdls_set_sta_id() failed"); + hdd_err("wlan_hdd_tdls_set_sta_id() failed"); return QDF_STATUS_E_FAILURE; } @@ -3789,8 +3756,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, ucastSig); } else { status = QDF_STATUS_E_FAILURE; - hddLog(LOGE, - FL("no available slot in conn_info. staId %d cannot be stored"), + hdd_err("no available slot in conn_info. staId %d cannot be stored", pRoamInfo->staId); } pAdapter->tdlsAddStaStatus = status; @@ -3801,8 +3767,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, case eCSR_ROAM_RESULT_UPDATE_TDLS_PEER: { if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hddLog(LOGE, - FL("Add Sta failed. status code(=%d)"), + hdd_err("Add Sta failed. status code(=%d)", pRoamInfo->statusCode); } /* store the ucast signature which will be used later when @@ -3815,8 +3780,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, case eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP: { if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hddLog(LOGE, - FL("Link Establish Request failed. status(=%d)"), + hdd_err("Link Establish Request failed. status(=%d)", pRoamInfo->statusCode); } complete(&pAdapter->tdls_link_establish_req_comp); @@ -3830,9 +3794,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, pRoamInfo->sessionId) && pRoamInfo->staId == pHddCtx->tdlsConnInfo[staIdx].staId) { - hddLog(LOGW, - ("HDD: del STA IDX = %x"), - pRoamInfo->staId); + hdd_warn("HDD: del STA IDX = %x", + pRoamInfo->staId); curr_peer = wlan_hdd_tdls_find_peer(pAdapter, @@ -3876,8 +3839,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, break; case eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND: { - hddLog(LOGE, - FL("Sending teardown to supplicant with reason code %u"), + hdd_err("Sending teardown to supplicant with reason code %u", pRoamInfo->reasonCode); curr_peer = @@ -3898,16 +3860,15 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, if ((pHddCtx->tdlsConnInfo[staIdx].sessionId == pRoamInfo->sessionId) && pHddCtx->tdlsConnInfo[staIdx].staId) { - hddLog(LOGW, - ("hdd_tdlsStatusUpdate: staIdx %d " - MAC_ADDRESS_STR), - pHddCtx->tdlsConnInfo[staIdx]. - staId, - MAC_ADDR_ARRAY(pHddCtx-> - tdlsConnInfo - [staIdx]. - peerMac. - bytes)); + hdd_warn("hdd_tdlsStatusUpdate: staIdx %d " + MAC_ADDRESS_STR, + pHddCtx->tdlsConnInfo[staIdx]. + staId, + MAC_ADDR_ARRAY(pHddCtx-> + tdlsConnInfo + [staIdx]. + peerMac. + bytes)); wlan_hdd_tdls_reset_peer(pAdapter, pHddCtx-> tdlsConnInfo @@ -3933,12 +3894,11 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, smeTdlsPeerStateParams.peerState = eSME_TDLS_PEER_STATE_TEARDOWN; - hddLog(LOG1, - FL("calling sme_update_tdls_peer_state for staIdx %d " - MAC_ADDRESS_STR), - pHddCtx->tdlsConnInfo[staIdx]. - staId, - MAC_ADDR_ARRAY(pHddCtx-> + hdd_info("calling sme_update_tdls_peer_state for staIdx %d " + MAC_ADDRESS_STR, + pHddCtx->tdlsConnInfo[staIdx]. + staId, + MAC_ADDR_ARRAY(pHddCtx-> tdlsConnInfo [staIdx]. peerMac. @@ -3948,13 +3908,12 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, pHddCtx->hHal, &smeTdlsPeerStateParams); if (QDF_STATUS_SUCCESS != status) { - hddLog(LOGE, - FL("sme_update_tdls_peer_state failed for " - MAC_ADDRESS_STR), - MAC_ADDR_ARRAY - (pHddCtx-> - tdlsConnInfo[staIdx]. - peerMac.bytes)); + hdd_err("sme_update_tdls_peer_state failed for " + MAC_ADDRESS_STR, + MAC_ADDR_ARRAY + (pHddCtx-> + tdlsConnInfo[staIdx]. + peerMac.bytes)); } wlan_hdd_tdls_decrement_peer_count (pAdapter); @@ -3992,13 +3951,12 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, pRoamInfo->peerMac.bytes, true); if (!curr_peer) { - hddLog(LOGE, FL("curr_peer is null")); + hdd_err("curr_peer is null"); status = QDF_STATUS_E_FAILURE; } else { if (eTDLS_LINK_CONNECTED == curr_peer->link_status) { - hddLog(LOGE, - FL("TDLS link status is connected, ignore SHOULD_DISCOVER")); + hdd_err("TDLS link status is connected, ignore SHOULD_DISCOVER"); } else { /* * If external control is enabled then initiate @@ -4009,15 +3967,11 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, fTDLSExternalControl && (false == curr_peer->isForcedPeer)) { - hddLog(LOG2, - FL - ("TDLS ExternalControl enabled but curr_peer is not forced, ignore SHOULD_DISCOVER")); + hdd_info("TDLS ExternalControl enabled but curr_peer is not forced, ignore SHOULD_DISCOVER"); status = QDF_STATUS_SUCCESS; break; } else { - hddLog(LOG2, - FL - ("initiate TDLS setup on SHOULD_DISCOVER, fTDLSExternalControl: %d, curr_peer->isForcedPeer: %d, reason: %d"), + hdd_info("initiate TDLS setup on SHOULD_DISCOVER, fTDLSExternalControl: %d, curr_peer->isForcedPeer: %d, reason: %d", pHddCtx->config-> fTDLSExternalControl, curr_peer->isForcedPeer, @@ -4037,20 +3991,18 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac.bytes, true); if (!curr_peer) { - hddLog(LOGE, FL("curr_peer is null")); + hdd_err("curr_peer is null"); status = QDF_STATUS_E_FAILURE; } else { if (eTDLS_LINK_CONNECTED == curr_peer->link_status) { - hddLog(LOGE, - FL - ("Received SHOULD_TEARDOWN for peer " - MAC_ADDRESS_STR - " staId: %d, reason: %d"), - MAC_ADDR_ARRAY(pRoamInfo-> - peerMac.bytes), - pRoamInfo->staId, - pRoamInfo->reasonCode); + hdd_err("Received SHOULD_TEARDOWN for peer " + MAC_ADDRESS_STR + " staId: %d, reason: %d", + MAC_ADDR_ARRAY(pRoamInfo-> + peerMac.bytes), + pRoamInfo->staId, + pRoamInfo->reasonCode); if (pRoamInfo->reasonCode == eWNI_TDLS_TEARDOWN_REASON_RSSI || @@ -4073,10 +4025,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, eTDLS_TEARDOWN_BSS_DISCONNECT, curr_peer->peerMac); } else { - hddLog(LOGE, - FL - ("TDLS link is not connected, ignore SHOULD_TEARDOWN, reason: %d"), - pRoamInfo->reasonCode); + hdd_err("TDLS link is not connected, ignore SHOULD_TEARDOWN, reason: %d", + pRoamInfo->reasonCode); } status = QDF_STATUS_SUCCESS; } @@ -4089,19 +4039,17 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac.bytes, true); if (!curr_peer) { - hddLog(LOGE, FL("curr_peer is null")); + hdd_err("curr_peer is null"); status = QDF_STATUS_E_FAILURE; } else { if (eTDLS_LINK_CONNECTED == curr_peer->link_status) { - hddLog(LOGE, - FL - ("Received SHOULD_PEER_DISCONNECTED for peer " - MAC_ADDRESS_STR - " staId: %d, reason: %d"), - MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes), - pRoamInfo->staId, - pRoamInfo->reasonCode); + hdd_err("Received SHOULD_PEER_DISCONNECTED for peer " + MAC_ADDRESS_STR + " staId: %d, reason: %d", + MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes), + pRoamInfo->staId, + pRoamInfo->reasonCode); if (pRoamInfo->reasonCode == eWNI_TDLS_TEARDOWN_REASON_RSSI || @@ -4124,10 +4072,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, eTDLS_TEARDOWN_BSS_DISCONNECT, curr_peer->peerMac); } else { - hddLog(LOGE, - FL - ("TDLS link is not connected, ignore SHOULD_PEER_DISCONNECTED, reason: %d"), - pRoamInfo->reasonCode); + hdd_err("TDLS link is not connected, ignore SHOULD_PEER_DISCONNECTED, reason: %d", + pRoamInfo->reasonCode); } status = QDF_STATUS_SUCCESS; } @@ -4169,32 +4115,32 @@ hdd_indicate_unprot_mgmt_frame(hdd_adapter_t *pAdapter, uint32_t nFrameLength, uint8_t type = 0; uint8_t subType = 0; - hddLog(LOG1, FL("Frame Type = %d Frame Length = %d"), - frameType, nFrameLength); + hdd_info("Frame Type = %d Frame Length = %d", + frameType, nFrameLength); /* Sanity Checks */ if (NULL == pAdapter) { - hddLog(LOGE, FL("pAdapter is NULL")); + hdd_err("pAdapter is NULL"); return; } if (NULL == pAdapter->dev) { - hddLog(LOGE, FL("pAdapter->dev is NULL")); + hdd_err("pAdapter->dev is NULL"); return; } if (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) { - hddLog(LOGE, FL("pAdapter has invalid magic")); + hdd_err("pAdapter has invalid magic"); return; } if (!nFrameLength) { - hddLog(LOGE, FL("Frame Length is Invalid ZERO")); + hdd_err("Frame Length is Invalid ZERO"); return; } if (NULL == pbFrames) { - hddLog(LOGE, FL("pbFrames is NULL")); + hdd_err("pbFrames is NULL"); return; } @@ -4222,8 +4168,8 @@ hdd_indicate_unprot_mgmt_frame(hdd_adapter_t *pAdapter, uint32_t nFrameLength, #endif pAdapter->hdd_stats.hddPmfStats.numUnprotDeauthRx++; } else { - hddLog(LOGE, FL("Frame type %d and subtype %d are not valid"), - type, subType); + hdd_err("Frame type %d and subtype %d are not valid", + type, subType); return; } } @@ -4257,8 +4203,8 @@ hdd_indicate_tsm_ie(hdd_adapter_t *pAdapter, uint8_t tid, memset(&wrqu, '\0', sizeof(wrqu)); memset(buf, '\0', sizeof(buf)); - hddLog(LOG1, "TSM Ind tid(%d) state(%d) MeasInt(%d)", - tid, state, measInterval); + hdd_info("TSM Ind tid(%d) state(%d) MeasInt(%d)", + tid, state, measInterval); nBytes = snprintf(buf, IW_CUSTOM_MAX, "TSMIE=%d:%d:%d", tid, state, @@ -4296,10 +4242,9 @@ hdd_indicate_cckm_pre_auth(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo) memset(buf, '\0', sizeof(buf)); /* Timestamp0 is lower 32 bits and Timestamp1 is upper 32 bits */ - hddLog(LOG1, - "CCXPREAUTHNOTIFY=" MAC_ADDRESS_STR " %d:%d", - MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes), - pRoamInfo->timestamp[0], pRoamInfo->timestamp[1]); + hdd_info("CCXPREAUTHNOTIFY=" MAC_ADDRESS_STR " %d:%d", + MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes), + pRoamInfo->timestamp[0], pRoamInfo->timestamp[1]); nBytes = snprintf(pos, freeBytes, "CCXPREAUTHNOTIFY="); pos += nBytes; @@ -4342,7 +4287,7 @@ hdd_indicate_ese_adj_ap_rep_ind(hdd_adapter_t *pAdapter, memset(&wrqu, '\0', sizeof(wrqu)); memset(buf, '\0', sizeof(buf)); - hddLog(LOG1, "CCXADJAPREP=%u", pRoamInfo->tsmRoamDelay); + hdd_info("CCXADJAPREP=%u", pRoamInfo->tsmRoamDelay); nBytes = snprintf(buf, IW_CUSTOM_MAX, "CCXADJAPREP=%u", @@ -4380,8 +4325,8 @@ hdd_indicate_ese_bcn_report_no_results(const hdd_adapter_t *pAdapter, memset(&wrqu, '\0', sizeof(wrqu)); memset(buf, '\0', sizeof(buf)); - hddLog(LOG1, FL("CCXBCNREP=%d %d %d"), measurementToken, - flag, numBss); + hdd_info("CCXBCNREP=%d %d %d", measurementToken, + flag, numBss); nBytes = snprintf(pos, freeBytes, "CCXBCNREP=%d %d %d", measurementToken, @@ -4439,8 +4384,7 @@ hdd_indicate_ese_bcn_report_ind(const hdd_adapter_t *pAdapter, if ((pRoamInfo->pEseBcnReportRsp->flag >> 1) && (!pRoamInfo->pEseBcnReportRsp->numBss)) { - hddLog(LOG1, - "Measurement Done but no scan results"); + hdd_info("Measurement Done but no scan results"); /* If the measurement is none and no scan results found, indicate the supplicant about measurement done */ hdd_indicate_ese_bcn_report_no_results( @@ -4470,18 +4414,17 @@ hdd_indicate_ese_bcn_report_ind(const hdd_adapter_t *pAdapter, } tot_bcn_ieLen += len; sendBss++; - hddLog(LOG1, "i(%d) sizeof bcnReportFields(%d) IeLength(%d) Length of Ie(%d) totLen(%d)", - i, bcnRepFieldSize, 1, - pRoamInfo->pEseBcnReportRsp-> - bcnRepBssInfo[i].ieLen, tot_bcn_ieLen); + hdd_info("i(%d) sizeof bcnReportFields(%d) IeLength(%d) Length of Ie(%d) totLen(%d)", + i, bcnRepFieldSize, 1, + pRoamInfo->pEseBcnReportRsp-> + bcnRepBssInfo[i].ieLen, tot_bcn_ieLen); } - hddLog(LOG1, "Sending %d BSS Info", - sendBss); - hddLog(LOG1, "CCXBCNREP=%d %d %d %d", - pRoamInfo->pEseBcnReportRsp->measurementToken, - pRoamInfo->pEseBcnReportRsp->flag, sendBss, - tot_bcn_ieLen); + hdd_info("Sending %d BSS Info", sendBss); + hdd_info("CCXBCNREP=%d %d %d %d", + pRoamInfo->pEseBcnReportRsp->measurementToken, + pRoamInfo->pEseBcnReportRsp->flag, sendBss, + tot_bcn_ieLen); nBytes = snprintf(pos, freeBytes, "CCXBCNREP=%d %d %d ", pRoamInfo->pEseBcnReportRsp-> @@ -4498,8 +4441,7 @@ hdd_indicate_ese_bcn_report_ind(const hdd_adapter_t *pAdapter, freeBytes -= sizeof(tot_bcn_ieLen); for (i = 0; i < sendBss; i++) { - hddLog(LOG1, - "ChanNum(%d) Spare(%d) MeasDuration(%d)" + hdd_info("ChanNum(%d) Spare(%d) MeasDuration(%d)" " PhyType(%d) RecvSigPower(%d) ParentTSF(%u)" " TargetTSF[0](%u) TargetTSF[1](%u) BeaconInterval(%u)" " CapabilityInfo(%d) BSSID(%02X:%02X:%02X:%02X:%02X:%02X)", @@ -4657,13 +4599,12 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, struct hdd_chan_change_params chan_change; struct cfg80211_bss *bss_status; - hddLog(LOG2, - "CSR Callback: status= %d result= %d roamID=%d", - roamStatus, roamResult, roamId); + hdd_info("CSR Callback: status= %d result= %d roamID=%d", + roamStatus, roamResult, roamId); /* Sanity check */ if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { - hddLog(LOGP, "invalid adapter or adapter has invalid magic"); + hdd_alert("invalid adapter or adapter has invalid magic"); return QDF_STATUS_E_FAILURE; } @@ -4687,10 +4628,8 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, * interface down. */ case eCSR_ROAM_FT_REASSOC_FAILED: - hddLog(LOGE, - FL - ("Reassoc Failed with roamStatus: %d roamResult: %d SessionID: %d"), - roamStatus, roamResult, pAdapter->sessionId); + hdd_err("Reassoc Failed with roamStatus: %d roamResult: %d SessionID: %d", + roamStatus, roamResult, pAdapter->sessionId); qdf_ret_status = hdd_dis_connect_handler(pAdapter, pRoamInfo, roamId, roamStatus, roamResult); @@ -4705,9 +4644,8 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, } pHddStaCtx->ft_carrier_on = false; pHddStaCtx->hdd_ReassocScenario = false; - hddLog(LOG1, - FL("hdd_ReassocScenario set to: %d, ReAssoc Failed, session: %d"), - pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); + hdd_info("hdd_ReassocScenario set to: %d, ReAssoc Failed, session: %d", + pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); break; case eCSR_ROAM_FT_START: @@ -4720,7 +4658,7 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, * doing disassoc at this time. This saves 30-60 msec * after reassoc. */ - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE, WLAN_CONTROL_PATH); @@ -4730,13 +4668,12 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, qdf_ret_status = QDF_STATUS_E_FAILURE; pHddStaCtx->ft_carrier_on = true; pHddStaCtx->hdd_ReassocScenario = true; - hddLog(LOG1, - FL("hdd_ReassocScenario set to: %d, due to eCSR_ROAM_FT_START, session: %d"), - pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); + hdd_info("hdd_ReassocScenario set to: %d, due to eCSR_ROAM_FT_START, session: %d", + pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); break; case eCSR_ROAM_SHOULD_ROAM: /* notify apps that we can't pass traffic anymore */ - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE, WLAN_CONTROL_PATH); @@ -4748,8 +4685,8 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, break; case eCSR_ROAM_LOSTLINK: if (roamResult == eCSR_ROAM_RESULT_LOSTLINK) { - hddLog(LOG2, "Roaming started due to connection lost"); - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Roaming started due to connection lost"); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_CONTROL_PATH); @@ -4757,7 +4694,7 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, } case eCSR_ROAM_DISASSOCIATED: { - hddLog(LOG1, "****eCSR_ROAM_DISASSOCIATED****"); + hdd_info("****eCSR_ROAM_DISASSOCIATED****"); qdf_ret_status = hdd_dis_connect_handler(pAdapter, pRoamInfo, roamId, roamStatus, roamResult); @@ -4775,13 +4712,10 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, false; } - hddLog(LOG1, - "offload: disassociation happening, restoring configuredMcastBcastFilter"); - hddLog(LOG1, - "McastBcastFilter = %d", - pHddCtx->configuredMcastBcastFilter); - hddLog(LOG1, - "offload: already called mcastbcast filter"); + hdd_info("offload: disassociation happening, restoring configuredMcastBcastFilter"); + hdd_info("McastBcastFilter = %d", + pHddCtx->configuredMcastBcastFilter); + hdd_info("offload: already called mcastbcast filter"); (WLAN_HDD_GET_CTX(pAdapter))-> hdd_mcastbcast_filter_set = false; } @@ -4792,13 +4726,13 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, } break; case eCSR_ROAM_IBSS_LEAVE: - hddLog(LOG1, "****eCSR_ROAM_IBSS_LEAVE****"); + hdd_info("****eCSR_ROAM_IBSS_LEAVE****"); qdf_ret_status = hdd_dis_connect_handler(pAdapter, pRoamInfo, roamId, roamStatus, roamResult); break; case eCSR_ROAM_ASSOCIATION_COMPLETION: - hddLog(LOG1, "****eCSR_ROAM_ASSOCIATION_COMPLETION****"); + hdd_info("****eCSR_ROAM_ASSOCIATION_COMPLETION****"); /* * To Do - address probable memory leak with WEP encryption upon * successful association. @@ -4857,8 +4791,7 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, roamResult); if (eCSR_ROAM_RESULT_AUTHENTICATED == roamResult) { pHddStaCtx->hdd_ReassocScenario = false; - hddLog(LOG1, - FL("hdd_ReassocScenario set to: %d, set key complete, session: %d"), + hdd_info("hdd_ReassocScenario set to: %d, set key complete, session: %d", pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); } @@ -5101,7 +5034,7 @@ eCsrAuthType hdd_translate_wpa_to_csr_auth_type(uint8_t auth_suite[4]) { auth_type = eCSR_AUTH_TYPE_UNKNOWN; } - hddLog(LOG1, FL("auth_type: %d"), auth_type); + hdd_info("auth_type: %d", auth_type); return auth_type; } @@ -5130,7 +5063,7 @@ hdd_translate_rsn_to_csr_encryption_type(uint8_t cipher_suite[4]) else cipher_type = eCSR_ENCRYPT_TYPE_FAILED; - hddLog(LOG1, FL("cipher_type: %d"), cipher_type); + hdd_info("cipher_type: %d", cipher_type); return cipher_type; } @@ -5159,7 +5092,7 @@ hdd_translate_wpa_to_csr_encryption_type(uint8_t cipher_suite[4]) else cipher_type = eCSR_ENCRYPT_TYPE_FAILED; - hddLog(LOG1, FL("cipher_type: %d"), cipher_type); + hdd_info("cipher_type: %d", cipher_type); return cipher_type; } @@ -5205,8 +5138,8 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, /* Validity checks */ if ((gen_ie_len < DOT11F_IE_RSN_MIN_LEN) || (gen_ie_len > DOT11F_IE_RSN_MAX_LEN)) { - hddLog(LOGE, FL("Invalid DOT11F RSN IE length :%d"), - gen_ie_len); + hdd_err("Invalid DOT11F RSN IE length :%d", + gen_ie_len); return -EINVAL; } /* Skip past the EID byte and length byte */ @@ -5216,10 +5149,10 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, dot11f_unpack_ie_rsn((tpAniSirGlobal) halHandle, pRsnIe, RSNIeLen, &dot11RSNIE); /* Copy out the encryption and authentication types */ - hddLog(LOG1, FL("pairwise cipher suite count: %d"), - dot11RSNIE.pwise_cipher_suite_count); - hddLog(LOG1, FL("authentication suite count: %d"), - dot11RSNIE.akm_suite_count); + hdd_info("pairwise cipher suite count: %d", + dot11RSNIE.pwise_cipher_suite_count); + hdd_info("authentication suite count: %d", + dot11RSNIE.akm_suite_count); /*Here we have followed the apple base code, but probably I suspect we can do something different */ /* dot11RSNIE.akm_suite_count */ @@ -5242,7 +5175,7 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, /* Set the PMKSA ID Cache for this interface */ for (i = 0; i < dot11RSNIE.pmkid_count; i++) { if (is_zero_ether_addr(bssid)) { - hddLog(LOGE, FL("MAC address is all zeroes")); + hdd_err("MAC address is all zeroes"); break; } updatePMKCache = true; @@ -5261,9 +5194,8 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, * Calling csr_roam_set_pmkid_cache to configure the * PMKIDs into the cache. */ - hddLog(LOG1, - FL("Calling sme_roam_set_pmkid_cache with cache entry %d."), - i); + hdd_info("Calling sme_roam_set_pmkid_cache with cache entry %d.", + i); /* Finally set the PMKSA ID Cache in CSR */ result = sme_roam_set_pmkid_cache(halHandle, @@ -5276,8 +5208,8 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, /* Validity checks */ if ((gen_ie_len < DOT11F_IE_WPA_MIN_LEN) || (gen_ie_len > DOT11F_IE_WPA_MAX_LEN)) { - hddLog(LOGE, FL("Invalid DOT11F WPA IE length :%d"), - gen_ie_len); + hdd_err("Invalid DOT11F WPA IE length :%d", + gen_ie_len); return -EINVAL; } /* Skip past the EID and length byte - and four byte WiFi OUI */ @@ -5287,10 +5219,10 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, dot11f_unpack_ie_wpa((tpAniSirGlobal) halHandle, pRsnIe, RSNIeLen, &dot11WPAIE); /* Copy out the encryption and authentication types */ - hddLog(LOG1, FL("WPA unicast cipher suite count: %d"), - dot11WPAIE.unicast_cipher_count); - hddLog(LOG1, FL("WPA authentication suite count: %d"), - dot11WPAIE.auth_suite_count); + hdd_info("WPA unicast cipher suite count: %d", + dot11WPAIE.unicast_cipher_count); + hdd_info("WPA authentication suite count: %d", + dot11WPAIE.auth_suite_count); /* dot11WPAIE.auth_suite_count */ /* Just translate the FIRST one */ *pAuthType = @@ -5305,7 +5237,7 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, hdd_translate_wpa_to_csr_encryption_type( dot11WPAIE.multicast_cipher); } else { - hddLog(LOGW, FL("gen_ie[0]: %d"), gen_ie[0]); + hdd_warn("gen_ie[0]: %d", gen_ie[0]); return -EINVAL; } return 0; @@ -5378,14 +5310,13 @@ int hdd_set_genie_to_csr(hdd_adapter_t *pAdapter, eCsrAuthType *RSNAuthType) = mcRSNEncryptType; } #ifdef WLAN_FEATURE_11W - hddLog(LOG1, FL("RSNMfpRequired = %d, RSNMfpCapable = %d"), - RSNMfpRequired, RSNMfpCapable); + hdd_info("RSNMfpRequired = %d, RSNMfpCapable = %d", + RSNMfpRequired, RSNMfpCapable); pWextState->roamProfile.MFPRequired = RSNMfpRequired; pWextState->roamProfile.MFPCapable = RSNMfpCapable; #endif - hddLog(LOG1, - FL("CSR AuthType = %d, EncryptionType = %d mcEncryptionType = %d"), - *RSNAuthType, RSNEncryptType, mcRSNEncryptType); + hdd_info("CSR AuthType = %d, EncryptionType = %d mcEncryptionType = %d", + *RSNAuthType, RSNEncryptType, mcRSNEncryptType); } return 0; } @@ -5404,8 +5335,8 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType) hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); pRoamProfile->AuthType.numEntries = 1; - hddLog(LOG1, FL("pHddStaCtx->conn_info.authType = %d"), - pHddStaCtx->conn_info.authType); + hdd_info("pHddStaCtx->conn_info.authType = %d", + pHddStaCtx->conn_info.authType); switch (pHddStaCtx->conn_info.authType) { case eCSR_AUTH_TYPE_OPEN_SYSTEM: @@ -5423,13 +5354,11 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType) if ((RSNAuthType == eCSR_AUTH_TYPE_CCKM_WPA) && ((pWextState->authKeyMgmt & IW_AUTH_KEY_MGMT_802_1X) == IW_AUTH_KEY_MGMT_802_1X)) { - hddLog(LOG1, - FL("set authType to CCKM WPA. AKM also 802.1X.")); + hdd_info("set authType to CCKM WPA. AKM also 802.1X."); pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_CCKM_WPA; } else if (RSNAuthType == eCSR_AUTH_TYPE_CCKM_WPA) { - hddLog(LOG1, - FL("Last chance to set authType to CCKM WPA.")); + hdd_info("Last chance to set authType to CCKM WPA."); pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_CCKM_WPA; } else @@ -5454,13 +5383,11 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType) if ((RSNAuthType == eCSR_AUTH_TYPE_CCKM_RSN) && ((pWextState->authKeyMgmt & IW_AUTH_KEY_MGMT_802_1X) == IW_AUTH_KEY_MGMT_802_1X)) { - hddLog(LOG1, - FL("set authType to CCKM RSN. AKM also 802.1X.")); + hdd_info("set authType to CCKM RSN. AKM also 802.1X."); pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_CCKM_RSN; } else if (RSNAuthType == eCSR_AUTH_TYPE_CCKM_RSN) { - hddLog(LOG1, - FL("Last chance to set authType to CCKM RSN.")); + hdd_info("Last chance to set authType to CCKM RSN."); pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_CCKM_RSN; } else @@ -5516,14 +5443,14 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType) default: #ifdef FEATURE_WLAN_ESE - hddLog(LOG1, FL("In default, unknown auth type.")); + hdd_info("In default, unknown auth type."); #endif /* FEATURE_WLAN_ESE */ pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_UNKNOWN; break; } - hddLog(LOG1, FL("Set roam Authtype to %d"), - pWextState->roamProfile.AuthType.authType[0]); + hdd_info("Set roam Authtype to %d", + pWextState->roamProfile.AuthType.authType[0]); return 0; } @@ -5565,16 +5492,16 @@ static int __iw_set_essid(struct net_device *dev, if (pAdapter->device_mode != QDF_STA_MODE && pAdapter->device_mode != QDF_P2P_CLIENT_MODE) { - hddLog(LOGW, FL("device mode %s(%d) is not allowed"), - hdd_device_mode_to_string(pAdapter->device_mode), - pAdapter->device_mode); + hdd_warn("device mode %s(%d) is not allowed", + hdd_device_mode_to_string(pAdapter->device_mode), + pAdapter->device_mode); return -EINVAL; } pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); if (pWextState->mTKIPCounterMeasures == TKIP_COUNTER_MEASURE_STARTED) { - hddLog(LOG2, FL("Counter measure is in progress")); + hdd_info("Counter measure is in progress"); return -EBUSY; } if (SIR_MAC_MAX_SSID_LENGTH < wrqu->essid.length) @@ -5597,7 +5524,7 @@ static int __iw_set_essid(struct net_device *dev, msecs_to_jiffies (WLAN_WAIT_TIME_DISCONNECT)); if (!rc) - hddLog(LOGE, FL("Disconnect event timed out")); + hdd_err("Disconnect event timed out"); } } @@ -5634,13 +5561,13 @@ static int __iw_set_essid(struct net_device *dev, hdd_set_csr_auth_type(pAdapter, RSNAuthType); } #ifdef FEATURE_WLAN_WAPI - hddLog(LOG1, FL("Setting WAPI AUTH Type and Encryption Mode values")); + hdd_notice("Setting WAPI AUTH Type and Encryption Mode values"); if (pAdapter->wapi_info.nWapiMode) { switch (pAdapter->wapi_info.wapiAuthMode) { case WAPI_AUTH_MODE_PSK: { - hddLog(LOG1, FL("WAPI AUTH TYPE: PSK: %d"), - pAdapter->wapi_info.wapiAuthMode); + hdd_notice("WAPI AUTH TYPE: PSK: %d", + pAdapter->wapi_info.wapiAuthMode); pRoamProfile->AuthType.numEntries = 1; pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_WAPI_WAI_PSK; @@ -5648,8 +5575,8 @@ static int __iw_set_essid(struct net_device *dev, } case WAPI_AUTH_MODE_CERT: { - hddLog(LOG1, FL("WAPI AUTH TYPE: CERT: %d"), - pAdapter->wapi_info.wapiAuthMode); + hdd_notice("WAPI AUTH TYPE: CERT: %d", + pAdapter->wapi_info.wapiAuthMode); pRoamProfile->AuthType.numEntries = 1; pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE; @@ -5658,7 +5585,7 @@ static int __iw_set_essid(struct net_device *dev, } /* End of switch */ if (pAdapter->wapi_info.wapiAuthMode == WAPI_AUTH_MODE_PSK || pAdapter->wapi_info.wapiAuthMode == WAPI_AUTH_MODE_CERT) { - hddLog(LOG1, FL("WAPI PAIRWISE/GROUP ENCRYPTION: WPI")); + hdd_notice("WAPI PAIRWISE/GROUP ENCRYPTION: WPI"); pRoamProfile->EncryptionType.numEntries = 1; pRoamProfile->EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_WPI; @@ -5908,8 +5835,8 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, ucEncryptionType = eCSR_ENCRYPT_TYPE_WEP104_STATICKEY; } else { - hddLog(LOGW, FL("value %d UNKNOWN IW_AUTH_CIPHER"), - wrqu->param.value); + hdd_warn("value %d UNKNOWN IW_AUTH_CIPHER", + wrqu->param.value); return -EINVAL; } @@ -5953,7 +5880,7 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, eCSR_ENCRYPT_TYPE_WEP104_STATICKEY; } } else { - hddLog(LOGW, FL("value %d UNKNOWN IW_AUTH_CIPHER"), + hdd_warn("value %d UNKNOWN IW_AUTH_CIPHER", wrqu->param.value); return -EINVAL; } @@ -5991,7 +5918,7 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, #define IW_AUTH_KEY_MGMT_CCKM 8 /* Should be in linux/wireless.h */ /*Check for CCKM AKM type */ if (wrqu->param.value & IW_AUTH_KEY_MGMT_CCKM) { - hddLog(LOG1, FL("CCKM AKM Set %d"), wrqu->param.value); + hdd_info("CCKM AKM Set %d", wrqu->param.value); /* Set the CCKM bit in authKeyMgmt */ /* * Right now, this breaks all ref to authKeyMgmt because @@ -6035,14 +5962,12 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, case IW_AUTH_TKIP_COUNTERMEASURES: { if (wrqu->param.value) { - hddLog(LOG2, - "Counter Measure started %d", + hdd_info("Counter Measure started %d", wrqu->param.value); pWextState->mTKIPCounterMeasures = TKIP_COUNTER_MEASURE_STARTED; } else { - hddLog(LOG2, - "Counter Measure stopped=%d", + hdd_info("Counter Measure stopped=%d", wrqu->param.value); pWextState->mTKIPCounterMeasures = TKIP_COUNTER_MEASURE_STOPED; @@ -6057,8 +5982,8 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, default: - hddLog(LOGW, FL("called with unsupported auth type %d"), - wrqu->param.flags & IW_AUTH_INDEX); + hdd_warn("called with unsupported auth type %d", + wrqu->param.flags & IW_AUTH_INDEX); break; } @@ -6134,14 +6059,14 @@ static int __iw_get_auth(struct net_device *dev, struct iw_request_info *info, wrqu->param.value = IW_AUTH_ALG_SHARED_KEY; break; case eCSR_AUTH_TYPE_UNKNOWN: - hddLog(LOG1, FL("called with unknown auth type")); + hdd_info("called with unknown auth type"); wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; break; case eCSR_AUTH_TYPE_AUTOSWITCH: wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; break; case eCSR_AUTH_TYPE_WPA_PSK: - hddLog(LOG1, FL("called with WPA PSK auth type")); + hdd_info("called with WPA PSK auth type"); wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; return -EIO; @@ -6151,11 +6076,11 @@ static int __iw_get_auth(struct net_device *dev, struct iw_request_info *info, case eCSR_AUTH_TYPE_RSN_PSK_SHA256: case eCSR_AUTH_TYPE_RSN_8021X_SHA256: #endif - hddLog(LOG1, FL("called with RSN PSK auth type")); + hdd_info("called with RSN PSK auth type"); wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; return -EIO; default: - hddLog(LOGE, FL("called with unknown auth type")); + hdd_err("called with unknown auth type"); wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; return -EIO; } @@ -6179,8 +6104,8 @@ static int __iw_get_auth(struct net_device *dev, struct iw_request_info *info, wrqu->param.value = IW_AUTH_CIPHER_CCMP; break; default: - hddLog(LOG1, FL("called with unknown auth type %d"), - pRoamProfile->negotiatedUCEncryptionType); + hdd_notice("called with unknown auth type %d", + pRoamProfile->negotiatedUCEncryptionType); return -EIO; } } @@ -6205,14 +6130,14 @@ static int __iw_get_auth(struct net_device *dev, struct iw_request_info *info, wrqu->param.value = IW_AUTH_CIPHER_CCMP; break; default: - hddLog(LOG1, FL("called with unknown auth type %d"), - pRoamProfile->negotiatedMCEncryptionType); + hdd_info("called with unknown auth type %d", + pRoamProfile->negotiatedMCEncryptionType); return -EIO; } } - hddLog(LOG1, FL("called with auth type %d"), - pRoamProfile->AuthType.authType[0]); + hdd_info("called with auth type %d", + pRoamProfile->AuthType.authType[0]); EXIT(); return 0; } @@ -6272,7 +6197,7 @@ static int __iw_set_ap_address(struct net_device *dev, return ret; pMacAddress = (uint8_t *) wrqu->ap_addr.sa_data; - hddLog(LOG1, FL(" " MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pMacAddress)); + hdd_info(" " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pMacAddress)); qdf_mem_copy(pHddStaCtx->conn_info.bssId.bytes, pMacAddress, sizeof(struct qdf_mac_addr)); EXIT(); -- cgit v1.2.3 From 55780b5599ef7dbc61cd09009c91d67f3120dfbe Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 5 Oct 2016 13:54:07 -0700 Subject: Release 5.1.0.29L Release 5.1.0.29L Change-Id: Id70f535bab06f14d17eb8e774475010768a57481 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 c11b0d1c1d6d..60946e9a1bb1 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 29 -#define QWLAN_VERSIONSTR "5.1.0.29K" +#define QWLAN_VERSIONSTR "5.1.0.29L" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 38f2b5584c1dcf6226ad6b2a7d047d026aa13c6f Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Tue, 4 Oct 2016 13:57:46 -0700 Subject: qcacld-3.0: Fill regulatory info before wiphy init Currently, some regulatory information is being populated after it may be needed by wiphy for initialization. Reorder the order of execution to populate this data before it is needed by wiphy. Change-Id: I218c19c84b6c7f0f62a94b211201281939838438 CRs-Fixed: 1074146 --- core/hdd/src/wlan_hdd_regulatory.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/hdd/src/wlan_hdd_regulatory.c b/core/hdd/src/wlan_hdd_regulatory.c index 69218fba8a9e..bda6e48d4b6d 100644 --- a/core/hdd/src/wlan_hdd_regulatory.c +++ b/core/hdd/src/wlan_hdd_regulatory.c @@ -488,18 +488,18 @@ int hdd_regulatory_init(hdd_context_t *hdd_ctx, struct wiphy *wiphy) reg_info = &hdd_ctx->reg; - hdd_regulatory_wiphy_init(hdd_ctx, reg_info, wiphy); - - hdd_process_regulatory_data(hdd_ctx, wiphy, true); - - reg_info->cc_src = SOURCE_DRIVER; - ret_val = cds_fill_some_regulatory_info(reg_info); if (ret_val) { hdd_err("incorrect BDF regulatory data"); return ret_val; } + hdd_regulatory_wiphy_init(hdd_ctx, reg_info, wiphy); + + hdd_process_regulatory_data(hdd_ctx, wiphy, true); + + reg_info->cc_src = SOURCE_DRIVER; + cds_put_default_country(reg_info->alpha2); init_completion(&hdd_ctx->reg_init); -- cgit v1.2.3 From 05910db713702df80ea5116260e833ea824af16c Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 5 Oct 2016 15:02:41 -0700 Subject: Release 5.1.0.29M Release 5.1.0.29M Change-Id: I5a16e164585382540061d911a7afc90d62b06cbf 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 60946e9a1bb1..c5081d7cbae2 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 29 -#define QWLAN_VERSIONSTR "5.1.0.29L" +#define QWLAN_VERSIONSTR "5.1.0.29M" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From b2d1a45a783034beddc500b30ee0f23e507b3bad Mon Sep 17 00:00:00 2001 From: Agrawal Ashish Date: Thu, 5 May 2016 12:23:58 +0530 Subject: qcacld-3.0: Add support for legacy off channel notification in case of p2p-GO qcacld-2.0 to qcacld-3.0 propagation In this feature, 1) When a legacy client connects to P2P GO, Host will indicate FW to stop NOA and start CTS2SELF. 2) Ini Support for this feature. Change-Id: If76d8ef454633d9a02dd6057b5d6ca3e9e639ea4 CRs-Fixed: 932264 --- core/hdd/inc/wlan_hdd_cfg.h | 11 +++++++++++ core/hdd/src/wlan_hdd_cfg.c | 11 +++++++++++ core/hdd/src/wlan_hdd_main.c | 2 ++ core/mac/src/include/sir_params.h | 2 ++ core/sme/inc/sme_api.h | 7 +++++++ core/sme/src/common/sme_api.c | 25 +++++++++++++++++++++++++ core/wma/inc/wma_api.h | 13 +++++++++++++ core/wma/inc/wma_types.h | 1 + core/wma/src/wma_main.c | 2 ++ core/wma/src/wma_mgmt.c | 28 ++++++++++++++++++++++++++++ 10 files changed, 102 insertions(+) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 9cfeeb3cf36a..c0b065f4b761 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2917,6 +2917,16 @@ enum dot11p_mode { #define CFG_EXTSCAN_ACTIVE_MIN_CHANNEL_TIME_DEFAULT (20) #endif +/* When gEnable_go_cts2self_for_sta is + * enabled then if a legacy client connects to P2P GO, + * Host will send a WMI VDEV command to FW to stop using NOA for P2P GO + * and start using CTS2SELF. + */ +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA "gEnable_go_cts2self_for_sta" +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA_DEFAULT (0) +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA_MIN (0) +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA_MAX (1) + #define CFG_CE_CLASSIFY_ENABLE_NAME "gCEClassifyEnable" #define CFG_CE_CLASSIFY_ENABLE_MIN (0) #define CFG_CE_CLASSIFY_ENABLE_MAX (1) @@ -4152,6 +4162,7 @@ struct hdd_config { /* parameter for indicating sifs burst duration to fw */ uint8_t sifs_burst_duration; bool goptimize_chan_avoid_event; + bool enable_go_cts2self_for_sta; }; #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 4a21c6cbf385..d22a5f8bde3f 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -3734,6 +3734,14 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_ENABLE_EDCA_INI_MIN, CFG_ENABLE_EDCA_INI_MAX), + REG_VARIABLE(CFG_ENABLE_GO_CTS2SELF_FOR_STA, WLAN_PARAM_Integer, + struct hdd_config, enable_go_cts2self_for_sta, + VAR_FLAGS_OPTIONAL | + VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_GO_CTS2SELF_FOR_STA_DEFAULT, + CFG_ENABLE_GO_CTS2SELF_FOR_STA_MIN, + CFG_ENABLE_GO_CTS2SELF_FOR_STA_MAX), + REG_VARIABLE(CFG_EDCA_VO_CWMIN_VALUE_NAME, WLAN_PARAM_Integer, struct hdd_config, edca_vo_cwmin, VAR_FLAGS_OPTIONAL | @@ -5646,6 +5654,9 @@ void hdd_cfg_print(hdd_context_t *pHddCtx) hdd_info("Name = [%s] Value = [%d]", CFG_FILTER_MULTICAST_REPLAY_NAME, pHddCtx->config->multicast_replay_filter); + hdd_info("Name = [%s] Value = [%u]", + CFG_ENABLE_GO_CTS2SELF_FOR_STA, + pHddCtx->config->enable_go_cts2self_for_sta); } diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 82be6b96f3f3..47b3c6470000 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -7817,6 +7817,8 @@ int hdd_wlan_startup(struct device *dev) hdd_release_rtnl_lock(); rtnl_held = false; + if (hdd_ctx->config->enable_go_cts2self_for_sta) + sme_set_cts2self_for_p2p_go(hdd_ctx->hHal); #ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE status = qdf_mc_timer_init(&hdd_ctx->skip_acs_scan_timer, QDF_TIMER_TYPE_SW, diff --git a/core/mac/src/include/sir_params.h b/core/mac/src/include/sir_params.h index 2b71b5143209..b11343f2be9b 100644 --- a/core/mac/src/include/sir_params.h +++ b/core/mac/src/include/sir_params.h @@ -606,6 +606,7 @@ typedef struct sSirMbMsgP2p { #define SIR_HAL_ADD_BCN_FILTER_CMDID (SIR_HAL_ITC_MSG_TYPES_BEGIN + 339) #define SIR_HAL_REMOVE_BCN_FILTER_CMDID (SIR_HAL_ITC_MSG_TYPES_BEGIN + 340) + #define SIR_HAL_BPF_GET_CAPABILITIES_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 341) #define SIR_HAL_BPF_SET_INSTRUCTIONS_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 342) @@ -634,6 +635,7 @@ typedef struct sSirMbMsgP2p { #define SIR_HAL_POWER_DBG_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 362) #define SIR_HAL_SET_DTIM_PERIOD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 363) #define SIR_HAL_ENCRYPT_DECRYPT_MSG (SIR_HAL_ITC_MSG_TYPES_BEGIN + 364) +#define SIR_HAL_SET_CTS2SELF_FOR_STA (SIR_HAL_ITC_MSG_TYPES_BEGIN + 368) #define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF) diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 15f845510ef9..cfbbe22ec405 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -1316,4 +1316,11 @@ QDF_STATUS sme_encrypt_decrypt_msg_deregister_callback(tHalHandle h_hal); QDF_STATUS sme_encrypt_decrypt_msg(tHalHandle hal, struct encrypt_decrypt_req_params *encrypt_decrypt_params); +/** + * sme_set_cts2self_for_p2p_go() - sme function to set ini parms to FW. + * @hal: reference to the HAL + * + * Return: QDF_STATUS + */ +QDF_STATUS sme_set_cts2self_for_p2p_go(tHalHandle hal); #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 57c167a44b1f..738ba4302f88 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -16715,3 +16715,28 @@ QDF_STATUS sme_encrypt_decrypt_msg_deregister_callback(tHalHandle h_hal) } return status; } + +QDF_STATUS sme_set_cts2self_for_p2p_go(tHalHandle hal_handle) +{ + cds_msg_t message; + void *wma_handle; + + wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + if (!wma_handle) { + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, + "wma_handle is NULL"); + return QDF_STATUS_E_FAILURE; + } + + message.bodyptr = NULL; + message.type = WMA_SET_CTS2SELF_FOR_STA; + + if (QDF_STATUS_SUCCESS != + wma_set_cts2self_for_p2p_go(wma_handle, true)) { + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, + "%s: Failed to set cts2self for p2p GO to firmware", + __func__); + return QDF_STATUS_E_FAILURE; + } + return QDF_STATUS_SUCCESS; +} diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index dcd121e37fdb..ecbead7e438f 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -303,4 +303,17 @@ void wma_process_pdev_hw_mode_trans_ind(void *wma, 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); + +/** + * wma_set_cts2self_for_p2p_go() - set CTS2SELF command for P2P GO. + * @wma_handle: pointer to wma handle. + * @cts2self_for_p2p_go: value needs to set to firmware. + * + * At the time of driver startup, inform about ini parma to FW that + * if legacy client connects to P2P GO, stop using NOA for P2P GO. + * + * Return: QDF_STATUS. + */ +QDF_STATUS wma_set_cts2self_for_p2p_go(void *wma_handle, + uint32_t cts2self_for_p2p_go); #endif diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index 89f06c9db0b5..143bc5b53d9a 100644 --- a/core/wma/inc/wma_types.h +++ b/core/wma/inc/wma_types.h @@ -467,6 +467,7 @@ #define WMA_ADD_BCN_FILTER_CMDID SIR_HAL_ADD_BCN_FILTER_CMDID #define WMA_REMOVE_BCN_FILTER_CMDID SIR_HAL_REMOVE_BCN_FILTER_CMDID #define WMA_SET_ADAPT_DWELLTIME_CONF_PARAMS SIR_HAL_SET_ADAPT_DWELLTIME_PARAMS +#define WMA_SET_CTS2SELF_FOR_STA SIR_HAL_SET_CTS2SELF_FOR_STA #define WDA_BPF_GET_CAPABILITIES_REQ SIR_HAL_BPF_GET_CAPABILITIES_REQ #define WDA_BPF_SET_INSTRUCTIONS_REQ SIR_HAL_BPF_SET_INSTRUCTIONS_REQ diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 00f1735cc44e..296bbe3bda9d 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -6280,6 +6280,8 @@ QDF_STATUS wma_mc_process_msg(void *cds_context, cds_msg_t *msg) case WDA_BPF_SET_INSTRUCTIONS_REQ: wma_set_bpf_instructions(wma_handle, msg->bodyptr); qdf_mem_free(msg->bodyptr); + case WMA_SET_CTS2SELF_FOR_STA: + wma_set_cts2self_for_p2p_go(wma_handle, true); break; case SIR_HAL_NDP_INITIATOR_REQ: wma_handle_ndp_initiator_req(wma_handle, msg->bodyptr); diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 5a4690eb576c..a3223b2f6814 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -965,6 +965,8 @@ QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma, cmd->peer_flags |= WMI_PEER_160MHZ; cmd->peer_vht_caps = params->vht_caps; + if (params->p2pCapableSta) + cmd->peer_flags |= WMI_PEER_IS_P2P_CAPABLE; if (params->rmfEnabled) cmd->peer_flags |= WMI_PEER_PMF; @@ -2655,6 +2657,32 @@ void wma_process_update_userpos(tp_wma_handle wma_handle, } +QDF_STATUS wma_set_cts2self_for_p2p_go(void *wma_handle, + uint32_t cts2self_for_p2p_go) +{ + int32_t ret; + tp_wma_handle wma = (tp_wma_handle)wma_handle; + struct pdev_params pdevparam; + + pdevparam.param_id = WMI_PDEV_PARAM_CTS2SELF_FOR_P2P_GO_CONFIG; + pdevparam.param_value = cts2self_for_p2p_go; + + ret = wmi_unified_pdev_param_send(wma->wmi_handle, + &pdevparam, + WMA_WILDCARD_PDEV_ID); + if (ret) { + WMA_LOGE("Fail to Set CTS2SELF for p2p GO %d", + cts2self_for_p2p_go); + return QDF_STATUS_E_FAILURE; + } + + WMA_LOGD("Successfully Set CTS2SELF for p2p GO %d", + cts2self_for_p2p_go); + + return QDF_STATUS_SUCCESS; +} + + /** * wma_set_htconfig() - set ht config parameters to target * @vdev_id: vdev id -- cgit v1.2.3 From 06e76d29092b3d38221da27f067f1d4ccf87e9b2 Mon Sep 17 00:00:00 2001 From: Agrawal Ashish Date: Thu, 18 Aug 2016 16:44:48 +0530 Subject: qcacld-3.0: Populate correct supported rates from hostapd.conf file qcacld-2.0 to qcacld-3.0 propagation Currently driver populates default supported and extended supported rates in beacons even if hostapd.conf file wants to change supported and extended supported rates. Fix this by parsing beacon head and tail to get supported and extended rates and populate them in sap config. If Driver force acs is enabled, driver acs will get priority. In case of driver based acs, driver should ignore basic and extended rates from hostapd.conf and should populate default rates. Change-Id: I3226438b908a96f1b1bd3c2968a0c20eef81a799 CRs-Fixed: 1035768 --- core/hdd/src/wlan_hdd_hostapd.c | 34 ++++++++ core/sap/inc/sap_api.h | 4 +- core/sap/src/sap_fsm.c | 16 ++++ core/sme/inc/csr_api.h | 5 +- core/sme/src/csr/csr_api_roam.c | 186 ++++++++++++++++++++++++++++------------ 5 files changed, 186 insertions(+), 59 deletions(-) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 3f20e4e160af..94af9c09e7cf 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -7250,6 +7250,40 @@ int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, acl_entry++; } } + if (!pHddCtx->config->force_sap_acs) { + pIe = wlan_hdd_cfg80211_get_ie_ptr( + &pMgmt_frame->u.beacon.variable[0], + pBeacon->head_len, WLAN_EID_SUPP_RATES); + + if (pIe != NULL) { + pIe++; + pConfig->supported_rates.numRates = pIe[0]; + pIe++; + for (i = 0; + i < pConfig->supported_rates.numRates; i++) { + if (pIe[i]) { + pConfig->supported_rates.rate[i] = pIe[i]; + hdd_info("Configured Supported rate is %2x", + pConfig->supported_rates.rate[i]); + } + } + } + pIe = wlan_hdd_cfg80211_get_ie_ptr(pBeacon->tail, + pBeacon->tail_len, + WLAN_EID_EXT_SUPP_RATES); + if (pIe != NULL) { + pIe++; + pConfig->extended_rates.numRates = pIe[0]; + pIe++; + for (i = 0; i < pConfig->extended_rates.numRates; i++) { + if (pIe[i]) { + pConfig->extended_rates.rate[i] = pIe[i]; + hdd_info("Configured ext Supported rate is %2x", + pConfig->extended_rates.rate[i]); + } + } + } + } wlan_hdd_set_sap_hwmode(pHostapdAdapter); qdf_mem_zero(&sme_config, sizeof(tSmeConfigParams)); diff --git a/core/sap/inc/sap_api.h b/core/sap/inc/sap_api.h index d9f06b8bf7c3..1087fe2c44e0 100644 --- a/core/sap/inc/sap_api.h +++ b/core/sap/inc/sap_api.h @@ -589,8 +589,8 @@ typedef struct sap_Config { uint8_t short_retry_limit; uint8_t long_retry_limit; uint8_t ampdu_size; - tSirMacRateSet supp_rate_set; - tSirMacRateSet extended_rate_set; + tSirMacRateSet supported_rates; + tSirMacRateSet extended_rates; enum sap_acs_dfs_mode acs_dfs_mode; } tsap_Config_t; diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 8eef7af80814..1ed36bbdef35 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -4199,6 +4199,22 @@ sapconvert_to_csr_profile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType } profile->sap_dot11mc = pconfig_params->sap_dot11mc; + if (pconfig_params->supported_rates.numRates) { + qdf_mem_copy(profile->supported_rates.rate, + pconfig_params->supported_rates.rate, + pconfig_params->supported_rates.numRates); + profile->supported_rates.numRates = + pconfig_params->supported_rates.numRates; + } + + if (pconfig_params->extended_rates.numRates) { + qdf_mem_copy(profile->extended_rates.rate, + pconfig_params->extended_rates.rate, + pconfig_params->extended_rates.numRates); + profile->extended_rates.numRates = + pconfig_params->extended_rates.numRates; + } + return eSAP_STATUS_SUCCESS; /* Success. */ } diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 07e9874784d9..47d654b8d06c 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -965,9 +965,10 @@ typedef struct tagCsrRoamProfile { tSirAddIeParams addIeParams; uint8_t sap_dot11mc; uint8_t beacon_tx_rate; - tSirMacRateSet supp_rate_set; - tSirMacRateSet extended_rate_set; + tSirMacRateSet supported_rates; + tSirMacRateSet extended_rates; bool do_not_roam; + } tCsrRoamProfile; #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index ad3768c3b13e..74a0f586f26d 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -7315,6 +7315,20 @@ QDF_STATUS csr_roam_copy_profile(tpAniSirGlobal pMac, } qdf_mem_copy(&pDstProfile->addIeParams, &pSrcProfile->addIeParams, sizeof(tSirAddIeParams)); + if (pSrcProfile->supported_rates.numRates) { + qdf_mem_copy(pDstProfile->supported_rates.rate, + pSrcProfile->supported_rates.rate, + pSrcProfile->supported_rates.numRates); + pDstProfile->supported_rates.numRates = + pSrcProfile->supported_rates.numRates; + } + if (pSrcProfile->extended_rates.numRates) { + qdf_mem_copy(pDstProfile->extended_rates.rate, + pSrcProfile->extended_rates.rate, + pSrcProfile->extended_rates.numRates); + pDstProfile->extended_rates.numRates = + pSrcProfile->extended_rates.numRates; + } end: if (!QDF_IS_STATUS_SUCCESS(status)) { csr_release_profile(pMac, pDstProfile); @@ -12517,12 +12531,11 @@ uint8_t csr_roam_get_ibss_start_channel_number24(tpAniSirGlobal pMac) return channel; } - /** * csr_populate_basic_rates() - populates OFDM or CCK rates * @rates: rate struct to populate - * @type: true: ofdm rates, false: cck rates - * @masked: indicates if rates are to be masked with + * @is_ofdm_rates: true: ofdm rates, false: cck rates + * @is_basic_rates: indicates if rates are to be masked with * CSR_DOT11_BASIC_RATE_MASK * * This function will populate OFDM or CCK rates @@ -12530,8 +12543,10 @@ uint8_t csr_roam_get_ibss_start_channel_number24(tpAniSirGlobal pMac) * Return: void */ static void -csr_populate_basic_rates(tSirMacRateSet *rate_set, bool type, bool masked) +csr_populate_basic_rates(tSirMacRateSet *rate_set, bool is_ofdm_rates, + bool is_basic_rates) { + int i = 0; uint8_t ofdm_rates[8] = { SIR_MAC_RATE_6, SIR_MAC_RATE_9, @@ -12549,23 +12564,30 @@ csr_populate_basic_rates(tSirMacRateSet *rate_set, bool type, bool masked) SIR_MAC_RATE_11 }; - if (type == true) { + if (is_ofdm_rates == true) { rate_set->numRates = 8; qdf_mem_copy(rate_set->rate, ofdm_rates, sizeof(ofdm_rates)); - if (masked) { + if (is_basic_rates) { rate_set->rate[0] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[2] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[4] |= CSR_DOT11_BASIC_RATE_MASK; } + for (i = 0; i < rate_set->numRates; i++) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + FL("Default OFDM rate is %2x"), rate_set->rate[i]); } else { rate_set->numRates = 4; qdf_mem_copy(rate_set->rate, cck_rates, sizeof(cck_rates)); - if (masked) { + if (is_basic_rates) { rate_set->rate[0] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[1] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[2] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[3] |= CSR_DOT11_BASIC_RATE_MASK; } + for (i = 0; i < rate_set->numRates; i++) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + FL("Default CCK rate is %2x"), rate_set->rate[i]); + } } @@ -12600,6 +12622,41 @@ csr_convert_mode_to_nw_type(eCsrCfgDot11Mode dot11_mode, eCsrBand band) return eSIR_DONOT_USE_NW_TYPE; } +/** + * csr_populate_supported_rates_from_hostapd() - populates operational + * and extended rates. + * from hostapd.conf file + * @opr_rates: rate struct to populate operational rates + * @ext_rates: rate struct to populate extended rates + * @profile: bss profile + * + * Return: void + */ +static void csr_populate_supported_rates_from_hostapd(tSirMacRateSet *opr_rates, + tSirMacRateSet *ext_rates, + tCsrRoamProfile *pProfile) +{ + int i = 0; + if (pProfile->supported_rates.numRates) { + opr_rates->numRates = pProfile->supported_rates.numRates; + qdf_mem_copy(opr_rates->rate, + pProfile->supported_rates.rate, + pProfile->supported_rates.numRates); + for (i = 0; i < opr_rates->numRates; i++) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + FL("Supported Rate is %2x"), opr_rates->rate[i]); + } + if (pProfile->extended_rates.numRates) { + ext_rates->numRates = + pProfile->extended_rates.numRates; + qdf_mem_copy(ext_rates->rate, + pProfile->extended_rates.rate, + pProfile->extended_rates.numRates); + for (i = 0; i < ext_rates->numRates; i++) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + FL("Extended Rate is %2x"), ext_rates->rate[i]); + } +} /** * csr_roam_get_bss_start_parms() - get bss start param from profile * @pMac: mac global context @@ -12642,58 +12699,77 @@ csr_roam_get_bss_start_parms(tpAniSirGlobal pMac, nw_type = csr_convert_mode_to_nw_type(pParam->uCfgDot11Mode, band); ext_rates->numRates = 0; - - switch (nw_type) { - default: - sms_log(pMac, LOGE, FL("sees an unknown pSirNwType (%d)"), - nw_type); - case eSIR_11A_NW_TYPE: - csr_populate_basic_rates(opr_rates, true, true); - if (eCSR_OPERATING_CHANNEL_ANY != tmp_opr_ch) { - opr_ch = tmp_opr_ch; - break; - } - opr_ch = csr_roam_get_ibss_start_channel_number50(pMac); - if (0 == opr_ch && - CSR_IS_PHY_MODE_DUAL_BAND(pProfile->phyMode) && - CSR_IS_PHY_MODE_DUAL_BAND(pMac->roam.configParam.phyMode)) { - /* - * We could not find a 5G channel by auto pick, let's - * try 2.4G channels. We only do this here because - * csr_roam_get_phy_mode_band_for_bss always picks 11a - * for AUTO - */ - nw_type = eSIR_11B_NW_TYPE; - opr_ch = csr_roam_get_ibss_start_channel_number24(pMac); - csr_populate_basic_rates(opr_rates, false, true); - } - break; - case eSIR_11B_NW_TYPE: - csr_populate_basic_rates(opr_rates, false, true); - if (eCSR_OPERATING_CHANNEL_ANY == tmp_opr_ch) - opr_ch = csr_roam_get_ibss_start_channel_number24(pMac); - else - opr_ch = tmp_opr_ch; - break; - case eSIR_11G_NW_TYPE: - /* For P2P Client and P2P GO, disable 11b rates */ - if ((pProfile->csrPersona == QDF_P2P_CLIENT_MODE) - || (pProfile->csrPersona == QDF_P2P_GO_MODE) - || (eCSR_CFG_DOT11_MODE_11G_ONLY == - pParam->uCfgDot11Mode)) { + /* + * hostapd.conf will populate its basic and extended rates + * as per hw_mode but if acs in ini is enabled, driver should + * ignore basic and extended rates from hostapd.conf and should + * populate default rates. + */ + if (pProfile->supported_rates.numRates || + pProfile->extended_rates.numRates) { + csr_populate_supported_rates_from_hostapd(opr_rates, + ext_rates, pProfile); + pParam->operationChn = tmp_opr_ch; + } else { + switch (nw_type) { + default: + sms_log(pMac, LOGE, + FL("sees an unknown pSirNwType (%d)"), + nw_type); + case eSIR_11A_NW_TYPE: csr_populate_basic_rates(opr_rates, true, true); - } else { + if (eCSR_OPERATING_CHANNEL_ANY != tmp_opr_ch) { + opr_ch = tmp_opr_ch; + break; + } + opr_ch = csr_roam_get_ibss_start_channel_number50(pMac); + if (0 == opr_ch && + CSR_IS_PHY_MODE_DUAL_BAND(pProfile->phyMode) && + CSR_IS_PHY_MODE_DUAL_BAND( + pMac->roam.configParam.phyMode)) { + /* + * We could not find a 5G channel by auto pick, + * let's try 2.4G channels. We only do this here + * because csr_roam_get_phy_mode_band_for_bss + * always picks 11a for AUTO + */ + nw_type = eSIR_11B_NW_TYPE; + opr_ch = + csr_roam_get_ibss_start_channel_number24(pMac); + csr_populate_basic_rates(opr_rates, false, + true); + } + break; + case eSIR_11B_NW_TYPE: csr_populate_basic_rates(opr_rates, false, true); - csr_populate_basic_rates(ext_rates, true, false); + if (eCSR_OPERATING_CHANNEL_ANY == tmp_opr_ch) + opr_ch = + csr_roam_get_ibss_start_channel_number24(pMac); + else + opr_ch = tmp_opr_ch; + break; + case eSIR_11G_NW_TYPE: + /* For P2P Client and P2P GO, disable 11b rates */ + if ((pProfile->csrPersona == QDF_P2P_CLIENT_MODE) || + (pProfile->csrPersona == QDF_P2P_GO_MODE) || + (eCSR_CFG_DOT11_MODE_11G_ONLY == + pParam->uCfgDot11Mode)) { + csr_populate_basic_rates(opr_rates, true, true); + } else { + csr_populate_basic_rates(opr_rates, false, + true); + csr_populate_basic_rates(ext_rates, true, + false); + } + if (eCSR_OPERATING_CHANNEL_ANY == tmp_opr_ch) + opr_ch = + csr_roam_get_ibss_start_channel_number24(pMac); + else + opr_ch = tmp_opr_ch; + break; } - - if (eCSR_OPERATING_CHANNEL_ANY == tmp_opr_ch) - opr_ch = csr_roam_get_ibss_start_channel_number24(pMac); - else - opr_ch = tmp_opr_ch; - break; + pParam->operationChn = opr_ch; } - pParam->operationChn = opr_ch; pParam->sirNwType = nw_type; pParam->ch_params.ch_width = pProfile->ch_params.ch_width; pParam->ch_params.center_freq_seg0 = -- cgit v1.2.3 From 71e0316edaf0250f71a34e29e2872fa100d9f687 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 6 Oct 2016 04:08:58 -0700 Subject: Release 5.1.0.29N Release 5.1.0.29N Change-Id: I593a4500492dfb1d713fe604cbb892b6a2b3af3a 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 c5081d7cbae2..5d9329269101 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 29 -#define QWLAN_VERSIONSTR "5.1.0.29M" +#define QWLAN_VERSIONSTR "5.1.0.29N" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From d6e4b639f84f8270a45a3f230d4bb6ccc1ec81f7 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Mon, 3 Oct 2016 13:49:27 -0700 Subject: qcacld-3.0: Cleanup strange behaviors in __iw_set_essid() __iw_set_essid() currently has a few strange behaviors: * It currently rejects any request when in IBSS mode. * It currently uses hdd_conn_get_connected_bss_type() to see if the adapter is connected, discarding the connectedBssType returned by the function. * It currently uses the conn_info.connDot11DesiredBssType field to determine the BSS type, but this field is being deprecated. Clean up these behaviors by allowing IBSS mode, by using hdd_conn_is_connected() to see if the adapter is connected, and by using the adapter device_mode to determine the BSS type. Change-Id: I0180eb70487dd664c1cb85eee9a4d53eb7cb14a9 CRs-Fixed: 1073739 --- core/hdd/src/wlan_hdd_assoc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 196a20ecf74e..518565ab8418 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -5477,7 +5477,6 @@ static int __iw_set_essid(struct net_device *dev, hdd_context_t *hdd_ctx; uint32_t roamId; tCsrRoamProfile *pRoamProfile; - eMib_dot11DesiredBssType connectedBssType; eCsrAuthType RSNAuthType; tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); @@ -5491,7 +5490,8 @@ static int __iw_set_essid(struct net_device *dev, return ret; if (pAdapter->device_mode != QDF_STA_MODE && - pAdapter->device_mode != QDF_P2P_CLIENT_MODE) { + pAdapter->device_mode != QDF_IBSS_MODE && + pAdapter->device_mode != QDF_P2P_CLIENT_MODE) { hdd_warn("device mode %s(%d) is not allowed", hdd_device_mode_to_string(pAdapter->device_mode), pAdapter->device_mode); @@ -5508,9 +5508,8 @@ static int __iw_set_essid(struct net_device *dev, return -EINVAL; pRoamProfile = &pWextState->roamProfile; - if (hdd_conn_get_connected_bss_type(pHddStaCtx, &connectedBssType) || - (eMib_dot11DesiredBssType_independent == - pHddStaCtx->conn_info.connDot11DesiredBssType)) { + if (hdd_conn_is_connected(pHddStaCtx) || + (pAdapter->device_mode == QDF_IBSS_MODE)) { QDF_STATUS qdf_status; /* Need to issue a disconnect to CSR. */ -- cgit v1.2.3 From 9eeed0aedb6958ed2c685ea826433929da4b7252 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Mon, 3 Oct 2016 15:04:57 -0700 Subject: qcacld-3.0: Cleanup strange behavior in __iw_set_mode() __iw_set_mode() currently uses hdd_conn_get_connected_bss_type() to see if the adapter is connected, discarding the connectedBssType returned by the function. That is not the correct API for this use case. Clean up this strange behavior by using hdd_conn_is_connected() to see if the adapter is connected. Change-Id: I66f85fb8275ae2885012ebf8710187b2b886dfb0 CRs-Fixed: 1073739 --- core/hdd/src/wlan_hdd_wext.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 7074de2d6bd2..9992c4b41a8d 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -2037,7 +2037,6 @@ static int __iw_set_mode(struct net_device *dev, hdd_context_t *hdd_ctx; tCsrRoamProfile *pRoamProfile; eCsrRoamBssType LastBSSType; - eMib_dot11DesiredBssType connectedBssType; struct hdd_config *pConfig; struct wireless_dev *wdev; int ret; @@ -2085,8 +2084,8 @@ static int __iw_set_mode(struct net_device *dev, /* the BSS mode changed. We need to issue disconnect * if connected or in IBSS disconnect state */ - if (hdd_conn_get_connected_bss_type - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter), &connectedBssType) + if (hdd_conn_is_connected + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter)) || (eCSR_BSS_TYPE_START_IBSS == LastBSSType)) { QDF_STATUS qdf_status; /* need to issue a disconnect to CSR. */ -- cgit v1.2.3 From 9edf957229a15dad34f2f1bc8c1d9b095a78bcbd Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Mon, 3 Oct 2016 15:24:49 -0700 Subject: qcacld-3.0: Avoid eMib_dot11DesiredBssType in cfg80211 Currently in wlan_hdd_cfg80211.c wlan_hdd_try_disconnect() calls hdd_conn_get_connected_bss_type() which returns a value of eMib_dot11DesiredBssType. This type is being deprecated so directly use the adapter's device_mode. Change-Id: Ib8981750475bd27818a0c7e4e386396869d90e69 CRs-Fixed: 1073739 --- core/hdd/src/wlan_hdd_cfg80211.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 1da11ee297d6..2e6c4af0de56 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -12079,14 +12079,11 @@ static int wlan_hdd_try_disconnect(hdd_adapter_t *pAdapter) { unsigned long rc; hdd_station_ctx_t *pHddStaCtx; - eMib_dot11DesiredBssType connectedBssType; int status, result = 0; pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - hdd_conn_get_connected_bss_type(pHddStaCtx, &connectedBssType); - - if ((eMib_dot11DesiredBssType_independent == connectedBssType) || + if ((QDF_IBSS_MODE == pAdapter->device_mode) || (eConnectionState_Associated == pHddStaCtx->conn_info.connState) || (eConnectionState_Connecting == pHddStaCtx->conn_info.connState) || (eConnectionState_IbssConnected == pHddStaCtx->conn_info.connState)) { -- cgit v1.2.3 From 229416002f30760f5fb19f7c5aa9b136e6751bb2 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Mon, 3 Oct 2016 15:33:12 -0700 Subject: qcacld-3.0: Remove obsolete hdd_conn_get_connected_bss_type() Function hdd_conn_get_connected_bss_type() is no longer being used, so remove it. Change-Id: I0aafea43631d0ab8d3a99d8e913392f6090cd124 CRs-Fixed: 1073739 --- core/hdd/inc/wlan_hdd_assoc.h | 11 ----------- core/hdd/src/wlan_hdd_assoc.c | 23 ----------------------- 2 files changed, 34 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_assoc.h b/core/hdd/inc/wlan_hdd_assoc.h index 549b68d5deef..860a1e6fbe1f 100644 --- a/core/hdd/inc/wlan_hdd_assoc.h +++ b/core/hdd/inc/wlan_hdd_assoc.h @@ -260,17 +260,6 @@ QDF_STATUS hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, eRoamCmdStatus roamStatus, eCsrRoamResult roamResult); -/** - * hdd_conn_get_connected_bss_type() - get current bss type - * @pHddStaCtx: pointer to global HDD Station context - * @pConnectedBssType: pointer to connected bss type - * - * Return: false if any errors encountered, true otherwise - */ -bool -hdd_conn_get_connected_bss_type(hdd_station_ctx_t *pHddStaCtx, - eMib_dot11DesiredBssType *pConnectedBssType); - /** * hdd_set_genie_to_csr() - set genie to csr * @pAdapter: pointer to adapter diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 518565ab8418..cf7845b3570c 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -276,29 +276,6 @@ hdd_conn_get_connected_cipher_algo(hdd_station_ctx_t *pHddStaCtx, return fConnected; } -/** - * hdd_conn_get_connected_bss_type() - get current bss type - * @pHddStaCtx: pointer to global HDD Station context - * @pConnectedBssType: pointer to connected bss type - * - * Return: false if any errors encountered, true otherwise - */ -inline bool -hdd_conn_get_connected_bss_type(hdd_station_ctx_t *pHddStaCtx, - eMib_dot11DesiredBssType *pConnectedBssType) -{ - bool fConnected = false; - - fConnected = hdd_conn_get_connection_state(pHddStaCtx, NULL); - - if (pConnectedBssType) { - *pConnectedBssType = - pHddStaCtx->conn_info.connDot11DesiredBssType; - } - - return fConnected; -} - /** * hdd_conn_save_connected_bss_type() - set connected bss type * @pHddStaCtx: pointer to global HDD Station context -- cgit v1.2.3 From 6716a4ad9e2495e5b0a6b088a091767a784e5709 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Mon, 3 Oct 2016 15:36:23 -0700 Subject: qcacld-3.0: Remove obsolete connDot11DesiredBssType All users of connDot11DesiredBssType have been converted to better supported interfaces, so remove all traces of this field. Change-Id: Iabfc4642a500587abd1f10d4fbc3f9e88f627a83 CRs-Fixed: 1073739 --- core/hdd/inc/wlan_hdd_assoc.h | 6 ------ core/hdd/src/wlan_hdd_assoc.c | 36 ------------------------------------ 2 files changed, 42 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_assoc.h b/core/hdd/inc/wlan_hdd_assoc.h index 860a1e6fbe1f..f49cb125ed54 100644 --- a/core/hdd/inc/wlan_hdd_assoc.h +++ b/core/hdd/inc/wlan_hdd_assoc.h @@ -34,7 +34,6 @@ */ /* Include files */ -#include #include #include #include "ol_txrx_ctrl_api.h" @@ -149,10 +148,6 @@ struct hdd_conn_flag { /** * typedef connection_info_t - structure to store connection information * @connState: connection state of the NIC - * @connDot11DesiredBssType: BSS type of the current connection. - * Comes from the MIB at the time the connect request is issued - * in combination with the BssDescription from the - * associated entity * @bssId: BSSID * @SSID: SSID Info * @staId: Station ID @@ -182,7 +177,6 @@ struct hdd_conn_flag { */ typedef struct connection_info_s { eConnectionState connState; - eMib_dot11DesiredBssType connDot11DesiredBssType; struct qdf_mac_addr bssId; tCsrSSIDInfo SSID; uint8_t staId[MAX_PEERS]; diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index cf7845b3570c..e008534fb224 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -276,38 +276,6 @@ hdd_conn_get_connected_cipher_algo(hdd_station_ctx_t *pHddStaCtx, return fConnected; } -/** - * hdd_conn_save_connected_bss_type() - set connected bss type - * @pHddStaCtx: pointer to global HDD Station context - * @csr_roamBssType: bss type - * - * Return: none - */ -static inline void -hdd_conn_save_connected_bss_type(hdd_station_ctx_t *pHddStaCtx, - eCsrRoamBssType csr_roamBssType) -{ - switch (csr_roamBssType) { - case eCSR_BSS_TYPE_INFRASTRUCTURE: - pHddStaCtx->conn_info.connDot11DesiredBssType = - eMib_dot11DesiredBssType_infrastructure; - break; - - case eCSR_BSS_TYPE_IBSS: - case eCSR_BSS_TYPE_START_IBSS: - pHddStaCtx->conn_info.connDot11DesiredBssType = - eMib_dot11DesiredBssType_independent; - break; - - /** We will never set the BssType to 'any' when attempting a connection - so CSR should never send this back to us.*/ - case eCSR_BSS_TYPE_ANY: - default: - QDF_ASSERT(0); - break; - } -} - /** * hdd_remove_beacon_filter() - remove beacon filter * @adapter: Pointer to the hdd adapter @@ -920,8 +888,6 @@ hdd_conn_save_connect_info(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, } hdd_save_bss_info(pAdapter, pRoamInfo); } - /* save the connected BssType */ - hdd_conn_save_connected_bss_type(pHddStaCtx, eBssType); } /** @@ -1444,8 +1410,6 @@ static void hdd_conn_remove_connect_info(hdd_station_ctx_t *pHddStaCtx) qdf_mem_zero(&pHddStaCtx->conn_info.Keys, sizeof(tCsrKeys)); qdf_mem_zero(&pHddStaCtx->ibss_enc_key, sizeof(tCsrRoamSetKey)); - /* Set not-connected state */ - pHddStaCtx->conn_info.connDot11DesiredBssType = eCSR_BSS_TYPE_ANY; pHddStaCtx->conn_info.proxyARPService = 0; qdf_mem_zero(&pHddStaCtx->conn_info.SSID, sizeof(tCsrSSIDInfo)); -- cgit v1.2.3 From db6f9c45e2acbbcb2c32135f3dce0102d3d619d9 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Tue, 4 Oct 2016 09:47:18 -0700 Subject: qcacld-3.0: Remove obsolete wlan_hdd_mib.h All in-code references to wlan_hdd_mib data structures have been removed from the driver, so delete the mib structure from the adapter context and the remove the header file itself. Change-Id: I774d16df363d069eae1616807ce6f80da4800bb4 CRs-Fixed: 1073739 --- core/hdd/inc/wlan_hdd_includes.h | 3 +- core/hdd/inc/wlan_hdd_main.h | 2 - core/hdd/inc/wlan_hdd_mib.h | 190 --------------------------------------- 3 files changed, 1 insertion(+), 194 deletions(-) delete mode 100644 core/hdd/inc/wlan_hdd_mib.h diff --git a/core/hdd/inc/wlan_hdd_includes.h b/core/hdd/inc/wlan_hdd_includes.h index cb2e63e85830..4eead672404f 100644 --- a/core/hdd/inc/wlan_hdd_includes.h +++ b/core/hdd/inc/wlan_hdd_includes.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2014, 2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -54,7 +54,6 @@ #include #include #include "wlan_hdd_assoc.h" -#include "wlan_hdd_mib.h" #include "wlan_hdd_wext.h" #include "wlan_hdd_main.h" #include "wlan_hdd_tx_rx.h" diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 577f1f9d84e0..16dcc8cc01b4 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -905,8 +905,6 @@ struct hdd_adapter_s { hdd_stats_t hdd_stats; /** linkspeed statistics */ tSirLinkSpeedInfo ls_stats; - /**Mib information*/ - sHddMib_t hdd_mib; uint8_t sessionId; diff --git a/core/hdd/inc/wlan_hdd_mib.h b/core/hdd/inc/wlan_hdd_mib.h deleted file mode 100644 index 6d9482d7708e..000000000000 --- a/core/hdd/inc/wlan_hdd_mib.h +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -#if !defined(WLAN_HDD_MIB_h__) -#define WLAN_HDD_MIB_h__ - -#include - -typedef enum { - eMib_dot11DesiredBssType_infrastructure = 1, - eMib_dot11DesiredBssType_independent = 2, - eMib_dot11DesiredBssType_infra_ap = 3, - eMib_dot11DesiredBssType_any = 4 -} eMib_dot11DesiredBssType; - -/** This is the maximum number of BSSIDs supported in the - dot11DesiredBssidList. All the code operates off of - this maximum BSSID list count. */ -#define MIB_DOT11_DESIRED_BSSID_LIST_MAX_COUNT 1 - -typedef struct { - uint32_t cEntries; - - struct qdf_mac_addr BSSIDs[MIB_DOT11_DESIRED_BSSID_LIST_MAX_COUNT]; - -} sMib_dot11DesiredBssidList; - -/** This is the maximum number of SSIDs supported in the - dot11DesiredSsidList. All the code operates off of - this maximum SSID list count. */ - -#define MIB_DOT11_DESIRED_SSID_LIST_MAX_COUNT 1 - -#define MIB_DOT11_SSID_MAX_LENGTH 32 - -typedef struct { - uint32_t ssidLength; - uint8_t ssid[MIB_DOT11_SSID_MAX_LENGTH]; - -} sDot11Ssid; - -typedef struct { - uint32_t cEntries; - - sDot11Ssid SSIDs[MIB_DOT11_DESIRED_SSID_LIST_MAX_COUNT]; - -} sMib_dot11DesiredSsidList; - -typedef enum { - /* these are bitmasks.... */ - eMib_dot11AutoConfigEnabled_None = 0U, - eMib_dot11AutoConfigEnabled_Phy = 0x00000001U, - eMib_dot11AutoConfigEnabled_Mac = 0x00000002U -} eMib_dot11AutoConfigEnabled; - -#define MIB_DOT11_SUPPORTED_PHY_TYPES_MAX_COUNT 3 - -typedef enum tagMib_dot11PhyType { - eMib_dot11PhyType_11b, - eMib_dot11PhyType_11a, - eMib_dot11PhyType_11g, - eMib_dot11PhyType_all -} eMib_dot11PhyType; - -typedef struct tagMib_dot11SupportedPhyTypes { - uint32_t cEntries; - eMib_dot11PhyType phyTypes[MIB_DOT11_SUPPORTED_PHY_TYPES_MAX_COUNT]; -} sMib_dot11SupportedPhyTypes; - -typedef enum { - eMib_DevicePowerState_D0, - eMib_DevicePowerState_D1, - eMib_DevicePowerState_D2, - eMib_DevicePowerState_D3 -} eMib_DevicePowerState; - -typedef enum { - eMib_dot11NICPowerState_OFF = false, - eMib_dot11NICPowerState_ON = true -} eMib_dot11NICPowerState; - -typedef enum { - eMib_dot11HardwarePHYState_OFF = false, - eMib_dot11HardwarePHYState_ON = true -} eMib_dot11HardwarePHYState; - -typedef enum { - eMib_dot11PowerSavingLevel_None, - eMib_dot11PowerSavingLevel_MaxPS, - eMib_dot11PowerSavingLevel_FastPS, - eMib_dot11PowerSavingLevel_MaximumLevel -} eMib_dot11PowerSavingLevel; - -#define MIB_DOT11_MAC_EXCLUSION_LIST_MAX_COUNT 4 -typedef struct { - uint32_t cEntries; - - struct qdf_mac_addr macAddrs[MIB_DOT11_MAC_EXCLUSION_LIST_MAX_COUNT]; - -} sMib_dot11MacExcludeList; - -#define MIB_DOT11_PRIVACY_EXEMPT_LIST_MAX_COUNT 32 - -typedef enum { - eMib_dot11ExemptionAction_Always, - eMib_dot11ExemptionAction_OnKeyMapUnavailable -} eMib_dot11ExemptAction; - -typedef enum { - eMib_dot11ExemptPacket_Unicast, - eMib_dot11ExemptPacket_Multicast, - eMib_dot11ExemptPacket_Both -} eMib_dot11ExemptPacket; - -typedef struct { - uint16_t uEtherType; - eMib_dot11ExemptAction exemptAction; - eMib_dot11ExemptPacket exemptPacket; - -} sMib_dot11PrivacyExemption; - -typedef struct { - uint32_t cEntries; - - sMib_dot11PrivacyExemption - privacyExemptList[MIB_DOT11_PRIVACY_EXEMPT_LIST_MAX_COUNT]; - -} sMib_dot11PrivacyExemptionList; - -typedef struct sHddMib_s { - eMib_dot11DesiredBssType mibDot11DesiredBssType; - - sMib_dot11DesiredBssidList mibDot11DesiredBssidList; - - sMib_dot11DesiredSsidList mibDot11DesiredSsidList; - - eMib_dot11AutoConfigEnabled mibDot11AutoConfigEnabled; - - /* the device power state for the device (the D-state... you know D0, D1, D2, etc. */ - eMib_DevicePowerState mibDevicePowerState; - - /* dot11NICPowerState is really the on/off state of the PHY. This can be */ - /* mamipulated through OIDs like a software control for radio on/off. */ - eMib_dot11NICPowerState mibDot11NICPowerState; - - /* Hardware PHY state is the on/off state of the hardware PHY. */ - eMib_dot11HardwarePHYState mibDot11HardwarePHYState; - - /* dot11 Power Saving level is the 802.11 power saving level/state for the 802.11 */ - /* NIC. Typically this is mapped to 802.11 BMPS in some fashion. We are not going */ - /* to disappoint; the Libra NIC maps these to different BMPS settings. */ - eMib_dot11PowerSavingLevel mibDot11PowerSavingLevel; - - sMib_dot11MacExcludeList mibDot11MacExcludeList; - - sMib_dot11PrivacyExemptionList mibDot11PrivacyExemptionList; - - sMib_dot11SupportedPhyTypes mibDot11SupportedPhyTypes; - eMib_dot11PhyType mibDot11CurrentPhyType; - - bool dot11IbssJoinOnly; - bool HiddenNetworkEnabled; - -} sHddMib_t; - -#endif -- cgit v1.2.3 From 489e79b0995b32fbd2371f591ad46a4ed42e4c6b Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 6 Oct 2016 08:14:45 -0700 Subject: Release 5.1.0.29O Release 5.1.0.29O Change-Id: Idb4a6f647a160cf9d76a98f1ff59a0542598eb08 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 5d9329269101..7f016007b400 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 29 -#define QWLAN_VERSIONSTR "5.1.0.29N" +#define QWLAN_VERSIONSTR "5.1.0.29O" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 47d2926b35b27a2d13f3c287be6049e2da09dac2 Mon Sep 17 00:00:00 2001 From: Hanumanth Reddy Pothula Date: Mon, 3 Oct 2016 16:08:04 +0530 Subject: qcacld-3.0: In FTM mode, don't update config param, max peer limit Presently, driver configuration from FTM mode to any other mode is failing due to start module is failing, because configuration parameter(max peer limit) is set to zero during FTM mode initialization. In FTM mode, during start modules, don't update configuration parameter, max peer limit. Change-Id: Ie5adea45b2dac099e797a1e25536cc959f3d5525 CRs-Fixed: 1073593 --- core/cds/src/cds_api.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index bcc146f1e1d4..0e6974a782ee 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -323,7 +323,13 @@ QDF_STATUS cds_open(void) * and keeps correct limit in cds_cfg.max_station. So, make sure * config entry pHddCtx->config->maxNumberOfPeers has adjusted value */ - pHddCtx->config->maxNumberOfPeers = cds_cfg->max_station; + /* In FTM mode cds_cfg->max_stations will be zero. On updating same + * into hdd context config entry, leads to pe_open() to fail, if + * con_mode change happens from FTM mode to any other mode. + */ + if (DRIVER_TYPE_PRODUCTION == cds_cfg->driver_type) + pHddCtx->config->maxNumberOfPeers = cds_cfg->max_station; + HTCHandle = cds_get_context(QDF_MODULE_ID_HTC); if (!HTCHandle) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, -- cgit v1.2.3 From 45d62ce21f37326e767d0ac588cca3913659cd3e Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 6 Oct 2016 11:24:31 -0700 Subject: Release 5.1.0.29P Release 5.1.0.29P Change-Id: I290bcc4977b1c9267c4885750a1707386605be18 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 7f016007b400..dd570f3ff273 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 29 -#define QWLAN_VERSIONSTR "5.1.0.29O" +#define QWLAN_VERSIONSTR "5.1.0.29P" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From 9bb2e85aff1b93205f5a82e636d5dcea9289b116 Mon Sep 17 00:00:00 2001 From: Rajeev Kumar Date: Sat, 24 Sep 2016 12:29:25 -0700 Subject: qcacld-3.0: Power offload unit test framework enhancements Recently host power offload suspend/resume has switched to 3 stage process. Enhance power offload unit test framework accordingly, and improve error handling. Change-Id: I8cc1e955fbaca631ee7fd76b0c907d1e68c836bf CRs-Fixed: 1072423 --- core/hdd/inc/wlan_hdd_driver_ops.h | 2 + core/hdd/inc/wlan_hdd_power.h | 22 ++++++ core/hdd/src/wlan_hdd_power.c | 157 +++++++++++++++++++++++++++++++++++++ core/hdd/src/wlan_hdd_wext.c | 40 +--------- core/pld/inc/pld_common.h | 3 + 5 files changed, 188 insertions(+), 36 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_driver_ops.h b/core/hdd/inc/wlan_hdd_driver_ops.h index 3ea44449b55c..f919e8decf1c 100644 --- a/core/hdd/inc/wlan_hdd_driver_ops.h +++ b/core/hdd/inc/wlan_hdd_driver_ops.h @@ -38,7 +38,9 @@ int wlan_hdd_register_driver(void); void wlan_hdd_unregister_driver(void); int wlan_hdd_bus_suspend(pm_message_t state); +int wlan_hdd_bus_suspend_noirq(void); int wlan_hdd_bus_resume(void); +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, enum qdf_bus_type bus_type, bool reinit); diff --git a/core/hdd/inc/wlan_hdd_power.h b/core/hdd/inc/wlan_hdd_power.h index e173d4f517db..61f4d6d490c9 100644 --- a/core/hdd/inc/wlan_hdd_power.h +++ b/core/hdd/inc/wlan_hdd_power.h @@ -200,4 +200,26 @@ void hdd_wlan_suspend_resume_event(uint8_t state) {} #endif /* FEATURE_WLAN_DIAG_SUPPORT */ +/* + * Unit-test suspend/resume is a testing feature that allows putting firmware + * into WoW suspend irrespective of Apps suspend status. It emulates the chain + * of events that occur durring normal system-level suspend/resume, such as + * initiating all of the suspend/resume stages in the correct order, and + * enabling/disabling appropriate copy engine irqs. + */ +#ifdef WLAN_SUSPEND_RESUME_TEST +int hdd_wlan_fake_apps_resume(struct wiphy *wiphy); +int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy); +#else +static inline int hdd_wlan_fake_apps_resume(struct wiphy *wiphy) +{ + return 0; +} + +static inline int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy) +{ + return 0; +} +#endif /* WLAN_SUSPEND_RESUME_TEST */ + #endif /* __WLAN_HDD_POWER_H */ diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 7e82be6f9ae7..26e5f6641987 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -74,6 +74,7 @@ #include "cds_concurrency.h" #include "cdp_txrx_flow_ctrl_v2.h" #include "pld_common.h" +#include "wlan_hdd_driver_ops.h" /* Preprocessor definitions and constants */ #define HDD_SSR_BRING_UP_TIME 30000 @@ -2349,3 +2350,159 @@ int hdd_set_qpower_config(hdd_context_t *hddctx, hdd_adapter_t *adapter, } return 0; } + +#ifdef WLAN_SUSPEND_RESUME_TEST +/* + * On Rome/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 +#define CE_WAKE_IRQ 2 +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_irq_callback() - Irq callback function for resuming + * from unit-test initiated suspend from irq wakeup signal + * @val: interrupt val + * + * Resume wlan after getting very 1st CE interrupt from target + * + * Return: none + */ +static void hdd_wlan_fake_apps_resume_irq_callback(uint32_t val) +{ + hdd_info("Trigger unit-test resume WLAN; val: 0x%x", val); + + QDF_BUG(g_wiphy); + __hdd_wlan_fake_apps_resume(g_wiphy); + 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); + struct hif_opaque_softc *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); + pm_message_t state; + int i, resume_err, suspend_err; + + hdd_info("Unit-test suspend WLAN"); + if (test_and_set_bit(HDD_FA_SUSPENDED_BIT, &fake_apps_state)) { + hdd_info("Already unit-test suspended; Nothing to do"); + return 0; + } + + suspend_err = wlan_hdd_cfg80211_suspend_wlan(wiphy, NULL); + if (suspend_err) + goto resume_done; + + state.event = PM_EVENT_SUSPEND; + suspend_err = wlan_hdd_bus_suspend(state); + if (suspend_err) + goto cfg80211_resume; + + /* simulate kernel disabling irqs */ + for (i = 0; i < CE_IRQ_COUNT; i++) + pld_disable_irq(qdf_dev->dev, i); + + suspend_err = wlan_hdd_bus_suspend_noirq(); + if (suspend_err) + goto enable_irqs_and_bus_resume; + + /* re-enable wake irq */ + pld_enable_irq(qdf_dev->dev, CE_WAKE_IRQ); + + /* pass wiphy to callback via global variable */ + g_wiphy = wiphy; + hif_fake_apps_suspend(hif_ctx, hdd_wlan_fake_apps_resume_irq_callback); + + return 0; + +enable_irqs_and_bus_resume: + /* re-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); + +cfg80211_resume: + resume_err = wlan_hdd_cfg80211_resume_wlan(wiphy); + QDF_BUG(resume_err == 0); + +resume_done: + clear_bit(HDD_FA_SUSPENDED_BIT, &fake_apps_state); + hdd_err("Unit-test suspend failed: %d", suspend_err); + 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); + + return 0; +} +#endif diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 9992c4b41a8d..397bdcd2d019 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -92,6 +92,7 @@ #ifdef WLAN_SUSPEND_RESUME_TEST #include "wlan_hdd_driver_ops.h" #include "hif.h" +#include "pld_common.h" #endif #define HDD_FINISH_ULA_TIME_OUT 800 @@ -439,10 +440,9 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { #define WE_ENABLE_FW_PROFILE 4 #define WE_SET_FW_PROFILE_HIST_INTVL 5 -#ifdef WLAN_SUSPEND_RESUME_TEST +/* Private sub-ioctl for initiating WoW suspend without Apps suspend */ #define WE_SET_WLAN_SUSPEND 6 #define WE_SET_WLAN_RESUME 7 -#endif /* (SIOCIWFIRSTPRIV + 29) is currently unused */ @@ -9782,25 +9782,6 @@ static int wlan_hdd_set_mon_chan(hdd_adapter_t *adapter, uint32_t chan, return qdf_status_to_os_return(status); } -#ifdef WLAN_SUSPEND_RESUME_TEST -static void *g_wiphy; - -/** - * hdd_wlan_trigger_resume() - resume wlan - * @val: interrupt val - * - * Resume wlan after getting very 1st CE interrupt from target - * - * Return: none - */ -static void hdd_wlan_trigger_resume(uint32_t val) -{ - hdd_err("Resume WLAN val 0x%x", val); - wlan_hdd_bus_resume(); - wlan_hdd_cfg80211_resume_wlan(g_wiphy); -} -#endif - static int __iw_set_two_ints_getnone(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) @@ -9810,10 +9791,6 @@ static int __iw_set_two_ints_getnone(struct net_device *dev, int sub_cmd = value[0]; int ret; hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); -#ifdef WLAN_SUSPEND_RESUME_TEST - pm_message_t state; -#endif - ENTER_DEV(dev); @@ -9877,21 +9854,12 @@ static int __iw_set_two_ints_getnone(struct net_device *dev, case WE_SET_MON_MODE_CHAN: ret = wlan_hdd_set_mon_chan(pAdapter, value[1], value[2]); break; -#ifdef WLAN_SUSPEND_RESUME_TEST case WE_SET_WLAN_SUSPEND: - hdd_err("Suspend WLAN"); - g_wiphy = hdd_ctx->wiphy; - state.event = PM_EVENT_SUSPEND; - ret = wlan_hdd_cfg80211_suspend_wlan(hdd_ctx->wiphy, NULL); - wlan_hdd_bus_suspend(state); - hif_fake_apps_suspend(hdd_wlan_trigger_resume); + ret = hdd_wlan_fake_apps_suspend(hdd_ctx->wiphy); break; case WE_SET_WLAN_RESUME: - hdd_err("Resume WLAN"); - wlan_hdd_bus_resume(); - ret = wlan_hdd_cfg80211_resume_wlan(hdd_ctx->wiphy); + ret = hdd_wlan_fake_apps_resume(hdd_ctx->wiphy); break; -#endif default: hdd_err("Invalid IOCTL command %d", sub_cmd); break; diff --git a/core/pld/inc/pld_common.h b/core/pld/inc/pld_common.h index bcf647b0b1a4..4bb77b27cb94 100644 --- a/core/pld/inc/pld_common.h +++ b/core/pld/inc/pld_common.h @@ -379,4 +379,7 @@ 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 a546aea62da119ab885cf36501951e8365f304b3 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 08:32:06 -0700 Subject: Release 5.1.0.29Q Release 5.1.0.29Q Change-Id: I3faed7c8d2e5e2c6b331ea79a8ac3e988c542579 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 dd570f3ff273..08e825f6b615 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 "P" +#define QWLAN_VERSION_EXTRA "Q" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29P" +#define QWLAN_VERSIONSTR "5.1.0.29Q" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From d60bde2bb6d1ffb4716149821069d5cd8c98f8f3 Mon Sep 17 00:00:00 2001 From: Nitesh Shah Date: Thu, 29 Sep 2016 17:24:09 +0530 Subject: qcacld-3.0: Move a cds log to appropriate log level A cds log for cds_get_channel_list() is printing quite often and spamming the kernel logs. This log is not for error. Hence moving this to appropriate log level. Change-Id: I5d037f47729b612d6754e64f46b627998ec026f8 CRs-Fixed: 1072651 --- core/cds/src/cds_concurrency.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 946dc819b45a..76831e3d58ca 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -4644,7 +4644,7 @@ QDF_STATUS cds_get_channel_list(enum cds_pcl_type pcl, if (CDS_NONE == pcl) { /* msg */ - cds_err("pcl is 0"); + cds_info("pcl is 0"); return QDF_STATUS_SUCCESS; } /* get the channel list for current domain */ -- cgit v1.2.3 From 877ad5d74dc92cd3ad9ac1206fb8da9da1825c92 Mon Sep 17 00:00:00 2001 From: Nitesh Shah Date: Thu, 22 Sep 2016 19:27:58 +0530 Subject: qcacld-3.0: Update hw_mode_list as per WMI_SERVICE_READY_EXT_EVENT Driver updates its hw_mode_list entries as per hw_mode_list given by firmware during WMI_SERVICE_READY_EVENT. The enhancement is to update hw_mode_list entries in the driver using the values received in WMI_SERVICE_READY_EXT_EVENT from the firmware. Change-Id: I5e4d97523cb7fd018767d5d2fda841f03b2406f6 CRs-Fixed: 1070005 --- core/wma/inc/wma.h | 12 +++ core/wma/inc/wma_api.h | 2 - core/wma/src/wma_main.c | 205 ++++++++++++++++++++++++++++++++++++++++++++++- core/wma/src/wma_utils.c | 97 ++-------------------- 4 files changed, 221 insertions(+), 95 deletions(-) diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index f22aea6dac5d..c1be1096a6f2 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -1070,6 +1070,18 @@ struct dbs_hw_mode_info { uint32_t *hw_mode_list; }; +/** + * struct mac_ss_bw_info - hw_mode_list PHY/MAC params for each MAC + * @mac_tx_stream: Max TX stream + * @mac_rx_stream: Max RX stream + * @mac_bw: Max bandwidth + */ +struct mac_ss_bw_info { + uint32_t mac_tx_stream; + uint32_t mac_rx_stream; + uint32_t mac_bw; +}; + /* Current HTC credit is 2, pool size of 50 is sufficient */ #define WMI_DESC_POOL_MAX 50 diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index ecbead7e438f..0f2355335324 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -192,7 +192,6 @@ 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); bool wma_is_hw_dbs_capable(void); -bool wma_is_hw_agile_dfs_capable(void); int8_t wma_get_mac_id_of_vdev(uint32_t vdev_id); void wma_update_intf_hw_mode_params(uint32_t vdev_id, uint32_t mac_id, uint32_t cfgd_hw_mode_index); @@ -202,7 +201,6 @@ void wma_set_dbs_capability_ut(uint32_t dbs); QDF_STATUS wma_get_dbs_hw_modes(bool *one_by_one_dbs, bool *two_by_two_dbs); QDF_STATUS wma_get_current_hw_mode(struct sir_hw_mode_params *hw_mode); bool wma_is_dbs_enable(void); -bool wma_is_agile_dfs_enable(void); QDF_STATUS wma_get_updated_scan_config(uint32_t *scan_config, bool dbs_scan, bool dbs_plus_agile_scan, diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 296bbe3bda9d..ef657c461bab 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -4159,9 +4159,8 @@ void wma_dump_dbs_hw_mode(tp_wma_handle wma_handle) 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 Agile DFS:%d", __func__, i, - WMI_DBS_HW_MODE_DBS_MODE_GET(param), - WMI_DBS_HW_MODE_AGILE_DFS_GET(param)); + WMA_LOGA("%s:[%d] DBS:%d", __func__, i, + WMI_DBS_HW_MODE_DBS_MODE_GET(param)); } } @@ -4800,6 +4799,200 @@ static void wma_print_populate_soc_caps(t_wma_handle *wma_handle) WMA_LOGI("%s: <====== HW mode cap printing ends ======>\n", __func__); } +/** + * wma_map_wmi_channel_width_to_hw_mode_bw() - returns bandwidth + * in terms of hw_mode_bandwidth + * @width: bandwidth in terms of wmi_channel_width + * + * This function returns the bandwidth in terms of hw_mode_bandwidth. + * + * Return: BW in terms of hw_mode_bandwidth. + */ +enum hw_mode_bandwidth wma_map_wmi_channel_width_to_hw_mode_bw( + wmi_channel_width width) +{ + switch (width) { + case WMI_CHAN_WIDTH_20: + return HW_MODE_20_MHZ; + case WMI_CHAN_WIDTH_40: + return HW_MODE_40_MHZ; + case WMI_CHAN_WIDTH_80: + return HW_MODE_80_MHZ; + case WMI_CHAN_WIDTH_160: + return HW_MODE_160_MHZ; + case WMI_CHAN_WIDTH_80P80: + return HW_MODE_80_PLUS_80_MHZ; + case WMI_CHAN_WIDTH_5: + return HW_MODE_5_MHZ; + case WMI_CHAN_WIDTH_10: + return HW_MODE_10_MHZ; + default: + return HW_MODE_BW_NONE; + } + + return HW_MODE_BW_NONE; +} + +/** + * wma_get_hw_mode_params() - get TX-RX stream and bandwidth + * supported from the capabilities. + * @caps: PHY capability + * @info: param to store TX-RX stream and BW information + * + * This function will calculate TX-RX stream and bandwidth supported + * as per the PHY capability, and assign to mac_ss_bw_info. + * + * Return: none + */ +static void wma_get_hw_mode_params(WMI_MAC_PHY_CAPABILITIES *caps, + struct mac_ss_bw_info *info) +{ + if (!caps) { + WMA_LOGE("%s: Invalid capabilities", __func__); + return; + } + + info->mac_tx_stream = wma_get_num_of_setbits_from_bitmask( + QDF_MAX(caps->tx_chain_mask_2G, + caps->tx_chain_mask_5G)); + info->mac_rx_stream = wma_get_num_of_setbits_from_bitmask( + QDF_MAX(caps->rx_chain_mask_2G, + caps->rx_chain_mask_5G)); + info->mac_bw = wma_map_wmi_channel_width_to_hw_mode_bw( + QDF_MAX(caps->max_bw_supported_2G, + caps->max_bw_supported_5G)); +} + +/** + * wma_set_hw_mode_params() - sets TX-RX stream, bandwidth and + * DBS in hw_mode_list + * @wma_handle: pointer to wma global structure + * @mac0_ss_bw_info: TX-RX streams, BW for MAC0 + * @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 + * + * This function sets TX-RX stream, bandwidth and DBS mode in + * hw_mode_list. + * + * Return: none + */ +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) +{ + WMI_DBS_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_handle->hw_mode.hw_mode_list[pos], + mac0_ss_bw_info.mac_rx_stream); + WMI_DBS_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_handle->hw_mode.hw_mode_list[pos], + mac1_ss_bw_info.mac_tx_stream); + WMI_DBS_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_handle->hw_mode.hw_mode_list[pos], + mac1_ss_bw_info.mac_bw); + WMI_DBS_HW_MODE_DBS_MODE_SET( + wma_handle->hw_mode.hw_mode_list[pos], + dbs_mode); + WMI_DBS_HW_MODE_AGILE_DFS_SET( + wma_handle->hw_mode.hw_mode_list[pos], + 0); +} + +/** + * wma_update_hw_mode_list() - updates hw_mode_list + * @wma_handle: pointer to wma global structure + * + * This function updates hw_mode_list with tx_streams, rx_streams, + * bandwidth, dbs and agile dfs for each hw_mode. + * + * Returns: 0 for success else failure. + */ +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; + struct mac_ss_bw_info mac0_ss_bw_info = {0}; + struct mac_ss_bw_info mac1_ss_bw_info = {0}; + + if (!wma_handle) { + WMA_LOGE("%s: Invalid wma handle", __func__); + return QDF_STATUS_E_FAILURE; + } + + phy_caps = &wma_handle->phy_caps; + if (!phy_caps) { + WMA_LOGE("%s: Invalid phy capabilities", __func__); + return QDF_STATUS_SUCCESS; + } + + if (!phy_caps->num_hw_modes.num_hw_modes) { + WMA_LOGE("%s: Number of HW modes: %d", + __func__, phy_caps->num_hw_modes.num_hw_modes); + return QDF_STATUS_SUCCESS; + } + + /* + * This list was updated as part of service ready event. Re-populate + * HW mode list from the device capabilities. + */ + if (wma_handle->hw_mode.hw_mode_list) { + qdf_mem_free(wma_handle->hw_mode.hw_mode_list); + wma_handle->hw_mode.hw_mode_list = NULL; + WMA_LOGI("%s: DBS list is freed", __func__); + } + + wma_handle->num_dbs_hw_modes = phy_caps->num_hw_modes.num_hw_modes; + wma_handle->hw_mode.hw_mode_list = + qdf_mem_malloc(sizeof(*wma_handle->hw_mode.hw_mode_list) * + wma_handle->num_dbs_hw_modes); + if (!wma_handle->hw_mode.hw_mode_list) { + WMA_LOGE("%s: Memory allocation failed for DBS", __func__); + return QDF_STATUS_E_FAILURE; + } + + WMA_LOGA("%s: Updated HW mode list: Num modes:%d", + __func__, wma_handle->num_dbs_hw_modes); + + for (i = 0; i < wma_handle->num_dbs_hw_modes; i++) { + /* Update for MAC0 */ + tmp = &phy_caps->each_phy_cap_per_hwmode[j++]; + 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; + mac1_ss_bw_info.mac_tx_stream = 0; + mac1_ss_bw_info.mac_rx_stream = 0; + mac1_ss_bw_info.mac_bw = 0; + + /* SBS and DBS have dual MAC. Upto 2 MACs are considered. */ + if ((hw_config_type == WMI_HW_MODE_DBS) || + (hw_config_type == WMI_HW_MODE_SBS_PASSIVE) || + (hw_config_type == WMI_HW_MODE_SBS)) { + /* 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; + } + + /* Updating HW mode list */ + wma_set_hw_mode_params(wma_handle, mac0_ss_bw_info, + mac1_ss_bw_info, i, dbs_mode); + } + wma_dump_dbs_hw_mode(wma_handle); + return QDF_STATUS_SUCCESS; +} + /** * wma_populate_soc_caps() - populate entire SOC's capabilities * @wma_handle: pointer to wma global structure @@ -4988,6 +5181,12 @@ int wma_rx_service_ready_ext_event(void *handle, uint8_t *event, } wma_populate_soc_caps(wma_handle, param_buf); + ret = wma_update_hw_mode_list(wma_handle); + if (QDF_IS_STATUS_ERROR(ret)) { + WMA_LOGE("Failed to update hw mode list"); + return -EINVAL; + } + WMA_LOGA("WMA --> WMI_INIT_CMDID"); status = wmi_unified_send_saved_init_cmd(wma_handle->wmi_handle); if (status != EOK) diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index 945e139adfc2..b4aab11b8e34 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -2572,7 +2572,12 @@ static int8_t wma_get_matching_hw_mode_index(tp_wma_handle wma, t_mac0_bw = WMI_DBS_HW_MODE_MAC0_BANDWIDTH_GET( wma->hw_mode.hw_mode_list[i]); - if (t_mac0_bw != mac0_bw) + /* + * Firmware advertises max bw capability as CBW 80+80 + * for single MAC. Thus CBW 20/40/80 should also be + * supported, if CBW 80+80 is supported. + */ + if (t_mac0_bw < mac0_bw) continue; t_mac1_tx_ss = WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET( @@ -2587,7 +2592,7 @@ static int8_t wma_get_matching_hw_mode_index(tp_wma_handle wma, t_mac1_bw = WMI_DBS_HW_MODE_MAC1_BANDWIDTH_GET( wma->hw_mode.hw_mode_list[i]); - if (t_mac1_bw != mac1_bw) + if (t_mac1_bw < mac1_bw) continue; dbs_mode = WMI_DBS_HW_MODE_DBS_MODE_GET( @@ -2771,58 +2776,6 @@ bool wma_is_hw_dbs_capable(void) return false; } -/** - * wma_is_hw_agile_dfs_capable() - Check if HW is agile DFS capable - * - * Checks if the HW is agile DFS capable - * - * Return: true if the HW is agile DFS capable - */ -bool wma_is_hw_agile_dfs_capable(void) -{ - tp_wma_handle wma; - uint32_t param, i, found = 0; - - wma = cds_get_context(QDF_MODULE_ID_WMA); - if (!wma) { - WMA_LOGE("%s: Invalid WMA handle", __func__); - return false; - } - - if (!wma_is_agile_dfs_enable()) { - WMA_LOGI("%s: Agile DFS is disabled", __func__); - return false; - } - - WMA_LOGI("%s: DBS service bit map: %d", __func__, - WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, - WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT)); - - /* The agreement with FW is that to know if the target is Agile DFS - * capable, DBS needs to be supported in the service bit map and - * Agile DFS needs to be supported in the HW mode list - */ - if (!(WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, - WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT))) - return false; - - 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_AGILE_DFS_GET(param)) { - WMA_LOGI("%s: HW %d is agile DFS capable", - __func__, i); - found = 1; - break; - } - } - - if (found) - return true; - - return false; -} - /** * wma_get_mac_id_of_vdev() - Get MAC id corresponding to a vdev * @vdev_id: VDEV whose MAC ID is required @@ -3092,42 +3045,6 @@ bool wma_is_dbs_enable(void) return false; } -/** - * wma_is_agile_dfs_enable() - Check if master Agile DFS control is enabled - * - * Checks if the master Agile DFS control is enabled. This will be used - * to override any other Agile DFS capability - * - * Return: True if master Agile DFS control is enabled - */ -bool wma_is_agile_dfs_enable(void) -{ - tp_wma_handle wma; - - if (wma_is_dual_mac_disabled_in_ini()) - return false; - - wma = cds_get_context(QDF_MODULE_ID_WMA); - if (!wma) { - WMA_LOGE("%s: Invalid WMA handle", __func__); - return false; - } - - WMA_LOGD("%s: DFS=%d Single mac with DFS=%d", __func__, - WMI_DBS_FW_MODE_CFG_AGILE_DFS_GET( - wma->dual_mac_cfg.cur_fw_mode_config), - WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_GET( - wma->dual_mac_cfg.cur_scan_config)); - - if ((WMI_DBS_FW_MODE_CFG_AGILE_DFS_GET( - wma->dual_mac_cfg.cur_fw_mode_config)) && - (WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_GET( - wma->dual_mac_cfg.cur_scan_config))) - return true; - - return false; -} - /** * wma_get_updated_scan_config() - Get the updated scan configuration * @scan_config: Pointer containing the updated scan config -- cgit v1.2.3 From 4c48af3db1dc6b55004c1a3de102946e496626df Mon Sep 17 00:00:00 2001 From: Nitesh Shah Date: Mon, 3 Oct 2016 15:57:08 +0530 Subject: qcacld-3.0: Update BW for interface when moving to single MAC mode If the device is operating in MAC0 and MAC1. If the interface present is MAC0 is removed, the interface in MAC1 moves to MAC0. But the bandwidth for the interface is not updated properly. The fix is to update the bandwidth of the MAC1's interface when the MAC0's interface is removed, and is replaced by MAC1's interface. Change-Id: If114167f66d13a3660f9b92b72706bfc2e782b50 CRs-Fixed: 1073581 --- core/cds/src/cds_concurrency.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 76831e3d58ca..25155c2c18d5 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -4364,6 +4364,8 @@ QDF_STATUS cds_decr_connection_count(uint32_t vdev_id) conc_connection_list[next_conn_index].mac; conc_connection_list[conn_index].chan = conc_connection_list[next_conn_index].chan; + conc_connection_list[conn_index].bw = + conc_connection_list[next_conn_index].bw; conc_connection_list[conn_index].chain_mask = conc_connection_list[next_conn_index].chain_mask; conc_connection_list[conn_index].original_nss = -- cgit v1.2.3 From 81eb2b3f6e73487380d8d8e4e1673180d2902794 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 09:49:04 -0700 Subject: Release 5.1.0.29R Release 5.1.0.29R Change-Id: I7d4d89b51ab0e2e0b0b258c41fa14699cdfcb982 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 08e825f6b615..c5038b641024 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 "Q" +#define QWLAN_VERSION_EXTRA "R" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29Q" +#define QWLAN_VERSIONSTR "5.1.0.29R" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3 From a89d3b4d800423443c46b70aaa1e4ded851e2eff Mon Sep 17 00:00:00 2001 From: Bhargav Shah Date: Wed, 20 Apr 2016 13:04:56 +0530 Subject: qcacld-3.0: Avoid race condition when vdev is deleted qcacld-2.0 to qcacld-3.0 propagation If SME posts message to WMI after vdev_detach happens, there can be a race condition. In this case VDEV_SET_PARAM will be called after VDEV_DELETE. Fix this with introduction of new Boolean flag "is_vdev_valid" which will be true after VDEV_CREATE is done. This flag will be false when deletion of vdev happens. WMI will do VDEV_SET_PARAM only if "is_vdev_valid" true. Change-Id: Idffd0979bd9bdefa1225d2ea6a24180d81000f48 CRs-Fixed: 964146 --- core/wma/inc/wma.h | 1 + core/wma/src/wma_dev_if.c | 8 ++++++++ core/wma/src/wma_main.c | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index c1be1096a6f2..d2f86a0838ac 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -991,6 +991,7 @@ struct wma_txrx_node { uint8_t wep_default_key_idx; tSirHostOffloadReq arp_offload_req; tSirHostOffloadReq ns_offload_req; + bool is_vdev_valid; }; #if defined(QCA_WIFI_FTM) diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index d3d479e8f427..8813cbed84d2 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -546,6 +546,8 @@ static QDF_STATUS wma_handle_vdev_detach(tp_wma_handle wma_handle, if (!generate_rsp) { WMA_LOGE("Call txrx detach w/o callback for vdev %d", vdev_id); ol_txrx_vdev_detach(iface->handle, NULL, NULL); + iface->handle = NULL; + wma_handle->interfaces[vdev_id].is_vdev_valid = false; goto out; } @@ -573,6 +575,8 @@ static QDF_STATUS wma_handle_vdev_detach(tp_wma_handle wma_handle, } WMA_LOGD("Call txrx detach with callback for vdev %d", vdev_id); ol_txrx_vdev_detach(iface->handle, NULL, NULL); + iface->handle = NULL; + wma_handle->interfaces[vdev_id].is_vdev_valid = false; /* * send the response immediately if WMI_SERVICE_SYNC_DELETE_CMDS @@ -1525,6 +1529,7 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, tSirMacHTCapabilityInfo *phtCapInfo; cds_msg_t sme_msg = { 0 }; struct vdev_create_params params = { 0 }; + u_int8_t vdev_id; if (NULL == mac) { WMA_LOGE("%s: Failed to get mac", __func__); @@ -1547,6 +1552,8 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, goto end; } + vdev_id = self_sta_req->session_id; + txrx_vdev_type = wma_get_txrx_vdev_type(self_sta_req->type); if (wlan_op_mode_unknown == txrx_vdev_type) { @@ -1652,6 +1659,7 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, } } + wma_handle->interfaces[vdev_id].is_vdev_valid = true; ret = wma_vdev_set_param(wma_handle->wmi_handle, self_sta_req->session_id, WMI_VDEV_PARAM_MCC_RTSCTS_PROTECTION_ENABLE, diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index ef657c461bab..ebafc4418589 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -872,6 +872,11 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, switch (privcmd->param_vp_dev) { case VDEV_CMD: + if (!wma->interfaces[privcmd->param_vdev_id].is_vdev_valid) { + WMA_LOGE("%s Vdev id is not valid", __func__); + return ; + } + WMA_LOGD("vdev id %d pid %d pval %d", privcmd->param_vdev_id, privcmd->param_id, privcmd->param_value); ret = wma_vdev_set_param(wma->wmi_handle, -- cgit v1.2.3 From a71196710cedc2d56342b8f06f891aa254d4d8b7 Mon Sep 17 00:00:00 2001 From: "Padma, Santhosh Kumar" Date: Tue, 16 Aug 2016 16:05:14 +0530 Subject: qcacld-3.0: Set Tx/Rx aggregation size qcacld-2.0 to qcacld-3.0 propagation Add changes to set Tx/Rx aggregation size. Also, add ini parameters for Tx/Rx aggregation sizes. Change-Id: Ia5811bf7cf7081989fde5c8cdcca84b42120b90c CRs-Fixed: 990161 --- core/hdd/inc/wlan_hdd_cfg.h | 20 +++++++ core/hdd/src/wlan_hdd_cfg.c | 19 +++++++ core/hdd/src/wlan_hdd_cfg80211.c | 42 ++++++++++++++ core/hdd/src/wlan_hdd_cfg80211.h | 8 +++ core/mac/inc/sir_api.h | 12 ++++ core/mac/src/pe/lim/lim_process_mlm_req_messages.c | 4 ++ core/sme/inc/csr_api.h | 2 + core/sme/inc/csr_internal.h | 2 + core/sme/src/csr/csr_api_roam.c | 13 +++++ core/wma/inc/wma_api.h | 2 + core/wma/inc/wma_if.h | 4 ++ core/wma/src/wma_dev_if.c | 12 ++++ core/wma/src/wma_features.c | 65 ++++++++++++++++++++++ 13 files changed, 205 insertions(+) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index c0b065f4b761..a7408810cd73 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2822,6 +2822,24 @@ typedef enum { #define CFG_SELF_GEN_FRM_PWR_MAX (0xffff) #define CFG_SELF_GEN_FRM_PWR_DEFAULT (0) +/* + * gTxAggregationSize gives an option to configure Tx aggregation size + * in no of MPDUs. This can be useful in debugging throughput issues + */ +#define CFG_TX_AGGREGATION_SIZE "gTxAggregationSize" +#define CFG_TX_AGGREGATION_SIZE_MIN (0) +#define CFG_TX_AGGREGATION_SIZE_MAX (64) +#define CFG_TX_AGGREGATION_SIZE_DEFAULT (64) + +/* + * gRxAggregationSize gives an option to configure Rx aggregation size + * in no of MPDUs. This can be useful in debugging throughput issues + */ +#define CFG_RX_AGGREGATION_SIZE "gRxAggregationSize" +#define CFG_RX_AGGREGATION_SIZE_MIN (1) +#define CFG_RX_AGGREGATION_SIZE_MAX (64) +#define CFG_RX_AGGREGATION_SIZE_DEFAULT (64) + /* * fine timing measurement capability information * @@ -4163,6 +4181,8 @@ struct hdd_config { uint8_t sifs_burst_duration; bool goptimize_chan_avoid_event; bool enable_go_cts2self_for_sta; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; }; #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 d22a5f8bde3f..0c017df08a37 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -3985,6 +3985,20 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_OPTIMIZE_CA_EVENT_DEFAULT, CFG_OPTIMIZE_CA_EVENT_DISABLE, CFG_OPTIMIZE_CA_EVENT_ENABLE), + + REG_VARIABLE(CFG_TX_AGGREGATION_SIZE, WLAN_PARAM_Integer, + struct hdd_config, tx_aggregation_size, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TX_AGGREGATION_SIZE_DEFAULT, + CFG_TX_AGGREGATION_SIZE_MIN, + CFG_TX_AGGREGATION_SIZE_MAX), + + REG_VARIABLE(CFG_RX_AGGREGATION_SIZE, WLAN_PARAM_Integer, + struct hdd_config, rx_aggregation_size, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_RX_AGGREGATION_SIZE_DEFAULT, + CFG_RX_AGGREGATION_SIZE_MIN, + CFG_RX_AGGREGATION_SIZE_MAX), }; /** @@ -7154,6 +7168,11 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx) CSR_STA_ROAM_POLICY_DFS_ENABLED; smeConfig->csrConfig.sta_roam_policy_params.skip_unsafe_channels = 0; + smeConfig->csrConfig.tx_aggregation_size = + pHddCtx->config->tx_aggregation_size; + smeConfig->csrConfig.rx_aggregation_size = + pHddCtx->config->rx_aggregation_size; + status = sme_update_config(pHddCtx->hHal, smeConfig); if (!QDF_IS_STATUS_SUCCESS(status)) { hddLog(LOGE, "sme_update_config() return failure %d", diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 2e6c4af0de56..1d40f77e2804 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -3870,6 +3870,8 @@ wlan_hdd_wifi_config_policy[QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_CONFIG_STATS_AVG_FACTOR] = {.type = NLA_U16 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_GUARD_TIME] = {.type = NLA_U32 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_CHANNEL_AVOIDANCE_IND] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION] = {.type = NLA_U8 }, }; /** @@ -3938,6 +3940,8 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, bool vendor_ie_present = false, access_policy_present = false; uint16_t scan_ie_len = 0; uint8_t *scan_ie; + struct sir_set_tx_rx_aggregation_size request; + QDF_STATUS qdf_status; ENTER_DEV(dev); @@ -4096,6 +4100,44 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, } else ret_val = -EPERM; } + + if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION] || + tb[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION]) { + /* if one is specified, both must be specified */ + if (!tb[QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION] || + !tb[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION]) { + hdd_err("Both TX and RX MPDU Aggregation required"); + return -EINVAL; + } + + request.tx_aggregation_size = nla_get_u8( + tb[QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION]); + request.rx_aggregation_size = nla_get_u8( + tb[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION]); + request.vdev_id = adapter->sessionId; + + if (request.tx_aggregation_size >= + CFG_TX_AGGREGATION_SIZE_MIN && + request.tx_aggregation_size <= + CFG_TX_AGGREGATION_SIZE_MAX && + request.rx_aggregation_size >= + CFG_RX_AGGREGATION_SIZE_MIN && + request.rx_aggregation_size <= + CFG_RX_AGGREGATION_SIZE_MAX) { + qdf_status = wma_set_tx_rx_aggregation_size(&request); + if (qdf_status != QDF_STATUS_SUCCESS) { + hdd_err("failed to set aggr sizes err %d", + qdf_status); + ret_val = -EPERM; + } + } else { + hdd_err("TX %d RX %d MPDU aggr size not in range", + request.tx_aggregation_size, + request.rx_aggregation_size); + ret_val = -EINVAL; + } + } + return ret_val; } diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h index 80dbc428c50b..37fa4e6ab79a 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.h +++ b/core/hdd/src/wlan_hdd_cfg80211.h @@ -2319,6 +2319,10 @@ enum qca_access_policy { * @QCA_WLAN_VENDOR_ATTR_CONFIG_STATS_AVG_FACTOR: stats avg. factor * @QCA_WLAN_VENDOR_ATTR_CONFIG_GUARD_TIME: guard time * @QCA_WLAN_VENDOR_ATTR_CONFIG_FINE_TIME_MEASUREMENT: fine time measurement + * @QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION: + * Tx aggregation size (8-bit unsigned value) + * @QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION: + * Rx aggregation size (8-bit unsigned value) * @QCA_WLAN_VENDOR_ATTR_CONFIG_SCAN_DEFAULT_IES: Update the default scan IEs * @QCA_WLAN_VENDOR_ATTR_CONFIG_GENERIC_COMMAND: * Unsigned 32-bit value attribute for generic commands @@ -2349,6 +2353,10 @@ enum qca_wlan_vendor_config { QCA_WLAN_VENDOR_ATTR_CONFIG_FINE_TIME_MEASUREMENT, QCA_WLAN_VENDOR_ATTR_CONFIG_PENALIZE_AFTER_NCONS_BEACON_MISS, QCA_WLAN_VENDOR_ATTR_CONFIG_CHANNEL_AVOIDANCE_IND, + + QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION, + QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION, + /* Attribute used to set scan default IEs to the driver. * * These IEs can be used by scan operations that will be initiated by diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 362275c14bd3..b31a834a5399 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -6450,6 +6450,18 @@ struct sme_ndp_peer_ind { #endif /* WLAN_FEATURE_NAN_DATAPATH */ +/** + * struct sir_set_tx_rx_aggregation_size - sets tx rx aggregation size + * @vdev_id: vdev id of the session + * @tx_aggregation_size: Tx aggregation size + * @rx_aggregation_size: Rx aggregation size + */ +struct sir_set_tx_rx_aggregation_size { + uint8_t vdev_id; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; +}; + /** * struct sir_p2p_lo_start - p2p listen offload start * @vdev_id: vdev identifier diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c index 1c914142c3d6..09e5c52f867e 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c @@ -595,6 +595,10 @@ lim_mlm_add_bss(tpAniSirGlobal mac_ctx, if (QDF_IBSS_MODE == addbss_param->halPersona) { addbss_param->nss_2g = mac_ctx->vdev_type_nss_2g.ibss; addbss_param->nss_5g = mac_ctx->vdev_type_nss_5g.ibss; + addbss_param->tx_aggregation_size = + mac_ctx->roam.configParam.tx_aggregation_size; + addbss_param->rx_aggregation_size = + mac_ctx->roam.configParam.rx_aggregation_size; } lim_log(mac_ctx, LOG2, FL("dot11_mode:%d nss value:%d"), addbss_param->dot11_mode, addbss_param->nss); diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 47d654b8d06c..105682b6ed65 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1305,6 +1305,8 @@ typedef struct tagCsrConfigParam { enum wmi_dwelltime_adaptive_mode scan_adaptive_dwell_mode; enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode; struct csr_sta_roam_policy_params sta_roam_policy_params; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; } tCsrConfigParam; /* Tush */ diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index dd9dffafea2c..959a1ea019ed 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -666,6 +666,8 @@ typedef struct tagCsrConfig { enum wmi_dwelltime_adaptive_mode scan_adaptive_dwell_mode; enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode; struct csr_sta_roam_policy_params sta_roam_policy; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; } tCsrConfig; typedef struct tagCsrChannelPowerInfo { diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 74a0f586f26d..a401224bb099 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2518,6 +2518,11 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pMac->roam.configParam.sta_roam_policy.skip_unsafe_channels = pParam->sta_roam_policy_params.skip_unsafe_channels; + pMac->roam.configParam.tx_aggregation_size = + pParam->tx_aggregation_size; + pMac->roam.configParam.rx_aggregation_size = + pParam->rx_aggregation_size; + } return status; } @@ -2726,6 +2731,10 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pMac->roam.configParam.sta_roam_policy.dfs_mode; pParam->sta_roam_policy_params.skip_unsafe_channels = pMac->roam.configParam.sta_roam_policy.skip_unsafe_channels; + pParam->tx_aggregation_size = + pMac->roam.configParam.tx_aggregation_size; + pParam->rx_aggregation_size = + pMac->roam.configParam.rx_aggregation_size; return QDF_STATUS_SUCCESS; } @@ -15300,6 +15309,10 @@ QDF_STATUS csr_process_add_sta_session_command(tpAniSirGlobal pMac, add_sta_self_req->sub_type = pAddStaReq->subType; add_sta_self_req->nss_2g = nss_2g; add_sta_self_req->nss_5g = nss_5g; + add_sta_self_req->tx_aggregation_size = + pMac->roam.configParam.tx_aggregation_size; + add_sta_self_req->rx_aggregation_size = + pMac->roam.configParam.rx_aggregation_size; msg.type = WMA_ADD_STA_SELF_REQ; msg.reserved = 0; diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index 0f2355335324..295973ba2bc7 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -314,4 +314,6 @@ QDF_STATUS wma_encrypt_decrypt_msg(WMA_HANDLE wma, */ 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); #endif diff --git a/core/wma/inc/wma_if.h b/core/wma/inc/wma_if.h index 31939b60a393..ac553511ed98 100644 --- a/core/wma/inc/wma_if.h +++ b/core/wma/inc/wma_if.h @@ -514,6 +514,8 @@ typedef struct { uint8_t nss_2g; uint8_t nss_5g; uint8_t beacon_tx_rate; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; } tAddBssParams, *tpAddBssParams; /** @@ -1151,6 +1153,8 @@ struct add_sta_self_params { uint8_t nss_2g; uint8_t nss_5g; uint32_t status; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; }; /** diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 8813cbed84d2..6a7d2084b79c 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -1530,6 +1530,7 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, cds_msg_t sme_msg = { 0 }; struct vdev_create_params params = { 0 }; u_int8_t vdev_id; + struct sir_set_tx_rx_aggregation_size tx_rx_aggregation_size; if (NULL == mac) { WMA_LOGE("%s: Failed to get mac", __func__); @@ -1609,6 +1610,17 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, self_sta_req->self_mac_addr, sizeof(wma_handle->interfaces[self_sta_req->session_id]. addr)); + + tx_rx_aggregation_size.tx_aggregation_size = + self_sta_req->tx_aggregation_size; + tx_rx_aggregation_size.rx_aggregation_size = + self_sta_req->rx_aggregation_size; + tx_rx_aggregation_size.vdev_id = self_sta_req->session_id; + + status = wma_set_tx_rx_aggregation_size(&tx_rx_aggregation_size); + if (status != QDF_STATUS_SUCCESS) + WMA_LOGE("failed to set aggregation sizes(err=%d)", status); + switch (self_sta_req->type) { case WMI_VDEV_TYPE_STA: if (wlan_cfg_get_int(mac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 567ed6e7abe4..7bd92da1bd99 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -7918,6 +7918,71 @@ QDF_STATUS wma_set_bpf_instructions(tp_wma_handle wma, return QDF_STATUS_SUCCESS; } +/** + * wma_set_tx_rx_aggregation_size() - sets tx rx aggregation sizes + * @tx_rx_aggregation_size: aggregation size parameters + * + * This function sets tx rx aggregation sizes + * + * Return: VOS_STATUS_SUCCESS on success, error number otherwise + */ +QDF_STATUS wma_set_tx_rx_aggregation_size( + struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size) +{ + tp_wma_handle wma_handle; + wmi_vdev_set_custom_aggr_size_cmd_fixed_param *cmd; + int32_t len; + wmi_buf_t buf; + u_int8_t *buf_ptr; + int ret; + + wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + + if (!tx_rx_aggregation_size) { + WMA_LOGE("%s: invalid pointer", __func__); + return QDF_STATUS_E_INVAL; + } + + if (!wma_handle) { + WMA_LOGE("%s: WMA context is invald!", __func__); + return QDF_STATUS_E_INVAL; + } + + len = sizeof(*cmd); + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + + if (!buf) { + WMA_LOGE("%s: Failed allocate wmi buffer", __func__); + return QDF_STATUS_E_NOMEM; + } + + buf_ptr = (u_int8_t *) wmi_buf_data(buf); + cmd = (wmi_vdev_set_custom_aggr_size_cmd_fixed_param *) buf_ptr; + + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_vdev_set_custom_aggr_size_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_vdev_set_custom_aggr_size_cmd_fixed_param)); + + cmd->vdev_id = tx_rx_aggregation_size->vdev_id; + cmd->tx_aggr_size = tx_rx_aggregation_size->tx_aggregation_size; + cmd->rx_aggr_size = tx_rx_aggregation_size->rx_aggregation_size; + + WMA_LOGI("tx aggr: %d rx aggr: %d vdev: %d", + cmd->tx_aggr_size, cmd->rx_aggr_size, cmd->vdev_id); + + ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, + WMI_VDEV_SET_CUSTOM_AGGR_SIZE_CMDID); + if (ret) { + WMA_LOGE("%s: Failed to send aggregation size command", + __func__); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + /** * wma_p2p_lo_start() - P2P listen offload start * @params: p2p listen offload parameters -- cgit v1.2.3 From c846f3a36a4a0acb20551964b54826c7c460e863 Mon Sep 17 00:00:00 2001 From: "Kondabattini, Ganesh" Date: Wed, 5 Oct 2016 15:01:18 +0530 Subject: qcacld-3.0: Consider ACS override params only if ACS is enabled qcacld-2.0 to qcacld-3.0 propagation Consider the parameters 'acs_channel' and 'acs_dfs_mode' only when ACS is enabled for that SAP. Otherwise driver is going to override the channel even if user configures a fixed channel in hostapd.conf file. Change-Id: Ibe24828690ace91338ade10fd00c49fc4acdbd81 CRs-Fixed: 1026420 --- core/hdd/src/wlan_hdd_hostapd.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 94af9c09e7cf..5ca394f7fcb3 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -6942,10 +6942,21 @@ int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, pConfig->enOverLapCh = iniConfig->gEnableOverLapCh; pConfig->dtim_period = pBeacon->dtim_period; - if (pHddCtx->acs_policy.acs_channel) - pConfig->channel = pHddCtx->acs_policy.acs_channel; - mode = pHddCtx->acs_policy.acs_dfs_mode; - pConfig->acs_dfs_mode = wlan_hdd_get_dfs_mode(mode); + hdd_info("acs_mode %d", pConfig->acs_cfg.acs_mode); + + if (pConfig->acs_cfg.acs_mode == true) { + hdd_info("acs_channel %d, acs_dfs_mode %d", + pHddCtx->acs_policy.acs_channel, + pHddCtx->acs_policy.acs_dfs_mode); + + if (pHddCtx->acs_policy.acs_channel) + pConfig->channel = pHddCtx->acs_policy.acs_channel; + mode = pHddCtx->acs_policy.acs_dfs_mode; + pConfig->acs_dfs_mode = wlan_hdd_get_dfs_mode(mode); + } + + hdd_info("pConfig->channel %d, pConfig->acs_dfs_mode %d", + pConfig->channel, pConfig->acs_dfs_mode); hdd_info("****pConfig->dtim_period=%d***", pConfig->dtim_period); -- cgit v1.2.3 From 9aba02f52c9b4a0bac618e5b3974a8d19bd2d7ac Mon Sep 17 00:00:00 2001 From: "Padma, Santhosh Kumar" Date: Thu, 11 Aug 2016 16:30:25 +0530 Subject: qcacld-3.0: Dump driver information qcacld-2.0 to qcacld-3.0 propagation Dump state information of HDD, SME, PE and WMA layers into a buffer. Contents of this buffer will be copied into user space using proc entry /proc/debugdriver/ driverdump. Change-Id: Ifbb102e440d7df20defa1a397964cb9b55082bf9 CRs-Fixed: 955357 --- core/cds/src/cds_api.c | 1 + core/hdd/inc/wlan_hdd_main.h | 2 + core/hdd/inc/wlan_hdd_memdump.h | 18 ++++ core/hdd/src/wlan_hdd_main.c | 76 +++++++++++++ core/hdd/src/wlan_hdd_memdump.c | 234 ++++++++++++++++++++++++++++++++++++++++ core/mac/src/pe/lim/lim_api.c | 59 ++++++++++ core/sme/src/common/sme_api.c | 99 +++++++++++++++++ core/wma/src/wma_main.c | 142 ++++++++++++++++++++++++ 8 files changed, 631 insertions(+) diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 0e6974a782ee..43a8ea336611 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -101,6 +101,7 @@ v_CONTEXT_t cds_init(void) #if defined(TRACE_RECORD) qdf_trace_init(); #endif + qdf_register_debugcb_init(); cds_ssr_protect_init(); diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 16dcc8cc01b4..6f263d2b1b64 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1469,6 +1469,8 @@ struct hdd_context_s { bool memdump_in_progress; bool memdump_init_done; #endif /* WLAN_FEATURE_MEMDUMP */ + uint16_t driver_dump_size; + uint8_t *driver_dump_mem; bool connection_in_progress; qdf_spinlock_t connection_status_lock; diff --git a/core/hdd/inc/wlan_hdd_memdump.h b/core/hdd/inc/wlan_hdd_memdump.h index 529f4c772380..5e670fe72785 100644 --- a/core/hdd/inc/wlan_hdd_memdump.h +++ b/core/hdd/inc/wlan_hdd_memdump.h @@ -37,6 +37,10 @@ #include "wlan_hdd_main.h" +/* Assigned size of driver memory dump is 4096 bytes */ +#define DRIVER_MEM_DUMP_SIZE 4096 + + #ifdef WLAN_FEATURE_MEMDUMP /** * enum qca_wlan_vendor_attr_memory_dump - values for memory dump attributes @@ -72,6 +76,10 @@ int wlan_hdd_cfg80211_get_fw_mem_dump(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int data_len); void wlan_hdd_cfg80211_fw_mem_dump_cb(void *ctx, struct fw_dump_rsp *dump_rsp); + +int hdd_driver_memdump_init(void); +void hdd_driver_memdump_deinit(void); + #else static inline int memdump_init(void) { @@ -95,6 +103,16 @@ static inline void wlan_hdd_cfg80211_fw_mem_dump_cb(void *ctx, *dump_rsp) { } + +static inline int hdd_driver_memdump_init(void) +{ + return -ENOTSUPP; +} + +static inline void hdd_driver_memdump_deinit(void) +{ +} + #endif #endif /* if !defined(WLAN_HDD_MEMDUMP_H)*/ diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 47b3c6470000..fda3035e02ab 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4795,6 +4795,7 @@ void __hdd_wlan_exit(void) hdd_ipa_uc_force_pipe_shutdown(hdd_ctx); memdump_deinit(); + hdd_driver_memdump_deinit(); /* Do all the cleanup before deregistering the driver */ hdd_wlan_exit(hdd_ctx); @@ -7723,6 +7724,79 @@ static void hdd_iface_change_callback(void *priv) EXIT(); } +/** + * hdd_state_info_dump() - prints state information of hdd layer + * @buf: buffer pointer + * @size: size of buffer to be filled + * + * This function is used to dump state information of hdd layer + * + * Return: None + */ +static void hdd_state_info_dump(char **buf_ptr, uint16_t *size) +{ + hdd_context_t *hdd_ctx; + hdd_adapter_list_node_t *adapter_node = NULL, *next = NULL; + QDF_STATUS status; + hdd_station_ctx_t *hdd_sta_ctx; + hdd_adapter_t *adapter; + uint16_t len = 0; + char *buf = *buf_ptr; + + hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); + if (!hdd_ctx) { + hdd_err("Failed to get hdd context "); + return; + } + + hdd_notice("size of buffer: %d", *size); + + len += scnprintf(buf + len, *size - len, + "\n isWiphySuspended %d", hdd_ctx->isWiphySuspended); + len += scnprintf(buf + len, *size - len, + "\n isMcThreadSuspended %d", + hdd_ctx->isMcThreadSuspended); + + status = hdd_get_front_adapter(hdd_ctx, &adapter_node); + + while (NULL != adapter_node && QDF_STATUS_SUCCESS == status) { + adapter = adapter_node->pAdapter; + if (adapter->dev) + len += scnprintf(buf + len, *size - len, + "\n device name: %s", adapter->dev->name); + len += scnprintf(buf + len, *size - len, + "\n device_mode: %d", adapter->device_mode); + switch (adapter->device_mode) { + case QDF_STA_MODE: + case QDF_P2P_CLIENT_MODE: + hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter); + len += scnprintf(buf + len, *size - len, + "\n connState: %d", + hdd_sta_ctx->conn_info.connState); + break; + + default: + break; + } + status = hdd_get_next_adapter(hdd_ctx, adapter_node, &next); + adapter_node = next; + } + + *size -= len; + *buf_ptr += len; +} + +/** + * hdd_register_debug_callback() - registration function for hdd layer + * to print hdd state information + * + * Return: None + */ +static void hdd_register_debug_callback(void) +{ + qdf_register_debug_callback(QDF_MODULE_ID_HDD, &hdd_state_info_dump); +} + /** * hdd_wlan_startup() - HDD init function * @dev: Pointer to the underlying device @@ -7854,6 +7928,7 @@ int hdd_wlan_startup(struct device *dev) memdump_init(); hdd_encrypt_decrypt_init(hdd_ctx); + hdd_driver_memdump_init(); if (hdd_ctx->config->fIsImpsEnabled) hdd_set_idle_ps_config(hdd_ctx, true); @@ -8804,6 +8879,7 @@ int hdd_init(void) } hdd_trace_init(); + hdd_register_debug_callback(); err_out: return ret; diff --git a/core/hdd/src/wlan_hdd_memdump.c b/core/hdd/src/wlan_hdd_memdump.c index 1afe3fd7569c..195d066018b2 100644 --- a/core/hdd/src/wlan_hdd_memdump.c +++ b/core/hdd/src/wlan_hdd_memdump.c @@ -630,3 +630,237 @@ void memdump_deinit(void) if (!QDF_IS_STATUS_SUCCESS(qdf_status)) hdd_err("Failed to deallocate timer"); } + +#ifdef MULTI_IF_NAME +#define PROCFS_DRIVER_DUMP_DIR "debugdriver" MULTI_IF_NAME +#else +#define PROCFS_DRIVER_DUMP_DIR "debugdriver" +#endif +#define PROCFS_DRIVER_DUMP_NAME "driverdump" +#define PROCFS_DRIVER_DUMP_PERM 0444 + +static struct proc_dir_entry *proc_file_driver, *proc_dir_driver; + +/** + * hdd_driver_mem_cleanup() - Frees memory allocated for + * driver dump + * + * This function unallocates driver dump memory. + * + * Return: None + */ +static void hdd_driver_mem_cleanup(void) +{ + hdd_context_t *hdd_ctx; + + hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); + if (!hdd_ctx) { + hdd_err("Invalid HDD context"); + return; + } + + if (hdd_ctx->driver_dump_mem) { + qdf_mem_free(hdd_ctx->driver_dump_mem); + hdd_ctx->driver_dump_mem = NULL; + } +} + + +/** + * hdd_driver_memdump_read() - perform read operation in driver + * memory dump proc file + * @file - handle for the proc file. + * @buf - pointer to user space buffer. + * @count - number of bytes to be read. + * @pos - offset in the from buffer. + * + * This function performs read operation for the driver memory dump proc file. + * + * Return: number of bytes read on success, error code otherwise. + */ +static ssize_t hdd_driver_memdump_read(struct file *file, char __user *buf, + size_t count, loff_t *pos) +{ + int status; + QDF_STATUS qdf_status; + hdd_context_t *hdd_ctx; + size_t no_of_bytes_read = 0; + + hdd_ctx = memdump_get_file_data(file); + + hdd_notice("Read req for size:%zu pos:%llu", count, *pos); + status = wlan_hdd_validate_context(hdd_ctx); + if (status != 0) + return -EINVAL; + + if (*pos < 0) { + hdd_err("Invalid start offset for memdump read"); + return -EINVAL; + } else if (!count || (hdd_ctx->driver_dump_size && + (*pos >= hdd_ctx->driver_dump_size))) { + hdd_err("No more data to copy"); + return 0; + } else if ((*pos == 0) || (hdd_ctx->driver_dump_mem == NULL)) { + /* + * Allocate memory for Driver memory dump. + */ + if (!hdd_ctx->driver_dump_mem) { + hdd_ctx->driver_dump_mem = + qdf_mem_malloc(DRIVER_MEM_DUMP_SIZE); + if (!hdd_ctx->driver_dump_mem) { + hdd_err("qdf_mem_malloc failed"); + return -ENOMEM; + } + } + + qdf_status = qdf_state_info_dump_all(hdd_ctx->driver_dump_mem, + DRIVER_MEM_DUMP_SIZE, + &hdd_ctx->driver_dump_size); + /* + * If qdf_status is QDF_STATUS_E_NOMEM, then memory allocated is + * insufficient to dump driver information. This print can give + * information to allocate more memory if more information from + * each layer is added in future. + */ + if (qdf_status != QDF_STATUS_SUCCESS) + hdd_err("Error in dump driver information, status %d", + qdf_status); + hdd_notice("driver_dump_size: %d", + hdd_ctx->driver_dump_size); + } + + if (count > hdd_ctx->driver_dump_size - *pos) + no_of_bytes_read = hdd_ctx->driver_dump_size - *pos; + else + no_of_bytes_read = count; + + if (copy_to_user(buf, hdd_ctx->driver_dump_mem + *pos, + no_of_bytes_read)) { + hdd_err("copy to user space failed"); + return -EFAULT; + } + + /* offset(pos) should be updated here based on the copy done */ + *pos += no_of_bytes_read; + + /* Entire driver memory dump copy completed */ + if (*pos >= hdd_ctx->driver_dump_size) + hdd_driver_mem_cleanup(); + + return no_of_bytes_read; +} + + +/** + * struct driver_dump_fops - file operations for driver dump feature + * @read - read function for driver dump operation. + * + * This structure initialize the file operation handle for memory + * dump feature + */ +static const struct file_operations driver_dump_fops = { +read: hdd_driver_memdump_read +}; + +/** + * hdd_driver_memdump_procfs_init() - Initialize procfs for driver memory dump + * + * This function create file under proc file system to be used later for + * processing driver memory dump + * + * Return: 0 on success, error code otherwise. + */ +static int hdd_driver_memdump_procfs_init(void) +{ + hdd_context_t *hdd_ctx; + + hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); + if (!hdd_ctx) { + hdd_err("Invalid HDD context"); + return -EINVAL; + } + + proc_dir_driver = proc_mkdir(PROCFS_DRIVER_DUMP_DIR, NULL); + if (proc_dir_driver == NULL) { + pr_debug("Error: Could not initialize /proc/%s\n", + PROCFS_DRIVER_DUMP_DIR); + return -ENOMEM; + } + + proc_file_driver = proc_create_data(PROCFS_DRIVER_DUMP_NAME, + PROCFS_DRIVER_DUMP_PERM, proc_dir_driver, + &driver_dump_fops, hdd_ctx); + if (proc_file_driver == NULL) { + remove_proc_entry(PROCFS_DRIVER_DUMP_NAME, proc_dir_driver); + pr_debug("Error: Could not initialize /proc/%s\n", + PROCFS_DRIVER_DUMP_NAME); + return -ENOMEM; + } + + pr_debug("/proc/%s/%s created\n", PROCFS_DRIVER_DUMP_DIR, + PROCFS_DRIVER_DUMP_NAME); + return 0; +} + +/** + * hdd_driver_memdump_procfs_remove() - Remove file/dir under procfs + * for driver memory dump + * + * This function removes file/dir under proc file system that was + * processing driver memory dump + * + * Return: None + */ +static void hdd_driver_memdump_procfs_remove(void) +{ + remove_proc_entry(PROCFS_DRIVER_DUMP_NAME, proc_dir_driver); + pr_debug("/proc/%s/%s removed\n", PROCFS_DRIVER_DUMP_DIR, + PROCFS_DRIVER_DUMP_NAME); + remove_proc_entry(PROCFS_DRIVER_DUMP_DIR, NULL); + pr_debug("/proc/%s removed\n", PROCFS_DRIVER_DUMP_DIR); +} + +/** + * hdd_driver_memdump_init() - Intialization function for driver + * memory dump feature + * + * This function creates proc file for driver memdump feature + * + * Return - 0 on success, error otherwise + */ +int hdd_driver_memdump_init(void) +{ + int status; + + if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE) { + hdd_err("Not initializing memdump in FTM mode"); + return -EINVAL; + } + + status = hdd_driver_memdump_procfs_init(); + if (status) { + hdd_err("Failed to create proc file"); + return status; + } + + return 0; +} + +/** + * hdd_driver_memdump_deinit() - De initialize driver memdump feature + * + * This function removes proc file created for driver memdump feature. + * + * Return: None + */ +void hdd_driver_memdump_deinit(void) +{ + if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE) { + hdd_err("Not deinitializing memdump in FTM mode"); + return; + } + + hdd_driver_memdump_procfs_remove(); + + hdd_driver_mem_cleanup(); +} diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index a1e05650a5c5..2700e9ad55b7 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -681,6 +681,63 @@ void lim_cleanup(tpAniSirGlobal pMac) } /*** end lim_cleanup() ***/ +/** + * lim_state_info_dump() - print state information of lim layer + * @buf: buffer pointer + * @size: size of buffer to be filled + * + * This function is used to print state information of lim layer + * + * Return: None + */ +static void lim_state_info_dump(char **buf_ptr, uint16_t *size) +{ + tHalHandle hal; + tpAniSirGlobal mac; + uint16_t len = 0; + char *buf = *buf_ptr; + + hal = cds_get_context(QDF_MODULE_ID_PE); + if (hal == NULL) { + QDF_ASSERT(0); + return; + } + + mac = PMAC_STRUCT(hal); + + lim_log(mac, LOG1, FL("size of buffer: %d"), *size); + + len += qdf_scnprintf(buf + len, *size - len, + "\n SmeState: %d", mac->lim.gLimSmeState); + len += qdf_scnprintf(buf + len, *size - len, + "\n PrevSmeState: %d", mac->lim.gLimPrevSmeState); + len += qdf_scnprintf(buf + len, *size - len, + "\n MlmState: %d", mac->lim.gLimMlmState); + len += qdf_scnprintf(buf + len, *size - len, + "\n PrevMlmState: %d", mac->lim.gLimPrevMlmState); + len += qdf_scnprintf(buf + len, *size - len, + "\n SystemInScanLearnMode: %d", + mac->lim.gLimSystemInScanLearnMode); + len += qdf_scnprintf(buf + len, *size - len, + "\n ProcessDefdMsgs: %d", mac->lim.gLimProcessDefdMsgs); + len += qdf_scnprintf(buf + len, *size - len, + "\n gLimHalScanState: %d", mac->lim.gLimHalScanState); + + *size -= len; + *buf_ptr += len; +} + +/** + * lim_register_debug_callback() - registration function for lim layer + * to print lim state information + * + * Return: None + */ +static void lim_register_debug_callback(void) +{ + qdf_register_debug_callback(QDF_MODULE_ID_PE, &lim_state_info_dump); +} + /** ------------------------------------------------------------- \fn pe_open \brief will be called in Open sequence from mac_open @@ -746,6 +803,8 @@ tSirRetStatus pe_open(tpAniSirGlobal pMac, struct cds_config_info *cds_cfg) #ifdef LIM_TRACE_RECORD MTRACE(lim_trace_init(pMac)); #endif + lim_register_debug_callback(); + return status; /* status here will be eSIR_SUCCESS */ pe_open_lock_fail: diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 738ba4302f88..7bfe3c9ff9a4 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -1073,6 +1073,104 @@ bool sme_command_pending(tpAniSirGlobal pMac) LL_ACCESS_NOLOCK); } +/** + * sme_get_sessionid_from_activelist() - gets session id + * @mac: mac context + * + * This function is used to get session id from sme command + * active list + * + * Return: returns session id + */ +uint32_t sme_get_sessionid_from_activelist(tpAniSirGlobal mac) +{ + tListElem *entry; + tSmeCmd *command; + uint32_t session_id = CSR_SESSION_ID_INVALID; + + entry = csr_ll_peek_head(&mac->sme.smeCmdActiveList, LL_ACCESS_LOCK); + if (entry) { + command = GET_BASE_ADDR(entry, tSmeCmd, Link); + session_id = command->sessionId; + } + + return session_id; +} + +/** + * sme_state_info_dump() - prints state information of sme layer + * @buf: buffer pointer + * @size: size of buffer to be filled + * + * This function is used to dump state information of sme layer + * + * Return: None + */ +static void sme_state_info_dump(char **buf_ptr, uint16_t *size) +{ + uint32_t session_id, active_session_id; + tHalHandle hal; + tpAniSirGlobal mac; + uint16_t len = 0; + char *buf = *buf_ptr; + eCsrConnectState connect_state; + + hal = cds_get_context(QDF_MODULE_ID_SME); + if (hal == NULL) { + QDF_ASSERT(0); + return; + } + + mac = PMAC_STRUCT(hal); + sms_log(mac, LOG1, FL("size of buffer: %d"), *size); + + active_session_id = sme_get_sessionid_from_activelist(mac); + if (active_session_id != CSR_SESSION_ID_INVALID) { + len += qdf_scnprintf(buf + len, *size - len, + "\n active command sessionid %d", active_session_id); + } + + for (session_id = 0; session_id < CSR_ROAM_SESSION_MAX; session_id++) { + if (CSR_IS_SESSION_VALID(mac, session_id)) { + connect_state = + mac->roam.roamSession[session_id].connectState; + if ((eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED == + connect_state) + || (eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED == + connect_state)) { + len += qdf_scnprintf(buf + len, *size - len, + "\n NeighborRoamState: %d", + mac->roam.neighborRoamInfo[session_id]. + neighborRoamState); + len += qdf_scnprintf(buf + len, *size - len, + "\n RoamState: %d", mac->roam. + curState[session_id]); + len += qdf_scnprintf(buf + len, *size - len, + "\n RoamSubState: %d", mac->roam. + curSubState[session_id]); + len += qdf_scnprintf(buf + len, *size - len, + "\n ConnectState: %d", + connect_state); + } + } + } + + *size -= len; + *buf_ptr += len; +} + +/** + * sme_register_debug_callback() - registration function sme layer + * to print sme state information + * + * Return: None + */ +static void sme_register_debug_callback(void) +{ + qdf_register_debug_callback(QDF_MODULE_ID_SME, &sme_state_info_dump); +} + + /* Global APIs */ /** @@ -1134,6 +1232,7 @@ QDF_STATUS sme_open(tHalHandle hHal) } sme_p2p_open(pMac); sme_trace_init(pMac); + sme_register_debug_callback(); return status; } diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index ebafc4418589..3b5f543c30ac 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -1672,6 +1672,146 @@ static void wma_init_max_no_of_peers(tp_wma_handle wma_handle, struct wma_version_info g_wmi_version_info; +/** + * wma_state_info_dump() - prints state information of wma layer + * @buf: buffer pointer + * @size: size of buffer to be filled + * + * This function is used to dump state information of wma layer + * + * Return: None + */ +static void wma_state_info_dump(char **buf_ptr, uint16_t *size) +{ + tp_wma_handle wma_handle; + uint16_t len = 0; + char *buf = *buf_ptr; + struct wma_txrx_node *iface; + uint8_t vdev_id; + + wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + if (!wma_handle) { + WMA_LOGE("%s: WMA context is invald!", __func__); + return; + } + + WMA_LOGI("%s: size of buffer: %d", __func__, *size); + + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_pno_match_wake_up_count %d", + wma_handle->wow_pno_match_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_pno_complete_wake_up_count %d", + wma_handle->wow_pno_complete_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_gscan_wake_up_count %d", + wma_handle->wow_gscan_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_low_rssi_wake_up_count %d", + wma_handle->wow_low_rssi_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_rssi_breach_wake_up_count %d", + wma_handle->wow_rssi_breach_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ucast_wake_up_count %d", + wma_handle->wow_ucast_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_bcast_wake_up_count %d", + wma_handle->wow_bcast_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ipv4_mcast_wake_up_count %d", + wma_handle->wow_ipv4_mcast_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ipv6_mcast_ra_stats %d", + wma_handle->wow_ipv6_mcast_ra_stats); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ipv6_mcast_ns_stats %d", + wma_handle->wow_ipv6_mcast_ns_stats); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ipv6_mcast_na_stats %d", + wma_handle->wow_ipv6_mcast_na_stats); + + for (vdev_id = 0; vdev_id < wma_handle->max_bssid; vdev_id++) { + if (!wma_handle->interfaces[vdev_id].handle) + continue; + + iface = &wma_handle->interfaces[vdev_id]; + + len += qdf_scnprintf(buf + len, *size - len, + "\n vdev_id %d", + vdev_id); + len += qdf_scnprintf(buf + len, *size - len, + "\n conn_state %d", + iface->conn_state); + len += qdf_scnprintf(buf + len, *size - len, + "\n dtimPeriod %d", + iface->dtimPeriod); + len += qdf_scnprintf(buf + len, *size - len, + "\n chanmode %d", + iface->chanmode); + len += qdf_scnprintf(buf + len, *size - len, + "\n vht_capable %d", + iface->vht_capable); + len += qdf_scnprintf(buf + len, *size - len, + "\n ht_capable %d", + iface->ht_capable); + len += qdf_scnprintf(buf + len, *size - len, + "\n chan_width %d", + iface->chan_width); + len += qdf_scnprintf(buf + len, *size - len, + "\n vdev_active %d", + iface->vdev_active); + len += qdf_scnprintf(buf + len, *size - len, + "\n vdev_up %d", + iface->vdev_up); + len += qdf_scnprintf(buf + len, *size - len, + "\n aid %d", + iface->aid); + len += qdf_scnprintf(buf + len, *size - len, + "\n rate_flags %d", + iface->rate_flags); + len += qdf_scnprintf(buf + len, *size - len, + "\n nss %d", + iface->nss); + len += qdf_scnprintf(buf + len, *size - len, + "\n tx_power %d", + iface->tx_power); + len += qdf_scnprintf(buf + len, *size - len, + "\n max_tx_power %d", + iface->max_tx_power); + len += qdf_scnprintf(buf + len, *size - len, + "\n nwType %d", + iface->nwType); + len += qdf_scnprintf(buf + len, *size - len, + "\n tx_streams %d", + iface->tx_streams); + len += qdf_scnprintf(buf + len, *size - len, + "\n rx_streams %d", + iface->rx_streams); + len += qdf_scnprintf(buf + len, *size - len, + "\n chain_mask %d", + iface->chain_mask); + len += qdf_scnprintf(buf + len, *size - len, + "\n nss_2g %d", + iface->nss_2g); + len += qdf_scnprintf(buf + len, *size - len, + "\n nss_5g %d", + iface->nss_5g); + } + + *size -= len; + *buf_ptr += len; +} + +/** + * wma_register_debug_callback() - registration function for wma layer + * to print wma state information + */ +static void wma_register_debug_callback(void) +{ + qdf_register_debug_callback(QDF_MODULE_ID_WMA, &wma_state_info_dump); +} + /** * wma_open() - Allocate wma context and initialize it. * @cds_context: cds context @@ -2157,6 +2297,8 @@ QDF_STATUS wma_open(void *cds_context, wma_encrypt_decrypt_msg_handler, WMA_RX_SERIALIZER_CTX); wma_ndp_register_all_event_handlers(wma_handle); + wma_register_debug_callback(); + return QDF_STATUS_SUCCESS; err_dbglog_init: -- cgit v1.2.3 From 022892105c574e1487110443baa69ec46f5bffea Mon Sep 17 00:00:00 2001 From: "Padma, Santhosh Kumar" Date: Fri, 30 Sep 2016 13:30:08 +0530 Subject: qcacld-3.0: Fix status code during disassociation qcacld-2.0 to qcacld-3.0 propagation Currently status code is mapped same as reason code which results in wrong status code mapping. Fix this by adding appropriate status code. Change-Id: I75a66601c33b4e93fcac674415f38d5a8184c8f3 CRs-Fixed: 1062308 --- core/mac/src/pe/lim/lim_send_sme_rsp_messages.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index 26d0190c47d5..60ee95534a28 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c @@ -1030,7 +1030,7 @@ lim_send_sme_disassoc_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs, pSirSmeDisassocInd->sessionId = psessionEntry->smeSessionId; pSirSmeDisassocInd->transactionId = psessionEntry->transactionId; - pSirSmeDisassocInd->statusCode = pStaDs->mlmStaContext.disassocReason; + pSirSmeDisassocInd->statusCode = eSIR_SME_DEAUTH_STATUS; pSirSmeDisassocInd->reasonCode = pStaDs->mlmStaContext.disassocReason; qdf_mem_copy(pSirSmeDisassocInd->bssid.bytes, psessionEntry->bssId, -- cgit v1.2.3 From 4b2efbbb0c2bb185f929771b07501974538fee04 Mon Sep 17 00:00:00 2001 From: Kapil Gupta Date: Mon, 3 Oct 2016 13:07:20 +0530 Subject: qcacld-3.0: Add support for 2.4G VHT Interop in SAP qcacld-2.0 to qcacld-3.0 propagation In 2.4GHz some stations advertise VHT capability IE in Assoc Req frame. Add support to detect the VHT capability in vendor specific IE in Assoc Req frame and establish the connection with VHT mode to improve performance. Change-Id: I08dbcb3ce1895aa2108924d7a672e5d9be514e3d CRs-Fixed: 924814 --- core/hdd/inc/wlan_hdd_cfg.h | 11 ++ core/hdd/src/wlan_hdd_cfg.c | 13 ++ core/mac/inc/sir_api.h | 1 + core/mac/src/cfg/cfgUtil/dot11f.frms | 18 +-- core/mac/src/include/dot11f.h | 40 +++--- core/mac/src/include/parser_api.h | 5 +- core/mac/src/pe/include/lim_session.h | 1 + core/mac/src/pe/lim/lim_assoc_utils.c | 48 ++++---- core/mac/src/pe/lim/lim_process_assoc_req_frame.c | 39 ++++-- core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c | 4 +- core/mac/src/pe/lim/lim_process_sme_req_messages.c | 2 + core/mac/src/pe/lim/lim_prop_exts_utils.c | 2 +- core/mac/src/pe/lim/lim_send_frames_host_roam.c | 10 +- core/mac/src/pe/lim/lim_send_management_frames.c | 29 ++++- core/mac/src/sys/legacy/src/utils/src/dot11f.c | 137 +++++++++++---------- core/mac/src/sys/legacy/src/utils/src/parser_api.c | 105 +++++++++------- core/sme/inc/csr_api.h | 1 + core/sme/inc/csr_internal.h | 1 + core/sme/src/csr/csr_api_roam.c | 15 ++- core/sme/src/csr/csr_util.c | 2 +- 20 files changed, 292 insertions(+), 192 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index a7408810cd73..7bbc547e51c0 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1974,6 +1974,16 @@ typedef enum { #define CFG_ENABLE_VHT_FOR_24GHZ_MAX (1) #define CFG_ENABLE_VHT_FOR_24GHZ_DEFAULT (0) +/* + * Parameter to control VHT support based on vendor ie in 2.4 GHz band + * This parameter will enable SAP to read VHT capability in vendor ie in Assoc + * Req and send VHT caps in Resp to establish connection in VHT Mode. + */ +#define CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_NAME "gEnableVendorVhtFor24GHzBand" +#define CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_MIN (0) +#define CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_MAX (1) +#define CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_DEFAULT (1) + #define CFG_MAX_MEDIUM_TIME "gMaxMediumTime" #define CFG_MAX_MEDIUM_TIME_STAMIN WNI_CFG_MAX_MEDIUM_TIME_STAMIN #define CFG_MAX_MEDIUM_TIME_STAMAX WNI_CFG_MAX_MEDIUM_TIME_STAMAX @@ -3889,6 +3899,7 @@ struct hdd_config { bool enableSSR; uint32_t cfgMaxMediumTime; bool enableVhtFor24GHzBand; + bool enable_sap_vendor_vht; /* Flag indicating whether legacy fast roam during concurrency is enabled in cfg.ini or not */ bool bFastRoamInConIniFeatureEnabled; bool fEnableAdaptRxDrain; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 0c017df08a37..27b227ec7751 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -2468,6 +2468,14 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_ENABLE_VHT_FOR_24GHZ_MIN, CFG_ENABLE_VHT_FOR_24GHZ_MAX), + + REG_VARIABLE(CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_NAME, WLAN_PARAM_Integer, + struct hdd_config, enable_sap_vendor_vht, + VAR_FLAGS_OPTIONAL, + CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_DEFAULT, + CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_MIN, + CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_MAX), + REG_DYNAMIC_VARIABLE(CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY, WLAN_PARAM_Integer, struct hdd_config, bFastRoamInConIniFeatureEnabled, @@ -5567,6 +5575,9 @@ void hdd_cfg_print(hdd_context_t *pHddCtx) hdd_info("Name = [%s] Value = [%u]", CFG_IGNORE_PEER_HT_MODE_NAME, pHddCtx->config->ignore_peer_ht_opmode); + hdd_info("Name = [%s] Value = [%u]", + CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_NAME, + pHddCtx->config->enable_sap_vendor_vht); hdd_info("Name = [%s] Value = [%u]", CFG_ENABLE_FATAL_EVENT_TRIGGER, pHddCtx->config->enable_fatal_event); @@ -6918,6 +6929,8 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx) pConfig->enable_txbf_sap_mode; smeConfig->csrConfig.enable2x2 = pConfig->enable2x2; smeConfig->csrConfig.enableVhtFor24GHz = pConfig->enableVhtFor24GHzBand; + smeConfig->csrConfig.vendor_vht_sap = + pConfig->enable_sap_vendor_vht; smeConfig->csrConfig.enableMuBformee = pConfig->enableMuBformee; smeConfig->csrConfig.enableVhtpAid = pConfig->enableVhtpAid; smeConfig->csrConfig.enableVhtGid = pConfig->enableVhtGid; diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index b31a834a5399..58d0cd20635c 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -695,6 +695,7 @@ typedef struct sSirSmeStartBssReq { bool obssEnabled; uint8_t sap_dot11mc; uint8_t beacon_tx_rate; + bool vendor_vht_sap; } tSirSmeStartBssReq, *tpSirSmeStartBssReq; diff --git a/core/mac/src/cfg/cfgUtil/dot11f.frms b/core/mac/src/cfg/cfgUtil/dot11f.frms index 80509932738c..01568e477771 100644 --- a/core/mac/src/cfg/cfgUtil/dot11f.frms +++ b/core/mac/src/cfg/cfgUtil/dot11f.frms @@ -2894,7 +2894,7 @@ MULTIIE P2PDisAssoc ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 ) MANDATORYTLV MinorReasonCode; } -IE vendor2_ie (EID_VENDOR_SPECIFIC) OUI (0x00, 0x90, 0x4c) +IE vendor_vht_ie (EID_VENDOR_SPECIFIC) OUI (0x00, 0x90, 0x4c) { type, 1; sub_type, 1; @@ -2957,7 +2957,7 @@ FRAME Beacon // C.f. Sec. 7.2.3.1 OPTIE WiderBWChanSwitchAnn; OPTIE OBSSScanParameters; OPTIE Vendor1IE; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE Vendor3IE; OPTIE hs20vendor_ie; OPTIE ChannelSwitchWrapper; @@ -3046,7 +3046,7 @@ FRAME Beacon2 OPTIE WiderBWChanSwitchAnn; OPTIE OBSSScanParameters; OPTIE Vendor1IE; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE Vendor3IE; OPTIE hs20vendor_ie; OPTIE ChannelSwitchWrapper; @@ -3111,7 +3111,7 @@ FRAME BeaconIEs OPTIE WiderBWChanSwitchAnn; OPTIE OBSSScanParameters; OPTIE Vendor1IE; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE Vendor3IE; OPTIE hs20vendor_ie; OPTIE ChannelSwitchWrapper; @@ -3153,7 +3153,7 @@ FRAME AssocRequest // 7.2.3.4 OPTIE ExtCap; OPTIE OperatingMode; OPTIE QosMapSet; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE hs20vendor_ie; } // End frame AssocRequest. @@ -3188,7 +3188,7 @@ FRAME AssocResponse // 7.2.3.5 OPTIE ExtCap; OPTIE OBSSScanParameters; OPTIE QosMapSet; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; } // End frame AssocResponse. FRAME ReAssocRequest // 7.2.3.6 @@ -3225,7 +3225,7 @@ FRAME ReAssocRequest // 7.2.3.6 OPTIE ExtCap; OPTIE OperatingMode; OPTIE QosMapSet; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE hs20vendor_ie; } // End frame ReAssocRequest. @@ -3261,7 +3261,7 @@ FRAME ReAssocResponse // 7.2.3.7 OPTIE ExtCap; OPTIE OBSSScanParameters; OPTIE QosMapSet; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; } // End frame ReAssocResponse. FRAME ProbeRequest // 7.2.3.8 @@ -3328,7 +3328,7 @@ FRAME ProbeResponse // 7.2.3.9 OPTIE ExtCap; OPTIE OBSSScanParameters; OPTIE Vendor1IE; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE Vendor3IE; OPTIE hs20vendor_ie; OPTIE ChannelSwitchWrapper; diff --git a/core/mac/src/include/dot11f.h b/core/mac/src/include/dot11f.h index 006fd880785d..7d52f2508ba6 100644 --- a/core/mac/src/include/dot11f.h +++ b/core/mac/src/include/dot11f.h @@ -35,7 +35,7 @@ * * * This file was automatically generated by 'framesc' - * Mon Sep 19 14:42:34 2016 from the following file(s): + * Mon Oct 3 12:40:25 2016 from the following file(s): * * dot11f.frms * @@ -7612,40 +7612,40 @@ uint32_t dot11f_get_packed_ie_sec_chan_offset_ele( #endif /* C++ */ /* EID 221 (0xdd) {OUI 0x00, 0x90, 0x4c} */ -typedef struct sDot11fIEvendor2_ie { +typedef struct sDot11fIEvendor_vht_ie { uint8_t present; uint8_t type; uint8_t sub_type; tDot11fIEVHTCaps VHTCaps; tDot11fIEVHTOperation VHTOperation; -} tDot11fIEvendor2_ie; +} tDot11fIEvendor_vht_ie; -#define DOT11F_EID_VENDOR2_IE (221) +#define DOT11F_EID_VENDOR_VHT_IE (221) /* N.B. These #defines do *not* include the EID & length */ -#define DOT11F_IE_VENDOR2_IE_MIN_LEN (5) +#define DOT11F_IE_VENDOR_VHT_IE_MIN_LEN (5) -#define DOT11F_IE_VENDOR2_IE_MAX_LEN (26) +#define DOT11F_IE_VENDOR_VHT_IE_MAX_LEN (26) #ifdef __cplusplus extern "C" { #endif /* C++ */ -uint32_t dot11f_unpack_ie_vendor2_ie( +uint32_t dot11f_unpack_ie_vendor_vht_ie( tpAniSirGlobal, uint8_t *, uint8_t, - tDot11fIEvendor2_ie*); + tDot11fIEvendor_vht_ie*); -uint32_t dot11f_pack_ie_vendor2_ie( +uint32_t dot11f_pack_ie_vendor_vht_ie( tpAniSirGlobal, - tDot11fIEvendor2_ie *, + tDot11fIEvendor_vht_ie *, uint8_t *, uint32_t, uint32_t*); -uint32_t dot11f_get_packed_ie_vendor2_ie( +uint32_t dot11f_get_packed_ie_vendor_vht_ie( tpAniSirGlobal, - tDot11fIEvendor2_ie *, + tDot11fIEvendor_vht_ie *, uint32_t*); #ifdef __cplusplus @@ -7757,7 +7757,7 @@ typedef struct sDot11fAssocRequest{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEQosMapSet QosMapSet; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEhs20vendor_ie hs20vendor_ie; } tDot11fAssocRequest; @@ -7813,7 +7813,7 @@ typedef struct sDot11fAssocResponse{ tDot11fIEExtCap ExtCap; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEQosMapSet QosMapSet; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; } tDot11fAssocResponse; #define DOT11F_ASSOCRESPONSE (4) @@ -7919,7 +7919,7 @@ typedef struct sDot11fBeacon{ tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEVendor1IE Vendor1IE; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEVendor3IE Vendor3IE; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; @@ -8014,7 +8014,7 @@ typedef struct sDot11fBeacon2{ tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEVendor1IE Vendor1IE; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEVendor3IE Vendor3IE; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; @@ -8090,7 +8090,7 @@ typedef struct sDot11fBeaconIEs{ tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEVendor1IE Vendor1IE; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEVendor3IE Vendor3IE; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; @@ -8501,7 +8501,7 @@ typedef struct sDot11fProbeResponse{ tDot11fIEExtCap ExtCap; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEVendor1IE Vendor1IE; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEVendor3IE Vendor3IE; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; @@ -8648,7 +8648,7 @@ typedef struct sDot11fReAssocRequest{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEQosMapSet QosMapSet; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEhs20vendor_ie hs20vendor_ie; } tDot11fReAssocRequest; @@ -8705,7 +8705,7 @@ typedef struct sDot11fReAssocResponse{ tDot11fIEExtCap ExtCap; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEQosMapSet QosMapSet; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; } tDot11fReAssocResponse; #define DOT11F_REASSOCRESPONSE (27) diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h index da8c3bc36840..bede0ad11946 100644 --- a/core/mac/src/include/parser_api.h +++ b/core/mac/src/include/parser_api.h @@ -164,7 +164,7 @@ typedef struct sSirProbeRespBeacon { uint8_t WiderBWChanSwitchAnnPresent; tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; uint8_t Vendor1IEPresent; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; uint8_t Vendor3IEPresent; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEIBSSParams IBSSParams; @@ -245,6 +245,7 @@ typedef struct sSirAssocReq { tDot11fIEVHTCaps VHTCaps; tDot11fIEOperatingMode operMode; tDot11fIEExtCap ExtCap; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEhs20vendor_ie hs20vendor_ie; } tSirAssocReq, *tpSirAssocReq; @@ -294,7 +295,7 @@ typedef struct sSirAssocRsp { #ifdef WLAN_FEATURE_11W tDot11fIETimeoutInterval TimeoutInterval; #endif - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEOBSSScanParameters obss_scanparams; } tSirAssocRsp, *tpSirAssocRsp; diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h index f12cc19a7619..b8b34a98fb79 100644 --- a/core/mac/src/pe/include/lim_session.h +++ b/core/mac/src/pe/include/lim_session.h @@ -464,6 +464,7 @@ typedef struct sPESession /* Added to Support BT-AMP */ bool is_vendor_specific_vhtcaps; uint8_t vendor_specific_vht_ie_type; uint8_t vendor_specific_vht_ie_sub_type; + bool vendor_vht_sap; /* HS 2.0 Indication */ tDot11fIEhs20vendor_ie hs20vendor_ie; /* flag to indicate country code in beacon */ diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 31818d187df1..4aae611d0787 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -3224,12 +3224,12 @@ lim_check_and_announce_join_success(tpAniSirGlobal mac_ctx, wlan_cfg_get_int(mac_ctx, WNI_CFG_DOT11_MODE, &selfStaDot11Mode); if ((IS_DOT11_MODE_VHT(selfStaDot11Mode)) && - beacon_probe_rsp->vendor2_ie.VHTCaps.present) { + beacon_probe_rsp->vendor_vht_ie.VHTCaps.present) { session_entry->is_vendor_specific_vhtcaps = true; session_entry->vendor_specific_vht_ie_type = - beacon_probe_rsp->vendor2_ie.type; + beacon_probe_rsp->vendor_vht_ie.type; session_entry->vendor_specific_vht_ie_sub_type = - beacon_probe_rsp->vendor2_ie.sub_type; + beacon_probe_rsp->vendor_vht_ie.sub_type; lim_log(mac_ctx, LOG1, FL( "VHT caps are present in vendor specific IE")); } @@ -3678,13 +3678,13 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, vht_caps = &pAssocRsp->VHTCaps; vht_oper = &pAssocRsp->VHTOperation; } else if (psessionEntry->vhtCapability && - pAssocRsp->vendor2_ie.VHTCaps.present){ + pAssocRsp->vendor_vht_ie.VHTCaps.present){ pAddBssParams->vhtCapable = - pAssocRsp->vendor2_ie.VHTCaps.present; + pAssocRsp->vendor_vht_ie.VHTCaps.present; lim_log(pMac, LOG1, FL("VHT Caps and Operation are present in vendor Specfic IE")); - vht_caps = &pAssocRsp->vendor2_ie.VHTCaps; - vht_oper = &pAssocRsp->vendor2_ie.VHTOperation; + vht_caps = &pAssocRsp->vendor_vht_ie.VHTCaps; + vht_oper = &pAssocRsp->vendor_vht_ie.VHTOperation; } else { pAddBssParams->vhtCapable = 0; } @@ -3757,15 +3757,15 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAddBssParams->staContext.lsigTxopProtection); if (psessionEntry->vhtCapability && (IS_BSS_VHT_CAPABLE(pBeaconStruct->VHTCaps) || - IS_BSS_VHT_CAPABLE( - pBeaconStruct->vendor2_ie.VHTCaps))) { + IS_BSS_VHT_CAPABLE(pBeaconStruct-> + vendor_vht_ie.VHTCaps))) { pAddBssParams->staContext.vhtCapable = 1; pAddBssParams->staContext.vhtSupportedRxNss = pStaDs->vhtSupportedRxNss; if (pAssocRsp->VHTCaps.present) vht_caps = &pAssocRsp->VHTCaps; - else if (pAssocRsp->vendor2_ie.VHTCaps.present) { - vht_caps = &pAssocRsp->vendor2_ie.VHTCaps; + else if (pAssocRsp->vendor_vht_ie.VHTCaps.present) { + vht_caps = &pAssocRsp->vendor_vht_ie.VHTCaps; lim_log(pMac, LOG1, FL( "VHT Caps are in vendor Specfic IE")); } @@ -3790,8 +3790,9 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAssocRsp->HTInfo.recommendedTxWidthSet; if (pAssocRsp->VHTCaps.present) vht_oper = &pAssocRsp->VHTOperation; - else if (pAssocRsp->vendor2_ie.VHTCaps.present) { - vht_oper = &pAssocRsp->vendor2_ie.VHTOperation; + else if (pAssocRsp->vendor_vht_ie.VHTCaps.present) { + vht_oper = &pAssocRsp-> + vendor_vht_ie.VHTOperation; lim_log(pMac, LOG1, FL( "VHT Op IE is in vendor Specfic IE")); } @@ -3874,8 +3875,8 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, if (pAssocRsp->VHTCaps.present) vht_caps = &pAssocRsp->VHTCaps; - else if (pAssocRsp->vendor2_ie.VHTCaps.present) { - vht_caps = &pAssocRsp->vendor2_ie.VHTCaps; + else if (pAssocRsp->vendor_vht_ie.VHTCaps.present) { + vht_caps = &pAssocRsp->vendor_vht_ie.VHTCaps; lim_log(pMac, LOG1, FL( "VHT Caps is in vendor Specfic IE")); } @@ -4218,13 +4219,13 @@ tSirRetStatus lim_sta_send_add_bss_pre_assoc(tpAniSirGlobal pMac, uint8_t update pAddBssParams->currentOperChannel); if (psessionEntry->vhtCapability && (IS_BSS_VHT_CAPABLE(pBeaconStruct->VHTCaps) || - IS_BSS_VHT_CAPABLE(pBeaconStruct->vendor2_ie.VHTCaps))) { + IS_BSS_VHT_CAPABLE(pBeaconStruct->vendor_vht_ie.VHTCaps))) { pAddBssParams->vhtCapable = 1; if (pBeaconStruct->VHTOperation.present) vht_oper = &pBeaconStruct->VHTOperation; - else if (pBeaconStruct->vendor2_ie.VHTOperation.present) { - vht_oper = &pBeaconStruct->vendor2_ie.VHTOperation; + else if (pBeaconStruct->vendor_vht_ie.VHTOperation.present) { + vht_oper = &pBeaconStruct->vendor_vht_ie.VHTOperation; lim_log(pMac, LOG1, FL("VHT Operation is present in vendor Specfic IE")); } @@ -4301,12 +4302,13 @@ tSirRetStatus lim_sta_send_add_bss_pre_assoc(tpAniSirGlobal pMac, uint8_t update if (psessionEntry->vhtCapability && (IS_BSS_VHT_CAPABLE(pBeaconStruct->VHTCaps) || IS_BSS_VHT_CAPABLE( - pBeaconStruct->vendor2_ie.VHTCaps))) { + pBeaconStruct->vendor_vht_ie.VHTCaps))) { pAddBssParams->staContext.vhtCapable = 1; if (pBeaconStruct->VHTCaps.present) vht_caps = &pBeaconStruct->VHTCaps; - else if (pBeaconStruct->vendor2_ie.VHTCaps.present) - vht_caps = &pBeaconStruct->vendor2_ie.VHTCaps; + else if (pBeaconStruct->vendor_vht_ie.VHTCaps.present) + vht_caps = &pBeaconStruct-> + vendor_vht_ie.VHTCaps; if ((vht_caps != NULL) && (vht_caps->suBeamFormerCap || vht_caps->muBeamformerCap) && @@ -4389,9 +4391,9 @@ tSirRetStatus lim_sta_send_add_bss_pre_assoc(tpAniSirGlobal pMac, uint8_t update if (pBeaconStruct->VHTCaps.present) vht_caps = &pBeaconStruct->VHTCaps; - else if (pBeaconStruct->vendor2_ie.VHTCaps.present) { + else if (pBeaconStruct->vendor_vht_ie.VHTCaps.present) { vht_caps = - &pBeaconStruct->vendor2_ie.VHTCaps; + &pBeaconStruct->vendor_vht_ie.VHTCaps; lim_log(pMac, LOG1, FL( "VHT Caps are in vendor Specfic IE")); } diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c index f60e43231eed..c1d77bfb5f9c 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c @@ -504,9 +504,19 @@ static bool lim_chk_11ac_only(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, tpPESession session, tpSirAssocReq assoc_req, uint8_t sub_type) { + tDot11fIEVHTCaps *vht_caps; + + if (assoc_req->VHTCaps.present) + vht_caps = &assoc_req->VHTCaps; + else if (assoc_req->vendor_vht_ie.VHTCaps.present && + session->vendor_vht_sap) + vht_caps = &assoc_req->vendor_vht_ie.VHTCaps; + else + vht_caps = NULL; + if (LIM_IS_AP_ROLE(session) && (session->dot11mode == WNI_CFG_DOT11_MODE_11AC_ONLY) && - (!assoc_req->VHTCaps.present)) { + ((vht_caps != NULL) && (!vht_caps->present))) { lim_send_assoc_rsp_mgmt_frame(mac_ctx, eSIR_MAC_CAPABILITIES_NOT_SUPPORTED_STATUS, 1, hdr->sa, sub_type, 0, session); @@ -1231,6 +1241,16 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, tPmfSaQueryTimerId timer_id; uint32_t retry_interval; #endif + tDot11fIEVHTCaps *vht_caps; + + if (assoc_req->VHTCaps.present) + vht_caps = &assoc_req->VHTCaps; + else if (assoc_req->vendor_vht_ie.VHTCaps.present && + session->vendor_vht_sap) + vht_caps = &assoc_req->vendor_vht_ie.VHTCaps; + else + vht_caps = NULL; + /* * check here if the parsedAssocReq already pointing to the assoc_req * and free it before assigning this new assoc_req @@ -1252,7 +1272,10 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, } sta_ds->mlmStaContext.htCapability = assoc_req->HTCaps.present; - sta_ds->mlmStaContext.vhtCapability = assoc_req->VHTCaps.present; + if ((vht_caps != NULL) && vht_caps->present) + sta_ds->mlmStaContext.vhtCapability = vht_caps->present; + else + sta_ds->mlmStaContext.vhtCapability = false; sta_ds->qos.addtsPresent = (assoc_req->addtsPresent == 0) ? false : true; sta_ds->qos.addts = assoc_req->addtsReq; @@ -1348,7 +1371,7 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, (uint8_t) (assoc_req->operMode.chanWidth ? eHT_CHANNEL_WIDTH_40MHZ : eHT_CHANNEL_WIDTH_20MHZ); - } else if (assoc_req->VHTCaps.present) { + } else if ((vht_caps != NULL) && vht_caps->present) { /* * Check if STA has enabled it's channel bonding mode. * If channel bonding mode is enabled, we decide based @@ -1360,7 +1383,7 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ : session->ch_width - 1); sta_ds->htMaxRxAMpduFactor = - assoc_req->VHTCaps.maxAMPDULenExp; + vht_caps->maxAMPDULenExp; } /* Lesser among the AP and STA bandwidth of operation. */ sta_ds->htSupportedChannelWidthSet = @@ -1373,9 +1396,10 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, (uint8_t) assoc_req->HTCaps.advCodingCap; } - if (assoc_req->VHTCaps.present && assoc_req->wmeInfoPresent) { + if ((vht_caps != NULL) && vht_caps->present && + assoc_req->wmeInfoPresent) { sta_ds->vhtLdpcCapable = - (uint8_t) assoc_req->VHTCaps.ldpcCodingCap; + (uint8_t) vht_caps->ldpcCodingCap; } if (!assoc_req->wmeInfoPresent) { @@ -1398,8 +1422,7 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, &(assoc_req->supportedRates), &(assoc_req->extendedRates), assoc_req->HTCaps.supportedMCSSet, - session, &assoc_req->VHTCaps) != eSIR_SUCCESS) - { + session, vht_caps) != eSIR_SUCCESS) { /* Could not update hash table entry at DPH with rateset */ lim_log(mac_ctx, LOGE, FL("Couldn't update hash entry for aid=%d, MacAddr: " 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 8e267663c73d..81f8714bfab8 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 @@ -172,8 +172,8 @@ void lim_update_assoc_sta_datas(tpAniSirGlobal mac_ctx, if (assoc_rsp->VHTCaps.present) vht_caps = &assoc_rsp->VHTCaps; - else if (assoc_rsp->vendor2_ie.VHTCaps.present) - vht_caps = &assoc_rsp->vendor2_ie.VHTCaps; + else if (assoc_rsp->vendor_vht_ie.VHTCaps.present) + vht_caps = &assoc_rsp->vendor_vht_ie.VHTCaps; if (IS_DOT11_MODE_VHT(session_entry->dot11mode)) { if ((vht_caps != NULL) && vht_caps->present) { diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index 347198956135..df4cd348ad20 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -610,6 +610,8 @@ lim_configure_ap_start_bss_session(tpAniSirGlobal mac_ctx, tpPESession session, session->ssidHidden = sme_start_bss_req->ssidHidden; session->wps_state = sme_start_bss_req->wps_state; session->sap_dot11mc = sme_start_bss_req->sap_dot11mc; + session->vendor_vht_sap = + sme_start_bss_req->vendor_vht_sap; lim_get_short_slot_from_phy_mode(mac_ctx, session, session->gLimPhyMode, &session->shortSlotTimeSupported); session->isCoalesingInIBSSAllowed = 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 26aa7ca55e9f..1f367b75a469 100644 --- a/core/mac/src/pe/lim/lim_prop_exts_utils.c +++ b/core/mac/src/pe/lim/lim_prop_exts_utils.c @@ -167,7 +167,7 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie, session->vhtCapability) { session->vhtCapabilityPresentInBeacon = 1; if (((beacon_struct->Vendor1IEPresent && - beacon_struct->vendor2_ie.present && + beacon_struct->vendor_vht_ie.present && beacon_struct->Vendor3IEPresent)) && (((beacon_struct->VHTCaps.txMCSMap & VHT_MCS_3x3_MASK) == VHT_MCS_3x3_MASK) && diff --git a/core/mac/src/pe/lim/lim_send_frames_host_roam.c b/core/mac/src/pe/lim/lim_send_frames_host_roam.c index 5594dfc78843..50c86a6ff657 100644 --- a/core/mac/src/pe/lim/lim_send_frames_host_roam.c +++ b/core/mac/src/pe/lim/lim_send_frames_host_roam.c @@ -304,14 +304,14 @@ void lim_send_reassoc_req_with_ft_ies_mgmt_frame(tpAniSirGlobal mac_ctx, pe_session->is_vendor_specific_vhtcaps) { lim_log(mac_ctx, LOG1, FL("Populate Vendor VHT IEs in Re-Assoc Request")); - frm.vendor2_ie.present = 1; - frm.vendor2_ie.type = + frm.vendor_vht_ie.present = 1; + frm.vendor_vht_ie.type = pe_session->vendor_specific_vht_ie_type; - frm.vendor2_ie.sub_type = + frm.vendor_vht_ie.sub_type = pe_session->vendor_specific_vht_ie_sub_type; - frm.vendor2_ie.VHTCaps.present = 1; + frm.vendor_vht_ie.VHTCaps.present = 1; populate_dot11f_vht_caps(mac_ctx, pe_session, - &frm.vendor2_ie.VHTCaps); + &frm.vendor_vht_ie.VHTCaps); vht_enabled = true; } status = dot11f_get_packed_re_assoc_request_size(mac_ctx, &frm, diff --git a/core/mac/src/pe/lim/lim_send_management_frames.c b/core/mac/src/pe/lim/lim_send_management_frames.c index 93408fc9f590..b10e5847a4aa 100644 --- a/core/mac/src/pe/lim/lim_send_management_frames.c +++ b/core/mac/src/pe/lim/lim_send_management_frames.c @@ -1243,7 +1243,24 @@ lim_send_assoc_rsp_mgmt_frame(tpAniSirGlobal mac_ctx, populate_dot11f_vht_caps(mac_ctx, pe_session, &frm.VHTCaps); populate_dot11f_vht_operation(mac_ctx, pe_session, - &frm.VHTOperation); + &frm.VHTOperation); + is_vht = true; + } + if (pe_session->vhtCapability && + pe_session->vendor_vht_sap && + (assoc_req != NULL) && + assoc_req->vendor_vht_ie.VHTCaps.present) { + lim_log(mac_ctx, LOG1, + FL("Populate Vendor VHT IEs in Assoc Rsponse")); + frm.vendor_vht_ie.present = 1; + frm.vendor_vht_ie.type = + pe_session->vendor_specific_vht_ie_type; + frm.vendor_vht_ie.sub_type = + pe_session->vendor_specific_vht_ie_sub_type; + + frm.vendor_vht_ie.VHTCaps.present = 1; + populate_dot11f_vht_caps(mac_ctx, pe_session, + &frm.vendor_vht_ie.VHTCaps); is_vht = true; } populate_dot11f_ext_cap(mac_ctx, is_vht, &frm.ExtCap, @@ -1812,15 +1829,15 @@ lim_send_assoc_req_mgmt_frame(tpAniSirGlobal mac_ctx, pe_session->is_vendor_specific_vhtcaps) { lim_log(mac_ctx, LOG1, FL("Populate Vendor VHT IEs in Assoc Request")); - frm->vendor2_ie.present = 1; - frm->vendor2_ie.type = + frm->vendor_vht_ie.present = 1; + frm->vendor_vht_ie.type = pe_session->vendor_specific_vht_ie_type; - frm->vendor2_ie.sub_type = + frm->vendor_vht_ie.sub_type = pe_session->vendor_specific_vht_ie_sub_type; - frm->vendor2_ie.VHTCaps.present = 1; + frm->vendor_vht_ie.VHTCaps.present = 1; populate_dot11f_vht_caps(mac_ctx, pe_session, - &frm->vendor2_ie.VHTCaps); + &frm->vendor_vht_ie.VHTCaps); vht_enabled = true; } if (pe_session->is_ext_caps_present) diff --git a/core/mac/src/sys/legacy/src/utils/src/dot11f.c b/core/mac/src/sys/legacy/src/utils/src/dot11f.c index d5068aae9b91..458e073c088d 100644 --- a/core/mac/src/sys/legacy/src/utils/src/dot11f.c +++ b/core/mac/src/sys/legacy/src/utils/src/dot11f.c @@ -33,7 +33,7 @@ * * * This file was automatically generated by 'framesc' - * Mon Sep 19 14:42:34 2016 from the following file(s): + * Mon Oct 3 12:40:25 2016 from the following file(s): * * dot11f.frms * @@ -5949,25 +5949,25 @@ uint32_t dot11f_unpack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx, #define SigIesec_chan_offset_ele (0x007f) -static const tFFDefn FFS_vendor2_ie[] = { +static const tFFDefn FFS_vendor_vht_ie[] = { { NULL, 0, 0, 0,}, }; -static const tIEDefn IES_vendor2_ie[] = { - { offsetof(tDot11fIEvendor2_ie, VHTCaps), offsetof(tDot11fIEVHTCaps, +static const tIEDefn IES_vendor_vht_ie[] = { + { offsetof(tDot11fIEvendor_vht_ie, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, }, - { offsetof(tDot11fIEvendor2_ie, VHTOperation), + { offsetof(tDot11fIEvendor_vht_ie, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation", 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; -uint32_t dot11f_unpack_ie_vendor2_ie(tpAniSirGlobal pCtx, - uint8_t *pBuf, - uint8_t ielen, - tDot11fIEvendor2_ie *pDst) +uint32_t dot11f_unpack_ie_vendor_vht_ie(tpAniSirGlobal pCtx, + uint8_t *pBuf, + uint8_t ielen, + tDot11fIEvendor_vht_ie *pDst) { uint32_t status = DOT11F_PARSE_SUCCESS; (void) pBuf; (void)ielen; /* Shutup the compiler */ @@ -5984,14 +5984,14 @@ uint32_t dot11f_unpack_ie_vendor2_ie(tpAniSirGlobal pCtx, status |= unpack_core(pCtx, pBuf, ielen, - FFS_vendor2_ie, - IES_vendor2_ie, + FFS_vendor_vht_ie, + IES_vendor_vht_ie, (uint8_t *)pDst, sizeof(*pDst)); return status; -} /* End dot11f_unpack_ie_vendor2_ie. */ +} /* End dot11f_unpack_ie_vendor_vht_ie. */ -#define SigIevendor2_ie (0x0080) +#define SigIevendor_vht_ie (0x0080) static const tFFDefn FFS_AddTSRequest[] = { @@ -6208,10 +6208,10 @@ static const tIEDefn IES_AssocRequest[] = { { offsetof(tDot11fAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, }, - { offsetof(tDot11fAssocRequest, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fAssocRequest, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fAssocRequest, hs20vendor_ie), offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie", 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0}, @@ -6336,10 +6336,10 @@ static const tIEDefn IES_AssocResponse[] = { { offsetof(tDot11fAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, }, - { offsetof(tDot11fAssocResponse, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fAssocResponse, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },}; uint32_t dot11f_unpack_assoc_response(tpAniSirGlobal pCtx, @@ -6567,9 +6567,10 @@ static const tIEDefn IES_Beacon[] = { { offsetof(tDot11fBeacon, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, }, - { offsetof(tDot11fBeacon, vendor2_ie), offsetof(tDot11fIEvendor2_ie, - present), 0, "vendor2_ie", 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fBeacon, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fBeacon, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, @@ -6768,9 +6769,10 @@ static const tIEDefn IES_Beacon2[] = { { offsetof(tDot11fBeacon2, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, }, - { offsetof(tDot11fBeacon2, vendor2_ie), offsetof(tDot11fIEvendor2_ie, - present), 0, "vendor2_ie", 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fBeacon2, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fBeacon2, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, @@ -6965,9 +6967,10 @@ static const tIEDefn IES_BeaconIEs[] = { { offsetof(tDot11fBeaconIEs, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, }, - { offsetof(tDot11fBeaconIEs, vendor2_ie), offsetof(tDot11fIEvendor2_ie, - present), 0, "vendor2_ie", 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fBeaconIEs, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fBeaconIEs, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, @@ -7573,10 +7576,10 @@ static const tIEDefn IES_ProbeResponse[] = { { offsetof(tDot11fProbeResponse, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, }, - { offsetof(tDot11fProbeResponse, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fProbeResponse, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fProbeResponse, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, @@ -7831,10 +7834,10 @@ static const tIEDefn IES_ReAssocRequest[] = { { offsetof(tDot11fReAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, }, - { offsetof(tDot11fReAssocRequest, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fReAssocRequest, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fReAssocRequest, hs20vendor_ie), offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie", 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0}, @@ -7965,10 +7968,10 @@ static const tIEDefn IES_ReAssocResponse[] = { { offsetof(tDot11fReAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, }, - { offsetof(tDot11fReAssocResponse, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fReAssocResponse, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },}; uint32_t dot11f_unpack_re_assoc_response(tpAniSirGlobal pCtx, @@ -10274,13 +10277,13 @@ static uint32_t unpack_core(tpAniSirGlobal pCtx, sizeof(tDot11fIEsec_chan_offset_ele) * countOffset)); break; - case SigIevendor2_ie: + case SigIevendor_vht_ie: status |= - dot11f_unpack_ie_vendor2_ie( + dot11f_unpack_ie_vendor_vht_ie( pCtx, pBufRemaining, len, - (tDot11fIEvendor2_ie *) + (tDot11fIEvendor_vht_ie *) (pFrm + pIe->offset + - sizeof(tDot11fIEvendor2_ie) * + sizeof(tDot11fIEvendor_vht_ie) * countOffset)); break; default: @@ -11453,8 +11456,8 @@ uint32_t dot11f_get_packed_ie_hs20vendor_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_get_packed_ie_hs20vendor_ie. */ -uint32_t dot11f_get_packed_ie_vendor2_ie(tpAniSirGlobal pCtx, - tDot11fIEvendor2_ie *pIe, uint32_t *pnNeeded) +uint32_t dot11f_get_packed_ie_vendor_vht_ie(tpAniSirGlobal pCtx, + tDot11fIEvendor_vht_ie *pIe, uint32_t *pnNeeded) { uint32_t status = DOT11F_PARSE_SUCCESS; (void)pCtx; @@ -11462,11 +11465,11 @@ uint32_t dot11f_get_packed_ie_vendor2_ie(tpAniSirGlobal pCtx, *pnNeeded += 1; *pnNeeded += 1; status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, - IES_vendor2_ie); + IES_vendor_vht_ie); break; } return status; -} /* End dot11f_get_packed_ie_vendor2_ie. */ +} /* End dot11f_get_packed_ie_vendor_vht_ie. */ uint32_t dot11f_get_packed_add_ts_request_size(tpAniSirGlobal pCtx, tDot11fAddTSRequest *pFrm, uint32_t *pnNeeded) @@ -12949,11 +12952,11 @@ static uint32_t get_packed_size_core(tpAniSirGlobal pCtx, (pFrm + pIe->offset + offset * i))-> present; break; - case SigIevendor2_ie: - offset = sizeof(tDot11fIEvendor2_ie); + case SigIevendor_vht_ie: + offset = sizeof(tDot11fIEvendor_vht_ie); status |= - dot11f_get_packed_ie_vendor2_ie( - pCtx, (tDot11fIEvendor2_ie *) + dot11f_get_packed_ie_vendor_vht_ie( + pCtx, (tDot11fIEvendor_vht_ie *) (pFrm + pIe->offset + offset * i), pnNeeded); break; @@ -20413,17 +20416,17 @@ uint32_t dot11f_pack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx, return DOT11F_PARSE_SUCCESS; } /* End dot11f_pack_ie_sec_chan_offset_ele. */ -uint32_t dot11f_pack_ie_vendor2_ie(tpAniSirGlobal pCtx, - tDot11fIEvendor2_ie *pSrc, - uint8_t *pBuf, - uint32_t nBuf, - uint32_t *pnConsumed) +uint32_t dot11f_pack_ie_vendor_vht_ie(tpAniSirGlobal pCtx, + tDot11fIEvendor_vht_ie *pSrc, + uint8_t *pBuf, + uint32_t nBuf, + uint32_t *pnConsumed) { uint8_t *pIeLen = 0; uint32_t nConsumedOnEntry = *pnConsumed; uint32_t nNeeded = 0U; uint32_t status = DOT11F_PARSE_SUCCESS; - status = dot11f_get_packed_ie_vendor2_ie(pCtx, pSrc, &nNeeded); + status = dot11f_get_packed_ie_vendor_vht_ie(pCtx, pSrc, &nNeeded); if (!DOT11F_SUCCEEDED(status)) return status; while (pSrc->present) { @@ -20450,8 +20453,8 @@ uint32_t dot11f_pack_ie_vendor2_ie(tpAniSirGlobal pCtx, pBuf, nBuf, pnConsumed, - FFS_vendor2_ie, - IES_vendor2_ie); + FFS_vendor_vht_ie, + IES_vendor_vht_ie); break; } (void)pCtx; @@ -20459,7 +20462,7 @@ uint32_t dot11f_pack_ie_vendor2_ie(tpAniSirGlobal pCtx, *pIeLen = *pnConsumed - nConsumedOnEntry - 2; } return status; -} /* End dot11f_pack_ie_vendor2_ie. */ +} /* End dot11f_pack_ie_vendor_vht_ie. */ uint32_t dot11f_pack_add_ts_request(tpAniSirGlobal pCtx, tDot11fAddTSRequest *pFrm, @@ -22402,12 +22405,12 @@ static uint32_t pack_core(tpAniSirGlobal pCtx, sizeof(tDot11fIEsec_chan_offset_ele) * i), pBufRemaining, nBufRemaining, &len); break; - case SigIevendor2_ie: + case SigIevendor_vht_ie: status |= - dot11f_pack_ie_vendor2_ie( - pCtx, (tDot11fIEvendor2_ie *) + dot11f_pack_ie_vendor_vht_ie( + pCtx, (tDot11fIEvendor_vht_ie *) (pSrc + pIe->offset + - sizeof(tDot11fIEvendor2_ie) * i), + sizeof(tDot11fIEvendor_vht_ie) * i), pBufRemaining, nBufRemaining, &len); break; default: diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index 360c76a1df92..4cfb1fff3c6f 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -2561,19 +2561,19 @@ tSirRetStatus sir_convert_probe_frame2_struct(tpAniSirGlobal pMac, pProbeResp->Vendor1IEPresent = pr->Vendor1IE.present; pProbeResp->Vendor3IEPresent = pr->Vendor3IE.present; - pProbeResp->vendor2_ie.present = pr->vendor2_ie.present; - if (pr->vendor2_ie.present) { - pProbeResp->vendor2_ie.type = pr->vendor2_ie.type; - pProbeResp->vendor2_ie.sub_type = pr->vendor2_ie.sub_type; - } - if (pr->vendor2_ie.VHTCaps.present) { - qdf_mem_copy(&pProbeResp->vendor2_ie.VHTCaps, - &pr->vendor2_ie.VHTCaps, + pProbeResp->vendor_vht_ie.present = pr->vendor_vht_ie.present; + if (pr->vendor_vht_ie.present) { + pProbeResp->vendor_vht_ie.type = pr->vendor_vht_ie.type; + pProbeResp->vendor_vht_ie.sub_type = pr->vendor_vht_ie.sub_type; + } + if (pr->vendor_vht_ie.VHTCaps.present) { + qdf_mem_copy(&pProbeResp->vendor_vht_ie.VHTCaps, + &pr->vendor_vht_ie.VHTCaps, sizeof(tDot11fIEVHTCaps)); } - if (pr->vendor2_ie.VHTOperation.present) { - qdf_mem_copy(&pProbeResp->vendor2_ie.VHTOperation, - &pr->vendor2_ie.VHTOperation, + if (pr->vendor_vht_ie.VHTOperation.present) { + qdf_mem_copy(&pProbeResp->vendor_vht_ie.VHTOperation, + &pr->vendor_vht_ie.VHTOperation, sizeof(tDot11fIEVHTOperation)); } /* Update HS 2.0 Information Element */ @@ -2798,6 +2798,22 @@ sir_convert_assoc_req_frame2_struct(tpAniSirGlobal pMac, ext_cap->timing_meas, ext_cap->fine_time_meas_initiator, ext_cap->fine_time_meas_responder); } + + pAssocReq->vendor_vht_ie.present = ar->vendor_vht_ie.present; + if (ar->vendor_vht_ie.present) { + pAssocReq->vendor_vht_ie.type = ar->vendor_vht_ie.type; + pAssocReq->vendor_vht_ie.sub_type = ar->vendor_vht_ie.sub_type; + + if (ar->vendor_vht_ie.VHTCaps.present) { + qdf_mem_copy(&pAssocReq->vendor_vht_ie.VHTCaps, + &ar->vendor_vht_ie.VHTCaps, + sizeof(tDot11fIEVHTCaps)); + lim_log(pMac, LOG1, + FL("Received Assoc Request with Vendor specific VHT Cap")); + lim_log_vht_cap(pMac, &pAssocReq->VHTCaps); + } + } + qdf_mem_free(ar); return eSIR_SUCCESS; @@ -2998,27 +3014,27 @@ sir_convert_assoc_resp_frame2_struct(tpAniSirGlobal pMac, lim_log_qos_map_set(pMac, &pAssocRsp->QosMapSet); } - pAssocRsp->vendor2_ie.present = ar.vendor2_ie.present; - if (ar.vendor2_ie.present) { - pAssocRsp->vendor2_ie.type = ar.vendor2_ie.type; - pAssocRsp->vendor2_ie.sub_type = ar.vendor2_ie.sub_type; + pAssocRsp->vendor_vht_ie.present = ar.vendor_vht_ie.present; + if (ar.vendor_vht_ie.present) { + pAssocRsp->vendor_vht_ie.type = ar.vendor_vht_ie.type; + pAssocRsp->vendor_vht_ie.sub_type = ar.vendor_vht_ie.sub_type; } if (ar.OBSSScanParameters.present) { qdf_mem_copy(&pAssocRsp->obss_scanparams, &ar.OBSSScanParameters, sizeof(struct sDot11fIEOBSSScanParameters)); } - if (ar.vendor2_ie.VHTCaps.present) { - qdf_mem_copy(&pAssocRsp->vendor2_ie.VHTCaps, - &ar.vendor2_ie.VHTCaps, + if (ar.vendor_vht_ie.VHTCaps.present) { + qdf_mem_copy(&pAssocRsp->vendor_vht_ie.VHTCaps, + &ar.vendor_vht_ie.VHTCaps, sizeof(tDot11fIEVHTCaps)); lim_log(pMac, LOG1, FL("Received Assoc Response with Vendor specific VHT Cap")); lim_log_vht_cap(pMac, &pAssocRsp->VHTCaps); } - if (ar.vendor2_ie.VHTOperation.present) { - qdf_mem_copy(&pAssocRsp->vendor2_ie.VHTOperation, - &ar.vendor2_ie.VHTOperation, + if (ar.vendor_vht_ie.VHTOperation.present) { + qdf_mem_copy(&pAssocRsp->vendor_vht_ie.VHTOperation, + &ar.vendor_vht_ie.VHTOperation, sizeof(tDot11fIEVHTOperation)); lim_log(pMac, LOG1, FL("Received Assoc Response with Vendor specific VHT Oper")); @@ -3733,22 +3749,23 @@ sir_parse_beacon_ie(tpAniSirGlobal pMac, pBeaconStruct->Vendor1IEPresent = pBies->Vendor1IE.present; pBeaconStruct->Vendor3IEPresent = pBies->Vendor3IE.present; - pBeaconStruct->vendor2_ie.present = pBies->vendor2_ie.present; - if (pBies->vendor2_ie.present) { - pBeaconStruct->vendor2_ie.type = pBies->vendor2_ie.type; - pBeaconStruct->vendor2_ie.sub_type = pBies->vendor2_ie.sub_type; + pBeaconStruct->vendor_vht_ie.present = pBies->vendor_vht_ie.present; + if (pBies->vendor_vht_ie.present) { + pBeaconStruct->vendor_vht_ie.type = pBies->vendor_vht_ie.type; + pBeaconStruct->vendor_vht_ie.sub_type = + pBies->vendor_vht_ie.sub_type; } - if (pBies->vendor2_ie.VHTCaps.present) { - pBeaconStruct->vendor2_ie.VHTCaps.present = 1; - qdf_mem_copy(&pBeaconStruct->vendor2_ie.VHTCaps, - &pBies->vendor2_ie.VHTCaps, + if (pBies->vendor_vht_ie.VHTCaps.present) { + pBeaconStruct->vendor_vht_ie.VHTCaps.present = 1; + qdf_mem_copy(&pBeaconStruct->vendor_vht_ie.VHTCaps, + &pBies->vendor_vht_ie.VHTCaps, sizeof(tDot11fIEVHTCaps)); } - if (pBies->vendor2_ie.VHTOperation.present) { - pBeaconStruct->vendor2_ie.VHTOperation.present = 1; - qdf_mem_copy(&pBeaconStruct->vendor2_ie.VHTOperation, - &pBies->vendor2_ie.VHTOperation, + if (pBies->vendor_vht_ie.VHTOperation.present) { + pBeaconStruct->vendor_vht_ie.VHTOperation.present = 1; + qdf_mem_copy(&pBeaconStruct->vendor_vht_ie.VHTOperation, + &pBies->vendor_vht_ie.VHTOperation, sizeof(tDot11fIEVHTOperation)); } if (pBies->ExtCap.present) { @@ -4090,24 +4107,24 @@ sir_convert_beacon_frame2_struct(tpAniSirGlobal pMac, pBeaconStruct->Vendor1IEPresent = pBeacon->Vendor1IE.present; pBeaconStruct->Vendor3IEPresent = pBeacon->Vendor3IE.present; - pBeaconStruct->vendor2_ie.present = pBeacon->vendor2_ie.present; - if (pBeacon->vendor2_ie.present) { - pBeaconStruct->vendor2_ie.type = pBeacon->vendor2_ie.type; - pBeaconStruct->vendor2_ie.sub_type = - pBeacon->vendor2_ie.sub_type; + pBeaconStruct->vendor_vht_ie.present = pBeacon->vendor_vht_ie.present; + if (pBeacon->vendor_vht_ie.present) { + pBeaconStruct->vendor_vht_ie.type = pBeacon->vendor_vht_ie.type; + pBeaconStruct->vendor_vht_ie.sub_type = + pBeacon->vendor_vht_ie.sub_type; } - if (pBeacon->vendor2_ie.present) { + if (pBeacon->vendor_vht_ie.present) { PELOG1(lim_log(pMac, LOG1, FL("Vendor Specific VHT caps present in Beacon Frame!")); ) } - if (pBeacon->vendor2_ie.VHTCaps.present) { - qdf_mem_copy(&pBeaconStruct->vendor2_ie.VHTCaps, - &pBeacon->vendor2_ie.VHTCaps, + if (pBeacon->vendor_vht_ie.VHTCaps.present) { + qdf_mem_copy(&pBeaconStruct->vendor_vht_ie.VHTCaps, + &pBeacon->vendor_vht_ie.VHTCaps, sizeof(tDot11fIEVHTCaps)); } - if (pBeacon->vendor2_ie.VHTOperation.present) { - qdf_mem_copy(&pBeaconStruct->vendor2_ie.VHTOperation, + if (pBeacon->vendor_vht_ie.VHTOperation.present) { + qdf_mem_copy(&pBeaconStruct->vendor_vht_ie.VHTOperation, &pBeacon->VHTOperation, sizeof(tDot11fIEVHTOperation)); } diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 105682b6ed65..517a01185aab 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1216,6 +1216,7 @@ typedef struct tagCsrConfigParam { uint8_t enable_txbf_sap_mode; uint8_t enable2x2; bool enableVhtFor24GHz; + bool vendor_vht_sap; uint8_t enableMuBformee; uint8_t enableVhtpAid; uint8_t enableVhtGid; diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 959a1ea019ed..89bf7b20a3e9 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -663,6 +663,7 @@ typedef struct tagCsrConfig { uint32_t edca_bk_aifs; uint32_t edca_be_aifs; bool enable_fatal_event; + bool vendor_vht_sap; enum wmi_dwelltime_adaptive_mode scan_adaptive_dwell_mode; enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode; struct csr_sta_roam_policy_params sta_roam_policy; diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index a401224bb099..300ce13d1556 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2427,6 +2427,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pParam->isRoamOffloadEnabled; #endif pMac->roam.configParam.obssEnabled = pParam->obssEnabled; + pMac->roam.configParam.vendor_vht_sap = + pParam->vendor_vht_sap; pMac->roam.configParam.conc_custom_rule1 = pParam->conc_custom_rule1; pMac->roam.configParam.conc_custom_rule2 = @@ -2653,8 +2655,10 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->enable_dot11p = pMac->enable_dot11p; csr_set_channels(pMac, pParam); pParam->obssEnabled = cfg_params->obssEnabled; + pParam->vendor_vht_sap = + pMac->roam.configParam.vendor_vht_sap; pParam->roam_dense_rssi_thresh_offset = - cfg_params->roam_params.dense_rssi_thresh_offset; + cfg_params->roam_params.dense_rssi_thresh_offset; pParam->roam_dense_min_aps = cfg_params->roam_params.dense_min_aps_cnt; pParam->roam_dense_traffic_thresh = @@ -14282,10 +14286,11 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, pIes->VHTCaps.numSoundingDim) txBFCsnValue = QDF_MIN(txBFCsnValue, pIes->VHTCaps.numSoundingDim); - else if (IS_BSS_VHT_CAPABLE(pIes->vendor2_ie.VHTCaps) - && pIes->vendor2_ie.VHTCaps.numSoundingDim) + else if (IS_BSS_VHT_CAPABLE(pIes->vendor_vht_ie.VHTCaps) + && pIes->vendor_vht_ie.VHTCaps.numSoundingDim) txBFCsnValue = QDF_MIN(txBFCsnValue, - pIes->vendor2_ie.VHTCaps.numSoundingDim); + pIes->vendor_vht_ie. + VHTCaps.numSoundingDim); } csr_join_req->vht_config.csnof_beamformer_antSup = txBFCsnValue; @@ -15074,6 +15079,8 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId sizeof(pParam->addIeParams)); pMsg->obssEnabled = pMac->roam.configParam.obssEnabled; pMsg->sap_dot11mc = pParam->sap_dot11mc; + pMsg->vendor_vht_sap = + pMac->roam.configParam.vendor_vht_sap; return cds_send_mb_message_to_mac(pMsg); } diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index bbcecf077bec..5aadb0a1f0b1 100644 --- a/core/sme/src/csr/csr_util.c +++ b/core/sme/src/csr/csr_util.c @@ -1467,7 +1467,7 @@ QDF_STATUS csr_get_phy_mode_from_bss(tpAniSirGlobal pMac, if (pIes->HTCaps.present) { phyMode = eCSR_DOT11_MODE_11n; if (IS_BSS_VHT_CAPABLE(pIes->VHTCaps) || - IS_BSS_VHT_CAPABLE(pIes->vendor2_ie.VHTCaps)) + IS_BSS_VHT_CAPABLE(pIes->vendor_vht_ie.VHTCaps)) phyMode = eCSR_DOT11_MODE_11ac; } *pPhyMode = phyMode; -- cgit v1.2.3 From 6485e1a40755d0ce5f429dd68c14ce98829a99e2 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 7 Oct 2016 12:54:41 -0700 Subject: Release 5.1.0.29S Release 5.1.0.29S Change-Id: Ifaeb43ba3ef6e851e3e5e0462dfd28ebb4dc29b3 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 c5038b641024..d4785941ed5e 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 "R" +#define QWLAN_VERSION_EXTRA "S" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29R" +#define QWLAN_VERSIONSTR "5.1.0.29S" #endif /* QWLAN_VERSION_H */ -- cgit v1.2.3