Lines Matching full:file
36 #include <linux/file.h>
70 * DOC: file operations
72 * Drivers must define the file operations structure that forms the DRM
85 * userspace through the file descriptor. They are used to send vblank event and
95 * No other file operations are supported by the DRM userspace API. Overall the
120 * drm_file_alloc - allocate file context
123 * This allocates a new DRM file context. It is not linked into any context and
134 struct drm_file *file; in drm_file_alloc() local
137 file = kzalloc(sizeof(*file), GFP_KERNEL); in drm_file_alloc()
138 if (!file) in drm_file_alloc()
142 file->client_id = atomic64_inc_return(&ident); in drm_file_alloc()
143 rcu_assign_pointer(file->pid, get_pid(task_tgid(current))); in drm_file_alloc()
144 file->minor = minor; in drm_file_alloc()
147 file->authenticated = capable(CAP_SYS_ADMIN); in drm_file_alloc()
149 INIT_LIST_HEAD(&file->lhead); in drm_file_alloc()
150 INIT_LIST_HEAD(&file->fbs); in drm_file_alloc()
151 mutex_init(&file->fbs_lock); in drm_file_alloc()
152 INIT_LIST_HEAD(&file->blobs); in drm_file_alloc()
153 INIT_LIST_HEAD(&file->pending_event_list); in drm_file_alloc()
154 INIT_LIST_HEAD(&file->event_list); in drm_file_alloc()
155 init_waitqueue_head(&file->event_wait); in drm_file_alloc()
156 file->event_space = 4096; /* set aside 4k for event buffer */ in drm_file_alloc()
158 spin_lock_init(&file->master_lookup_lock); in drm_file_alloc()
159 mutex_init(&file->event_read_lock); in drm_file_alloc()
160 mutex_init(&file->client_name_lock); in drm_file_alloc()
163 drm_gem_open(dev, file); in drm_file_alloc()
166 drm_syncobj_open(file); in drm_file_alloc()
168 drm_prime_init_file_private(&file->prime); in drm_file_alloc()
171 ret = dev->driver->open(dev, file); in drm_file_alloc()
176 return file; in drm_file_alloc()
179 drm_prime_destroy_file_private(&file->prime); in drm_file_alloc()
181 drm_syncobj_release(file); in drm_file_alloc()
183 drm_gem_release(dev, file); in drm_file_alloc()
184 put_pid(rcu_access_pointer(file->pid)); in drm_file_alloc()
185 kfree(file); in drm_file_alloc()
215 * drm_file_free - free file context
216 * @file: context to free, or NULL
218 * This destroys and deallocates a DRM file context previously allocated via
224 void drm_file_free(struct drm_file *file) in drm_file_free() argument
228 if (!file) in drm_file_free()
231 dev = file->minor->dev; in drm_file_free()
235 (long)old_encode_dev(file->minor->kdev->devt), in drm_file_free()
238 drm_events_release(file); in drm_file_free()
241 drm_fb_release(file); in drm_file_free()
242 drm_property_destroy_user_blobs(dev, file); in drm_file_free()
246 drm_syncobj_release(file); in drm_file_free()
249 drm_gem_release(dev, file); in drm_file_free()
251 if (drm_is_primary_client(file)) in drm_file_free()
252 drm_master_release(file); in drm_file_free()
255 dev->driver->postclose(dev, file); in drm_file_free()
257 drm_prime_destroy_file_private(&file->prime); in drm_file_free()
259 WARN_ON(!list_empty(&file->event_list)); in drm_file_free()
261 put_pid(rcu_access_pointer(file->pid)); in drm_file_free()
263 mutex_destroy(&file->client_name_lock); in drm_file_free()
264 kfree(file->client_name); in drm_file_free()
266 kfree(file); in drm_file_free()
269 static void drm_close_helper(struct file *filp) in drm_close_helper()
297 * \param filp file pointer.
301 * Creates and initializes a drm_file structure for the file private data in \p
304 int drm_open_helper(struct file *filp, struct drm_minor *minor) in drm_open_helper()
346 * drm_open - open method for DRM file
348 * @filp: file pointer.
351 * It looks up the correct DRM device and instantiates all the per-file
357 int drm_open(struct inode *inode, struct file *filp) in drm_open()
403 * drm_release - release method for DRM file
405 * @filp: file pointer.
408 * method. It frees any resources associated with the open file. If this
409 * is the last open file for the DRM device, it also restores the active
415 int drm_release(struct inode *inode, struct file *filp) in drm_release()
473 * drm_release_noglobal - release method for DRM file
475 * @filp: file pointer.
478 * method. It frees any resources associated with the open file prior to taking
479 * the drm_global_mutex. If this is the last open file for the DRM device, it
485 int drm_release_noglobal(struct inode *inode, struct file *filp) in drm_release_noglobal()
505 * drm_read - read method for DRM file
506 * @filp: file pointer
528 ssize_t drm_read(struct file *filp, char __user *buffer, in drm_read()
598 * drm_poll - poll method for DRM file
599 * @filp: file pointer
610 * Mask of POLL flags indicating the current status of the file.
612 __poll_t drm_poll(struct file *filp, struct poll_table_struct *wait) in drm_poll()
629 * @file_priv: DRM file private data
670 * @file_priv: DRM file private data
766 * drm_send_event_timestamp_locked - send DRM event to file descriptor
773 * to its associated userspace DRM file. Callers must already hold
777 * corresponding DRM file is closed. Drivers need not worry about whether the
778 * DRM file for this event still exists and can call this function upon
789 * drm_send_event_locked - send DRM event to file descriptor
794 * to its associated userspace DRM file. Callers must already hold
798 * corresponding DRM file is closed. Drivers need not worry about whether the
799 * DRM file for this event still exists and can call this function upon
809 * drm_send_event - send DRM event to file descriptor
814 * to its associated userspace DRM file. This function acquires
819 * corresponding DRM file is closed. Drivers need not worry about whether the
820 * DRM file for this event still exists and can call this function upon
898 * @file: the DRM file
901 * file.
903 void drm_show_memory_stats(struct drm_printer *p, struct drm_file *file) in drm_show_memory_stats() argument
910 spin_lock(&file->table_lock); in drm_show_memory_stats()
911 idr_for_each_entry (&file->object_idr, obj, id) { in drm_show_memory_stats()
946 spin_unlock(&file->table_lock); in drm_show_memory_stats()
953 * drm_show_fdinfo - helper for drm file fops
955 * @f: the device file instance
962 void drm_show_fdinfo(struct seq_file *m, struct file *f) in drm_show_fdinfo()
964 struct drm_file *file = f->private_data; in drm_show_fdinfo() local
965 struct drm_device *dev = file->minor->dev; in drm_show_fdinfo()
969 drm_printf(&p, "drm-client-id:\t%llu\n", file->client_id); in drm_show_fdinfo()
979 mutex_lock(&file->client_name_lock); in drm_show_fdinfo()
980 if (file->client_name) in drm_show_fdinfo()
981 drm_printf(&p, "drm-client-name:\t%s\n", file->client_name); in drm_show_fdinfo()
982 mutex_unlock(&file->client_name_lock); in drm_show_fdinfo()
985 dev->driver->show_fdinfo(&p, file); in drm_show_fdinfo()
990 * mock_drm_getfile - Create a new struct file for the drm device
992 * @flags: file creation mode (O_RDWR etc)
994 * This create a new struct file that wraps a DRM file context around a
996 * invoking userspace. The struct file may be operated on using its f_op
1001 * Pointer to newly created struct file, ERR_PTR on failure.
1003 struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags) in mock_drm_getfile()
1007 struct file *file; in mock_drm_getfile() local
1013 file = anon_inode_getfile("drm", dev->driver->fops, priv, flags); in mock_drm_getfile()
1014 if (IS_ERR(file)) { in mock_drm_getfile()
1016 return file; in mock_drm_getfile()
1020 file->f_mapping = dev->anon_inode->i_mapping; in mock_drm_getfile()
1023 priv->filp = file; in mock_drm_getfile()
1025 return file; in mock_drm_getfile()