/* SPDX-License-Identifier: GPL-2.0 OR MIT */

/*
 *  Xen para-virtual DRM device
 *
 * Copyright (C) 2016-2018 EPAM Systems Inc.
 *
 * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
 */

#ifndef __XEN_DRM_FRONT_GEM_H
#define __XEN_DRM_FRONT_GEM_H

struct dma_buf_attachment;
struct dma_buf_map;
struct drm_device;
struct drm_gem_object;
struct file;
struct sg_table;
struct vm_area_struct;

struct drm_gem_object *xen_drm_front_gem_create(struct drm_device *dev,
						size_t size);

struct drm_gem_object *
xen_drm_front_gem_import_sg_table(struct drm_device *dev,
				  struct dma_buf_attachment *attach,
				  struct sg_table *sgt);

struct sg_table *xen_drm_front_gem_get_sg_table(struct drm_gem_object *gem_obj);

struct page **xen_drm_front_gem_get_pages(struct drm_gem_object *obj);

void xen_drm_front_gem_free_object_unlocked(struct drm_gem_object *gem_obj);

int xen_drm_front_gem_mmap(struct file *filp, struct vm_area_struct *vma);

int xen_drm_front_gem_prime_vmap(struct drm_gem_object *gem_obj,
				 struct dma_buf_map *map);

void xen_drm_front_gem_prime_vunmap(struct drm_gem_object *gem_obj,
				    struct dma_buf_map *map);

int xen_drm_front_gem_prime_mmap(struct drm_gem_object *gem_obj,
				 struct vm_area_struct *vma);

#endif /* __XEN_DRM_FRONT_GEM_H */
