summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSumathi Mandipati <sumathi@qti.qualcomm.com>2014-01-13 20:27:16 +0530
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-02-13 21:04:06 -0800
commit5d4f450a226ae480f29c9c778ec04fba0ab53d7b (patch)
treea3922a0e681d2c10bb473f3614b13cbf5f6ca215
parent7354e033618b2a3e09bcc7ce6bbc7654c0c635b2 (diff)
qcacld: support for Soft TRP iw commands.
In SAP mode the support for iwpriv commands set11NRates, and set11ACRates features is added. CRs-Fixed: 594430 Change-Id: I5e1674b256f97a9b0b8d81364c48df30b2cd80a3
-rw-r--r--CORE/HDD/inc/qc_sap_ioctl.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c105
2 files changed, 105 insertions, 2 deletions
diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h
index 5c2ea9372a20..190df8549620 100644
--- a/CORE/HDD/inc/qc_sap_ioctl.h
+++ b/CORE/HDD/inc/qc_sap_ioctl.h
@@ -276,6 +276,8 @@ typedef struct
#define QCASAP_SET_VHT_RATE 45
#define QCASAP_SET_SHORT_GI 46
#define QCASAP_GET_SHORT_GI 47
+#define QCSAP_SET_11N_RATE 48
+#define QCSAP_SET_VHT_RATE 49
#endif /* QCA_WIFI_2_0 */
enum {
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index e09772125427..255cc9e2d9c6 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -100,6 +100,11 @@ extern int process_wma_set_command(int sessid, int paramid,
*/
#define WE_SAP_MAX_STA_INFO 0x7FF
+#define RC_2_RATE_IDX(_rc) ((_rc) & 0x7)
+#define HT_RC_2_STREAMS(_rc) ((((_rc) & 0x78) >> 3) + 1)
+#define RC_2_RATE_IDX_11AC(_rc) ((_rc) & 0xf)
+#define HT_RC_2_STREAMS_11AC(_rc) ((((_rc) & 0x30) >> 4) + 1)
+
#define SAP_24GHZ_CH_COUNT (14)
/*---------------------------------------------------------------------------
@@ -1557,6 +1562,101 @@ static iw_softap_setparam(struct net_device *dev,
break;
}
+ case QCASAP_SET_TXRX_FWSTATS:
+ {
+ hddLog(LOG1, "WE_SET_TXRX_FWSTATS val %d", set_value);
+ ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
+ (int)WMA_VDEV_TXRX_FWSTATS_ENABLE_CMDID,
+ set_value, VDEV_CMD);
+ break;
+ }
+ case QCASAP_TXRX_FWSTATS_RESET:
+ {
+ hddLog(LOG1, "WE_TXRX_FWSTATS_RESET val %d", set_value);
+ ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
+ (int)WMA_VDEV_TXRX_FWSTATS_RESET_CMDID,
+ set_value, VDEV_CMD);
+ break;
+ }
+
+ case QCSAP_PARAM_SETRTSCTS:
+ {
+ ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_ENABLE_RTSCTS,
+ set_value, VDEV_CMD);
+ if (!ret) {
+ if (ccmCfgSetInt(hHal, WNI_CFG_RTS_THRESHOLD, (tANI_U32)value,
+ ccmCfgSetCallback, eANI_BOOLEAN_TRUE) !=
+ eHAL_STATUS_SUCCESS) {
+
+ hddLog(LOGE, "FAILED TO SET RTSCTS at SAP");
+ ret = -EIO;
+ break;
+ }
+ }
+ break;
+ }
+ case QCASAP_SET_11N_RATE:
+ {
+ u_int8_t preamble, nss, rix;
+ hddLog(LOG1, "SAP WE_SET_11N_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;
+ rix = RC_2_RATE_IDX(set_value);
+ if (set_value & 0x10) {
+ preamble = WMI_RATE_PREAMBLE_CCK;
+ if (rix != 0x3)
+ /* Enable Short preamble always for CCK except 1mbps*/
+ rix |= 0x4;
+ } else
+ preamble = WMI_RATE_PREAMBLE_OFDM;
+ }
+
+ hddLog(LOG1, "SAP 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);
+ break;
+ }
+ case QCASAP_SET_VHT_RATE:
+ {
+ u_int8_t preamble, nss, rix;
+ hddLog(LOG1, "SAP WE_SET_11AC_RATE val %d", set_value);
+
+ rix = RC_2_RATE_IDX_11AC(set_value);
+ preamble = WMI_RATE_PREAMBLE_VHT;
+ nss = HT_RC_2_STREAMS_11AC(set_value) -1;
+
+ hddLog(LOG1, "SAP 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);
+ break;
+ }
+
+ case QCASAP_SET_SHORT_GI:
+ {
+ hddLog(LOG1, "QCASAP_SET_SHORT_GI val %d", set_value);
+
+ ret = sme_UpdateHTConfig(hHal, pHostapdAdapter->sessionId,
+ WNI_CFG_HT_CAP_INFO_SHORT_GI_20MHZ, /* same as 40MHZ */
+ set_value);
+ if (ret)
+ hddLog(LOGE, "Failed to set ShortGI value ret(%d)", ret);
+ break;
+ }
+
#endif /* QCA_WIFI_2_0 */
default:
hddLog(LOGE, FL("Invalid setparam command %d value %d"),
@@ -1794,12 +1894,13 @@ static iw_softap_set_tx_power(struct net_device *dev,
"%s: Invalid SAP pointer from pvosGCtx", __func__);
return VOS_STATUS_E_FAULT;
}
-
vos_mem_copy(bssid, pHostapdAdapter->macAddressCurrent.bytes,
VOS_MAC_ADDR_SIZE);
+
set_value = value[0];
if (eHAL_STATUS_SUCCESS != sme_SetTxPower(hHal, pSapCtx->sessionId, bssid,
- pHostapdAdapter->device_mode, set_value))
+ pHostapdAdapter->device_mode,
+ set_value))
{
hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Setting tx power failed",
__func__);