blob: 600f1d4b5671a2dd082978551f9431fcacf202a1 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef __AM_MESON_GEM_H
#define __AM_MESON_GEM_H
#include <drm/drm_gem.h>
#include <uapi/drm/meson_drm.h>
#include <ion/ion.h>
#include "meson_drv.h"
struct am_meson_gem_object {
struct drm_gem_object base;
unsigned int flags;
int fb;
phys_addr_t addr;
u32 bscatter;
};
/* GEM MANAGER CREATE*/
int am_meson_gem_create(struct meson_drm *drmdrv);
void am_meson_gem_cleanup(struct meson_drm *drmdrv);
int am_meson_gem_mmap(struct file *filp, struct vm_area_struct *vma);
/* GEM DUMB OPERATIONS */
int am_meson_gem_dumb_create(struct drm_file *file_priv,
struct drm_device *dev,
struct drm_mode_create_dumb *args);
int am_meson_gem_dumb_destroy(struct drm_file *file,
struct drm_device *dev,
uint32_t handle);
int am_meson_gem_create_ioctl(struct drm_device *dev,
void *data,
struct drm_file *file_priv);
int am_meson_gem_dumb_map_offset(struct drm_file *file_priv,
struct drm_device *dev,
u32 handle,
u64 *offset);
/* GEM OBJECT OPERATIONS */
struct am_meson_gem_object *
am_meson_gem_object_create(struct drm_device *dev, unsigned int flags,
unsigned long size);
void am_meson_gem_object_free(struct drm_gem_object *gem_obj);
int am_meson_gem_object_mmap(struct am_meson_gem_object *obj,
struct vm_area_struct *vma);
phys_addr_t am_meson_gem_object_get_phyaddr(struct meson_drm *drm,
struct am_meson_gem_object *
meson_gem);
/* GEM PRIME OPERATIONS */
struct sg_table *am_meson_gem_prime_get_sg_table(struct drm_gem_object *obj);
struct drm_gem_object *
am_meson_gem_prime_import_sg_table(struct drm_device *dev,
struct dma_buf_attachment *attach,
struct sg_table *sgt);
void *am_meson_gem_prime_vmap(struct drm_gem_object *obj);
void am_meson_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
int am_meson_gem_prime_mmap(struct drm_gem_object *obj,
struct vm_area_struct *vma);
#endif /* __AM_MESON_GEM_H */