140 lines · c
1#ifndef _DRM_AUTH_H_2#define _DRM_AUTH_H_3 4/*5 * Internal Header for the Direct Rendering Manager6 *7 * Copyright 2016 Intel Corporation8 *9 * Author: Daniel Vetter <daniel.vetter@ffwll.ch>10 *11 * Permission is hereby granted, free of charge, to any person obtaining a12 * copy of this software and associated documentation files (the "Software"),13 * to deal in the Software without restriction, including without limitation14 * the rights to use, copy, modify, merge, publish, distribute, sublicense,15 * and/or sell copies of the Software, and to permit persons to whom the16 * Software is furnished to do so, subject to the following conditions:17 *18 * The above copyright notice and this permission notice (including the next19 * paragraph) shall be included in all copies or substantial portions of the20 * Software.21 *22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR23 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL25 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR26 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,27 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR28 * OTHER DEALINGS IN THE SOFTWARE.29 */30 31#include <linux/idr.h>32#include <linux/kref.h>33#include <linux/wait.h>34 35struct drm_file;36 37/**38 * struct drm_master - drm master structure39 *40 * @refcount: Refcount for this master object.41 * @dev: Link back to the DRM device42 * @driver_priv: Pointer to driver-private information.43 *44 * Note that master structures are only relevant for the legacy/primary device45 * nodes, hence there can only be one per device, not one per drm_minor.46 */47struct drm_master {48 struct kref refcount;49 struct drm_device *dev;50 /**51 * @unique: Unique identifier: e.g. busid. Protected by52 * &drm_device.master_mutex.53 */54 char *unique;55 /**56 * @unique_len: Length of unique field. Protected by57 * &drm_device.master_mutex.58 */59 int unique_len;60 /**61 * @magic_map: Map of used authentication tokens. Protected by62 * &drm_device.master_mutex.63 */64 struct idr magic_map;65 void *driver_priv;66 67 /**68 * @lessor:69 *70 * Lease grantor, only set if this &struct drm_master represents a71 * lessee holding a lease of objects from @lessor. Full owners of the72 * device have this set to NULL.73 *74 * The lessor does not change once it's set in drm_lease_create(), and75 * each lessee holds a reference to its lessor that it releases upon76 * being destroyed in drm_lease_destroy().77 *78 * See also the :ref:`section on display resource leasing79 * <drm_leasing>`.80 */81 struct drm_master *lessor;82 83 /**84 * @lessee_id:85 *86 * ID for lessees. Owners (i.e. @lessor is NULL) always have ID 0.87 * Protected by &drm_device.mode_config's &drm_mode_config.idr_mutex.88 */89 int lessee_id;90 91 /**92 * @lessee_list:93 *94 * List entry of lessees of @lessor, where they are linked to @lessees.95 * Not used for owners. Protected by &drm_device.mode_config's96 * &drm_mode_config.idr_mutex.97 */98 struct list_head lessee_list;99 100 /**101 * @lessees:102 *103 * List of drm_masters leasing from this one. Protected by104 * &drm_device.mode_config's &drm_mode_config.idr_mutex.105 *106 * This list is empty if no leases have been granted, or if all lessees107 * have been destroyed. Since lessors are referenced by all their108 * lessees, this master cannot be destroyed unless the list is empty.109 */110 struct list_head lessees;111 112 /**113 * @leases:114 *115 * Objects leased to this drm_master. Protected by116 * &drm_device.mode_config's &drm_mode_config.idr_mutex.117 *118 * Objects are leased all together in drm_lease_create(), and are119 * removed all together when the lease is revoked.120 */121 struct idr leases;122 123 /**124 * @lessee_idr:125 *126 * All lessees under this owner (only used where @lessor is NULL).127 * Protected by &drm_device.mode_config's &drm_mode_config.idr_mutex.128 */129 struct idr lessee_idr;130};131 132struct drm_master *drm_master_get(struct drm_master *master);133struct drm_master *drm_file_get_master(struct drm_file *file_priv);134void drm_master_put(struct drm_master **master);135bool drm_is_current_master(struct drm_file *fpriv);136 137struct drm_master *drm_master_create(struct drm_device *dev);138 139#endif140