summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlifeng <lifeng@codeaurora.org>2017-02-24 13:05:02 +0800
committerSandeep Puligilla <spuligil@codeaurora.org>2017-04-11 04:36:54 -0700
commit6e9cc13b040e26831fd9748dd36d1e0c83102800 (patch)
tree6f1578dec4d0f42422461be11353d5d2c772459b
parentaab489eb886b52b1ed6ced40ea2a8ee5ad3ae056 (diff)
qcacld-3.0: Add ini to configure SAP 11n max mcs
qcacld-2.0 to qcacld-3.0 propagation Add support for configure host init SAP HT rate upper bound. Change-Id: If749f8a036d98d9070cb05170fa1e612fcb30e8a CRs-Fixed: 1091897
-rw-r--r--core/hdd/inc/wlan_hdd_cfg.h18
-rw-r--r--core/hdd/src/wlan_hdd_cfg.c14
-rw-r--r--core/mac/inc/wni_cfg.h5
-rw-r--r--core/mac/src/cfg/cfg_param_name.c4
-rw-r--r--core/mac/src/cfg/cfg_proc_msg.c7
-rw-r--r--core/wma/src/wma_dev_if.c42
6 files changed, 89 insertions, 1 deletions
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index 603682eb7780..ad84660aec37 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -10593,6 +10593,23 @@ enum dot11p_mode {
#define CFG_MAX_MPDUS_IN_AMPDU_MAX (64)
#define CFG_MAX_MPDUS_IN_AMPDU_DEFAULT (0)
+/*
+ * gSapMaxMCSForTxData - sap 11n max mcs
+ * @Min: 0
+ * @Max: 383
+ * @Default: 0
+ *
+ * This ini configure SAP 11n max mcs
+ *
+ * Usage: External
+ *
+ * </ini>
+ */
+#define CFG_SAP_MAX_MCS_FOR_TX_DATA "gSapMaxMCSForTxData"
+#define CFG_SAP_MAX_MCS_FOR_TX_DATA_MIN (0)
+#define CFG_SAP_MAX_MCS_FOR_TX_DATA_MAX (383)
+#define CFG_SAP_MAX_MCS_FOR_TX_DATA_DEFAULT (0)
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -11353,6 +11370,7 @@ struct hdd_config {
bool ani_enabled;
uint8_t enable_rts_sifsbursting;
uint8_t max_mpdus_inampdu;
+ uint16_t sap_max_mcs_txdata;
};
#define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var))
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index df13dd9ad90a..03fb36326cfe 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -4542,6 +4542,13 @@ struct reg_table_entry g_registry_table[] = {
CFG_MAX_MPDUS_IN_AMPDU_DEFAULT,
CFG_MAX_MPDUS_IN_AMPDU_MIN,
CFG_MAX_MPDUS_IN_AMPDU_MAX),
+
+ REG_VARIABLE(CFG_SAP_MAX_MCS_FOR_TX_DATA, WLAN_PARAM_Integer,
+ struct hdd_config, sap_max_mcs_txdata,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_SAP_MAX_MCS_FOR_TX_DATA_DEFAULT,
+ CFG_SAP_MAX_MCS_FOR_TX_DATA_MIN,
+ CFG_SAP_MAX_MCS_FOR_TX_DATA_MAX),
};
/**
@@ -7193,6 +7200,13 @@ bool hdd_update_config_cfg(hdd_context_t *hdd_ctx)
hdd_err("Couldn't pass on WNI_CFG_RATE_FOR_TX_MGMT to CCM");
}
+ if (sme_cfg_set_int(hdd_ctx->hHal, WNI_CFG_SAP_MAX_MCS_DATA,
+ config->sap_max_mcs_txdata) ==
+ QDF_STATUS_E_FAILURE) {
+ status = false;
+ hdd_err("Could not pass on WNI_CFG_SAP_MAX_MCS_DATA to CCM");
+ }
+
return status;
}
#ifdef FEATURE_WLAN_SCAN_PNO
diff --git a/core/mac/inc/wni_cfg.h b/core/mac/inc/wni_cfg.h
index 824789b091af..0a743ac3fc1b 100644
--- a/core/mac/inc/wni_cfg.h
+++ b/core/mac/inc/wni_cfg.h
@@ -253,6 +253,7 @@ enum {
WNI_CFG_MAX_HT_MCS_TX_DATA,
WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA,
WNI_CFG_RATE_FOR_TX_MGMT,
+ WNI_CFG_SAP_MAX_MCS_DATA,
/* Any new items to be added should be above this strictly */
CFG_PARAM_MAX_NUM
};
@@ -1270,6 +1271,10 @@ enum {
#define WNI_CFG_RATE_FOR_TX_MGMT_STAMAX 0xFF
#define WNI_CFG_RATE_FOR_TX_MGMT_STADEF 0xFF
+#define WNI_CFG_SAP_MAX_MCS_DATA_STAMIN 0x0
+#define WNI_CFG_SAP_MAX_MCS_DATA_STAMAX 0x17f
+#define WNI_CFG_SAP_MAX_MCS_DATA_STADEF 0x0
+
#define CFG_STA_MAGIC_DWORD 0xbeefbeef
#endif
diff --git a/core/mac/src/cfg/cfg_param_name.c b/core/mac/src/cfg/cfg_param_name.c
index 0e67f6bbf00f..670ae07611d0 100644
--- a/core/mac/src/cfg/cfg_param_name.c
+++ b/core/mac/src/cfg/cfg_param_name.c
@@ -326,4 +326,8 @@ unsigned char *g_cfg_param_name[] = {
(unsigned char *)"MAX_HT_MCS_TX_DATA",
(unsigned char *)"DISABLE_ABG_RATE_TX_DATA",
(unsigned char *)"RATE_FOR_TX_MGMT",
+ (unsigned char *)"TGT_GTX_USR_CFG",
+ (unsigned char *)"ASSOC_STA_LIMIT_GO",
+ (unsigned char *)"ASSOC_STA_LIMIT_AP",
+ (unsigned char *)"SAP_MAX_MCS_DATA",
};
diff --git a/core/mac/src/cfg/cfg_proc_msg.c b/core/mac/src/cfg/cfg_proc_msg.c
index 3815ab191ad2..6c95796594f7 100644
--- a/core/mac/src/cfg/cfg_proc_msg.c
+++ b/core/mac/src/cfg/cfg_proc_msg.c
@@ -1188,7 +1188,12 @@ cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
WNI_CFG_RATE_FOR_TX_MGMT_STAMIN,
WNI_CFG_RATE_FOR_TX_MGMT_STAMAX,
- WNI_CFG_RATE_FOR_TX_MGMT_STADEF}
+ WNI_CFG_RATE_FOR_TX_MGMT_STADEF},
+ {WNI_CFG_SAP_MAX_MCS_DATA,
+ CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
+ WNI_CFG_SAP_MAX_MCS_DATA_STAMIN,
+ WNI_CFG_SAP_MAX_MCS_DATA_STAMAX,
+ WNI_CFG_SAP_MAX_MCS_DATA_STADEF},
};
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index 2d3a7ebf1f4a..7a41a49e914a 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -3687,6 +3687,8 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta)
struct wma_txrx_node *iface = NULL;
struct wma_target_req *msg;
bool peer_assoc_cnf = false;
+ uint32_t mcs_limit, i, j;
+ uint8_t *rate_pos;
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
@@ -3764,6 +3766,46 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta)
wmi_unified_send_txbf(wma, add_sta);
+ /*
+ * Get MCS limit from ini configure, and map it to rate parameters
+ * This will limit HT rate upper bound. CFG_CTRL_MASK is used to
+ * check whether ini config is enabled and CFG_DATA_MASK to get the
+ * MCS value.
+ */
+#define CFG_CTRL_MASK 0xFF00
+#define CFG_DATA_MASK 0x00FF
+
+ if (wlan_cfg_get_int(wma->mac_context, WNI_CFG_SAP_MAX_MCS_DATA,
+ &mcs_limit) != eSIR_SUCCESS) {
+ mcs_limit = WNI_CFG_SAP_MAX_MCS_DATA_STADEF;
+ }
+
+ if (mcs_limit & CFG_CTRL_MASK) {
+ WMA_LOGD("%s: set mcs_limit %x", __func__, mcs_limit);
+
+ mcs_limit &= CFG_DATA_MASK;
+ rate_pos = (u_int8_t *)add_sta->supportedRates.supportedMCSSet;
+ for (i = 0, j = 0; i < MAX_SUPPORTED_RATES;) {
+ if (j < mcs_limit / 8) {
+ rate_pos[j] = 0xff;
+ j++;
+ i += 8;
+ } else if (j < mcs_limit / 8 + 1) {
+ if (i <= mcs_limit)
+ rate_pos[i / 8] |= 1 << (i % 8);
+ else
+ rate_pos[i / 8] &= ~(1 << (i % 8));
+ i++;
+
+ if (i >= (j + 1) * 8)
+ j++;
+ } else {
+ rate_pos[j++] = 0;
+ i += 8;
+ }
+ }
+ }
+
if (WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap,
WMI_SERVICE_PEER_ASSOC_CONF)) {
peer_assoc_cnf = true;