diff options
| author | Mingcheng Zhu <mingchen@qca.qualcomm.com> | 2014-03-04 19:03:27 -0800 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-03-06 18:59:47 -0800 |
| commit | 9adeeabd00873a33140851af19ee2bc495ecbc49 (patch) | |
| tree | 40c0d9fc7021de743797d50dfaaea3d561186e32 | |
| parent | 5ed772eca744c3438d29113f7d90e004ceb4fb29 (diff) | |
wlan: enable MCAST short GI configuration
In soft_AP mode the enable_short_gi command is used to select
mcast short GI rate table. In station/IBSS mode, the shortgi
command is used to select mcast short GI rate table. Always use
short GI for 72.2 mbps MCAST.
Change-Id: I6e4602520b7b0f061d3bab1f7440718152b453ef
CRs-Fixed: 623555
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 1 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 23 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 10 |
4 files changed, 29 insertions, 6 deletions
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 2fd11b5d3f70..c763bcd41215 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -1223,6 +1223,7 @@ static iw_softap_setparam(struct net_device *dev, rateUpdate->nss = (pConfig->enable2x2 == 0) ? 0 : 1; rateUpdate->dev_mode = pHostapdAdapter->device_mode; rateUpdate->mcastDataRate24GHz = set_value; + rateUpdate->mcastDataRate24GHzTxFlag = 1; rateUpdate->mcastDataRate5GHz = set_value; rateUpdate->bcastDataRate = -1; status = sme_SendRateUpdateInd(hHal, rateUpdate); diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index c3983c7fb997..c9c633714fdc 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -2291,6 +2291,7 @@ int wlan_hdd_set_mc_rate(hdd_adapter_t *pAdapter, int targetRate) rateUpdate->nss = (pConfig->enable2x2 == 0) ? 0 : 1; rateUpdate->dev_mode = pAdapter->device_mode; rateUpdate->mcastDataRate24GHz = targetRate; + rateUpdate->mcastDataRate24GHzTxFlag = 1; rateUpdate->mcastDataRate5GHz = targetRate; rateUpdate->bcastDataRate = -1; memcpy(rateUpdate->bssid, pAdapter->macAddressCurrent.bytes, diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index b4e4212eee55..6d8dbad5459b 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -14251,22 +14251,30 @@ VOS_STATUS wma_process_rate_update_indicate(tp_wma_handle wma, vos_mem_free(pRateUpdateParams); return VOS_STATUS_E_INVAL; } - short_gi = (intr[vdev_id].rate_flags & eHAL_TX_RATE_SGI) ? TRUE : FALSE; + short_gi = intr[vdev_id].config.shortgi; + if (short_gi == 0) + short_gi = (intr[vdev_id].rate_flags & eHAL_TX_RATE_SGI) ? TRUE : FALSE; /* first check if reliable TX mcast rate is used. If not check the bcast. * Then is mcast. Mcast rate is saved in mcastDataRate24GHz */ if (pRateUpdateParams->reliableMcastDataRateTxFlag > 0) { mbpsx10_rate = pRateUpdateParams->reliableMcastDataRate; paramId = WMI_VDEV_PARAM_MCAST_DATA_RATE; + if (pRateUpdateParams->reliableMcastDataRateTxFlag & eHAL_TX_RATE_SGI) + short_gi = 1; /* upper layer specified short GI */ } else if (pRateUpdateParams->bcastDataRate > -1) { mbpsx10_rate = pRateUpdateParams->bcastDataRate; paramId = WMI_VDEV_PARAM_BCAST_DATA_RATE; } else { mbpsx10_rate = pRateUpdateParams->mcastDataRate24GHz; paramId = WMI_VDEV_PARAM_MCAST_DATA_RATE; + if (pRateUpdateParams->mcastDataRate24GHzTxFlag & eHAL_TX_RATE_SGI) + short_gi = 1; /* upper layer specified short GI */ } - WMA_LOGE("%s: dev_id = %d, dev_type = %d, dev_mode = %d, mac = %pM", + WMA_LOGE("%s: dev_id = %d, dev_type = %d, dev_mode = %d, " + "mac = %pM, config.shortgi = %d, rate_flags = 0x%x", __func__, vdev_id, intr[vdev_id].type, - pRateUpdateParams->dev_mode, pRateUpdateParams->bssid); + pRateUpdateParams->dev_mode, pRateUpdateParams->bssid, + intr[vdev_id].config.shortgi, intr[vdev_id].rate_flags); ret = wma_encode_mc_rate(short_gi, intr[vdev_id].config.chwidth, intr[vdev_id].chanmode, intr[vdev_id].mhz, mbpsx10_rate, pRateUpdateParams->nss, &rate); @@ -18404,9 +18412,12 @@ eHalStatus wma_set_htconfig(tANI_U8 vdev_id, tANI_U16 ht_capab, int value) break; case WNI_CFG_HT_CAP_INFO_SHORT_GI_20MHZ: case WNI_CFG_HT_CAP_INFO_SHORT_GI_40MHZ: - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, - WMI_VDEV_PARAM_SGI, value); - break; + WMA_LOGE("%s: ht_capab = %d, value = %d", __func__, ht_capab, value); + ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + WMI_VDEV_PARAM_SGI, value); + if (ret == 0) + wma->interfaces[vdev_id].config.shortgi = value; + break; default: WMA_LOGE("%s:INVALID HT CONFIG", __func__); } diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 74d2416a8037..1ac949c407a4 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -11145,6 +11145,7 @@ eHalStatus sme_MoveCsrToScanStateForPno (tHalHandle hHal, tANI_U8 sessionId) } #endif +#define HT20_SHORT_GI_MCS7_RATE 722 /* --------------------------------------------------------------------------- \fn sme_SendRateUpdateInd \brief API to Update rate @@ -11168,6 +11169,15 @@ eHalStatus sme_SendRateUpdateInd(tHalHandle hHal, rateUpdateParams->mcastDataRate5GHz &= ~0x70000000; #endif + if (rateUpdateParams->mcastDataRate24GHz == + HT20_SHORT_GI_MCS7_RATE) + rateUpdateParams->mcastDataRate24GHzTxFlag = + eHAL_TX_RATE_HT20 | eHAL_TX_RATE_SGI; + else if (rateUpdateParams->reliableMcastDataRate == + HT20_SHORT_GI_MCS7_RATE) + rateUpdateParams->reliableMcastDataRateTxFlag = + eHAL_TX_RATE_HT20 | eHAL_TX_RATE_SGI; + if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) { msg.type = WDA_RATE_UPDATE_IND; |
