diff options
author | Dave Airlie <airlied@redhat.com> | 2011-02-06 21:16:14 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-02-06 21:16:14 -0500 |
commit | ff72145badb834e8051719ea66e024784d000cb4 (patch) | |
tree | 39dc5fc512e3e0836713de9defb91ea8b4033aa2 /drivers/gpu/drm/radeon/radeon_drv.c | |
parent | 1f692a14cbfbeb11f9a9c16f25c8ecb8ab50d3d5 (diff) |
drm: dumb scanout create/mmap for intel/radeon (v3)
This is just an idea that might or might not be a good idea,
it basically adds two ioctls to create a dumb and map a dumb buffer
suitable for scanout. The handle can be passed to the KMS ioctls to create
a framebuffer.
It looks to me like it would be useful in the following cases:
a) in development drivers - we can always provide a shadowfb fallback.
b) libkms users - we can clean up libkms a lot and avoid linking
to libdrm_*.
c) plymouth via libkms is a lot easier.
Userspace bits would be just calls + mmaps. We could probably
mark these handles somehow as not being suitable for acceleartion
so as top stop people who are dumber than dumb.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_drv.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 275b26a708d6..ca1b7d4c1d83 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -84,6 +84,16 @@ extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, int crtc, | |||
84 | extern struct drm_ioctl_desc radeon_ioctls_kms[]; | 84 | extern struct drm_ioctl_desc radeon_ioctls_kms[]; |
85 | extern int radeon_max_kms_ioctl; | 85 | extern int radeon_max_kms_ioctl; |
86 | int radeon_mmap(struct file *filp, struct vm_area_struct *vma); | 86 | int radeon_mmap(struct file *filp, struct vm_area_struct *vma); |
87 | int radeon_mode_dumb_mmap(struct drm_file *filp, | ||
88 | struct drm_device *dev, | ||
89 | uint32_t handle, uint64_t *offset_p); | ||
90 | int radeon_mode_dumb_create(struct drm_file *file_priv, | ||
91 | struct drm_device *dev, | ||
92 | struct drm_mode_create_dumb *args); | ||
93 | int radeon_mode_dumb_destroy(struct drm_file *file_priv, | ||
94 | struct drm_device *dev, | ||
95 | uint32_t handle); | ||
96 | |||
87 | #if defined(CONFIG_DEBUG_FS) | 97 | #if defined(CONFIG_DEBUG_FS) |
88 | int radeon_debugfs_init(struct drm_minor *minor); | 98 | int radeon_debugfs_init(struct drm_minor *minor); |
89 | void radeon_debugfs_cleanup(struct drm_minor *minor); | 99 | void radeon_debugfs_cleanup(struct drm_minor *minor); |
@@ -322,6 +332,9 @@ static struct drm_driver kms_driver = { | |||
322 | .gem_init_object = radeon_gem_object_init, | 332 | .gem_init_object = radeon_gem_object_init, |
323 | .gem_free_object = radeon_gem_object_free, | 333 | .gem_free_object = radeon_gem_object_free, |
324 | .dma_ioctl = radeon_dma_ioctl_kms, | 334 | .dma_ioctl = radeon_dma_ioctl_kms, |
335 | .dumb_create = radeon_mode_dumb_create, | ||
336 | .dumb_map_offset = radeon_mode_dumb_mmap, | ||
337 | .dumb_destroy = radeon_mode_dumb_destroy, | ||
325 | .fops = { | 338 | .fops = { |
326 | .owner = THIS_MODULE, | 339 | .owner = THIS_MODULE, |
327 | .open = drm_open, | 340 | .open = drm_open, |