15
#include <mem/sysmalloc.h>
17
#include <embox_drm/drm_priv.h>
18
#include <embox_drm/drm_gem.h>
20
#include "etnaviv_gem.h"
21
#include "etnaviv_drv.h"
23
int etnaviv_gem_obj_add(struct drm_device *dev, struct drm_gem_object *obj) {
27
static int etnaviv_gem_new_impl(struct drm_device *dev, uint32_t size,
28
uint32_t flags, struct reservation_object *robj,
29
void *ops, struct drm_gem_object **obj) {
30
struct etnaviv_gem_object *etnaviv_obj;
31
unsigned sz = sizeof(*etnaviv_obj);
32
etnaviv_obj = sysmalloc(sz);
35
log_debug("enomem\n");
39
etnaviv_obj->flags = flags;
41
mutex_init(&etnaviv_obj->lock);
43
*obj = &etnaviv_obj->base;
48
static struct drm_gem_object *__etnaviv_gem_new(struct drm_device *dev,
49
uint32_t size, uint32_t flags) {
50
struct drm_gem_object *obj = NULL;
53
ret = etnaviv_gem_new_impl(dev, size, flags, NULL, NULL, &obj);
59
ret = drm_gem_object_init(dev, obj, size);
60
log_debug("ret %p\n", obj);
68
int etnaviv_gem_new_handle(struct drm_device *dev, struct drm_file *file,
69
uint32_t size, uint32_t flags, uint32_t *handle) {
70
struct drm_gem_object *obj;
73
obj = __etnaviv_gem_new(dev, size, flags);
78
ret = etnaviv_gem_obj_add(dev, obj);
83
return drm_gem_handle_create(file, obj, handle);
86
struct drm_gem_object *etnaviv_gem_new(struct drm_device *dev, uint32_t size,
88
struct drm_gem_object *obj;
91
obj = __etnaviv_gem_new(dev, size, flags);
95
if ((ret = etnaviv_gem_obj_add(dev, obj)) < 0) {
103
int etnaviv_gem_mmap_offset(struct drm_gem_object *obj, uint64_t *offset) {
108
struct etnaviv_vram_mapping *etnaviv_gem_mapping_get(
109
struct drm_gem_object *obj, struct etnaviv_gpu *gpu) {
110
struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
111
struct etnaviv_vram_mapping *mapping;
113
if (!(mapping = kzalloc(sizeof(*mapping), GFP_KERNEL))) {
117
mapping->object = etnaviv_obj;
118
mapping->iova = (uint32_t) obj->dma_buf - 0x10000000;