diff options
| author | Gupta, Kapil <kapgupta@qti.qualcomm.com> | 2016-05-13 14:09:29 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-05-23 16:09:45 +0530 |
| commit | 4b2a6cc74f4c8be05a62eb144fe8bfcc94a1d78e (patch) | |
| tree | 92b92b8780833ad4456efa1cc0960f02c7b89370 | |
| parent | 92177239cfdd1fe8c42a23a087ccc8e91c482422 (diff) | |
qcacld-2.0: Disable runtime PM if OBSS protection is enabled
In case of RuntimePM, FW is not able to send other AP's beacons
to host causing non updation of HT protection bit in the IEs,
Which is a voilation of Wifi certification.
Add changes to disable runtime PM for SAP mode if OBSS protection
is enabled in config ini file.
Change-Id: I2589b8fb020c7804c8576541155eac9ac630f2af
CRs-Fixed: 1012545
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_main.h | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 6 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 13 |
4 files changed, 25 insertions, 0 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 1d63c2ea397e..73dd9f1f8463 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -926,6 +926,7 @@ typedef struct multicast_addr_list * @scan: scan context to prevent/allow runtime pm * @roc : remain on channel runtime pm context * @dfs : Dynamic frequency selection runtime pm context + * @obss: Obss protection runtime pm context * * Prevent Runtime PM for scan, roc and dfs. */ @@ -933,6 +934,7 @@ struct hdd_runtime_pm_context { void *scan; void *roc; void *dfs; + void *obss; }; /** diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 6b17434b62a8..3d22aa55c4ab 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -14045,6 +14045,10 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, /* Successfully started Bss update the state bit. */ set_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags); + /* Disable runtime PM if obss protection is enabled */ + if (pConfig->obssProtEnabled) + vos_runtime_pm_prevent_suspend(pHddCtx->runtime_context.obss); + /* Initialize WMM configuation */ hdd_wmm_init(pHostapdAdapter); wlan_hdd_incr_active_session(pHddCtx, pHostapdAdapter->device_mode); @@ -14395,6 +14399,8 @@ static int __wlan_hdd_cfg80211_stop_ap (struct wiphy *wiphy, if (pHddCtx->cfg_ini->enable_dynamic_sta_chainmask) hdd_decide_dynamic_chain_mask(pHddCtx, HDD_ANTENNA_MODE_INVALID); + if (pHddCtx->cfg_ini->apOBSSProtEnabled) + vos_runtime_pm_allow_suspend(pHddCtx->runtime_context.obss); if (status != VOS_STATUS_SUCCESS) { hddLog(VOS_TRACE_LEVEL_FATAL, FL("Stopping the BSS")); diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 53d82a8eecc9..40ae5cb925f2 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -861,6 +861,8 @@ static int hdd_stop_bss_link(hdd_adapter_t *pHostapdAdapter, clear_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags); wlan_hdd_decr_active_session(pHddCtx, pHostapdAdapter->device_mode); } + if (pHddCtx->cfg_ini->apOBSSProtEnabled) + vos_runtime_pm_allow_suspend(pHddCtx->runtime_context.obss); EXIT(); return (status == VOS_STATUS_SUCCESS) ? 0 : -EBUSY; } @@ -5725,6 +5727,8 @@ static int __iw_softap_stopbss(struct net_device *dev, clear_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags); wlan_hdd_decr_active_session(pHddCtx, pHostapdAdapter->device_mode); } + if (pHddCtx->cfg_ini->apOBSSProtEnabled) + vos_runtime_pm_allow_suspend(pHddCtx->runtime_context.obss); EXIT(); return (status == VOS_STATUS_SUCCESS) ? 0 : -EBUSY; } diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index cbb737b242de..0ceb47f54faf 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -925,6 +925,8 @@ void wlan_hdd_restart_sap(hdd_adapter_t *ap_adapter) wlan_hdd_decr_active_session(pHddCtx, ap_adapter->device_mode); hddLog(LOGE, FL("SAP Stop Success")); + if (pHddCtx->cfg_ini->apOBSSProtEnabled) + vos_runtime_pm_allow_suspend(pHddCtx->runtime_context.obss); if (0 != wlan_hdd_cfg80211_update_apies(ap_adapter)) { hddLog(LOGE, FL("SAP Not able to set AP IEs")); WLANSAP_ResetSapConfigAddIE(pConfig, eUPDATE_IE_ALL); @@ -953,6 +955,8 @@ void wlan_hdd_restart_sap(hdd_adapter_t *ap_adapter) set_bit(SOFTAP_BSS_STARTED, &ap_adapter->event_flags); wlan_hdd_incr_active_session(pHddCtx, ap_adapter->device_mode); pHostapdState->bCommit = TRUE; + if (pHddCtx->cfg_ini->apOBSSProtEnabled) + vos_runtime_pm_prevent_suspend(pHddCtx->runtime_context.obss); } end: mutex_unlock(&pHddCtx->sap_lock); @@ -10007,6 +10011,7 @@ void hdd_runtime_suspend_init(hdd_context_t *hdd_ctx) context->scan = vos_runtime_pm_prevent_suspend_init("scan"); context->roc = vos_runtime_pm_prevent_suspend_init("roc"); context->dfs = vos_runtime_pm_prevent_suspend_init("dfs"); + context->obss = vos_runtime_pm_prevent_suspend_init("obss"); } /** @@ -10027,6 +10032,8 @@ void hdd_runtime_suspend_deinit(hdd_context_t *hdd_ctx) context->roc = NULL; vos_runtime_pm_prevent_suspend_deinit(context->dfs); context->dfs = NULL; + vos_runtime_pm_prevent_suspend_deinit(context->obss); + context->obss = NULL; } /** @@ -11573,6 +11580,8 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, updateIE.pAdditionIEBuffer = NULL; updateIE.append = VOS_FALSE; updateIE.notify = VOS_FALSE; + if (pHddCtx->cfg_ini->apOBSSProtEnabled) + vos_runtime_pm_allow_suspend(pHddCtx->runtime_context.obss); /* Probe bcn reset */ if (sme_UpdateAddIE(WLAN_HDD_GET_HAL_CTX(pAdapter), &updateIE, eUPDATE_IE_PROBE_BCN) @@ -17457,6 +17466,8 @@ void wlan_hdd_stop_sap(hdd_adapter_t *ap_adapter) wlan_hdd_decr_active_session(hdd_ctx, ap_adapter->device_mode); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, FL("SAP Stop Success")); + if (hdd_ctx->cfg_ini->apOBSSProtEnabled) + vos_runtime_pm_allow_suspend(hdd_ctx->runtime_context.obss); } else { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, FL("Can't stop ap because its not started")); @@ -17524,6 +17535,8 @@ void wlan_hdd_start_sap(hdd_adapter_t *ap_adapter) set_bit(SOFTAP_BSS_STARTED, &ap_adapter->event_flags); wlan_hdd_incr_active_session(hdd_ctx, ap_adapter->device_mode); hostapd_state->bCommit = TRUE; + if (hdd_ctx->cfg_ini->apOBSSProtEnabled) + vos_runtime_pm_prevent_suspend(hdd_ctx->runtime_context.obss); end: mutex_unlock(&hdd_ctx->sap_lock); |
