Browse Source

replace pci_* functions and constants with dma_* functions and constants

Tomás Pinho 3 years ago
parent
commit
f7c84ef7f6

+ 29 - 1
hal/rtl8821c/pci/rtl8821ce_halmac.c

@@ -44,8 +44,13 @@ static u8 pci_write_port_not_xmitframe(void *d,  u32 size, u8 *pBuf, u8 qsel)
 	rtw_hal_get_def_var(padapter, HAL_DEF_TX_PAGE_SIZE, &page_size);
 	rtw_hal_get_def_var(padapter, HAL_DEF_TX_PAGE_SIZE, &page_size);
 
 
 	/* map TX DESC buf_addr (including TX DESC + tx data) */
 	/* map TX DESC buf_addr (including TX DESC + tx data) */
+	#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 	mapping = pci_map_single(pdev, pBuf,
 	mapping = pci_map_single(pdev, pBuf,
-			size+TX_WIFI_INFO_SIZE, PCI_DMA_TODEVICE);
+		size+TX_WIFI_INFO_SIZE, PCI_DMA_TODEVICE);
+	#else
+	mapping = dma_map_single(&pdev->dev, pBuf,
+		size+TX_WIFI_INFO_SIZE, DMA_TO_DEVICE);
+	#endif
 
 
 
 
 	/* Calculate page size.
 	/* Calculate page size.
@@ -57,12 +62,22 @@ static u8 pci_write_port_not_xmitframe(void *d,  u32 size, u8 *pBuf, u8 qsel)
 	if (((size + TX_WIFI_INFO_SIZE) % page_size) > 0)
 	if (((size + TX_WIFI_INFO_SIZE) % page_size) > 0)
 		page_size_length++;
 		page_size_length++;
 
 
+	#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 	txbd = pci_alloc_consistent(pdev,
 	txbd = pci_alloc_consistent(pdev,
 		sizeof(struct tx_buf_desc), &txbd_dma);
 		sizeof(struct tx_buf_desc), &txbd_dma);
+	#else
+	txbd = dma_alloc_coherent(&pdev->dev,
+		sizeof(struct tx_buf_desc), &txbd_dma, GFP_KERNEL);
+	#endif
 
 
 	if (!txbd) {
 	if (!txbd) {
+		#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 		pci_unmap_single(pdev, mapping,
 		pci_unmap_single(pdev, mapping,
 			size + TX_WIFI_INFO_SIZE, PCI_DMA_FROMDEVICE);
 			size + TX_WIFI_INFO_SIZE, PCI_DMA_FROMDEVICE);
+		#else
+		dma_unmap_single(&pdev->dev, mapping,
+			size + TX_WIFI_INFO_SIZE, DMA_FROM_DEVICE);
+		#endif
 
 
 		return _FALSE;
 		return _FALSE;
 	}
 	}
@@ -136,10 +151,19 @@ static u8 pci_write_port_not_xmitframe(void *d,  u32 size, u8 *pBuf, u8 qsel)
 
 
 	udelay(100);
 	udelay(100);
 
 
+	#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 	pci_free_consistent(pdev, sizeof(struct tx_buf_desc), txbd, txbd_dma);
 	pci_free_consistent(pdev, sizeof(struct tx_buf_desc), txbd, txbd_dma);
+	#else
+	dma_free_coherent(&pdev->dev, sizeof(struct tx_buf_desc), txbd, txbd_dma);
+	#endif
 
 
+	#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 	pci_unmap_single(pdev, mapping,
 	pci_unmap_single(pdev, mapping,
 			size + TX_WIFI_INFO_SIZE,	 PCI_DMA_FROMDEVICE);
 			size + TX_WIFI_INFO_SIZE,	 PCI_DMA_FROMDEVICE);
+	#else
+	dma_unmap_single(&pdev->dev, mapping,
+			size + TX_WIFI_INFO_SIZE,	 DMA_FROM_DEVICE);
+	#endif
 
 
 	return ret;
 	return ret;
 
 
@@ -271,7 +295,11 @@ static u8 pci_write_data_rsvd_page_xmitframe(void *d, u8 *pBuf, u32 size)
 
 
 	/*To patch*/
 	/*To patch*/
 
 
+	#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 	pci_unmap_single(pdev, mapping,	pxmitbuf->len, PCI_DMA_TODEVICE);
 	pci_unmap_single(pdev, mapping,	pxmitbuf->len, PCI_DMA_TODEVICE);
+	#else
+	dma_unmap_single(&pdev->dev, mapping,	pxmitbuf->len, DMA_TO_DEVICE);
+	#endif
 
 
 	return _TRUE;
 	return _TRUE;
 }
 }

+ 6 - 0
hal/rtl8821c/pci/rtl8821ce_ops.c

@@ -86,9 +86,15 @@ static void rtl8821ce_reset_bd(_adapter *padapter)
 				#ifdef CONFIG_64BIT_DMA
 				#ifdef CONFIG_64BIT_DMA
 					mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(tx_bd) << 32;
 					mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(tx_bd) << 32;
 				#endif
 				#endif
+					#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 					pci_unmap_single(pdvobjpriv->ppcidev,
 					pci_unmap_single(pdvobjpriv->ppcidev,
 						mapping,
 						mapping,
 						pxmitbuf->len, PCI_DMA_TODEVICE);
 						pxmitbuf->len, PCI_DMA_TODEVICE);
+					#else
+					dma_unmap_single(&(pdvobjpriv->ppcidev)->dev,
+						mapping,
+						pxmitbuf->len, DMA_TO_DEVICE);
+					#endif
 					rtw_free_xmitbuf(t_priv, pxmitbuf);
 					rtw_free_xmitbuf(t_priv, pxmitbuf);
 				} else {
 				} else {
 					RTW_INFO("%s(): qlen(%d) is not zero, but have xmitbuf in pending queue\n",
 					RTW_INFO("%s(): qlen(%d) is not zero, but have xmitbuf in pending queue\n",

+ 54 - 2
hal/rtl8821c/pci/rtl8821ce_recv.c

@@ -208,10 +208,18 @@ static void rtl8821ce_rx_mpdu(_adapter *padapter)
 			_rtw_init_listhead(&precvframe->u.hdr.list);
 			_rtw_init_listhead(&precvframe->u.hdr.list);
 			precvframe->u.hdr.len = 0;
 			precvframe->u.hdr.len = 0;
 
 
+			#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 			pci_unmap_single(pdvobjpriv->ppcidev,
 			pci_unmap_single(pdvobjpriv->ppcidev,
 					 *((dma_addr_t *)skb->cb),
 					 *((dma_addr_t *)skb->cb),
 					 r_priv->rxbuffersize,
 					 r_priv->rxbuffersize,
 					 PCI_DMA_FROMDEVICE);
 					 PCI_DMA_FROMDEVICE);
+			#else
+			dma_unmap_single(&(pdvobjpriv->ppcidev)->dev,
+					 *((dma_addr_t *)skb->cb),
+					 r_priv->rxbuffersize,
+					 DMA_FROM_DEVICE);
+			#endif
+
 
 
 			rtl8821c_query_rx_desc(precvframe, skb->data);
 			rtl8821c_query_rx_desc(precvframe, skb->data);
 			pattrib = &precvframe->u.hdr.attrib;
 			pattrib = &precvframe->u.hdr.attrib;
@@ -244,10 +252,17 @@ static void rtl8821ce_rx_mpdu(_adapter *padapter)
 
 
 				RTW_INFO("rtl8821ce_rx_mpdu:can't allocate memory for skb copy\n");
 				RTW_INFO("rtl8821ce_rx_mpdu:can't allocate memory for skb copy\n");
 				*((dma_addr_t *) skb->cb) =
 				*((dma_addr_t *) skb->cb) =
+					#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 					pci_map_single(pdvobjpriv->ppcidev,
 					pci_map_single(pdvobjpriv->ppcidev,
 						       skb_tail_pointer(skb),
 						       skb_tail_pointer(skb),
 						       r_priv->rxbuffersize,
 						       r_priv->rxbuffersize,
 						       PCI_DMA_FROMDEVICE);
 						       PCI_DMA_FROMDEVICE);
+					#else
+					dma_map_single(&(pdvobjpriv->ppcidev)->dev,
+						       skb_tail_pointer(skb),
+						       r_priv->rxbuffersize,
+						       DMA_FROM_DEVICE);
+					#endif
 				goto done;
 				goto done;
 			}
 			}
 
 
@@ -264,10 +279,17 @@ static void rtl8821ce_rx_mpdu(_adapter *padapter)
 				rtw_free_recvframe(precvframe, pfree_recv_queue);
 				rtw_free_recvframe(precvframe, pfree_recv_queue);
 			}
 			}
 			*((dma_addr_t *) skb->cb) =
 			*((dma_addr_t *) skb->cb) =
+				#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 				pci_map_single(pdvobjpriv->ppcidev,
 				pci_map_single(pdvobjpriv->ppcidev,
 					       skb_tail_pointer(skb),
 					       skb_tail_pointer(skb),
 					       r_priv->rxbuffersize,
 					       r_priv->rxbuffersize,
 					       PCI_DMA_FROMDEVICE);
 					       PCI_DMA_FROMDEVICE);
+				#else
+				dma_map_single(&(pdvobjpriv->ppcidev)->dev,
+					       skb_tail_pointer(skb),
+					       r_priv->rxbuffersize,
+					       DMA_FROM_DEVICE);
+				#endif
 		}
 		}
 done:
 done:
 
 
@@ -369,10 +391,18 @@ int rtl8821ce_init_rxbd_ring(_adapter *padapter)
 	/* rx_queue_idx 1:RX_CMD_QUEUE */
 	/* rx_queue_idx 1:RX_CMD_QUEUE */
 	for (rx_queue_idx = 0; rx_queue_idx < 1; rx_queue_idx++) {
 	for (rx_queue_idx = 0; rx_queue_idx < 1; rx_queue_idx++) {
 		r_priv->rx_ring[rx_queue_idx].buf_desc =
 		r_priv->rx_ring[rx_queue_idx].buf_desc =
+			#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 			pci_alloc_consistent(pdev,
 			pci_alloc_consistent(pdev,
 			     sizeof(*r_priv->rx_ring[rx_queue_idx].buf_desc) *
 			     sizeof(*r_priv->rx_ring[rx_queue_idx].buf_desc) *
 					     r_priv->rxringcount,
 					     r_priv->rxringcount,
 				     &r_priv->rx_ring[rx_queue_idx].dma);
 				     &r_priv->rx_ring[rx_queue_idx].dma);
+			#else
+			dma_alloc_coherent(&pdev->dev,
+			     sizeof(*r_priv->rx_ring[rx_queue_idx].buf_desc) *
+					     r_priv->rxringcount,
+						&r_priv->rx_ring[rx_queue_idx].dma,
+				    GFP_KERNEL);
+			#endif
 
 
 		if (!r_priv->rx_ring[rx_queue_idx].buf_desc ||
 		if (!r_priv->rx_ring[rx_queue_idx].buf_desc ||
 		    (unsigned long)r_priv->rx_ring[rx_queue_idx].buf_desc &
 		    (unsigned long)r_priv->rx_ring[rx_queue_idx].buf_desc &
@@ -401,9 +431,16 @@ int rtl8821ce_init_rxbd_ring(_adapter *padapter)
 			/* just set skb->cb to mapping addr
 			/* just set skb->cb to mapping addr
 			 * for pci_unmap_single use
 			 * for pci_unmap_single use
 			 */
 			 */
+			#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 			*mapping = pci_map_single(pdev, skb_tail_pointer(skb),
 			*mapping = pci_map_single(pdev, skb_tail_pointer(skb),
-						  r_priv->rxbuffersize,
-						  PCI_DMA_FROMDEVICE);
+					r_priv->rxbuffersize,
+					PCI_DMA_FROMDEVICE);
+			#else
+			*mapping = dma_map_single(&pdev->dev, skb_tail_pointer(skb),
+					r_priv->rxbuffersize,
+					DMA_FROM_DEVICE);
+			#endif
+
 
 
 			/* Reset FS, LS, Total len */
 			/* Reset FS, LS, Total len */
 			SET_RX_BD_LS(rx_desc, 0);
 			SET_RX_BD_LS(rx_desc, 0);
@@ -445,18 +482,33 @@ void rtl8821ce_free_rxbd_ring(_adapter *padapter)
 			if (!skb)
 			if (!skb)
 				continue;
 				continue;
 
 
+			#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 			pci_unmap_single(pdev,
 			pci_unmap_single(pdev,
 					 *((dma_addr_t *) skb->cb),
 					 *((dma_addr_t *) skb->cb),
 					 r_priv->rxbuffersize,
 					 r_priv->rxbuffersize,
 					 PCI_DMA_FROMDEVICE);
 					 PCI_DMA_FROMDEVICE);
+			#else
+			dma_unmap_single(&pdev->dev,
+					 *((dma_addr_t *) skb->cb),
+					 r_priv->rxbuffersize,
+					 DMA_FROM_DEVICE);
+			#endif
 			kfree_skb(skb);
 			kfree_skb(skb);
 		}
 		}
 
 
+		#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 		pci_free_consistent(pdev,
 		pci_free_consistent(pdev,
 			    sizeof(*r_priv->rx_ring[rx_queue_idx].buf_desc) *
 			    sizeof(*r_priv->rx_ring[rx_queue_idx].buf_desc) *
 				    r_priv->rxringcount,
 				    r_priv->rxringcount,
 				    r_priv->rx_ring[rx_queue_idx].buf_desc,
 				    r_priv->rx_ring[rx_queue_idx].buf_desc,
 				    r_priv->rx_ring[rx_queue_idx].dma);
 				    r_priv->rx_ring[rx_queue_idx].dma);
+		#else
+		dma_free_coherent(&pdev->dev,
+			sizeof(*r_priv->rx_ring[rx_queue_idx].buf_desc) *
+			r_priv->rxringcount,
+			r_priv->rx_ring[rx_queue_idx].buf_desc,
+			r_priv->rx_ring[rx_queue_idx].dma);
+		#endif
 		r_priv->rx_ring[rx_queue_idx].buf_desc = NULL;
 		r_priv->rx_ring[rx_queue_idx].buf_desc = NULL;
 	}
 	}
 
 

+ 26 - 0
hal/rtl8821c/pci/rtl8821ce_xmit.c

@@ -293,8 +293,13 @@ static void rtl8821ce_update_txbd(struct xmit_frame *pxmitframe,
 	u16 page_size_length = 0;
 	u16 page_size_length = 0;
 
 
 	/* map TX DESC buf_addr (including TX DESC + tx data) */
 	/* map TX DESC buf_addr (including TX DESC + tx data) */
+	#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 	mapping = pci_map_single(pdvobjpriv->ppcidev, pxmitframe->buf_addr,
 	mapping = pci_map_single(pdvobjpriv->ppcidev, pxmitframe->buf_addr,
 				 sz + TX_WIFI_INFO_SIZE, PCI_DMA_TODEVICE);
 				 sz + TX_WIFI_INFO_SIZE, PCI_DMA_TODEVICE);
+	#else
+	mapping = dma_map_single(&(pdvobjpriv->ppcidev)->dev, pxmitframe->buf_addr,
+				 sz + TX_WIFI_INFO_SIZE, DMA_TO_DEVICE);
+	#endif
 
 
 	/* Calculate page size.
 	/* Calculate page size.
 	 * Total buffer length including TX_WIFI_INFO and PacketLen
 	 * Total buffer length including TX_WIFI_INFO and PacketLen
@@ -1248,7 +1253,11 @@ int rtl8821ce_init_txbd_ring(_adapter *padapter, unsigned int q_idx,
 
 
 	RTW_INFO("%s entries num:%d\n", __func__, entries);
 	RTW_INFO("%s entries num:%d\n", __func__, entries);
 
 
+	#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 	txbd = pci_alloc_consistent(pdev, sizeof(*txbd) * entries, &dma);
 	txbd = pci_alloc_consistent(pdev, sizeof(*txbd) * entries, &dma);
+	#else
+	txbd = dma_alloc_coherent(&pdev->dev, sizeof(*txbd) * entries, &dma, GFP_KERNEL);
+	#endif
 
 
 	if (!txbd || (unsigned long)txbd & 0xFF) {
 	if (!txbd || (unsigned long)txbd & 0xFF) {
 		RTW_INFO("Cannot allocate TXBD (q_idx = %d)\n", q_idx);
 		RTW_INFO("Cannot allocate TXBD (q_idx = %d)\n", q_idx);
@@ -1294,9 +1303,15 @@ void rtl8821ce_free_txbd_ring(_adapter *padapter, unsigned int prio)
 		#ifdef CONFIG_64BIT_DMA
 		#ifdef CONFIG_64BIT_DMA
 			mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(txbd) << 32;
 			mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(txbd) << 32;
 		#endif
 		#endif
+			#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 			pci_unmap_single(pdev,
 			pci_unmap_single(pdev,
 				mapping,
 				mapping,
 				pxmitbuf->len, PCI_DMA_TODEVICE);
 				pxmitbuf->len, PCI_DMA_TODEVICE);
+			#else
+			dma_unmap_single(&pdev->dev,
+				mapping,
+				pxmitbuf->len, DMA_TO_DEVICE);
+			#endif
 
 
 			rtw_free_xmitbuf(t_priv, pxmitbuf);
 			rtw_free_xmitbuf(t_priv, pxmitbuf);
 
 
@@ -1307,8 +1322,13 @@ void rtl8821ce_free_txbd_ring(_adapter *padapter, unsigned int prio)
 		}
 		}
 	}
 	}
 
 
+	#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 	pci_free_consistent(pdev, sizeof(*ring->buf_desc) * ring->entries,
 	pci_free_consistent(pdev, sizeof(*ring->buf_desc) * ring->entries,
 			    ring->buf_desc, ring->dma);
 			    ring->buf_desc, ring->dma);
+	#else
+	dma_free_coherent(&pdev->dev, sizeof(*ring->buf_desc) * ring->entries,
+			    ring->buf_desc, ring->dma);
+	#endif
 	ring->buf_desc = NULL;
 	ring->buf_desc = NULL;
 
 
 }
 }
@@ -1442,9 +1462,15 @@ void rtl8821ce_tx_isr(PADAPTER Adapter, int prio)
 		#ifdef CONFIG_64BIT_DMA
 		#ifdef CONFIG_64BIT_DMA
 			mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(tx_desc) << 32;
 			mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(tx_desc) << 32;
 		#endif
 		#endif
+			#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
 			pci_unmap_single(pdvobjpriv->ppcidev,
 			pci_unmap_single(pdvobjpriv->ppcidev,
 				mapping,
 				mapping,
 				pxmitbuf->len, PCI_DMA_TODEVICE);
 				pxmitbuf->len, PCI_DMA_TODEVICE);
+			#else
+			dma_unmap_single(&(pdvobjpriv->ppcidev)->dev,
+				mapping,
+				pxmitbuf->len, DMA_TO_DEVICE);
+			#endif
 			rtw_sctx_done(&pxmitbuf->sctx);
 			rtw_sctx_done(&pxmitbuf->sctx);
 			rtw_free_xmitbuf(&(pxmitbuf->padapter->xmitpriv),
 			rtw_free_xmitbuf(&(pxmitbuf->padapter->xmitpriv),
 					 pxmitbuf);
 					 pxmitbuf);

+ 16 - 1
os_dep/linux/pci_intf.c

@@ -25,7 +25,6 @@
 
 
 #endif
 #endif
 
 
-
 #if defined(PLATFORM_LINUX) && defined(PLATFORM_WINDOWS)
 #if defined(PLATFORM_LINUX) && defined(PLATFORM_WINDOWS)
 
 
 	#error "Shall be Linux or Windows, but not both!\n"
 	#error "Shall be Linux or Windows, but not both!\n"
@@ -1195,9 +1194,17 @@ static struct dvobj_priv	*pci_dvobj_init(struct pci_dev *pdev, const struct pci_
 	}
 	}
 
 
 #ifdef CONFIG_64BIT_DMA
 #ifdef CONFIG_64BIT_DMA
+	#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0))
+	if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
+	#else
 	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
 	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
+	#endif
 		RTW_INFO("RTL819xCE: Using 64bit DMA\n");
 		RTW_INFO("RTL819xCE: Using 64bit DMA\n");
+		#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0))
+		err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
+		#else
 		err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
 		err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
+		#endif
 		if (err != 0) {
 		if (err != 0) {
 			RTW_ERR("Unable to obtain 64bit DMA for consistent allocations\n");
 			RTW_ERR("Unable to obtain 64bit DMA for consistent allocations\n");
 			goto disable_picdev;
 			goto disable_picdev;
@@ -1206,8 +1213,16 @@ static struct dvobj_priv	*pci_dvobj_init(struct pci_dev *pdev, const struct pci_
 	} else
 	} else
 #endif
 #endif
 	{
 	{
+		#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0))
+		if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
+		#else
 		if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
 		if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
+		#endif
+			#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0))
+			err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
+			#else
 			err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
 			err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
+			#endif
 			if (err != 0) {
 			if (err != 0) {
 				RTW_ERR("Unable to obtain 32bit DMA for consistent allocations\n");
 				RTW_ERR("Unable to obtain 32bit DMA for consistent allocations\n");
 				goto disable_picdev;
 				goto disable_picdev;