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