1From 6c66b0eaaa3e6ebaa84891298715b71f7b2f0b1c Mon Sep 17 00:00:00 2001
2From: X9VoiD <oscar.silvestrexx@gmail.com>
3Date: Mon, 13 Jun 2022 17:38:18 +0800
4Subject: [PATCH 13/16] linuxPackages.broadcom_sta: fix build for kernel 5.18+
5
6---
7 src/shared/linux_osl.c | 21 +++++++++++++++++++++
8 1 file changed, 21 insertions(+)
9
10diff --git a/src/shared/linux_osl.c b/src/shared/linux_osl.c
11index dcfc075..5a25b82 100644
12--- a/src/shared/linux_osl.c
13+++ b/src/shared/linux_osl.c
14@@ -599,6 +599,8 @@ osl_dma_alloc_consistent(osl_t *osh, uint size, uint16 align_bits, uint *alloced
15 va = kmalloc(size, GFP_ATOMIC | __GFP_ZERO);
16 if (va)
17 *pap = (ulong)__virt_to_phys(va);
18+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
19+ va = dma_alloc_coherent(&((struct pci_dev *)osh->pdev)->dev, size, (dma_addr_t*)pap, GFP_ATOMIC);
20 #else
21 va = pci_alloc_consistent(osh->pdev, size, (dma_addr_t*)pap);
22 #endif
23@@ -612,6 +614,8 @@ osl_dma_free_consistent(osl_t *osh, void *va, uint size, ulong pa)
24
25 #ifdef __ARM_ARCH_7A__
26 kfree(va);
27+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
28+ dma_free_coherent(&((struct pci_dev *)osh->pdev)->dev, size, va, (dma_addr_t)pa);
29 #else
30 pci_free_consistent(osh->pdev, size, va, (dma_addr_t)pa);
31 #endif
32@@ -623,7 +627,11 @@ osl_dma_map(osl_t *osh, void *va, uint size, int direction, void *p, hnddma_seg_
33 int dir;
34
35 ASSERT((osh && (osh->magic == OS_HANDLE_MAGIC)));
36+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
37+ dir = (direction == DMA_TX)? DMA_TO_DEVICE: DMA_FROM_DEVICE;
38+#else
39 dir = (direction == DMA_TX)? PCI_DMA_TODEVICE: PCI_DMA_FROMDEVICE;
40+#endif
41
42 #if defined(__ARM_ARCH_7A__) && defined(BCMDMASGLISTOSL)
43 if (dmah != NULL) {
44@@ -641,7 +649,11 @@ osl_dma_map(osl_t *osh, void *va, uint size, int direction, void *p, hnddma_seg_
45 ASSERT(totsegs + nsegs <= MAX_DMA_SEGS);
46 sg->page_link = 0;
47 sg_set_buf(sg, PKTDATA(osh, skb), PKTLEN(osh, skb));
48+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
49+ dma_map_single(&((struct pci_dev *)osh->pdev)->dev, PKTDATA(osh, skb), PKTLEN(osh, skb), dir);
50+#else
51 pci_map_single(osh->pdev, PKTDATA(osh, skb), PKTLEN(osh, skb), dir);
52+#endif
53 }
54 totsegs += nsegs;
55 totlen += PKTLEN(osh, skb);
56@@ -656,7 +668,11 @@ osl_dma_map(osl_t *osh, void *va, uint size, int direction, void *p, hnddma_seg_
57 }
58 #endif
59
60+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
61+ return (dma_map_single(&((struct pci_dev *)osh->pdev)->dev, va, size, dir));
62+#else
63 return (pci_map_single(osh->pdev, va, size, dir));
64+#endif
65 }
66
67 void BCMFASTPATH
68@@ -665,8 +681,13 @@ osl_dma_unmap(osl_t *osh, uint pa, uint size, int direction)
69 int dir;
70
71 ASSERT((osh && (osh->magic == OS_HANDLE_MAGIC)));
72+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
73+ dir = (direction == DMA_TX)? DMA_TO_DEVICE: DMA_FROM_DEVICE;
74+ dma_unmap_single(&((struct pci_dev *)osh->pdev)->dev, (uint32)pa, size, dir);
75+#else
76 dir = (direction == DMA_TX)? PCI_DMA_TODEVICE: PCI_DMA_FROMDEVICE;
77 pci_unmap_single(osh->pdev, (uint32)pa, size, dir);
78+#endif
79 }
80
81 #if defined(BCMDBG_ASSERT)
82--
832.45.1
84