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 |
