diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c
index 6e4a6ba187..b228e4fd87 100644
--- a/components/mlme/core/src/wlan_mlme_main.c
+++ b/components/mlme/core/src/wlan_mlme_main.c
@@ -620,6 +620,8 @@ mlme_init_qos_edca_params(struct wlan_objmgr_psoc *psoc,
edca_params->enable_edca_params =
cfg_get(psoc, CFG_EDCA_ENABLE_PARAM);
+ edca_params->enable_wmm_txop =
+ cfg_get(psoc, CFG_ENABLE_WMM_TXOP);
edca_params->edca_ac_vo.vo_cwmin =
cfg_get(psoc, CFG_EDCA_VO_CWMIN);
edca_params->edca_ac_vo.vo_cwmax =
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_edca_params.h b/components/mlme/dispatcher/inc/cfg_mlme_edca_params.h
index ece0a8de01..56f0c913b9 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_edca_params.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_edca_params.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -289,6 +289,28 @@
0, \
"Enable edca parameter")
+/*
+ *
+ * enable_wmm_txop - Enable WMM based txop feature
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * This ini is used to enable/disable the WMM based txop feature in FW
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_ENABLE_WMM_TXOP CFG_INI_BOOL( \
+ "enable_wmm_txop", \
+ 1, \
+ "Enable WMM TXOP")
+
/*
*
* gEdcaVoCwmin - Set Cwmin value for QCA_WLAN_AC_VO
@@ -646,6 +668,7 @@
CFG(CFG_EDCA_BK_AIFS) \
CFG(CFG_EDCA_BE_CWMIN) \
CFG(CFG_EDCA_BE_CWMAX) \
+ CFG(CFG_ENABLE_WMM_TXOP) \
CFG(CFG_EDCA_BE_AIFS)
#endif /* __CFG_MLME_EDCA__PARAM_H */
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index e67753593f..13e57ccfe0 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -395,6 +395,7 @@ struct wlan_mlme_edca_params {
struct mlme_cfg_str etsi_acvo_b;
bool enable_edca_params;
+ bool enable_wmm_txop;
struct mlme_edca_ac_vo edca_ac_vo;
struct mlme_edca_ac_vi edca_ac_vi;
struct mlme_edca_ac_bk edca_ac_bk;
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index 63d3b52878..7df4154fe0 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -2612,6 +2612,16 @@ QDF_STATUS wma_post_vdev_create_setup(struct wlan_objmgr_vdev *vdev)
status);
}
+ wma_debug("Setting WMI_VDEV_PARAM_WMM_TXOP_ENABLE: %d",
+ mac->mlme_cfg->edca_params.enable_wmm_txop);
+
+ status = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id,
+ WMI_VDEV_PARAM_WMM_TXOP_ENABLE,
+ mac->mlme_cfg->edca_params.enable_wmm_txop);
+
+ if (QDF_IS_STATUS_ERROR(status))
+ wma_err("failed to set WMM TXOP (status = %d)", status);
+
wma_debug("Setting WMI_VDEV_PARAM_DISCONNECT_TH: %d",
mac->mlme_cfg->gen.dropped_pkt_disconnect_thresh);
status = wma_vdev_set_param(