summarylogtreecommitdiffstats
path: root/02-blackmagic-io-dma.patch
blob: 5bf6844b68327e7b66d8e0c7023bebede656358d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
diff --git a/bm_mm.c b/bm_mm.c
index 64ab876..7b2d6a0 100644
--- a/blackmagic-io-12.3a10/bm_mm.c
+++ b/blackmagic-io-12.3a10/bm_mm.c
@@ -54,7 +54,9 @@ struct bm_mmap
 	bm_user_mem_t umem; // Must be last member in struct
 };
 
-#if KERNEL_VERSION_OR_LATER(2, 6, 27)
+#if KERNEL_VERSION_OR_LATER(5, 18, 0)
+	#define bm_pci_dma_mapping_error(dev, addr) dma_mapping_error(dev, addr)
+#elif KERNEL_VERSION_OR_LATER(2, 6, 27)
 	#define bm_pci_dma_mapping_error(dev, addr) pci_dma_mapping_error(dev, addr)
 #else
 	#define bm_pci_dma_mapping_error(dev, addr) pci_dma_mapping_error(addr)
@@ -223,8 +225,13 @@ bm_dma_list_t* bm_dma_map_user_buffer(bm_pci_device_t* pci, bm_user_mem_t* umem,
 
 	for (i = 0; i < umem->length; ++i)
 	{
+	#if KERNEL_VERSION_OR_LATER(5, 18, 0)
+		dlist->addrs[i] = dma_map_page(&pci->pdev->dev, umem->pages[i], 0, PAGE_SIZE, dir);
+		if (bm_pci_dma_mapping_error(&pci->pdev->dev, dlist->addrs[i]))
+	#else
 		dlist->addrs[i] = pci_map_page(pci->pdev, umem->pages[i], 0, PAGE_SIZE, dir);
 		if (bm_pci_dma_mapping_error(pci->pdev, dlist->addrs[i]))
+	#endif
 		{
 			bm_dma_unmap_buffer(pci, dlist, dir);
 			return NULL;
@@ -246,8 +253,13 @@ bm_dma_list_t* bm_dma_map_kernel_buffer(bm_pci_device_t* pci, void* addr, vm_siz
 	dlist->contig = 1;
 	dlist->length = size;
 
+#if KERNEL_VERSION_OR_LATER(5, 18, 0)
+	dlist->addrs[0] = dma_map_single(&pci->pdev->dev, addr, size, dir);
+	if (bm_pci_dma_mapping_error(&pci->pdev->dev, dlist->addrs[0]))
+#else
 	dlist->addrs[0] = pci_map_single(pci->pdev, addr, size, dir);
 	if (bm_pci_dma_mapping_error(pci->pdev, dlist->addrs[0]))
+#endif
 	{
 		bm_dma_unmap_buffer(pci, dlist, dir);
 		return NULL;
@@ -275,8 +287,13 @@ bm_dma_list_t* bm_dma_map_kernel_buffer_vmalloc(bm_pci_device_t* pci, void* addr
 	for (i = 0; i < n_pages; ++i, offset += PAGE_SIZE)
 	{
 		struct page* page = vmalloc_to_page((void*)(aligned_addr + offset));
+	#if KERNEL_VERSION_OR_LATER(5, 18, 0)
+		dlist->addrs[i] = dma_map_page(&pci->pdev->dev, page, 0, PAGE_SIZE, dir);
+		if (bm_pci_dma_mapping_error(&pci->pdev->dev, dlist->addrs[i]))
+	#else
 		dlist->addrs[i] = pci_map_page(pci->pdev, page, 0, PAGE_SIZE, dir);
 		if (bm_pci_dma_mapping_error(pci->pdev, dlist->addrs[i]))
+	#endif
 		{
 			bm_dma_unmap_buffer(pci, dlist, dir);
 			return NULL;
@@ -292,7 +309,11 @@ void bm_dma_unmap_buffer(bm_pci_device_t* pci, bm_dma_list_t* dlist, bm_dma_dire
 	size_t i;
 	if (dlist->contig)
 	{
+	#if KERNEL_VERSION_OR_LATER(5, 18, 0)
+		dma_unmap_single(&pci->pdev->dev, dlist->addrs[0], dlist->length, dir);
+	#else
 		pci_unmap_single(pci->pdev, dlist->addrs[0], dlist->length, dir);
+	#endif
 		bm_atomic_sub(&statistics.memory_mapped, dlist->length);
 	}
 	else
@@ -301,7 +322,11 @@ void bm_dma_unmap_buffer(bm_pci_device_t* pci, bm_dma_list_t* dlist, bm_dma_dire
 		{
 			if (dlist->addrs[i])
 			{
+			#if KERNEL_VERSION_OR_LATER(5, 18, 0)
+				dma_unmap_page(&pci->pdev->dev, dlist->addrs[i], PAGE_SIZE, dir);
+			#else
 				pci_unmap_page(pci->pdev, dlist->addrs[i], PAGE_SIZE, dir);
+			#endif
 				bm_atomic_sub(&statistics.pages_mapped, 1);
 			}
 		}
diff --git a/bm_pci.c b/bm_pci.c
index 7c21e66..7e5be29 100644
--- a/blackmagic-io-12.3a10/bm_pci.c
+++ b/blackmagic-io-12.3a10/bm_pci.c
@@ -76,11 +76,19 @@ bool bm_pci_start(bm_pci_device_t* pci)
 
 	pci_set_master(pci->pdev);
 
+#if KERNEL_VERSION_OR_LATER(5, 18, 0)
+	if (dma_set_mask(&pci->pdev->dev, BM_DMA_64BIT_MASK) < 0)
+	{
+		if (dma_set_mask(&pci->pdev->dev, BM_DMA_32BIT_MASK) < 0)
+			goto bail;
+	}
+#else
 	if (pci_set_dma_mask(pci->pdev, BM_DMA_64BIT_MASK) < 0)
 	{
 		if (pci_set_dma_mask(pci->pdev, BM_DMA_32BIT_MASK) < 0)
 			goto bail;
 	}
+#endif
 
 	if (strcmp(default_irq_type, "msi") == 0)
 		pci_enable_msi(pci->pdev);