From e513e6f36a82ecad02797ea53d1bb6eacea0f8a1 Mon Sep 17 00:00:00 2001 From: Ed Tam <etam@google.com> Date: Tue, 4 Mar 2014 12:21:21 -0800 Subject: [PATCH] prima: release v3.2.3.18 git://codeaurora.org/external/wlan/prima.git ddf6376 wlan : Revision 3.2.3.18 c7f2ee4 wlan: adding cfg.ini parameter to configure to RA filter. b55e3a1 wlan : Revision 3.2.3.17 82b2600 wlan: Remove extra line & error handling 479d343 wlan: Check for WatchDog reset status during queue selection 9322c18 wlan: Use HDD context flag to check SSR status 1c12443 wlan: Remove "isMcAddrListFilter" INI param 9297d6c wlan: Multicast Address Filter cleanup 375d30f wlan: Updating the Channel list based on 11d from Nv.bin. 666d726 wlan: Additional Scan IE data is not as per interface. Signed-off-by: Ed Tam <etam@google.com> --- .../staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h | 22 +- .../prima/CORE/HDD/src/wlan_hdd_assoc.c | 17 +- .../staging/prima/CORE/HDD/src/wlan_hdd_cfg.c | 36 ++- .../prima/CORE/HDD/src/wlan_hdd_cfg80211.c | 24 +- .../CORE/HDD/src/wlan_hdd_early_suspend.c | 153 +++++---- .../prima/CORE/HDD/src/wlan_hdd_main.c | 9 +- .../prima/CORE/HDD/src/wlan_hdd_scan.c | 36 ++- .../prima/CORE/HDD/src/wlan_hdd_wext.c | 96 ++++-- .../staging/prima/CORE/HDD/src/wlan_hdd_wmm.c | 9 + .../prima/CORE/MAC/inc/qwlan_version.h | 4 +- drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h | 24 +- .../staging/prima/CORE/MAC/inc/wniCfgSta.h | 14 +- .../prima/CORE/MAC/src/cfg/cfgParamName.c | 2 + .../prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt | 28 +- drivers/staging/prima/CORE/SME/inc/csrApi.h | 9 +- .../staging/prima/CORE/SME/inc/csrInternal.h | 11 +- .../prima/CORE/SME/src/csr/csrApiRoam.c | 301 ++++++------------ .../prima/CORE/SME/src/csr/csrApiScan.c | 89 +++--- .../staging/prima/CORE/SME/src/csr/csrUtil.c | 7 +- .../staging/prima/CORE/VOSS/src/vos_sched.c | 5 +- .../staging/prima/CORE/VOSS/src/vos_sched.h | 1 + .../staging/prima/CORE/WDA/src/wlan_qct_wda.c | 32 ++ .../staging/prima/firmware_bin/WCNSS_cfg.dat | Bin 10330 -> 10394 bytes drivers/staging/prima/riva/inc/wlan_hal_cfg.h | 5 +- 24 files changed, 526 insertions(+), 408 deletions(-) diff --git a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h index 3a2d70b8577c..ea8505b58419 100644 --- a/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/drivers/staging/prima/CORE/HDD/inc/wlan_hdd_cfg.h @@ -1342,13 +1342,6 @@ typedef enum #define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_MAX ( 1 ) #define CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_DEFAULT ( 0 ) -#ifdef WLAN_FEATURE_PACKET_FILTERING -#define CFG_MC_ADDR_LIST_FILTER_NAME "isMcAddrListFilter" -#define CFG_MC_ADDR_LIST_FILTER_MIN ( 0 ) -#define CFG_MC_ADDR_LIST_FILTER_MAX ( 1 ) -#define CFG_MC_ADDR_LIST_FILTER_DEFAULT ( 0 ) -#endif - #define CFG_ENABLE_SSR "gEnableSSR" #define CFG_ENABLE_SSR_MIN ( 0 ) #define CFG_ENABLE_SSR_MAX ( 1 ) @@ -1783,6 +1776,16 @@ typedef enum #define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_MAX ( 10000 ) #define CFG_SPLIT_SCAN_TRAFFIC_MONITOR_TIMER_DEFAULT ( 5000 ) +#define CFG_RA_FILTER_ENABLE_NAME "gRAFilterEnable" +#define CFG_RA_FILTER_ENABLE_DEFAULT (1) +#define CFG_RA_FILTER_ENABLE_MIN (0) +#define CFG_RA_FILTER_ENABLE_MAX (1) + +#define CFG_RA_RATE_LIMIT_INTERVAL_NAME "gRARateLimitInterval" +#define CFG_RA_RATE_LIMIT_INTERVAL_DEFAULT (60) +#define CFG_RA_RATE_LIMIT_INTERVAL_MIN (0) +#define CFG_RA_RATE_LIMIT_INTERVAL_MAX (60) + /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -2110,9 +2113,6 @@ typedef struct v_U8_t allowMCCGODiffBI; v_BOOL_t isP2pDeviceAddrAdministrated; v_U8_t thermalMitigationEnable; -#ifdef WLAN_FEATURE_PACKET_FILTERING - v_BOOL_t isMcAddrListFilter; -#endif #ifdef WLAN_FEATURE_11AC v_U8_t vhtChannelWidth; v_U8_t vhtRxMCS; @@ -2165,6 +2165,8 @@ typedef struct v_U32_t cfgMaxMediumTime; v_U8_t enableTrafficMonitor; v_U32_t trafficIdleTimeout; + v_BOOL_t cfgRAFilterEnable; + v_U16_t cfgRARateLimitInterval; } hdd_config_t; /*--------------------------------------------------------------------------- Function declarations and documenation diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c index d3bf1a024bb1..e235595251e2 100755 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c @@ -2311,19 +2311,12 @@ eHalStatus hdd_smeRoamCallback( void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U3 "offload: already called mcastbcast filter"); (WLAN_HDD_GET_CTX(pAdapter))->hdd_mcastbcast_filter_set = FALSE; } -#ifdef WLAN_FEATURE_PACKET_FILTERING - if (pHddCtx->cfg_ini->isMcAddrListFilter) - { - /*Multicast addr filtering is enabled*/ - if (pAdapter->mc_addr_list.isFilterApplied) - { - /*Filter applied during suspend mode*/ - /*Clear it here*/ - wlan_hdd_set_mc_addr_list(pAdapter, FALSE); - } - } +#ifdef WLAN_FEATURE_PACKET_FILTERING + /* Call to clear any MC Addr List filter applied after + * successful connection. + */ + wlan_hdd_set_mc_addr_list(pAdapter, FALSE); #endif - } break; case eCSR_ROAM_IBSS_LEAVE: diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg.c index cb9a5b9a367e..96796fafc871 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg.c @@ -1998,14 +1998,6 @@ REG_VARIABLE( CFG_THERMAL_MIGRATION_ENABLE_NAME, WLAN_PARAM_Integer, CFG_THERMAL_MIGRATION_ENABLE_DEFAULT, CFG_THERMAL_MIGRATION_ENABLE_MIN, CFG_THERMAL_MIGRATION_ENABLE_MAX ), -#ifdef WLAN_FEATURE_PACKET_FILTERING - REG_VARIABLE( CFG_MC_ADDR_LIST_FILTER_NAME, WLAN_PARAM_Integer, - hdd_config_t, isMcAddrListFilter, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_MC_ADDR_LIST_FILTER_DEFAULT, - CFG_MC_ADDR_LIST_FILTER_MIN, - CFG_MC_ADDR_LIST_FILTER_MAX ), -#endif REG_VARIABLE( CFG_ENABLE_MODULATED_DTIM_NAME, WLAN_PARAM_Integer, hdd_config_t, enableModulatedDTIM, @@ -2298,6 +2290,20 @@ REG_VARIABLE(CFG_MAX_MEDIUM_TIME, WLAN_PARAM_Integer, CFG_TRAFFIC_IDLE_TIMEOUT_DEFAULT, CFG_TRAFFIC_IDLE_TIMEOUT_MIN, CFG_TRAFFIC_IDLE_TIMEOUT_MAX), + + REG_VARIABLE(CFG_RA_FILTER_ENABLE_NAME, WLAN_PARAM_Integer, + hdd_config_t, cfgRAFilterEnable, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_RA_FILTER_ENABLE_DEFAULT, + CFG_RA_FILTER_ENABLE_MIN, + CFG_RA_FILTER_ENABLE_MAX ), + + REG_VARIABLE(CFG_RA_RATE_LIMIT_INTERVAL_NAME, WLAN_PARAM_Integer, + hdd_config_t, cfgRARateLimitInterval, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_RA_RATE_LIMIT_INTERVAL_DEFAULT, + CFG_RA_RATE_LIMIT_INTERVAL_MIN, + CFG_RA_RATE_LIMIT_INTERVAL_MAX ), }; /* @@ -3788,6 +3794,20 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Could not pass on WNI_CFG_MAX_MEDIUM_TIME to CCM"); } + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RA_FILTER_ENABLE, pConfig->cfgRAFilterEnable, + NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_RA_FILTER_ENABLE to CCM"); + } + + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RA_RATE_LIMIT_INTERVAL, pConfig->cfgRARateLimitInterval, + NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_RA_FILTER_ENABLE to CCM"); + } + return fStatus; } diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg80211.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg80211.c index 79f256c532fe..25b9f1a802e3 100755 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -4688,19 +4688,31 @@ int wlan_hdd_cfg80211_scan( struct wiphy *wiphy, if( request->ie_len ) { /* save this for future association (join requires this) */ + /*TODO: Array needs to be converted to dynamic allocation, + * as multiple ie.s can be sent in cfg80211_scan_request structure + * CR 597966 + */ memset( &pScanInfo->scanAddIE, 0, sizeof(pScanInfo->scanAddIE) ); memcpy( pScanInfo->scanAddIE.addIEdata, request->ie, request->ie_len); pScanInfo->scanAddIE.length = request->ie_len; - if((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || + if ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode) || - (WLAN_HDD_P2P_DEVICE == pAdapter->device_mode) - ) + (WLAN_HDD_P2P_DEVICE == pAdapter->device_mode)) { - pwextBuf->roamProfile.pAddIEScan = pScanInfo->scanAddIE.addIEdata; - pwextBuf->roamProfile.nAddIEScanLength = pScanInfo->scanAddIE.length; - } + if ( request->ie_len <= SIR_MAC_MAX_IE_LENGTH) + { + pwextBuf->roamProfile.nAddIEScanLength = request->ie_len; + memcpy( pwextBuf->roamProfile.addIEScan, + request->ie, request->ie_len); + } + else + { + hddLog(VOS_TRACE_LEVEL_ERROR, "Scan Ie length is invalid:" + "%d", request->ie_len); + } + } scanRequest.uIEFieldLen = pScanInfo->scanAddIE.length; scanRequest.pIEField = pScanInfo->scanAddIE.addIEdata; diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_early_suspend.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_early_suspend.c index 4c7a2275454e..6af5370921bf 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -637,17 +637,37 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) struct list_head *p; tSirHostOffloadReq offLoadRequest; int slot_index = NS_DEFAULT_SLOT_INDEX; - tANI_U32 **selfIPv6Addr; - tANI_U32 *selfIPv6AddrValid; + tANI_U8 **selfIPv6Addr; + tANI_U8 *selfIPv6AddrValid; hdd_context_t *pHddCtx; + tHalHandle halHandle; + int status; - int i = 0, j = 0; + int i = 0, slot = 0; int ret = 0; eHalStatus returnStatus; ENTER(); hddLog(LOG1, FL(" fenable = %d"), fenable); + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD adapter is Null")); + return; + } + + halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); + pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + + status = wlan_hdd_validate_context(pHddCtx); + + if (0 != status) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: HDD context is not valid", __func__); + return; + } + if (sme_IsFeatureSupportedByFW(EXTENDED_NSOFFLOAD_SLOT)) { slot_index = NS_EXTENDED_SLOT_INDEX; @@ -656,41 +676,43 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) hddLog(VOS_TRACE_LEVEL_INFO, FL("slot_idex = %d"), slot_index); selfIPv6AddrValid = - (tANI_U32 *)vos_mem_malloc(sizeof(tANI_U32) * slot_index); - selfIPv6Addr = (tANI_U32 **)vos_mem_malloc(sizeof(tANI_U32 *) * slot_index); + (tANI_U8 *)vos_mem_malloc(sizeof(tANI_U8) * slot_index); - if (NULL == selfIPv6Addr || NULL == selfIPv6AddrValid) + if (NULL == selfIPv6AddrValid) { - hddLog (VOS_TRACE_LEVEL_ERROR, FL("Failed to allocate memory")); + hddLog (VOS_TRACE_LEVEL_ERROR, FL("Failed to allocate memory for" + " selfIPv6AddrValid")); goto end; } - for (j = 0; j < slot_index; j++) + memset(selfIPv6AddrValid, 0, slot_index * sizeof(tANI_U8)); + + selfIPv6Addr = (tANI_U8 **)vos_mem_malloc(sizeof(tANI_U8 *) * slot_index); + + if (NULL == selfIPv6Addr) { - selfIPv6Addr[j] = - (tANI_U32 *)vos_mem_malloc(sizeof(tANI_U32) * SIR_MAC_IPV6_ADDR_LEN); - if (NULL == selfIPv6Addr[j]) - { - hddLog (VOS_TRACE_LEVEL_ERROR, FL("Failed to allocate memory")); - goto end; - } + hddLog (VOS_TRACE_LEVEL_ERROR, FL("Failed to allocate memory for" + " selfIPv6Addr")); + goto end; } - memset(selfIPv6AddrValid, 0, slot_index * sizeof(tANI_U32)); + memset(selfIPv6Addr, 0, slot_index * sizeof(tANI_U8 *)); - for(i = 0; i < slot_index; i++) + for (slot = 0; slot < slot_index; slot++) { - for(j = 0; j < SIR_MAC_IPV6_ADDR_LEN; j++) + selfIPv6Addr[slot] = + (tANI_U8 *)vos_mem_malloc(SIR_MAC_IPV6_ADDR_LEN); + if (NULL == selfIPv6Addr[slot]) { - selfIPv6Addr[i][j] = 0; + hddLog (VOS_TRACE_LEVEL_ERROR, FL("Failed to allocate memory" + "for selfIPv6Addr")); + goto end; } + memset(selfIPv6Addr[slot], 0, SIR_MAC_IPV6_ADDR_LEN); } i = 0; - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - if (fenable) { in6_dev = __in6_dev_get(pAdapter->dev); @@ -702,9 +724,10 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) if (i >= slot_index) { hddLog (VOS_TRACE_LEVEL_ERROR, - FL("IPv6 address list is greater than IPv6 address supported" - " by firmware")); - hddLog (VOS_TRACE_LEVEL_ERROR, FL("FW supported IPv6 address = %d"), slot_index); + FL("IPv6 address list is greater than IPv6" + "address supported by firmware")); + hddLog (VOS_TRACE_LEVEL_ERROR, + FL("FW supported IPv6 address = %d"), slot_index); break; } ifp = list_entry(p, struct inet6_ifaddr, if_list); @@ -715,7 +738,7 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) sizeof(ifp->addr.s6_addr)); selfIPv6AddrValid[i] = SIR_IPV6_ADDR_VALID; hddLog (VOS_TRACE_LEVEL_INFO, - FL("Found IPV6_ADDR_SCOPE_LINKLOCAL Address : %pI6"), + FL("Found IPV6_ADDR_SCOPE_LINKLOCAL Address : %pI6"), selfIPv6Addr[i]); break; case IPV6_ADDR_SCOPE_GLOBAL: @@ -723,20 +746,20 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) sizeof(ifp->addr.s6_addr)); selfIPv6AddrValid[i] = SIR_IPV6_ADDR_VALID; hddLog (VOS_TRACE_LEVEL_INFO, - FL("Found IPV6_ADDR_SCOPE_GLOBAL Address : %pI6"), + FL("Found IPV6_ADDR_SCOPE_GLOBAL Address : %pI6"), selfIPv6Addr[i]); break; default: - hddLog(VOS_TRACE_LEVEL_ERROR, FL("The Scope %d is not supported"), - ipv6_addr_src_scope(&ifp->addr)); + hddLog(VOS_TRACE_LEVEL_ERROR, + FL("The Scope %d is not supported"), + ipv6_addr_src_scope(&ifp->addr)); } - if(selfIPv6AddrValid[i] == SIR_IPV6_ADDR_VALID) + if (selfIPv6AddrValid[i] == SIR_IPV6_ADDR_VALID) { i++; } - } - //read_unlock_bh(&in6_dev->lock); + vos_mem_zero(&offLoadRequest, sizeof(offLoadRequest)); for (i =0; i < slot_index; i++) { @@ -756,18 +779,22 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) offLoadRequest.nsOffloadInfo.selfIPv6Addr[1] = 0x02; offLoadRequest.nsOffloadInfo.selfIPv6Addr[11] = 0x01; offLoadRequest.nsOffloadInfo.selfIPv6Addr[12] = 0xFF; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[13] = selfIPv6Addr[i][13]; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[14] = selfIPv6Addr[i][14]; - offLoadRequest.nsOffloadInfo.selfIPv6Addr[15] = selfIPv6Addr[i][15]; + offLoadRequest.nsOffloadInfo.selfIPv6Addr[13] = + selfIPv6Addr[i][13]; + offLoadRequest.nsOffloadInfo.selfIPv6Addr[14] = + selfIPv6Addr[i][14]; + offLoadRequest.nsOffloadInfo.selfIPv6Addr[15] = + selfIPv6Addr[i][15]; offLoadRequest.nsOffloadInfo.slotIdx = i; vos_mem_copy(&offLoadRequest.nsOffloadInfo.targetIPv6Addr[0], - selfIPv6Addr[i], sizeof(tANI_U8)*SIR_MAC_IPV6_ADDR_LEN); + selfIPv6Addr[i], sizeof(tANI_U8)*SIR_MAC_IPV6_ADDR_LEN); vos_mem_copy(&offLoadRequest.nsOffloadInfo.selfMacAddr, &pAdapter->macAddressCurrent.bytes, sizeof(tANI_U8)*SIR_MAC_ADDR_LEN); - offLoadRequest.nsOffloadInfo.targetIPv6AddrValid[0] = SIR_IPV6_ADDR_VALID; + offLoadRequest.nsOffloadInfo.targetIPv6AddrValid[0] = + SIR_IPV6_ADDR_VALID; offLoadRequest.offloadType = SIR_IPV6_NS_OFFLOAD; offLoadRequest.enableOrDisable = SIR_OFFLOAD_ENABLE; @@ -779,8 +806,9 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) if ((VOS_TRUE == pHddCtx->sus_res_mcastbcast_filter_valid) && ((HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST == pHddCtx->sus_res_mcastbcast_filter) || - (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == - pHddCtx->sus_res_mcastbcast_filter))) + (HDD_MCASTBCASTFILTER_FILTER_ALL_MULTICAST_BROADCAST == + pHddCtx->sus_res_mcastbcast_filter)) + && (!pHddCtx->cfg_ini->fEnableMCAddrList)) { hddLog (VOS_TRACE_LEVEL_INFO, FL("Set offLoadRequest with" @@ -800,13 +828,13 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) offLoadRequest.nsOffloadInfo.targetIPv6Addr[0]); //Configure the Firmware with this - returnStatus = sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), + returnStatus = sme_SetHostOffload(halHandle, pAdapter->sessionId, &offLoadRequest); if(eHAL_STATUS_SUCCESS != returnStatus) { hddLog(VOS_TRACE_LEVEL_ERROR, - FL("Failed to enable HostOffload feature with status: %d"), - returnStatus); + FL("Failed to enable HostOffload feature with" + " status: %d"), returnStatus); } vos_mem_zero(&offLoadRequest, sizeof(offLoadRequest)); } @@ -833,7 +861,7 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) { hddLog(VOS_TRACE_LEVEL_ERROR, FL("IPv6 dev does not exist. Failed to request NSOffload")); - goto end; + goto end; } } else @@ -857,14 +885,15 @@ void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable) sme_SetHostOffload(WLAN_HDD_GET_HAL_CTX(pAdapter), pAdapter->sessionId, &offLoadRequest)) { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("Fail to disable Slot= %d"), i); + hddLog(VOS_TRACE_LEVEL_ERROR, FL("Failure to disable" + " %d Slot"), i); } } } end: - while (j > 0 && selfIPv6Addr[--j]) + while (slot > 0 && selfIPv6Addr[--slot]) { - vos_mem_free(selfIPv6Addr[j]); + vos_mem_free(selfIPv6Addr[slot]); } if (selfIPv6Addr) { @@ -1076,19 +1105,11 @@ static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, wlanSuspendParam->configuredMcstBcstFilterSetting = pHddCtx->configuredMcastBcastFilter; #ifdef WLAN_FEATURE_PACKET_FILTERING - if (pHddCtx->cfg_ini->isMcAddrListFilter) - { - /*Multicast addr list filter is enabled during suspend*/ - if (((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || - (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT)) - && pAdapter->mc_addr_list.mc_cnt - && (eConnectionState_Associated == - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) - { - /*set the filter*/ - wlan_hdd_set_mc_addr_list(pAdapter, TRUE); - } - } + /* During suspend, configure MC Addr list filter to the firmware + * function takes care of checking necessary conditions before + * configuring. + */ + wlan_hdd_set_mc_addr_list(pAdapter, TRUE); #endif } @@ -1143,16 +1164,10 @@ static void hdd_conf_resume_ind(hdd_adapter_t *pAdapter) #ifdef WLAN_FEATURE_PACKET_FILTERING - if (pHddCtx->cfg_ini->isMcAddrListFilter) - { - /*Multicast addr filtering is enabled*/ - if (pAdapter->mc_addr_list.isFilterApplied) - { - /*Filter applied during suspend mode*/ - /*Clear it here*/ - wlan_hdd_set_mc_addr_list(pAdapter, FALSE); - } - } + /* Filer was applied during suspend inditication + * clear it when we resume. + */ + wlan_hdd_set_mc_addr_list(pAdapter, FALSE); #endif } diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_main.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_main.c index 2c7fe8032d62..0330179741cc 100755 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_main.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_main.c @@ -197,7 +197,6 @@ static void hdd_set_multicast_list(struct net_device *dev); #endif void hdd_wlan_initial_scan(hdd_adapter_t *pAdapter); -int isWDresetInProgress(void); extern int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr); #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) @@ -228,9 +227,6 @@ static int hdd_netdev_notifier_call(struct notifier_block * nb, (strncmp(dev->name, "p2p", 3))) return NOTIFY_DONE; - if (isWDresetInProgress()) - return NOTIFY_DONE; - if (!dev->ieee80211_ptr) return NOTIFY_DONE; @@ -249,6 +245,9 @@ static int hdd_netdev_notifier_call(struct notifier_block * nb, return NOTIFY_DONE; } + if (pHddCtx->isLogpInProgress) + return NOTIFY_DONE; + hddLog(VOS_TRACE_LEVEL_INFO, "%s: %s New Net Device State = %lu", __func__, dev->name, state); @@ -6294,7 +6293,7 @@ static void hdd_driver_exit(void) } else { - while(isWDresetInProgress()) { + while(pHddCtx->isLogpInProgress) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:SSR in Progress; block rmmod for 1 second!!!", __func__); msleep(1000); diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_scan.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_scan.c index 3f5fbd3257b8..7f00efce5f9e 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_scan.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_scan.c @@ -740,10 +740,20 @@ int iw_set_scan(struct net_device *dev, struct iw_request_info *info, memcpy( pHddCtx->scan_info.scanAddIE.addIEdata, pwextBuf->genIE.addIEdata, pwextBuf->genIE.length ); pHddCtx->scan_info.scanAddIE.length = pwextBuf->genIE.length; - - pwextBuf->roamProfile.pAddIEScan = pHddCtx->scan_info.scanAddIE.addIEdata; - pwextBuf->roamProfile.nAddIEScanLength = pHddCtx->scan_info.scanAddIE.length; - + /* Maximum length of each IE is SIR_MAC_MAX_IE_LENGTH */ + if (SIR_MAC_MAX_IE_LENGTH >= pwextBuf->genIE.length) + { + memcpy( pwextBuf->roamProfile.addIEScan, + pHddCtx->scan_info.scanAddIE.addIEdata, + pHddCtx->scan_info.scanAddIE.length); + pwextBuf->roamProfile.nAddIEScanLength = + pHddCtx->scan_info.scanAddIE.length; + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid ScanIE, Length is %d", pwextBuf->genIE.length); + } /* clear previous genIE after use it */ memset( &pwextBuf->genIE, 0, sizeof(pwextBuf->genIE) ); } @@ -1121,10 +1131,20 @@ int iw_set_cscan(struct net_device *dev, struct iw_request_info *info, memcpy( pHddCtx->scan_info.scanAddIE.addIEdata, pwextBuf->genIE.addIEdata, pwextBuf->genIE.length ); pHddCtx->scan_info.scanAddIE.length = pwextBuf->genIE.length; - - pwextBuf->roamProfile.pAddIEScan = pHddCtx->scan_info.scanAddIE.addIEdata; - pwextBuf->roamProfile.nAddIEScanLength = pHddCtx->scan_info.scanAddIE.length; - + if (SIR_MAC_MAX_IE_LENGTH >= pwextBuf->genIE.length) + { + memcpy( pwextBuf->roamProfile.addIEScan, + pHddCtx->scan_info.scanAddIE.addIEdata, + pHddCtx->scan_info.scanAddIE.length); + pwextBuf->roamProfile.nAddIEScanLength = + pHddCtx->scan_info.scanAddIE.length; + } + else + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "Invalid ScanIE, Length is %d", + pwextBuf->genIE.length); + } /* clear previous genIE after use it */ memset( &pwextBuf->genIE, 0, sizeof(pwextBuf->genIE) ); } diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wext.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wext.c index 543a32731712..964ed65bebdb 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wext.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wext.c @@ -908,8 +908,8 @@ void hdd_clearRoamProfileIe( hdd_adapter_t *pAdapter) pWextState->roamProfile.pRSNReqIE = (tANI_U8 *)NULL; pWextState->roamProfile.bWPSAssociation = VOS_FALSE; - pWextState->roamProfile.pAddIEScan = (tANI_U8 *)NULL; pWextState->roamProfile.nAddIEScanLength = 0; + memset(pWextState->roamProfile.addIEScan, 0 , SIR_MAC_MAX_IE_LENGTH+2); pWextState->roamProfile.pAddIEAssoc = (tANI_U8 *)NULL; pWextState->roamProfile.nAddIEAssocLength = 0; @@ -5743,43 +5743,87 @@ int wlan_hdd_setIPv6Filter(hdd_context_t *pHddCtx, tANI_U8 filterType, void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set) { - v_U8_t filterAction; - tPacketFilterCfg request; v_U8_t i; - hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + tpSirRcvFltMcAddrList pMulticastAddrs = NULL; + tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); + hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx; - filterAction = set ? HDD_RCV_FILTER_SET : HDD_RCV_FILTER_CLEAR; + if (NULL == hHal) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HAL Handle is NULL")); + return; + } + if (NULL == pHddCtx) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD CTX is NULL")); + return; + } - /*set mulitcast addr list*/ - for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++) + /* Check if INI is enabled or not, other wise just return + */ + if (pHddCtx->cfg_ini->fEnableMCAddrList) { - memset(&request, 0, sizeof (tPacketFilterCfg)); - request.filterAction = filterAction; - request.filterId = i; + pMulticastAddrs = vos_mem_malloc(sizeof(tSirRcvFltMcAddrList)); + if (NULL == pMulticastAddrs) + { + hddLog(VOS_TRACE_LEVEL_ERROR, FL("Could not allocate Memory")); + return; + } + if (set) { - request.numParams = 1; - request.paramsData[0].protocolLayer = HDD_FILTER_PROTO_TYPE_MAC; - request.paramsData[0].cmpFlag = HDD_FILTER_CMP_TYPE_EQUAL; - request.paramsData[0].dataOffset = WLAN_HDD_80211_FRM_DA_OFFSET; - request.paramsData[0].dataLength = ETH_ALEN; - memcpy(&(request.paramsData[0].compareData[0]), - &(pAdapter->mc_addr_list.addr[i][0]), ETH_ALEN); - /*set mulitcast filters*/ - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: %s multicast filter: addr =" - MAC_ADDRESS_STR, - __func__, set ? "setting" : "clearing", - MAC_ADDR_ARRAY(request.paramsData[0].compareData)); + /* Following pre-conditions should be satisfied before wei + * configure the MC address list. + */ + if (((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || + (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT)) + && pAdapter->mc_addr_list.mc_cnt + && (eConnectionState_Associated == + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState)) + { + pMulticastAddrs->ulMulticastAddrCnt = + pAdapter->mc_addr_list.mc_cnt; + for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++) + { + memcpy(&(pMulticastAddrs->multicastAddr[i][0]), + &(pAdapter->mc_addr_list.addr[i][0]), + sizeof(pAdapter->mc_addr_list.addr[i])); + hddLog(VOS_TRACE_LEVEL_INFO, + "%s: %s multicast filter: addr =" + MAC_ADDRESS_STR, + __func__, set ? "setting" : "clearing", + MAC_ADDR_ARRAY(pMulticastAddrs->multicastAddr[i])); + } + /* Set multicast filter */ + sme_8023MulticastList(hHal, pAdapter->sessionId, + pMulticastAddrs); + } + } + else + { + /* Need to clear only if it was previously configured + */ + if (pAdapter->mc_addr_list.isFilterApplied) + { + pMulticastAddrs->ulMulticastAddrCnt = 0; + sme_8023MulticastList(hHal, pAdapter->sessionId, + pMulticastAddrs); + } + } - wlan_hdd_set_filter(pHddCtx, &request, pAdapter->sessionId); + pAdapter->mc_addr_list.isFilterApplied = set ? TRUE : FALSE; } - pAdapter->mc_addr_list.isFilterApplied = set ? TRUE : FALSE; + else + { + hddLog(VOS_TRACE_LEVEL_INFO, + FL("fEnableMCAddrList is not enabled in INI")); + } + return; } static int iw_set_packet_filter_params(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) -{ +{ hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); tpPacketFilterCfg pRequest = (tpPacketFilterCfg)wrqu->data.pointer; diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wmm.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wmm.c index 5992c6ead7c8..d8a880286bf1 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wmm.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_wmm.c @@ -81,6 +81,7 @@ #include <linux/semaphore.h> #include <wlan_hdd_hostapd.h> #include <wlan_hdd_softap_tx_rx.h> +#include <vos_sched.h> // change logging behavior based upon debug flag #ifdef HDD_WMM_DEBUG @@ -1813,6 +1814,14 @@ v_U16_t hdd_wmm_select_queue(struct net_device * dev, struct sk_buff *skb) hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + if (isWDresetInProgress()) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, + FL("called during WDReset")); + skb->priority = SME_QOS_WMM_UP_BE; + return HDD_LINUX_AC_BE; + } + // if we don't want QoS or the AP doesn't support Qos // All traffic will get equal opportuniy to transmit data frames. if( hdd_wmm_is_active(pAdapter) ) { diff --git a/drivers/staging/prima/CORE/MAC/inc/qwlan_version.h b/drivers/staging/prima/CORE/MAC/inc/qwlan_version.h index f7f6d141533f..7bc4959e549f 100644 --- a/drivers/staging/prima/CORE/MAC/inc/qwlan_version.h +++ b/drivers/staging/prima/CORE/MAC/inc/qwlan_version.h @@ -60,9 +60,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 2 #define QWLAN_VERSION_PATCH 3 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 16 +#define QWLAN_VERSION_BUILD 18 -#define QWLAN_VERSIONSTR "3.2.3.16" +#define QWLAN_VERSIONSTR "3.2.3.18" #endif /* QWLAN_VERSION_H */ diff --git a/drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h b/drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h index 615ff731050f..fcf8f83c684b 100644 --- a/drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h +++ b/drivers/staging/prima/CORE/MAC/inc/wniCfgAp.h @@ -360,6 +360,8 @@ #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 295 #define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 296 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 297 +#define WNI_CFG_RA_FILTER_ENABLE 298 +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL 299 /* * String parameter lengths @@ -2486,10 +2488,26 @@ #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APMAX 255 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APDEF 3 -#define CFG_PARAM_MAX_NUM 298 -#define CFG_AP_IBUF_MAX_SIZE 237 +#define WNI_CFG_RA_FILTER_ENABLE_STAMIN 0 +#define WNI_CFG_RA_FILTER_ENABLE_STAMAX 1 +#define WNI_CFG_RA_FILTER_ENABLE_STADEF 1 + +#define WNI_CFG_RA_FILTER_ENABLE_APMIN 0 +#define WNI_CFG_RA_FILTER_ENABLE_APMAX 1 +#define WNI_CFG_RA_FILTER_ENABLE_APDEF 1 + +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STAMIN 0 +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STAMAX 60 +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STADEF 60 + +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_APMIN 0 +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_APMAX 60 +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_APDEF 60 + +#define CFG_PARAM_MAX_NUM 300 +#define CFG_AP_IBUF_MAX_SIZE 239 #define CFG_AP_SBUF_MAX_SIZE 3422 -#define CFG_STA_IBUF_MAX_SIZE 232 +#define CFG_STA_IBUF_MAX_SIZE 234 #define CFG_STA_SBUF_MAX_SIZE 3388 #define CFG_SEM_MAX_NUM 19 diff --git a/drivers/staging/prima/CORE/MAC/inc/wniCfgSta.h b/drivers/staging/prima/CORE/MAC/inc/wniCfgSta.h index 4d1e31a012db..caa5a0099e22 100644 --- a/drivers/staging/prima/CORE/MAC/inc/wniCfgSta.h +++ b/drivers/staging/prima/CORE/MAC/inc/wniCfgSta.h @@ -354,6 +354,8 @@ #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 295 #define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 296 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 297 +#define WNI_CFG_RA_FILTER_ENABLE 298 +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL 299 /* * String parameter lengths @@ -1615,8 +1617,16 @@ #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMAX 255 #define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STADEF 3 -#define CFG_PARAM_MAX_NUM 298 -#define CFG_STA_IBUF_MAX_SIZE 232 +#define WNI_CFG_RA_FILTER_ENABLE_STAMIN 0 +#define WNI_CFG_RA_FILTER_ENABLE_STAMAX 1 +#define WNI_CFG_RA_FILTER_ENABLE_STADEF 1 + +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STAMIN 0 +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STAMAX 60 +#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STADEF 60 + +#define CFG_PARAM_MAX_NUM 300 +#define CFG_STA_IBUF_MAX_SIZE 234 #define CFG_STA_SBUF_MAX_SIZE 3388 #define CFG_SEM_MAX_NUM 19 diff --git a/drivers/staging/prima/CORE/MAC/src/cfg/cfgParamName.c b/drivers/staging/prima/CORE/MAC/src/cfg/cfgParamName.c index c0db1a067afd..81a01e6b4828 100644 --- a/drivers/staging/prima/CORE/MAC/src/cfg/cfgParamName.c +++ b/drivers/staging/prima/CORE/MAC/src/cfg/cfgParamName.c @@ -350,6 +350,8 @@ unsigned char *gCfgParamName[] = { (unsigned char *)"ENABLE_MCC_ADAPTIVE_SCHED", (unsigned char *)"DISABLE_LDPC_WITH_TXBF_AP", (unsigned char *)"AP_LINK_MONITOR_TIMEOUT", + (unsigned char *)"RA_FILTER_ENABLE", + (unsigned char *)"RA_RATE_LIMIT_INTERVAL", }; diff --git a/drivers/staging/prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/drivers/staging/prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt index 7240b7db62f1..e32ca7bcce4c 100644 --- a/drivers/staging/prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt +++ b/drivers/staging/prima/CORE/MAC/src/cfg/cfgUtil/cfg.txt @@ -1,4 +1,4 @@ -/* + * * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. @@ -17,7 +17,7 @@ * 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. - */ + * * Copyright (c) 2012, The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. @@ -4498,3 +4498,27 @@ HAL V RW NP HAL 1 255 3 + +* RA filter enable/disable +* +WNI_CFG_RA_FILTER_ENABLE I 4 7 +V RW NP +HAL +0 1 1 +V RW NP +HAL +0 1 1 +* +* + +* RA filter rate interval +* +WNI_CFG_RA_RATE_LIMIT_INTERVAL I 4 7 +V RW NP +HAL +0 60 60 +V RW NP +HAL +0 60 60 +* +* diff --git a/drivers/staging/prima/CORE/SME/inc/csrApi.h b/drivers/staging/prima/CORE/SME/inc/csrApi.h index 9373f0231f56..05a240f868ae 100644 --- a/drivers/staging/prima/CORE/SME/inc/csrApi.h +++ b/drivers/staging/prima/CORE/SME/inc/csrApi.h @@ -846,8 +846,13 @@ typedef struct tagCsrRoamProfile tANI_U8 *pWAPIReqIE; //If not null, it has the IE byte stream for WAPI #endif /* FEATURE_WLAN_WAPI */ - tANI_U32 nAddIEScanLength; //The byte count in the pAddIE for scan (at the time of join) - tANI_U8 *pAddIEScan; //If not null, it has the IE byte stream for additional IE, which can be WSC IE and/or P2P IE + //The byte count in the pAddIE for scan (at the time of join) + tANI_U32 nAddIEScanLength; + /* Additional IE information. + * It has the IE byte stream for additional IE, + * which can be WSC IE and/or P2P IE + */ + tANI_U8 addIEScan[SIR_MAC_MAX_IE_LENGTH+2]; //Additional IE information. tANI_U32 nAddIEAssocLength; //The byte count in the pAddIE for assoc tANI_U8 *pAddIEAssoc; //If not null, it has the IE byte stream for additional IE, which can be WSC IE and/or P2P IE diff --git a/drivers/staging/prima/CORE/SME/inc/csrInternal.h b/drivers/staging/prima/CORE/SME/inc/csrInternal.h index 366fa397ea30..91a8427afd67 100755 --- a/drivers/staging/prima/CORE/SME/inc/csrInternal.h +++ b/drivers/staging/prima/CORE/SME/inc/csrInternal.h @@ -883,8 +883,11 @@ typedef struct tagCsrRoamSession tANI_U32 nWapiRspIeLength; //the byte count for pWapiRspIE tANI_U8 *pWapiRspIE; //this contain the WAPI IE in beacon/probe rsp #endif /* FEATURE_WLAN_WAPI */ - tANI_U32 nAddIEScanLength; //the byte count of pAddIeScanIE; - tANI_U8 *pAddIEScan; //this contains the additional IE in (unicast) probe request at the time of join + tANI_U32 nAddIEScanLength; //length of addIeScan + /* This contains the additional IE in (unicast) + * probe request at the time of join + */ + tANI_U8 addIEScan[SIR_MAC_MAX_IE_LENGTH+2]; tANI_U32 nAddIEAssocLength; //the byte count for pAddIeAssocIE tANI_U8 *pAddIEAssoc; //this contains the additional IE in (re) assoc request @@ -1109,10 +1112,6 @@ void csrScanSuspendIMPS( tpAniSirGlobal pMac ); void csrScanResumeIMPS( tpAniSirGlobal pMac ); eHalStatus csrInitGetChannels(tpAniSirGlobal pMac); -// Getting the 5GHz Channel list -eHalStatus csrGet5GChannels(tpAniSirGlobal pMac); -// Getting the 2.4GHz Channel list -eHalStatus csrGet24GChannels(tpAniSirGlobal pMac); eHalStatus csrSetModifyProfileFields(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamModifyProfileFields *pModifyProfileFields); diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrApiRoam.c b/drivers/staging/prima/CORE/SME/src/csr/csrApiRoam.c index 8c9838470bc1..40c08303551f 100644 --- a/drivers/staging/prima/CORE/SME/src/csr/csrApiRoam.c +++ b/drivers/staging/prima/CORE/SME/src/csr/csrApiRoam.c @@ -1902,121 +1902,6 @@ eHalStatus csrIsValidChannel(tpAniSirGlobal pMac, tANI_U8 chnNum) return status; } -eHalStatus csrGet5GChannels(tpAniSirGlobal pMac) -{ - eHalStatus status = eHAL_STATUS_SUCCESS; - tANI_U8 num20MHzChannelsFound = 0; - VOS_STATUS vosStatus; - tANI_U8 num40MHzChannelsFound = 0; - tANI_U8 Index = 0; - tANI_U8 channelList = 0; - - // Updating the defaultpower Table for changed Domain Id - vosStatus = vos_nv_getChannelListWithPower( pMac->scan.defaultPowerTable, &num20MHzChannelsFound, - pMac->scan.defaultPowerTable40MHz, &num40MHzChannelsFound); - - if ( (VOS_STATUS_SUCCESS != vosStatus) || (num20MHzChannelsFound == 0) ) - { - smsLog( pMac, LOGE, FL("failed to get channels")); - status = eHAL_STATUS_FAILURE; - } - else - { - if ( num20MHzChannelsFound > WNI_CFG_VALID_CHANNEL_LIST_LEN ) - { - num20MHzChannelsFound = WNI_CFG_VALID_CHANNEL_LIST_LEN; - } - - // Move the only 5GHZ channel list to the global data, - // As 2.4GHZ list coming from the AP for the changed domain - // structure -- this will be used as the scan list - for(channelList = 0; channelList < WNI_CFG_VALID_CHANNEL_LIST_LEN; channelList++) - { - // If Channel is 5GHz just break the for loop - if(!(pMac->scan.base20MHzChannels.channelList[ channelList ] > 0 && pMac->scan.base20MHzChannels.channelList[ channelList ] <= 14)) - break; - } - // Update the 5G channels from nv.bin - for ( Index = 0; Index < num20MHzChannelsFound; Index++) - { - if(pMac->scan.defaultPowerTable[Index].chanId >= 36 && pMac->scan.defaultPowerTable[Index].chanId <= 165) - { - if(channelList < WNI_CFG_VALID_CHANNEL_LIST_LEN) - { - pMac->scan.base20MHzChannels.channelList[ channelList ] = pMac->scan.defaultPowerTable[Index].chanId; - channelList++; - } - } - } - - pMac->scan.numChannelsDefault = (num20MHzChannelsFound > channelList) ? num20MHzChannelsFound : channelList; - pMac->scan.base20MHzChannels.numChannels = (num20MHzChannelsFound > channelList) ? num20MHzChannelsFound : channelList; - // Filling the remaining index as Zero Just for causion - for(Index = pMac->scan.base20MHzChannels.numChannels; Index < WNI_CFG_VALID_CHANNEL_LIST_LEN; Index++) - pMac->scan.base20MHzChannels.channelList[ Index ] = 0; - } - return status; -} - -eHalStatus csrGet24GChannels(tpAniSirGlobal pMac) -{ - eHalStatus status = eHAL_STATUS_SUCCESS; - tANI_U8 num20MHzChannelsFound = 0; - VOS_STATUS vosStatus; - tANI_U8 Index = 0; - tANI_U8 num40MHzChannelsFound = 0; - tANI_U8 channelList5GBackup[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}, nuum5GchannelListBackup; - tANI_U8 channelList = 0; - - // Read the scan channel list (including the power limit) from EEPROM - vosStatus = vos_nv_getChannelListWithPower( pMac->scan.defaultPowerTable, &num20MHzChannelsFound, - pMac->scan.defaultPowerTable40MHz, &num40MHzChannelsFound); - - if ( (VOS_STATUS_SUCCESS != vosStatus) || (num20MHzChannelsFound == 0) ) - { - smsLog( pMac, LOGE, FL("failed to get channels \n")); - status = eHAL_STATUS_FAILURE; - } - else - { - if ( num20MHzChannelsFound > WNI_CFG_VALID_CHANNEL_LIST_LEN ) - { - num20MHzChannelsFound = WNI_CFG_VALID_CHANNEL_LIST_LEN; - } - - // Move the 2.4GHZ channel list only to the global data, - // As 5GHz list been provided by AP as part of 11d IE - // structure -- this will be used as the scan list - for(channelList = 0, nuum5GchannelListBackup = 0; channelList < WNI_CFG_VALID_CHANNEL_LIST_LEN; channelList++) - { - if(pMac->scan.base20MHzChannels.channelList[ channelList ] >= 36 && pMac->scan.base20MHzChannels.channelList[ channelList ] <= 165) - { - // First taking the 5GHz channel list backup - channelList5GBackup[nuum5GchannelListBackup] = pMac->scan.base20MHzChannels.channelList[ channelList ]; - nuum5GchannelListBackup++; - } - } - // Updating the 2.4GHz list - for ( Index = 0; Index < num20MHzChannelsFound; Index++) - { - if(pMac->scan.defaultPowerTable[Index].chanId > 0 && pMac->scan.defaultPowerTable[Index].chanId <= 14) - pMac->scan.base20MHzChannels.channelList[ Index ] = pMac->scan.defaultPowerTable[Index].chanId; - } - // Restoring the Backed up 5 GHZ channels - for(channelList = 0;channelList < nuum5GchannelListBackup; channelList++ ) - { - if (Index < WNI_CFG_VALID_CHANNEL_LIST_LEN) - { - pMac->scan.base20MHzChannels.channelList[ Index ] = channelList5GBackup[channelList]; - Index++; - } - } - - pMac->scan.numChannelsDefault = (num20MHzChannelsFound > Index) ? num20MHzChannelsFound : Index; - pMac->scan.base20MHzChannels.numChannels = (num20MHzChannelsFound > Index) ? num20MHzChannelsFound : Index; - } - return (status); -} eHalStatus csrInitGetChannels(tpAniSirGlobal pMac) { @@ -5745,15 +5630,19 @@ eHalStatus csrRoamCopyProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pDstProfile, #endif /* FEATURE_WLAN_WAPI */ if(pSrcProfile->nAddIEScanLength) { - status = palAllocateMemory(pMac->hHdd, - (void **)&pDstProfile->pAddIEScan, pSrcProfile->nAddIEScanLength); - if(!HAL_STATUS_SUCCESS(status)) + memset(pDstProfile->addIEScan, 0 , SIR_MAC_MAX_IE_LENGTH); + if ( SIR_MAC_MAX_IE_LENGTH >= pSrcProfile->nAddIEScanLength) { - break; + vos_mem_copy(pDstProfile->addIEScan, pSrcProfile->addIEScan, + pSrcProfile->nAddIEScanLength); + pDstProfile->nAddIEScanLength = pSrcProfile->nAddIEScanLength; + } + else + { + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + FL(" AddIEScanLength is not valid %u"), + pSrcProfile->nAddIEScanLength); } - pDstProfile->nAddIEScanLength = pSrcProfile->nAddIEScanLength; - palCopyMemory(pMac->hHdd, pDstProfile->pAddIEScan, pSrcProfile->pAddIEScan, - pSrcProfile->nAddIEScanLength); } if(pSrcProfile->nAddIEAssocLength) { @@ -8640,7 +8529,6 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) tCsrRoamSession *pSession = NULL; tpSirSmeSwitchChannelInd pSwitchChnInd; tSmeMaxAssocInd *pSmeMaxAssocInd; - tSmeCmd pCommand; pSirMsg->messageType = (pSirMsg->messageType); pSirMsg->length = (pSirMsg->length); pSirMsg->statusCode = (pSirMsg->statusCode); @@ -8722,77 +8610,105 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg ) } break; case eWNI_SME_DISASSOC_IND: - smsLog( pMac, LOGE, FL("DISASSOCIATION Indication from MAC")); - // Check if AP dis-associated us because of MIC failure. If so, - // then we need to take action immediately and not wait till the - // the WmStatusChange requests is pushed and processed - pDisassocInd = (tSirSmeDisassocInd *)pSirMsg; - status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pDisassocInd->bssId, &sessionId ); - if( HAL_STATUS_SUCCESS( status ) ) { - // If we are in neighbor preauth done state then on receiving - // disassoc or deauth we dont roam instead we just disassoc - // from current ap and then go to disconnected state - // This happens for CCX and 11r FT connections ONLY. -#ifdef WLAN_FEATURE_VOWIFI_11R - if (csrRoamIs11rAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) + // Check if AP dis-associated us because of MIC failure. If so, + // then we need to take action immediately and not wait till the + // the WmStatusChange requests is pushed and processed + tSmeCmd *pCommand; + + pDisassocInd = (tSirSmeDisassocInd *)pSirMsg; + status = csrRoamGetSessionIdFromBSSID( pMac, + (tCsrBssid *)pDisassocInd->bssId, &sessionId ); + if( HAL_STATUS_SUCCESS( status ) ) { - csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); - } + smsLog( pMac, LOGE, FL("DISASSOCIATION Indication from MAC" + " for session %d "), sessionId); + smsLog( pMac, LOGE, FL("DISASSOCIATION from peer =" + MAC_ADDRESS_STR " " + " reason = %d status = %d "), + MAC_ADDR_ARRAY(pDisassocInd->peerMacAddr), + pDisassocInd->reasonCode, + pDisassocInd->statusCode); + // If we are in neighbor preauth done state then on receiving + // disassoc or deauth we dont roam instead we just disassoc + // from current ap and then go to disconnected state + // This happens for CCX and 11r FT connections ONLY. +#ifdef WLAN_FEATURE_VOWIFI_11R + if (csrRoamIs11rAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) + { + csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); + } #endif #ifdef FEATURE_WLAN_CCX - if (csrRoamIsCCXAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) - { - csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); - } + if (csrRoamIsCCXAssoc(pMac) && (csrNeighborRoamStatePreauthDone(pMac))) + { + csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); + } #endif #ifdef FEATURE_WLAN_LFR - if (csrRoamIsFastRoamEnabled(pMac, sessionId) && (csrNeighborRoamStatePreauthDone(pMac))) - { - csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); - } + if (csrRoamIsFastRoamEnabled(pMac, sessionId) && (csrNeighborRoamStatePreauthDone(pMac))) + { + csrNeighborRoamTranistionPreauthDoneToDisconnected(pMac); + } #endif - pSession = CSR_GET_SESSION( pMac, sessionId ); + pSession = CSR_GET_SESSION( pMac, sessionId ); - if(!pSession) - { - smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); - return; - } + if (!pSession) + { + smsLog(pMac, LOGE, FL(" session %d not found "), sessionId); + return; + } - if ( csrIsConnStateInfra( pMac, sessionId ) ) - { - pSession->connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED; - } + if ( csrIsConnStateInfra( pMac, sessionId ) ) + { + pSession->connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED; + } #ifndef WLAN_MDM_CODE_REDUCTION_OPT - sme_QosCsrEventInd(pMac, (v_U8_t)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL); + sme_QosCsrEventInd(pMac, (v_U8_t)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL); #endif - csrRoamLinkDown(pMac, sessionId); - csrRoamIssueWmStatusChange( pMac, sessionId, eCsrDisassociated, pSirMsg ); - if(CSR_IS_INFRA_AP(&pSession->connectedProfile)) - { - - pRoamInfo = &roamInfo; + csrRoamLinkDown(pMac, sessionId); + csrRoamIssueWmStatusChange( pMac, sessionId, eCsrDisassociated, pSirMsg ); + if (CSR_IS_INFRA_AP(&pSession->connectedProfile)) + { - pRoamInfo->statusCode = pDisassocInd->statusCode; - pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; + pCommand = csrGetCommandBuffer(pMac); + if (NULL == pCommand) + { + smsLog( pMac, LOGE, FL(" fail to get command buffer") ); + status = eHAL_STATUS_RESOURCES; + } + pRoamInfo = &roamInfo; + pRoamInfo->statusCode = pDisassocInd->statusCode; + pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile; + pRoamInfo->staId = (tANI_U8)pDisassocInd->staId; - pRoamInfo->staId = (tANI_U8)pDisassocInd->staId; + vos_mem_copy(pRoamInfo->peerMac, pDisassocInd->peerMacAddr, + sizeof(tSirMacAddr)); + vos_mem_copy(&pRoamInfo->bssid, pDisassocInd->bssId, + sizeof(tCsrBssid)); - palCopyMemory(pMac->hHdd, pRoamInfo->peerMac, pDisassocInd->peerMacAddr, sizeof(tSirMacAddr)); - palCopyMemory(pMac->hHdd, &pRoamInfo->bssid, pDisassocInd->bssId, sizeof(tCsrBssid)); + status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, + eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_DISASSOC_IND); - status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_DISASSOC_IND); + /* + * STA/P2P client got disassociated so remove any pending deauth + * commands in sme pending list + */ + pCommand->command = eSmeCommandRoam; + pCommand->sessionId = (tANI_U8)sessionId; + pCommand->u.roamCmd.roamReason = eCsrForcedDeauthSta; + vos_mem_copy(pCommand->u.roamCmd.peerMac, + pDisassocInd->peerMacAddr, + sizeof(tSirMacAddr)); + csrRoamRemoveDuplicateCommand(pMac, sessionId, pCommand, eCsrForcedDeauthSta); + csrReleaseCommand( pMac, pCommand ); - /* - * STA/P2P client got disassociated so remove any pending deauth - * commands in sme pending list - */ - pCommand.command = eSmeCommandRoam; - pCommand.sessionId = (tANI_U8)sessionId; - pCommand.u.roamCmd.roamReason = eCsrForcedDeauthSta; - vos_mem_copy(pCommand.u.roamCmd.peerMac, pDisassocInd->peerMacAddr, sizeof(tSirMacAddr)); - csrRoamRemoveDuplicateCommand(pMac, sessionId, &pCommand, eCsrForcedDeauthSta); + } + } + else + { + smsLog(pMac, LOGE, FL(" Session Id not found for BSSID " MAC_ADDRESS_STR), + MAC_ADDR_ARRAY(pDisassocInd->bssId)); } } break; @@ -12014,36 +11930,22 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe } #endif /* FEATURE_WLAN_CCX */ // addIEScan - if(pProfile->nAddIEScanLength && pProfile->pAddIEScan) + if (pProfile->nAddIEScanLength) { ieLen = pProfile->nAddIEScanLength; - if(ieLen > pSession->nAddIEScanLength) - { - if(pSession->pAddIEScan && pSession->nAddIEScanLength) - { - palFreeMemory(pMac->hHdd, pSession->pAddIEScan); - } - status = palAllocateMemory(pMac->hHdd, - (void **)&pSession->pAddIEScan, ieLen); - if(!HAL_STATUS_SUCCESS(status)) break; - } + memset(pSession->addIEScan, 0 , pSession->nAddIEScanLength); pSession->nAddIEScanLength = ieLen; - palCopyMemory(pMac->hHdd, pSession->pAddIEScan, - pProfile->pAddIEScan, ieLen); + vos_mem_copy(pSession->addIEScan, pProfile->addIEScan, ieLen); wTmp = pal_cpu_to_be16( ieLen ); palCopyMemory( pMac->hHdd, pBuf, &wTmp, sizeof(tANI_U16) ); pBuf += sizeof(tANI_U16); - palCopyMemory( pMac->hHdd, pBuf, pProfile->pAddIEScan, ieLen ); + vos_mem_copy(pBuf, pProfile->addIEScan, ieLen); pBuf += ieLen; } else { + memset(pSession->addIEScan, 0, pSession->nAddIEScanLength); pSession->nAddIEScanLength = 0; - if(pSession->pAddIEScan) - { - palFreeMemory(pMac->hHdd, pSession->pAddIEScan); - pSession->pAddIEScan = NULL; - } *pBuf = 0; *(pBuf + 1) = 0; pBuf += 2; @@ -13559,10 +13461,9 @@ static void csrInitSession( tpAniSirGlobal pMac, tANI_U32 sessionId ) } pSession->nWapiRspIeLength = 0; #endif /* FEATURE_WLAN_WAPI */ - if(pSession->pAddIEScan) + if (pSession->nAddIEScanLength) { - palFreeMemory(pMac->hHdd, pSession->pAddIEScan); - pSession->pAddIEScan = NULL; + memset(pSession->addIEScan, 0 , SIR_MAC_MAX_IE_LENGTH); } pSession->nAddIEScanLength = 0; if(pSession->pAddIEAssoc) diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrApiScan.c b/drivers/staging/prima/CORE/SME/src/csr/csrApiScan.c index 839b1204379f..ec7518752c6f 100755 --- a/drivers/staging/prima/CORE/SME/src/csr/csrApiScan.c +++ b/drivers/staging/prima/CORE/SME/src/csr/csrApiScan.c @@ -3664,12 +3664,14 @@ void csrSetOppositeBandChannelInfo( tpAniSirGlobal pMac ) if ( CSR_IS_CHANNEL_5GHZ( pMac->scan.channelOf11dInfo ) ) { // and the 2.4 band is empty, then populate the 2.4 channel info + if ( !csrLLIsListEmpty( &pMac->scan.channelPowerInfoList24, LL_ACCESS_LOCK ) ) break; fPopulate5GBand = FALSE; } else { // else, we found channel info in the 2.4 GHz band. If the 5.0 band is empty // set the 5.0 band info from the 2.4 country code. + if ( !csrLLIsListEmpty( &pMac->scan.channelPowerInfoList5G, LL_ACCESS_LOCK ) ) break; fPopulate5GBand = TRUE; } csrSaveChannelPowerForBand( pMac, fPopulate5GBand ); @@ -3764,7 +3766,6 @@ void csrConstructCurrentValidChannelList( tpAniSirGlobal pMac, tDblLinkList *pCh tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tANI_BOOLEAN fForce) { - tANI_U8 Num2GChannels, bMaxNumChn; eHalStatus status; tANI_BOOLEAN fRet = eANI_BOOLEAN_FALSE; v_REGDOMAIN_t domainId; @@ -3884,56 +3885,66 @@ tANI_BOOLEAN csrLearnCountryInformation( tpAniSirGlobal pMac, tSirBssDescription } } smsLog(pMac, LOG3, FL(" %d sets each one is %d"), pIesLocal->Country.num_triplets, sizeof(tSirMacChanInfo)); - // save the channel/power information from the Channel IE. - //sizeof(tSirMacChanInfo) has to be 3 - if (eHAL_STATUS_SUCCESS != csrSaveToChannelPower2G_5G( pMac, pIesLocal->Country.num_triplets * sizeof(tSirMacChanInfo), - (tSirMacChanInfo *)(&pIesLocal->Country.triplets[0]) )) + + // set the indicator of the channel where the country IE was found... + pMac->scan.channelOf11dInfo = pSirBssDesc->channelId; + status = csrGetRegulatoryDomainForCountry(pMac, + pIesLocal->Country.country, &domainId ); + if ( status != eHAL_STATUS_SUCCESS ) { + smsLog( pMac, LOGE, FL(" fail to get regId %d"), domainId ); fRet = eANI_BOOLEAN_FALSE; return fRet; } - - // set the indicator of the channel where the country IE was found... - pMac->scan.channelOf11dInfo = pSirBssDesc->channelId; - csrGetRegulatoryDomainForCountry(pMac, pIesLocal->Country.country, &domainId ); // Checking for Domain Id change if ( domainId != pMac->scan.domainIdCurrent ) { - tSirMacChanInfo* pMacChnSet = (tSirMacChanInfo *)(&pIesLocal->Country.triplets[0]); - palCopyMemory( pMac->hHdd, pMac->scan.countryCode11d, pIesLocal->Country.country, - sizeof( pMac->scan.countryCode11d ) ); + vos_mem_copy(pMac->scan.countryCode11d, + pIesLocal->Country.country, + sizeof( pMac->scan.countryCode11d ) ); + /* Set Current Country code and Current Regulatory domain */ + status = csrSetRegulatoryDomain(pMac, domainId, NULL); + if (eHAL_STATUS_SUCCESS != status) + { + smsLog(pMac, LOGE, "Set Reg Domain Fail %d", status); + fRet = eANI_BOOLEAN_FALSE; + return fRet; + } + //csrSetRegulatoryDomain will fail if the country doesn't fit our domain criteria. + vos_mem_copy(pMac->scan.countryCodeCurrent, + pIesLocal->Country.country, WNI_CFG_COUNTRY_CODE_LEN); + //Simply set it to cfg. csrSetCfgCountryCode(pMac, pIesLocal->Country.country); - WDA_SetRegDomain(pMac, domainId); - pMac->scan.domainIdCurrent = domainId; - // Check whether AP provided the 2.4GHZ list or 5GHZ list - if(CSR_IS_CHANNEL_24GHZ(pMacChnSet[0].firstChanNum)) + + /* overwrite the defualt country code */ + vos_mem_copy(pMac->scan.countryCodeDefault, + pMac->scan.countryCodeCurrent, + WNI_CFG_COUNTRY_CODE_LEN); + /* Set Current RegDomain */ + status = WDA_SetRegDomain(pMac, domainId); + if ( status != eHAL_STATUS_SUCCESS ) { - // AP Provided the 2.4 Channels, Update the 5GHz channels from nv.bin - csrGet5GChannels(pMac ); + smsLog( pMac, LOGE, FL(" fail to Set regId %d"), domainId ); + fRet = eANI_BOOLEAN_FALSE; + return fRet; } - else + /* set to default domain ID */ + pMac->scan.domainIdCurrent = domainId; + /* get the channels based on new cc */ + status = csrInitGetChannels( pMac ); + + if ( status != eHAL_STATUS_SUCCESS ) { - // AP Provided the 5G Channels, Update the 2.4GHZ channel list from nv.bin - csrGet24GChannels(pMac ); + smsLog( pMac, LOGE, FL(" fail to get Channels ")); + fRet = eANI_BOOLEAN_FALSE; + return fRet; } - } - // Populate both band channel lists based on what we found in the country information... - csrSetOppositeBandChannelInfo( pMac ); - bMaxNumChn = WNI_CFG_VALID_CHANNEL_LIST_LEN; - // construct 2GHz channel list first - csrConstructCurrentValidChannelList( pMac, &pMac->scan.channelPowerInfoList24, pMac->scan.channels11d.channelList, - bMaxNumChn, &Num2GChannels ); - // construct 5GHz channel list now - if(bMaxNumChn > Num2GChannels) - { - csrConstructCurrentValidChannelList( pMac, &pMac->scan.channelPowerInfoList5G, pMac->scan.channels11d.channelList + Num2GChannels, - bMaxNumChn - Num2GChannels, - &pMac->scan.channels11d.numChannels ); - } - pMac->scan.channels11d.numChannels += Num2GChannels; - fRet = eANI_BOOLEAN_TRUE; + /* reset info based on new cc, and we are done */ + csrResetCountryInformation(pMac, eANI_BOOLEAN_TRUE, eANI_BOOLEAN_TRUE); + fRet = eANI_BOOLEAN_TRUE; + } } while( 0 ); if( !pIes && pIesLocal ) @@ -6774,7 +6785,7 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi { pScanCmd->u.scanCmd.u.scanRequest.p2pSearch = 1; } - if(pProfile->pAddIEScan) + if(pProfile->nAddIEScanLength) { status = palAllocateMemory(pMac->hHdd, (void **)&pScanCmd->u.scanCmd.u.scanRequest.pIEField, @@ -6782,7 +6793,7 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi palZeroMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.pIEField, pProfile->nAddIEScanLength); if(HAL_STATUS_SUCCESS(status)) { - palCopyMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.pIEField, pProfile->pAddIEScan, pProfile->nAddIEScanLength); + palCopyMemory(pMac->hHdd, pScanCmd->u.scanCmd.u.scanRequest.pIEField, pProfile->addIEScan, pProfile->nAddIEScanLength); pScanCmd->u.scanCmd.u.scanRequest.uIEFieldLen = pProfile->nAddIEScanLength; } else diff --git a/drivers/staging/prima/CORE/SME/src/csr/csrUtil.c b/drivers/staging/prima/CORE/SME/src/csr/csrUtil.c index a315822efb61..7e38dc47de47 100644 --- a/drivers/staging/prima/CORE/SME/src/csr/csrUtil.c +++ b/drivers/staging/prima/CORE/SME/src/csr/csrUtil.c @@ -5759,11 +5759,10 @@ void csrReleaseProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pProfile) pProfile->pWAPIReqIE = NULL; } #endif /* FEATURE_WLAN_WAPI */ - - if(pProfile->pAddIEScan) + if (pProfile->nAddIEScanLength) { - palFreeMemory(pMac->hHdd, pProfile->pAddIEScan); - pProfile->pAddIEScan = NULL; + memset(pProfile->addIEScan, 0 , SIR_MAC_MAX_IE_LENGTH+2); + pProfile->nAddIEScanLength = 0; } if(pProfile->pAddIEAssoc) diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_sched.c b/drivers/staging/prima/CORE/VOSS/src/vos_sched.c index cff46c488822..32c8a0ba8753 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_sched.c +++ b/drivers/staging/prima/CORE/VOSS/src/vos_sched.c @@ -626,7 +626,8 @@ VosMCThread "%s: MC Thread exiting!!!!", __func__); complete_and_exit(&pSchedContext->McShutdown, 0); } /* VosMCThread() */ -int isWDresetInProgress(void) + +v_BOOL_t isWDresetInProgress(void) { VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, "%s: Reset is in Progress...",__func__); @@ -636,7 +637,7 @@ int isWDresetInProgress(void) } else { - return 0; + return FALSE; } } /*--------------------------------------------------------------------------- diff --git a/drivers/staging/prima/CORE/VOSS/src/vos_sched.h b/drivers/staging/prima/CORE/VOSS/src/vos_sched.h index 8426b2a3fb41..9bac9d4226ed 100644 --- a/drivers/staging/prima/CORE/VOSS/src/vos_sched.h +++ b/drivers/staging/prima/CORE/VOSS/src/vos_sched.h @@ -504,5 +504,6 @@ void clearWlanResetReason(void); void vos_timer_module_init( void ); VOS_STATUS vos_watchdog_wlan_shutdown(void); VOS_STATUS vos_watchdog_wlan_re_init(void); +v_BOOL_t isWDresetInProgress(void); #endif // #if !defined __VOSS_SCHED_H diff --git a/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda.c b/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda.c index 2ff8273ece02..f26d559cf843 100644 --- a/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda.c +++ b/drivers/staging/prima/CORE/WDA/src/wlan_qct_wda.c @@ -1477,6 +1477,38 @@ VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext, tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + sizeof(tHalCfg) + tlvStruct->length) ; + /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */ + tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + + if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_RA_FILTER_ENABLE"); + goto handle_failure; + } + + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + + /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */ + tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ; + tlvStruct->length = sizeof(tANI_U32); + configDataValue = (tANI_U32 *)(tlvStruct + 1); + + if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL, + configDataValue ) != eSIR_SUCCESS) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL"); + goto handle_failure; + } + + tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct + + sizeof(tHalCfg) + tlvStruct->length) ; + wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ; #ifdef WLAN_DEBUG { diff --git a/drivers/staging/prima/firmware_bin/WCNSS_cfg.dat b/drivers/staging/prima/firmware_bin/WCNSS_cfg.dat index a5ee46c6abd0c1a78b833e72b479fade60a4f88a..16ba06f087a4ce2d0a0ee50f54e3f3db56d3fc13 100644 GIT binary patch delta 164 zcmcZ=Fe}iMk%yU^k%5VEmIea@69WSS3j+g#1_J|whzJ7%D+2?AjR*rnj0gk6`+X3o z!^pt!YNP3T7S<O9{46gwKV(_V%*qH-xVe#IG4tdDY#f_acox9K4)Q0nu!8iw->fOJ ro`v;o0YA&T%~vJ1LlsOu$R@sdfy@GkMhAs0Q1Q(lmD5?6Rxbnqt9UD{ delta 147 zcmbOgcq_n^k%yU^k%5UZN`rxciGhKEg@J)VgMoqJi!cKND+2?Aj0gjRjR*t7`+X3o z#mK<$Vx#GLmd$Ti7BEkKDl0Jgg3OW43uGM_CkH6VY?3cvoLr+2Fu8$;W%C3cALh+Z u_!C%ILAu^<_7qvqvPp6aNSE;D^D+yWCr@By*<7QrfqAouN(u{;VL1RqYb+-K diff --git a/drivers/staging/prima/riva/inc/wlan_hal_cfg.h b/drivers/staging/prima/riva/inc/wlan_hal_cfg.h index c9a319c77563..899577e0b918 100644 --- a/drivers/staging/prima/riva/inc/wlan_hal_cfg.h +++ b/drivers/staging/prima/riva/inc/wlan_hal_cfg.h @@ -155,8 +155,9 @@ #define QWLAN_HAL_CFG_ENABLE_DETECT_PS_SUPPORT 101 #define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT 102 #define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER 103 -#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE 104 -#define QWLAN_HAL_CFG_MAX_PARAMS 105 +#define QWLAN_HAL_CFG_RA_FILTER_ENABLE 104 +#define QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL 105 +#define QWLAN_HAL_CFG_MAX_PARAMS 106 -- GitLab