hc
2023-03-21 4b55d97acc464242bcd6a8ae77b8ff37c22dec58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
 * Copyright (C) 2012 Russell King
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#ifndef ARMADA_GEM_H
#define ARMADA_GEM_H
 
#include <drm/drm_gem.h>
 
/* GEM */
struct armada_gem_object {
   struct drm_gem_object    obj;
   void            *addr;
   phys_addr_t        phys_addr;
   resource_size_t        dev_addr;
   bool            mapped;
   struct drm_mm_node    *linear;    /* for linear backed */
   struct page        *page;        /* for page backed */
   struct sg_table        *sgt;        /* for imported */
   void            (*update)(void *);
   void            *update_data;
};
 
extern const struct vm_operations_struct armada_gem_vm_ops;
 
#define drm_to_armada_gem(o) container_of(o, struct armada_gem_object, obj)
 
void armada_gem_free_object(struct drm_gem_object *);
int armada_gem_linear_back(struct drm_device *, struct armada_gem_object *);
void *armada_gem_map_object(struct drm_device *, struct armada_gem_object *);
struct armada_gem_object *armada_gem_alloc_private_object(struct drm_device *,
   size_t);
int armada_gem_dumb_create(struct drm_file *, struct drm_device *,
   struct drm_mode_create_dumb *);
struct dma_buf *armada_gem_prime_export(struct drm_device *dev,
   struct drm_gem_object *obj, int flags);
struct drm_gem_object *armada_gem_prime_import(struct drm_device *,
   struct dma_buf *);
int armada_gem_map_import(struct armada_gem_object *);
 
static inline struct armada_gem_object *armada_gem_object_lookup(
   struct drm_file *dfile, unsigned handle)
{
   struct drm_gem_object *obj = drm_gem_object_lookup(dfile, handle);
 
   return obj ? drm_to_armada_gem(obj) : NULL;
}
#endif