From da917d573c00f18bb170d4fd56a6cbe3bc6b85df Mon Sep 17 00:00:00 2001 From: "Pamidipati, Vijay" Date: Tue, 18 Jul 2017 20:13:22 +0530 Subject: [PATCH] qcacmn: Fixes for 64-bit paddr In DP Transmit path, 32-bit variables are being used to store paddr. This will not work for 64-bit systems. Address this by making them 64-bit variables. Change-Id: I4c146649773cfd9bdc636187cb35d9d776bf072f CRs-Fixed: 2142458 --- dp/wifi3.0/dp_tx.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 23d4434656cb..1bec57322c30 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -706,6 +706,7 @@ static qdf_nbuf_t dp_tx_prepare_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf, { qdf_nbuf_t curr_nbuf = NULL; uint16_t total_len = 0; + qdf_dma_addr_t paddr; int32_t i; struct dp_tx_sg_info_s *sg_info = &msdu_info->u.sg_info; @@ -729,9 +730,9 @@ static qdf_nbuf_t dp_tx_prepare_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf, for (curr_nbuf = nbuf, i = 0; curr_nbuf; curr_nbuf = qdf_nbuf_next(curr_nbuf), i++) { - seg_info->frags[i].paddr_lo = - qdf_nbuf_get_frag_paddr(curr_nbuf, 0); - seg_info->frags[i].paddr_hi = 0x0; + paddr = qdf_nbuf_get_frag_paddr(curr_nbuf, 0); + seg_info->frags[i].paddr_lo = paddr; + seg_info->frags[i].paddr_hi = ((uint64_t)paddr >> 32); seg_info->frags[i].len = qdf_nbuf_len(curr_nbuf); seg_info->frags[i].vaddr = (void *) curr_nbuf; total_len += qdf_nbuf_len(curr_nbuf); @@ -1273,8 +1274,9 @@ static qdf_nbuf_t dp_tx_prepare_sg(struct dp_vdev *vdev, qdf_nbuf_t nbuf, return NULL; } - seg_info->frags[0].paddr_lo = qdf_nbuf_get_frag_paddr(nbuf, 0); - seg_info->frags[0].paddr_hi = 0; + paddr = qdf_nbuf_get_frag_paddr(nbuf, 0); + seg_info->frags[0].paddr_lo = paddr; + seg_info->frags[0].paddr_hi = ((uint64_t) paddr) >> 32; seg_info->frags[0].len = qdf_nbuf_headlen(nbuf); seg_info->frags[0].vaddr = (void *) nbuf; @@ -2768,7 +2770,7 @@ dp_tx_me_send_convert_ucast(struct cdp_vdev *vdev_handle, qdf_nbuf_t nbuf, /*preparing data fragment*/ data_frag.vaddr = qdf_nbuf_data(nbuf) + IEEE80211_ADDR_LEN; data_frag.paddr_lo = (uint32_t)paddr_data; - data_frag.paddr_hi = ((uint64_t)paddr_data & 0xffffffff00000000) >> 32; + data_frag.paddr_hi = (((uint64_t) paddr_data) >> 32); data_frag.len = len - DP_MAC_ADDR_LEN; for (new_mac_idx = 0; new_mac_idx < new_mac_cnt; new_mac_idx++) { @@ -2836,7 +2838,7 @@ dp_tx_me_send_convert_ucast(struct cdp_vdev *vdev_handle, qdf_nbuf_t nbuf, seg_info_new->frags[0].vaddr = (uint8_t *)mc_uc_buf; seg_info_new->frags[0].paddr_lo = (uint32_t) paddr_mcbuf; seg_info_new->frags[0].paddr_hi = - ((u64)paddr_mcbuf & 0xffffffff00000000) >> 32; + ((uint64_t) paddr_mcbuf >> 32); seg_info_new->frags[0].len = DP_MAC_ADDR_LEN; seg_info_new->frags[1] = data_frag;