diff options
| author | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-02-10 16:37:52 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-02-10 16:40:01 +0530 |
| commit | 8d5230218bc4e84fc49f190a964f6ebb17475abd (patch) | |
| tree | 75f3efc0aa068dc517721624852b148c867c9188 | |
| parent | 3398e12008e76afaccef719b174da35a49f0bb72 (diff) | |
| parent | 2a09f5ce60d021da6723063c7aef598be851e554 (diff) | |
Release 4.0.10.31 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master'
* origin/caf/caf-wlan/master:
Cafstaging Release 4.0.10.31
qca-cld:hdd: Fix setting phy mode in ACS offloading
qcacld:IPA uC: Direct mapping vdev to interface ID
qcacld:IPA UC: Fix to send multiple ipa_offload_enable_disable in STA mode
qcacld:IPA UC: Fix uC STAT OP callback prints wrong uC FW TX/RX stats
Change-Id: I085f2f4f10f44bf4fe18104ce45e89fd6a796d4f
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 56 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_ipa.c | 41 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/SAP/src/sapChSelect.c | 2 |
4 files changed, 78 insertions, 25 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index db0e29e9efbe..0c79cb05fd81 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -4679,18 +4679,31 @@ static int wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, const void *data, int data_len) { - hdd_adapter_t *adapter; + struct net_device *ndev = wdev->netdev; + hdd_adapter_t *adapter = WLAN_HDD_GET_PRIV_PTR(ndev); hdd_context_t *hdd_ctx = wiphy_priv(wiphy); tsap_Config_t *sap_config; tpWLAN_SAPEventCB acs_event_callback; - struct net_device *ndev = wdev->netdev; struct sk_buff *temp_skbuff; int status; struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_ACS_MAX + 1]; u8 hw_mode; bool ht_enabled, ht40_enabled; + tHalHandle hHal; + tpAniSirGlobal pMac; +#ifdef WLAN_FEATURE_11AC + v_BOOL_t sap_force11AC_for11n = +#ifdef WLAN_FEATURE_MBSSID + adapter->sap_dyn_ini_cfg.apForce11ACFor11n; +#else + hdd_ctx->cfg_ini->apForce11ACFor11n; +#endif +#endif + + hHal = WLAN_HDD_GET_HAL_CTX(adapter); + + pMac = PMAC_STRUCT(hHal); - adapter = WLAN_HDD_GET_PRIV_PTR(ndev); #ifndef WLAN_FEATURE_MBSSID hdd_config_t *hdd_config = (WLAN_HDD_GET_CTX(adapter))->cfg_ini; #endif @@ -4780,6 +4793,11 @@ static int wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, #else band_to_hw_mode(hdd_config->apOperatingBand)) { #endif + + tSmeConfigParams smeConfig; + vos_mem_zero(&smeConfig, sizeof(smeConfig)); + sme_GetConfigParam(hdd_ctx->hHal, &smeConfig); + hddLog(LOGW, FL("Conflict band setting between hostapd and driver!!")); switch (hw_mode) { @@ -4799,6 +4817,11 @@ static int wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, hdd_config->apEndChannelNum = rfChannels[RF_CHAN_14].channelNum; #endif + if (hw_mode == QCA_ACS_MODE_IEEE80211G) + smeConfig.csrConfig.phyMode = eCSR_DOT11_MODE_11g; + else + smeConfig.csrConfig.phyMode = eCSR_DOT11_MODE_11b; + break; case QCA_ACS_MODE_IEEE80211A: #ifdef WLAN_FEATURE_MBSSID @@ -4816,12 +4839,15 @@ static int wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, hdd_config->sap_dyn_ini_cfg.apEndChannelNum = rfChannels[RF_CHAN_165].channelNum; #endif + smeConfig.csrConfig.phyMode = eCSR_DOT11_MODE_11a; break; default: hddLog(LOGE, FL("Unsupported hw_mode!")); goto out; } + + sme_UpdateConfig(hdd_ctx->hHal, &smeConfig); } } @@ -4839,9 +4865,33 @@ static int wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, default: break; } + + smeConfig.csrConfig.phyMode = eCSR_DOT11_MODE_11n; + +#ifdef WLAN_FEATURE_11AC + /* Overwrite the hostapd setting for HW mode only for 11ac. + * This is valid only if mode is set to 11n in hostapd and + * either AUTO or 11ac in .ini .i*/ + if(sap_force11AC_for11n && + ((hdd_ctx->cfg_ini->dot11Mode == eHDD_DOT11_MODE_AUTO) || + (hdd_ctx->cfg_ini->dot11Mode == eHDD_DOT11_MODE_11ac) || + (hdd_ctx->cfg_ini->dot11Mode == eHDD_DOT11_MODE_11ac_ONLY))) { + if (hdd_ctx->cfg_ini->dot11Mode == eHDD_DOT11_MODE_11ac_ONLY) + smeConfig.csrConfig.phyMode = eCSR_DOT11_MODE_11ac_ONLY; + else + smeConfig.csrConfig.phyMode = eCSR_DOT11_MODE_11ac; + + /* for 2.4G */ + if ((hw_mode == QCA_ACS_MODE_IEEE80211G) && + !hdd_ctx->cfg_ini->enableVhtFor24GHzBand) + smeConfig.csrConfig.phyMode = eCSR_DOT11_MODE_11n; + } +#endif sme_UpdateConfig(hdd_ctx->hHal, &smeConfig); + hddLog(LOG1, FL("phyMode is %d"), smeConfig.csrConfig.phyMode); } + status = wlan_hdd_config_acs(hdd_ctx, adapter); if (status) { hddLog(LOGE, FL("ACS config failed")); diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index 640c368af776..89f0e3f8104d 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -371,6 +371,7 @@ struct uc_op_work_struct { struct work_struct work; struct op_msg_type *msg; }; +static uint8_t vdev_to_iface[CSR_ROAM_SESSION_MAX]; #endif /* IPA_UC_OFFLOAD */ struct hdd_ipa_priv { @@ -1082,7 +1083,7 @@ static void hdd_ipa_uc_op_cb(struct op_msg_type *op_msg, void *usr_ctxt) /* STATs from FW */ uc_fw_stat = (struct ipa_uc_fw_stats *) - (op_msg + sizeof(struct op_msg_type)); + ((v_U8_t *)op_msg + sizeof(struct op_msg_type)); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "==== IPA_UC WLAN_FW TX ====\n" "COMP RING BASE: 0x%x\n" @@ -1206,7 +1207,7 @@ static void hdd_ipa_uc_op_cb(struct op_msg_type *op_msg, void *usr_ctxt) (HDD_IPA_UC_STAT_REASON_BW_CAL == hdd_ipa->stat_req_reason)) { /* STATs from FW */ uc_fw_stat = (struct ipa_uc_fw_stats *) - (op_msg + sizeof(struct op_msg_type)); + ((v_U8_t *)op_msg + sizeof(struct op_msg_type)); vos_lock_acquire(&hdd_ipa->event_lock); hdd_ipa->ipa_tx_packets_diff = uc_fw_stat->tx_pkts_completed - hdd_ipa->ipa_p_tx_packets; @@ -1283,21 +1284,6 @@ end: adf_os_mem_free(op_msg); } -static uint8_t hdd_ipa_uc_get_iface_id(struct hdd_ipa_priv *hdd_ipa, - uint8_t session_id) -{ - uint8_t i; - - /* This revisit needed for performance */ - for (i = 0; i < HDD_IPA_MAX_IFACE; i++) { - if ((hdd_ipa->iface_context[i].adapter != NULL) && - (hdd_ipa->iface_context[i].adapter->sessionId == session_id)) { - break; - } - } - return i; -} - static VOS_STATUS hdd_ipa_uc_ol_init(hdd_context_t *hdd_ctx) { struct ipa_wdi_in_params pipe_in; @@ -2189,7 +2175,7 @@ static void hdd_ipa_w2i_cb(void *priv, enum ipa_dp_evt_type evt, #ifdef IPA_UC_OFFLOAD if (hdd_ipa_uc_is_enabled(hdd_ipa)) { session_id = (uint8_t)skb->cb[0]; - iface_id = hdd_ipa_uc_get_iface_id(hdd_ipa, session_id); + iface_id = vdev_to_iface[session_id]; HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO_HIGH, "IPA_RECEIVE: session_id=%u, iface_id=%u", session_id, iface_id); @@ -3114,7 +3100,7 @@ static void hdd_ipa_uc_offload_enable_disable(hdd_adapter_t *adapter, * layer as SAP updates and IPA doesn't have to do anything for these * updates so ignoring! */ - if (WLAN_HDD_SOFTAP == adapter->device_mode && adapter->ipa_context) + if (adapter->ipa_context) return; vos_mem_zero(&ipa_offload_enable_disable, @@ -3232,6 +3218,13 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, ret = hdd_ipa_setup_iface(hdd_ipa, adapter, sta_id); if (ret) goto end; + +#ifdef IPA_UC_OFFLOAD + vdev_to_iface[adapter->sessionId] = + ((struct hdd_ipa_iface_context *) + (adapter->ipa_context))->iface_id; +#endif + break; case WLAN_AP_CONNECT: @@ -3241,9 +3234,17 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, SIR_AP_RX_DATA_OFFLOAD, 1); } #endif + ret = hdd_ipa_setup_iface(hdd_ipa, adapter, sta_id); if (ret) goto end; + +#ifdef IPA_UC_OFFLOAD + vdev_to_iface[adapter->sessionId] = + ((struct hdd_ipa_iface_context *) + (adapter->ipa_context))->iface_id; +#endif + break; case WLAN_STA_DISCONNECT: @@ -3265,6 +3266,7 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, if (hdd_ipa_uc_sta_is_enabled(hdd_ipa)) { hdd_ipa_uc_offload_enable_disable(adapter, SIR_STA_RX_DATA_OFFLOAD, 0); + vdev_to_iface[adapter->sessionId] = HDD_IPA_MAX_IFACE; } #endif break; @@ -3276,6 +3278,7 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, if (hdd_ipa_uc_is_enabled(hdd_ipa)) { hdd_ipa_uc_offload_enable_disable(adapter, SIR_AP_RX_DATA_OFFLOAD, 0); + vdev_to_iface[adapter->sessionId] = HDD_IPA_MAX_IFACE; } #endif break; diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 5a4f3813f8b1..c59d04026b25 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 30 +#define QWLAN_VERSION_BUILD 31 -#define QWLAN_VERSIONSTR "4.0.10.30" +#define QWLAN_VERSIONSTR "4.0.10.31" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c index faf14a323159..c3e3f1792275 100644 --- a/CORE/SAP/src/sapChSelect.c +++ b/CORE/SAP/src/sapChSelect.c @@ -2201,7 +2201,7 @@ void sapSortChlWeightHT80(tSapChSelSpectInfo *pSpectInfoParams) { /* some channels does not exist in pSectInfo array, skip this channel and those in the same HT80 width*/ - pSpectInfo[j].weight = ACS_WEIGHT_MAX; + pSpectInfo[j].weight = ACS_WEIGHT_MAX * 4; if ((pSpectInfo[j].chNum +4) == pSpectInfo[j+1].chNum) pSpectInfo[j+1].weight = ACS_WEIGHT_MAX * 4; if ((pSpectInfo[j].chNum +8) == pSpectInfo[j+2].chNum) |
