wlan: Provide Ini support to send Mgmt packets over WQ5
Sometimes driver needs to send Mgmt packets over WQ5.
Provide support to send Mgmt Packets via WQ5.
Change-Id: I46965de01a76f33c9be3bc3f0e75c5a7e3b77065
CRs-Fixed: 974574
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 1550ae0..44330f6 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2655,6 +2655,13 @@
#define CFG_SAR_BOFFSET_SET_CORRECTION_MAX (1)
#define CFG_SAR_BOFFSET_SET_CORRECTION_DEFAULT (0)
+/* If gSendMgmtPktViaWQ5 is enabled, mgmt packet will go via WQ5 */
+#define CFG_SEND_MGMT_PKT_VIA_WQ5_NAME "gSendMgmtPktViaWQ5"
+#define CFG_SEND_MGMT_PKT_VIA_WQ5_MIN ( 0 )
+#define CFG_SEND_MGMT_PKT_VIA_WQ5_MAX ( 1)
+#define CFG_SEND_MGMT_PKT_VIA_WQ5_DEF ( 0 )
+
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -3185,6 +3192,7 @@
v_U8_t max_chan_for_dwell_time_cfg;
v_U16_t tdls_enable_defer_time;
v_U8_t boffset_correction_enable;
+ v_BOOL_t sendMgmtPktViaWQ5;
} hdd_config_t;
/*---------------------------------------------------------------------------
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 927e3ba..01ef787 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3517,6 +3517,14 @@
CFG_SAR_BOFFSET_SET_CORRECTION_DEFAULT,
CFG_SAR_BOFFSET_SET_CORRECTION_MIN,
CFG_SAR_BOFFSET_SET_CORRECTION_MAX),
+
+ REG_VARIABLE( CFG_SEND_MGMT_PKT_VIA_WQ5_NAME , WLAN_PARAM_Integer,
+ hdd_config_t, sendMgmtPktViaWQ5,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_SEND_MGMT_PKT_VIA_WQ5_DEF,
+ CFG_SEND_MGMT_PKT_VIA_WQ5_MIN,
+ CFG_SEND_MGMT_PKT_VIA_WQ5_MAX ),
+
};
/*
@@ -3966,6 +3974,9 @@
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
"Name = [gTDLSEnableDeferTime] Value = [%u] ",
pHddCtx->cfg_ini->tdls_enable_defer_time);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+ "Name = [gSendMgmtPktViaWQ5] Value = [%u] ",
+ pHddCtx->cfg_ini->sendMgmtPktViaWQ5);
}
@@ -5822,6 +5833,8 @@
smeConfig->csrConfig.roamDelayStatsEnabled = pHddCtx->cfg_ini->gEnableRoamDelayStats;
smeConfig->csrConfig.max_chan_for_dwell_time_cfg =
pHddCtx->cfg_ini->max_chan_for_dwell_time_cfg;
+ sme_set_mgmt_frm_via_wq5((tHalHandle)(pHddCtx->hHal),
+ pHddCtx->cfg_ini->sendMgmtPktViaWQ5);
vos_set_multicast_logging(pHddCtx->cfg_ini->multicast_host_msgs);
halStatus = sme_UpdateConfig( pHddCtx->hHal, smeConfig);
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 68e7e2f..6ec5636 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -3849,4 +3849,6 @@
eHalStatus sme_setBcnMissPenaltyCount(tHalHandle hHal,
tModifyRoamParamsReqParams *params);
+void sme_set_mgmt_frm_via_wq5(tHalHandle hHal,
+ tANI_BOOLEAN sendMgmtPktViaWQ5);
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 6663fc3..c01d6fd 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -13908,3 +13908,28 @@
return eHAL_STATUS_FAILURE;
}
+/**
+ * sme_set_mgmt_frm_via_wq5() - Set INI params sendMgmtPktViaWQ5 to WDA.
+ * @hal: HAL pointer
+ * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
+ *
+ * Return: void
+ */
+void sme_set_mgmt_frm_via_wq5(tHalHandle hHal, tANI_BOOLEAN sendMgmtPktViaWQ5)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+
+ status = sme_AcquireGlobalLock(&pMac->sme);
+ if (HAL_STATUS_SUCCESS(status))
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "sendMgmtPktViaWQ5 is %d", sendMgmtPktViaWQ5);
+ /* not serializing this messsage, as this is only going
+ * to set a variable in WDA/WDI
+ */
+ WDA_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
+ return;
+}
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 7e9a164..025e8567 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -2134,4 +2134,7 @@
void WDA_FWLoggingDXEdoneInd(v_U32_t logType);
+
+void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5);
+
#endif
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 462f857..a21df76 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -18913,6 +18913,17 @@
WDI_SetEnableSSR(enableSSR);
}
+/**
+ * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
+ * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
+ *
+ * Return: void
+ */
+void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
+{
+ WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
+}
+
#ifdef FEATURE_WLAN_LPHB
/*
* FUNCTION: WDA_LPHBconfRspCallback
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index 73e582e..3b4797b 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -11918,4 +11918,6 @@
(
WDI_ModifyRoamParamsReqType *params
);
+
+void WDI_SetMgmtPktViaWQ5(wpt_boolean sendMgmtPktViaWQ5);
#endif /* #ifndef WLAN_QCT_WDI_H */
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
index 0714914..3bcf995 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1289,6 +1289,9 @@
/* Roam delay statistic enabled in ini*/
wpt_uint8 roamDelayStatsEnabled;
+ /* enable/disable sendMgmtPktViaWQ5 params in ini */
+ wpt_boolean sendMgmtPktViaWQ5;
+
}WDI_ControlBlockType;
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index 4654d8e..20e8f4d 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -30240,6 +30240,18 @@
gWDICb.bEnableSSR = enableSSR;
}
+/**
+ * WDI_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to Control
+ * Block Type.
+ * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
+ *
+ * Return: void
+ */
+void WDI_SetMgmtPktViaWQ5(wpt_boolean sendMgmtPktViaWQ5)
+{
+ gWDICb.sendMgmtPktViaWQ5 = sendMgmtPktViaWQ5;
+}
+
#ifdef FEATURE_WLAN_LPHB
/**
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi_dp.c b/CORE/WDI/CP/src/wlan_qct_wdi_dp.c
index 9355787..735e691 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi_dp.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi_dp.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -458,7 +458,8 @@
pBd->dpuRF = BMUWQ_BTQM_TX_MGMT;
}
- if (ucTxFlag & WDI_USE_FW_IN_TX_PATH)
+ if (ucTxFlag & WDI_USE_FW_IN_TX_PATH ||
+ (pWDICtx->sendMgmtPktViaWQ5 && (ucType == WDI_MAC_MGMT_FRAME)))
{
WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
"iType: %d SubType %d, MAC S: %08x. MAC D: %08x., Tid=%d",