qcacmn: Implement SWLM support for multi TX queue

Update SWLM data structures and API's to support
multi TX queue based traffic.

Change-Id: I67921a749b61b3c717f33f770095fbb4d3062e2f
CRs-Fixed: 3161165
This commit is contained in:
Karthik Kantamneni
2022-03-07 14:48:39 +05:30
committed by Madan Koyyalamudi
parent 73a570940f
commit d98299184b
6 changed files with 99 additions and 45 deletions

View File

@@ -1396,21 +1396,31 @@ void dp_vdev_peer_stats_update_protocol_cnt_tx(struct dp_vdev *vdev_hdl,
/**
* dp_tx_update_stats() - Update soc level tx stats
* @soc: DP soc handle
* @nbuf: packet being transmitted
* @tx_desc: TX descriptor reference
* @ring_id: TCL ring id
*
* Returns: none
*/
void dp_tx_update_stats(struct dp_soc *soc,
qdf_nbuf_t nbuf)
struct dp_tx_desc_s *tx_desc,
uint8_t ring_id)
{
DP_STATS_INC_PKT(soc, tx.egress, 1, qdf_nbuf_len(nbuf));
uint32_t stats_len = 0;
if (tx_desc->frm_type == dp_tx_frm_tso)
stats_len = tx_desc->msdu_ext_desc->tso_desc->seg.total_len;
else
stats_len = qdf_nbuf_len(tx_desc->nbuf);
DP_STATS_INC_PKT(soc, tx.egress[ring_id], 1, stats_len);
}
int
dp_tx_attempt_coalescing(struct dp_soc *soc, struct dp_vdev *vdev,
struct dp_tx_desc_s *tx_desc,
uint8_t tid,
struct dp_tx_msdu_info_s *msdu_info)
struct dp_tx_msdu_info_s *msdu_info,
uint8_t ring_id)
{
struct dp_swlm *swlm = &soc->swlm;
union swlm_data swlm_query_data;
@@ -1423,21 +1433,28 @@ dp_tx_attempt_coalescing(struct dp_soc *soc, struct dp_vdev *vdev,
tcl_data.nbuf = tx_desc->nbuf;
tcl_data.tid = tid;
tcl_data.ring_id = ring_id;
if (tx_desc->frm_type == dp_tx_frm_tso) {
tcl_data.pkt_len =
tx_desc->msdu_ext_desc->tso_desc->seg.total_len;
} else {
tcl_data.pkt_len = qdf_nbuf_len(tx_desc->nbuf);
}
tcl_data.num_ll_connections = vdev->num_latency_critical_conn;
swlm_query_data.tcl_data = &tcl_data;
status = dp_swlm_tcl_pre_check(soc, &tcl_data);
if (QDF_IS_STATUS_ERROR(status)) {
dp_swlm_tcl_reset_session_data(soc);
DP_STATS_INC(swlm, tcl.coalesce_fail, 1);
dp_swlm_tcl_reset_session_data(soc, ring_id);
DP_STATS_INC(swlm, tcl[ring_id].coalesce_fail, 1);
return 0;
}
ret = dp_swlm_query_policy(soc, TCL_DATA, swlm_query_data);
if (ret) {
DP_STATS_INC(swlm, tcl.coalesce_success, 1);
DP_STATS_INC(swlm, tcl[ring_id].coalesce_success, 1);
} else {
DP_STATS_INC(swlm, tcl.coalesce_fail, 1);
DP_STATS_INC(swlm, tcl[ring_id].coalesce_fail, 1);
}
return ret;