xref: /linux/drivers/gpu/drm/tegra/gem.h (revision d2912cb15bdda8ba4a5dd73396ad62641af2f520)
1*d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2dee8268fSThierry Reding /*
3dee8268fSThierry Reding  * Tegra host1x GEM implementation
4dee8268fSThierry Reding  *
5dee8268fSThierry Reding  * Copyright (c) 2012-2013, NVIDIA Corporation.
6dee8268fSThierry Reding  */
7dee8268fSThierry Reding 
8dee8268fSThierry Reding #ifndef __HOST1X_GEM_H
9dee8268fSThierry Reding #define __HOST1X_GEM_H
10dee8268fSThierry Reding 
11dee8268fSThierry Reding #include <linux/host1x.h>
12dee8268fSThierry Reding 
13dee8268fSThierry Reding #include <drm/drm.h>
14dee8268fSThierry Reding #include <drm/drmP.h>
15d9fc9413SDaniel Vetter #include <drm/drm_gem.h>
16dee8268fSThierry Reding 
17c134f019SThierry Reding #define TEGRA_BO_BOTTOM_UP (1 << 0)
18c134f019SThierry Reding 
19c134f019SThierry Reding enum tegra_bo_tiling_mode {
20c134f019SThierry Reding 	TEGRA_BO_TILING_MODE_PITCH,
21c134f019SThierry Reding 	TEGRA_BO_TILING_MODE_TILED,
22c134f019SThierry Reding 	TEGRA_BO_TILING_MODE_BLOCK,
23c134f019SThierry Reding };
24c134f019SThierry Reding 
25c134f019SThierry Reding struct tegra_bo_tiling {
26c134f019SThierry Reding 	enum tegra_bo_tiling_mode mode;
27c134f019SThierry Reding 	unsigned long value;
28c134f019SThierry Reding };
29773af77fSThierry Reding 
30dee8268fSThierry Reding struct tegra_bo {
31dee8268fSThierry Reding 	struct drm_gem_object gem;
32dee8268fSThierry Reding 	struct host1x_bo base;
33773af77fSThierry Reding 	unsigned long flags;
343800391dSThierry Reding 	struct sg_table *sgt;
35dee8268fSThierry Reding 	dma_addr_t paddr;
36dee8268fSThierry Reding 	void *vaddr;
37c134f019SThierry Reding 
38df06b759SThierry Reding 	struct drm_mm_node *mm;
39df06b759SThierry Reding 	unsigned long num_pages;
40df06b759SThierry Reding 	struct page **pages;
41df06b759SThierry Reding 	/* size of IOMMU mapping */
42df06b759SThierry Reding 	size_t size;
43df06b759SThierry Reding 
44c134f019SThierry Reding 	struct tegra_bo_tiling tiling;
45dee8268fSThierry Reding };
46dee8268fSThierry Reding 
47dee8268fSThierry Reding static inline struct tegra_bo *to_tegra_bo(struct drm_gem_object *gem)
48dee8268fSThierry Reding {
49dee8268fSThierry Reding 	return container_of(gem, struct tegra_bo, gem);
50dee8268fSThierry Reding }
51dee8268fSThierry Reding 
52368f622cSDmitry Osipenko static inline struct tegra_bo *host1x_to_tegra_bo(struct host1x_bo *bo)
53368f622cSDmitry Osipenko {
54368f622cSDmitry Osipenko 	return container_of(bo, struct tegra_bo, base);
55368f622cSDmitry Osipenko }
56368f622cSDmitry Osipenko 
5771c38629SThierry Reding struct tegra_bo *tegra_bo_create(struct drm_device *drm, size_t size,
58773af77fSThierry Reding 				 unsigned long flags);
59dee8268fSThierry Reding struct tegra_bo *tegra_bo_create_with_handle(struct drm_file *file,
60dee8268fSThierry Reding 					     struct drm_device *drm,
6171c38629SThierry Reding 					     size_t size,
62773af77fSThierry Reding 					     unsigned long flags,
6371c38629SThierry Reding 					     u32 *handle);
64dee8268fSThierry Reding void tegra_bo_free_object(struct drm_gem_object *gem);
65dee8268fSThierry Reding int tegra_bo_dumb_create(struct drm_file *file, struct drm_device *drm,
66dee8268fSThierry Reding 			 struct drm_mode_create_dumb *args);
67dee8268fSThierry Reding 
68dee8268fSThierry Reding extern const struct vm_operations_struct tegra_bo_vm_ops;
69dee8268fSThierry Reding 
7004c07466SThierry Reding int __tegra_gem_mmap(struct drm_gem_object *gem, struct vm_area_struct *vma);
71b6d7974dSThierry Reding int tegra_drm_mmap(struct file *file, struct vm_area_struct *vma);
72b6d7974dSThierry Reding 
733800391dSThierry Reding struct dma_buf *tegra_gem_prime_export(struct drm_device *drm,
743800391dSThierry Reding 				       struct drm_gem_object *gem,
753800391dSThierry Reding 				       int flags);
763800391dSThierry Reding struct drm_gem_object *tegra_gem_prime_import(struct drm_device *drm,
773800391dSThierry Reding 					      struct dma_buf *buf);
783800391dSThierry Reding 
79dee8268fSThierry Reding #endif
80