summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkash Patel <akashp@codeaurora.org>2014-08-14 22:16:06 -0700
committerAkash Patel <akashp@codeaurora.org>2014-08-14 22:17:23 -0700
commit261b7cd834cb7da72c217b15521940ad641f1e23 (patch)
tree165a794d3d3aa625f3244d234c6c4a5281700d19
parentb8a11e307747751e0acae4044ba5dc3a6b6f95c5 (diff)
parent64ca8e6bb2f92af7070c01d29869d0a63f2cecf2 (diff)
Release 1.0.0.170 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master' * origin/caf/caf-wlan/master: Cafstaging Release 1.0.0.170 QCACLD-NEW: Fix USB compilation qcacld: Enable Multi-user MIMO in cfg.ini by default qcacld: fix build error in function 'ol_check_fw_hash' qca_cld: Trigger PCI link down recovery when fail to wake up target qcacld: WMA: Add a field for significant change qcacld: hdd: to support chainmask configuration in SAP mode wlan: wma: Fix bang radar logic Unit test command to test the feature under development Change-Id: Iffa5fec77325aa783880d83c12198c30073c9be9
-rw-r--r--CORE/HDD/inc/qc_sap_ioctl.h5
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c119
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c48
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/src/include/sirParams.h4
-rw-r--r--CORE/SERVICES/BMI/ol_fw.c6
-rw-r--r--CORE/SERVICES/BMI/ol_fw.h1
-rw-r--r--CORE/SERVICES/HIF/PCIe/hif_pci.c4
-rw-r--r--CORE/SERVICES/HIF/PCIe/if_pci.c10
-rw-r--r--CORE/SERVICES/WMA/wma.c66
-rw-r--r--CORE/SERVICES/WMA/wma.h8
-rwxr-xr-xfirmware_bin/WCNSS_qcom_cfg.ini4
12 files changed, 248 insertions, 31 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,
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index ce33c26947f6..bce292283101 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -379,6 +379,8 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2},
#define WE_TDLS_CONFIG_PARAMS 5
#endif
+#define WE_UNIT_TEST_CMD 7
+
#define WE_MTRACE_DUMP_CMD 8
#define WE_MTRACE_SELECTIVE_MODULE_LOG_ENABLE_CMD 9
@@ -7543,10 +7545,47 @@ static int __iw_set_var_ints_getnone(struct net_device *dev,
}
break;
#endif
+ case WE_UNIT_TEST_CMD :
+ {
+ t_wma_unit_test_cmd *unitTestArgs;
+ vos_msg_t msg = {0};
+ int i, j;
+ if ((apps_args[0] < WLAN_MODULE_ID_MIN) ||
+ (apps_args[0] >= WLAN_MODULE_ID_MAX)) {
+ hddLog(LOGE, FL("Invalid MODULE ID %d"), apps_args[0]);
+ return -EINVAL;
+ }
+ if (apps_args[1] > (WMA_MAX_NUM_ARGS)) {
+ hddLog(LOGE, FL("Too Many args %d"), apps_args[1]);
+ return -EINVAL;
+ }
+ unitTestArgs = vos_mem_malloc(sizeof(*unitTestArgs));
+ if (NULL == unitTestArgs) {
+ hddLog(LOGE,
+ FL("vos_mem_alloc failed for unitTestArgs"));
+ return -ENOMEM;
+ }
+ unitTestArgs->vdev_id = (int)pAdapter->sessionId;
+ unitTestArgs->module_id = apps_args[0];
+ unitTestArgs->num_args = apps_args[1];
+ for (i = 0, j = 2; i < unitTestArgs->num_args; i++, j++) {
+ unitTestArgs->args[i] = apps_args[j];
+ }
+ msg.type = SIR_HAL_UNIT_TEST_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = unitTestArgs;
+ if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA,
+ &msg)) {
+ vos_mem_free(unitTestArgs);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ FL("Not able to post UNIT_TEST_CMD message to WDA"));
+ return -EINVAL;
+ }
+ }
+ break;
default:
{
- hddLog(LOGE, "%s: Invalid IOCTL command %d",
- __func__, sub_cmd );
+ hddLog(LOGE, FL("Invalid IOCTL command %d"), sub_cmd );
}
break;
}
@@ -10534,6 +10573,11 @@ static const struct iw_priv_args we_private_args[] = {
0,
"setTdlsConfig" },
#endif
+ {
+ WE_UNIT_TEST_CMD,
+ IW_PRIV_TYPE_INT | MAX_VAR_ARGS,
+ 0,
+ "setUnitTestCmd" },
/* handlers for main ioctl */
{ WLAN_PRIV_ADD_TSPEC,
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index bce57cd6267b..040b610574d5 100644
--- a/CORE/MAC/inc/qwlan_version.h
+++ b/CORE/MAC/inc/qwlan_version.h
@@ -42,9 +42,9 @@ BRIEF DESCRIPTION:
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 0
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 169
+#define QWLAN_VERSION_BUILD 170
-#define QWLAN_VERSIONSTR "1.0.0.169"
+#define QWLAN_VERSIONSTR "1.0.0.170"
#ifdef QCA_WIFI_2_0
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 19f69267e10c..49cb89cf0533 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -637,10 +637,14 @@ typedef struct sSirMbMsgP2p
#ifdef FEATURE_WLAN_AUTO_SHUTDOWN
#define SIR_HAL_SET_AUTO_SHUTDOWN_TIMER_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 281)
#endif
+
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
#define SIR_HAL_HO_FAIL_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 282)
#endif
#define SIR_HAL_SET_BASE_MACADDR_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 283)
+
+#define SIR_HAL_UNIT_TEST_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 284)
+
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
// CFG message types
diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
index 4de688be9410..34752b7ce235 100644
--- a/CORE/SERVICES/BMI/ol_fw.c
+++ b/CORE/SERVICES/BMI/ol_fw.c
@@ -361,7 +361,9 @@ exit:
static int ol_check_fw_hash(const u8* data, u32 data_size, ATH_BIN_FILE file)
{
u8 *hash = NULL;
+#ifdef CONFIG_CNSS
u8 digest[SHA256_DIGEST_SIZE];
+#endif
u8 temp[SHA256_DIGEST_SIZE] = {};
int ret = 0;
@@ -465,7 +467,11 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
break;
case ATH_FIRMWARE_FILE:
if (WLAN_IS_EPPING_ENABLED(vos_get_conparam())) {
+#if defined(CONFIG_CNSS) || defined(HIF_SDIO)
filename = scn->fw_files.epping_file;
+#else
+ filename = QCA_FIRMWARE_EPPING_FILE;
+#endif
printk(KERN_INFO "%s: Loading epping firmware file %s\n",
__func__, filename);
break;
diff --git a/CORE/SERVICES/BMI/ol_fw.h b/CORE/SERVICES/BMI/ol_fw.h
index ffbc3f546be6..918034518af5 100644
--- a/CORE/SERVICES/BMI/ol_fw.h
+++ b/CORE/SERVICES/BMI/ol_fw.h
@@ -52,6 +52,7 @@
#define QCA_OTP_FILE "otp.bin"
#define QCA_SETUP_FILE "athsetup.bin"
#define AR61X4_SINGLE_FILE "qca61x4.bin"
+#define QCA_FIRMWARE_EPPING_FILE "epping.bin"
/* Configuration for statistics pushed by firmware */
#define PDEV_DEFAULT_STATS_UPDATE_PERIOD 500
diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.c b/CORE/SERVICES/HIF/PCIe/hif_pci.c
index 85bd7e303803..811f8bbdb7e6 100644
--- a/CORE/SERVICES/HIF/PCIe/hif_pci.c
+++ b/CORE/SERVICES/HIF/PCIe/hif_pci.c
@@ -2609,7 +2609,9 @@ HIFTargetSleepStateAdjust(A_target_id_t targid,
printk("%s:error, can't wakeup target\n", __func__);
sc->recovery = true;
vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, TRUE);
- schedule_work(&recovery_work);
+#ifdef CONFIG_CNSS
+ cnss_wlan_pci_link_down();
+#endif
return -EACCES;
}
diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c
index 60449a49a59f..aa5a25499061 100644
--- a/CORE/SERVICES/HIF/PCIe/if_pci.c
+++ b/CORE/SERVICES/HIF/PCIe/if_pci.c
@@ -1893,6 +1893,11 @@ __hif_pci_suspend(struct pci_dev *pdev, pm_message_t state)
adf_os_spin_unlock_irqrestore( &hif_state->suspend_lock);
+#ifdef CONFIG_CNSS
+ /* Keep PCIe bus driver's shadow memory intact */
+ cnss_pcie_shadow_control(pdev, FALSE);
+#endif
+
pci_read_config_dword(pdev, OL_ATH_PCI_PM_CONTROL, &val);
if ((val & 0x000000ff) != 0x3) {
pci_save_state(pdev);
@@ -1979,6 +1984,11 @@ __hif_pci_resume(struct pci_dev *pdev)
printk("\n%s: Rome PS: %d", __func__, val);
+#ifdef CONFIG_CNSS
+ /* Keep PCIe bus driver's shadow memory intact */
+ cnss_pcie_shadow_control(pdev, TRUE);
+#endif
+
#ifdef DISABLE_L1SS_STATES
pci_read_config_dword(pdev, 0x188, &val);
pci_write_config_dword(pdev, 0x188, (val & ~0x0000000f));
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 425cdca98a79..1c7909abf48b 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -10517,6 +10517,7 @@ static int32_t wma_set_priv_cfg(tp_wma_handle wma_handle,
case WMA_VDEV_DFS_CONTROL_CMDID:
{
struct ieee80211com *dfs_ic = wma_handle->dfs_ic;
+ struct ath_dfs *dfs;
if (!dfs_ic) {
ret = -ENOENT;
@@ -10529,8 +10530,11 @@ static int32_t wma_set_priv_cfg(tp_wma_handle wma_handle,
if (dfs_ic->ic_curchan->ic_flagext &
IEEE80211_CHAN_DFS) {
- ret = wma_dfs_indicate_radar(dfs_ic,
- dfs_ic->ic_curchan);
+ dfs = (struct ath_dfs *)dfs_ic->ic_dfs;
+ dfs->dfs_bangradar = 1;
+ dfs->ath_radar_tasksched = 1;
+ OS_SET_TIMER(&dfs->ath_dfs_task_timer,
+ 0);
} else {
ret = -ENOENT;
}
@@ -20805,6 +20809,7 @@ VOS_STATUS wma_get_buf_extscan_change_monitor_cmd(tp_wma_handle wma_handle,
cmd->num_entries_in_page = numap;
cmd->lost_ap_scan_count = psigchange->lostApSampleSize;
cmd->max_rssi_samples = psigchange->rssiSampleSize;
+ cmd->rssi_averaging_samples = psigchange->rssiSampleSize;
cmd->max_out_of_range_count = psigchange->minBreaching;
buf_ptr += sizeof(*cmd);
@@ -21084,6 +21089,58 @@ static VOS_STATUS wma_nan_req(void *wda_handle, tpNanRequest nan_req)
}
#endif
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+static void wma_process_unit_test_cmd(WMA_HANDLE handle,
+ t_wma_unit_test_cmd *wma_utest)
+{
+ tp_wma_handle wma_handle = (tp_wma_handle) handle;
+ wmi_unit_test_cmd_fixed_param* cmd;
+ wmi_buf_t wmi_buf;
+ u_int8_t *buf_ptr;
+ int i;
+ u_int16_t len, args_tlv_len;
+ A_UINT32 *unit_test_cmd_args;
+
+ args_tlv_len = WMI_TLV_HDR_SIZE + wma_utest->num_args * sizeof(A_UINT32);
+ len = sizeof(wmi_unit_test_cmd_fixed_param) + args_tlv_len;
+ if (!wma_handle || !wma_handle->wmi_handle) {
+ WMA_LOGE("%s: WMA is closed, can not issue fw unit test cmd",
+ __func__);
+ return;
+ }
+ wmi_buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
+ if (!wmi_buf) {
+ WMA_LOGE("%s: wmai_buf_alloc failed", __func__);
+ return;
+ }
+
+ cmd = (wmi_unit_test_cmd_fixed_param *)wmi_buf_data(wmi_buf);
+ buf_ptr = (u_int8_t *) cmd;
+ WMITLV_SET_HDR(&cmd->tlv_header,
+ WMITLV_TAG_STRUC_wmi_unit_test_cmd_fixed_param,
+ WMITLV_GET_STRUCT_TLVLEN(wmi_unit_test_cmd_fixed_param));
+ cmd->vdev_id = wma_utest->vdev_id;
+ cmd->module_id = wma_utest->module_id;
+ cmd->num_args = wma_utest->num_args;
+ buf_ptr += sizeof(wmi_unit_test_cmd_fixed_param);
+ WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_UINT32,
+ (wma_utest->num_args * sizeof(u_int32_t)));
+ unit_test_cmd_args = (A_UINT32 *)(buf_ptr + WMI_TLV_HDR_SIZE);
+ WMA_LOGI("%s: %d num of args = ", __func__, wma_utest->num_args);
+ for (i = 0; (i < wma_utest->num_args && i < WMA_MAX_NUM_ARGS); i++) {
+ unit_test_cmd_args[i] = wma_utest->args[i];
+ WMA_LOGI("%d,", wma_utest->args[i]);
+ }
+ if (wmi_unified_cmd_send(wma_handle->wmi_handle, wmi_buf, len,
+ WMI_UNIT_TEST_CMDID)) {
+ WMA_LOGP("%s: failed to send unit test command", __func__);
+ adf_nbuf_free(wmi_buf);
+ return;
+ }
+ return;
+}
+#endif
+
/*
* function : wma_mc_process_msg
* Description :
@@ -21602,6 +21659,11 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg)
(tSirSmeRoamOffloadSynchCnf *)msg->bodyptr);
vos_mem_free(msg->bodyptr);
break;
+ case SIR_HAL_UNIT_TEST_CMD:
+ wma_process_unit_test_cmd(wma_handle,
+ (t_wma_unit_test_cmd *)msg->bodyptr);
+ vos_mem_free(msg->bodyptr);
+ break;
#endif
#ifdef WLAN_FEATURE_NAN
case WDA_NAN_REQUEST:
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 9e6212d1c463..56e31f18944f 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -1668,4 +1668,12 @@ A_UINT32 eCsrEncryptionType_to_rsn_cipherset (eCsrEncryptionType encr);
#define WMA_TX_Q_RECHECK_TIMER_WAIT 2 // 2 ms
#define WMA_TX_Q_RECHECK_TIMER_MAX_WAIT 20 // 20 ms
+#define WMA_MAX_NUM_ARGS 8
+typedef struct wma_unit_test_cmd
+{
+ v_UINT_t vdev_id;
+ WLAN_MODULE_ID module_id;
+ v_U32_t num_args;
+ v_U32_t args[WMA_MAX_NUM_ARGS];
+}t_wma_unit_test_cmd;
#endif
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index ad365bd5f921..d33bb65c66e0 100755
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -588,6 +588,10 @@ gCountryCodePriority=1
# Enable(1)/Disable(0) SIFS burst
gEnableSifsBurst=1
+# Enable or Disable Multi-user MIMO
+# 1=Enable (default), 0=Disable
+gEnableMuBformee=1
+
END
# Note: Configuration parser would not read anything past the END marker