summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Hsu <ryanhsu@qca.qualcomm.com>2014-08-07 00:53:59 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-08-14 19:53:11 -0700
commit596fe189b2743a4915f897e094deb6e202b9d20e (patch)
tree6af050f5f2a04486ead2cd90406840ee663ac4c5
parent5576e700dc30e8ac44212ef10433d84d0abecbff (diff)
qcacld: hdd: to support chainmask configuration in SAP mode
Add iwpriv commands to configure the tx/rx chainmask and nss in SAP mode. Change-Id: Icf56d6370573dc684616f488478eaf3dc92ad9dd CRs-fixed: 698745
-rw-r--r--CORE/HDD/inc/qc_sap_ioctl.h5
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c119
2 files changed, 100 insertions, 24 deletions
diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h
index b6584721d3e7..17a27aa01d4b 100644
--- a/CORE/HDD/inc/qc_sap_ioctl.h
+++ b/CORE/HDD/inc/qc_sap_ioctl.h
@@ -234,7 +234,10 @@ enum {
QCSAP_PARAM_SET_CHANNEL_CHANGE,
QCASAP_SET_DFS_TARGET_CHNL,
QCASAP_SET_RADAR_CMD,
- QCSAP_GET_ACL
+ QCSAP_GET_ACL,
+ QCASAP_TX_CHAINMASK_CMD,
+ QCASAP_RX_CHAINMASK_CMD,
+ QCASAP_NSS_CMD
};
int iw_softap_get_channel_list(struct net_device *dev,
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index f607465a697c..3460f3deb294 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -2468,6 +2468,32 @@ static iw_softap_setparam(struct net_device *dev,
}
break;
}
+ case QCASAP_TX_CHAINMASK_CMD:
+ {
+ hddLog(LOG1, "QCASAP_TX_CHAINMASK_CMD val %d", set_value);
+ ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
+ (int)WMI_PDEV_PARAM_TX_CHAIN_MASK,
+ set_value, PDEV_CMD);
+ break;
+ }
+
+ case QCASAP_RX_CHAINMASK_CMD:
+ {
+ hddLog(LOG1, "QCASAP_RX_CHAINMASK_CMD val %d", set_value);
+ ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
+ (int)WMI_PDEV_PARAM_RX_CHAIN_MASK,
+ set_value, PDEV_CMD);
+ break;
+ }
+
+ case QCASAP_NSS_CMD:
+ {
+ hddLog(LOG1, "QCASAP_NSS_CMD val %d", set_value);
+ ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_NSS,
+ set_value, VDEV_CMD);
+ break;
+ }
default:
hddLog(LOGE, FL("Invalid setparam command %d value %d"),
sub_cmd, set_value);
@@ -2490,6 +2516,15 @@ static iw_softap_getparam(struct net_device *dev,
int sub_cmd = value[0];
eHalStatus status;
int ret = 0; /* success */
+ hdd_context_t *pHddCtx = NULL;
+
+ pHddCtx = WLAN_HDD_GET_CTX(pHostapdAdapter);
+ status = wlan_hdd_validate_context(pHddCtx);
+
+ if (0 != status) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD context is not valid"));
+ return status;
+ }
switch (sub_cmd)
{
@@ -2523,9 +2558,7 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_PARAM_RTSCTS:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
- void *wmapvosContext = wmahddCtxt->pvosContext;
- *value = wma_cli_get_command(wmapvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_ENABLE_RTSCTS,
VDEV_CMD);
@@ -2542,9 +2575,8 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_GTX_HT_MCS:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_HT_MCS");
- *value = wma_cli_get_command(wmahddCtxt->pvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_GTX_HT_MCS,
GTX_CMD);
@@ -2553,9 +2585,8 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_GTX_VHT_MCS:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_VHT_MCS");
- *value = wma_cli_get_command(wmahddCtxt->pvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_GTX_VHT_MCS,
GTX_CMD);
@@ -2564,9 +2595,8 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_GTX_USRCFG:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_USR_CFG");
- *value = wma_cli_get_command(wmahddCtxt->pvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_GTX_USR_CFG,
GTX_CMD);
@@ -2575,9 +2605,8 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_GTX_THRE:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_THRE");
- *value = wma_cli_get_command(wmahddCtxt->pvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_GTX_THRE,
GTX_CMD);
@@ -2586,9 +2615,8 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_GTX_MARGIN:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_MARGIN");
- *value = wma_cli_get_command(wmahddCtxt->pvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_GTX_MARGIN,
GTX_CMD);
@@ -2597,9 +2625,8 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_GTX_STEP:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_STEP");
- *value = wma_cli_get_command(wmahddCtxt->pvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_GTX_STEP,
GTX_CMD);
@@ -2608,9 +2635,8 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_GTX_MINTPC:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_MINTPC");
- *value = wma_cli_get_command(wmahddCtxt->pvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_GTX_MINTPC,
GTX_CMD);
@@ -2619,9 +2645,8 @@ static iw_softap_getparam(struct net_device *dev,
case QCSAP_GTX_BWMASK:
{
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_BW_MASK");
- *value = wma_cli_get_command(wmahddCtxt->pvosContext,
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
(int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_GTX_BW_MASK,
GTX_CMD);
@@ -2630,14 +2655,11 @@ static iw_softap_getparam(struct net_device *dev,
case QCASAP_GET_DFS_NOL:
{
-#ifndef WLAN_FEATURE_MBSSID
- hdd_context_t *wmahddCtxt = WLAN_HDD_GET_CTX(pHostapdAdapter);
-#endif
WLANSAP_Get_DfsNol(
#ifdef WLAN_FEATURE_MBSSID
WLAN_HDD_GET_SAP_CTX_PTR(pHostapdAdapter)
#else
- wmahddCtxt->pvosContext
+ pHddCtx->pvosContext
#endif
);
}
@@ -2653,6 +2675,36 @@ static iw_softap_getparam(struct net_device *dev,
break;
}
+ case QCASAP_TX_CHAINMASK_CMD:
+ {
+ hddLog(LOG1, "QCASAP_TX_CHAINMASK_CMD");
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
+ (int)pHostapdAdapter->sessionId,
+ (int)WMI_PDEV_PARAM_TX_CHAIN_MASK,
+ PDEV_CMD);
+ break;
+ }
+
+ case QCASAP_RX_CHAINMASK_CMD:
+ {
+ hddLog(LOG1, "QCASAP_RX_CHAINMASK_CMD");
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
+ (int)pHostapdAdapter->sessionId,
+ (int)WMI_PDEV_PARAM_RX_CHAIN_MASK,
+ PDEV_CMD);
+ break;
+ }
+
+ case QCASAP_NSS_CMD:
+ {
+ hddLog(LOG1, "QCASAP_NSS_CMD");
+ *value = wma_cli_get_command(pHddCtx->pvosContext,
+ (int)pHostapdAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_NSS,
+ VDEV_CMD);
+ break;
+ }
+
default:
hddLog(LOGE, FL("Invalid getparam command %d"), sub_cmd);
ret = -EINVAL;
@@ -4488,6 +4540,20 @@ static const struct iw_priv_args hostapd_private_args[] = {
0,
"setRadar" },
+ { QCASAP_TX_CHAINMASK_CMD,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "set_txchainmask" },
+
+ { QCASAP_RX_CHAINMASK_CMD,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "set_rxchainmask" },
+
+ { QCASAP_NSS_CMD,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "set_nss" },
{ QCSAP_IOCTL_GETPARAM, 0,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "getparam" },
@@ -4523,6 +4589,13 @@ static const struct iw_priv_args hostapd_private_args[] = {
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "getdfsnol" },
{ QCSAP_GET_ACL, 0,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_acl_list" },
+ { QCASAP_TX_CHAINMASK_CMD, 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_txchainmask" },
+ { QCASAP_RX_CHAINMASK_CMD, 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rxchainmask" },
+ { QCASAP_NSS_CMD, 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_nss" },
+
{ QCSAP_IOCTL_GET_STAWPAIE,
IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, 0, "get_staWPAIE" },
{ QCSAP_IOCTL_SETWPAIE,