diff options
| author | Srinivas Girigowda <sgirigow@qca.qualcomm.com> | 2014-09-29 15:07:52 -0700 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-09-30 13:26:51 -0700 |
| commit | 6a00d3ff76f332254a736f9b806d776ffbb79dd6 (patch) | |
| tree | 49884e95d97212b03bf74182da7bb5dab5594844 | |
| parent | 52d89f5b1f3e9cacda1f0e914c6803b40ddbbd73 (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.c | 80 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wext.c | 45 |
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); |
