]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
drm: Pass page flip ioctl flags to driver
authorKeith Packard <keithp@keithp.com>
Tue, 23 Jul 2013 01:49:58 +0000 (18:49 -0700)
committerDave Airlie <airlied@redhat.com>
Thu, 29 Aug 2013 23:24:54 +0000 (09:24 +1000)
This lets drivers see the flags requested by the application

[airlied: fixup for rcar/imx/msm]

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Dave Airlie <airlied@gmail.com>
16 files changed:
drivers/gpu/drm/drm_crtc.c
drivers/gpu/drm/exynos/exynos_drm_crtc.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/msm/mdp4/mdp4_crtc.c
drivers/gpu/drm/nouveau/nouveau_display.c
drivers/gpu/drm/nouveau/nouveau_display.h
drivers/gpu/drm/omapdrm/omap_crtc.c
drivers/gpu/drm/radeon/radeon_display.c
drivers/gpu/drm/rcar-du/rcar_du_crtc.c
drivers/gpu/drm/shmobile/shmob_drm_crtc.c
drivers/gpu/drm/tilcdc/tilcdc_crtc.c
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
drivers/staging/imx-drm/ipuv3-crtc.c
include/drm/drm_crtc.h

index 54b4169fc48effaa797fdfd79f10dfde1a5b82b1..4f35be732b831948aa289eaaae3b9e91aa0b687b 100644 (file)
@@ -3581,7 +3581,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
        }
 
        old_fb = crtc->fb;
-       ret = crtc->funcs->page_flip(crtc, fb, e);
+       ret = crtc->funcs->page_flip(crtc, fb, e, page_flip->flags);
        if (ret) {
                if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
                        spin_lock_irqsave(&dev->event_lock, flags);
index 9a35d171a6d3c5d1b348304cc1ee35597662d340..14f5c1d34028fac5aeb0c6e66dfed6b25160d502 100644 (file)
@@ -184,8 +184,9 @@ static struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
 };
 
 static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc,
-                                     struct drm_framebuffer *fb,
-                                     struct drm_pending_vblank_event *event)
+                                    struct drm_framebuffer *fb,
+                                    struct drm_pending_vblank_event *event,
+                                    uint32_t page_flip_flags)
 {
        struct drm_device *dev = crtc->dev;
        struct exynos_drm_private *dev_priv = dev->dev_private;
index 84da3075a84bbf84272dd3a0165eb0077933b958..d54354421538df5e92907535bccf621db19a0719 100644 (file)
@@ -380,7 +380,8 @@ struct drm_i915_display_funcs {
        void (*init_clock_gating)(struct drm_device *dev);
        int (*queue_flip)(struct drm_device *dev, struct drm_crtc *crtc,
                          struct drm_framebuffer *fb,
-                         struct drm_i915_gem_object *obj);
+                         struct drm_i915_gem_object *obj,
+                         uint32_t flags);
        int (*update_plane)(struct drm_crtc *crtc, struct drm_framebuffer *fb,
                            int x, int y);
        void (*hpd_irq_setup)(struct drm_device *dev);
index 370c902fa629df23639addaaaf0ede0c20c51249..b52f374d0f00f039ef12781dd15edd99b77f7dd0 100644 (file)
@@ -7481,7 +7481,8 @@ inline static void intel_mark_page_flip_active(struct intel_crtc *intel_crtc)
 static int intel_gen2_queue_flip(struct drm_device *dev,
                                 struct drm_crtc *crtc,
                                 struct drm_framebuffer *fb,
-                                struct drm_i915_gem_object *obj)
+                                struct drm_i915_gem_object *obj,
+                                uint32_t flags)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -7525,7 +7526,8 @@ err:
 static int intel_gen3_queue_flip(struct drm_device *dev,
                                 struct drm_crtc *crtc,
                                 struct drm_framebuffer *fb,
-                                struct drm_i915_gem_object *obj)
+                                struct drm_i915_gem_object *obj,
+                                uint32_t flags)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -7566,7 +7568,8 @@ err:
 static int intel_gen4_queue_flip(struct drm_device *dev,
                                 struct drm_crtc *crtc,
                                 struct drm_framebuffer *fb,
-                                struct drm_i915_gem_object *obj)
+                                struct drm_i915_gem_object *obj,
+                                uint32_t flags)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -7614,7 +7617,8 @@ err:
 static int intel_gen6_queue_flip(struct drm_device *dev,
                                 struct drm_crtc *crtc,
                                 struct drm_framebuffer *fb,
-                                struct drm_i915_gem_object *obj)
+                                struct drm_i915_gem_object *obj,
+                                uint32_t flags)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -7664,7 +7668,8 @@ err:
 static int intel_gen7_queue_flip(struct drm_device *dev,
                                 struct drm_crtc *crtc,
                                 struct drm_framebuffer *fb,
-                                struct drm_i915_gem_object *obj)
+                                struct drm_i915_gem_object *obj,
+                                uint32_t flags)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -7714,14 +7719,16 @@ err:
 static int intel_default_queue_flip(struct drm_device *dev,
                                    struct drm_crtc *crtc,
                                    struct drm_framebuffer *fb,
-                                   struct drm_i915_gem_object *obj)
+                                   struct drm_i915_gem_object *obj,
+                                   uint32_t flags)
 {
        return -ENODEV;
 }
 
 static int intel_crtc_page_flip(struct drm_crtc *crtc,
                                struct drm_framebuffer *fb,
-                               struct drm_pending_vblank_event *event)
+                               struct drm_pending_vblank_event *event,
+                               uint32_t page_flip_flags)
 {
        struct drm_device *dev = crtc->dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
@@ -7791,7 +7798,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
        atomic_inc(&intel_crtc->unpin_work_count);
        intel_crtc->reset_counter = atomic_read(&dev_priv->gpu_error.reset_counter);
 
-       ret = dev_priv->display.queue_flip(dev, crtc, fb, obj);
+       ret = dev_priv->display.queue_flip(dev, crtc, fb, obj, page_flip_flags);
        if (ret)
                goto cleanup_pending;
 
index bda0fc40b207c9fc8fe0218e71e7d1d17cbae9d4..de6bea297cda8e22b8a896439b6c8f4570f0b9b4 100644 (file)
@@ -371,7 +371,8 @@ static void mdp4_crtc_load_lut(struct drm_crtc *crtc)
 
 static int mdp4_crtc_page_flip(struct drm_crtc *crtc,
                struct drm_framebuffer *new_fb,
-               struct drm_pending_vblank_event *event)
+               struct drm_pending_vblank_event *event,
+               uint32_t page_flip_flags)
 {
        struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
        struct drm_device *dev = crtc->dev;
index dbcf10681ab22fe0abaab27a564944daa34f7453..44202bf7b81993dd3b2195d5659e1d47865c1fe9 100644 (file)
@@ -521,7 +521,8 @@ fail:
 
 int
 nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
-                      struct drm_pending_vblank_event *event)
+                      struct drm_pending_vblank_event *event,
+                      uint32_t page_flip_flags)
 {
        struct drm_device *dev = crtc->dev;
        struct nouveau_drm *drm = nouveau_drm(dev);
index da84f1f40ec22bce747d04e843bcf4f64cd5b53b..025c66f8e0ed0b610693e9f023e7afc12fcb02db 100644 (file)
@@ -61,7 +61,8 @@ void nouveau_display_repin(struct drm_device *dev);
 void nouveau_display_resume(struct drm_device *dev);
 
 int  nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
-                           struct drm_pending_vblank_event *event);
+                           struct drm_pending_vblank_event *event,
+                           uint32_t page_flip_flags);
 int  nouveau_finish_page_flip(struct nouveau_channel *,
                              struct nouveau_page_flip_state *);
 
index 11a5263a5e9f038573cce77e40268ded917a0329..0fd2eb139f6e402cd6856d5996ee4faf6affa950 100644 (file)
@@ -331,7 +331,8 @@ static void page_flip_cb(void *arg)
 
 static int omap_crtc_page_flip_locked(struct drm_crtc *crtc,
                 struct drm_framebuffer *fb,
-                struct drm_pending_vblank_event *event)
+                struct drm_pending_vblank_event *event,
+                uint32_t page_flip_flags)
 {
        struct drm_device *dev = crtc->dev;
        struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
index c2b67b4e1ac2aba03fd01c2a6921c6d2593b15b0..358bd96c06c58907b7465b54191221a57ff72b45 100644 (file)
@@ -345,7 +345,8 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id)
 
 static int radeon_crtc_page_flip(struct drm_crtc *crtc,
                                 struct drm_framebuffer *fb,
-                                struct drm_pending_vblank_event *event)
+                                struct drm_pending_vblank_event *event,
+                                uint32_t page_flip_flags)
 {
        struct drm_device *dev = crtc->dev;
        struct radeon_device *rdev = dev->dev_private;
index 33df7a5831438092e16116d5594e38d2b8004e33..a9d24e4bf79280c90991c155634c0ca8bd87c1d9 100644 (file)
@@ -497,7 +497,8 @@ static irqreturn_t rcar_du_crtc_irq(int irq, void *arg)
 
 static int rcar_du_crtc_page_flip(struct drm_crtc *crtc,
                                  struct drm_framebuffer *fb,
-                                 struct drm_pending_vblank_event *event)
+                                 struct drm_pending_vblank_event *event,
+                                 uint32_t page_flip_flags)
 {
        struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
        struct drm_device *dev = rcrtc->crtc.dev;
index 99e2034e49ccf0687e4096e5912b025e6dc3df4f..54bad98e9477589742eb21fecb10fd30f560f209 100644 (file)
@@ -465,7 +465,8 @@ void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc)
 
 static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc,
                                    struct drm_framebuffer *fb,
-                                   struct drm_pending_vblank_event *event)
+                                   struct drm_pending_vblank_event *event,
+                                   uint32_t page_flip_flags)
 {
        struct shmob_drm_crtc *scrtc = to_shmob_crtc(crtc);
        struct drm_device *dev = scrtc->crtc.dev;
index fe4726628906b8defe0e8c584788e9c4deb889be..d36efc13b16fbd0dd2d34be0561acd53e1282289 100644 (file)
@@ -148,7 +148,8 @@ static void tilcdc_crtc_destroy(struct drm_crtc *crtc)
 
 static int tilcdc_crtc_page_flip(struct drm_crtc *crtc,
                struct drm_framebuffer *fb,
-               struct drm_pending_vblank_event *event)
+               struct drm_pending_vblank_event *event,
+               uint32_t page_flip_flags)
 {
        struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
        struct drm_device *dev = crtc->dev;
index d4607b2530d68d150c8bf545b6b6c1e8a6518dbd..fc43c060123679b1ec0ab7a6ac674bae80990ba1 100644 (file)
@@ -1706,7 +1706,8 @@ int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
 
 int vmw_du_page_flip(struct drm_crtc *crtc,
                     struct drm_framebuffer *fb,
-                    struct drm_pending_vblank_event *event)
+                    struct drm_pending_vblank_event *event,
+                    uint32_t page_flip_flags)
 {
        struct vmw_private *dev_priv = vmw_priv(crtc->dev);
        struct drm_framebuffer *old_fb = crtc->fb;
index 6fa89c9d621497f2e5769c718236d91237a0fc26..8d038c36bd57599b311f129532a768e9d39fdfa0 100644 (file)
@@ -123,7 +123,8 @@ struct vmw_display_unit {
 void vmw_display_unit_cleanup(struct vmw_display_unit *du);
 int vmw_du_page_flip(struct drm_crtc *crtc,
                     struct drm_framebuffer *fb,
-                    struct drm_pending_vblank_event *event);
+                    struct drm_pending_vblank_event *event,
+                    uint32_t page_flip_flags);
 void vmw_du_crtc_save(struct drm_crtc *crtc);
 void vmw_du_crtc_restore(struct drm_crtc *crtc);
 void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
index 9176a8171e6fc3769915e19676b1d11652188716..e39690a03e38dd10fb653ba92df9f42c0c8abb6f 100644 (file)
@@ -129,7 +129,8 @@ static void ipu_crtc_dpms(struct drm_crtc *crtc, int mode)
 
 static int ipu_page_flip(struct drm_crtc *crtc,
                struct drm_framebuffer *fb,
-               struct drm_pending_vblank_event *event)
+               struct drm_pending_vblank_event *event,
+               uint32_t page_flip_flags)
 {
        struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc);
        int ret;
index c4b1e6311467678ffb92ec987409ae0960ab865d..0c7fec5b8fef07d681536fa68fd63e01f3f9bb50 100644 (file)
@@ -363,7 +363,8 @@ struct drm_crtc_funcs {
         */
        int (*page_flip)(struct drm_crtc *crtc,
                         struct drm_framebuffer *fb,
-                        struct drm_pending_vblank_event *event);
+                        struct drm_pending_vblank_event *event,
+                        uint32_t flags);
 
        int (*set_property)(struct drm_crtc *crtc,
                            struct drm_property *property, uint64_t val);