Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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