linux/include/drm
Matt Roper 161d0dc1dc drm: Support legacy cursor ioctls via universal planes when possible (v4)
If drivers support universal planes and have registered a cursor plane
with the DRM core, we should use that universal plane support when
handling legacy cursor ioctls.  Drivers that transition to universal
planes won't have to maintain separate legacy ioctl handling; drivers
that don't transition to universal planes will continue to operate
without any change to behavior.

Note that there's a bit of a mismatch between the legacy cursor ioctls
and the universal plane API's --- legacy ioctl's use driver buffer
handles directly whereas the universal plane API takes drm_framebuffers.
Since there's no way to recover the driver handle from a
drm_framebuffer, we can implement legacy ioctl's in terms of universal
plane interfaces, but cannot implement universal plane interfaces in
terms of legacy ioctls.  Specifically, there's no way to create a
general cursor helper in the way we previously created a primary plane
helper.

It's important to land this patch before any patches that add universal
cursor support to individual drivers so that drivers don't have to worry
about juggling two different styles of reference counting for cursor
buffers when userspace mixes and matches legacy and universal cursor
calls.  With this patch, a driver that switches to universal cursor
support may assume that all cursor buffers are wrapped in a
drm_framebuffer and can rely on framebuffer reference counting for all
cursor operations.

v4:
 - Add comments pointing out setplane_internal's reference-eating
   semantics.
v3:
 - Drop drm_mode_rmfb() call that is no longer needed now that we're
   using setplane_internal(), which takes care of deref'ing the
   appropriate framebuffer.
v2:
 - Use new add_framebuffer_internal() function to create framebuffer
   rather than trying to call directly into the ioctl interface and
   look up the handle returned.
 - Use new setplane_internal() function to update the cursor plane
   rather than calling through the ioctl interface.  Note that since
   we're no longer looking up an fb_id, no extra reference will be
   taken here.
 - Grab extra reference to fb under lock in !BO case to avoid issues
   where racing userspace could cause the fb to be destroyed out from
   under us after we grab the fb pointer.

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Pallavi G<pallavi.g@intel.com>
Acked-by: Dave Airlie <airlied@linux.ie>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2014-06-13 17:45:21 +02:00
..
bridge drm/bridge/ptn3460: fix modular build 2014-03-24 09:21:15 +10:00
i2c drm/i2c: tda998x: add video and audio input configuration 2013-08-19 09:10:32 +10:00
ttm drm/ttm: fix kerneldoc of ttm_bo_create 2014-05-26 12:54:09 +10:00
drm_agpsupport.h drm: rip out DRM_AGP_MEM and DRM_AGP_KERN 2013-12-18 11:32:55 +10:00
drm_buffer.h UAPI: (Scripted) Convert #include "..." to #include <path/...> in kernel system headers 2012-10-02 18:01:25 +01:00
drm_cache.h
drm_core.h
drm_crtc_helper.h Merge tag 'topic/core-stuff-2014-05-05' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-05-16 11:47:13 +10:00
drm_crtc.h drm: Support legacy cursor ioctls via universal planes when possible (v4) 2014-06-13 17:45:21 +02:00
drm_dp_helper.h drm/dp: add a hw mutex around the transfer functions. (v2) 2014-06-05 09:54:29 +10:00
drm_edid.h drm/edid: Parse and handle HDMI deep color modes. 2014-06-02 18:37:34 -04:00
drm_encoder_slave.h drm: i2c encoder helper wrappers 2013-02-17 17:55:42 -05:00
drm_fb_cma_helper.h drm: Make drm_fb_cma_describe() static 2013-08-21 12:47:41 +10:00
drm_fb_helper.h drm: add drm_fb_helper_restore_fbdev_mode_unlocked() 2014-06-05 10:02:40 +10:00
drm_fixed.h drm: fix 64 bit drm fixed point helpers 2013-07-30 17:24:13 -04:00
drm_flip_work.h drm: Fixup flip-work kerneldoc 2014-04-29 12:33:35 +02:00
drm_gem_cma_helper.h drm/cma: include <drm/drmP.h> as needed 2014-04-04 10:07:57 +10:00
drm_global.h
drm_hashtab.h drm: Add a hash-tab rcu-safe API 2012-11-28 18:36:05 +10:00
drm_mem_util.h introduce SIZE_MAX 2012-05-31 17:49:26 -07:00
drm_memory.h UAPI: (Scripted) Convert #include "..." to #include <path/...> in kernel system headers 2012-10-02 18:01:25 +01:00
drm_mipi_dsi.h drm/dsi: Support device shutdown 2014-06-05 16:42:19 +02:00
drm_mm.h drm: Add support for two-ended allocation, v3 2014-04-04 09:28:14 +10:00
drm_modes.h drm: try harder to avoid regression when merging mode bits 2014-05-01 09:26:53 +10:00
drm_modeset_lock.h drm: convert crtc and connection_mutex to ww_mutex (v5) 2014-06-05 09:54:33 +10:00
drm_os_linux.h drm: Kill DRM_SUSER 2013-12-18 11:35:45 +10:00
drm_panel.h drm: Add panel support 2013-12-17 18:09:46 +01:00
drm_pciids.h drm/radeon: add pci ids for Mullins 2014-05-06 12:20:06 +02:00
drm_plane_helper.h drm/plane-helper: Add drm_plane_helper_check_update() (v3) 2014-06-05 08:52:43 +02:00
drm_rect.h drm: Fix drm_rect documentation 2013-05-23 12:51:32 +02:00
drm_sysfs.h
drm_usb.h
drm_vma_manager.h drm: init TTM dev_mapping in ttm_bo_device_init() 2014-03-16 12:23:42 +01:00
drmP.h drm: Remove DRM_ARRAY_SIZE() for ARRAY_SIZE() 2014-06-10 09:36:17 +10:00
exynos_drm.h drm/exynos: fimd: replace struct fb_videomode with videomode 2013-09-05 13:43:44 +09:00
gma_drm.h drm/gma500: Remove unused ioctls 2014-03-17 20:11:57 +01:00
i915_drm.h x86/gpu: Add Intel graphics stolen memory quirk for gen2 platforms 2014-02-09 15:11:30 +01:00
i915_pciids.h Merge commit '9e9a928eed8796a0a1aaed7e0b676db86ba84594' into drm-next 2014-06-05 20:28:59 +10:00
i915_powerwell.h i915/drm: Add private api for power well usage 2013-06-06 17:32:16 +02:00
intel-gtt.h drm/i915: Fix gen2 mappable calculations 2013-02-15 10:30:38 +01:00