| .. | .. |
|---|
| 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 |
|---|