Commit 2408898e authored by Steve Longerbeam's avatar Steve Longerbeam Committed by Greg Kroah-Hartman
Browse files

staging: vboxvideo: Add page-flip support



Adds crtc page-flip support by passing the new requested framebuffer
to vbox_crtc_do_set_base().

Note there is no attempt to support vblank interrupts, it's not
not known how to do this in VBOX or if it is even possible. Since
this page-flip implementation does not try to sync the page-flip
to vertical blanking, tearing effects are possible.

Signed-off-by: default avatarSteve Longerbeam <steve_longerbeam@mentor.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ba67f54d
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -308,6 +308,31 @@ static int vbox_crtc_mode_set(struct drm_crtc *crtc,
	return ret;
}

static int vbox_crtc_page_flip(struct drm_crtc *crtc,
			       struct drm_framebuffer *fb,
			       struct drm_pending_vblank_event *event,
			       uint32_t page_flip_flags,
			       struct drm_modeset_acquire_ctx *ctx)
{
	struct vbox_private *vbox = crtc->dev->dev_private;
	struct drm_device *drm = vbox->dev;
	unsigned long flags;
	int rc;

	rc = vbox_crtc_do_set_base(crtc, CRTC_FB(crtc), fb, 0, 0);
	if (rc)
		return rc;

	spin_lock_irqsave(&drm->event_lock, flags);

	if (event)
		drm_crtc_send_vblank_event(crtc, event);

	spin_unlock_irqrestore(&drm->event_lock, flags);

	return 0;
}

static void vbox_crtc_disable(struct drm_crtc *crtc)
{
}
@@ -346,6 +371,7 @@ static const struct drm_crtc_funcs vbox_crtc_funcs = {
	.reset = vbox_crtc_reset,
	.set_config = drm_crtc_helper_set_config,
	/* .gamma_set = vbox_crtc_gamma_set, */
	.page_flip = vbox_crtc_page_flip,
	.destroy = vbox_crtc_destroy,
};