aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm
diff options
context:
space:
mode:
Diffstat (limited to 'include/drm')
-rw-r--r--include/drm/drm.h1
-rw-r--r--include/drm/drm_crtc.h16
-rw-r--r--include/drm/drm_mode.h33
3 files changed, 50 insertions, 0 deletions
diff --git a/include/drm/drm.h b/include/drm/drm.h
index fa6d9155873d..3919a4f792ae 100644
--- a/include/drm/drm.h
+++ b/include/drm/drm.h
@@ -687,6 +687,7 @@ struct drm_gem_open {
687#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) 687#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
688#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) 688#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
689#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int) 689#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int)
690#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip)
690 691
691/** 692/**
692 * Device specific ioctls should only be in their respective headers 693 * Device specific ioctls should only be in their respective headers
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index b69347b8904f..4cc8a32dc4cf 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -290,6 +290,7 @@ struct drm_property {
290struct drm_crtc; 290struct drm_crtc;
291struct drm_connector; 291struct drm_connector;
292struct drm_encoder; 292struct drm_encoder;
293struct drm_pending_vblank_event;
293 294
294/** 295/**
295 * drm_crtc_funcs - control CRTCs for a given device 296 * drm_crtc_funcs - control CRTCs for a given device
@@ -333,6 +334,19 @@ struct drm_crtc_funcs {
333 void (*destroy)(struct drm_crtc *crtc); 334 void (*destroy)(struct drm_crtc *crtc);
334 335
335 int (*set_config)(struct drm_mode_set *set); 336 int (*set_config)(struct drm_mode_set *set);
337
338 /*
339 * Flip to the given framebuffer. This implements the page
340 * flip ioctl descibed in drm_mode.h, specifically, the
341 * implementation must return immediately and block all
342 * rendering to the current fb until the flip has completed.
343 * If userspace set the event flag in the ioctl, the event
344 * argument will point to an event to send back when the flip
345 * completes, otherwise it will be NULL.
346 */
347 int (*page_flip)(struct drm_crtc *crtc,
348 struct drm_framebuffer *fb,
349 struct drm_pending_vblank_event *event);
336}; 350};
337 351
338/** 352/**
@@ -756,6 +770,8 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
756extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, 770extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
757 void *data, struct drm_file *file_priv); 771 void *data, struct drm_file *file_priv);
758extern bool drm_detect_hdmi_monitor(struct edid *edid); 772extern bool drm_detect_hdmi_monitor(struct edid *edid);
773extern int drm_mode_page_flip_ioctl(struct drm_device *dev,
774 void *data, struct drm_file *file_priv);
759extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, 775extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
760 int hdisplay, int vdisplay, int vrefresh, 776 int hdisplay, int vdisplay, int vrefresh,
761 bool reduced, bool interlaced, bool margins); 777 bool reduced, bool interlaced, bool margins);
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
index 1f908416aedb..68ddc6175ae7 100644
--- a/include/drm/drm_mode.h
+++ b/include/drm/drm_mode.h
@@ -268,4 +268,37 @@ struct drm_mode_crtc_lut {
268 __u64 blue; 268 __u64 blue;
269}; 269};
270 270
271#define DRM_MODE_PAGE_FLIP_EVENT 0x01
272#define DRM_MODE_PAGE_FLIP_FLAGS DRM_MODE_PAGE_FLIP_EVENT
273
274/*
275 * Request a page flip on the specified crtc.
276 *
277 * This ioctl will ask KMS to schedule a page flip for the specified
278 * crtc. Once any pending rendering targeting the specified fb (as of
279 * ioctl time) has completed, the crtc will be reprogrammed to display
280 * that fb after the next vertical refresh. The ioctl returns
281 * immediately, but subsequent rendering to the current fb will block
282 * in the execbuffer ioctl until the page flip happens. If a page
283 * flip is already pending as the ioctl is called, EBUSY will be
284 * returned.
285 *
286 * The ioctl supports one flag, DRM_MODE_PAGE_FLIP_EVENT, which will
287 * request that drm sends back a vblank event (see drm.h: struct
288 * drm_event_vblank) when the page flip is done. The user_data field
289 * passed in with this ioctl will be returned as the user_data field
290 * in the vblank event struct.
291 *
292 * The reserved field must be zero until we figure out something
293 * clever to use it for.
294 */
295
296struct drm_mode_crtc_page_flip {
297 __u32 crtc_id;
298 __u32 fb_id;
299 __u32 flags;
300 __u32 reserved;
301 __u64 user_data;
302};
303
271#endif 304#endif