diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2015-02-03 15:24:18 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-02-03 15:24:18 -0800 |
| commit | db6e3dc9356fc0fc205079b42e2043cc305d784b (patch) | |
| tree | b6712e9d5962e20458bb4bc38ddbfaa2f316ab2e | |
| parent | 75eee8a91342569e0b26daa85929f6bb5750108f (diff) | |
| parent | 03e559ab7d6ea4bd73e2952b2270336ed359c645 (diff) | |
Merge "Release 4.0.10.26 QCACLD WLAN Driver"
29 files changed, 181 insertions, 144 deletions
diff --git a/CORE/EPPING/src/epping_txrx.c b/CORE/EPPING/src/epping_txrx.c index 678d58e0cfae..cf8a31b5463a 100644 --- a/CORE/EPPING/src/epping_txrx.c +++ b/CORE/EPPING/src/epping_txrx.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -244,6 +244,7 @@ static int epping_set_mac_address(struct net_device *dev, void *addr) static void epping_stop_adapter(epping_adapter_t *pAdapter) { if (pAdapter && pAdapter->started) { + EPPING_LOG(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); pAdapter->started = false; @@ -265,6 +266,7 @@ static int epping_start_adapter(epping_adapter_t *pAdapter) cnss_request_bus_bandwidth(CNSS_BUS_WIDTH_HIGH); #endif netif_carrier_on(pAdapter->dev); + EPPING_LOG(LOG1, FL("Enabling queues")); netif_tx_start_all_queues(pAdapter->dev); pAdapter->started = true; } else { @@ -380,6 +382,7 @@ epping_adapter_t *epping_add_adapter(epping_context_t *pEpping_ctx, dev->watchdog_timeo = 5 * HZ; /* XXX */ dev->tx_queue_len = ATH_TXBUF-1; /* 1 for mgmt frame */ if (epping_register_adapter(pAdapter) == 0) { + EPPING_LOG(LOG1, FL("Disabling queues")); netif_tx_disable(dev); netif_carrier_off(dev); return pAdapter; diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 5eab6e044185..fd54e47dbeff 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -877,6 +877,7 @@ static eHalStatus hdd_DisConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo * } // notify apps that we can't pass traffic anymore + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(dev); netif_carrier_off(dev); pAdapter->hdd_stats.hddTxRxStats.netq_disable_cnt++; @@ -1730,6 +1731,7 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs /* Start the Queue - Start tx queues before hdd_roamRegisterSTA, since hdd_roamRegisterSTA will flush any cached data frames immediately */ + hddLog(LOG1, FL("Enabling queues")); netif_tx_wake_all_queues(dev); pAdapter->hdd_stats.hddTxRxStats.netq_enable_cnt++; pAdapter->hdd_stats.hddTxRxStats.netq_state_off = FALSE; @@ -1795,6 +1797,7 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs hddLog(VOS_TRACE_LEVEL_DEBUG, "LFR3:netif_tx_wake_all_queues"); } #endif + hddLog(LOG1, FL("Enabling queues")); netif_tx_wake_all_queues(dev); pAdapter->hdd_stats.hddTxRxStats.netq_enable_cnt++; pAdapter->hdd_stats.hddTxRxStats.netq_state_off = FALSE; @@ -1949,6 +1952,7 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs hdd_clearRoamProfileIe( pAdapter ); hdd_wmm_init( pAdapter ); + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(dev); netif_carrier_off(dev); pAdapter->hdd_stats.hddTxRxStats.netq_disable_cnt++; @@ -2101,7 +2105,6 @@ static void hdd_RoamIbssIndicationHandler( hdd_adapter_t *pAdapter, __func__, pAdapter->dev->name); return; } - cfg80211_ibss_joined(pAdapter->dev, bss->bssid, GFP_KERNEL); cfg80211_put_bss( #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) || defined(WITH_BACKPORTS) @@ -2524,6 +2527,7 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t } } netif_carrier_on(pAdapter->dev); + hddLog(LOG1, FL("Enabling queues")); netif_tx_start_all_queues(pAdapter->dev); break; } @@ -2565,6 +2569,7 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_MED, "Received eCSR_ROAM_RESULT_IBSS_INACTIVE from SME"); // Stop only when we are inactive + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); pAdapter->hdd_stats.hddTxRxStats.netq_disable_cnt++; @@ -3529,6 +3534,7 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, // after reassoc. { struct net_device *dev = pAdapter->dev; + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(dev); pAdapter->hdd_stats.hddTxRxStats.netq_disable_cnt++; pAdapter->hdd_stats.hddTxRxStats.netq_state_off = TRUE; @@ -3567,6 +3573,7 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, struct net_device *dev = pAdapter->dev; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); // notify apps that we can't pass traffic anymore + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(dev); pAdapter->hdd_stats.hddTxRxStats.netq_disable_cnt++; pAdapter->hdd_stats.hddTxRxStats.netq_state_off = TRUE; @@ -3596,6 +3603,7 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, if(roamResult == eCSR_ROAM_RESULT_LOSTLINK) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Roaming started due to connection lost"); + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); pAdapter->hdd_stats.hddTxRxStats.netq_disable_cnt++; diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index f1d1d2186de9..7889a413834e 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -6592,6 +6592,8 @@ static int wlan_hdd_cfg80211_set_channel( struct wiphy *wiphy, struct net_device smeConfig.csrConfig.channelBondingMode24GHz = 0; else smeConfig.csrConfig.channelBondingMode5GHz = 0; + + (WLAN_HDD_GET_AP_CTX_PTR(pAdapter))->secondaryChannel = 0; break; case NL80211_CHAN_HT40MINUS: @@ -6604,6 +6606,9 @@ static int wlan_hdd_cfg80211_set_channel( struct wiphy *wiphy, struct net_device else smeConfig.csrConfig.channelBondingMode5GHz = eCSR_INI_DOUBLE_CHANNEL_HIGH_PRIMARY; + + (WLAN_HDD_GET_AP_CTX_PTR(pAdapter))->secondaryChannel = + channel - 4; break; case NL80211_CHAN_HT40PLUS: sme_SetPhyCBMode24G(pHddCtx->hHal, @@ -6616,6 +6621,8 @@ static int wlan_hdd_cfg80211_set_channel( struct wiphy *wiphy, struct net_device smeConfig.csrConfig.channelBondingMode5GHz = eCSR_INI_DOUBLE_CHANNEL_LOW_PRIMARY; + (WLAN_HDD_GET_AP_CTX_PTR(pAdapter))->secondaryChannel = + channel + 4; break; default: hddLog(VOS_TRACE_LEVEL_ERROR, @@ -11890,6 +11897,7 @@ int wlan_hdd_disconnect( hdd_adapter_t *pAdapter, u16 reason ) } /*stop tx queues*/ + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); pHddCtx->isAmpAllowed = VOS_TRUE; diff --git a/CORE/HDD/src/wlan_hdd_dev_pwr.c b/CORE/HDD/src/wlan_hdd_dev_pwr.c index 8d9c7ef376b8..cfd4d1c91947 100644 --- a/CORE/HDD/src/wlan_hdd_dev_pwr.c +++ b/CORE/HDD/src/wlan_hdd_dev_pwr.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -133,6 +133,7 @@ void hddDevTmTxBlockTimeoutHandler(void *usrData) /* Resume TX flow */ + hddLog(LOG1, FL("Enabling queues")); netif_tx_wake_all_queues(staAdapater->dev); pHddCtx->tmInfo.qBlocked = VOS_FALSE; mutex_unlock(&pHddCtx->tmInfo.tmOperationLock); diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c index c0702974d3db..8be74e047da8 100644 --- a/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -314,6 +314,7 @@ VOS_STATUS hdd_enter_deep_sleep(hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter) unsigned long rc; //Stop the Interface TX queue. + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); @@ -1407,6 +1408,7 @@ void hdd_suspend_wlan(void (*callback)(void *callbackContext, boolean suspended) if (pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_STANDBY) { //stop the interface before putting the chip to standby + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); } @@ -1420,6 +1422,7 @@ void hdd_suspend_wlan(void (*callback)(void *callbackContext, boolean suspended) send_suspend_ind: //stop all TX queues before suspend + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); /* Keep this suspend indication at the end (before processing next adaptor) @@ -1665,6 +1668,7 @@ void hdd_resume_wlan(void) send_resume_ind: //wake the tx queues + hddLog(LOG1, FL("Enabling queues")); netif_tx_wake_all_queues(pAdapter->dev); hdd_conf_resume_ind(pAdapter); diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 0aa087f0c3dc..08af58d97564 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -267,6 +267,7 @@ static int hdd_hostapd_open (struct net_device *dev) //Turn ON carrier state netif_carrier_on(dev); //Enable all Tx queues + hddLog(LOG1, FL("Enabling queues")); netif_tx_start_all_queues(dev); done: EXIT(); @@ -288,6 +289,7 @@ int hdd_hostapd_stop (struct net_device *dev) ENTER(); //Stop all tx queues + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(dev); //Turn OFF carrier state diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index f40d9c1877af..897c12b36bbc 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -3121,6 +3121,11 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, if (WARN_ON(is_zero_ether_addr(mac_addr))) return -EINVAL; + if (!hdd_ipa || !hdd_ipa_is_enabled(hdd_ipa->hdd_ctx)) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "IPA OFFLOAD NOT ENABLED"); + return -EINVAL; + } + #ifdef IPA_UC_OFFLOAD if (hdd_ipa_uc_is_enabled(hdd_ipa) && #ifdef IPA_UC_STA_OFFLOAD @@ -3129,6 +3134,7 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, (WLAN_HDD_SOFTAP != adapter->device_mode)) { return 0; } + /* During IPA UC resource loading/unloading * new event issued. * Store event seperatly and handle later */ diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 4968254d8c36..6d8e610c2b02 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -8408,6 +8408,7 @@ int hdd_stop (struct net_device *dev) /* Disable TX on the interface, after this hard_start_xmit() will not * be called on that interface */ + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); /* Mark the interface status as "down" for outside world */ @@ -9369,6 +9370,11 @@ VOS_STATUS hdd_enable_bmps_imps(hdd_context_t *pHddCtx) { VOS_STATUS status = VOS_STATUS_SUCCESS; + if (0 != wlan_hdd_validate_context(pHddCtx)) { + hddLog(LOGE, FL("HDD context is not valid")); + return VOS_STATUS_E_PERM; + } + if(pHddCtx->cfg_ini->fIsBmpsEnabled) { sme_EnablePowerSave(pHddCtx->hHal, ePMC_BEACON_MODE_POWER_SAVE); @@ -9643,6 +9649,7 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, #endif #endif //Stop the Interface TX queue. + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); //netif_tx_disable(pWlanDev); netif_carrier_off(pAdapter->dev); @@ -9706,6 +9713,7 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, goto err_free_netdev; } + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); @@ -9783,6 +9791,7 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type, hdd_init_tx_rx( pAdapter ); //Stop the Interface TX queue. + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); } @@ -10156,6 +10165,7 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, ENTER(); + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); switch(pAdapter->device_mode) @@ -10450,6 +10460,7 @@ VOS_STATUS hdd_reset_all_adapters( hdd_context_t *pHddCtx ) while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) { pAdapter = pAdapterNode->pAdapter; + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(pAdapter->dev); netif_carrier_off(pAdapter->dev); diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c index 726843acfbab..e59e4612599e 100644 --- a/CORE/HDD/src/wlan_hdd_p2p.c +++ b/CORE/HDD/src/wlan_hdd_p2p.c @@ -1777,6 +1777,7 @@ static void hdd_wlan_tx_complete( hdd_adapter_t* pAdapter, netif_rx_ni( skb ); /* Enable Queues which we have disabled earlier */ + hddLog(LOG1, FL("Enabling queues")); netif_tx_start_all_queues( pAdapter->dev ); } diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c index f43f4e9b1973..0aa268446a50 100644 --- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -161,6 +161,7 @@ void hdd_softap_tx_resume_timer_expired_handler(void *adapter_context) return; } + hddLog(LOG1, FL("Enabling queues")); netif_tx_wake_all_queues(pAdapter->dev); return; } @@ -196,6 +197,7 @@ void hdd_softap_tx_resume_cb(void *adapter_context, vos_timer_stop(&pAdapter->tx_flow_control_timer); } + hddLog(LOG1, FL("Enabling queues")); netif_tx_wake_all_queues(pAdapter->dev); pAdapter->hdd_stats.hddTxRxStats.txflow_unpause_cnt++; pAdapter->hdd_stats.hddTxRxStats.is_txflow_paused = FALSE; @@ -204,6 +206,7 @@ void hdd_softap_tx_resume_cb(void *adapter_context, #if defined(CONFIG_PER_VDEV_TX_DESC_POOL) else if (VOS_FALSE == tx_resume) /* Pause TX */ { + hddLog(LOG1, FL("Disabling queues")); netif_tx_stop_all_queues(pAdapter->dev); if (VOS_TIMER_STATE_STOPPED == vos_timer_getCurrentState(&pAdapter->tx_flow_control_timer)) @@ -330,6 +333,7 @@ int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) if ((pAdapter->tx_flow_timer_initialized == TRUE) && (VOS_TIMER_STATE_STOPPED == vos_timer_getCurrentState(&pAdapter->tx_flow_control_timer))) { + hddLog(LOG1, FL("Disabling queues")); netif_tx_stop_all_queues(dev); vos_timer_start(&pAdapter->tx_flow_control_timer, WLAN_SAP_HDD_TX_FLOW_CONTROL_OS_Q_BLOCK_TIME); @@ -1370,10 +1374,12 @@ VOS_STATUS hdd_softap_RegisterSTA( hdd_adapter_t *pAdapter, "Turn on Monitor the carrier"); netif_carrier_on(pmonAdapter->dev); //Enable Tx queue + hddLog(LOG1, FL("Enabling queues")); netif_tx_start_all_queues(pmonAdapter->dev); } netif_carrier_on(pAdapter->dev); //Enable Tx queue + hddLog(LOG1, FL("Enabling queues")); netif_tx_start_all_queues(pAdapter->dev); return( vosStatus ); diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c index fd142dc0e710..66559e6854e4 100644 --- a/CORE/HDD/src/wlan_hdd_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_tx_rx.c @@ -283,6 +283,7 @@ void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId) size <= HDD_TX_QUEUE_LOW_WATER_MARK && netif_tx_queue_stopped(txq) ) { + hddLog(LOG1, FL("Enabling queue for queue %d"), i); netif_tx_start_queue(txq); pAdapter->isTxSuspended[i] = VOS_FALSE; } @@ -578,6 +579,7 @@ int hdd_mon_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { /* We want to process one packet at a time, so lets disable all TX queues * and re-enable the queues once we get TX feedback for this packet */ + hddLog(LOG1, FL("Disabling queues")); netif_tx_stop_all_queues(pAdapter->dev); pAdapter->isTxSuspended[ac] = VOS_TRUE; spin_unlock(&pAdapter->wmm_tx_queue[ac].lock); @@ -648,6 +650,7 @@ void hdd_tx_resume_timer_expired_handler(void *adapter_context) return; } + hddLog(LOG1, FL("Enabling queues")); netif_tx_wake_all_queues(pAdapter->dev); pAdapter->hdd_stats.hddTxRxStats.txflow_unpause_cnt++; pAdapter->hdd_stats.hddTxRxStats.is_txflow_paused = FALSE; @@ -691,6 +694,7 @@ void hdd_tx_resume_cb(void *adapter_context, FL("flow control, tx queues un-pause avoided as we are in REASSOCIATING state")); return; } + hddLog(LOG1, FL("Enabling queues")); netif_tx_wake_all_queues(pAdapter->dev); pAdapter->hdd_stats.hddTxRxStats.txflow_unpause_cnt++; pAdapter->hdd_stats.hddTxRxStats.is_txflow_paused = FALSE; @@ -699,6 +703,7 @@ void hdd_tx_resume_cb(void *adapter_context, #if defined(CONFIG_PER_VDEV_TX_DESC_POOL) else if (VOS_FALSE == tx_resume) /* Pause TX */ { + hddLog(LOG1, FL("Disabling queues")); netif_tx_stop_all_queues(pAdapter->dev); if (VOS_TIMER_STATE_STOPPED == vos_timer_getCurrentState(&pAdapter->tx_flow_control_timer)) @@ -833,6 +838,7 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) pAdapter->sessionId, pAdapter->tx_flow_low_watermark, pAdapter->tx_flow_high_watermark_offset)) { + hddLog(LOG1, FL("Disabling queues")); netif_tx_stop_all_queues(dev); if ((pAdapter->tx_flow_timer_initialized == TRUE) && (VOS_TIMER_STATE_STOPPED == @@ -1597,6 +1603,7 @@ VOS_STATUS hdd_tx_fetch_packet_cbk( v_VOID_t *vosContext, { /* During TX open duration, TX frame count is larger than threshold * Block TX during Sleep time */ + hddLog(LOG1, FL("Disabling queues")); netif_tx_stop_all_queues(pAdapter->dev); pHddCtx->tmInfo.qBlocked = VOS_TRUE; pHddCtx->tmInfo.lastblockTs = timestamp; diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index c3fade4bc340..7ae1967f0a27 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -3146,6 +3146,7 @@ static void hdd_ocb_set_sched_callback(sir_ocb_set_sched_response_t *resp) resp->status = -1; } else { netif_carrier_on(adapter->dev); + hddLog(LOG1, FL("Enabling queues")); netif_tx_start_all_queues(adapter->dev); } @@ -3237,6 +3238,7 @@ static int iw_set_dot11p_channel_sched(struct net_device *dev, sched_req->resp = sched_resp; sched_req->callback = hdd_ocb_set_sched_callback; + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(adapter->dev); netif_carrier_off(adapter->dev); @@ -4560,6 +4562,7 @@ static int iw_set_mlme(struct net_device *dev, /* Resetting authKeyMgmt */ (WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter))->authKeyMgmt = 0; + hddLog(LOG1, FL("Disabling queues")); netif_tx_disable(dev); netif_carrier_off(dev); pAdapter->hdd_stats.hddTxRxStats.netq_disable_cnt++; diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 5005d2bfc326..1b6ab464e534 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 10 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 25 +#define QWLAN_VERSION_BUILD 26 -#define QWLAN_VERSIONSTR "4.0.10.25" +#define QWLAN_VERSIONSTR "4.0.10.26" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms index 662886166296..8beb656c7fa5 100644 --- a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms +++ b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms @@ -2036,7 +2036,7 @@ IE Vendor3IE (EID_VENDOR_SPECIFIC) OUI (0x00, 0x16, 0x32) IE QComVendorIE (EID_VENDOR_SPECIFIC) OUI (0x00, 0xA0, 0xC6) { type, 1; - data[0..255]; + channel, 1; } IE ESETrafStrmMet (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x07) diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h index 56035917449c..39f40d85fa72 100644 --- a/CORE/MAC/src/include/dot11f.h +++ b/CORE/MAC/src/include/dot11f.h @@ -37,7 +37,7 @@ * * * This file was automatically generated by 'framesc' - * Wed Jan 28 19:41:34 2015 from the following file(s): + * Fri Jan 30 12:18:28 2015 from the following file(s): * * dot11f.frms * @@ -4468,16 +4468,15 @@ tANI_U32 dot11fGetPackedIEQBSSLoad(tpAniSirGlobal, tDot11fIEQBSSLoad*, tANI_U32* typedef struct sDot11fIEQComVendorIE { tANI_U8 present; tANI_U8 type; - tANI_U8 num_data; - tANI_U8 data[255]; + tANI_U8 channel; } tDot11fIEQComVendorIE; #define DOT11F_EID_QCOMVENDORIE ( 221 ) // N.B. These #defines do *not* include the EID & length -#define DOT11F_IE_QCOMVENDORIE_MIN_LEN ( 4 ) +#define DOT11F_IE_QCOMVENDORIE_MIN_LEN ( 5 ) -#define DOT11F_IE_QCOMVENDORIE_MAX_LEN ( 259 ) +#define DOT11F_IE_QCOMVENDORIE_MAX_LEN ( 5 ) #ifdef __cplusplus extern "C" { diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h index 09e799d9b93a..9f79fa5f5f46 100644 --- a/CORE/MAC/src/include/parserApi.h +++ b/CORE/MAC/src/include/parserApi.h @@ -67,7 +67,7 @@ struct sAvoidChannelIE { uint8_t oui[3]; /* following must be 0x01 */ uint8_t type; - uint8_t channels[1]; + uint8_t channel; }; #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ @@ -599,9 +599,9 @@ PopulateDot11fChanSwitchWrapper(tpAniSirGlobal pMac, #ifdef FEATURE_AP_MCC_CH_AVOIDANCE /* Populate a tDot11fIEQComVendorIE */ void -populate_dot11f_avoid_channels_ie(tpAniSirGlobal mac_ctx, - tDot11fIEQComVendorIE *dot11f, - tpPESession session_entry); +populate_dot11f_avoid_channel_ie(tpAniSirGlobal mac_ctx, + tDot11fIEQComVendorIE *dot11f, + tpPESession session_entry); #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ /// Populate a tDot11fIECountry diff --git a/CORE/MAC/src/pe/sch/schBeaconGen.c b/CORE/MAC/src/pe/sch/schBeaconGen.c index 5bea07ed1270..3638112e1ac9 100644 --- a/CORE/MAC/src/pe/sch/schBeaconGen.c +++ b/CORE/MAC/src/pe/sch/schBeaconGen.c @@ -354,7 +354,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn #ifdef FEATURE_AP_MCC_CH_AVOIDANCE /* populate proprietary IE for MDM device operating in AP-MCC */ - populate_dot11f_avoid_channels_ie(pMac, &pBcn2->QComVendorIE, psessionEntry); + populate_dot11f_avoid_channel_ie(pMac, &pBcn2->QComVendorIE, psessionEntry); #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ if (psessionEntry->dot11mode != WNI_CFG_DOT11_MODE_11B) diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h index 4b43fd4c96bd..17b79241d80f 100644 --- a/CORE/SAP/inc/sapApi.h +++ b/CORE/SAP/inc/sapApi.h @@ -617,6 +617,12 @@ typedef struct sSapDfsInfo * operating DFS channel. */ v_U8_t sap_operating_chan_preferred_location; + + /* + * Flag to indicate if DFS test mode is enabled and + * channel switch is disabled. + */ + v_U8_t disable_dfs_ch_switch; } tSapDfsInfo; typedef struct tagSapCtxList diff --git a/CORE/SAP/src/sapApiLinkCntl.c b/CORE/SAP/src/sapApiLinkCntl.c index 1750b7064d0e..e1a6df6a00e4 100644 --- a/CORE/SAP/src/sapApiLinkCntl.c +++ b/CORE/SAP/src/sapApiLinkCntl.c @@ -552,6 +552,7 @@ WLANSAP_RoamCallback eHalStatus halStatus = eHAL_STATUS_SUCCESS; tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx); tpAniSirGlobal pMac = NULL; + tANI_U8 dfs_beacon_start_req = 0; if (NULL == hHal) { @@ -986,14 +987,13 @@ WLANSAP_RoamCallback break; case eCSR_ROAM_RESULT_DFS_RADAR_FOUND_IND: - if (sapContext->csrRoamProfile.disableDFSChSwitch) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - "sapdfs: DFS channel switch disabled"); - break; - } if (eSAP_DFS_CAC_WAIT == sapContext->sapsMachine) { + if (sapContext->csrRoamProfile.disableDFSChSwitch) { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "sapdfs: DFS channel switch disabled"); + break; + } if (VOS_TRUE == pMac->sap.SapDfsInfo.sap_radar_found_status) { VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_MED, @@ -1051,6 +1051,22 @@ WLANSAP_RoamCallback { eCsrPhyMode phyMode = sapContext->csrRoamProfile.phyMode; + if (sapContext->csrRoamProfile.disableDFSChSwitch) { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "sapdfs: DFS channel switch disabled"); + /* + * Send a beacon start request to PE. CSA IE required + * flag from beacon template will be cleared by now. + * A new beacon template with no CSA IE will be sent + * to firmware. + */ + dfs_beacon_start_req = VOS_TRUE; + halStatus = sme_RoamStartBeaconReq( hHal, + sapContext->bssid, + dfs_beacon_start_req); + break; + } + /* Both success and failure cases are handled intentionally handled * together. Irrespective of whether the channel switch IE was * sent out successfully or not, SAP should still vacate the diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c index c9626c26ce8c..dfd798b91adf 100644 --- a/CORE/SAP/src/sapChSelect.c +++ b/CORE/SAP/src/sapChSelect.c @@ -262,8 +262,7 @@ sap_check_n_add_channel(ptSapContext sap_ctx, * Detection of Q2Q IE indicates presence of another MDM device with its AP * operating in MCC mode. This function parses the scan results and processes * the Q2Q IE if found. It then extracts the channels and populates them in - * sap_ctx sturct. It also increases the weights of those channels so that - * ACS logic will avoid those channels in its selection algorigthm. + * sap_ctx struct. * * Return: void */ @@ -273,10 +272,8 @@ sap_process_avoid_ie(tHalHandle hal, ptSapContext sap_ctx, tScanResultHandle scan_result) { - uint8_t i; uint32_t total_ie_len = 0; uint8_t *temp_ptr = NULL; - uint8_t num_channels; struct sAvoidChannelIE *avoid_ch_ie; tCsrScanResultInfo *node = NULL; tpAniSirGlobal mac_ctx = NULL; @@ -296,21 +293,17 @@ sap_process_avoid_ie(tHalHandle hal, if (temp_ptr) { avoid_ch_ie = (struct sAvoidChannelIE*)temp_ptr; - num_channels = avoid_ch_ie->length - - SIR_MAC_QCOM_VENDOR_SIZE - 1; if (avoid_ch_ie->type != QCOM_VENDOR_IE_MCC_AVOID_CH) { continue; } sap_ctx->sap_detected_avoid_ch_ie.present = 1; - for (i = 0; i < num_channels; i++) { - VOS_TRACE( VOS_MODULE_ID_SAP, - VOS_TRACE_LEVEL_DEBUG, - "Q2Q IE - avoid ch %d", - avoid_ch_ie->channels[i]); - /* add this channel to to_avoid channel list */ - sap_check_n_add_channel(sap_ctx, - avoid_ch_ie->channels[i]); - } + VOS_TRACE(VOS_MODULE_ID_SAP, + VOS_TRACE_LEVEL_DEBUG, + "Q2Q IE - avoid ch %d", + avoid_ch_ie->channel); + /* add this channel to to_avoid channel list */ + sap_check_n_add_channel(sap_ctx, + avoid_ch_ie->channel); } /* if (temp_ptr) */ node = sme_ScanResultGetNext(hal, scan_result); } diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index 6aff358d637b..dfcb8d22712b 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -4469,6 +4469,13 @@ v_U8_t sapIndicateRadar(ptSapContext sapContext, tSirSmeDfsEventInd *dfs_event) return 0; } + /* + * SAP needs to generate Channel Switch IE + * if the radar is found in the STARTED state + */ + if (eSAP_STARTED == sapContext->sapsMachine) + pMac->sap.SapDfsInfo.csaIERequired = VOS_TRUE; + if (sapContext->csrRoamProfile.disableDFSChSwitch) { return sapContext->channel; @@ -4477,12 +4484,6 @@ v_U8_t sapIndicateRadar(ptSapContext sapContext, tSirSmeDfsEventInd *dfs_event) /* set the Radar Found flag in SapDfsInfo */ pMac->sap.SapDfsInfo.sap_radar_found_status = VOS_TRUE; - /* We need to generate Channel Switch IE if the radar is found in the - * operating state - */ - if (eSAP_STARTED == sapContext->sapsMachine) - pMac->sap.SapDfsInfo.csaIERequired = VOS_TRUE; - sapGet5GHzChannelList(sapContext); if (dfs_event->chan_list.nchannels > SIR_DFS_MAX_20M_SUB_CH) { diff --git a/CORE/SAP/src/sapInternal.h b/CORE/SAP/src/sapInternal.h index dfaa2208593c..3725d43ac9e8 100644 --- a/CORE/SAP/src/sapInternal.h +++ b/CORE/SAP/src/sapInternal.h @@ -160,12 +160,6 @@ typedef struct sSapAcsChannelInfo { }tSapAcsChannelInfo; #ifdef FEATURE_AP_MCC_CH_AVOIDANCE -/* max MDM devices in vicinity supported for this feature */ -#define SAP_MCC_CH_AVOIDANCE_MAX_DEV 1 -/* max SAP per MDM devices */ -#define SAP_MCC_CH_AVOIDANCE_MAX_SAP_PER_DEV 2 -/* max channels a SAP will take, 4 right now for 80 MHz */ -#define SAP_MCC_CH_AVOIDANCE_MAX_CH_PER_AP 4 /* * In a setup having two MDM both operating in AP+AP MCC scenario * if both the AP decides to use same or close channel set, CTS to @@ -179,9 +173,7 @@ typedef struct sSapAcsChannelInfo { */ struct sap_avoid_channels_info { bool present; - uint8_t channels[SAP_MCC_CH_AVOIDANCE_MAX_DEV * - SAP_MCC_CH_AVOIDANCE_MAX_SAP_PER_DEV * - SAP_MCC_CH_AVOIDANCE_MAX_CH_PER_AP]; + uint8_t channels[WNI_CFG_VALID_CHANNEL_LIST_LEN]; }; #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c index 5872dddac10c..a05c93610dce 100644 --- a/CORE/SAP/src/sapModule.c +++ b/CORE/SAP/src/sapModule.c @@ -812,6 +812,7 @@ WLANSAP_StartBss ptSapContext pSapCtx = NULL; tANI_BOOLEAN restartNeeded; tHalHandle hHal; + tpAniSirGlobal pmac = NULL; int ret; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ @@ -906,6 +907,13 @@ WLANSAP_StartBss } } + pmac = PMAC_STRUCT( hHal ); + /* + * Copy the DFS Test Mode setting to pmac for + * access in lower layers + */ + pmac->sap.SapDfsInfo.disable_dfs_ch_switch = + pConfig->disableDFSChSwitch; // Copy MAC filtering settings to sap context pSapCtx->eSapMacAddrAclMode = pConfig->SapMacaddr_acl; vos_mem_copy(pSapCtx->acceptMacList, pConfig->accept_mac, sizeof(pConfig->accept_mac)); diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 19b3b82ffd02..18efc5ba21b5 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -28474,6 +28474,7 @@ int wma_dfs_indicate_radar(struct ieee80211com *ic, struct wma_dfs_radar_indication *radar_event; struct hdd_dfs_radar_ind hdd_radar_event; void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); + tpAniSirGlobal pmac = NULL; wma = (tp_wma_handle) vos_get_context(VOS_MODULE_ID_WDA, vos_context); @@ -28484,6 +28485,9 @@ int wma_dfs_indicate_radar(struct ieee80211com *ic, } hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD,wma->vos_context); + pmac = (tpAniSirGlobal) + vos_get_context(VOS_MODULE_ID_PE, wma->vos_context); + if (wma->dfs_ic != ic) { WMA_LOGE("%s:DFS- Invalid WMA handle",__func__); @@ -28499,8 +28503,11 @@ int wma_dfs_indicate_radar(struct ieee80211com *ic, /* * Do not post multiple Radar events on the same channel. + * But, when DFS test mode is enabled, allow multiple dfs + * radar events to be posted on the same channel. */ - if ( ichan->ic_ieee != (wma->dfs_ic->last_radar_found_chan) ) + if ((ichan->ic_ieee != (wma->dfs_ic->last_radar_found_chan)) || + ( pmac->sap.SapDfsInfo.disable_dfs_ch_switch == VOS_TRUE) ) { wma->dfs_ic->last_radar_found_chan = ichan->ic_ieee; /* Indicate the radar event to HDD to stop the netif Tx queues*/ diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 2a9b656dd1a2..611f93707e7e 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -17663,6 +17663,11 @@ eHalStatus csrQueueSmeCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOL { eHalStatus status; + if (!SME_IS_START(pMac)) { + smsLog(pMac, LOGE, FL("Sme in stop state")); + return eHAL_STATUS_FAILURE; + } + if( (eSmeCommandScan == pCommand->command) && pMac->scan.fDropScanCmd ) { smsLog(pMac, LOGW, FL(" drop scan (scan reason %d) command"), diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 4c977dcfe151..92b996fc6d96 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -465,6 +465,11 @@ tSmeCmd *smeGetCommandBuffer( tpAniSirGlobal pMac ) void smePushCommand( tpAniSirGlobal pMac, tSmeCmd *pCmd, tANI_BOOLEAN fHighPriority ) { + if (!SME_IS_START(pMac)) { + smsLog(pMac, LOGE, FL("Sme in stop state")); + return; + } + if ( fHighPriority ) { csrLLInsertHead( &pMac->sme.smeCmdPendingList, &pCmd->Link, LL_ACCESS_LOCK ); @@ -13223,6 +13228,8 @@ eHalStatus sme_ProcessChannelChangeResp(tpAniSirGlobal pMac, smsLog(pMac, LOGE, "Invalid Channel Change Resp Message: %d\n", status); } + vos_mem_free(pRoamInfo.channelChangeRespEvent); + return status; } diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c index b3fdc359023c..01f2bd567fe4 100644 --- a/CORE/SYS/legacy/src/utils/src/dot11f.c +++ b/CORE/SYS/legacy/src/utils/src/dot11f.c @@ -35,7 +35,7 @@ * * * This file was automatically generated by 'framesc' - * Wed Jan 28 19:41:34 2015 from the following file(s): + * Fri Jan 30 12:18:28 2015 from the following file(s): * * dot11f.frms * @@ -4077,8 +4077,7 @@ tANI_U32 dot11fUnpackIeQComVendorIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 pDst->type = *pBuf; pBuf += 1; ielen -= (tANI_U8)1; - pDst->num_data = (tANI_U8)( ielen ); - DOT11F_MEMCPY(pCtx, pDst->data, pBuf, ( ielen ) ); + pDst->channel = *pBuf; (void)pCtx; return status; } /* End dot11fUnpackIeQComVendorIE. */ @@ -7738,7 +7737,7 @@ tANI_U32 dot11fUnpackAuthentication(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 {offsetof(tDot11fBeacon, Vendor2IE), offsetof(tDot11fIEVendor2IE, present), 0, "Vendor2IE" , 0, 5, 5, SigIeVendor2IE, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2IE, 0, }, {offsetof(tDot11fBeacon, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE" , 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, {offsetof(tDot11fBeacon, ChannelSwitchWrapper), offsetof(tDot11fIEChannelSwitchWrapper, present), 0, "ChannelSwitchWrapper" , 0, 2, 7, SigIeChannelSwitchWrapper, {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, }, - {offsetof(tDot11fBeacon, QComVendorIE), offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE" , 0, 6, 261, SigIeQComVendorIE, {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, }, + {offsetof(tDot11fBeacon, QComVendorIE), offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE" , 0, 7, 7, SigIeQComVendorIE, {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, }, {offsetof(tDot11fBeacon, ESEVersion), offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion" , 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0}, 4, DOT11F_EID_ESEVERSION, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; @@ -8630,8 +8629,7 @@ tANI_U32 dot11fUnpackBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, t else { FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->QComVendorIE.type, 1); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("num_data: %d.\n"), pFrm->QComVendorIE.num_data); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* ) pFrm->QComVendorIE.data, pFrm->QComVendorIE.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->QComVendorIE.channel, 1); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("ESEVersion:\n")); if (!pFrm->ESEVersion.present) @@ -8781,7 +8779,7 @@ tANI_U32 dot11fUnpackBeacon1(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, {offsetof(tDot11fBeacon2, Vendor2IE), offsetof(tDot11fIEVendor2IE, present), 0, "Vendor2IE" , 0, 5, 5, SigIeVendor2IE, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2IE, 0, }, {offsetof(tDot11fBeacon2, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE" , 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, {offsetof(tDot11fBeacon2, ChannelSwitchWrapper), offsetof(tDot11fIEChannelSwitchWrapper, present), 0, "ChannelSwitchWrapper" , 0, 2, 7, SigIeChannelSwitchWrapper, {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, }, - {offsetof(tDot11fBeacon2, QComVendorIE), offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE" , 0, 6, 261, SigIeQComVendorIE, {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, }, + {offsetof(tDot11fBeacon2, QComVendorIE), offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE" , 0, 7, 7, SigIeQComVendorIE, {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, }, {offsetof(tDot11fBeacon2, ESEVersion), offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion" , 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0}, 4, DOT11F_EID_ESEVERSION, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; @@ -9521,8 +9519,7 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, else { FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->QComVendorIE.type, 1); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("num_data: %d.\n"), pFrm->QComVendorIE.num_data); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->QComVendorIE.data, pFrm->QComVendorIE.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->QComVendorIE.channel, 1); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("ESEVersion:\n")); if (!pFrm->ESEVersion.present) @@ -9592,7 +9589,7 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, {offsetof(tDot11fBeaconIEs, Vendor2IE), offsetof(tDot11fIEVendor2IE, present), 0, "Vendor2IE" , 0, 5, 5, SigIeVendor2IE, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2IE, 0, }, {offsetof(tDot11fBeaconIEs, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE" , 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, {offsetof(tDot11fBeaconIEs, ChannelSwitchWrapper), offsetof(tDot11fIEChannelSwitchWrapper, present), 0, "ChannelSwitchWrapper" , 0, 2, 7, SigIeChannelSwitchWrapper, {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, }, - {offsetof(tDot11fBeaconIEs, QComVendorIE), offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE" , 0, 6, 261, SigIeQComVendorIE, {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, }, + {offsetof(tDot11fBeaconIEs, QComVendorIE), offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE" , 0, 7, 7, SigIeQComVendorIE, {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeaconIEs *pFrm) @@ -10591,8 +10588,7 @@ tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf else { FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->QComVendorIE.type, 1); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("num_data: %d.\n"), pFrm->QComVendorIE.num_data); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* ) pFrm->QComVendorIE.data, pFrm->QComVendorIE.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->QComVendorIE.channel, 1); } } # endif // DOT11F_DUMP_FRAMES @@ -12930,7 +12926,7 @@ tANI_U32 dot11fUnpackProbeRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n {offsetof(tDot11fProbeResponse, Vendor2IE), offsetof(tDot11fIEVendor2IE, present), 0, "Vendor2IE" , 0, 5, 5, SigIeVendor2IE, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2IE, 0, }, {offsetof(tDot11fProbeResponse, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE" , 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, {offsetof(tDot11fProbeResponse, ChannelSwitchWrapper), offsetof(tDot11fIEChannelSwitchWrapper, present), 0, "ChannelSwitchWrapper" , 0, 2, 7, SigIeChannelSwitchWrapper, {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, }, - {offsetof(tDot11fProbeResponse, QComVendorIE), offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE" , 0, 6, 261, SigIeQComVendorIE, {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, }, + {offsetof(tDot11fProbeResponse, QComVendorIE), offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE" , 0, 7, 7, SigIeQComVendorIE, {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, }, {offsetof(tDot11fProbeResponse, ESEVersion), offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion" , 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0}, 4, DOT11F_EID_ESEVERSION, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; @@ -13876,8 +13872,7 @@ tANI_U32 dot11fUnpackProbeResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 else { FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->QComVendorIE.type, 1); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("num_data: %d.\n"), pFrm->QComVendorIE.num_data); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->QComVendorIE.data, pFrm->QComVendorIE.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->QComVendorIE.channel, 1); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("ESEVersion:\n")); if (!pFrm->ESEVersion.present) @@ -20898,7 +20893,7 @@ static tANI_U32 GetPackedSizeCore(tpAniSirGlobal pCtx, break; case SigIeQComVendorIE: offset = sizeof(tDot11fIEQComVendorIE); - byteCount = ((tDot11fIEQComVendorIE* )(pFrm + pIe->offset + sizeof(tDot11fIEQComVendorIE) * i ))->num_data + 1; + byteCount = 2; pIePresent = ( (tDot11fIEQComVendorIE* )(pFrm + pIe->offset + offset * i ))->present; break; case SigIeQOSCapsAp: @@ -27185,7 +27180,7 @@ tANI_U32 dot11fPackIeQComVendorIE(tpAniSirGlobal pCtx, tANI_U8* pIeLen = 0; tANI_U32 nConsumedOnEntry = *pnConsumed; tANI_U32 nNeeded = 0U; - nNeeded += (pSrc->num_data + 1); + nNeeded += 2; while ( pSrc->present ) { if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW; @@ -27202,8 +27197,8 @@ tANI_U32 dot11fPackIeQComVendorIE(tpAniSirGlobal pCtx, *pBuf = pSrc->type; *pnConsumed += 1; pBuf += 1; - DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data); - *pnConsumed += pSrc->num_data; + *pBuf = pSrc->channel; + *pnConsumed += 1; // fieldsEndFlag = 1 break; } @@ -32125,8 +32120,7 @@ tANI_U32 dot11fPackBeacon(tpAniSirGlobal pCtx, tDot11fBeacon *pFrm, tANI_U8 *pBu else { FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->QComVendorIE.type, 1); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("num_data: %d.\n"), pFrm->QComVendorIE.num_data); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* ) pFrm->QComVendorIE.data, pFrm->QComVendorIE.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->QComVendorIE.channel, 1); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("ESEVersion:\n")); if (!pFrm->ESEVersion.present) @@ -32959,8 +32953,7 @@ tANI_U32 dot11fPackBeacon2(tpAniSirGlobal pCtx, tDot11fBeacon2 *pFrm, tANI_U8 *p else { FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->QComVendorIE.type, 1); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("num_data: %d.\n"), pFrm->QComVendorIE.num_data); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* ) pFrm->QComVendorIE.data, pFrm->QComVendorIE.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->QComVendorIE.channel, 1); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("ESEVersion:\n")); if (!pFrm->ESEVersion.present) @@ -33974,8 +33967,7 @@ tANI_U32 dot11fPackBeaconIEs(tpAniSirGlobal pCtx, tDot11fBeaconIEs *pFrm, tANI_U else { FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->QComVendorIE.type, 1); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("num_data: %d.\n"), pFrm->QComVendorIE.num_data); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* ) pFrm->QComVendorIE.data, pFrm->QComVendorIE.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->QComVendorIE.channel, 1); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), pBuf, nBuf); @@ -36926,8 +36918,7 @@ tANI_U32 dot11fPackProbeResponse(tpAniSirGlobal pCtx, tDot11fProbeResponse *pFrm else { FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->QComVendorIE.type, 1); - FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("num_data: %d.\n"), pFrm->QComVendorIE.num_data); - FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* ) pFrm->QComVendorIE.data, pFrm->QComVendorIE.num_data); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->QComVendorIE.channel, 1); } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("ESEVersion:\n")); if (!pFrm->ESEVersion.present) diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c index 43157d205e45..20416dc2a0a4 100644 --- a/CORE/SYS/legacy/src/utils/src/parserApi.c +++ b/CORE/SYS/legacy/src/utils/src/parserApi.c @@ -274,68 +274,16 @@ PopulateDot11fChanSwitchAnn(tpAniSirGlobal pMac, #ifdef FEATURE_AP_MCC_CH_AVOIDANCE void -populate_dot11f_avoid_channels_ie(tpAniSirGlobal mac_ctx, +populate_dot11f_avoid_channel_ie(tpAniSirGlobal mac_ctx, tDot11fIEQComVendorIE *dot11f, tpPESession pe_session) { - dot11f->present = pe_session->sap_advertise_avoid_ch_ie; - - if (!dot11f->present) + if (!pe_session->sap_advertise_avoid_ch_ie) return; + dot11f->present = true; dot11f->type = QCOM_VENDOR_IE_MCC_AVOID_CH; - - if(pe_session->htSecondaryChannelOffset == - PHY_DOUBLE_CHANNEL_LOW_PRIMARY && - pe_session->htSupportedChannelWidthSet == 1) { - dot11f->num_data = 2; - dot11f->data[0] = pe_session->currentOperChannel; - dot11f->data[1] = dot11f->data[0] + 4; - } - - if(pe_session->htSecondaryChannelOffset == - PHY_DOUBLE_CHANNEL_HIGH_PRIMARY && - pe_session->htSupportedChannelWidthSet == 1) { - dot11f->num_data = 2; - dot11f->data[0] = pe_session->currentOperChannel; - dot11f->data[1] = dot11f->data[0] - 4; - } - - if(pe_session->htSecondaryChannelOffset == - PHY_SINGLE_CHANNEL_CENTERED || - pe_session->htSupportedChannelWidthSet == 0) { - dot11f->num_data = 1; - dot11f->data[0] = pe_session->currentOperChannel; - } - - if (pe_session->vhtCapability) { - if (pe_session->vhtTxChannelWidthSet == - WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ) { - dot11f->num_data = 4; - if(pe_session->currentOperChannel >= 36 && - pe_session->currentOperChannel <= 48) { - dot11f->data[0] = 36; - } else if(pe_session->currentOperChannel >= 52 - && pe_session->currentOperChannel <= 64) { - dot11f->data[0] = 52; - } else if(pe_session->currentOperChannel >= 100 && - pe_session->currentOperChannel <= 112) { - dot11f->data[0] = 100; - } else if(pe_session->currentOperChannel >= 116 && - pe_session->currentOperChannel <= 128) { - dot11f->data[0] = 116; - } else if(pe_session->currentOperChannel >= 132 && - pe_session->currentOperChannel <= 144) { - dot11f->data[0] = 132; - } else if(pe_session->currentOperChannel >= 149 && - pe_session->currentOperChannel <= 161) { - dot11f->data[0] = 149; - } - dot11f->data[1] = dot11f->data[0] + 4; - dot11f->data[2] = dot11f->data[0] + 8; - dot11f->data[3] = dot11f->data[0] + 12; - } - } + dot11f->channel = pe_session->currentOperChannel; } #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ @@ -3828,13 +3776,10 @@ sirConvertBeaconFrame2Struct(tpAniSirGlobal pMac, if(pBeacon->QComVendorIE.present) { pBeaconStruct->AvoidChannelIE.present = pBeacon->QComVendorIE.present; - pBeaconStruct->AvoidChannelIE.num_data = - pBeacon->QComVendorIE.num_data; pBeaconStruct->AvoidChannelIE.type = pBeacon->QComVendorIE.type; - vos_mem_copy(pBeaconStruct->AvoidChannelIE.data, - pBeacon->QComVendorIE.data, - sizeof(pBeacon->QComVendorIE.data)); + pBeaconStruct->AvoidChannelIE.channel = + pBeacon->QComVendorIE.channel; } #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c index 017ea3f34a98..5ac1a5024cbf 100644 --- a/CORE/VOSS/src/vos_sched.c +++ b/CORE/VOSS/src/vos_sched.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -414,6 +414,13 @@ TX_THREAD_START_FAILURE: MC_THREAD_START_FAILURE: //De-initialize all the message queues vos_sched_deinit_mqs(pSchedContext); + + +#ifdef QCA_CONFIG_SMP + unregister_hotcpu_notifier(&vos_cpu_hotplug_notifier); + vos_free_tlshim_pkt_freeq(gpVosSchedContext); +#endif + return VOS_STATUS_E_RESOURCES; } /* vos_sched_open() */ |
