XenevaOS
Loading...
Searching...
No Matches
Classes | Macros | Enumerations
drm_gem.h File Reference
#include <linux/kref.h>
#include <linux/dma-buf.h>
#include <linux/dma-resv.h>
#include <linux/list.h>
#include <linux/mutex.h>
#include <drm/drm_vma_manager.h>
Include dependency graph for drm_gem.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  drm_gem_object_funcs
 
struct  drm_gem_lru
 
struct  drm_gem_object
 

Macros

#define DRM_GEM_FOPS
 

Enumerations

enum  drm_gem_object_status { DRM_GEM_OBJECT_RESIDENT = BIT(0) , DRM_GEM_OBJECT_PURGEABLE = BIT(1) , DRM_GEM_OBJECT_ACTIVE = BIT(2) }
 

: name for the generated structure

DEFINE_DRM_GEM_FOPS() - macro to generate file operations for GEM drivers

This macro autogenerates a suitable &struct file_operations for GEM based drivers, which can be assigned to &drm_driver.fops. Note that this structure cannot be shared between drivers, because it contains a reference to the current module using THIS_MODULE.

Note that the declaration is already marked as static - if you need a non-static version of this you're probably doing it wrong and will break the THIS_MODULE reference by accident.

#define DEFINE_DRM_GEM_FOPS(name)
 
#define drm_gem_get_unmapped_area   NULL
 
#define drm_gem_gpuva_assert_lock_held(gpuvm, obj)   do {} while (0)
 
#define drm_gem_for_each_gpuvm_bo(entry__, obj__)    list_for_each_entry(entry__, &(obj__)->gpuva.list, list.entry.gem)
 
#define drm_gem_for_each_gpuvm_bo_safe(entry__, next__, obj__)    list_for_each_entry_safe(entry__, next__, &(obj__)->gpuva.list, list.entry.gem)
 
void drm_gem_object_release (struct drm_gem_object *obj)
 
void drm_gem_object_free (struct kref *kref)
 
int drm_gem_object_init (struct drm_device *dev, struct drm_gem_object *obj, size_t size)
 
void drm_gem_private_object_init (struct drm_device *dev, struct drm_gem_object *obj, size_t size)
 
void drm_gem_private_object_fini (struct drm_gem_object *obj)
 
void drm_gem_vm_open (struct vm_area_struct *vma)
 
void drm_gem_vm_close (struct vm_area_struct *vma)
 
int drm_gem_mmap_obj (struct drm_gem_object *obj, unsigned long obj_size, struct vm_area_struct *vma)
 
int drm_gem_mmap (struct file *filp, struct vm_area_struct *vma)
 
 __attribute__ ((nonnull)) static inline void __drm_gem_object_put(struct drm_gem_object *obj)
 
int drm_gem_handle_create (struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep)
 
int drm_gem_handle_delete (struct drm_file *filp, u32 handle)
 
void drm_gem_free_mmap_offset (struct drm_gem_object *obj)
 
int drm_gem_create_mmap_offset (struct drm_gem_object *obj)
 
int drm_gem_create_mmap_offset_size (struct drm_gem_object *obj, size_t size)
 
struct page ** drm_gem_get_pages (struct drm_gem_object *obj)
 
void drm_gem_put_pages (struct drm_gem_object *obj, struct page **pages, bool dirty, bool accessed)
 
void drm_gem_lock (struct drm_gem_object *obj)
 
void drm_gem_unlock (struct drm_gem_object *obj)
 
int drm_gem_vmap (struct drm_gem_object *obj, struct iosys_map *map)
 
void drm_gem_vunmap (struct drm_gem_object *obj, struct iosys_map *map)
 
int drm_gem_objects_lookup (struct drm_file *filp, void __user *bo_handles, int count, struct drm_gem_object ***objs_out)
 
struct drm_gem_object * drm_gem_object_lookup (struct drm_file *filp, u32 handle)
 
long drm_gem_dma_resv_wait (struct drm_file *filep, u32 handle, bool wait_all, unsigned long timeout)
 
int drm_gem_lock_reservations (struct drm_gem_object **objs, int count, struct ww_acquire_ctx *acquire_ctx)
 
void drm_gem_unlock_reservations (struct drm_gem_object **objs, int count, struct ww_acquire_ctx *acquire_ctx)
 
int drm_gem_dumb_map_offset (struct drm_file *file, struct drm_device *dev, u32 handle, u64 *offset)
 
void drm_gem_lru_init (struct drm_gem_lru *lru)
 
void drm_gem_lru_remove (struct drm_gem_object *obj)
 
void drm_gem_lru_move_tail_locked (struct drm_gem_lru *lru, struct drm_gem_object *obj)
 
void drm_gem_lru_move_tail (struct drm_gem_lru *lru, struct drm_gem_object *obj)
 
unsigned long drm_gem_lru_scan (struct drm_device *dev, struct drm_gem_lru *lru, unsigned int nr_to_scan, unsigned long *remaining, bool(*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket), struct ww_acquire_ctx *ticket)
 
int drm_gem_evict_locked (struct drm_gem_object *obj)
 

Macro Definition Documentation

◆ DEFINE_DRM_GEM_FOPS

#define DEFINE_DRM_GEM_FOPS (   name)
Value:
static const struct file_operations name = {\
.owner = THIS_MODULE,\
}
struct drm_crtc struct drm_plane struct drm_plane const struct drm_crtc_funcs const char * name
Definition drm_crtc.h:1242
#define DRM_GEM_FOPS
Definition drm_gem.h:464
#define THIS_MODULE
Definition module.h:110
Definition fs.h:67

◆ DRM_GEM_FOPS

#define DRM_GEM_FOPS
Value:
.open = drm_open,\
.release = drm_release,\
.unlocked_ioctl = drm_ioctl,\
.compat_ioctl = drm_compat_ioctl,\
.poll = drm_poll,\
.read = drm_read,\
.llseek = noop_llseek,\
.get_unmapped_area = drm_gem_get_unmapped_area,\
.mmap = drm_gem_mmap, \
.fop_flags = FOP_UNSIGNED_OFFSET
ssize_t drm_read(struct file *filp, char __user *buffer, size_t count, loff_t *offset)
int drm_open(struct inode *inode, struct file *filp)
__poll_t drm_poll(struct file *filp, struct poll_table_struct *wait)
int drm_release(struct inode *inode, struct file *filp)
int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
#define drm_gem_get_unmapped_area
Definition drm_gem.h:543
long drm_ioctl(struct file *filp, unsigned int cmd, uintptr_t arg)
#define drm_compat_ioctl
Definition drm_ioctl.h:177
#define FOP_UNSIGNED_OFFSET
Definition mm.h:136

DRM_GEM_FOPS - Default drm GEM file operations

This macro provides a shorthand for setting the GEM file ops in the &file_operations structure. If all you need are the default ops, use DEFINE_DRM_GEM_FOPS instead.

◆ drm_gem_for_each_gpuvm_bo

#define drm_gem_for_each_gpuvm_bo (   entry__,
  obj__ 
)     list_for_each_entry(entry__, &(obj__)->gpuva.list, list.entry.gem)

drm_gem_for_each_gpuvm_bo() - iterator to walk over a list of &drm_gpuvm_bo @entry__: &drm_gpuvm_bo structure to assign to in each iteration step @obj__: the &drm_gem_object the &drm_gpuvm_bo to walk are associated with

This iterator walks over all &drm_gpuvm_bo structures associated with the &drm_gem_object.

◆ drm_gem_for_each_gpuvm_bo_safe

#define drm_gem_for_each_gpuvm_bo_safe (   entry__,
  next__,
  obj__ 
)     list_for_each_entry_safe(entry__, next__, &(obj__)->gpuva.list, list.entry.gem)

drm_gem_for_each_gpuvm_bo_safe() - iterator to safely walk over a list of &drm_gpuvm_bo @entry__: &drm_gpuvm_bostructure to assign to in each iteration step @next__: &next &drm_gpuvm_bo to store the next step @obj__: the &drm_gem_object the &drm_gpuvm_bo to walk are associated with

This iterator walks over all &drm_gpuvm_bo structures associated with the &drm_gem_object. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements.

◆ drm_gem_get_unmapped_area

#define drm_gem_get_unmapped_area   NULL

◆ drm_gem_gpuva_assert_lock_held

#define drm_gem_gpuva_assert_lock_held (   gpuvm,
  obj 
)    do {} while (0)

Enumeration Type Documentation

◆ drm_gem_object_status

enum drm_gem_object_status - bitmask of object state for fdinfo reporting @DRM_GEM_OBJECT_RESIDENT: object is resident in memory (ie. not unpinned) @DRM_GEM_OBJECT_PURGEABLE: object marked as purgeable by userspace @DRM_GEM_OBJECT_ACTIVE: object is currently used by an active submission

Bitmask of status used for fdinfo memory stats, see &drm_gem_object_funcs.status and drm_show_fdinfo(). Note that an object can report DRM_GEM_OBJECT_PURGEABLE and be active or not resident, in which case drm_show_fdinfo() will not account for it as purgeable. So drivers do not need to check if the buffer is idle and resident to return this bit, i.e. userspace can mark a buffer as purgeable even while it is still busy on the GPU. It will not get reported in the puregeable stats until it becomes idle. The status gem object func does not need to consider this.

Enumerator
DRM_GEM_OBJECT_RESIDENT 
DRM_GEM_OBJECT_PURGEABLE 
DRM_GEM_OBJECT_ACTIVE 

Function Documentation

◆ __attribute__()

__attribute__ ( (nonnull)  )

◆ drm_gem_create_mmap_offset()

int drm_gem_create_mmap_offset ( struct drm_gem_object *  obj)

◆ drm_gem_create_mmap_offset_size()

int drm_gem_create_mmap_offset_size ( struct drm_gem_object *  obj,
size_t  size 
)

◆ drm_gem_dma_resv_wait()

long drm_gem_dma_resv_wait ( struct drm_file *  filep,
u32  handle,
bool  wait_all,
unsigned long  timeout 
)

◆ drm_gem_dumb_map_offset()

int drm_gem_dumb_map_offset ( struct drm_file *  file,
struct drm_device *  dev,
u32  handle,
u64 *  offset 
)

◆ drm_gem_evict_locked()

int drm_gem_evict_locked ( struct drm_gem_object *  obj)

◆ drm_gem_free_mmap_offset()

void drm_gem_free_mmap_offset ( struct drm_gem_object *  obj)

◆ drm_gem_get_pages()

struct page ** drm_gem_get_pages ( struct drm_gem_object *  obj)

◆ drm_gem_handle_create()

int drm_gem_handle_create ( struct drm_file *  file_priv,
struct drm_gem_object *  obj,
u32 *  handlep 
)

◆ drm_gem_handle_delete()

int drm_gem_handle_delete ( struct drm_file *  filp,
u32  handle 
)

◆ drm_gem_lock()

void drm_gem_lock ( struct drm_gem_object *  obj)

◆ drm_gem_lock_reservations()

int drm_gem_lock_reservations ( struct drm_gem_object **  objs,
int  count,
struct ww_acquire_ctx *  acquire_ctx 
)

◆ drm_gem_lru_init()

void drm_gem_lru_init ( struct drm_gem_lru *  lru)

◆ drm_gem_lru_move_tail()

void drm_gem_lru_move_tail ( struct drm_gem_lru *  lru,
struct drm_gem_object *  obj 
)

◆ drm_gem_lru_move_tail_locked()

void drm_gem_lru_move_tail_locked ( struct drm_gem_lru *  lru,
struct drm_gem_object *  obj 
)

◆ drm_gem_lru_remove()

void drm_gem_lru_remove ( struct drm_gem_object *  obj)

◆ drm_gem_lru_scan()

unsigned long drm_gem_lru_scan ( struct drm_device *  dev,
struct drm_gem_lru *  lru,
unsigned int  nr_to_scan,
unsigned long *  remaining,
bool(*)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket)  shrink,
struct ww_acquire_ctx *  ticket 
)

◆ drm_gem_mmap()

int drm_gem_mmap ( struct file *  filp,
struct vm_area_struct *  vma 
)

◆ drm_gem_mmap_obj()

int drm_gem_mmap_obj ( struct drm_gem_object *  obj,
unsigned long  obj_size,
struct vm_area_struct *  vma 
)

◆ drm_gem_object_free()

void drm_gem_object_free ( struct kref *  kref)

◆ drm_gem_object_init()

int drm_gem_object_init ( struct drm_device *  dev,
struct drm_gem_object *  obj,
size_t  size 
)

◆ drm_gem_object_lookup()

struct drm_gem_object * drm_gem_object_lookup ( struct drm_file *  filp,
u32  handle 
)

◆ drm_gem_object_release()

void drm_gem_object_release ( struct drm_gem_object *  obj)

◆ drm_gem_objects_lookup()

int drm_gem_objects_lookup ( struct drm_file *  filp,
void __user *  bo_handles,
int  count,
struct drm_gem_object ***  objs_out 
)

◆ drm_gem_private_object_fini()

void drm_gem_private_object_fini ( struct drm_gem_object *  obj)

◆ drm_gem_private_object_init()

void drm_gem_private_object_init ( struct drm_device *  dev,
struct drm_gem_object *  obj,
size_t  size 
)

◆ drm_gem_put_pages()

void drm_gem_put_pages ( struct drm_gem_object *  obj,
struct page **  pages,
bool  dirty,
bool  accessed 
)

◆ drm_gem_unlock()

void drm_gem_unlock ( struct drm_gem_object *  obj)

◆ drm_gem_unlock_reservations()

void drm_gem_unlock_reservations ( struct drm_gem_object **  objs,
int  count,
struct ww_acquire_ctx *  acquire_ctx 
)

◆ drm_gem_vm_close()

void drm_gem_vm_close ( struct vm_area_struct *  vma)

◆ drm_gem_vm_open()

void drm_gem_vm_open ( struct vm_area_struct *  vma)

◆ drm_gem_vmap()

int drm_gem_vmap ( struct drm_gem_object *  obj,
struct iosys_map *  map 
)

◆ drm_gem_vunmap()

void drm_gem_vunmap ( struct drm_gem_object *  obj,
struct iosys_map *  map 
)