From e5f28f791dbf0cf49ac62e5c461cfa0d070f788a Mon Sep 17 00:00:00 2001 From: Frank Liu Date: Fri, 18 Nov 2016 13:43:14 +0800 Subject: qcacld-2.0: Support for configure wlan rts sifs,ampdu count Add support for host enable/disable rts sifs bursting, and set default tx mpdu aggregation count. CRs-Fixed: 1089478 Change-Id: Ieb63621f217ccd1a50b925ea4dda05fecad01387 --- CORE/HDD/inc/qc_sap_ioctl.h | 2 ++ CORE/HDD/inc/wlan_hdd_cfg.h | 12 ++++++++++++ CORE/HDD/src/wlan_hdd_cfg.c | 14 ++++++++++++++ CORE/HDD/src/wlan_hdd_hostapd.c | 24 ++++++++++++++++++++++++ CORE/HDD/src/wlan_hdd_main.c | 13 +++++++++++++ 5 files changed, 65 insertions(+) diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h index 1e52ac926099..9db581a099aa 100644 --- a/CORE/HDD/inc/qc_sap_ioctl.h +++ b/CORE/HDD/inc/qc_sap_ioctl.h @@ -268,6 +268,8 @@ enum { QCASAP_PARAM_RX_STBC, QCASAP_SET_RADAR_DBG, QCSAP_PARAM_CHAN_WIDTH, + QCSAP_SET_DEFAULT_AMPDU, + QCSAP_ENABLE_RTS_BURSTING, }; int iw_get_channel_list(struct net_device *dev, diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 334a30a4c45c..a15dd7ee225e 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -1473,6 +1473,16 @@ typedef enum #define CFG_REPORT_MAX_LINK_SPEED_MAX ( eHDD_LINK_SPEED_REPORT_MAX_SCALED ) #define CFG_REPORT_MAX_LINK_SPEED_DEFAULT ( eHDD_LINK_SPEED_REPORT_MAX_SCALED ) +#define CFG_SET_RTS_FOR_SIFS_BURSTING "gSetRTSForSIFSBursting" +#define CFG_SET_RTS_FOR_SIFS_BURSTING_MIN (0) +#define CFG_SET_RTS_FOR_SIFS_BURSTING_MAX (1) +#define CFG_SET_RTS_FOR_SIFS_BURSTING_DEFAULT (0) + +#define CFG_MAX_MPDUS_IN_AMPDU "gMaxMPDUsInAMPDU" +#define CFG_MAX_MPDUS_IN_AMPDU_MIN (0) +#define CFG_MAX_MPDUS_IN_AMPDU_MAX (64) +#define CFG_MAX_MPDUS_IN_AMPDU_DEFAULT (0) + /* * RSSI Thresholds * Used when eHDD_LINK_SPEED_REPORT_SCALED is selected @@ -4804,6 +4814,8 @@ struct hdd_config { v_BOOL_t gEnableOverLapCh; v_BOOL_t fRegChangeDefCountry; v_U8_t acsScanBandPreference; + uint8_t enable_rts_sifsbursting; + uint8_t max_mpdus_inampdu; #ifdef QCA_LL_TX_FLOW_CT v_U32_t TxFlowLowWaterMark; v_U32_t TxFlowHighWaterMarkOffset; diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index ffcb181d9f7c..ff6a99900659 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -2373,6 +2373,20 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_DISABLE_DFS_JAPAN_W53_MAX, chNotify_set_gDisableDfsJapanW53, 0), + REG_VARIABLE(CFG_SET_RTS_FOR_SIFS_BURSTING, WLAN_PARAM_Integer, + hdd_config_t, enable_rts_sifsbursting, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_SET_RTS_FOR_SIFS_BURSTING_DEFAULT, + CFG_SET_RTS_FOR_SIFS_BURSTING_MIN, + CFG_SET_RTS_FOR_SIFS_BURSTING_MAX), + + REG_VARIABLE(CFG_MAX_MPDUS_IN_AMPDU, WLAN_PARAM_Integer, + hdd_config_t, max_mpdus_inampdu, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MAX_MPDUS_IN_AMPDU_DEFAULT, + CFG_MAX_MPDUS_IN_AMPDU_MIN, + CFG_MAX_MPDUS_IN_AMPDU_MAX), + REG_VARIABLE( CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, hdd_config_t, enableFirstScan2GOnly, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 47025f8ac458..a4a2edf62bb8 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -3727,6 +3727,20 @@ static __iw_softap_setparam(struct net_device *dev, ret = hdd_set_rx_stbc(pHostapdAdapter, set_value); break; + case QCSAP_SET_DEFAULT_AMPDU: + hddLog(LOG1, "QCSAP_SET_DEFAULT_AMPDU val %d", set_value); + ret = process_wma_set_command((int)pHostapdAdapter->sessionId, + (int)WMI_PDEV_PARAM_MAX_MPDUS_IN_AMPDU, + set_value, PDEV_CMD); + break; + + case QCSAP_ENABLE_RTS_BURSTING: + hddLog(LOG1, "QCSAP_ENABLE_RTS_BURSTING val %d", set_value); + ret = process_wma_set_command((int)pHostapdAdapter->sessionId, + (int)WMI_PDEV_PARAM_ENABLE_RTS_SIFS_BURSTING, + set_value, PDEV_CMD); + break; + default: hddLog(LOGE, FL("Invalid setparam command %d value %d"), sub_cmd, set_value); @@ -6486,6 +6500,16 @@ static const struct iw_priv_args hostapd_private_args[] = { 0, "set_rx_stbc" }, + { QCSAP_SET_DEFAULT_AMPDU, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "def_ampdu" }, + + { QCSAP_ENABLE_RTS_BURSTING, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, + "rts_bursting" }, + { QCSAP_IOCTL_GETPARAM, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "getparam" }, { QCSAP_IOCTL_GETPARAM, 0, diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 5db411abed51..e0f3a0e0070d 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -15893,6 +15893,19 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) set_value, PDEV_CMD); } + if (pHddCtx->cfg_ini->max_mpdus_inampdu) { + set_value = pHddCtx->cfg_ini->max_mpdus_inampdu; + process_wma_set_command(0, (int)WMI_PDEV_PARAM_MAX_MPDUS_IN_AMPDU, + set_value, PDEV_CMD); + } + + if (pHddCtx->cfg_ini->enable_rts_sifsbursting) { + set_value = pHddCtx->cfg_ini->enable_rts_sifsbursting; + process_wma_set_command(0, (int)WMI_PDEV_PARAM_ENABLE_RTS_SIFS_BURSTING, + set_value, PDEV_CMD); + + } + if (hdd_wlan_enable_egap(pHddCtx)) hddLog(LOGE, FL("enhance green ap is not enabled")); -- cgit v1.2.3