linux/include/drm/drm_vram_mm_helper.h
<<
>>
Prefs
   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
  10struct 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 */
  22struct 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 */
  40struct 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 */
  57static 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
  63int 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);
  66void drm_vram_mm_cleanup(struct drm_vram_mm *vmm);
  67
  68int 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
  75struct 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);
  78void drm_vram_helper_release_mm(struct drm_device *dev);
  79
  80/*
  81 * Helpers for &struct file_operations
  82 */
  83
  84int 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
 105