summaryrefslogtreecommitdiff
path: root/linux-core/i810_dma.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@linux.ie>2005-01-01 12:07:51 +0000
committerDave Airlie <airlied@linux.ie>2005-01-01 12:07:51 +0000
commitfe4ade81bb7a1242b18b84e012c1a293eea0420b (patch)
treeab155f82d7bd2342154ce8c570aa6851d7c6ca34 /linux-core/i810_dma.c
parente19fa7ada122a68d6bedf3d678e96545ed41a39f (diff)
i810/i830 bug with Jon's file operations changes
Diffstat (limited to 'linux-core/i810_dma.c')
-rw-r--r--linux-core/i810_dma.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/linux-core/i810_dma.c b/linux-core/i810_dma.c
index ab33cb19..1ce3e7de 100644
--- a/linux-core/i810_dma.c
+++ b/linux-core/i810_dma.c
@@ -110,7 +110,7 @@ static int i810_freelist_put(drm_device_t * dev, drm_buf_t * buf)
return 0;
}
-int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
+static int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
{
drm_file_t *priv = filp->private_data;
drm_device_t *dev;
@@ -138,24 +138,35 @@ int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
return 0;
}
+static struct file_operations i810_buffer_fops = {
+ .open = drm_open,
+ .release = drm_release,
+ .ioctl = drm_ioctl,
+ .mmap = i810_mmap_buffers,
+ .fasync = drm_fasync,
+};
+
static int i810_map_buffer(drm_buf_t * buf, struct file *filp)
{
drm_file_t *priv = filp->private_data;
drm_device_t *dev = priv->head->dev;
drm_i810_buf_priv_t *buf_priv = buf->dev_private;
drm_i810_private_t *dev_priv = dev->dev_private;
+ struct file_operations *old_fops;
int retcode = 0;
if (buf_priv->currently_mapped == I810_BUF_MAPPED)
return -EINVAL;
down_write(&current->mm->mmap_sem);
+ old_fops = filp->f_op;
+ filp->f_op = &i810_buffer_fops;
dev_priv->mmap_buffer = buf;
buf_priv->virtual = (void *)do_mmap(filp, 0, buf->total,
PROT_READ | PROT_WRITE,
MAP_SHARED, buf->bus_address);
dev_priv->mmap_buffer = NULL;
-
+ filp->f_op = old_fops;
if ((unsigned long)buf_priv->virtual > -1024UL) {
/* Real error */
DRM_ERROR("mmap error\n");