[WCNCR00166605]cert: Modification flow control threshold value for WMM certification
[Description]
Change netif_stop_subqueue threshold for different priority AC queues.
Change-Id: I970e444a6070a08df7c397a4985fdb7bacbfd203
Signed-off-by: Ryan Hou <ryan.hou@mediatek.com>
CR-Id: WCNCR00166605
Feature: cert
Reviewed-on: http://gerrit.mediatek.inc:8080/1255180
CheckPatch: Check Patch <srv_checkpatch@mediatek.com>
Reviewed-by: TH3 Huang <th3.huang@mediatek.com>
Reviewed-by: Wayne Guo <wayne.guo@mediatek.com>
Build: srv_neptune_adm <srv_neptune_adm@mediatek.com>
diff --git a/os/linux/gl_kal.c b/os/linux/gl_kal.c
index 5be6e6d..b67cfaa 100644
--- a/os/linux/gl_kal.c
+++ b/os/linux/gl_kal.c
@@ -1503,14 +1503,40 @@
* Else, remians the original threshold.
*/
if (prGlueInfo->prAdapter->rWifiVar.ucTpTestMode == ENUM_TP_TEST_MODE_SIGMA_AC_N_PMF) {
+ P_BSS_INFO_T prWmmBssInfo = prGlueInfo->prAdapter->aprBssInfo[ucBssIndex];
+
if ((u2QueueIdx < 3) &&
- (GLUE_GET_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[ucBssIndex][u2QueueIdx+1])
- > 64))
- u4MaxTxPendingNum = (prGlueInfo->prAdapter->rWifiVar.u4NetifStopTh >> 3);
+ (GLUE_GET_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[ucBssIndex][u2QueueIdx+1])
+ > CFG_CERT_WMM_MAX_TX_PENDING)) {
+ /*
+ * Use au8Statistics[RX_SIZE_ERR_DROP_COUNT] to track RX traffic in certification.
+ */
+ if ((prWmmBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) &&
+ ((prDev->stats.rx_packets -
+ (prGlueInfo->prAdapter->rRxCtrl.au8Statistics[RX_SIZE_ERR_DROP_COUNT]))
+ > CFG_CERT_WMM_MAX_RX_NUM))
+
+ u4MaxTxPendingNum = CFG_CERT_WMM_LOW_STOP_TX_WITH_RX;
+
+ else
+ u4MaxTxPendingNum = CFG_CERT_WMM_LOW_STOP_TX_WO_RX;
+ }
else if ((u2QueueIdx > 0) &&
(GLUE_GET_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[ucBssIndex][u2QueueIdx-1])
- > 64))
- u4MaxTxPendingNum = (prGlueInfo->prAdapter->rWifiVar.u4NetifStopTh * 3);
+ > CFG_CERT_WMM_MAX_TX_PENDING)) {
+ /*
+ * Use au8Statistics[RX_SIZE_ERR_DROP_COUNT] to track RX traffic in certification.
+ */
+ if ((prWmmBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) &&
+ ((prDev->stats.rx_packets -
+ (prGlueInfo->prAdapter->rRxCtrl.au8Statistics[RX_SIZE_ERR_DROP_COUNT]))
+ > CFG_CERT_WMM_MAX_RX_NUM))
+
+ u4MaxTxPendingNum = CFG_CERT_WMM_HIGH_STOP_TX_WITH_RX;
+
+ else
+ u4MaxTxPendingNum = CFG_CERT_WMM_HIGH_STOP_TX_WO_RX;
+ }
else
u4MaxTxPendingNum = prGlueInfo->prAdapter->rWifiVar.u4NetifStopTh;
}
@@ -1525,6 +1551,10 @@
GLUE_GET_REF_CNT(prGlueInfo->i4TxPendingFrameNum),
GLUE_GET_REF_CNT(prGlueInfo->ai4TxPendingFrameNumPerQueue[ucBssIndex]
[u2QueueIdx]));
+
+ /* Re-use au8Statistics[RX_SIZE_ERR_DROP_COUNT] buffer to track RX traffic in certification */
+ if (prGlueInfo->prAdapter->rWifiVar.ucTpTestMode == ENUM_TP_TEST_MODE_SIGMA_AC_N_PMF)
+ prGlueInfo->prAdapter->rRxCtrl.au8Statistics[RX_SIZE_ERR_DROP_COUNT] = prDev->stats.rx_packets;
}
/* Update NetDev statisitcs */
diff --git a/os/linux/include/gl_os.h b/os/linux/include/gl_os.h
index b1e7dad..f5aaea1 100644
--- a/os/linux/include/gl_os.h
+++ b/os/linux/include/gl_os.h
@@ -93,6 +93,14 @@
#define CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD 512 /* packets */
#define CFG_TX_START_NETIF_PER_QUEUE_THRESHOLD 128 /* packets */
+/* WMM Certification Related */
+#define CFG_CERT_WMM_MAX_TX_PENDING 20
+#define CFG_CERT_WMM_MAX_RX_NUM 10
+#define CFG_CERT_WMM_HIGH_STOP_TX_WITH_RX (CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD * 3)
+#define CFG_CERT_WMM_HIGH_STOP_TX_WO_RX (CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD * 2)
+#define CFG_CERT_WMM_LOW_STOP_TX_WITH_RX (CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD >> 4)
+#define CFG_CERT_WMM_LOW_STOP_TX_WO_RX (CFG_TX_STOP_NETIF_PER_QUEUE_THRESHOLD >> 3)
+
#define CHIP_NAME "MT6632"
#define DRV_NAME "["CHIP_NAME"]: "