]> err.no Git - linux-2.6/blobdiff - drivers/char/drm/drm_agpsupport.c
libata-sff: improve HSM violation reporting
[linux-2.6] / drivers / char / drm / drm_agpsupport.c
index 6d7a69abdc628adcdd10f555f90d48e44a238477..aefa5ac4c0b1fdcec03418ca610e7ae781d1c8c4 100644 (file)
@@ -71,19 +71,16 @@ int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info)
 
 EXPORT_SYMBOL(drm_agp_info);
 
-int drm_agp_info_ioctl(struct inode *inode, struct drm_file *file_priv,
-                      unsigned int cmd, unsigned long arg)
+int drm_agp_info_ioctl(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       struct drm_device *dev = file_priv->head->dev;
-       struct drm_agp_info info;
+       struct drm_agp_info *info = data;
        int err;
 
-       err = drm_agp_info(dev, &info);
+       err = drm_agp_info(dev, info);
        if (err)
                return err;
 
-       if (copy_to_user((struct drm_agp_info __user *) arg, &info, sizeof(info)))
-               return -EFAULT;
        return 0;
 }
 
@@ -122,10 +119,10 @@ EXPORT_SYMBOL(drm_agp_acquire);
  * Verifies the AGP device hasn't been acquired before and calls
  * \c agp_backend_acquire.
  */
-int drm_agp_acquire_ioctl(struct inode *inode, struct drm_file *file_priv,
-                         unsigned int cmd, unsigned long arg)
+int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv)
 {
-       return drm_agp_acquire((struct drm_device *) file_priv->head->dev);
+       return drm_agp_acquire((struct drm_device *) file_priv->minor->dev);
 }
 
 /**
@@ -146,11 +143,9 @@ int drm_agp_release(struct drm_device * dev)
 }
 EXPORT_SYMBOL(drm_agp_release);
 
-int drm_agp_release_ioctl(struct inode *inode, struct drm_file *file_priv,
-                         unsigned int cmd, unsigned long arg)
+int drm_agp_release_ioctl(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv)
 {
-       struct drm_device *dev = file_priv->head->dev;
-
        return drm_agp_release(dev);
 }
 
@@ -171,23 +166,18 @@ int drm_agp_enable(struct drm_device * dev, struct drm_agp_mode mode)
 
        dev->agp->mode = mode.mode;
        agp_enable(dev->agp->bridge, mode.mode);
-       dev->agp->base = dev->agp->agp_info.aper_base;
        dev->agp->enabled = 1;
        return 0;
 }
 
 EXPORT_SYMBOL(drm_agp_enable);
 
-int drm_agp_enable_ioctl(struct inode *inode, struct drm_file *file_priv,
-                        unsigned int cmd, unsigned long arg)
+int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       struct drm_device *dev = file_priv->head->dev;
-       struct drm_agp_mode mode;
-
-       if (copy_from_user(&mode, (struct drm_agp_mode __user *) arg, sizeof(mode)))
-               return -EFAULT;
+       struct drm_agp_mode *mode = data;
 
-       return drm_agp_enable(dev, mode);
+       return drm_agp_enable(dev, *mode);
 }
 
 /**
@@ -236,34 +226,13 @@ int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
 }
 EXPORT_SYMBOL(drm_agp_alloc);
 
-int drm_agp_alloc_ioctl(struct inode *inode, struct drm_file *file_priv,
-                       unsigned int cmd, unsigned long arg)
-{
-       struct drm_device *dev = file_priv->head->dev;
-       struct drm_agp_buffer request;
-       struct drm_agp_buffer __user *argp = (void __user *)arg;
-       int err;
-
-       if (copy_from_user(&request, argp, sizeof(request)))
-               return -EFAULT;
 
-       err = drm_agp_alloc(dev, &request);
-       if (err)
-               return err;
-
-       if (copy_to_user(argp, &request, sizeof(request))) {
-               struct drm_agp_mem *entry;
-               list_for_each_entry(entry, &dev->agp->memory, head) {
-                       if (entry->handle == request.handle)
-                               break;
-               }
-               list_del(&entry->head);
-               drm_free_agp(entry->memory, entry->pages);
-               drm_free(entry, sizeof(*entry), DRM_MEM_AGPLISTS);
-               return -EFAULT;
-       }
+int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv)
+{
+       struct drm_agp_buffer *request = data;
 
-       return 0;
+       return drm_agp_alloc(dev, request);
 }
 
 /**
@@ -317,17 +286,13 @@ int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request)
 }
 EXPORT_SYMBOL(drm_agp_unbind);
 
-int drm_agp_unbind_ioctl(struct inode *inode, struct drm_file *file_priv,
-                        unsigned int cmd, unsigned long arg)
-{
-       struct drm_device *dev = file_priv->head->dev;
-       struct drm_agp_binding request;
 
-       if (copy_from_user
-           (&request, (struct drm_agp_binding __user *) arg, sizeof(request)))
-               return -EFAULT;
+int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
+{
+       struct drm_agp_binding *request = data;
 
-       return drm_agp_unbind(dev, &request);
+       return drm_agp_unbind(dev, request);
 }
 
 /**
@@ -365,17 +330,13 @@ int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request)
 }
 EXPORT_SYMBOL(drm_agp_bind);
 
-int drm_agp_bind_ioctl(struct inode *inode, struct drm_file *file_priv,
-                      unsigned int cmd, unsigned long arg)
-{
-       struct drm_device *dev = file_priv->head->dev;
-       struct drm_agp_binding request;
 
-       if (copy_from_user
-           (&request, (struct drm_agp_binding __user *) arg, sizeof(request)))
-               return -EFAULT;
+int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
+{
+       struct drm_agp_binding *request = data;
 
-       return drm_agp_bind(dev, &request);
+       return drm_agp_bind(dev, request);
 }
 
 /**
@@ -411,17 +372,14 @@ int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request)
 }
 EXPORT_SYMBOL(drm_agp_free);
 
-int drm_agp_free_ioctl(struct inode *inode, struct drm_file *file_priv,
-                      unsigned int cmd, unsigned long arg)
-{
-       struct drm_device *dev = file_priv->head->dev;
-       struct drm_agp_buffer request;
 
-       if (copy_from_user
-           (&request, (struct drm_agp_buffer __user *) arg, sizeof(request)))
-               return -EFAULT;
 
-       return drm_agp_free(dev, &request);
+int drm_agp_free_ioctl(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
+{
+       struct drm_agp_buffer *request = data;
+
+       return drm_agp_free(dev, request);
 }
 
 /**
@@ -458,7 +416,7 @@ struct drm_agp_head *drm_agp_init(struct drm_device *dev)
        INIT_LIST_HEAD(&head->memory);
        head->cant_use_aperture = head->agp_info.cant_use_aperture;
        head->page_mask = head->agp_info.page_mask;
-
+       head->base = head->agp_info.aper_base;
        return head;
 }