summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmar Singhal <asinghal@qca.qualcomm.com>2015-07-21 16:57:32 -0700
committerAkash Patel <akashp@codeaurora.org>2015-07-23 08:26:55 -0700
commit6558a40985212e35f0bb6a59bb6a057f431db525 (patch)
tree118de9ea6d2715a08f2d826de1ff513c38620b26
parent66c9c757a6352797529394fb4d85ae69f7ff588f (diff)
qcacld-2.0: Populate the CCK and 1SS tx chain masks to firmware
CCK and 1SS chanin masks are configurable via INI. Further, CCK mask is valid only if 2G and 5G CTL value is MKK. Send these values to firmware as PDEV parameters after proper computation. Change-Id: I9207baa589242452a7bac7ce17930f641d8ffc1e CRs-Fixed: 877846
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h13
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c14
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c18
-rw-r--r--CORE/SERVICES/COMMON/wma_api.h1
-rw-r--r--CORE/SERVICES/WMA/wma.c23
-rw-r--r--CORE/SERVICES/WMA/wma.h1
6 files changed, 67 insertions, 3 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 1a70a5af98ef..2a85814f7961 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2994,6 +2994,16 @@ enum dot11p_mode {
#define CFG_MULTICAST_HOST_FW_MSGS_MAX (1)
#define CFG_MULTICAST_HOST_FW_MSGS_DEFAULT (1)
+#define CFG_TX_CHAIN_MASK_CCK "gCckChainMaskEnable"
+#define CFG_TX_CHAIN_MASK_CCK_MIN (0)
+#define CFG_TX_CHAIN_MASK_CCK_MAX (1)
+#define CFG_TX_CHAIN_MASK_CCK_DEFAULT (0)
+
+#define CFG_TX_CHAIN_MASK_1SS "gTxChainMask1ss"
+#define CFG_TX_CHAIN_MASK_1SS_MIN (0)
+#define CFG_TX_CHAIN_MASK_1SS_MAX (3)
+#define CFG_TX_CHAIN_MASK_1SS_DEFAULT (0)
+
/*
* fine timing measurement capability information
*
@@ -3667,6 +3677,9 @@ typedef struct
#endif
v_BOOL_t sendDeauthBeforeCon;
uint16_t pkt_err_disconn_th;
+ bool tx_chain_mask_cck;
+ uint8_t tx_chain_mask_1ss;
+
} hdd_config_t;
#ifdef WLAN_FEATURE_MBSSID
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index b117058ab2b9..b2e97b60c116 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3939,6 +3939,20 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_DROPPED_PKT_DISCONNECT_TH_DEFAULT,
CFG_DROPPED_PKT_DISCONNECT_TH_MIN,
CFG_DROPPED_PKT_DISCONNECT_TH_MAX),
+
+ REG_VARIABLE(CFG_TX_CHAIN_MASK_CCK, WLAN_PARAM_Integer,
+ hdd_config_t, tx_chain_mask_cck,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TX_CHAIN_MASK_CCK_DEFAULT,
+ CFG_TX_CHAIN_MASK_CCK_MIN,
+ CFG_TX_CHAIN_MASK_CCK_MAX),
+
+ REG_VARIABLE(CFG_TX_CHAIN_MASK_1SS, WLAN_PARAM_Integer,
+ hdd_config_t, tx_chain_mask_1ss,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TX_CHAIN_MASK_1SS_DEFAULT,
+ CFG_TX_CHAIN_MASK_1SS_MIN,
+ CFG_TX_CHAIN_MASK_1SS_MAX),
};
#ifdef WLAN_FEATURE_MBSSID
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index d8b7e1ebf495..996857a01b00 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -11794,6 +11794,24 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
goto err_wiphy_unregister;
}
+ ret = process_wma_set_command(0, GEN_PARAM_TX_CHAIN_MASK_CCK,
+ pHddCtx->cfg_ini->tx_chain_mask_cck,
+ GEN_CMD);
+ if (0 != ret) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: set GEN_PARAM_TX_CHAIN_MASK_CCK failed %d",
+ __func__, ret);
+ }
+
+ ret = process_wma_set_command(0, WMI_PDEV_PARAM_TX_CHAIN_MASK_1SS,
+ pHddCtx->cfg_ini->tx_chain_mask_1ss,
+ PDEV_CMD);
+ if (0 != ret) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: WMI_PDEV_PARAM_TX_CHAIN_MASK_1SS failed %d",
+ __func__, ret);
+ }
+
status = hdd_set_sme_chan_list(pHddCtx);
if (status != VOS_STATUS_SUCCESS) {
hddLog(VOS_TRACE_LEVEL_FATAL,
diff --git a/CORE/SERVICES/COMMON/wma_api.h b/CORE/SERVICES/COMMON/wma_api.h
index 48cd36b58170..c95f6c4c1b0f 100644
--- a/CORE/SERVICES/COMMON/wma_api.h
+++ b/CORE/SERVICES/COMMON/wma_api.h
@@ -79,6 +79,7 @@ typedef enum {
GEN_PARAM_MODULATED_DTIM,
GEN_PARAM_CAPTURE_TSF,
GEN_PARAM_RESET_TSF_GPIO,
+ GEN_PARAM_TX_CHAIN_MASK_CCK
} GEN_PARAM;
#define VDEV_CMD 1
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index c32f1798e600..25958bb7f282 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -104,6 +104,7 @@
#include "dfs.h"
#include "radar_filters.h"
+#include "regdomain_common.h"
#include "wma_ocb.h"
@@ -12630,6 +12631,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
wma_update_txrx_chainmask(wma->num_rf_chains,
&privcmd->param_value);
}
+
ret = wmi_unified_pdev_set_param(wma->wmi_handle,
privcmd->param_id,
privcmd->param_value);
@@ -12649,7 +12651,6 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
WMA_LOGE("%s:Invalid vdev handle", __func__);
return;
}
-
WMA_LOGD("gen pid %d pval %d", privcmd->param_id,
privcmd->param_value);
@@ -12701,9 +12702,10 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
break;
#endif
case GEN_PARAM_MODULATED_DTIM:
-
wma_set_modulated_dtim(wma, privcmd);
-
+ break;
+ case GEN_PARAM_TX_CHAIN_MASK_CCK:
+ wma->tx_chain_mask_cck = privcmd->param_value;
break;
default:
WMA_LOGE("Invalid param id 0x%x", privcmd->param_id);
@@ -29633,6 +29635,8 @@ void wma_send_regdomain_info(u_int32_t reg_dmn, u_int16_t regdmn2G,
int32_t len = sizeof(*cmd);
void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
tp_wma_handle wma = vos_get_context(VOS_MODULE_ID_WDA, vos_context);
+ bool cck_mask_val = false;
+ int ret = 0;
if (NULL == wma) {
WMA_LOGE("%s: wma context is NULL", __func__);
@@ -29661,6 +29665,19 @@ void wma_send_regdomain_info(u_int32_t reg_dmn, u_int16_t regdmn2G,
__func__);
adf_nbuf_free(buf);
}
+
+ if ((ctl2G == MKK) && (ctl5G == MKK) &&
+ (true == wma->tx_chain_mask_cck))
+ cck_mask_val = true;
+
+ ret = wmi_unified_pdev_set_param(wma->wmi_handle,
+ WMI_PDEV_PARAM_TX_CHAIN_MASK_CCK,
+ cck_mask_val);
+ if (ret) {
+ WMA_LOGE("failed to set PDEV tx_chain_mask_cck %d",
+ ret);
+ }
+
return;
}
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 4b5294746421..0b84c7034934 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -781,6 +781,7 @@ typedef struct wma_handle {
vos_timer_t log_completion_timer;
uint32_t txrx_chainmask;
uint8_t per_band_chainmask_supp;
+ bool tx_chain_mask_cck;
}t_wma_handle, *tp_wma_handle;
struct wma_target_cap {