summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Girigowda <sgirigow@qca.qualcomm.com>2014-09-29 15:07:52 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-09-30 13:26:51 -0700
commit6a00d3ff76f332254a736f9b806d776ffbb79dd6 (patch)
tree49884e95d97212b03bf74182da7bb5dab5594844
parent52d89f5b1f3e9cacda1f0e914c6803b40ddbbd73 (diff)
qcacld: Support to enable RA auto rate (0xff)
Firmware would expect the set_value to be passed as 0xff in order to switch to auto-rate. This change is to treat 0xff as special value and directly send down this value to firmware. Change-Id: I027ff8e2178b0e5a75ce164293f3edfe672faabc CRs-Fixed: 731914
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c80
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c45
2 files changed, 66 insertions, 59 deletions
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 68323ea64664..a4c7030292e9 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -2408,43 +2408,45 @@ static iw_softap_setparam(struct net_device *dev,
hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d", set_value);
- rix = RC_2_RATE_IDX(set_value);
- if (set_value & 0x80) {
- if (pConfig->SapHw_mode == eSAP_DOT11_MODE_11b ||
- pConfig->SapHw_mode == eSAP_DOT11_MODE_11b_ONLY ||
- pConfig->SapHw_mode == eSAP_DOT11_MODE_11g ||
- pConfig->SapHw_mode == eSAP_DOT11_MODE_11g_ONLY ||
- pConfig->SapHw_mode == eSAP_DOT11_MODE_abg ||
- pConfig->SapHw_mode == eSAP_DOT11_MODE_11a) {
- hddLog(VOS_TRACE_LEVEL_ERROR, "Not valid mode for HT");
- ret = -EIO;
- break;
+ if (set_value != 0xff) {
+ rix = RC_2_RATE_IDX(set_value);
+ if (set_value & 0x80) {
+ if (pConfig->SapHw_mode == eSAP_DOT11_MODE_11b ||
+ pConfig->SapHw_mode == eSAP_DOT11_MODE_11b_ONLY ||
+ pConfig->SapHw_mode == eSAP_DOT11_MODE_11g ||
+ pConfig->SapHw_mode == eSAP_DOT11_MODE_11g_ONLY ||
+ pConfig->SapHw_mode == eSAP_DOT11_MODE_abg ||
+ pConfig->SapHw_mode == eSAP_DOT11_MODE_11a) {
+ hddLog(LOGE, "Not valid mode for HT");
+ ret = -EIO;
+ break;
+ }
+ preamble = WMI_RATE_PREAMBLE_HT;
+ nss = HT_RC_2_STREAMS(set_value) - 1;
+ } else if (set_value & 0x10) {
+ if (pConfig->SapHw_mode == eSAP_DOT11_MODE_11a) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, "Not valid for cck");
+ ret = -EIO;
+ break;
+ }
+ preamble = WMI_RATE_PREAMBLE_CCK;
+ /* Enable Short preamble always for CCK except 1mbps */
+ if (rix != 0x3)
+ rix |= 0x4;
+ } else {
+ if (pConfig->SapHw_mode == eSAP_DOT11_MODE_11b ||
+ pConfig->SapHw_mode == eSAP_DOT11_MODE_11b_ONLY) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, "Not valid for OFDM");
+ ret = -EIO;
+ break;
+ }
+ preamble = WMI_RATE_PREAMBLE_OFDM;
}
- preamble = WMI_RATE_PREAMBLE_HT;
- nss = HT_RC_2_STREAMS(set_value) - 1;
- } else if (set_value & 0x10) {
- if (pConfig->SapHw_mode == eSAP_DOT11_MODE_11a) {
- hddLog(VOS_TRACE_LEVEL_ERROR, "Not valid for cck");
- ret = -EIO;
- break;
- }
- preamble = WMI_RATE_PREAMBLE_CCK;
- /* Enable Short preamble always for CCK except 1mbps */
- if (rix != 0x3)
- rix |= 0x4;
- } else {
- if (pConfig->SapHw_mode == eSAP_DOT11_MODE_11b ||
- pConfig->SapHw_mode == eSAP_DOT11_MODE_11b_ONLY) {
- hddLog(VOS_TRACE_LEVEL_ERROR, "Not valid for OFDM");
- ret = -EIO;
- break;
- }
- preamble = WMI_RATE_PREAMBLE_OFDM;
+
+ set_value = (preamble << 6) | (nss << 4) | rix;
}
hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d rix %d "
"preamble %x nss %d", set_value, rix, preamble, nss);
-
- set_value = (preamble << 6) | (nss << 4) | rix;
ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_FIXED_RATE,
set_value, VDEV_CMD);
@@ -2453,7 +2455,7 @@ static iw_softap_setparam(struct net_device *dev,
case QCASAP_SET_VHT_RATE:
{
- u_int8_t preamble, nss, rix;
+ u_int8_t preamble = 0, nss = 0, rix = 0;
tsap_Config_t *pConfig =
&pHostapdAdapter->sessionCtx.ap.sapConfig;
@@ -2466,14 +2468,16 @@ static iw_softap_setparam(struct net_device *dev,
break;
}
- rix = RC_2_RATE_IDX_11AC(set_value);
- preamble = WMI_RATE_PREAMBLE_VHT;
- nss = HT_RC_2_STREAMS_11AC(set_value) - 1;
+ if (set_value != 0xff) {
+ rix = RC_2_RATE_IDX_11AC(set_value);
+ preamble = WMI_RATE_PREAMBLE_VHT;
+ nss = HT_RC_2_STREAMS_11AC(set_value) - 1;
+ set_value = (preamble << 6) | (nss << 4) | rix;
+ }
hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d rix %d "
"preamble %x nss %d", set_value, rix, preamble, nss);
- set_value = (preamble << 6) | (nss << 4) | rix;
ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_FIXED_RATE,
set_value, VDEV_CMD);
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 357637d9ff79..20cf50e1e174 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -5384,28 +5384,30 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf
case WE_SET_11N_RATE:
{
- u_int8_t preamble, nss, rix;
+ u_int8_t preamble = 0, nss = 0, rix = 0;
hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d", set_value);
- rix = RC_2_RATE_IDX(set_value);
- if (set_value & 0x80) {
- preamble = WMI_RATE_PREAMBLE_HT;
- nss = HT_RC_2_STREAMS(set_value) -1;
- } else {
- nss = 0;
+ if (set_value != 0xff) {
rix = RC_2_RATE_IDX(set_value);
- if (set_value & 0x10) {
- preamble = WMI_RATE_PREAMBLE_CCK;
- if(rix != 0x3)
- rix |= 0x4; /* Enable Short preamble always for CCK except 1mbps*/
- } else
- preamble = WMI_RATE_PREAMBLE_OFDM;
+ if (set_value & 0x80) {
+ preamble = WMI_RATE_PREAMBLE_HT;
+ nss = HT_RC_2_STREAMS(set_value) -1;
+ } else {
+ nss = 0;
+ rix = RC_2_RATE_IDX(set_value);
+ if (set_value & 0x10) {
+ preamble = WMI_RATE_PREAMBLE_CCK;
+ /* Enable Short preamble always for CCK except 1mbps */
+ if(rix != 0x3)
+ rix |= 0x4;
+ } else
+ preamble = WMI_RATE_PREAMBLE_OFDM;
+ }
+ set_value = (preamble << 6) | (nss << 4) | rix;
}
-
hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d rix %d preamble %x\
nss %d", set_value, rix, preamble, nss);
- set_value = (preamble << 6) | (nss << 4) | rix;
ret = process_wma_set_command((int)pAdapter->sessionId,
(int)WMI_VDEV_PARAM_FIXED_RATE,
set_value, VDEV_CMD);
@@ -5414,16 +5416,17 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf
case WE_SET_VHT_RATE:
{
- u_int8_t preamble, nss, rix;
+ u_int8_t preamble = 0, nss = 0, rix = 0;
- rix = RC_2_RATE_IDX_11AC(set_value);
- preamble = WMI_RATE_PREAMBLE_VHT;
- nss = HT_RC_2_STREAMS_11AC(set_value) -1;
+ if (set_value != 0xff) {
+ rix = RC_2_RATE_IDX_11AC(set_value);
+ preamble = WMI_RATE_PREAMBLE_VHT;
+ nss = HT_RC_2_STREAMS_11AC(set_value) -1;
+ set_value = (preamble << 6) | (nss << 4) | rix;
+ }
hddLog(LOG1, "WMI_VDEV_PARAM_FIXED_RATE val %d rix %d preamble %x\
nss %d", set_value, rix, preamble, nss);
-
- set_value = (preamble << 6) | (nss << 4) | rix;
ret = process_wma_set_command((int)pAdapter->sessionId,
(int)WMI_VDEV_PARAM_FIXED_RATE,
set_value, VDEV_CMD);