.. | .. |
---|
1 | | -/** |
---|
| 1 | +/* |
---|
2 | 2 | * \file drm_vm.c |
---|
3 | 3 | * Memory mapping for DRM |
---|
4 | 4 | * |
---|
.. | .. |
---|
33 | 33 | * OTHER DEALINGS IN THE SOFTWARE. |
---|
34 | 34 | */ |
---|
35 | 35 | |
---|
36 | | -#include <drm/drmP.h> |
---|
37 | 36 | #include <linux/export.h> |
---|
| 37 | +#include <linux/pci.h> |
---|
38 | 38 | #include <linux/seq_file.h> |
---|
| 39 | +#include <linux/vmalloc.h> |
---|
| 40 | +#include <linux/pgtable.h> |
---|
| 41 | + |
---|
39 | 42 | #if defined(__ia64__) |
---|
40 | 43 | #include <linux/efi.h> |
---|
41 | 44 | #include <linux/slab.h> |
---|
42 | 45 | #endif |
---|
43 | 46 | #include <linux/mem_encrypt.h> |
---|
44 | | -#include <asm/pgtable.h> |
---|
| 47 | + |
---|
| 48 | + |
---|
| 49 | +#include <drm/drm_agpsupport.h> |
---|
| 50 | +#include <drm/drm_device.h> |
---|
| 51 | +#include <drm/drm_drv.h> |
---|
| 52 | +#include <drm/drm_file.h> |
---|
| 53 | +#include <drm/drm_framebuffer.h> |
---|
| 54 | +#include <drm/drm_print.h> |
---|
| 55 | + |
---|
45 | 56 | #include "drm_internal.h" |
---|
46 | 57 | #include "drm_legacy.h" |
---|
47 | 58 | |
---|
.. | .. |
---|
62 | 73 | /* We don't want graphics memory to be mapped encrypted */ |
---|
63 | 74 | tmp = pgprot_decrypted(tmp); |
---|
64 | 75 | |
---|
65 | | -#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) |
---|
| 76 | +#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || \ |
---|
| 77 | + defined(__mips__) |
---|
66 | 78 | if (map->type == _DRM_REGISTERS && !(map->flags & _DRM_WRITE_COMBINING)) |
---|
67 | 79 | tmp = pgprot_noncached(tmp); |
---|
68 | 80 | else |
---|
.. | .. |
---|
73 | 85 | tmp = pgprot_writecombine(tmp); |
---|
74 | 86 | else |
---|
75 | 87 | tmp = pgprot_noncached(tmp); |
---|
76 | | -#elif defined(__sparc__) || defined(__arm__) || defined(__mips__) |
---|
| 88 | +#elif defined(__sparc__) || defined(__arm__) |
---|
77 | 89 | tmp = pgprot_noncached(tmp); |
---|
78 | 90 | #endif |
---|
79 | 91 | return tmp; |
---|
.. | .. |
---|
89 | 101 | return tmp; |
---|
90 | 102 | } |
---|
91 | 103 | |
---|
92 | | -/** |
---|
| 104 | +/* |
---|
93 | 105 | * \c fault method for AGP virtual memory. |
---|
94 | 106 | * |
---|
95 | 107 | * \param vma virtual memory area. |
---|
.. | .. |
---|
179 | 191 | } |
---|
180 | 192 | #endif |
---|
181 | 193 | |
---|
182 | | -/** |
---|
| 194 | +/* |
---|
183 | 195 | * \c nopage method for shared virtual memory. |
---|
184 | 196 | * |
---|
185 | 197 | * \param vma virtual memory area. |
---|
.. | .. |
---|
212 | 224 | return 0; |
---|
213 | 225 | } |
---|
214 | 226 | |
---|
215 | | -/** |
---|
| 227 | +/* |
---|
216 | 228 | * \c close method for shared virtual memory. |
---|
217 | 229 | * |
---|
218 | 230 | * \param vma virtual memory area. |
---|
.. | .. |
---|
256 | 268 | } |
---|
257 | 269 | |
---|
258 | 270 | if (!found_maps) { |
---|
259 | | - drm_dma_handle_t dmah; |
---|
260 | | - |
---|
261 | 271 | switch (map->type) { |
---|
262 | 272 | case _DRM_REGISTERS: |
---|
263 | 273 | case _DRM_FRAME_BUFFER: |
---|
.. | .. |
---|
271 | 281 | case _DRM_SCATTER_GATHER: |
---|
272 | 282 | break; |
---|
273 | 283 | case _DRM_CONSISTENT: |
---|
274 | | - dmah.vaddr = map->handle; |
---|
275 | | - dmah.busaddr = map->offset; |
---|
276 | | - dmah.size = map->size; |
---|
277 | | - __drm_legacy_pci_free(dev, &dmah); |
---|
| 284 | + dma_free_coherent(&dev->pdev->dev, |
---|
| 285 | + map->size, |
---|
| 286 | + map->handle, |
---|
| 287 | + map->offset); |
---|
278 | 288 | break; |
---|
279 | 289 | } |
---|
280 | 290 | kfree(map); |
---|
.. | .. |
---|
283 | 293 | mutex_unlock(&dev->struct_mutex); |
---|
284 | 294 | } |
---|
285 | 295 | |
---|
286 | | -/** |
---|
| 296 | +/* |
---|
287 | 297 | * \c fault method for DMA virtual memory. |
---|
288 | 298 | * |
---|
289 | 299 | * \param address access address. |
---|
.. | .. |
---|
318 | 328 | return 0; |
---|
319 | 329 | } |
---|
320 | 330 | |
---|
321 | | -/** |
---|
| 331 | +/* |
---|
322 | 332 | * \c fault method for scatter-gather virtual memory. |
---|
323 | 333 | * |
---|
324 | 334 | * \param address access address. |
---|
.. | .. |
---|
424 | 434 | } |
---|
425 | 435 | } |
---|
426 | 436 | |
---|
427 | | -/** |
---|
| 437 | +/* |
---|
428 | 438 | * \c close method for all virtual memory types. |
---|
429 | 439 | * |
---|
430 | 440 | * \param vma virtual memory area. |
---|
.. | .. |
---|
442 | 452 | mutex_unlock(&dev->struct_mutex); |
---|
443 | 453 | } |
---|
444 | 454 | |
---|
445 | | -/** |
---|
| 455 | +/* |
---|
446 | 456 | * mmap DMA memory. |
---|
447 | 457 | * |
---|
448 | 458 | * \param file_priv DRM file private. |
---|
.. | .. |
---|
502 | 512 | #endif |
---|
503 | 513 | } |
---|
504 | 514 | |
---|
505 | | -/** |
---|
| 515 | +/* |
---|
506 | 516 | * mmap DMA memory. |
---|
507 | 517 | * |
---|
508 | 518 | * \param file_priv DRM file private. |
---|
.. | .. |
---|
584 | 594 | vma->vm_ops = &drm_vm_ops; |
---|
585 | 595 | break; |
---|
586 | 596 | } |
---|
587 | | - /* fall through to _DRM_FRAME_BUFFER... */ |
---|
| 597 | + fallthrough; /* to _DRM_FRAME_BUFFER... */ |
---|
588 | 598 | #endif |
---|
589 | 599 | case _DRM_FRAME_BUFFER: |
---|
590 | 600 | case _DRM_REGISTERS: |
---|
.. | .. |
---|
610 | 620 | vma->vm_end - vma->vm_start, vma->vm_page_prot)) |
---|
611 | 621 | return -EAGAIN; |
---|
612 | 622 | vma->vm_page_prot = drm_dma_prot(map->type, vma); |
---|
613 | | - /* fall through to _DRM_SHM */ |
---|
| 623 | + fallthrough; /* to _DRM_SHM */ |
---|
614 | 624 | case _DRM_SHM: |
---|
615 | 625 | vma->vm_ops = &drm_vm_shm_ops; |
---|
616 | 626 | vma->vm_private_data = (void *)map; |
---|
.. | .. |
---|
646 | 656 | } |
---|
647 | 657 | EXPORT_SYMBOL(drm_legacy_mmap); |
---|
648 | 658 | |
---|
| 659 | +#if IS_ENABLED(CONFIG_DRM_LEGACY) |
---|
649 | 660 | void drm_legacy_vma_flush(struct drm_device *dev) |
---|
650 | 661 | { |
---|
651 | 662 | struct drm_vma_entry *vma, *vma_temp; |
---|
.. | .. |
---|
656 | 667 | kfree(vma); |
---|
657 | 668 | } |
---|
658 | 669 | } |
---|
| 670 | +#endif |
---|