xref: /openbmc/linux/drivers/gpu/drm/tegra/uapi.h (revision c6aeaf56)
1d7c591bcSMikko Perttunen /* SPDX-License-Identifier: GPL-2.0-only */
2d7c591bcSMikko Perttunen /* Copyright (c) 2020 NVIDIA Corporation */
3d7c591bcSMikko Perttunen 
4d7c591bcSMikko Perttunen #ifndef _TEGRA_DRM_UAPI_H
5d7c591bcSMikko Perttunen #define _TEGRA_DRM_UAPI_H
6d7c591bcSMikko Perttunen 
7d7c591bcSMikko Perttunen #include <linux/dma-mapping.h>
8d7c591bcSMikko Perttunen #include <linux/idr.h>
9d7c591bcSMikko Perttunen #include <linux/kref.h>
10d7c591bcSMikko Perttunen #include <linux/xarray.h>
11d7c591bcSMikko Perttunen 
12d7c591bcSMikko Perttunen #include <drm/drm.h>
13d7c591bcSMikko Perttunen 
14d7c591bcSMikko Perttunen struct drm_file;
15d7c591bcSMikko Perttunen struct drm_device;
16d7c591bcSMikko Perttunen 
17d7c591bcSMikko Perttunen struct tegra_drm_file {
18d7c591bcSMikko Perttunen 	/* Legacy UAPI state */
19d7c591bcSMikko Perttunen 	struct idr legacy_contexts;
20d7c591bcSMikko Perttunen 	struct mutex lock;
21d7c591bcSMikko Perttunen 
22d7c591bcSMikko Perttunen 	/* New UAPI state */
23d7c591bcSMikko Perttunen 	struct xarray contexts;
24fc348336SMikko Perttunen 	struct xarray syncpoints;
25d7c591bcSMikko Perttunen };
26d7c591bcSMikko Perttunen 
27d7c591bcSMikko Perttunen struct tegra_drm_mapping {
28d7c591bcSMikko Perttunen 	struct kref ref;
29d7c591bcSMikko Perttunen 
30*c6aeaf56SThierry Reding 	struct host1x_bo_mapping *map;
31d7c591bcSMikko Perttunen 	struct host1x_bo *bo;
32*c6aeaf56SThierry Reding 
33d7c591bcSMikko Perttunen 	dma_addr_t iova;
34d7c591bcSMikko Perttunen 	dma_addr_t iova_end;
35d7c591bcSMikko Perttunen };
36d7c591bcSMikko Perttunen 
37d7c591bcSMikko Perttunen int tegra_drm_ioctl_channel_open(struct drm_device *drm, void *data,
38d7c591bcSMikko Perttunen 				 struct drm_file *file);
39d7c591bcSMikko Perttunen int tegra_drm_ioctl_channel_close(struct drm_device *drm, void *data,
40d7c591bcSMikko Perttunen 				  struct drm_file *file);
41d7c591bcSMikko Perttunen int tegra_drm_ioctl_channel_map(struct drm_device *drm, void *data,
42d7c591bcSMikko Perttunen 				struct drm_file *file);
43d7c591bcSMikko Perttunen int tegra_drm_ioctl_channel_unmap(struct drm_device *drm, void *data,
44d7c591bcSMikko Perttunen 				  struct drm_file *file);
45d7c591bcSMikko Perttunen int tegra_drm_ioctl_channel_submit(struct drm_device *drm, void *data,
46d7c591bcSMikko Perttunen 				   struct drm_file *file);
47fc348336SMikko Perttunen int tegra_drm_ioctl_syncpoint_allocate(struct drm_device *drm, void *data,
48fc348336SMikko Perttunen 				       struct drm_file *file);
49fc348336SMikko Perttunen int tegra_drm_ioctl_syncpoint_free(struct drm_device *drm, void *data,
50fc348336SMikko Perttunen 				   struct drm_file *file);
5144e96138SMikko Perttunen int tegra_drm_ioctl_syncpoint_wait(struct drm_device *drm, void *data,
5244e96138SMikko Perttunen 				   struct drm_file *file);
53d7c591bcSMikko Perttunen 
54d7c591bcSMikko Perttunen void tegra_drm_uapi_close_file(struct tegra_drm_file *file);
55d7c591bcSMikko Perttunen void tegra_drm_mapping_put(struct tegra_drm_mapping *mapping);
56d7c591bcSMikko Perttunen 
57d7c591bcSMikko Perttunen #endif
58