summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMingcheng Zhu <mingchen@qca.qualcomm.com>2014-03-04 19:03:27 -0800
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-03-06 18:59:47 -0800
commit9adeeabd00873a33140851af19ee2bc495ecbc49 (patch)
tree40c0d9fc7021de743797d50dfaaea3d561186e32
parent5ed772eca744c3438d29113f7d90e004ceb4fb29 (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.c1
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c1
-rw-r--r--CORE/SERVICES/WMA/wma.c23
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c10
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;