diff options
| author | Ryan Hsu <ryanhsu@qca.qualcomm.com> | 2014-08-07 00:53:59 -0700 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-08-14 19:53:11 -0700 |
| commit | 596fe189b2743a4915f897e094deb6e202b9d20e (patch) | |
| tree | 6af050f5f2a04486ead2cd90406840ee663ac4c5 | |
| parent | 5576e700dc30e8ac44212ef10433d84d0abecbff (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.h | 5 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 119 |
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, |
