diff --git a/hal/rtl8821c/pci/rtl8821ce_halmac.c b/hal/rtl8821c/pci/rtl8821ce_halmac.c index 9808f14..6cd5630 100755 --- a/hal/rtl8821c/pci/rtl8821ce_halmac.c +++ b/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); /* 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, - 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. @@ -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) page_size_length++; + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) txbd = pci_alloc_consistent(pdev, 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 (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_unmap_single(pdev, mapping, 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; } @@ -136,10 +151,19 @@ static u8 pci_write_port_not_xmitframe(void *d, u32 size, u8 *pBuf, u8 qsel) udelay(100); + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) 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, 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; @@ -271,7 +295,11 @@ static u8 pci_write_data_rsvd_page_xmitframe(void *d, u8 *pBuf, u32 size) /*To patch*/ + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) 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; } diff --git a/hal/rtl8821c/pci/rtl8821ce_ops.c b/hal/rtl8821c/pci/rtl8821ce_ops.c index 87d1a85..299ea25 100755 --- a/hal/rtl8821c/pci/rtl8821ce_ops.c +++ b/hal/rtl8821c/pci/rtl8821ce_ops.c @@ -86,9 +86,15 @@ static void rtl8821ce_reset_bd(_adapter *padapter) #ifdef CONFIG_64BIT_DMA mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(tx_bd) << 32; #endif + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_unmap_single(pdvobjpriv->ppcidev, mapping, 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); } else { RTW_INFO("%s(): qlen(%d) is not zero, but have xmitbuf in pending queue\n", diff --git a/hal/rtl8821c/pci/rtl8821ce_recv.c b/hal/rtl8821c/pci/rtl8821ce_recv.c index 2dadf19..2015dd4 100755 --- a/hal/rtl8821c/pci/rtl8821ce_recv.c +++ b/hal/rtl8821c/pci/rtl8821ce_recv.c @@ -208,10 +208,18 @@ static void rtl8821ce_rx_mpdu(_adapter *padapter) _rtw_init_listhead(&precvframe->u.hdr.list); precvframe->u.hdr.len = 0; + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_unmap_single(pdvobjpriv->ppcidev, *((dma_addr_t *)skb->cb), r_priv->rxbuffersize, 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); 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"); *((dma_addr_t *) skb->cb) = + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_map_single(pdvobjpriv->ppcidev, skb_tail_pointer(skb), r_priv->rxbuffersize, PCI_DMA_FROMDEVICE); + #else + dma_map_single(&(pdvobjpriv->ppcidev)->dev, + skb_tail_pointer(skb), + r_priv->rxbuffersize, + DMA_FROM_DEVICE); + #endif goto done; } @@ -264,10 +279,17 @@ static void rtl8821ce_rx_mpdu(_adapter *padapter) rtw_free_recvframe(precvframe, pfree_recv_queue); } *((dma_addr_t *) skb->cb) = + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_map_single(pdvobjpriv->ppcidev, skb_tail_pointer(skb), r_priv->rxbuffersize, PCI_DMA_FROMDEVICE); + #else + dma_map_single(&(pdvobjpriv->ppcidev)->dev, + skb_tail_pointer(skb), + r_priv->rxbuffersize, + DMA_FROM_DEVICE); + #endif } done: @@ -369,10 +391,18 @@ int rtl8821ce_init_rxbd_ring(_adapter *padapter) /* rx_queue_idx 1:RX_CMD_QUEUE */ for (rx_queue_idx = 0; rx_queue_idx < 1; rx_queue_idx++) { r_priv->rx_ring[rx_queue_idx].buf_desc = + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_alloc_consistent(pdev, sizeof(*r_priv->rx_ring[rx_queue_idx].buf_desc) * r_priv->rxringcount, &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 || (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 * for pci_unmap_single use */ + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) *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 */ SET_RX_BD_LS(rx_desc, 0); @@ -445,18 +482,33 @@ void rtl8821ce_free_rxbd_ring(_adapter *padapter) if (!skb) continue; + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_unmap_single(pdev, *((dma_addr_t *) skb->cb), r_priv->rxbuffersize, PCI_DMA_FROMDEVICE); + #else + dma_unmap_single(&pdev->dev, + *((dma_addr_t *) skb->cb), + r_priv->rxbuffersize, + DMA_FROM_DEVICE); + #endif kfree_skb(skb); } + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_free_consistent(pdev, 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); + #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; } diff --git a/hal/rtl8821c/pci/rtl8821ce_xmit.c b/hal/rtl8821c/pci/rtl8821ce_xmit.c index 5d6a87f..cbe7b23 100755 --- a/hal/rtl8821c/pci/rtl8821ce_xmit.c +++ b/hal/rtl8821c/pci/rtl8821ce_xmit.c @@ -293,8 +293,13 @@ static void rtl8821ce_update_txbd(struct xmit_frame *pxmitframe, u16 page_size_length = 0; /* 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, 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. * 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); + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) 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) { 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 mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(txbd) << 32; #endif + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_unmap_single(pdev, mapping, pxmitbuf->len, PCI_DMA_TODEVICE); + #else + dma_unmap_single(&pdev->dev, + mapping, + pxmitbuf->len, DMA_TO_DEVICE); + #endif 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, 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; } @@ -1442,9 +1462,15 @@ void rtl8821ce_tx_isr(PADAPTER Adapter, int prio) #ifdef CONFIG_64BIT_DMA mapping |= (dma_addr_t)GET_TX_BD_PHYSICAL_ADDR0_HIGH(tx_desc) << 32; #endif + #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) pci_unmap_single(pdvobjpriv->ppcidev, mapping, 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_free_xmitbuf(&(pxmitbuf->padapter->xmitpriv), pxmitbuf); diff --git a/os_dep/linux/pci_intf.c b/os_dep/linux/pci_intf.c index 4aeb9a3..1b26dcf 100644 --- a/os_dep/linux/pci_intf.c +++ b/os_dep/linux/pci_intf.c @@ -25,7 +25,6 @@ #endif - #if defined(PLATFORM_LINUX) && defined(PLATFORM_WINDOWS) #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 + #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))) { + #endif 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)); + #endif if (err != 0) { RTW_ERR("Unable to obtain 64bit DMA for consistent allocations\n"); goto disable_picdev; @@ -1206,8 +1213,16 @@ static struct dvobj_priv *pci_dvobj_init(struct pci_dev *pdev, const struct pci_ } else #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))) { + #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)); + #endif if (err != 0) { RTW_ERR("Unable to obtain 32bit DMA for consistent allocations\n"); goto disable_picdev;