qcacmn: Fix size mismatch between dma_map and dma_unmap in Tx path

Change calls to qdf_dma_map_nbytes_single to qdf_dma_map to match with
qdf_dma_unmap used in tx completion path. Also fix the dma_addr value that is
passed to Tx HW; we were incorrectly subracting pkt_offset instead of just
subtracting alignment bytes from dma_addr

Change-Id: I2d6f32bd44e02824a1a788e3624dcb3680f1b242
CRs-Fixed: 2004658
This commit is contained in:
Pamidipati, Vijay 2017-03-24 21:38:20 +05:30 • committed by Sandeep Puligilla
commit 110bf96741
2 changed files with 7 additions and 10 deletions

View file

@ -556,9 +556,8 @@ static qdf_nbuf_t dp_tx_prepare_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
struct dp_tx_sg_info_s *sg_info = &msdu_info->u.sg_info;
if (QDF_STATUS_SUCCESS != qdf_nbuf_map_nbytes_single(vdev->osdev, nbuf,
QDF_DMA_TO_DEVICE,
qdf_nbuf_len(nbuf))) {
if (QDF_STATUS_SUCCESS != qdf_nbuf_map(vdev->osdev, nbuf,
QDF_DMA_TO_DEVICE)) {
qdf_print("dma map error\n");
qdf_nbuf_free(nbuf);
return NULL;
@ -618,7 +617,7 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
qdf_mem_zero_outline(hal_tx_desc_cached, HAL_TX_DESC_LEN_BYTES);
if (tx_desc->flags & DP_TX_DESC_FLAG_FRAG) {
length = HAL_TX_EXTENSION_DESC_LEN_BYTES;
length = HAL_TX_EXT_DESC_WITH_META_DATA;
type = HAL_TX_BUF_TYPE_EXT_DESC;
dma_addr = tx_desc->msdu_ext_desc->paddr;
} else {
@ -634,8 +633,7 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
* Alignment padding is already accounted in pkt_offset
*
*/
dma_addr = (qdf_nbuf_mapped_paddr_get(tx_desc->nbuf) -
tx_desc->pkt_offset);
dma_addr = (qdf_nbuf_mapped_paddr_get(tx_desc->nbuf) & ~0x7);
}
@ -1045,9 +1043,8 @@ static qdf_nbuf_t dp_tx_prepare_sg(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
sg_info = &msdu_info->u.sg_info;
nr_frags = qdf_nbuf_get_nr_frags(nbuf);
if (QDF_STATUS_SUCCESS != qdf_nbuf_map_nbytes_single(vdev->osdev, nbuf,
QDF_DMA_TO_DEVICE,
qdf_nbuf_headlen(nbuf))) {
if (QDF_STATUS_SUCCESS != qdf_nbuf_map(vdev->osdev, nbuf,
QDF_DMA_TO_DEVICE)) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"dma map error\n");

View file

@ -35,7 +35,7 @@
#define DP_TX_FREE_SINGLE_BUF(soc, buf) \
do { \
qdf_nbuf_unmap(soc->osdev, buf, QDF_DMA_FROM_DEVICE); \
qdf_nbuf_unmap(soc->osdev, buf, QDF_DMA_TO_DEVICE); \
qdf_nbuf_free(buf); \
} while (0)