13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
33d0407baSopenharmony_ci * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
43d0407baSopenharmony_ci * Copyright (c) 2009-2010, Code Aurora Forum.
53d0407baSopenharmony_ci * All rights reserved.
63d0407baSopenharmony_ci *
73d0407baSopenharmony_ci * Author: Rickard E. (Rik) Faith <faith@valinux.com>
83d0407baSopenharmony_ci * Author: Gareth Hughes <gareth@valinux.com>
93d0407baSopenharmony_ci *
103d0407baSopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a
113d0407baSopenharmony_ci * copy of this software and associated documentation files (the "Software"),
123d0407baSopenharmony_ci * to deal in the Software without restriction, including without limitation
133d0407baSopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense,
143d0407baSopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the
153d0407baSopenharmony_ci * Software is furnished to do so, subject to the following conditions:
163d0407baSopenharmony_ci *
173d0407baSopenharmony_ci * The above copyright notice and this permission notice (including the next
183d0407baSopenharmony_ci * paragraph) shall be included in all copies or substantial portions of the
193d0407baSopenharmony_ci * Software.
203d0407baSopenharmony_ci *
213d0407baSopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
223d0407baSopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
233d0407baSopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
243d0407baSopenharmony_ci * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
253d0407baSopenharmony_ci * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
263d0407baSopenharmony_ci * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
273d0407baSopenharmony_ci * OTHER DEALINGS IN THE SOFTWARE.
283d0407baSopenharmony_ci */
293d0407baSopenharmony_ci
303d0407baSopenharmony_ci#ifndef _DRM_FILE_H_
313d0407baSopenharmony_ci#define _DRM_FILE_H_
323d0407baSopenharmony_ci
333d0407baSopenharmony_ci#include <linux/types.h>
343d0407baSopenharmony_ci#include <linux/completion.h>
353d0407baSopenharmony_ci#include <linux/idr.h>
363d0407baSopenharmony_ci
373d0407baSopenharmony_ci#include <uapi/drm/drm.h>
383d0407baSopenharmony_ci
393d0407baSopenharmony_ci#include <drm/drm_prime.h>
403d0407baSopenharmony_ci
413d0407baSopenharmony_cistruct dma_fence;
423d0407baSopenharmony_cistruct drm_file;
433d0407baSopenharmony_cistruct drm_device;
443d0407baSopenharmony_cistruct device;
453d0407baSopenharmony_cistruct file;
463d0407baSopenharmony_ci
473d0407baSopenharmony_ci/*
483d0407baSopenharmony_ci * Not sure we want to have drm_minor here in the end, but to avoid
493d0407baSopenharmony_ci * header include loops we need it here for now.
503d0407baSopenharmony_ci */
513d0407baSopenharmony_ci
523d0407baSopenharmony_ci/* Note that the order of this enum is ABI (it determines
533d0407baSopenharmony_ci * /dev/dri/renderD* numbers).
543d0407baSopenharmony_ci */
553d0407baSopenharmony_cienum drm_minor_type {
563d0407baSopenharmony_ci    DRM_MINOR_PRIMARY,
573d0407baSopenharmony_ci    DRM_MINOR_CONTROL,
583d0407baSopenharmony_ci    DRM_MINOR_RENDER,
593d0407baSopenharmony_ci};
603d0407baSopenharmony_ci
613d0407baSopenharmony_ci/**
623d0407baSopenharmony_ci * struct drm_minor - DRM device minor structure
633d0407baSopenharmony_ci *
643d0407baSopenharmony_ci * This structure represents a DRM minor number for device nodes in /dev.
653d0407baSopenharmony_ci * Entirely opaque to drivers and should never be inspected directly by drivers.
663d0407baSopenharmony_ci * Drivers instead should only interact with &struct drm_file and of course
673d0407baSopenharmony_ci * &struct drm_device, which is also where driver-private data and resources can
683d0407baSopenharmony_ci * be attached to.
693d0407baSopenharmony_ci */
703d0407baSopenharmony_cistruct drm_minor {
713d0407baSopenharmony_ci    /* private: */
723d0407baSopenharmony_ci    int index;           /* Minor device number */
733d0407baSopenharmony_ci    int type;            /* Control or render */
743d0407baSopenharmony_ci    struct device *kdev; /* Linux device */
753d0407baSopenharmony_ci    struct drm_device *dev;
763d0407baSopenharmony_ci
773d0407baSopenharmony_ci    struct dentry *debugfs_root;
783d0407baSopenharmony_ci
793d0407baSopenharmony_ci    struct list_head debugfs_list;
803d0407baSopenharmony_ci    struct mutex debugfs_lock; /* Protects debugfs_list. */
813d0407baSopenharmony_ci};
823d0407baSopenharmony_ci
833d0407baSopenharmony_ci/**
843d0407baSopenharmony_ci * struct drm_pending_event - Event queued up for userspace to read
853d0407baSopenharmony_ci *
863d0407baSopenharmony_ci * This represents a DRM event. Drivers can use this as a generic completion
873d0407baSopenharmony_ci * mechanism, which supports kernel-internal &struct completion, &struct dma_fence
883d0407baSopenharmony_ci * and also the DRM-specific &struct drm_event delivery mechanism.
893d0407baSopenharmony_ci */
903d0407baSopenharmony_cistruct drm_pending_event {
913d0407baSopenharmony_ci    /**
923d0407baSopenharmony_ci     * @completion:
933d0407baSopenharmony_ci     *
943d0407baSopenharmony_ci     * Optional pointer to a kernel internal completion signalled when
953d0407baSopenharmony_ci     * drm_send_event() is called, useful to internally synchronize with
963d0407baSopenharmony_ci     * nonblocking operations.
973d0407baSopenharmony_ci     */
983d0407baSopenharmony_ci    struct completion *completion;
993d0407baSopenharmony_ci
1003d0407baSopenharmony_ci    /**
1013d0407baSopenharmony_ci     * @completion_release
1023d0407baSopenharmony_ci     *
1033d0407baSopenharmony_ci     * Optional callback currently only used by the atomic modeset helpers
1043d0407baSopenharmony_ci     * to clean up the reference count for the structure @completion is
1053d0407baSopenharmony_ci     * stored in.
1063d0407baSopenharmony_ci     */
1073d0407baSopenharmony_ci    void (*completion_release)(struct completion *completion);
1083d0407baSopenharmony_ci
1093d0407baSopenharmony_ci    /**
1103d0407baSopenharmony_ci     * @event:
1113d0407baSopenharmony_ci     *
1123d0407baSopenharmony_ci     * Pointer to the actual event that should be sent to userspace to be
1133d0407baSopenharmony_ci     * read using drm_read(). Can be optional, since nowadays events are
1143d0407baSopenharmony_ci     * also used to signal kernel internal threads with @completion or DMA
1153d0407baSopenharmony_ci     * transactions using @fence.
1163d0407baSopenharmony_ci     */
1173d0407baSopenharmony_ci    struct drm_event *event;
1183d0407baSopenharmony_ci
1193d0407baSopenharmony_ci    /**
1203d0407baSopenharmony_ci     * @fence:
1213d0407baSopenharmony_ci     *
1223d0407baSopenharmony_ci     * Optional DMA fence to unblock other hardware transactions which
1233d0407baSopenharmony_ci     * depend upon the nonblocking DRM operation this event represents.
1243d0407baSopenharmony_ci     */
1253d0407baSopenharmony_ci    struct dma_fence *fence;
1263d0407baSopenharmony_ci
1273d0407baSopenharmony_ci    /**
1283d0407baSopenharmony_ci     * @file_priv:
1293d0407baSopenharmony_ci     *
1303d0407baSopenharmony_ci     * &struct drm_file where @event should be delivered to. Only set when
1313d0407baSopenharmony_ci     * @event is set.
1323d0407baSopenharmony_ci     */
1333d0407baSopenharmony_ci    struct drm_file *file_priv;
1343d0407baSopenharmony_ci
1353d0407baSopenharmony_ci    /**
1363d0407baSopenharmony_ci     * @link:
1373d0407baSopenharmony_ci     *
1383d0407baSopenharmony_ci     * Double-linked list to keep track of this event. Can be used by the
1393d0407baSopenharmony_ci     * driver up to the point when it calls drm_send_event(), after that
1403d0407baSopenharmony_ci     * this list entry is owned by the core for its own book-keeping.
1413d0407baSopenharmony_ci     */
1423d0407baSopenharmony_ci    struct list_head link;
1433d0407baSopenharmony_ci
1443d0407baSopenharmony_ci    /**
1453d0407baSopenharmony_ci     * @pending_link:
1463d0407baSopenharmony_ci     *
1473d0407baSopenharmony_ci     * Entry on &drm_file.pending_event_list, to keep track of all pending
1483d0407baSopenharmony_ci     * events for @file_priv, to allow correct unwinding of them when
1493d0407baSopenharmony_ci     * userspace closes the file before the event is delivered.
1503d0407baSopenharmony_ci     */
1513d0407baSopenharmony_ci    struct list_head pending_link;
1523d0407baSopenharmony_ci};
1533d0407baSopenharmony_ci
1543d0407baSopenharmony_ci/**
1553d0407baSopenharmony_ci * struct drm_file - DRM file private data
1563d0407baSopenharmony_ci *
1573d0407baSopenharmony_ci * This structure tracks DRM state per open file descriptor.
1583d0407baSopenharmony_ci */
1593d0407baSopenharmony_cistruct drm_file {
1603d0407baSopenharmony_ci    /**
1613d0407baSopenharmony_ci     * @authenticated:
1623d0407baSopenharmony_ci     *
1633d0407baSopenharmony_ci     * Whether the client is allowed to submit rendering, which for legacy
1643d0407baSopenharmony_ci     * nodes means it must be authenticated.
1653d0407baSopenharmony_ci     *
1663d0407baSopenharmony_ci     * See also the :ref:`section on primary nodes and authentication
1673d0407baSopenharmony_ci     * <drm_primary_node>`.
1683d0407baSopenharmony_ci     */
1693d0407baSopenharmony_ci    bool authenticated;
1703d0407baSopenharmony_ci
1713d0407baSopenharmony_ci    /**
1723d0407baSopenharmony_ci     * @stereo_allowed:
1733d0407baSopenharmony_ci     *
1743d0407baSopenharmony_ci     * True when the client has asked us to expose stereo 3D mode flags.
1753d0407baSopenharmony_ci     */
1763d0407baSopenharmony_ci    bool stereo_allowed;
1773d0407baSopenharmony_ci
1783d0407baSopenharmony_ci    /**
1793d0407baSopenharmony_ci     * @universal_planes:
1803d0407baSopenharmony_ci     *
1813d0407baSopenharmony_ci     * True if client understands CRTC primary planes and cursor planes
1823d0407baSopenharmony_ci     * in the plane list. Automatically set when @atomic is set.
1833d0407baSopenharmony_ci     */
1843d0407baSopenharmony_ci    bool universal_planes;
1853d0407baSopenharmony_ci
1863d0407baSopenharmony_ci    /** @atomic: True if client understands atomic properties. */
1873d0407baSopenharmony_ci    bool atomic;
1883d0407baSopenharmony_ci
1893d0407baSopenharmony_ci    /**
1903d0407baSopenharmony_ci     * @aspect_ratio_allowed:
1913d0407baSopenharmony_ci     *
1923d0407baSopenharmony_ci     * True, if client can handle picture aspect ratios, and has requested
1933d0407baSopenharmony_ci     * to pass this information along with the mode.
1943d0407baSopenharmony_ci     */
1953d0407baSopenharmony_ci    bool aspect_ratio_allowed;
1963d0407baSopenharmony_ci
1973d0407baSopenharmony_ci    /**
1983d0407baSopenharmony_ci     * @writeback_connectors:
1993d0407baSopenharmony_ci     *
2003d0407baSopenharmony_ci     * True if client understands writeback connectors
2013d0407baSopenharmony_ci     */
2023d0407baSopenharmony_ci    bool writeback_connectors;
2033d0407baSopenharmony_ci
2043d0407baSopenharmony_ci    /**
2053d0407baSopenharmony_ci     * @was_master:
2063d0407baSopenharmony_ci     *
2073d0407baSopenharmony_ci     * This client has or had, master capability. Protected by struct
2083d0407baSopenharmony_ci     * &drm_device.master_mutex.
2093d0407baSopenharmony_ci     *
2103d0407baSopenharmony_ci     * This is used to ensure that CAP_SYS_ADMIN is not enforced, if the
2113d0407baSopenharmony_ci     * client is or was master in the past.
2123d0407baSopenharmony_ci     */
2133d0407baSopenharmony_ci    bool was_master;
2143d0407baSopenharmony_ci
2153d0407baSopenharmony_ci    /**
2163d0407baSopenharmony_ci     * @is_master:
2173d0407baSopenharmony_ci     *
2183d0407baSopenharmony_ci     * This client is the creator of @master. Protected by struct
2193d0407baSopenharmony_ci     * &drm_device.master_mutex.
2203d0407baSopenharmony_ci     *
2213d0407baSopenharmony_ci     * See also the :ref:`section on primary nodes and authentication
2223d0407baSopenharmony_ci     * <drm_primary_node>`.
2233d0407baSopenharmony_ci     */
2243d0407baSopenharmony_ci    bool is_master;
2253d0407baSopenharmony_ci
2263d0407baSopenharmony_ci    /**
2273d0407baSopenharmony_ci     * @master:
2283d0407baSopenharmony_ci     *
2293d0407baSopenharmony_ci     * Master this node is currently associated with. Only relevant if
2303d0407baSopenharmony_ci     * drm_is_primary_client() returns true. Note that this only
2313d0407baSopenharmony_ci     * matches &drm_device.master if the master is the currently active one.
2323d0407baSopenharmony_ci     *
2333d0407baSopenharmony_ci     * See also @authentication and @is_master and the :ref:`section on
2343d0407baSopenharmony_ci     * primary nodes and authentication <drm_primary_node>`.
2353d0407baSopenharmony_ci     */
2363d0407baSopenharmony_ci    struct drm_master *master;
2373d0407baSopenharmony_ci
2383d0407baSopenharmony_ci    /** @pid: Process that opened this file. */
2393d0407baSopenharmony_ci    struct pid *pid;
2403d0407baSopenharmony_ci
2413d0407baSopenharmony_ci    /** @magic: Authentication magic, see @authenticated. */
2423d0407baSopenharmony_ci    drm_magic_t magic;
2433d0407baSopenharmony_ci
2443d0407baSopenharmony_ci    /**
2453d0407baSopenharmony_ci     * @lhead:
2463d0407baSopenharmony_ci     *
2473d0407baSopenharmony_ci     * List of all open files of a DRM device, linked into
2483d0407baSopenharmony_ci     * &drm_device.filelist. Protected by &drm_device.filelist_mutex.
2493d0407baSopenharmony_ci     */
2503d0407baSopenharmony_ci    struct list_head lhead;
2513d0407baSopenharmony_ci
2523d0407baSopenharmony_ci    /** @minor: &struct drm_minor for this file. */
2533d0407baSopenharmony_ci    struct drm_minor *minor;
2543d0407baSopenharmony_ci
2553d0407baSopenharmony_ci    /**
2563d0407baSopenharmony_ci     * @object_idr:
2573d0407baSopenharmony_ci     *
2583d0407baSopenharmony_ci     * Mapping of mm object handles to object pointers. Used by the GEM
2593d0407baSopenharmony_ci     * subsystem. Protected by @table_lock.
2603d0407baSopenharmony_ci     */
2613d0407baSopenharmony_ci    struct idr object_idr;
2623d0407baSopenharmony_ci
2633d0407baSopenharmony_ci    /** @table_lock: Protects @object_idr. */
2643d0407baSopenharmony_ci    spinlock_t table_lock;
2653d0407baSopenharmony_ci
2663d0407baSopenharmony_ci    /** @syncobj_idr: Mapping of sync object handles to object pointers. */
2673d0407baSopenharmony_ci    struct idr syncobj_idr;
2683d0407baSopenharmony_ci    /** @syncobj_table_lock: Protects @syncobj_idr. */
2693d0407baSopenharmony_ci    spinlock_t syncobj_table_lock;
2703d0407baSopenharmony_ci
2713d0407baSopenharmony_ci    /** @filp: Pointer to the core file structure. */
2723d0407baSopenharmony_ci    struct file *filp;
2733d0407baSopenharmony_ci
2743d0407baSopenharmony_ci    /**
2753d0407baSopenharmony_ci     * @driver_priv:
2763d0407baSopenharmony_ci     *
2773d0407baSopenharmony_ci     * Optional pointer for driver private data. Can be allocated in
2783d0407baSopenharmony_ci     * &drm_driver.open and should be freed in &drm_driver.postclose.
2793d0407baSopenharmony_ci     */
2803d0407baSopenharmony_ci    void *driver_priv;
2813d0407baSopenharmony_ci
2823d0407baSopenharmony_ci    /**
2833d0407baSopenharmony_ci     * @fbs:
2843d0407baSopenharmony_ci     *
2853d0407baSopenharmony_ci     * List of &struct drm_framebuffer associated with this file, using the
2863d0407baSopenharmony_ci     * &drm_framebuffer.filp_head entry.
2873d0407baSopenharmony_ci     *
2883d0407baSopenharmony_ci     * Protected by @fbs_lock. Note that the @fbs list holds a reference on
2893d0407baSopenharmony_ci     * the framebuffer object to prevent it from untimely disappearing.
2903d0407baSopenharmony_ci     */
2913d0407baSopenharmony_ci    struct list_head fbs;
2923d0407baSopenharmony_ci
2933d0407baSopenharmony_ci    /** @fbs_lock: Protects @fbs. */
2943d0407baSopenharmony_ci    struct mutex fbs_lock;
2953d0407baSopenharmony_ci
2963d0407baSopenharmony_ci    /**
2973d0407baSopenharmony_ci     * @blobs:
2983d0407baSopenharmony_ci     *
2993d0407baSopenharmony_ci     * User-created blob properties; this retains a reference on the
3003d0407baSopenharmony_ci     * property.
3013d0407baSopenharmony_ci     *
3023d0407baSopenharmony_ci     * Protected by @drm_mode_config.blob_lock;
3033d0407baSopenharmony_ci     */
3043d0407baSopenharmony_ci    struct list_head blobs;
3053d0407baSopenharmony_ci
3063d0407baSopenharmony_ci    /** @event_wait: Waitqueue for new events added to @event_list. */
3073d0407baSopenharmony_ci    wait_queue_head_t event_wait;
3083d0407baSopenharmony_ci
3093d0407baSopenharmony_ci    /**
3103d0407baSopenharmony_ci     * @pending_event_list:
3113d0407baSopenharmony_ci     *
3123d0407baSopenharmony_ci     * List of pending &struct drm_pending_event, used to clean up pending
3133d0407baSopenharmony_ci     * events in case this file gets closed before the event is signalled.
3143d0407baSopenharmony_ci     * Uses the &drm_pending_event.pending_link entry.
3153d0407baSopenharmony_ci     *
3163d0407baSopenharmony_ci     * Protect by &drm_device.event_lock.
3173d0407baSopenharmony_ci     */
3183d0407baSopenharmony_ci    struct list_head pending_event_list;
3193d0407baSopenharmony_ci
3203d0407baSopenharmony_ci    /**
3213d0407baSopenharmony_ci     * @event_list:
3223d0407baSopenharmony_ci     *
3233d0407baSopenharmony_ci     * List of &struct drm_pending_event, ready for delivery to userspace
3243d0407baSopenharmony_ci     * through drm_read(). Uses the &drm_pending_event.link entry.
3253d0407baSopenharmony_ci     *
3263d0407baSopenharmony_ci     * Protect by &drm_device.event_lock.
3273d0407baSopenharmony_ci     */
3283d0407baSopenharmony_ci    struct list_head event_list;
3293d0407baSopenharmony_ci
3303d0407baSopenharmony_ci    /**
3313d0407baSopenharmony_ci     * @event_space:
3323d0407baSopenharmony_ci     *
3333d0407baSopenharmony_ci     * Available event space to prevent userspace from
3343d0407baSopenharmony_ci     * exhausting kernel memory. Currently limited to the fairly arbitrary
3353d0407baSopenharmony_ci     * value of 4KB.
3363d0407baSopenharmony_ci     */
3373d0407baSopenharmony_ci    int event_space;
3383d0407baSopenharmony_ci
3393d0407baSopenharmony_ci    /** @event_read_lock: Serializes drm_read(). */
3403d0407baSopenharmony_ci    struct mutex event_read_lock;
3413d0407baSopenharmony_ci
3423d0407baSopenharmony_ci    /**
3433d0407baSopenharmony_ci     * @prime:
3443d0407baSopenharmony_ci     *
3453d0407baSopenharmony_ci     * Per-file buffer caches used by the PRIME buffer sharing code.
3463d0407baSopenharmony_ci     */
3473d0407baSopenharmony_ci    struct drm_prime_file_private prime;
3483d0407baSopenharmony_ci
3493d0407baSopenharmony_ci    /* private: */
3503d0407baSopenharmony_ci#if IS_ENABLED(CONFIG_DRM_LEGACY)
3513d0407baSopenharmony_ci    unsigned long lock_count; /* DRI1 legacy lock count */
3523d0407baSopenharmony_ci#endif
3533d0407baSopenharmony_ci};
3543d0407baSopenharmony_ci
3553d0407baSopenharmony_ci/**
3563d0407baSopenharmony_ci * drm_is_primary_client - is this an open file of the primary node
3573d0407baSopenharmony_ci * @file_priv: DRM file
3583d0407baSopenharmony_ci *
3593d0407baSopenharmony_ci * Returns true if this is an open file of the primary node, i.e.
3603d0407baSopenharmony_ci * &drm_file.minor of @file_priv is a primary minor.
3613d0407baSopenharmony_ci *
3623d0407baSopenharmony_ci * See also the :ref:`section on primary nodes and authentication
3633d0407baSopenharmony_ci * <drm_primary_node>`.
3643d0407baSopenharmony_ci */
3653d0407baSopenharmony_cistatic inline bool drm_is_primary_client(const struct drm_file *file_priv)
3663d0407baSopenharmony_ci{
3673d0407baSopenharmony_ci    return file_priv->minor->type == DRM_MINOR_PRIMARY;
3683d0407baSopenharmony_ci}
3693d0407baSopenharmony_ci
3703d0407baSopenharmony_ci/**
3713d0407baSopenharmony_ci * drm_is_render_client - is this an open file of the render node
3723d0407baSopenharmony_ci * @file_priv: DRM file
3733d0407baSopenharmony_ci *
3743d0407baSopenharmony_ci * Returns true if this is an open file of the render node, i.e.
3753d0407baSopenharmony_ci * &drm_file.minor of @file_priv is a render minor.
3763d0407baSopenharmony_ci *
3773d0407baSopenharmony_ci * See also the :ref:`section on render nodes <drm_render_node>`.
3783d0407baSopenharmony_ci */
3793d0407baSopenharmony_cistatic inline bool drm_is_render_client(const struct drm_file *file_priv)
3803d0407baSopenharmony_ci{
3813d0407baSopenharmony_ci    return file_priv->minor->type == DRM_MINOR_RENDER;
3823d0407baSopenharmony_ci}
3833d0407baSopenharmony_ci
3843d0407baSopenharmony_ciint drm_open(struct inode *inode, struct file *filp);
3853d0407baSopenharmony_cissize_t drm_read(struct file *filp, char __user *buffer, size_t count, loff_t *offset);
3863d0407baSopenharmony_ciint drm_release(struct inode *inode, struct file *filp);
3873d0407baSopenharmony_ciint drm_release_noglobal(struct inode *inode, struct file *filp);
3883d0407baSopenharmony_ci__poll_t drm_poll(struct file *filp, struct poll_table_struct *wait);
3893d0407baSopenharmony_ciint drm_event_reserve_init_locked(struct drm_device *dev, struct drm_file *file_priv, struct drm_pending_event *p,
3903d0407baSopenharmony_ci                                  struct drm_event *e);
3913d0407baSopenharmony_ciint drm_event_reserve_init(struct drm_device *dev, struct drm_file *file_priv, struct drm_pending_event *p,
3923d0407baSopenharmony_ci                           struct drm_event *e);
3933d0407baSopenharmony_civoid drm_event_cancel_free(struct drm_device *dev, struct drm_pending_event *p);
3943d0407baSopenharmony_civoid drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e);
3953d0407baSopenharmony_civoid drm_send_event(struct drm_device *dev, struct drm_pending_event *e);
3963d0407baSopenharmony_civoid drm_send_event_timestamp_locked(struct drm_device *dev, struct drm_pending_event *e, ktime_t timestamp);
3973d0407baSopenharmony_ci
3983d0407baSopenharmony_cistruct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags);
3993d0407baSopenharmony_ci
4003d0407baSopenharmony_ci#ifdef CONFIG_MMU
4013d0407baSopenharmony_cistruct drm_vma_offset_manager;
4023d0407baSopenharmony_ciunsigned long drm_get_unmapped_area(struct file *file, unsigned long uaddr, unsigned long len, unsigned long pgoff,
4033d0407baSopenharmony_ci                                    unsigned long flags, struct drm_vma_offset_manager *mgr);
4043d0407baSopenharmony_ci#endif /* CONFIG_MMU */
4053d0407baSopenharmony_ci
4063d0407baSopenharmony_ci#endif /* _DRM_FILE_H_ */
407