/* * Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef DRM_TEGRA_UDRM_IOCTL_H #define DRM_TEGRA_UDRM_IOCTL_H #include #if defined(__cplusplus) extern "C" { #endif #define DRM_TEGRA_UDRM_DMABUF_MMAP 0x00 #define DRM_TEGRA_UDRM_DMABUF_DESTROY_MAPPINGS 0x01 #define DRM_TEGRA_UDRM_CLOSE_NOTIFY 0x02 #define DRM_TEGRA_UDRM_SEND_VBLANK_EVENT 0x03 #define DRM_TEGRA_UDRM_DROP_MASTER_NOTIFY 0x04 #define DRM_TEGRA_UDRM_SET_MASTER_NOTIFY 0x05 #define DRM_TEGRA_UDRM_SEND_CONNECTOR_STATUS_EVENT 0x06 struct drm_tegra_udrm_dmabuf_mmap { int fd; unsigned long offset; }; struct drm_tegra_udrm_dmabuf_destroy_mappings { int fd; }; struct drm_tegra_udrm_close_notify { int eventfd; int clear; }; struct drm_tegra_udrm_send_vblank_event { struct drm_event_vblank vblank; }; struct drm_tegra_udrm_drop_master_notify { int eventfd; int clear; }; struct drm_tegra_udrm_set_master_notify { int eventfd; int clear; }; struct drm_tegra_udrm_connector_status_event { uint32_t conn_id; uint32_t prop_id; }; #define TEGRA_UDRM_IOCTL(dir, name, str) \ DRM_##dir(DRM_COMMAND_BASE + DRM_TEGRA_UDRM_##name, \ struct drm_tegra_udrm_##str) /* In order to facilitate mmap() on the dumb buffer, UMD issues this * ioctl from handling of DRM_IOCTL_MODE_MAP_DUMB with dmabuf fd * corresponding to dumb buffer. Driver will return fake offset * to UMD which can be used by DRM clients in mmap(.., offset). * * In parameters - * fd: dmabuf fd. * * Out parameters - * offset: offset to be used in mmap(). */ #define DRM_IOCTL_TEGRA_UDRM_DMABUF_MMAP \ TEGRA_UDRM_IOCTL(IOWR, DMABUF_MMAP, dmabuf_mmap) /* UMD issues this ioctl from handling of DRM_IOCTL_MODE_DESTROY_DUMB * to destroy dmabuf fd <=> offset mapping created by driver in * DRM_IOCTL_TEGRA_UDRM_DMABUF_MMAP. * * In parameters - * fd: dmabuf fd. */ #define DRM_IOCTL_TEGRA_UDRM_DMABUF_DESTROY_MAPPINGS \ TEGRA_UDRM_IOCTL(IOW, DMABUF_DESTROY_MAPPINGS, \ dmabuf_destroy_mappings) /* UMD issues this ioctl with eventfd and then does poll() on * eventfd. Driver signals this eventfd from .preclose method. * * In parameters - * eventfd: fd created using eventfd(). * clear: When set driver will no longer signal the eventfd. */ #define DRM_IOCTL_TEGRA_UDRM_CLOSE_NOTIFY \ TEGRA_UDRM_IOCTL(IOW, CLOSE_NOTIFY, close_notify) /* UMD issues this ioctl with vblank event. Driver injects * this event into DRM framework so that it get delivered to DRM * clients waiting on poll/read on drivers fd. * * In parameters - * vblank: drm_event_vblank structure. */ #define DRM_IOCTL_TEGRA_UDRM_SEND_VBLANK_EVENT \ TEGRA_UDRM_IOCTL(IOW, SEND_VBLANK_EVENT, send_vblank_event) /* UMD issues this ioctl with eventfd and then does poll() on * eventfd. Driver signals this eventfd from .master_drop method. * * In parameters - * eventfd: fd created using eventfd(). * clear: When set driver will no longer signal the eventfd. */ #define DRM_IOCTL_TEGRA_UDRM_DROP_MASTER_NOTIFY \ TEGRA_UDRM_IOCTL(IOW, DROP_MASTER_NOTIFY, drop_master_notify) #define DRM_IOCTL_TEGRA_UDRM_SET_MASTER_NOTIFY \ TEGRA_UDRM_IOCTL(IOW, SET_MASTER_NOTIFY, set_master_notify) /* UMD issues this ioctl to generate a uevent for connector status * property change. * * In parameters - * conn_id: connector id related to the status change. * prop_id: property id related to the status change. */ #define DRM_IOCTL_TEGRA_UDRM_SEND_CONNECTOR_STATUS_EVENT \ TEGRA_UDRM_IOCTL(IOW, SEND_CONNECTOR_STATUS_EVENT, \ connector_status_event) #if defined(__cplusplus) } #endif #endif