vserver 1.9.3
[linux-2.6.git] / drivers / char / drm / drm_agpsupport.h
index 8b3439f..81b595e 100644 (file)
@@ -34,8 +34,7 @@
 #include "drmP.h"
 #include <linux/module.h>
 
-#if __REALLY_HAVE_AGP
-
+#if __OS_HAS_AGP
 
 #define DRM_AGP_GET (drm_agp_t *)inter_module_get("drm_agp")
 #define DRM_AGP_PUT inter_module_put("drm_agp")
@@ -79,7 +78,7 @@ int DRM(agp_info)(struct inode *inode, struct file *filp,
        info.id_vendor         = kern->device->vendor;
        info.id_device         = kern->device->device;
 
-       if (copy_to_user((drm_agp_info_t *)arg, &info, sizeof(info)))
+       if (copy_to_user((drm_agp_info_t __user *)arg, &info, sizeof(info)))
                return -EFAULT;
        return 0;
 }
@@ -103,7 +102,11 @@ int DRM(agp_acquire)(struct inode *inode, struct file *filp,
        drm_device_t     *dev    = priv->dev;
        int              retcode;
 
-       if (!dev->agp || dev->agp->acquired || !drm_agp->acquire)
+       if (!dev->agp)
+               return -ENODEV;
+       if (dev->agp->acquired)
+               return -EBUSY;
+       if (!drm_agp->acquire)
                return -EINVAL;
        if ((retcode = drm_agp->acquire()))
                return retcode;
@@ -169,7 +172,7 @@ int DRM(agp_enable)(struct inode *inode, struct file *filp,
        if (!dev->agp || !dev->agp->acquired || !drm_agp->enable)
                return -EINVAL;
 
-       if (copy_from_user(&mode, (drm_agp_mode_t *)arg, sizeof(mode)))
+       if (copy_from_user(&mode, (drm_agp_mode_t __user *)arg, sizeof(mode)))
                return -EFAULT;
 
        dev->agp->mode    = mode.mode;
@@ -201,10 +204,11 @@ int DRM(agp_alloc)(struct inode *inode, struct file *filp,
        DRM_AGP_MEM      *memory;
        unsigned long    pages;
        u32              type;
+       drm_agp_buffer_t __user *argp = (void __user *)arg;
 
        if (!dev->agp || !dev->agp->acquired)
                return -EINVAL;
-       if (copy_from_user(&request, (drm_agp_buffer_t *)arg, sizeof(request)))
+       if (copy_from_user(&request, argp, sizeof(request)))
                return -EFAULT;
        if (!(entry = DRM(alloc)(sizeof(*entry), DRM_MEM_AGPLISTS)))
                return -ENOMEM;
@@ -232,7 +236,7 @@ int DRM(agp_alloc)(struct inode *inode, struct file *filp,
        request.handle   = entry->handle;
        request.physical = memory->physical;
 
-       if (copy_to_user((drm_agp_buffer_t *)arg, &request, sizeof(request))) {
+       if (copy_to_user(argp, &request, sizeof(request))) {
                dev->agp->memory       = entry->next;
                dev->agp->memory->prev = NULL;
                DRM(free_agp)(memory, pages);
@@ -286,7 +290,7 @@ int DRM(agp_unbind)(struct inode *inode, struct file *filp,
 
        if (!dev->agp || !dev->agp->acquired)
                return -EINVAL;
-       if (copy_from_user(&request, (drm_agp_binding_t *)arg, sizeof(request)))
+       if (copy_from_user(&request, (drm_agp_binding_t __user *)arg, sizeof(request)))
                return -EFAULT;
        if (!(entry = DRM(agp_lookup_entry)(dev, request.handle)))
                return -EINVAL;
@@ -323,7 +327,7 @@ int DRM(agp_bind)(struct inode *inode, struct file *filp,
 
        if (!dev->agp || !dev->agp->acquired || !drm_agp->bind_memory)
                return -EINVAL;
-       if (copy_from_user(&request, (drm_agp_binding_t *)arg, sizeof(request)))
+       if (copy_from_user(&request, (drm_agp_binding_t __user *)arg, sizeof(request)))
                return -EFAULT;
        if (!(entry = DRM(agp_lookup_entry)(dev, request.handle)))
                return -EINVAL;
@@ -362,7 +366,7 @@ int DRM(agp_free)(struct inode *inode, struct file *filp,
 
        if (!dev->agp || !dev->agp->acquired)
                return -EINVAL;
-       if (copy_from_user(&request, (drm_agp_buffer_t *)arg, sizeof(request)))
+       if (copy_from_user(&request, (drm_agp_buffer_t __user *)arg, sizeof(request)))
                return -EFAULT;
        if (!(entry = DRM(agp_lookup_entry)(dev, request.handle)))
                return -EINVAL;
@@ -461,4 +465,4 @@ int DRM(agp_unbind_memory)(DRM_AGP_MEM *handle)
        return drm_agp->unbind_memory(handle);
 }
 
-#endif /* __REALLY_HAVE_AGP */
+#endif /* __OS_HAS_AGP */