root/include/drm/drm_vram_mm_helper.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. drm_vram_mm_of_bdev

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 
   3 #ifndef DRM_VRAM_MM_HELPER_H
   4 #define DRM_VRAM_MM_HELPER_H
   5 
   6 #include <drm/drm_file.h>
   7 #include <drm/drm_ioctl.h>
   8 #include <drm/ttm/ttm_bo_driver.h>
   9 
  10 struct drm_device;
  11 
  12 /**
  13  * struct drm_vram_mm_funcs - Callback functions for &struct drm_vram_mm
  14  * @evict_flags:        Provides an implementation for struct \
  15         &ttm_bo_driver.evict_flags
  16  * @verify_access:      Provides an implementation for \
  17         struct &ttm_bo_driver.verify_access
  18  *
  19  * These callback function integrate VRAM MM with TTM buffer objects. New
  20  * functions can be added if necessary.
  21  */
  22 struct drm_vram_mm_funcs {
  23         void (*evict_flags)(struct ttm_buffer_object *bo,
  24                             struct ttm_placement *placement);
  25         int (*verify_access)(struct ttm_buffer_object *bo, struct file *filp);
  26 };
  27 
  28 /**
  29  * struct drm_vram_mm - An instance of VRAM MM
  30  * @vram_base:  Base address of the managed video memory
  31  * @vram_size:  Size of the managed video memory in bytes
  32  * @bdev:       The TTM BO device.
  33  * @funcs:      TTM BO functions
  34  *
  35  * The fields &struct drm_vram_mm.vram_base and
  36  * &struct drm_vram_mm.vrm_size are managed by VRAM MM, but are
  37  * available for public read access. Use the field
  38  * &struct drm_vram_mm.bdev to access the TTM BO device.
  39  */
  40 struct drm_vram_mm {
  41         uint64_t vram_base;
  42         size_t vram_size;
  43 
  44         struct ttm_bo_device bdev;
  45 
  46         const struct drm_vram_mm_funcs *funcs;
  47 };
  48 
  49 /**
  50  * drm_vram_mm_of_bdev() - \
  51         Returns the container of type &struct ttm_bo_device for field bdev.
  52  * @bdev:       the TTM BO device
  53  *
  54  * Returns:
  55  * The containing instance of &struct drm_vram_mm
  56  */
  57 static inline struct drm_vram_mm *drm_vram_mm_of_bdev(
  58         struct ttm_bo_device *bdev)
  59 {
  60         return container_of(bdev, struct drm_vram_mm, bdev);
  61 }
  62 
  63 int drm_vram_mm_init(struct drm_vram_mm *vmm, struct drm_device *dev,
  64                      uint64_t vram_base, size_t vram_size,
  65                      const struct drm_vram_mm_funcs *funcs);
  66 void drm_vram_mm_cleanup(struct drm_vram_mm *vmm);
  67 
  68 int drm_vram_mm_mmap(struct file *filp, struct vm_area_struct *vma,
  69                      struct drm_vram_mm *vmm);
  70 
  71 /*
  72  * Helpers for integration with struct drm_device
  73  */
  74 
  75 struct drm_vram_mm *drm_vram_helper_alloc_mm(
  76         struct drm_device *dev, uint64_t vram_base, size_t vram_size,
  77         const struct drm_vram_mm_funcs *funcs);
  78 void drm_vram_helper_release_mm(struct drm_device *dev);
  79 
  80 /*
  81  * Helpers for &struct file_operations
  82  */
  83 
  84 int drm_vram_mm_file_operations_mmap(
  85         struct file *filp, struct vm_area_struct *vma);
  86 
  87 /**
  88  * define DRM_VRAM_MM_FILE_OPERATIONS - default callback functions for \
  89         &struct file_operations
  90  *
  91  * Drivers that use VRAM MM can use this macro to initialize
  92  * &struct file_operations with default functions.
  93  */
  94 #define DRM_VRAM_MM_FILE_OPERATIONS \
  95         .llseek         = no_llseek, \
  96         .read           = drm_read, \
  97         .poll           = drm_poll, \
  98         .unlocked_ioctl = drm_ioctl, \
  99         .compat_ioctl   = drm_compat_ioctl, \
 100         .mmap           = drm_vram_mm_file_operations_mmap, \
 101         .open           = drm_open, \
 102         .release        = drm_release \
 103 
 104 #endif

/* [<][>][^][v][top][bottom][index][help] */