summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMing-yi Lin <mylin@qca.qualcomm.com>2013-12-28 15:49:19 -0800
committerPrakash Dhavali <pdhavali@qca.qualcomm.com>2014-01-11 15:17:09 -0800
commit11240c4ee35598f0c8665f48dbe44eae79dd7939 (patch)
treeadc4f0a964572f1a16faf23335a50ad612dcc64e
parentfd7d50da0aea63c507359e3e1e46d324c27b93ca (diff)
qcacld: HDD: RTSCTS protection host API Implmentation
RTSCTS protection STA mode API was not working. Fix it. Also implement private ioctl api for SAP mode. Change-Id: I5631d220f20a470fa4e1772ab3dceb7972d5b546 CRs-fixed: 594385
-rw-r--r--CORE/HDD/inc/qc_sap_ioctl.h2
-rw-r--r--CORE/HDD/inc/wlan_hdd_wext.h4
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c36
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c8
4 files changed, 45 insertions, 5 deletions
diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h
index 6869975f270f..fa4b9aa99658 100644
--- a/CORE/HDD/inc/qc_sap_ioctl.h
+++ b/CORE/HDD/inc/qc_sap_ioctl.h
@@ -260,6 +260,8 @@ typedef struct
#ifdef DEBUG
#define QCSAP_FW_CRASH_INJECT 39
#endif
+#define QCSAP_PARAM_SETRTSCTS 42
+#define QCSAP_PARAM_GETRTSCTS 43
#endif /* QCA_WIFI_2_0 */
enum {
diff --git a/CORE/HDD/inc/wlan_hdd_wext.h b/CORE/HDD/inc/wlan_hdd_wext.h
index 44c08fdc2d82..28a6ab9e52e6 100644
--- a/CORE/HDD/inc/wlan_hdd_wext.h
+++ b/CORE/HDD/inc/wlan_hdd_wext.h
@@ -205,7 +205,9 @@ typedef enum
#define HDD_WPS_ELEM_DEVICE_NAME 0x1011
#define HDD_WPS_ELEM_REGISTRA_CONF_METHODS 0x1053
-
+#define HDD_RTSCTS_EN_MASK 0xF
+#define HDD_RTSCTS_ENABLE 1
+#define HDD_CTS_ENABLE 2
#define WPS_OUI_TYPE "\x00\x50\xf2\x04"
#define WPS_OUI_TYPE_SIZE 4
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 9ac914c705aa..e873a9787739 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -1196,6 +1196,23 @@ static iw_softap_setparam(struct net_device *dev,
break;
}
#endif
+ 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;
+ }
#endif /* QCA_WIFI_2_0 */
default:
hddLog(LOGE, FL("Invalid setparam command %d value %d"),
@@ -1265,7 +1282,16 @@ static iw_softap_getparam(struct net_device *dev,
*value = (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->apAutoChannelSelection;
break;
}
-
+ case QCSAP_PARAM_GETRTSCTS:
+ {
+ hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
+ void *wmapvosContext = wmahddCtxt->pvosContext;
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pHostapdAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_ENABLE_RTSCTS,
+ VDEV_CMD);
+ break;
+ }
default:
hddLog(LOGE, FL("Invalid getparam command %d"), sub_cmd);
ret = -EINVAL;
@@ -3147,6 +3173,14 @@ static const struct iw_priv_args hostapd_private_args[] = {
0,
"crash_inject" },
#endif
+ { QCSAP_PARAM_SETRTSCTS,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "enablertscts" },
+ { QCSAP_PARAM_GETRTSCTS, 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_rtscts" },
+
#endif /* QCA_WIFI_2_0 */
{ QCSAP_IOCTL_GETPARAM,
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index ad9bb2a81bd8..c092193455f6 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -4619,10 +4619,12 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf
{
u_int32_t value;
- hddLog(LOG1, "WMI_VDEV_PARAM_ENABLE_RTSCTS val %d", set_value);
- if (set_value == 1)
+ hddLog(LOG1, "WMI_VDEV_PARAM_ENABLE_RTSCTS val 0x%x", set_value);
+
+ if ((set_value & HDD_RTSCTS_EN_MASK) == HDD_RTSCTS_ENABLE)
value = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->RTSThreshold;
- else if (set_value == 0)
+ else if (((set_value & HDD_RTSCTS_EN_MASK) == 0) ||
+ ((set_value & HDD_RTSCTS_EN_MASK) == HDD_CTS_ENABLE))
value = WNI_CFG_RTS_THRESHOLD_STAMAX;
else
return -EIO;