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