diff options
author | Eric Anholt <eric@anholt.net> | 2009-12-01 12:01:54 -0500 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2009-12-01 12:01:54 -0500 |
commit | f40d6817a5c2bf84f5fe7b5d1a83f1e8f8669951 (patch) | |
tree | 1c515a34a60f65cbfd3cf1a387427d0a9fdf878f /include/drm | |
parent | 103a196f4224dc6872081305cf7f82ebf67aa7bd (diff) | |
parent | 46557bef3f3834ac33031c7be27d39d90d507442 (diff) |
Merge remote branch 'airlied/drm-next' into drm-intel-next
Diffstat (limited to 'include/drm')
-rw-r--r-- | include/drm/drm.h | 1 | ||||
-rw-r--r-- | include/drm/drmP.h | 33 | ||||
-rw-r--r-- | include/drm/drm_crtc.h | 16 | ||||
-rw-r--r-- | include/drm/drm_mode.h | 33 |
4 files changed, 50 insertions, 33 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/drmP.h b/include/drm/drmP.h index 1b807d0f6cdb..febf6c530c66 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -245,16 +245,6 @@ extern void drm_ut_debug_printk(unsigned int request_level, | |||
245 | 245 | ||
246 | #endif | 246 | #endif |
247 | 247 | ||
248 | #define DRM_PROC_LIMIT (PAGE_SIZE-80) | ||
249 | |||
250 | #define DRM_PROC_PRINT(fmt, arg...) \ | ||
251 | len += sprintf(&buf[len], fmt , ##arg); \ | ||
252 | if (len > DRM_PROC_LIMIT) { *eof = 1; return len - offset; } | ||
253 | |||
254 | #define DRM_PROC_PRINT_RET(ret, fmt, arg...) \ | ||
255 | len += sprintf(&buf[len], fmt , ##arg); \ | ||
256 | if (len > DRM_PROC_LIMIT) { ret; *eof = 1; return len - offset; } | ||
257 | |||
258 | /*@}*/ | 248 | /*@}*/ |
259 | 249 | ||
260 | /***********************************************************************/ | 250 | /***********************************************************************/ |
@@ -265,19 +255,8 @@ extern void drm_ut_debug_printk(unsigned int request_level, | |||
265 | 255 | ||
266 | #define DRM_LEFTCOUNT(x) (((x)->rp + (x)->count - (x)->wp) % ((x)->count + 1)) | 256 | #define DRM_LEFTCOUNT(x) (((x)->rp + (x)->count - (x)->wp) % ((x)->count + 1)) |
267 | #define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x)) | 257 | #define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x)) |
268 | #define DRM_WAITCOUNT(dev,idx) DRM_BUFCOUNT(&dev->queuelist[idx]->waitlist) | ||
269 | 258 | ||
270 | #define DRM_IF_VERSION(maj, min) (maj << 16 | min) | 259 | #define DRM_IF_VERSION(maj, min) (maj << 16 | min) |
271 | /** | ||
272 | * Get the private SAREA mapping. | ||
273 | * | ||
274 | * \param _dev DRM device. | ||
275 | * \param _ctx context number. | ||
276 | * \param _map output mapping. | ||
277 | */ | ||
278 | #define DRM_GET_PRIV_SAREA(_dev, _ctx, _map) do { \ | ||
279 | (_map) = (_dev)->context_sareas[_ctx]; \ | ||
280 | } while(0) | ||
281 | 260 | ||
282 | /** | 261 | /** |
283 | * Test that the hardware lock is held by the caller, returning otherwise. | 262 | * Test that the hardware lock is held by the caller, returning otherwise. |
@@ -297,18 +276,6 @@ do { \ | |||
297 | } while (0) | 276 | } while (0) |
298 | 277 | ||
299 | /** | 278 | /** |
300 | * Copy and IOCTL return string to user space | ||
301 | */ | ||
302 | #define DRM_COPY( name, value ) \ | ||
303 | len = strlen( value ); \ | ||
304 | if ( len > name##_len ) len = name##_len; \ | ||
305 | name##_len = strlen( value ); \ | ||
306 | if ( len && name ) { \ | ||
307 | if ( copy_to_user( name, value, len ) ) \ | ||
308 | return -EFAULT; \ | ||
309 | } | ||
310 | |||
311 | /** | ||
312 | * Ioctl function type. | 279 | * Ioctl function type. |
313 | * | 280 | * |
314 | * \param inode device inode. | 281 | * \param inode device inode. |
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index bfcc60d101db..51d613673b2e 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -290,6 +290,7 @@ struct drm_property { | |||
290 | struct drm_crtc; | 290 | struct drm_crtc; |
291 | struct drm_connector; | 291 | struct drm_connector; |
292 | struct drm_encoder; | 292 | struct drm_encoder; |
293 | struct 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 | /** |
@@ -757,6 +771,8 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev, | |||
757 | extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, | 771 | extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, |
758 | void *data, struct drm_file *file_priv); | 772 | void *data, struct drm_file *file_priv); |
759 | extern bool drm_detect_hdmi_monitor(struct edid *edid); | 773 | extern bool drm_detect_hdmi_monitor(struct edid *edid); |
774 | extern int drm_mode_page_flip_ioctl(struct drm_device *dev, | ||
775 | void *data, struct drm_file *file_priv); | ||
760 | extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, | 776 | extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, |
761 | int hdisplay, int vdisplay, int vrefresh, | 777 | int hdisplay, int vdisplay, int vrefresh, |
762 | bool reduced, bool interlaced, bool margins); | 778 | 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 | |||
296 | struct 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 |