2019-06-04 10:11:33 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
2013-03-22 16:34:08 +02:00
/*
* Tegra host1x GEM implementation
*
* Copyright ( c ) 2012 - 2013 , NVIDIA Corporation .
*/
# ifndef __HOST1X_GEM_H
# define __HOST1X_GEM_H
2013-09-24 16:30:32 +02:00
# include <linux/host1x.h>
2013-03-22 16:34:08 +02:00
# include <drm/drm.h>
2014-09-23 15:46:53 +02:00
# include <drm/drm_gem.h>
2013-03-22 16:34:08 +02:00
2014-06-03 14:48:12 +02:00
# define TEGRA_BO_BOTTOM_UP (1 << 0)
enum tegra_bo_tiling_mode {
TEGRA_BO_TILING_MODE_PITCH ,
TEGRA_BO_TILING_MODE_TILED ,
TEGRA_BO_TILING_MODE_BLOCK ,
} ;
struct tegra_bo_tiling {
enum tegra_bo_tiling_mode mode ;
unsigned long value ;
} ;
2013-10-04 22:34:01 +02:00
2013-03-22 16:34:08 +02:00
struct tegra_bo {
struct drm_gem_object gem ;
struct host1x_bo base ;
2013-10-04 22:34:01 +02:00
unsigned long flags ;
2013-12-12 10:00:43 +01:00
struct sg_table * sgt ;
2018-06-04 17:36:50 +02:00
dma_addr_t iova ;
2013-03-22 16:34:08 +02:00
void * vaddr ;
2014-06-03 14:48:12 +02:00
2014-06-26 21:41:53 +02:00
struct drm_mm_node * mm ;
unsigned long num_pages ;
struct page * * pages ;
/* size of IOMMU mapping */
size_t size ;
2014-06-03 14:48:12 +02:00
struct tegra_bo_tiling tiling ;
2013-03-22 16:34:08 +02:00
} ;
static inline struct tegra_bo * to_tegra_bo ( struct drm_gem_object * gem )
{
return container_of ( gem , struct tegra_bo , gem ) ;
}
2017-06-15 02:18:26 +03:00
static inline struct tegra_bo * host1x_to_tegra_bo ( struct host1x_bo * bo )
{
return container_of ( bo , struct tegra_bo , base ) ;
}
2014-11-03 13:23:02 +01:00
struct tegra_bo * tegra_bo_create ( struct drm_device * drm , size_t size ,
2013-10-04 22:34:01 +02:00
unsigned long flags ) ;
2013-03-22 16:34:08 +02:00
struct tegra_bo * tegra_bo_create_with_handle ( struct drm_file * file ,
2013-10-04 22:34:01 +02:00
struct drm_device * drm ,
2014-11-03 13:23:02 +01:00
size_t size ,
2013-10-04 22:34:01 +02:00
unsigned long flags ,
2014-11-03 13:23:02 +01:00
u32 * handle ) ;
2013-03-22 16:34:08 +02:00
void tegra_bo_free_object ( struct drm_gem_object * gem ) ;
int tegra_bo_dumb_create ( struct drm_file * file , struct drm_device * drm ,
struct drm_mode_create_dumb * args ) ;
extern const struct vm_operations_struct tegra_bo_vm_ops ;
2018-02-07 18:45:55 +01:00
int __tegra_gem_mmap ( struct drm_gem_object * gem , struct vm_area_struct * vma ) ;
2018-02-07 18:45:54 +01:00
int tegra_drm_mmap ( struct file * file , struct vm_area_struct * vma ) ;
2019-06-14 22:35:25 +02:00
struct dma_buf * tegra_gem_prime_export ( struct drm_gem_object * gem ,
2013-12-12 10:00:43 +01:00
int flags ) ;
struct drm_gem_object * tegra_gem_prime_import ( struct drm_device * drm ,
struct dma_buf * buf ) ;
2013-03-22 16:34:08 +02:00
# endif