diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c
index 1e630d55d7..b7c0e60851 100644
--- a/components/mlme/core/src/wlan_mlme_main.c
+++ b/components/mlme/core/src/wlan_mlme_main.c
@@ -479,6 +479,14 @@ static void mlme_init_qos_cfg(struct wlan_objmgr_psoc *psoc,
cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VI);
qos_aggr_params->tx_aggr_sw_retry_threshold_vo =
cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VO);
+ qos_aggr_params->tx_non_aggr_sw_retry_threshold_be =
+ cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BE);
+ qos_aggr_params->tx_non_aggr_sw_retry_threshold_bk =
+ cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BK);
+ qos_aggr_params->tx_non_aggr_sw_retry_threshold_vi =
+ cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VI);
+ qos_aggr_params->tx_non_aggr_sw_retry_threshold_vo =
+ cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VO);
qos_aggr_params->sap_max_inactivity_override =
cfg_get(psoc, CFG_SAP_MAX_INACTIVITY_OVERRIDE);
}
diff --git a/components/mlme/dispatcher/inc/cfg_qos.h b/components/mlme/dispatcher/inc/cfg_qos.h
index 26d909ba3f..0213b961fe 100644
--- a/components/mlme/dispatcher/inc/cfg_qos.h
+++ b/components/mlme/dispatcher/inc/cfg_qos.h
@@ -294,6 +294,110 @@
CFG_VALUE_OR_DEFAULT, \
"Tx aggregation retry value for VO")
+/*
+ *
+ * gTxNonAggSwRetryBE - Configure Tx non aggregation sw retry for BE
+ * @Min: 0
+ * @Max: 64
+ * @Default: 0
+ *
+ * gTxNonAggSwRetryBE gives an option to configure Tx non aggregation sw
+ * retry for BE. This can be useful in debugging throughput issues.
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_TX_NON_AGGR_SW_RETRY_BE CFG_INI_UINT( \
+ "gTxNonAggSwRetryBE", \
+ 0, \
+ 64, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Tx non aggregation retry value for BE")
+
+/*
+ *
+ * gTxNonAggSwRetryBK - Configure Tx non aggregation sw retry for BK
+ * @Min: 0
+ * @Max: 64
+ * @Default: 0
+ *
+ * gTxNonAggSwRetryBK gives an option to configure Tx non aggregation sw
+ * retry for BK. This can be useful in debugging throughput issues.
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_TX_NON_AGGR_SW_RETRY_BK CFG_INI_UINT( \
+ "gTxNonAggSwRetryBK", \
+ 0, \
+ 64, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Tx non aggregation retry value for BK")
+
+/*
+ *
+ * gTxNonAggSwRetryVI - Configure Tx non aggregation sw retry for VI
+ * @Min: 0
+ * @Max: 64
+ * @Default: 0
+ *
+ * gTxNonAggSwRetryVI gives an option to configure Tx non aggregation sw
+ * retry for VI. This can be useful in debugging throughput issues.
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_TX_NON_AGGR_SW_RETRY_VI CFG_INI_UINT( \
+ "gTxNonAggSwRetryVI", \
+ 0, \
+ 64, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Tx non aggregation retry value for VI")
+
+/*
+ *
+ * gTxNonAggSwRetryVO - Configure Tx non aggregation sw retry for VO
+ * @Min: 0
+ * @Max: 64
+ * @Default: 0
+ *
+ * gTxNonAggSwRetryVO gives an option to configure Tx non aggregation sw
+ * retry for VO. This can be useful in debugging throughput issues.
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_TX_NON_AGGR_SW_RETRY_VO CFG_INI_UINT( \
+ "gTxNonAggSwRetryVO", \
+ 0, \
+ 64, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Tx non aggregation retry value for VO")
+
/*
*
* gSapMaxInactivityOverride - Configure
@@ -322,6 +426,7 @@
"SAP maximum inactivity override flag")
#define CFG_QOS_ALL \
+ CFG(CFG_SAP_MAX_INACTIVITY_OVERRIDE) \
CFG(CFG_TX_AGGREGATION_SIZE) \
CFG(CFG_TX_AGGREGATION_SIZEBE) \
CFG(CFG_TX_AGGREGATION_SIZEBK) \
@@ -332,6 +437,9 @@
CFG(CFG_TX_AGGR_SW_RETRY_BK) \
CFG(CFG_TX_AGGR_SW_RETRY_VI) \
CFG(CFG_TX_AGGR_SW_RETRY_VO) \
- CFG(CFG_SAP_MAX_INACTIVITY_OVERRIDE)
+ CFG(CFG_TX_NON_AGGR_SW_RETRY_BE) \
+ CFG(CFG_TX_NON_AGGR_SW_RETRY_BK) \
+ CFG(CFG_TX_NON_AGGR_SW_RETRY_VI) \
+ CFG(CFG_TX_NON_AGGR_SW_RETRY_VO)
#endif /* __CFG_MLME_QOS_H */
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index c71624e78f..743afa4f70 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -486,10 +486,14 @@ struct wlan_mlme_vht_caps {
* @tx_aggregation_size_vi: No. of MPDUs for VI queue for TX aggr
* @tx_aggregation_size_vo: No. of MPDUs for VO queue for TX aggr
* @rx_aggregation_size: No. of MPDUs for RX aggr
- * @tx_aggr_sw_retry_threshold_be: Tx aggregation sw retry for BE
- * @tx_aggr_sw_retry_threshold_bk: Tx aggregation sw retry for BK
- * @tx_aggr_sw_retry_threshold_vi: Tx aggregation sw retry for VI
- * @tx_aggr_sw_retry_threshold_vo: Tx aggregation sw retry for VO
+ * @tx_aggr_sw_retry_threshold_be: aggr sw retry threshold for BE
+ * @tx_aggr_sw_retry_threshold_bk: aggr sw retry threshold for BK
+ * @tx_aggr_sw_retry_threshold_vi: aggr sw retry threshold for VI
+ * @tx_aggr_sw_retry_threshold_vo: aggr sw retry threshold for VO
+ * @tx_non_aggr_sw_retry_threshold_be: non aggr sw retry threshold for BE
+ * @tx_non_aggr_sw_retry_threshold_bk: non aggr sw retry threshold for BK
+ * @tx_non_aggr_sw_retry_threshold_vi: non aggr sw retry threshold for VI
+ * @tx_non_aggr_sw_retry_threshold_vo: non aggr sw retry threshold for VO
* @sap_max_inactivity_override: Override updating ap_sta_inactivity from
* hostapd.conf
*/
@@ -504,6 +508,10 @@ struct wlan_mlme_qos {
uint32_t tx_aggr_sw_retry_threshold_bk;
uint32_t tx_aggr_sw_retry_threshold_vi;
uint32_t tx_aggr_sw_retry_threshold_vo;
+ uint32_t tx_non_aggr_sw_retry_threshold_be;
+ uint32_t tx_non_aggr_sw_retry_threshold_bk;
+ uint32_t tx_non_aggr_sw_retry_threshold_vi;
+ uint32_t tx_non_aggr_sw_retry_threshold_vo;
bool sap_max_inactivity_override;
};
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index 454c46a25f..377b410269 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -6309,19 +6309,27 @@ struct sir_set_tx_rx_aggregation_size {
};
/**
- * struct sir_set_tx_aggr_sw_retry_threshold - set sw retry threshold
+ * struct sir_set_tx_sw_retry_threshold - set sw retry threshold
* @vdev_id: vdev id of the session
- * @tx_aggr_sw_retry_threshold_be: sw retry threshold for BE
- * @tx_aggr_sw_retry_threshold_bk: sw retry threshold for BK
- * @tx_aggr_sw_retry_threshold_vi: sw retry threshold for VI
- * @tx_aggr_sw_retry_threshold_vo: sw retry threshold for VO
+ * @tx_aggr_sw_retry_threshold_be: aggr sw retry threshold for BE
+ * @tx_aggr_sw_retry_threshold_bk: aggr sw retry threshold for BK
+ * @tx_aggr_sw_retry_threshold_vi: aggr sw retry threshold for VI
+ * @tx_aggr_sw_retry_threshold_vo: aggr sw retry threshold for VO
+ * @tx_non_aggr_sw_retry_threshold_be: non aggr sw retry threshold for BE
+ * @tx_non_aggr_sw_retry_threshold_bk: non aggr sw retry threshold for BK
+ * @tx_non_aggr_sw_retry_threshold_vi: non aggr sw retry threshold for VI
+ * @tx_non_aggr_sw_retry_threshold_vo: non aggr sw retry threshold for VO
*/
-struct sir_set_tx_aggr_sw_retry_threshold {
+struct sir_set_tx_sw_retry_threshold {
uint8_t vdev_id;
uint32_t tx_aggr_sw_retry_threshold_be;
uint32_t tx_aggr_sw_retry_threshold_bk;
uint32_t tx_aggr_sw_retry_threshold_vi;
uint32_t tx_aggr_sw_retry_threshold_vo;
+ uint32_t tx_non_aggr_sw_retry_threshold_be;
+ uint32_t tx_non_aggr_sw_retry_threshold_bk;
+ uint32_t tx_non_aggr_sw_retry_threshold_vi;
+ uint32_t tx_non_aggr_sw_retry_threshold_vo;
};
/**
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index 923de50097..79fbb25c56 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -16948,28 +16948,36 @@ QDF_STATUS csr_issue_add_sta_for_session_req(tpAniSirGlobal pMac,
add_sta_self_req->tx_aggregation_size = qos_aggr->tx_aggregation_size;
add_sta_self_req->tx_aggregation_size_be =
- qos_aggr->tx_aggregation_size_be;
+ qos_aggr->tx_aggregation_size_be;
add_sta_self_req->tx_aggregation_size_bk =
- qos_aggr->tx_aggregation_size_bk;
+ qos_aggr->tx_aggregation_size_bk;
add_sta_self_req->tx_aggregation_size_vi =
- qos_aggr->tx_aggregation_size_vi;
+ qos_aggr->tx_aggregation_size_vi;
add_sta_self_req->tx_aggregation_size_vo =
- qos_aggr->tx_aggregation_size_vo;
+ qos_aggr->tx_aggregation_size_vo;
add_sta_self_req->rx_aggregation_size = qos_aggr->rx_aggregation_size;
add_sta_self_req->tx_aggr_sw_retry_threshold_be =
- qos_aggr->tx_aggr_sw_retry_threshold_be;
+ qos_aggr->tx_aggr_sw_retry_threshold_be;
add_sta_self_req->tx_aggr_sw_retry_threshold_bk =
- qos_aggr->tx_aggr_sw_retry_threshold_bk;
+ qos_aggr->tx_aggr_sw_retry_threshold_bk;
add_sta_self_req->tx_aggr_sw_retry_threshold_vi =
- qos_aggr->tx_aggr_sw_retry_threshold_vi;
+ qos_aggr->tx_aggr_sw_retry_threshold_vi;
add_sta_self_req->tx_aggr_sw_retry_threshold_vo =
- qos_aggr->tx_aggr_sw_retry_threshold_vo;
+ qos_aggr->tx_aggr_sw_retry_threshold_vo;
+ add_sta_self_req->tx_non_aggr_sw_retry_threshold_be =
+ qos_aggr->tx_non_aggr_sw_retry_threshold_be;
+ add_sta_self_req->tx_non_aggr_sw_retry_threshold_bk =
+ qos_aggr->tx_non_aggr_sw_retry_threshold_bk;
+ add_sta_self_req->tx_non_aggr_sw_retry_threshold_vi =
+ qos_aggr->tx_non_aggr_sw_retry_threshold_vi;
+ add_sta_self_req->tx_non_aggr_sw_retry_threshold_vo =
+ qos_aggr->tx_non_aggr_sw_retry_threshold_vo;
add_sta_self_req->enable_bcast_probe_rsp =
pMac->mlme_cfg->oce.enable_bcast_probe_rsp;
add_sta_self_req->fils_max_chan_guard_time =
- pMac->mlme_cfg->sta.fils_max_chan_guard_time;
+ pMac->mlme_cfg->sta.fils_max_chan_guard_time;
add_sta_self_req->pkt_err_disconn_th =
pMac->mlme_cfg->gen.dropped_pkt_disconnect_thresh;
add_sta_self_req->oce_feature_bitmap =
diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h
index 7308b3ee7f..c5c710d72d 100644
--- a/core/wma/inc/wma_api.h
+++ b/core/wma/inc/wma_api.h
@@ -286,7 +286,8 @@ QDF_STATUS wma_set_tx_rx_aggregation_size_per_ac
(struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size);
/**
* wma_set_sw_retry_threshold() - set sw retry threshold per AC for tx
- * @tx_rx_aggregation_size: value needs to set to firmware
+ * @handle: wma handle
+ * @tx_sw_retry_threshold: value needs to set to firmware
*
* This function sends WMI command to set the sw retry threshold per AC
* for Tx.
@@ -294,7 +295,8 @@ QDF_STATUS wma_set_tx_rx_aggregation_size_per_ac
* Return: QDF_STATUS.
*/
QDF_STATUS wma_set_sw_retry_threshold
- (struct sir_set_tx_aggr_sw_retry_threshold *tx_rx_aggregation_size);
+ (WMA_HANDLE handle,
+ struct sir_set_tx_sw_retry_threshold *tx_sw_retry_threshold);
/**
* wma_get_sar_limit() - get SAR limits from the target
* @handle: wma handle
diff --git a/core/wma/inc/wma_if.h b/core/wma/inc/wma_if.h
index 54922116db..dc46fbecf1 100644
--- a/core/wma/inc/wma_if.h
+++ b/core/wma/inc/wma_if.h
@@ -1174,10 +1174,14 @@ typedef struct sMaxTxPowerPerBandParams {
* @enable_bcast_probe_rsp: enable broadcast probe response
* @fils_max_chan_guard_time: FILS max channel guard time
* @pkt_err_disconn_th: packet drop threshold
- * @tx_aggr_sw_retry_threshold_be: sw retry threashold for be
- * @tx_aggr_sw_retry_threshold_bk: sw retry threashold for bk
- * @tx_aggr_sw_retry_threshold_vi: sw retry threashold for vi
- * @tx_aggr_sw_retry_threshold_vo: sw retry threashold for vo
+ * @tx_aggr_sw_retry_threshold_be: aggr sw retry threshold for be
+ * @tx_aggr_sw_retry_threshold_bk: aggr sw retry threshold for bk
+ * @tx_aggr_sw_retry_threshold_vi: aggr sw retry threshold for vi
+ * @tx_aggr_sw_retry_threshold_vo: aggr sw retry threshold for vo
+ * @tx_non_aggr_sw_retry_threshold_be: non aggr sw retry threshold for be
+ * @tx_non_aggr_sw_retry_threshold_bk: non aggr sw retry threshold for bk
+ * @tx_non_aggr_sw_retry_threshold_vi: non aggr sw retry threshold for vi
+ * @tx_non_aggr_sw_retry_threshold_vo: non aggr sw retry threshold for vo
*/
struct add_sta_self_params {
tSirMacAddr self_mac_addr;
@@ -1202,6 +1206,10 @@ struct add_sta_self_params {
uint32_t tx_aggr_sw_retry_threshold_bk;
uint32_t tx_aggr_sw_retry_threshold_vi;
uint32_t tx_aggr_sw_retry_threshold_vo;
+ uint32_t tx_non_aggr_sw_retry_threshold_be;
+ uint32_t tx_non_aggr_sw_retry_threshold_bk;
+ uint32_t tx_non_aggr_sw_retry_threshold_vi;
+ uint32_t tx_non_aggr_sw_retry_threshold_vo;
};
/**
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index 23f0e9afbb..d8653f28bd 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -2345,7 +2345,7 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle,
struct vdev_create_params params = { 0 };
u_int8_t vdev_id;
struct sir_set_tx_rx_aggregation_size tx_rx_aggregation_size;
- struct sir_set_tx_aggr_sw_retry_threshold tx_aggr_sw_retry_threshold;
+ struct sir_set_tx_sw_retry_threshold tx_sw_retry_threshold;
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
struct wlan_objmgr_peer *obj_peer;
struct wlan_objmgr_vdev *vdev;
@@ -2458,15 +2458,25 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle,
tx_rx_aggregation_size.tx_aggregation_size_vo =
self_sta_req->tx_aggregation_size_vo;
- tx_aggr_sw_retry_threshold.tx_aggr_sw_retry_threshold_be =
+ tx_sw_retry_threshold.tx_aggr_sw_retry_threshold_be =
self_sta_req->tx_aggr_sw_retry_threshold_be;
- tx_aggr_sw_retry_threshold.tx_aggr_sw_retry_threshold_bk =
+ tx_sw_retry_threshold.tx_aggr_sw_retry_threshold_bk =
self_sta_req->tx_aggr_sw_retry_threshold_bk;
- tx_aggr_sw_retry_threshold.tx_aggr_sw_retry_threshold_vi =
+ tx_sw_retry_threshold.tx_aggr_sw_retry_threshold_vi =
self_sta_req->tx_aggr_sw_retry_threshold_vi;
- tx_aggr_sw_retry_threshold.tx_aggr_sw_retry_threshold_vo =
+ tx_sw_retry_threshold.tx_aggr_sw_retry_threshold_vo =
self_sta_req->tx_aggr_sw_retry_threshold_vo;
- tx_aggr_sw_retry_threshold.vdev_id = self_sta_req->session_id;
+
+ tx_sw_retry_threshold.tx_non_aggr_sw_retry_threshold_be =
+ self_sta_req->tx_non_aggr_sw_retry_threshold_be;
+ tx_sw_retry_threshold.tx_non_aggr_sw_retry_threshold_bk =
+ self_sta_req->tx_non_aggr_sw_retry_threshold_bk;
+ tx_sw_retry_threshold.tx_non_aggr_sw_retry_threshold_vi =
+ self_sta_req->tx_non_aggr_sw_retry_threshold_vi;
+ tx_sw_retry_threshold.tx_non_aggr_sw_retry_threshold_vo =
+ self_sta_req->tx_non_aggr_sw_retry_threshold_vo;
+
+ tx_sw_retry_threshold.vdev_id = self_sta_req->session_id;
switch (self_sta_req->type) {
@@ -2488,7 +2498,8 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle,
wma_set_sta_sa_query_param(wma_handle, vdev_id);
}
- ret = wma_set_sw_retry_threshold(&tx_aggr_sw_retry_threshold);
+ ret = wma_set_sw_retry_threshold(wma_handle,
+ &tx_sw_retry_threshold);
if (QDF_IS_STATUS_ERROR(ret))
WMA_LOGE("failed to set retry threshold(err=%d)", ret);
break;
diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c
index 71b22ad6ad..832e703068 100644
--- a/core/wma/src/wma_features.c
+++ b/core/wma/src/wma_features.c
@@ -4790,72 +4790,112 @@ QDF_STATUS wma_set_tx_rx_aggregation_size_per_ac(
return QDF_STATUS_SUCCESS;
}
-QDF_STATUS wma_set_sw_retry_threshold(
- struct sir_set_tx_aggr_sw_retry_threshold *tx_sw_retry_threshold)
+static QDF_STATUS wma_set_sw_retry_by_qos(
+ tp_wma_handle handle, uint8_t vdev_id,
+ wmi_vdev_custom_sw_retry_type_t retry_type,
+ wmi_traffic_ac ac_type,
+ uint32_t sw_retry)
{
- tp_wma_handle wma_handle;
wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param *cmd;
int32_t len;
wmi_buf_t buf;
u_int8_t *buf_ptr;
int ret;
- int queue_num;
- uint32_t tx_aggr_retry[WMI_AC_MAX];
- wma_handle = cds_get_context(QDF_MODULE_ID_WMA);
+ len = sizeof(*cmd);
+ buf = wmi_buf_alloc(handle->wmi_handle, len);
+
+ if (!buf)
+ return QDF_STATUS_E_NOMEM;
+
+ buf_ptr = (u_int8_t *)wmi_buf_data(buf);
+ cmd = (wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param *)buf_ptr;
+
+ WMITLV_SET_HDR(&cmd->tlv_header,
+ WMITLV_TAG_STRUC_wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param,
+ WMITLV_GET_STRUCT_TLVLEN(
+ wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param));
+
+ cmd->vdev_id = vdev_id;
+ cmd->ac_type = ac_type;
+ cmd->sw_retry_type = retry_type;
+ cmd->sw_retry_th = sw_retry;
+
+ wma_debug("ac_type: %d re_type: %d threshold: %d vid: %d",
+ cmd->ac_type, cmd->sw_retry_type,
+ cmd->sw_retry_th, cmd->vdev_id);
+
+ ret = wmi_unified_cmd_send(handle->wmi_handle,
+ buf, len,
+ WMI_VDEV_SET_CUSTOM_SW_RETRY_TH_CMDID);
+
+ if (ret) {
+ wmi_buf_free(buf);
+ return QDF_STATUS_E_FAILURE;
+ }
+
+ return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS wma_set_sw_retry_threshold(
+ WMA_HANDLE handle,
+ struct sir_set_tx_sw_retry_threshold *tx_sw_retry_threshold)
+{
+ QDF_STATUS ret;
+ tp_wma_handle wma_handle;
+ uint8_t vdev_id;
+ int retry_type, queue_num;
+ uint32_t tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_MAX][WMI_AC_MAX];
+ uint32_t sw_retry;
+
+ wma_handle = (tp_wma_handle)handle;
if (!tx_sw_retry_threshold) {
- WMA_LOGE("%s: invalid pointer", __func__);
+ wma_err("%s: invalid pointer", __func__);
return QDF_STATUS_E_INVAL;
}
if (!wma_handle) {
- WMA_LOGE("%s: WMA context is invald!", __func__);
+ wma_err("%s: WMA context is invalid!", __func__);
return QDF_STATUS_E_INVAL;
}
- tx_aggr_retry[0] =
+ tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR][WMI_AC_BE] =
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_be;
- tx_aggr_retry[1] =
+ tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR][WMI_AC_BK] =
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_bk;
- tx_aggr_retry[2] =
+ tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR][WMI_AC_VI] =
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_vi;
- tx_aggr_retry[3] =
+ tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR][WMI_AC_VO] =
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_vo;
- for (queue_num = 0; queue_num < WMI_AC_MAX; queue_num++) {
- if (tx_aggr_retry[queue_num] == 0)
- continue;
+ tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR][WMI_AC_BE] =
+ tx_sw_retry_threshold->tx_non_aggr_sw_retry_threshold_be;
+ tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR][WMI_AC_BK] =
+ tx_sw_retry_threshold->tx_non_aggr_sw_retry_threshold_bk;
+ tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR][WMI_AC_VI] =
+ tx_sw_retry_threshold->tx_non_aggr_sw_retry_threshold_vi;
+ tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR][WMI_AC_VO] =
+ tx_sw_retry_threshold->tx_non_aggr_sw_retry_threshold_vo;
- len = sizeof(*cmd);
- buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
- if (!buf)
- return QDF_STATUS_E_NOMEM;
+ retry_type = WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR;
+ while (retry_type < WMI_VDEV_CUSTOM_SW_RETRY_TYPE_MAX) {
+ for (queue_num = 0; queue_num < WMI_AC_MAX; queue_num++) {
+ if (tx_sw_retry[retry_type][queue_num] == 0)
+ continue;
- buf_ptr = (u_int8_t *)wmi_buf_data(buf);
- cmd =
- (wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param *)buf_ptr;
+ vdev_id = tx_sw_retry_threshold->vdev_id;
+ sw_retry = tx_sw_retry[retry_type][queue_num];
+ ret = wma_set_sw_retry_by_qos(wma_handle,
+ vdev_id,
+ retry_type,
+ queue_num,
+ sw_retry);
- WMITLV_SET_HDR(&cmd->tlv_header,
- WMITLV_TAG_STRUC_wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param,
- WMITLV_GET_STRUCT_TLVLEN(
- wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param));
-
- cmd->vdev_id = tx_sw_retry_threshold->vdev_id;
- cmd->ac_type = queue_num;
- cmd->sw_retry_type = WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR;
- cmd->sw_retry_th = tx_aggr_retry[queue_num];
-
- WMA_LOGD("queue: %d type: %d threshold: %d vdev: %d",
- queue_num, cmd->sw_retry_type,
- cmd->sw_retry_th, cmd->vdev_id);
-
- ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
- WMI_VDEV_SET_CUSTOM_SW_RETRY_TH_CMDID);
- if (ret) {
- wmi_buf_free(buf);
- return QDF_STATUS_E_FAILURE;
+ if (QDF_IS_STATUS_ERROR(ret))
+ return ret;
}
+ retry_type++;
}
return QDF_STATUS_SUCCESS;