Procházet zdrojové kódy

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
Pamidipati, Vijay před 7 roky
rodič
revize
da917d573c
1 změnil soubory, kde provedl 9 přidání a 7 odebrání
  1. 9 7
      dp/wifi3.0/dp_tx.c

+ 9 - 7
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;