qcacmn: Exclude HTT metadata length when not in use during TX

Currently, when an extension descriptor is used during TX datapath, we
use HTT metadata length + msdu extension descriptor length, even we
do not fill HTT meta data. This is inefficient and hardware will end up
doing DMA of extra HTT metadata, even when not needed.
Include length of metadata in TCLdata command only if HTT metadata is
filled in.

Change-Id: Idd1b053c1c6bd8b39880efe5743980667454df0d
CRs-Fixed: 2738733
这个提交包含在:
Mohit Khanna
2020-07-16 16:09:36 -07:00
提交者 snandini
父节点 8461a8d5cd
当前提交 27f16faa4d
修改 3 个文件,包含 20 行新增2 行删除

查看文件

@@ -680,6 +680,10 @@ static QDF_STATUS dp_tx_prepare_tso(struct dp_vdev *vdev,
}
#endif
QDF_COMPILE_TIME_ASSERT(dp_tx_htt_metadata_len_check,
(DP_TX_MSDU_INFO_META_DATA_DWORDS * 4 >=
sizeof(struct htt_tx_msdu_desc_ext2_t)));
/**
* dp_tx_prepare_ext_desc() - Allocate and prepare MSDU extension descriptor
* @vdev: DP Vdev handle
@@ -713,6 +717,7 @@ struct dp_tx_ext_desc_elem_s *dp_tx_prepare_ext_desc(struct dp_vdev *vdev,
&msdu_info->meta_data[0],
sizeof(struct htt_tx_msdu_desc_ext2_t));
qdf_atomic_inc(&soc->num_tx_exception);
msdu_ext_desc->flags |= DP_TX_EXT_DESC_FLAG_METADATA_VALID;
}
switch (msdu_info->frm_type) {
@@ -1173,9 +1178,14 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
hal_tx_desc_cached = (void *) cached_desc;
if (tx_desc->flags & DP_TX_DESC_FLAG_FRAG) {
tx_desc->length = HAL_TX_EXT_DESC_WITH_META_DATA;
type = HAL_TX_BUF_TYPE_EXT_DESC;
tx_desc->dma_addr = tx_desc->msdu_ext_desc->paddr;
if (tx_desc->msdu_ext_desc->flags &
DP_TX_EXT_DESC_FLAG_METADATA_VALID)
tx_desc->length = HAL_TX_EXT_DESC_WITH_META_DATA;
else
tx_desc->length = HAL_TX_EXTENSION_DESC_LEN_BYTES;
} else {
tx_desc->length = qdf_nbuf_len(tx_desc->nbuf) -
tx_desc->pkt_offset;