Lines Matching full:file
37 #include <linux/file.h>
72 * DOC: file operations
74 * Drivers must define the file operations structure that forms the DRM
87 * userspace through the file descriptor. They are used to send vblank event and
97 * No other file operations are supported by the DRM userspace API. Overall the
122 * drm_file_alloc - allocate file context
125 * This allocates a new DRM file context. It is not linked into any context and
136 struct drm_file *file;
139 file = kzalloc(sizeof(*file), GFP_KERNEL);
140 if (!file)
144 file->client_id = atomic64_inc_return(&ident);
145 rcu_assign_pointer(file->pid, get_pid(task_tgid(current)));
146 file->minor = minor;
149 file->authenticated = capable(CAP_SYS_ADMIN);
151 INIT_LIST_HEAD(&file->lhead);
152 INIT_LIST_HEAD(&file->fbs);
153 mutex_init(&file->fbs_lock);
154 INIT_LIST_HEAD(&file->blobs);
155 INIT_LIST_HEAD(&file->pending_event_list);
156 INIT_LIST_HEAD(&file->event_list);
157 init_waitqueue_head(&file->event_wait);
158 file->event_space = 4096; /* set aside 4k for event buffer */
160 spin_lock_init(&file->master_lookup_lock);
161 mutex_init(&file->event_read_lock);
162 mutex_init(&file->client_name_lock);
165 drm_gem_open(dev, file);
168 drm_syncobj_open(file);
170 drm_prime_init_file_private(&file->prime);
173 drm_debugfs_clients_add(file);
176 ret = dev->driver->open(dev, file);
181 return file;
184 drm_prime_destroy_file_private(&file->prime);
186 drm_syncobj_release(file);
188 drm_gem_release(dev, file);
191 drm_debugfs_clients_remove(file);
193 put_pid(rcu_access_pointer(file->pid));
194 kfree(file);
224 * drm_file_free - free file context
225 * @file: context to free, or NULL
227 * This destroys and deallocates a DRM file context previously allocated via
233 void drm_file_free(struct drm_file *file)
237 if (!file)
240 dev = file->minor->dev;
244 (long)old_encode_dev(file->minor->kdev->devt),
248 drm_debugfs_clients_remove(file);
250 drm_events_release(file);
253 drm_fb_release(file);
254 drm_property_destroy_user_blobs(dev, file);
258 drm_syncobj_release(file);
261 drm_gem_release(dev, file);
263 if (drm_is_primary_client(file))
264 drm_master_release(file);
267 dev->driver->postclose(dev, file);
269 drm_prime_destroy_file_private(&file->prime);
271 WARN_ON(!list_empty(&file->event_list));
273 put_pid(rcu_access_pointer(file->pid));
275 mutex_destroy(&file->client_name_lock);
276 kfree(file->client_name);
278 kfree(file);
281 static void drm_close_helper(struct file *filp)
309 * \param filp file pointer.
313 * Creates and initializes a drm_file structure for the file private data in \p
316 int drm_open_helper(struct file *filp, struct drm_minor *minor)
358 * drm_open - open method for DRM file
360 * @filp: file pointer.
363 * It looks up the correct DRM device and instantiates all the per-file
369 int drm_open(struct inode *inode, struct file *filp)
415 * drm_release - release method for DRM file
417 * @filp: file pointer.
420 * method. It frees any resources associated with the open file. If this
421 * is the last open file for the DRM device, it also restores the active
427 int drm_release(struct inode *inode, struct file *filp)
485 * drm_release_noglobal - release method for DRM file
487 * @filp: file pointer.
490 * method. It frees any resources associated with the open file prior to taking
491 * the drm_global_mutex. If this is the last open file for the DRM device, it
497 int drm_release_noglobal(struct inode *inode, struct file *filp)
517 * drm_read - read method for DRM file
518 * @filp: file pointer
540 ssize_t drm_read(struct file *filp, char __user *buffer,
610 * drm_poll - poll method for DRM file
611 * @filp: file pointer
622 * Mask of POLL flags indicating the current status of the file.
624 __poll_t drm_poll(struct file *filp, struct poll_table_struct *wait)
641 * @file_priv: DRM file private data
682 * @file_priv: DRM file private data
778 * drm_send_event_timestamp_locked - send DRM event to file descriptor
785 * to its associated userspace DRM file. Callers must already hold
789 * corresponding DRM file is closed. Drivers need not worry about whether the
790 * DRM file for this event still exists and can call this function upon
801 * drm_send_event_locked - send DRM event to file descriptor
806 * to its associated userspace DRM file. Callers must already hold
810 * corresponding DRM file is closed. Drivers need not worry about whether the
811 * DRM file for this event still exists and can call this function upon
821 * drm_send_event - send DRM event to file descriptor
826 * to its associated userspace DRM file. This function acquires
831 * corresponding DRM file is closed. Drivers need not worry about whether the
832 * DRM file for this event still exists and can call this function upon
910 * @file: the DRM file
913 * file.
915 void drm_show_memory_stats(struct drm_printer *p, struct drm_file *file)
922 spin_lock(&file->table_lock);
923 idr_for_each_entry (&file->object_idr, obj, id) {
958 spin_unlock(&file->table_lock);
965 * drm_show_fdinfo - helper for drm file fops
967 * @f: the device file instance
974 void drm_show_fdinfo(struct seq_file *m, struct file *f)
976 struct drm_file *file = f->private_data;
977 struct drm_device *dev = file->minor->dev;
985 drm_printf(&p, "drm-client-id:\t%llu\n", file->client_id);
995 mutex_lock(&file->client_name_lock);
996 if (file->client_name)
997 drm_printf(&p, "drm-client-name:\t%s\n", file->client_name);
998 mutex_unlock(&file->client_name_lock);
1001 dev->driver->show_fdinfo(&p, file);
1044 * mock_drm_getfile - Create a new struct file for the drm device
1046 * @flags: file creation mode (O_RDWR etc)
1048 * This create a new struct file that wraps a DRM file context around a
1050 * invoking userspace. The struct file may be operated on using its f_op
1055 * Pointer to newly created struct file, ERR_PTR on failure.
1057 struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags)
1061 struct file *file;
1067 file = anon_inode_getfile("drm", dev->driver->fops, priv, flags);
1068 if (IS_ERR(file)) {
1070 return file;
1074 file->f_mapping = dev->anon_inode->i_mapping;
1077 priv->filp = file;
1079 return file;