aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_drv.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2011-02-06 21:16:14 -0500
committerDave Airlie <airlied@redhat.com>2011-02-06 21:16:14 -0500
commitff72145badb834e8051719ea66e024784d000cb4 (patch)
tree39dc5fc512e3e0836713de9defb91ea8b4033aa2 /drivers/gpu/drm/radeon/radeon_drv.c
parent1f692a14cbfbeb11f9a9c16f25c8ecb8ab50d3d5 (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.c13
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,
84extern struct drm_ioctl_desc radeon_ioctls_kms[]; 84extern struct drm_ioctl_desc radeon_ioctls_kms[];
85extern int radeon_max_kms_ioctl; 85extern int radeon_max_kms_ioctl;
86int radeon_mmap(struct file *filp, struct vm_area_struct *vma); 86int radeon_mmap(struct file *filp, struct vm_area_struct *vma);
87int radeon_mode_dumb_mmap(struct drm_file *filp,
88 struct drm_device *dev,
89 uint32_t handle, uint64_t *offset_p);
90int radeon_mode_dumb_create(struct drm_file *file_priv,
91 struct drm_device *dev,
92 struct drm_mode_create_dumb *args);
93int 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)
88int radeon_debugfs_init(struct drm_minor *minor); 98int radeon_debugfs_init(struct drm_minor *minor);
89void radeon_debugfs_cleanup(struct drm_minor *minor); 99void 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,