|  | /* SPDX-License-Identifier: GPL-2.0-only */ | 
|  | /* Copyright (c) 2020 NVIDIA Corporation */ | 
|  |  | 
|  | #ifndef _TEGRA_DRM_UAPI_H | 
|  | #define _TEGRA_DRM_UAPI_H | 
|  |  | 
|  | #include <linux/dma-mapping.h> | 
|  | #include <linux/idr.h> | 
|  | #include <linux/kref.h> | 
|  | #include <linux/xarray.h> | 
|  |  | 
|  | #include <drm/drm.h> | 
|  |  | 
|  | struct drm_file; | 
|  | struct drm_device; | 
|  |  | 
|  | struct tegra_drm_file { | 
|  | /* Legacy UAPI state */ | 
|  | struct idr legacy_contexts; | 
|  | struct mutex lock; | 
|  |  | 
|  | /* New UAPI state */ | 
|  | struct xarray contexts; | 
|  | struct xarray syncpoints; | 
|  | }; | 
|  |  | 
|  | struct tegra_drm_mapping { | 
|  | struct kref ref; | 
|  |  | 
|  | struct device *dev; | 
|  | struct host1x_bo *bo; | 
|  | struct sg_table *sgt; | 
|  | enum dma_data_direction direction; | 
|  | dma_addr_t iova; | 
|  | dma_addr_t iova_end; | 
|  | }; | 
|  |  | 
|  | int tegra_drm_ioctl_channel_open(struct drm_device *drm, void *data, | 
|  | struct drm_file *file); | 
|  | int tegra_drm_ioctl_channel_close(struct drm_device *drm, void *data, | 
|  | struct drm_file *file); | 
|  | int tegra_drm_ioctl_channel_map(struct drm_device *drm, void *data, | 
|  | struct drm_file *file); | 
|  | int tegra_drm_ioctl_channel_unmap(struct drm_device *drm, void *data, | 
|  | struct drm_file *file); | 
|  | int tegra_drm_ioctl_channel_submit(struct drm_device *drm, void *data, | 
|  | struct drm_file *file); | 
|  | int tegra_drm_ioctl_syncpoint_allocate(struct drm_device *drm, void *data, | 
|  | struct drm_file *file); | 
|  | int tegra_drm_ioctl_syncpoint_free(struct drm_device *drm, void *data, | 
|  | struct drm_file *file); | 
|  | int tegra_drm_ioctl_syncpoint_wait(struct drm_device *drm, void *data, | 
|  | struct drm_file *file); | 
|  |  | 
|  | void tegra_drm_uapi_close_file(struct tegra_drm_file *file); | 
|  | void tegra_drm_mapping_put(struct tegra_drm_mapping *mapping); | 
|  |  | 
|  | #endif |