diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2014-10-31 18:43:28 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-10-31 18:43:28 -0700 |
| commit | 1aa9baaefbdf188171b8e91e34b2f45e539bab3b (patch) | |
| tree | a4dd63c14893f4c70c3b4235f6e218123566e51c | |
| parent | 0ecd530bc690f5e0360854be4e3312bdd3fe783c (diff) | |
| parent | 6b58303a6a1daafd2838394d8a7218bd50b7b139 (diff) | |
Merge "Release 1.0.0.224 QCACLD WLAN Drive"
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_cfg.h | 6 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 7 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 40 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wext.c | 244 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c | 2 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/rrm/rrmApi.c | 4 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm.c | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/_ieee80211_common.h | 7 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c | 48 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 2 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 4 | ||||
| -rw-r--r-- | CORE/SVC/src/logging/wlan_logging_sock_svc.c | 8 |
13 files changed, 252 insertions, 128 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 93433fdef6de..ba660b9f73e4 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -231,21 +231,19 @@ typedef enum eHDD_DOT11_MODE_11g_ONLY, eHDD_DOT11_MODE_11n_ONLY, eHDD_DOT11_MODE_11b_ONLY, -#ifdef WLAN_FEATURE_11AC eHDD_DOT11_MODE_11ac_ONLY, eHDD_DOT11_MODE_11ac, -#endif + eHDD_DOT11_MODE_11a, }eHddDot11Mode; #define CFG_DOT11_MODE_NAME "gDot11Mode" #define CFG_DOT11_MODE_MIN eHDD_DOT11_MODE_AUTO #ifdef WLAN_FEATURE_11AC -#define CFG_DOT11_MODE_MAX eHDD_DOT11_MODE_11ac #define CFG_DOT11_MODE_DEFAULT eHDD_DOT11_MODE_11ac #else -#define CFG_DOT11_MODE_MAX eHDD_DOT11_MODE_11b_ONLY #define CFG_DOT11_MODE_DEFAULT eHDD_DOT11_MODE_11n #endif +#define CFG_DOT11_MODE_MAX eHDD_DOT11_MODE_11a #define CFG_SAP_FORCE_11AC_FOR_11N "gSapForce11ACFor11n" #define CFG_SAP_FORCE_11AC_FOR_11N_MIN ( 0 ) diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index bafd0daa5872..df738e4c77b7 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -4536,9 +4536,16 @@ eCsrPhyMode hdd_cfg_xlate_to_csr_phy_mode( eHddDot11Mode dot11Mode ) return eCSR_DOT11_MODE_11ac_ONLY; case (eHDD_DOT11_MODE_11ac): return eCSR_DOT11_MODE_11ac; +#else + /* If 11AC support is not compiled set Auto mode */ + case (eHDD_DOT11_MODE_11ac): + case (eHDD_DOT11_MODE_11ac_ONLY): + return eCSR_DOT11_MODE_AUTO; #endif case (eHDD_DOT11_MODE_AUTO): return eCSR_DOT11_MODE_AUTO; + case (eHDD_DOT11_MODE_11a): + return eCSR_DOT11_MODE_11a; } } diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 29720b170892..475fe7b8b132 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -157,7 +157,7 @@ void hdd_ch_avoid_cb(void *hdd_context,void *indi_param); #define MEMORY_DEBUG_STR "" #endif - +#define DISABLE_KRAIT_IDLE_PS_VAL 200 #ifdef IPA_UC_OFFLOAD /* If IPA UC data path is enabled, target should reserve extra tx descriptors * for IPA WDI data path. @@ -12449,6 +12449,34 @@ success: return 0; } +/* + * In BMI Phase we are only sending small chunk (256 bytes) of the FW image at + * a time, and wait for the completion interrupt to start the next transfer. + * During this phase, the KRAIT is entering IDLE/StandAlone(SA) Power Save(PS). + * The delay incurred for resuming from IDLE/SA PS is huge during driver load. + * So prevent APPS IDLE/SA PS during driver load for reducing interrupt latency. + */ + +#ifdef CONFIG_CNSS +static inline void hdd_request_pm_qos(int val) +{ + cnss_request_pm_qos(val); +} + +static inline void hdd_remove_pm_qos(void) +{ + cnss_remove_pm_qos(); +} +#else +static inline void hdd_request_pm_qos(int val) +{ +} + +static inline void hdd_remove_pm_qos(void) +{ +} +#endif + /**--------------------------------------------------------------------------- \brief hdd_driver_init() - Core Driver Init Function @@ -12476,6 +12504,13 @@ static int hdd_driver_init( void) vos_wake_lock_init(&wlan_wake_lock, "wlan"); hdd_prevent_suspend(); + /* + * The Krait is going to Idle/Stand Alone Power Save + * more aggressively which is resulting in the longer driver load time. + * The Fix is to not allow Krait to enter Idle Power Save during driver load. + */ + + hdd_request_pm_qos(DISABLE_KRAIT_IDLE_PS_VAL); #ifdef HDD_TRACE_RECORD MTRACE(hddTraceInit()); #endif @@ -12489,6 +12524,7 @@ static int hdd_driver_init( void) ret_status = epping_driver_init(con_mode, &wlan_wake_lock, WLAN_MODULE_NAME); if (ret_status < 0) { + hdd_remove_pm_qos(); hdd_allow_suspend(); vos_wake_lock_destroy(&wlan_wake_lock); } @@ -12499,6 +12535,7 @@ static int hdd_driver_init( void) ret_status = epping_driver_init(hdd_get_conparam(), &wlan_wake_lock, WLAN_MODULE_NAME); if (ret_status < 0) { + hdd_remove_pm_qos(); hdd_allow_suspend(); vos_wake_lock_destroy(&wlan_wake_lock); } @@ -12542,6 +12579,7 @@ static int hdd_driver_init( void) ret_status = 0; } + hdd_remove_pm_qos(); hdd_allow_suspend(); if (ret_status) { diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index 525a4d93eb91..bc1b94ffed1e 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -4470,6 +4470,7 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, tANI_U32 vhtchanwidth; #endif eCsrPhyMode phymode = -EIO, old_phymode; + eHddDot11Mode hdd_dot11mode = phddctx->cfg_ini->dot11Mode; eCsrBand curr_band = eCSR_BAND_ALL; old_phymode = sme_GetPhyMode(hal); @@ -4493,41 +4494,58 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, } vhtchanwidth = phddctx->cfg_ini->vhtChannelWidth; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_DEBUG, ("ch_bond24=%d " + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, ("ch_bond24=%d " "ch_bond5g=%d band_24=%d band_5g=%d VHT_ch_width=%u"), ch_bond24, ch_bond5g, band_24, band_5g, vhtchanwidth); + switch (new_phymode) { + case IEEE80211_MODE_AUTO: + sme_SetPhyMode(hal, eCSR_DOT11_MODE_AUTO); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_AUTO) == 0)) { + phymode = eCSR_DOT11_MODE_AUTO; + hdd_dot11mode = eHDD_DOT11_MODE_AUTO; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; + curr_band = eCSR_BAND_ALL; + vhtchanwidth = eHT_CHANNEL_WIDTH_80MHZ; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + break; case IEEE80211_MODE_11A: - if (band_5g) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11a); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) - phymode = eCSR_DOT11_MODE_11a; - else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11a); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { + phymode = eCSR_DOT11_MODE_11a; + hdd_dot11mode = eHDD_DOT11_MODE_11a; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + curr_band = eCSR_BAND_5G; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; } break; case IEEE80211_MODE_11B: - if (band_24) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11b); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) - phymode = eCSR_DOT11_MODE_11b; - else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11b); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) { + phymode = eCSR_DOT11_MODE_11b; + hdd_dot11mode = eHDD_DOT11_MODE_11b; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + curr_band = eCSR_BAND_24; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; } break; case IEEE80211_MODE_11G: - if (band_24) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11g); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) - phymode = eCSR_DOT11_MODE_11g; - else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11g); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) { + phymode = eCSR_DOT11_MODE_11g; + hdd_dot11mode = eHDD_DOT11_MODE_11g; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + curr_band = eCSR_BAND_24; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; } break; /* @@ -4536,69 +4554,66 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, * and channel bonding in configuration to reflect MODE_11NA/MODE_11NG */ case IEEE80211_MODE_11NA_HT20: - if (band_5g) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { - phymode = eCSR_DOT11_MODE_11n; - chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; - curr_band = eCSR_BAND_5G; - } else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { + phymode = eCSR_DOT11_MODE_11n; + hdd_dot11mode = eHDD_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + curr_band = eCSR_BAND_5G; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; } break; case IEEE80211_MODE_11NA_HT40: - if (band_5g && ch_bond5g) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { - phymode = eCSR_DOT11_MODE_11n; - chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; - curr_band = eCSR_BAND_5G; - } else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { + phymode = eCSR_DOT11_MODE_11n; + hdd_dot11mode = eHDD_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; + curr_band = eCSR_BAND_5G; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; } break; case IEEE80211_MODE_11NG_HT20: - if (band_24) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) { - phymode = eCSR_DOT11_MODE_11n; - chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; - curr_band = eCSR_BAND_24; - } else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) { + phymode = eCSR_DOT11_MODE_11n; + hdd_dot11mode = eHDD_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + curr_band = eCSR_BAND_24; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; } break; case IEEE80211_MODE_11NG_HT40: - if (band_24 && ch_bond24) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) { - phymode = eCSR_DOT11_MODE_11n; - chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; - curr_band = eCSR_BAND_24; - } else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) { + phymode = eCSR_DOT11_MODE_11n; + hdd_dot11mode = eHDD_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; + curr_band = eCSR_BAND_24; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; } break; #ifdef WLAN_FEATURE_11AC case IEEE80211_MODE_11AC_VHT20: case IEEE80211_MODE_11AC_VHT40: case IEEE80211_MODE_11AC_VHT80: - if (band_5g) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11ac); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { - phymode = eCSR_DOT11_MODE_11ac; - } else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11ac); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { + phymode = eCSR_DOT11_MODE_11ac; + hdd_dot11mode = eHDD_DOT11_MODE_11ac; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; + curr_band = eCSR_BAND_5G; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; } break; #endif @@ -4606,6 +4621,7 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, sme_SetPhyMode(hal, eCSR_DOT11_MODE_AUTO); if ((hdd_setBand(net, WLAN_HDD_UI_BAND_2_4_GHZ) == 0)) { phymode = eCSR_DOT11_MODE_AUTO; + hdd_dot11mode = eHDD_DOT11_MODE_AUTO; chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; curr_band = eCSR_BAND_24; } else { @@ -4617,14 +4633,28 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, sme_SetPhyMode(hal, eCSR_DOT11_MODE_AUTO); if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { phymode = eCSR_DOT11_MODE_AUTO; + hdd_dot11mode = eHDD_DOT11_MODE_AUTO; chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; + vhtchanwidth = eHT_CHANNEL_WIDTH_80MHZ; curr_band = eCSR_BAND_5G; } else { sme_SetPhyMode(hal, old_phymode); return -EIO; } break; - default: + case IEEE80211_MODE_11AGN: + sme_SetPhyMode(hal, eCSR_DOT11_MODE_11n); + if ((hdd_setBand(net, WLAN_HDD_UI_BAND_AUTO) == 0)) { + phymode = eCSR_DOT11_MODE_11n; + hdd_dot11mode = eHDD_DOT11_MODE_11n; + chwidth = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; + curr_band = eCSR_BAND_ALL; + } else { + sme_SetPhyMode(hal, old_phymode); + return -EIO; + } + break; + default: return -EIO; } @@ -4641,22 +4671,17 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, break; default: vhtchanwidth = phddctx->cfg_ini->vhtChannelWidth; + break; } #endif if (phymode != -EIO) { sme_GetConfigParam(hal, &smeconfig); + smeconfig.csrConfig.phyMode = phymode; +#ifdef QCA_HT_2040_COEX if (phymode == eCSR_DOT11_MODE_11n && chwidth == WNI_CFG_CHANNEL_BONDING_MODE_DISABLE) { - if (curr_band == eCSR_BAND_24) - smeconfig.csrConfig.channelBondingMode24GHz = - WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; - else - smeconfig.csrConfig.channelBondingMode5GHz = - WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; - -#ifdef QCA_HT_2040_COEX smeconfig.csrConfig.obssEnabled = eANI_BOOLEAN_FALSE; halStatus = sme_SetHT2040Mode(hal, pAdapter->sessionId, eHT_CHAN_HT20, eANI_BOOLEAN_FALSE); @@ -4664,17 +4689,8 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, hddLog(LOGE, FL("Failed to disable OBSS")); return -EIO; } -#endif } else if (phymode == eCSR_DOT11_MODE_11n && chwidth == WNI_CFG_CHANNEL_BONDING_MODE_ENABLE) { - if (curr_band == eCSR_BAND_24) - smeconfig.csrConfig.channelBondingMode24GHz = - phddctx->cfg_ini->nChannelBondingMode24GHz; - else - smeconfig.csrConfig.channelBondingMode5GHz = - phddctx->cfg_ini->nChannelBondingMode5GHz; - -#ifdef QCA_HT_2040_COEX if (phddctx->cfg_ini->ht2040CoexEnabled) { smeconfig.csrConfig.obssEnabled = eANI_BOOLEAN_TRUE; halStatus = sme_SetHT2040Mode(hal, pAdapter->sessionId, @@ -4684,8 +4700,24 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, return -EIO; } } + } #endif + smeconfig.csrConfig.eBand = curr_band; + smeconfig.csrConfig.bandCapability = curr_band; + if (curr_band == eCSR_BAND_24) + smeconfig.csrConfig.Is11hSupportEnabled = 0; + else + smeconfig.csrConfig.Is11hSupportEnabled = + phddctx->cfg_ini->Is11hSupportEnabled; + if (curr_band == eCSR_BAND_24) + smeconfig.csrConfig.channelBondingMode24GHz = chwidth; + else if (curr_band == eCSR_BAND_24) + smeconfig.csrConfig.channelBondingMode5GHz = chwidth; + else { + smeconfig.csrConfig.channelBondingMode24GHz = chwidth; + smeconfig.csrConfig.channelBondingMode5GHz = chwidth; } + #ifdef WLAN_FEATURE_11AC smeconfig.csrConfig.nVhtChannelWidth = vhtchanwidth; if (0 != ccmCfgSetInt(phddctx->hHal, @@ -4696,11 +4728,23 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, __func__); } #endif - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "SET PHY MODE=%d", - smeconfig.csrConfig.phyMode); sme_UpdateConfig(hal, &smeconfig); + phddctx->cfg_ini->dot11Mode = hdd_dot11mode; + phddctx->cfg_ini->nBandCapability = curr_band; + phddctx->cfg_ini->nChannelBondingMode24GHz = + smeconfig.csrConfig.channelBondingMode24GHz; + phddctx->cfg_ini->nChannelBondingMode5GHz = + smeconfig.csrConfig.channelBondingMode5GHz; + phddctx->cfg_ini->vhtChannelWidth = vhtchanwidth; + if (hdd_update_config_dat(phddctx) == VOS_FALSE) { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: could not update config_dat", __func__ ); + return -EIO; + } + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, ("New_Phymode= %d " + "ch_bonding=%d band=%d VHT_ch_width=%u"), + phymode, chwidth, curr_band, vhtchanwidth); + } return 0; @@ -9378,16 +9422,6 @@ int hdd_setBand(struct net_device *dev, u8 ui_band) return -EINVAL; } - if ( (band == eCSR_BAND_24 && pHddCtx->cfg_ini->nBandCapability==2) || - (band == eCSR_BAND_5G && pHddCtx->cfg_ini->nBandCapability==1) || - (band == eCSR_BAND_ALL && pHddCtx->cfg_ini->nBandCapability!=0)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: band value %u violate INI settings %u", __func__, - band, pHddCtx->cfg_ini->nBandCapability); - return -EIO; - } - if (eHAL_STATUS_SUCCESS != sme_GetFreqBand(hHal, &currBand)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 25f0fbdc8283..5edd741c2f79 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 0 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 223 +#define QWLAN_VERSION_BUILD 224 -#define QWLAN_VERSIONSTR "1.0.0.223" +#define QWLAN_VERSIONSTR "1.0.0.224" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c index 978271ed4178..729bce4b1cd7 100644 --- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c @@ -471,7 +471,7 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, if((psessionEntry->limSystemRole == eLIM_AP_ROLE ) && (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11G_ONLY) && - ((!pAssocReq->extendedRatesPresent ) || (pAssocReq->HTCaps.present))) + (pAssocReq->HTCaps.present)) { limLog(pMac, LOGE, FL("SOFTAP was in 11G only mode, rejecting legacy " "STA : "MAC_ADDRESS_STR),MAC_ADDR_ARRAY(pHdr->sa)); diff --git a/CORE/MAC/src/pe/rrm/rrmApi.c b/CORE/MAC/src/pe/rrm/rrmApi.c index 045aa17f2099..f37cf3a8eb96 100644 --- a/CORE/MAC/src/pe/rrm/rrmApi.c +++ b/CORE/MAC/src/pe/rrm/rrmApi.c @@ -672,7 +672,7 @@ rrmFillBeaconIes( tpAniSirGlobal pMac, tpSirBssDescription pBssDesc ) { tANI_U8 len, *pBcnIes, count = 0, i; - tANI_S8 BcnNumIes; + tANI_U8 BcnNumIes; if( (pIes == NULL) || (pNumIes == NULL) || (pBssDesc == NULL) ) { @@ -684,7 +684,7 @@ rrmFillBeaconIes( tpAniSirGlobal pMac, numEids = (eids == NULL) ? 0 : numEids; pBcnIes = (tANI_U8*) &pBssDesc->ieFields[0]; - BcnNumIes = (tANI_S8)GET_IE_LEN_IN_BSS( pBssDesc->length ); + BcnNumIes = (tANI_U8)GET_IE_LEN_IN_BSS( pBssDesc->length ); *pNumIes = 0; diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index 096ac8f2ccee..dff89611436b 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -3772,7 +3772,9 @@ sapconvertToCsrProfile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType, t //set the phyMode to accept anything //Best means everything because it covers all the things we support - profile->phyMode = pconfig_params->SapHw_mode; /*eCSR_DOT11_MODE_BEST*/ + /*eCSR_DOT11_MODE_BEST*/ + profile->phyMode = + sapConvertSapPhyModeToCsrPhyMode(pconfig_params->SapHw_mode); //Configure beaconInterval profile->beaconInterval = (tANI_U16)pconfig_params->beacon_int; diff --git a/CORE/SERVICES/COMMON/_ieee80211_common.h b/CORE/SERVICES/COMMON/_ieee80211_common.h index c52fb22517cd..f4a92944d878 100644 --- a/CORE/SERVICES/COMMON/_ieee80211_common.h +++ b/CORE/SERVICES/COMMON/_ieee80211_common.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -59,8 +59,9 @@ enum ieee80211_phymode { IEEE80211_MODE_11AC_VHT40MINUS = 17, /* 5Ghz VHT40 (Ext ch -1) */ IEEE80211_MODE_11AC_VHT40 = 18, /* 5Ghz, VHT40 */ IEEE80211_MODE_11AC_VHT80 = 19, /* 5Ghz, VHT80 */ - IEEE80211_MODE_2G_AUTO = 20, /* 2G 11 b/g/n autoselect */ - IEEE80211_MODE_5G_AUTO = 21, /* 5G 11 a/n/ac autoselect */ + IEEE80211_MODE_2G_AUTO = 20, /* 2G 11 b/g/n autoselect */ + IEEE80211_MODE_5G_AUTO = 21, /* 5G 11 a/n/ac autoselect */ + IEEE80211_MODE_11AGN = 22, /* Support 11N in both 2G and 5G */ }; #define IEEE80211_MODE_MAX (IEEE80211_MODE_11AC_VHT80 + 1) diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c index aa96189976fc..8ecc72882d54 100644 --- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c +++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c @@ -35,6 +35,8 @@ #include <linux/kthread.h> #include "if_ath_sdio.h" #include "regtable.h" +#include "vos_api.h" +#include "wma_api.h" /* by default setup a bounce buffer for the data packets, if the underlying host controller driver does not use DMA you may be able to skip this step and save the memory allocation and transfer time */ @@ -1802,6 +1804,24 @@ static int hifDeviceSuspend(struct device *dev) #endif HIF_DEVICE *device = getHifDevice(func); + void *vos = vos_get_global_context(VOS_MODULE_ID_HIF, NULL); + v_VOID_t *temp_module; + + if (vos_is_logp_in_progress(VOS_MODULE_ID_HIF, NULL)) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("%s: LOPG in progress\n", __func__)); + return (-1); + } + + temp_module = vos_get_context(VOS_MODULE_ID_WDA, vos); + if (!temp_module) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("%s: WDA module is NULL\n", __func__)); + return (-1); + } + + if (wma_check_scan_in_progress(temp_module)) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("%s: Scan in progress. Aborting suspend\n", __func__)); + return (-1); + } #if defined(MMC_PM_KEEP_POWER) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) if (device && device->func) { @@ -1859,7 +1879,13 @@ static int hifDeviceSuspend(struct device *dev) return ret; } - /* TODO:WOW support */ + if (wma_is_wow_mode_selected(temp_module)) { + if (wma_enable_wow_in_fw(temp_module)) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("wow mode failure\n")); + return -1; + } + } + if (pm_flag & MMC_PM_WAKE_SDIO_IRQ){ AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("hifDeviceSuspend: wow enter\n")); config = HIF_DEVICE_POWER_DOWN; @@ -1936,6 +1962,17 @@ static int hifDeviceResume(struct device *dev) A_STATUS status = A_OK; HIF_DEVICE_POWER_CHANGE_TYPE config; HIF_DEVICE *device; + void *vos = vos_get_global_context(VOS_MODULE_ID_HIF, NULL); + v_VOID_t * temp_module; + + if (vos == NULL) + return 0; + + temp_module = vos_get_context(VOS_MODULE_ID_WDA, vos); + if (!temp_module) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("%s: WDA module is NULL\n", __func__)); + return (-1); + } device = getHifDevice(func); @@ -1970,6 +2007,15 @@ static int hifDeviceResume(struct device *dev) status = osdrvCallbacks.deviceResumeHandler(device->claimedContext); device->is_suspend = FALSE; } + + /* No need to send WMI_PDEV_RESUME_CMDID to FW if WOW is enabled */ + if (!wma_is_wow_mode_selected(temp_module)) { + wma_resume_target(temp_module); + } else if (wma_disable_wow_in_fw(temp_module)) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("%s: disable wow in fw failed\n", __func__)); + status = (-1); + } + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("AR6000: -hifDeviceResume\n")); device->DeviceState = HIF_DEVICE_STATE_ON; diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index f82d3344e63f..881471e674cf 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -7313,8 +7313,10 @@ error1: __func__); return VOS_STATUS_E_NOMEM; } + memset(scan_event, 0x00, sizeof(*scan_event)); scan_event->event = WMI_SCAN_EVENT_COMPLETED; scan_event->reasonCode = eSIR_SME_SCAN_FAILED; + scan_event->p2pScanType = scan_req->p2pScanType; scan_event->sessionId = scan_req->sessionId; wma_send_msg(wma_handle, WDA_RX_SCAN_EVENT, (void *) scan_event, 0) ; } diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 38160beb80a4..fd79024ebac1 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -11305,7 +11305,6 @@ static eCsrCfgDot11Mode csrRoamGetPhyModeBandForBss( tpAniSirGlobal pMac, tCsrRo eCsrCfgDot11Mode cfgDot11Mode = csrGetCfgDot11ModeFromCsrPhyMode(pProfile, phyModeIn, pMac->roam.configParam.ProprietaryRatesEnabled); eCsrBand eBand; - //If the global setting for dot11Mode is set to auto/abg, we overwrite the setting in the profile. if( ((!CSR_IS_INFRA_AP(pProfile )&& !CSR_IS_WDS(pProfile )) && ((eCSR_CFG_DOT11_MODE_AUTO == pMac->roam.configParam.uCfgDot11Mode) || @@ -12064,7 +12063,8 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf case eSIR_11G_NW_TYPE: /* For P2P Client and P2P GO, disable 11b rates */ if( (pProfile->csrPersona == VOS_P2P_CLIENT_MODE) || - (pProfile->csrPersona == VOS_P2P_GO_MODE) + (pProfile->csrPersona == VOS_P2P_GO_MODE) || + (eCSR_CFG_DOT11_MODE_11G_ONLY == cfgDot11Mode) ) { pParam->operationalRateSet.numRates = 8; diff --git a/CORE/SVC/src/logging/wlan_logging_sock_svc.c b/CORE/SVC/src/logging/wlan_logging_sock_svc.c index 8da04aa8b52b..bdfb28fb2275 100644 --- a/CORE/SVC/src/logging/wlan_logging_sock_svc.c +++ b/CORE/SVC/src/logging/wlan_logging_sock_svc.c @@ -369,11 +369,7 @@ int wlan_log_to_user(VOS_TRACE_LEVEL log_level, char *to_be_sent, int length) * apps which are waiting on this message can * register for the logs. */ - if ( (gapp_pid != INVALID_PID)) { - wake_up_interruptible(&gwlan_logging.wait_queue); - } else { - wlan_logging_srv_nl_ready_indication(); - } + wake_up_interruptible(&gwlan_logging.wait_queue); } if ((gapp_pid != INVALID_PID) @@ -508,7 +504,7 @@ static int wlan_logging_thread(void *Arg) } if (INVALID_PID == gapp_pid) { - pr_err("%s: Invalid PID\n", __func__); + wlan_logging_srv_nl_ready_indication(); continue; } |
