Lines Matching +full:render +full:- +full:max
56 * - GET_UNIQUE ioctl, implemented by drm_getunique is wrapped up in libdrm
58 * - The libdrm drmSetBusid function is backed by the SET_UNIQUE ioctl. All
60 * - The internal set_busid kernel functions and driver callbacks are
63 * - Other ioctls and functions involved are named consistently.
76 * side-effect this fills out the unique name in the master structure.
121 mutex_lock(&dev->master_mutex); in drm_getunique()
122 master = file_priv->master; in drm_getunique()
123 if (u->unique_len >= master->unique_len) { in drm_getunique()
124 if (copy_to_user(u->unique, master->unique, master->unique_len)) { in drm_getunique()
125 mutex_unlock(&dev->master_mutex); in drm_getunique()
126 return -EFAULT; in drm_getunique()
129 u->unique_len = master->unique_len; in drm_getunique()
130 mutex_unlock(&dev->master_mutex); in drm_getunique()
139 kfree(master->unique); in drm_unset_busid()
140 master->unique = NULL; in drm_unset_busid()
141 master->unique_len = 0; in drm_unset_busid()
146 struct drm_master *master = file_priv->master; in drm_set_busid()
149 if (master->unique != NULL) in drm_set_busid()
152 if (dev->dev && dev_is_pci(dev->dev)) { in drm_set_busid()
159 WARN_ON(!dev->unique); in drm_set_busid()
160 master->unique = kstrdup(dev->unique, GFP_KERNEL); in drm_set_busid()
161 if (master->unique) in drm_set_busid()
162 master->unique_len = strlen(dev->unique); in drm_set_busid()
187 * Hollowed-out getclient ioctl to keep some dead old drm tests/tools in drm_getclient()
189 * get -EINVAL, hence this is the return value we need to hand back for in drm_getclient()
197 if (client->idx == 0) { in drm_getclient()
198 client->auth = file_priv->authenticated; in drm_getclient()
199 client->pid = task_pid_vnr(current); in drm_getclient()
200 client->uid = overflowuid; in drm_getclient()
201 client->magic = 0; in drm_getclient()
202 client->iocs = 0; in drm_getclient()
206 return -EINVAL; in drm_getclient()
239 req->value = 0; in drm_getcap()
241 /* Only some caps make sense with UMS/render-only drivers. */ in drm_getcap()
242 switch (req->capability) { in drm_getcap()
244 req->value = 1; in drm_getcap()
247 req->value = DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT; in drm_getcap()
250 req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ); in drm_getcap()
253 req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE); in drm_getcap()
259 return -EOPNOTSUPP; in drm_getcap()
261 switch (req->capability) { in drm_getcap()
263 if (dev->driver->dumb_create) in drm_getcap()
264 req->value = 1; in drm_getcap()
267 req->value = 1; in drm_getcap()
270 req->value = dev->mode_config.preferred_depth; in drm_getcap()
273 req->value = dev->mode_config.prefer_shadow; in drm_getcap()
276 req->value = dev->mode_config.async_page_flip; in drm_getcap()
279 req->value = 1; in drm_getcap()
281 if (!crtc->funcs->page_flip_target) in drm_getcap()
282 req->value = 0; in drm_getcap()
286 if (dev->mode_config.cursor_width) in drm_getcap()
287 req->value = dev->mode_config.cursor_width; in drm_getcap()
289 req->value = 64; in drm_getcap()
292 if (dev->mode_config.cursor_height) in drm_getcap()
293 req->value = dev->mode_config.cursor_height; in drm_getcap()
295 req->value = 64; in drm_getcap()
298 req->value = !dev->mode_config.fb_modifiers_not_supported; in drm_getcap()
301 req->value = 1; in drm_getcap()
304 req->value = drm_core_check_feature(dev, DRIVER_ATOMIC) && in drm_getcap()
305 dev->mode_config.async_page_flip; in drm_getcap()
308 return -EINVAL; in drm_getcap()
321 /* No render-only settable capabilities for now */ in drm_setclientcap()
325 return -EOPNOTSUPP; in drm_setclientcap()
327 switch (req->capability) { in drm_setclientcap()
329 if (req->value > 1) in drm_setclientcap()
330 return -EINVAL; in drm_setclientcap()
331 file_priv->stereo_allowed = req->value; in drm_setclientcap()
334 if (req->value > 1) in drm_setclientcap()
335 return -EINVAL; in drm_setclientcap()
336 file_priv->universal_planes = req->value; in drm_setclientcap()
340 return -EOPNOTSUPP; in drm_setclientcap()
342 if (current->comm[0] == 'X' && req->value == 1) { in drm_setclientcap()
344 return -EOPNOTSUPP; in drm_setclientcap()
346 if (req->value > 2) in drm_setclientcap()
347 return -EINVAL; in drm_setclientcap()
348 file_priv->atomic = req->value; in drm_setclientcap()
349 file_priv->universal_planes = req->value; in drm_setclientcap()
351 * No atomic user-space blows up on aspect ratio mode bits. in drm_setclientcap()
353 file_priv->aspect_ratio_allowed = req->value; in drm_setclientcap()
356 if (req->value > 1) in drm_setclientcap()
357 return -EINVAL; in drm_setclientcap()
358 file_priv->aspect_ratio_allowed = req->value; in drm_setclientcap()
361 if (!file_priv->atomic) in drm_setclientcap()
362 return -EINVAL; in drm_setclientcap()
363 if (req->value > 1) in drm_setclientcap()
364 return -EINVAL; in drm_setclientcap()
365 file_priv->writeback_connectors = req->value; in drm_setclientcap()
369 return -EOPNOTSUPP; in drm_setclientcap()
370 if (!file_priv->atomic) in drm_setclientcap()
371 return -EINVAL; in drm_setclientcap()
372 if (req->value > 1) in drm_setclientcap()
373 return -EINVAL; in drm_setclientcap()
374 file_priv->supports_virtualized_cursor_plane = req->value; in drm_setclientcap()
377 return -EINVAL; in drm_setclientcap()
399 mutex_lock(&dev->master_mutex); in drm_setversion()
400 if (sv->drm_di_major != -1) { in drm_setversion()
401 if (sv->drm_di_major != DRM_IF_MAJOR || in drm_setversion()
402 sv->drm_di_minor < 0 || sv->drm_di_minor > DRM_IF_MINOR) { in drm_setversion()
403 retcode = -EINVAL; in drm_setversion()
406 if_version = DRM_IF_VERSION(sv->drm_di_major, in drm_setversion()
407 sv->drm_di_minor); in drm_setversion()
408 dev->if_version = max(if_version, dev->if_version); in drm_setversion()
409 if (sv->drm_di_minor >= 1) { in drm_setversion()
420 if (sv->drm_dd_major != -1) { in drm_setversion()
421 if (sv->drm_dd_major != dev->driver->major || in drm_setversion()
422 sv->drm_dd_minor < 0 || sv->drm_dd_minor > in drm_setversion()
423 dev->driver->minor) { in drm_setversion()
424 retcode = -EINVAL; in drm_setversion()
430 sv->drm_di_major = DRM_IF_MAJOR; in drm_setversion()
431 sv->drm_di_minor = DRM_IF_MINOR; in drm_setversion()
432 sv->drm_dd_major = dev->driver->major; in drm_setversion()
433 sv->drm_dd_minor = dev->driver->minor; in drm_setversion()
434 mutex_unlock(&dev->master_mutex); in drm_setversion()
440 * drm_noop - DRM no-op ioctl implementation
445 * This no-op implementation for drm ioctls is useful for deprecated
460 * drm_invalid_op - DRM invalid ioctl implementation
465 * This no-op implementation for drm ioctls is useful for deprecated
472 * Always fails with a return value of -EINVAL.
477 return -EINVAL; in drm_invalid_op()
500 * larger than the userspace-supplied buffer) */ in drm_copy_field()
506 return -EFAULT; in drm_copy_field()
527 version->version_major = dev->driver->major; in drm_version()
528 version->version_minor = dev->driver->minor; in drm_version()
529 version->version_patchlevel = dev->driver->patchlevel; in drm_version()
530 err = drm_copy_field(version->name, &version->name_len, in drm_version()
531 dev->driver->name); in drm_version()
533 /* Driver date is deprecated. Userspace expects a non-empty string. */ in drm_version()
535 err = drm_copy_field(version->date, &version->date_len, "0"); in drm_version()
537 err = drm_copy_field(version->desc, &version->desc_len, in drm_version()
538 dev->driver->desc); in drm_version()
553 return -EINVAL; in drm_validate_value_string()
562 size_t len = name->name_len; in drm_set_client_name()
567 return -EINVAL; in drm_set_client_name()
569 user_ptr = u64_to_user_ptr(name->name); in drm_set_client_name()
578 return -EINVAL; in drm_set_client_name()
584 mutex_lock(&file_priv->client_name_lock); in drm_set_client_name()
585 kfree(file_priv->client_name); in drm_set_client_name()
586 file_priv->client_name = new_name; in drm_set_client_name()
587 mutex_unlock(&file_priv->client_name_lock); in drm_set_client_name()
596 return -EACCES; in drm_ioctl_permit()
598 /* AUTH is only for authenticated or render client */ in drm_ioctl_permit()
600 !file_priv->authenticated)) in drm_ioctl_permit()
601 return -EACCES; in drm_ioctl_permit()
606 return -EACCES; in drm_ioctl_permit()
608 /* Render clients must be explicitly allowed */ in drm_ioctl_permit()
611 return -EACCES; in drm_ioctl_permit()
740 * Now if you do have a render driver you always have to support it through
753 * ``Documentation/process/botching-up-ioctls.rst``. Note that drm_ioctl()
754 * automatically zero-extends structures, hence make sure you can add more stuff
776 * the driver-specific IOCTLs are wired up.
782 struct drm_file *file_priv = file->private_data; in drm_ioctl_kernel()
783 struct drm_device *dev = file_priv->minor->dev; in drm_ioctl_kernel()
790 return -ENODEV; in drm_ioctl_kernel()
801 * drm_ioctl - ioctl callback implementation for DRM drivers
816 struct drm_file *file_priv = filp->private_data; in drm_ioctl()
821 int retcode = -EINVAL; in drm_ioctl()
827 dev = file_priv->minor->dev; in drm_ioctl()
830 return -ENODEV; in drm_ioctl()
833 return -ENOTTY; in drm_ioctl()
839 unsigned int index = nr - DRM_COMMAND_BASE; in drm_ioctl()
841 if (index >= dev->driver->num_ioctls) in drm_ioctl()
843 index = array_index_nospec(index, dev->driver->num_ioctls); in drm_ioctl()
844 ioctl = &dev->driver->ioctls[index]; in drm_ioctl()
853 drv_size = _IOC_SIZE(ioctl->cmd); in drm_ioctl()
855 if ((cmd & ioctl->cmd & IOC_IN) == 0) in drm_ioctl()
857 if ((cmd & ioctl->cmd & IOC_OUT) == 0) in drm_ioctl()
859 ksize = max(max(in_size, out_size), drv_size); in drm_ioctl()
862 current->comm, task_pid_nr(current), in drm_ioctl()
863 (long)old_encode_dev(file_priv->minor->kdev->devt), in drm_ioctl()
864 file_priv->authenticated, ioctl->name); in drm_ioctl()
867 func = ioctl->func; in drm_ioctl()
871 retcode = -EINVAL; in drm_ioctl()
880 retcode = -ENOMEM; in drm_ioctl()
886 retcode = -EFAULT; in drm_ioctl()
891 memset(kdata + in_size, 0, ksize - in_size); in drm_ioctl()
893 retcode = drm_ioctl_kernel(filp, func, kdata, ioctl->flags); in drm_ioctl()
895 retcode = -EFAULT; in drm_ioctl()
901 current->comm, task_pid_nr(current), in drm_ioctl()
902 (long)old_encode_dev(file_priv->minor->kdev->devt), in drm_ioctl()
903 file_priv->authenticated, cmd, nr); in drm_ioctl()
909 current->comm, task_pid_nr(current), retcode); in drm_ioctl()
915 * drm_ioctl_flags - Check for core ioctl and return ioctl permission flags