Merge branch 'master' of ssh+git://git.freedesktop.org/git/mesa/drm into xgi-0-0-2
authorIan Romanick <idr@us.ibm.com>
Thu, 26 Jul 2007 23:58:28 +0000 (16:58 -0700)
committerIan Romanick <idr@us.ibm.com>
Thu, 26 Jul 2007 23:58:28 +0000 (16:58 -0700)
Conflicts:

linux-core/drmP.h
linux-core/drm_scatter.c

218 files changed:
.gitignore
Makefile.am
bsd-core/Makefile
bsd-core/drm.h [new symlink]
bsd-core/drmP.h
bsd-core/drm_agpsupport.c
bsd-core/drm_auth.c
bsd-core/drm_bufs.c
bsd-core/drm_context.c
bsd-core/drm_dma.c
bsd-core/drm_drawable.c
bsd-core/drm_drv.c
bsd-core/drm_fops.c
bsd-core/drm_ioctl.c
bsd-core/drm_irq.c
bsd-core/drm_lock.c
bsd-core/drm_sarea.h [new symlink]
bsd-core/drm_scatter.c
bsd-core/drm_vm.c
bsd-core/i915_dma.c [new symlink]
bsd-core/i915_drm.h [new symlink]
bsd-core/i915_drv.h [new symlink]
bsd-core/i915_irq.c [new symlink]
bsd-core/i915_mem.c [new symlink]
bsd-core/mach64_dma.c [new symlink]
bsd-core/mach64_drm.h [new symlink]
bsd-core/mach64_drv.h [new symlink]
bsd-core/mach64_irq.c [new symlink]
bsd-core/mach64_state.c [new symlink]
bsd-core/mga_dma.c [new symlink]
bsd-core/mga_drm.h [new symlink]
bsd-core/mga_drv.h [new symlink]
bsd-core/mga_irq.c [new symlink]
bsd-core/mga_state.c [new symlink]
bsd-core/mga_ucode.h [new symlink]
bsd-core/mga_warp.c [new symlink]
bsd-core/r128_cce.c [new symlink]
bsd-core/r128_drm.h [new symlink]
bsd-core/r128_drv.h [new symlink]
bsd-core/r128_irq.c [new symlink]
bsd-core/r128_state.c [new symlink]
bsd-core/r300_cmdbuf.c [new symlink]
bsd-core/r300_reg.h [new symlink]
bsd-core/radeon_cp.c [new symlink]
bsd-core/radeon_drm.h [new symlink]
bsd-core/radeon_drv.h [new symlink]
bsd-core/radeon_irq.c [new symlink]
bsd-core/radeon_mem.c [new symlink]
bsd-core/radeon_state.c [new symlink]
bsd-core/savage_bci.c [new symlink]
bsd-core/savage_drm.h [new symlink]
bsd-core/savage_drv.h [new symlink]
bsd-core/savage_state.c [new symlink]
bsd-core/sis_drm.h [new symlink]
bsd-core/sis_drv.h [new symlink]
bsd-core/sis_ds.c [new symlink]
bsd-core/sis_ds.h [new symlink]
bsd-core/sis_mm.c [new symlink]
bsd-core/tdfx_drv.h [new symlink]
bsd-core/via_3d_reg.h [new symlink]
bsd-core/via_dma.c [new symlink]
bsd-core/via_drm.h [new symlink]
bsd-core/via_drv.h [new symlink]
bsd-core/via_ds.c [new symlink]
bsd-core/via_ds.h [new symlink]
bsd-core/via_irq.c [new symlink]
bsd-core/via_map.c [new symlink]
bsd-core/via_mm.c [new symlink]
bsd-core/via_mm.h [new symlink]
bsd-core/via_verifier.c [new symlink]
bsd-core/via_verifier.h [new symlink]
bsd-core/via_video.c [new symlink]
configure.ac
libdrm/xf86drm.c
libdrm/xf86drm.h
libdrm/xf86drmHash.c
libdrm/xf86drmRandom.c
libdrm/xf86drmSL.c
libdrm/xf86mm.h
linux-core/Makefile.kernel
linux-core/ati_pcigart.c
linux-core/drmP.h
linux-core/drm_agpsupport.c
linux-core/drm_auth.c
linux-core/drm_bo.c
linux-core/drm_bo_move.c
linux-core/drm_bufs.c
linux-core/drm_compat.c
linux-core/drm_compat.h
linux-core/drm_context.c
linux-core/drm_dma.c
linux-core/drm_drawable.c
linux-core/drm_drv.c
linux-core/drm_fence.c
linux-core/drm_fops.c
linux-core/drm_hashtab.c
linux-core/drm_hashtab.h
linux-core/drm_ioc32.c
linux-core/drm_ioctl.c
linux-core/drm_irq.c
linux-core/drm_lock.c
linux-core/drm_memory.c
linux-core/drm_memory_debug.c
linux-core/drm_memory_debug.h
linux-core/drm_mm.c
linux-core/drm_object.c
linux-core/drm_objects.h
linux-core/drm_os_linux.h
linux-core/drm_pci.c
linux-core/drm_proc.c
linux-core/drm_scatter.c
linux-core/drm_sman.c
linux-core/drm_sman.h
linux-core/drm_stub.c
linux-core/drm_sysfs.c
linux-core/drm_ttm.c
linux-core/drm_vm.c
linux-core/ffb_context.c
linux-core/ffb_drv.c
linux-core/ffb_drv.h
linux-core/i810_dma.c
linux-core/i810_drm.h
linux-core/i810_drv.h
linux-core/i915_buffer.c
linux-core/i915_drv.c
linux-core/i915_fence.c
linux-core/mga_drv.c
linux-core/nouveau_drv.c
linux-core/nouveau_sgdma.c [new file with mode: 0644]
linux-core/sis_drv.c
linux-core/sis_mm.c
linux-core/via_buffer.c
linux-core/via_dmablit.c
linux-core/via_dmablit.h
linux-core/via_fence.c
linux-core/via_mm.c
shared-core/drm.h
shared-core/drm_sarea.h
shared-core/i915_dma.c
shared-core/i915_drm.h
shared-core/i915_drv.h
shared-core/i915_irq.c
shared-core/i915_mem.c
shared-core/mach64_dma.c
shared-core/mach64_drm.h
shared-core/mach64_drv.h
shared-core/mach64_irq.c
shared-core/mach64_state.c
shared-core/mga_dma.c
shared-core/mga_drm.h
shared-core/mga_drv.h
shared-core/mga_irq.c
shared-core/mga_state.c
shared-core/mga_warp.c
shared-core/nouveau_drm.h
shared-core/nouveau_drv.h
shared-core/nouveau_fifo.c
shared-core/nouveau_irq.c
shared-core/nouveau_mem.c
shared-core/nouveau_notifier.c
shared-core/nouveau_object.c
shared-core/nouveau_reg.h
shared-core/nouveau_state.c
shared-core/nv04_fb.c
shared-core/nv04_fifo.c
shared-core/nv04_graph.c
shared-core/nv04_instmem.c
shared-core/nv04_mc.c
shared-core/nv04_timer.c
shared-core/nv10_fb.c
shared-core/nv10_fifo.c
shared-core/nv10_graph.c
shared-core/nv20_graph.c
shared-core/nv30_graph.c
shared-core/nv40_fb.c
shared-core/nv40_fifo.c
shared-core/nv40_graph.c
shared-core/nv40_mc.c
shared-core/nv50_fifo.c
shared-core/nv50_graph.c
shared-core/nv50_instmem.c
shared-core/nv50_mc.c
shared-core/r128_cce.c
shared-core/r128_drm.h
shared-core/r128_drv.h
shared-core/r128_irq.c
shared-core/r128_state.c
shared-core/r300_cmdbuf.c
shared-core/radeon_cp.c
shared-core/radeon_drm.h
shared-core/radeon_drv.h
shared-core/radeon_irq.c
shared-core/radeon_mem.c
shared-core/radeon_state.c
shared-core/savage_bci.c
shared-core/savage_drm.h
shared-core/savage_drv.h
shared-core/savage_state.c
shared-core/sis_drv.h
shared-core/sis_mm.c
shared-core/via_dma.c
shared-core/via_drm.h
shared-core/via_drv.c
shared-core/via_drv.h
shared-core/via_irq.c
shared-core/via_map.c
shared-core/via_mm.c
shared-core/via_verifier.c
shared-core/via_verifier.h
shared-core/via_video.c
tests/Makefile [deleted file]
tests/Makefile.am [new file with mode: 0644]
tests/drmtest.c [new file with mode: 0644]
tests/drmtest.h [new file with mode: 0644]
tests/getclient.c [new file with mode: 0644]
tests/getversion.c [new file with mode: 0644]
tests/openclose.c [new file with mode: 0644]
tests/updatedraw.c [new file with mode: 0644]

index 0fb0f49..8447db2 100644 (file)
@@ -1,55 +1,5 @@
-bsd-core/linux
-bsd-core/drm.h
-bsd-core/drm_sarea.h
-bsd-core/i915_dma.c
-bsd-core/i915_drm.h
-bsd-core/i915_drv.h
-bsd-core/i915_irq.c
-bsd-core/i915_mem.c
-bsd-core/mach64_dma.c
-bsd-core/mach64_drm.h
-bsd-core/mach64_drv.h
-bsd-core/mach64_irq.c
-bsd-core/mach64_state.c
-bsd-core/mga_dma.c
-bsd-core/mga_drm.h
-bsd-core/mga_drv.h
-bsd-core/mga_irq.c
-bsd-core/mga_state.c
-bsd-core/mga_ucode.h
-bsd-core/mga_warp.c
-bsd-core/nv_drv.h
-bsd-core/r128_cce.c
-bsd-core/r128_drm.h
-bsd-core/r128_drv.h
-bsd-core/r128_irq.c
-bsd-core/r128_state.c
-bsd-core/r300_cmdbuf.c
-bsd-core/r300_reg.h
-bsd-core/radeon_cp.c
-bsd-core/radeon_drm.h
-bsd-core/radeon_drv.h
-bsd-core/radeon_irq.c
-bsd-core/radeon_mem.c
-bsd-core/radeon_state.c
-bsd-core/savage_bci.c
-bsd-core/savage_drm.h
-bsd-core/savage_drv.h
-bsd-core/savage_state.c
-bsd-core/sis_drm.h
-bsd-core/sis_drv.h
-bsd-core/tdfx_drv.h
-bsd-core/via_3d_reg.h
-bsd-core/via_dma.c
-bsd-core/via_drm.h
-bsd-core/via_drv.c
-bsd-core/via_drv.h
-bsd-core/via_irq.c
-bsd-core/via_map.c
-bsd-core/via_verifier.c
-bsd-core/via_verifier.h
-bsd-core/via_video.c
-*~
+bsd-core/*/@
+bsd-core/*/machine
 *.flags
 *.ko
 *.ko.cmd
@@ -75,6 +25,7 @@ config.log
 config.status
 config.sub
 configure
+configure.lineno
 cscope.*
 depcomp
 device_if.h
@@ -100,3 +51,9 @@ sis.kld
 stamp-h1
 tdfx.kld
 via.kld
+tests/dristat
+tests/drmstat
+tests/getclient
+tests/getversion
+tests/openclose
+tests/updatedraw
index 8c5dc70..5b1ae60 100644 (file)
@@ -22,7 +22,7 @@
 # here too, but let's just do libdrm for now
 
 AUTOMAKE_OPTIONS = foreign
-SUBDIRS = libdrm shared-core
+SUBDIRS = libdrm shared-core tests
 
 pkgconfigdir = @pkgconfigdir@
 pkgconfig_DATA = libdrm.pc
index 00889da..a58ac0a 100644 (file)
@@ -1,71 +1,11 @@
 SHARED=                ../shared-core
-SHAREDFILES=   drm.h \
-               drm_sarea.h \
-               i915_dma.c \
-               i915_drm.h \
-               i915_drv.h \
-               i915_irq.c \
-               i915_mem.c \
-               mach64_dma.c \
-               mach64_drm.h \
-               mach64_drv.h \
-               mach64_irq.c \
-               mach64_state.c \
-               mga_dma.c \
-               mga_drm.h \
-               mga_drv.h \
-               mga_irq.c \
-               mga_state.c \
-               mga_ucode.h \
-               mga_warp.c \
-               r128_cce.c \
-               r128_drm.h \
-               r128_drv.h \
-               r128_irq.c \
-               r128_state.c \
-               radeon_cp.c \
-               radeon_drm.h \
-               radeon_drv.h \
-               radeon_irq.c \
-               radeon_mem.c \
-               radeon_state.c \
-               r300_cmdbuf.c \
-               r300_reg.h \
-               savage_bci.c \
-               savage_drm.h \
-               savage_drv.h \
-               savage_state.c \
-               sis_drm.h \
-               sis_drv.h \
-               sis_ds.c \
-               sis_ds.h \
-               sis_mm.c \
-               tdfx_drv.h \
-               via_3d_reg.h \
-               via_dma.c \
-               via_drm.h \
-               via_drv.h \
-               via_ds.c \
-               via_ds.h \
-               via_irq.c \
-               via_map.c \
-               via_mm.c \
-               via_mm.h \
-               via_verifier.c \
-               via_verifier.h \
-               via_video.c
 
 SUBDIR = drm mach64 mga r128 radeon savage sis tdfx i915 # via
 
-CLEANFILES+= ${SHAREDFILES}
-
 .include <bsd.obj.mk>
 
-depend: drm_pciids.h ${SHAREDFILES}
-all: drm_pciids.h ${SHAREDFILES}
+depend: drm_pciids.h
+all: drm_pciids.h
 
 drm_pciids.h: ${SHARED}/drm_pciids.txt
        sh ../scripts/create_bsd_pci_lists.sh < ${SHARED}/drm_pciids.txt
-
-${SHAREDFILES}:
-       ln -sf ${SHARED}/$@ $@
diff --git a/bsd-core/drm.h b/bsd-core/drm.h
new file mode 120000 (symlink)
index 0000000..2963669
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/drm.h
\ No newline at end of file
index 6e05b58..73342d0 100644 (file)
@@ -59,6 +59,8 @@ typedef struct drm_file drm_file_t;
 #include <sys/bus.h>
 #include <sys/signalvar.h>
 #include <sys/poll.h>
+#include <sys/tree.h>
+#include <sys/taskqueue.h>
 #include <vm/vm.h>
 #include <vm/pmap.h>
 #include <vm/vm_extern.h>
@@ -152,6 +154,7 @@ typedef struct drm_file drm_file_t;
 #define DRM_MEM_CTXBITMAP 17
 #define DRM_MEM_STUB     18
 #define DRM_MEM_SGLISTS          19
+#define DRM_MEM_DRAWABLE  20
 
 #define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8)
 
@@ -184,10 +187,15 @@ MALLOC_DECLARE(M_DRM);
 #define DRM_CURPROC            curthread
 #define DRM_STRUCTPROC         struct thread
 #define DRM_SPINTYPE           struct mtx
-#define DRM_SPININIT(l,name)   mtx_init(&l, name, NULL, MTX_DEF)
-#define DRM_SPINUNINIT(l)      mtx_destroy(&l)
+#define DRM_SPININIT(l,name)   mtx_init(l, name, NULL, MTX_DEF)
+#define DRM_SPINUNINIT(l)      mtx_destroy(l)
 #define DRM_SPINLOCK(l)                mtx_lock(l)
-#define DRM_SPINUNLOCK(u)      mtx_unlock(u);
+#define DRM_SPINUNLOCK(u)      mtx_unlock(u)
+#define DRM_SPINLOCK_IRQSAVE(l, irqflags) do {         \
+       mtx_lock(l);                                    \
+       (void)irqflags;                                 \
+} while (0)
+#define DRM_SPINUNLOCK_IRQRESTORE(u, irqflags) mtx_unlock(u)
 #define DRM_SPINLOCK_ASSERT(l) mtx_assert(l, MA_OWNED)
 #define DRM_CURRENTPID         curthread->td_proc->p_pid
 #define DRM_LOCK()             mtx_lock(&dev->dev_lock)
@@ -209,10 +217,6 @@ MALLOC_DECLARE(M_DRM);
 #define spldrm()               spltty()
 #endif /* __NetBSD__ || __OpenBSD__ */
 
-/* Currently our DRMFILE (filp) is a void * which is actually the pid
- * of the current process.  It should be a per-open unique pointer, but
- * code for that is not yet written */
-#define DRMFILE                        void *
 #define DRM_IRQ_ARGS           void *arg
 typedef void                   irqreturn_t;
 #define IRQ_HANDLED            /* nothing */
@@ -226,11 +230,15 @@ enum {
 #define DRM_AGP_MEM            struct agp_memory_info
 
 #if defined(__FreeBSD__)
-#define DRM_DEVICE                                                     \
-       drm_device_t *dev = kdev->si_drv1
-#define DRM_IOCTL_ARGS         struct cdev *kdev, u_long cmd, caddr_t data, \
-                               int flags, DRM_STRUCTPROC *p, DRMFILE filp
+#define drm_get_device_from_kdev(_kdev) (_kdev->si_drv1)
+#elif defined(__NetBSD__)
+#define drm_get_device_from_kdev(_kdev) device_lookup(&drm_cd, minor(_kdev))
+#elif defined(__OpenBSD__)
+#define drm_get_device_from_kdev(_kdev) device_lookup(&drm_cd, \
+    minor(_kdev)))->dv_cfdata->cf_driver->cd_devs[minor(_kdev)]
+#endif
 
+#if defined(__FreeBSD__)
 #define PAGE_ALIGN(addr) round_page(addr)
 /* DRM_SUSER returns true if the user is superuser */
 #if __FreeBSD_version >= 700000
@@ -244,17 +252,6 @@ enum {
 
 #else /* __FreeBSD__ */
 
-#if defined(__NetBSD__)
-#define DRM_DEVICE                                                     \
-       drm_device_t *dev = device_lookup(&drm_cd, minor(kdev))
-#elif defined(__OpenBSD__)
-#define DRM_DEVICE                                                     \
-       drm_device_t *dev = (device_lookup(&drm_cd,                     \
-           minor(kdev)))->dv_cfdata->cf_driver->cd_devs[minor(kdev)]
-#endif /* __OpenBSD__ */
-#define DRM_IOCTL_ARGS         dev_t kdev, u_long cmd, caddr_t data, \
-                               int flags, DRM_STRUCTPROC *p, DRMFILE filp
-
 #define CDEV_MAJOR             34
 #define PAGE_ALIGN(addr)       (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
 /* DRM_SUSER returns true if the user is superuser */
@@ -342,14 +339,6 @@ typedef vaddr_t vm_offset_t;
        (!uvm_useracc((caddr_t)uaddr, size, VM_PROT_READ))
 #endif /* !__FreeBSD__ */
 
-#define DRM_COPY_TO_USER_IOCTL(user, kern, size)       \
-       if ( IOCPARM_LEN(cmd) != size)                  \
-               return EINVAL;                          \
-       *user = kern;
-#define DRM_COPY_FROM_USER_IOCTL(kern, user, size) \
-       if ( IOCPARM_LEN(cmd) != size)                  \
-               return EINVAL;                          \
-       kern = *user;
 #define DRM_COPY_TO_USER(user, kern, size) \
        copyout(kern, user, size)
 #define DRM_COPY_FROM_USER(kern, user, size) \
@@ -369,7 +358,6 @@ typedef vaddr_t vm_offset_t;
 #define cpu_to_le32(x) htole32(x)
 #define le32_to_cpu(x) le32toh(x)
 
-#define DRM_ERR(v)             v
 #define DRM_HZ                 hz
 #define DRM_UDELAY(udelay)     DELAY(udelay)
 #define DRM_TIME_SLICE         (hz/20)  /* Time slice for GLXContexts    */
@@ -378,23 +366,10 @@ typedef vaddr_t vm_offset_t;
        (_map) = (_dev)->context_sareas[_ctx];          \
 } while(0)
 
-#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp)                 \
-do {                                                           \
-       if (_filp != (DRMFILE)(intptr_t)DRM_CURRENTPID) {       \
-               DRM_ERROR("filp doesn't match curproc\n");      \
-               return EINVAL;                                  \
-       }                                                       \
-       _priv = drm_find_file_by_proc(dev, DRM_CURPROC);        \
-       if (_priv == NULL) {                                    \
-               DRM_ERROR("can't find authenticator\n");        \
-               return EINVAL;                                  \
-       }                                                       \
-} while (0)
-
-#define LOCK_TEST_WITH_RETURN(dev, filp)                               \
+#define LOCK_TEST_WITH_RETURN(dev, file_priv)                          \
 do {                                                                   \
        if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) ||              \
-            dev->lock.filp != filp) {                                  \
+            dev->lock.file_priv != file_priv) {                        \
                DRM_ERROR("%s called without lock held\n",              \
                           __FUNCTION__);                               \
                return EINVAL;                                          \
@@ -407,7 +382,7 @@ for ( ret = 0 ; !ret && !(condition) ; ) {                  \
        DRM_UNLOCK();                                           \
        mtx_lock(&dev->irq_lock);                               \
        if (!(condition))                                       \
-          ret = msleep(&(queue), &dev->irq_lock,               \
+          ret = -msleep(&(queue), &dev->irq_lock,              \
                         PZERO | PCATCH, "drmwtq", (timeout));  \
        mtx_unlock(&dev->irq_lock);                             \
        DRM_LOCK();                                             \
@@ -447,9 +422,16 @@ typedef struct drm_pci_id_list
 #define DRM_MASTER     0x2
 #define DRM_ROOT_ONLY  0x4
 typedef struct drm_ioctl_desc {
-       int                  (*func)(DRM_IOCTL_ARGS);
+       unsigned long cmd;
+       int (*func)(drm_device_t *dev, void *data, struct drm_file *file_priv);
        int flags;
 } drm_ioctl_desc_t;
+/**
+ * Creates a driver or general drm_ioctl_desc array entry for the given
+ * ioctl, for use by drm_ioctl().
+ */
+#define DRM_IOCTL_DEF(ioctl, func, flags) \
+       [DRM_IOCTL_NR(ioctl)] = {ioctl, func, flags}
 
 typedef struct drm_magic_entry {
        drm_magic_t            magic;
@@ -472,7 +454,7 @@ typedef struct drm_buf {
        unsigned long     bus_address; /* Bus address of buffer              */
        struct drm_buf    *next;       /* Kernel-only: used for free list    */
        __volatile__ int  pending;     /* On hardware DMA queue              */
-       DRMFILE           filp;        /* Unique identifier of holding process */
+       struct drm_file   *file_priv;  /* Unique identifier of holding process */
        int               context;     /* Kernel queue for this buffer       */
        enum {
                DRM_LIST_NONE    = 0,
@@ -534,7 +516,7 @@ struct drm_file {
 
 typedef struct drm_lock_data {
        drm_hw_lock_t     *hw_lock;     /* Hardware lock                   */
-       DRMFILE           filp;         /* Unique identifier of holding process (NULL is kernel)*/
+       struct drm_file   *file_priv;   /* Unique identifier of holding process (NULL is kernel)*/
        int               lock_queue;   /* Queue of blocked processes      */
        unsigned long     lock_time;    /* Time of last lock in jiffies    */
 } drm_lock_data_t;
@@ -638,12 +620,13 @@ struct drm_driver_info {
        int     (*load)(struct drm_device *, unsigned long flags);
        int     (*firstopen)(struct drm_device *);
        int     (*open)(struct drm_device *, drm_file_t *);
-       void    (*preclose)(struct drm_device *, void *filp);
+       void    (*preclose)(struct drm_device *, struct drm_file *file_priv);
        void    (*postclose)(struct drm_device *, drm_file_t *);
        void    (*lastclose)(struct drm_device *);
        int     (*unload)(struct drm_device *);
-       void    (*reclaim_buffers_locked)(struct drm_device *, void *filp);
-       int     (*dma_ioctl)(DRM_IOCTL_ARGS);
+       void    (*reclaim_buffers_locked)(struct drm_device *,
+                                         struct drm_file *file_priv);
+       int     (*dma_ioctl)(drm_device_t *dev, void *data, struct drm_file *file_priv);
        void    (*dma_ready)(struct drm_device *);
        int     (*dma_quiescent)(struct drm_device *);
        int     (*dma_flush_block_and_flush)(struct drm_device *, int context,
@@ -732,6 +715,8 @@ struct drm_device {
        struct mtx        irq_lock;     /* protects irq condition checks */
        struct mtx        dev_lock;     /* protects everything else */
 #endif
+       DRM_SPINTYPE      drw_lock;
+
                                /* Usage Counters */
        int               open_count;   /* Outstanding files open          */
        int               buf_use;      /* Buffers in use -- cannot alloc  */
@@ -780,6 +765,7 @@ struct drm_device {
        int               last_context; /* Last current context            */
        int               vbl_queue;    /* vbl wait channel */
        atomic_t          vbl_received;
+       atomic_t          vbl_received2;
 
 #ifdef __FreeBSD__
        struct sigio      *buf_sigio;   /* Processes waiting for SIGIO     */
@@ -796,6 +782,13 @@ struct drm_device {
        void              *dev_private;
        unsigned int      agp_buffer_token;
        drm_local_map_t   *agp_buffer_map;
+
+       struct unrhdr     *drw_unrhdr;
+       /* RB tree of drawable infos */
+       RB_HEAD(drawable_tree, bsd_drm_drawable_info) drw_head;
+
+       struct task       locked_task;
+       void              (*locked_task_call)(drm_device_t *dev);
 };
 
 extern int     drm_debug_flag;
@@ -883,7 +876,7 @@ int drm_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request);
 int    drm_dma_setup(drm_device_t *dev);
 void   drm_dma_takedown(drm_device_t *dev);
 void   drm_free_buffer(drm_device_t *dev, drm_buf_t *buf);
-void   drm_reclaim_buffers(drm_device_t *dev, DRMFILE filp);
+void   drm_reclaim_buffers(drm_device_t *dev, struct drm_file *file_priv);
 #define drm_core_reclaim_buffers drm_reclaim_buffers
 
 /* IRQ support (drm_irq.c) */
@@ -930,68 +923,72 @@ int       drm_ati_pcigart_cleanup(drm_device_t *dev,
                                drm_ati_pcigart_info *gart_info);
 
 /* Locking IOCTL support (drm_drv.c) */
-int    drm_lock(DRM_IOCTL_ARGS);
-int    drm_unlock(DRM_IOCTL_ARGS);
-int    drm_version(DRM_IOCTL_ARGS);
-int    drm_setversion(DRM_IOCTL_ARGS);
+int    drm_lock(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_unlock(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_version(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_setversion(drm_device_t *dev, void *data, struct drm_file *file_priv);
 
 /* Misc. IOCTL support (drm_ioctl.c) */
-int    drm_irq_by_busid(DRM_IOCTL_ARGS);
-int    drm_getunique(DRM_IOCTL_ARGS);
-int    drm_setunique(DRM_IOCTL_ARGS);
-int    drm_getmap(DRM_IOCTL_ARGS);
-int    drm_getclient(DRM_IOCTL_ARGS);
-int    drm_getstats(DRM_IOCTL_ARGS);
-int    drm_noop(DRM_IOCTL_ARGS);
+int    drm_irq_by_busid(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_getunique(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_setunique(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_getmap(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_getclient(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_getstats(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_noop(drm_device_t *dev, void *data, struct drm_file *file_priv);
 
 /* Context IOCTL support (drm_context.c) */
-int    drm_resctx(DRM_IOCTL_ARGS);
-int    drm_addctx(DRM_IOCTL_ARGS);
-int    drm_modctx(DRM_IOCTL_ARGS);
-int    drm_getctx(DRM_IOCTL_ARGS);
-int    drm_switchctx(DRM_IOCTL_ARGS);
-int    drm_newctx(DRM_IOCTL_ARGS);
-int    drm_rmctx(DRM_IOCTL_ARGS);
-int    drm_setsareactx(DRM_IOCTL_ARGS);
-int    drm_getsareactx(DRM_IOCTL_ARGS);
+int    drm_resctx(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_addctx(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_modctx(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_getctx(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_switchctx(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_newctx(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_rmctx(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_setsareactx(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_getsareactx(drm_device_t *dev, void *data, struct drm_file *file_priv);
 
 /* Drawable IOCTL support (drm_drawable.c) */
-int    drm_adddraw(DRM_IOCTL_ARGS);
-int    drm_rmdraw(DRM_IOCTL_ARGS);
+int    drm_adddraw(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_rmdraw(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_update_draw(drm_device_t *dev, void *data, struct drm_file *file_priv);
+struct drm_drawable_info *drm_get_drawable_info(drm_device_t *dev, int handle);
 
 /* Authentication IOCTL support (drm_auth.c) */
-int    drm_getmagic(DRM_IOCTL_ARGS);
-int    drm_authmagic(DRM_IOCTL_ARGS);
+int    drm_getmagic(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_authmagic(drm_device_t *dev, void *data, struct drm_file *file_priv);
 
 /* Buffer management support (drm_bufs.c) */
-int    drm_addmap_ioctl(DRM_IOCTL_ARGS);
-int    drm_rmmap_ioctl(DRM_IOCTL_ARGS);
-int    drm_addbufs_ioctl(DRM_IOCTL_ARGS);
-int    drm_infobufs(DRM_IOCTL_ARGS);
-int    drm_markbufs(DRM_IOCTL_ARGS);
-int    drm_freebufs(DRM_IOCTL_ARGS);
-int    drm_mapbufs(DRM_IOCTL_ARGS);
+int    drm_addmap_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_rmmap_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_addbufs_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_infobufs(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_markbufs(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_freebufs(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_mapbufs(drm_device_t *dev, void *data, struct drm_file *file_priv);
 
 /* DMA support (drm_dma.c) */
-int    drm_dma(DRM_IOCTL_ARGS);
+int    drm_dma(drm_device_t *dev, void *data, struct drm_file *file_priv);
 
 /* IRQ support (drm_irq.c) */
-int    drm_control(DRM_IOCTL_ARGS);
-int    drm_wait_vblank(DRM_IOCTL_ARGS);
+int    drm_control(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_wait_vblank(drm_device_t *dev, void *data, struct drm_file *file_priv);
+void   drm_locked_tasklet(drm_device_t *dev,
+                          void (*tasklet)(drm_device_t *dev));
 
 /* AGP/GART support (drm_agpsupport.c) */
-int    drm_agp_acquire_ioctl(DRM_IOCTL_ARGS);
-int    drm_agp_release_ioctl(DRM_IOCTL_ARGS);
-int    drm_agp_enable_ioctl(DRM_IOCTL_ARGS);
-int    drm_agp_info_ioctl(DRM_IOCTL_ARGS);
-int    drm_agp_alloc_ioctl(DRM_IOCTL_ARGS);
-int    drm_agp_free_ioctl(DRM_IOCTL_ARGS);
-int    drm_agp_unbind_ioctl(DRM_IOCTL_ARGS);
-int    drm_agp_bind_ioctl(DRM_IOCTL_ARGS);
+int    drm_agp_acquire_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_agp_release_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_agp_enable_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_agp_info_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_agp_alloc_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_agp_free_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_agp_unbind_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_agp_bind_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
 
 /* Scatter Gather Support (drm_scatter.c) */
-int    drm_sg_alloc_ioctl(DRM_IOCTL_ARGS);
-int    drm_sg_free(DRM_IOCTL_ARGS);
+int    drm_sg_alloc_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv);
+int    drm_sg_free(drm_device_t *dev, void *data, struct drm_file *file_priv);
 
 /* consistent PCI memory functions (drm_pci.c) */
 drm_dma_handle_t *drm_pci_alloc(drm_device_t *dev, size_t size, size_t align,
index 28239d1..e8e162d 100644 (file)
@@ -125,11 +125,10 @@ int drm_agp_info(drm_device_t * dev, drm_agp_info_t *info)
        return 0;
 }
 
-int drm_agp_info_ioctl(DRM_IOCTL_ARGS)
+int drm_agp_info_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
        int err;
        drm_agp_info_t info;
-       DRM_DEVICE;
 
        err = drm_agp_info(dev, &info);
        if (err != 0)
@@ -139,9 +138,8 @@ int drm_agp_info_ioctl(DRM_IOCTL_ARGS)
        return 0;
 }
 
-int drm_agp_acquire_ioctl(DRM_IOCTL_ARGS)
+int drm_agp_acquire_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
 
        return drm_agp_acquire(dev);
 }
@@ -161,9 +159,8 @@ int drm_agp_acquire(drm_device_t *dev)
        return 0;
 }
 
-int drm_agp_release_ioctl(DRM_IOCTL_ARGS)
+int drm_agp_release_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
 
        return drm_agp_release(dev);
 }
@@ -190,10 +187,9 @@ int drm_agp_enable(drm_device_t *dev, drm_agp_mode_t mode)
        return 0;
 }
 
-int drm_agp_enable_ioctl(DRM_IOCTL_ARGS)
+int drm_agp_enable_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
        drm_agp_mode_t mode;
-       DRM_DEVICE;
 
        mode = *(drm_agp_mode_t *) data;
 
@@ -243,9 +239,8 @@ int drm_agp_alloc(drm_device_t *dev, drm_agp_buffer_t *request)
        return 0;
 }
 
-int drm_agp_alloc_ioctl(DRM_IOCTL_ARGS)
+int drm_agp_alloc_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_agp_buffer_t request;
        int retcode;
 
@@ -292,9 +287,8 @@ int drm_agp_unbind(drm_device_t *dev, drm_agp_binding_t *request)
        return retcode;
 }
 
-int drm_agp_unbind_ioctl(DRM_IOCTL_ARGS)
+int drm_agp_unbind_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_agp_binding_t request;
        int retcode;
 
@@ -333,9 +327,8 @@ int drm_agp_bind(drm_device_t *dev, drm_agp_binding_t *request)
        return retcode;
 }
 
-int drm_agp_bind_ioctl(DRM_IOCTL_ARGS)
+int drm_agp_bind_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_agp_binding_t request;
        int retcode;
 
@@ -378,9 +371,8 @@ int drm_agp_free(drm_device_t *dev, drm_agp_buffer_t *request)
 
 }
 
-int drm_agp_free_ioctl(DRM_IOCTL_ARGS)
+int drm_agp_free_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_agp_buffer_t request;
        int retcode;
 
index aa0e29c..964f9a4 100644 (file)
@@ -40,21 +40,16 @@ static int drm_hash_magic(drm_magic_t magic)
 
 static drm_file_t *drm_find_file(drm_device_t *dev, drm_magic_t magic)
 {
-       drm_file_t        *retval = NULL;
        drm_magic_entry_t *pt;
-       int               hash;
-
-       hash = drm_hash_magic(magic);
+       int hash = drm_hash_magic(magic);
 
-       DRM_LOCK();
        for (pt = dev->magiclist[hash].head; pt; pt = pt->next) {
                if (pt->magic == magic) {
-                       retval = pt->priv;
-                       break;
+                       return pt->priv;
                }
        }
-       DRM_UNLOCK();
-       return retval;
+
+       return NULL;
 }
 
 static int drm_add_magic(drm_device_t *dev, drm_file_t *priv, drm_magic_t magic)
@@ -66,7 +61,7 @@ static int drm_add_magic(drm_device_t *dev, drm_file_t *priv, drm_magic_t magic)
 
        hash = drm_hash_magic(magic);
        entry = malloc(sizeof(*entry), M_DRM, M_ZERO | M_NOWAIT);
-       if (!entry) return DRM_ERR(ENOMEM);
+       if (!entry) return ENOMEM;
        entry->magic = magic;
        entry->priv  = priv;
        entry->next  = NULL;
@@ -112,61 +107,53 @@ static int drm_remove_magic(drm_device_t *dev, drm_magic_t magic)
        DRM_UNLOCK();
 
        free(pt, M_DRM);
-       return DRM_ERR(EINVAL);
+       return EINVAL;
 }
 
-int drm_getmagic(DRM_IOCTL_ARGS)
+int drm_getmagic(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        static drm_magic_t sequence = 0;
-       drm_auth_t auth;
-       drm_file_t *priv;
-
-       DRM_LOCK();
-       priv = drm_find_file_by_proc(dev, p);
-       DRM_UNLOCK();
-       if (priv == NULL) {
-               DRM_ERROR("can't find authenticator\n");
-               return EINVAL;
-       }
+       drm_auth_t *auth = data;
 
                                /* Find unique magic */
-       if (priv->magic) {
-               auth.magic = priv->magic;
+       if (file_priv->magic) {
+               auth->magic = file_priv->magic;
        } else {
+               DRM_LOCK();
                do {
                        int old = sequence;
                        
-                       auth.magic = old+1;
+                       auth->magic = old+1;
                        
-                       if (!atomic_cmpset_int(&sequence, old, auth.magic))
+                       if (!atomic_cmpset_int(&sequence, old, auth->magic))
                                continue;
-               } while (drm_find_file(dev, auth.magic));
-               priv->magic = auth.magic;
-               drm_add_magic(dev, priv, auth.magic);
+               } while (drm_find_file(dev, auth->magic));
+               file_priv->magic = auth->magic;
+               DRM_UNLOCK();
+               drm_add_magic(dev, file_priv, auth->magic);
        }
 
-       DRM_DEBUG("%u\n", auth.magic);
-
-       DRM_COPY_TO_USER_IOCTL((drm_auth_t *)data, auth, sizeof(auth));
+       DRM_DEBUG("%u\n", auth->magic);
 
        return 0;
 }
 
-int drm_authmagic(DRM_IOCTL_ARGS)
+int drm_authmagic(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       drm_auth_t         auth;
-       drm_file_t         *file;
-       DRM_DEVICE;
-
-       DRM_COPY_FROM_USER_IOCTL(auth, (drm_auth_t *)data, sizeof(auth));
+       drm_auth_t *auth = data;
+       drm_file_t *priv;
 
-       DRM_DEBUG("%u\n", auth.magic);
+       DRM_DEBUG("%u\n", auth->magic);
 
-       if ((file = drm_find_file(dev, auth.magic))) {
-               file->authenticated = 1;
-               drm_remove_magic(dev, auth.magic);
+       DRM_LOCK();
+       priv = drm_find_file(dev, auth->magic);
+       if (priv != NULL) {
+               priv->authenticated = 1;
+               drm_remove_magic(dev, auth->magic);
+               DRM_UNLOCK();
                return 0;
+       } else {
+               DRM_UNLOCK();
+               return EINVAL;
        }
-       return DRM_ERR(EINVAL);
 }
index 343ab1e..a0a3fc7 100644 (file)
@@ -149,7 +149,7 @@ int drm_addmap(drm_device_t * dev, unsigned long offset, unsigned long size,
         */
        map = malloc(sizeof(*map), M_DRM, M_ZERO | M_NOWAIT);
        if ( !map )
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
 
        map->offset = offset;
        map->size = size;
@@ -172,7 +172,7 @@ int drm_addmap(drm_device_t * dev, unsigned long offset, unsigned long size,
                           map->size, drm_order(map->size), map->handle );
                if ( !map->handle ) {
                        free(map, M_DRM);
-                       return DRM_ERR(ENOMEM);
+                       return ENOMEM;
                }
                map->offset = (unsigned long)map->handle;
                if ( map->flags & _DRM_CONTAINS_LOCK ) {
@@ -182,7 +182,7 @@ int drm_addmap(drm_device_t * dev, unsigned long offset, unsigned long size,
                                DRM_UNLOCK();
                                free(map->handle, M_DRM);
                                free(map, M_DRM);
-                               return DRM_ERR(EBUSY);
+                               return EBUSY;
                        }
                        dev->lock.hw_lock = map->handle; /* Pointer to lock */
                        DRM_UNLOCK();
@@ -202,13 +202,13 @@ int drm_addmap(drm_device_t * dev, unsigned long offset, unsigned long size,
                }
                if (!valid) {
                        free(map, M_DRM);
-                       return DRM_ERR(EACCES);
+                       return EACCES;
                }*/
                break;
        case _DRM_SCATTER_GATHER:
                if (!dev->sg) {
                        free(map, M_DRM);
-                       return DRM_ERR(EINVAL);
+                       return EINVAL;
                }
                map->offset = map->offset + dev->sg->handle;
                break;
@@ -225,7 +225,7 @@ int drm_addmap(drm_device_t * dev, unsigned long offset, unsigned long size,
                map->dmah = drm_pci_alloc(dev, map->size, align, 0xfffffffful);
                if (map->dmah == NULL) {
                        free(map, M_DRM);
-                       return DRM_ERR(ENOMEM);
+                       return ENOMEM;
                }
                map->handle = map->dmah->vaddr;
                map->offset = map->dmah->busaddr;
@@ -233,7 +233,7 @@ int drm_addmap(drm_device_t * dev, unsigned long offset, unsigned long size,
        default:
                DRM_ERROR("Bad map type %d\n", map->type);
                free(map, M_DRM);
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        }
 
        DRM_LOCK();
@@ -250,39 +250,35 @@ done:
        return 0;
 }
 
-int drm_addmap_ioctl(DRM_IOCTL_ARGS)
+int drm_addmap_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       drm_map_t request;
+       drm_map_t *request = data;
        drm_local_map_t *map;
        int err;
-       DRM_DEVICE;
 
        if (!(dev->flags & (FREAD|FWRITE)))
-               return DRM_ERR(EACCES); /* Require read/write */
-
-       DRM_COPY_FROM_USER_IOCTL(request, (drm_map_t *)data, sizeof(drm_map_t));
+               return EACCES; /* Require read/write */
 
-       if (!DRM_SUSER(p) && request.type != _DRM_AGP)
-               return DRM_ERR(EACCES);
+       if (!DRM_SUSER(DRM_CURPROC) && request->type != _DRM_AGP)
+               return EACCES;
 
        DRM_LOCK();
-       err = drm_addmap(dev, request.offset, request.size, request.type,
-           request.flags, &map);
+       err = drm_addmap(dev, request->offset, request->size, request->type,
+           request->flags, &map);
        DRM_UNLOCK();
        if (err != 0)
                return err;
 
-       request.offset = map->offset;
-       request.size = map->size;
-       request.type = map->type;
-       request.flags = map->flags;
-       request.mtrr   = map->mtrr;
-       request.handle = map->handle;
+       request->offset = map->offset;
+       request->size = map->size;
+       request->type = map->type;
+       request->flags = map->flags;
+       request->mtrr   = map->mtrr;
+       request->handle = map->handle;
 
-       if (request.type != _DRM_SHM) {
-               request.handle = (void *)request.offset;
+       if (request->type != _DRM_SHM) {
+               request->handle = (void *)request->offset;
        }
-       DRM_COPY_TO_USER_IOCTL((drm_map_t *)data, request, sizeof(drm_map_t));
 
        return 0;
 }
@@ -333,17 +329,14 @@ void drm_rmmap(drm_device_t *dev, drm_local_map_t *map)
  * isn't in use.
  */
 
-int drm_rmmap_ioctl(DRM_IOCTL_ARGS)
+int drm_rmmap_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_local_map_t *map;
-       drm_map_t request;
-
-       DRM_COPY_FROM_USER_IOCTL( request, (drm_map_t *)data, sizeof(request) );
+       drm_map_t *request = data;
 
        DRM_LOCK();
        TAILQ_FOREACH(map, &dev->maplist, link) {
-               if (map->handle == request.handle &&
+               if (map->handle == request->handle &&
                    map->flags & _DRM_REMOVABLE)
                        break;
        }
@@ -351,7 +344,7 @@ int drm_rmmap_ioctl(DRM_IOCTL_ARGS)
        /* No match found. */
        if (map == NULL) {
                DRM_UNLOCK();
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        }
 
        drm_rmmap(dev, map);
@@ -441,7 +434,7 @@ static int drm_do_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request)
        }
        if (!valid) {
                DRM_DEBUG("zone invalid\n");
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        }*/
 
        entry = &dma->bufs[order];
@@ -449,7 +442,7 @@ static int drm_do_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request)
        entry->buflist = malloc(count * sizeof(*entry->buflist), M_DRM,
            M_NOWAIT | M_ZERO);
        if ( !entry->buflist ) {
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
 
        entry->buf_size = size;
@@ -469,7 +462,7 @@ static int drm_do_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request)
                buf->address = (void *)(agp_offset + offset);
                buf->next    = NULL;
                buf->pending = 0;
-               buf->filp    = NULL;
+               buf->file_priv = NULL;
 
                buf->dev_priv_size = dev->driver.buf_priv_size;
                buf->dev_private = malloc(buf->dev_priv_size, M_DRM,
@@ -478,7 +471,7 @@ static int drm_do_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request)
                        /* Set count correctly so we free the proper amount. */
                        entry->buf_count = count;
                        drm_cleanup_buf_error(dev, entry);
-                       return DRM_ERR(ENOMEM);
+                       return ENOMEM;
                }
 
                offset += alignment;
@@ -494,7 +487,7 @@ static int drm_do_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request)
        if (temp_buflist == NULL) {
                /* Free the entry because it isn't valid */
                drm_cleanup_buf_error(dev, entry);
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
        dma->buflist = temp_buflist;
 
@@ -563,7 +556,7 @@ static int drm_do_addbufs_pci(drm_device_t *dev, drm_buf_desc_t *request)
            temp_pagelist == NULL) {
                free(entry->buflist, M_DRM);
                free(entry->seglist, M_DRM);
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
        
        memcpy(temp_pagelist, dma->pagelist, dma->page_count * 
@@ -586,7 +579,7 @@ static int drm_do_addbufs_pci(drm_device_t *dev, drm_buf_desc_t *request)
                        entry->seg_count = count;
                        drm_cleanup_buf_error(dev, entry);
                        free(temp_pagelist, M_DRM);
-                       return DRM_ERR(ENOMEM);
+                       return ENOMEM;
                }
 
                entry->seglist[entry->seg_count++] = dmah;
@@ -610,7 +603,7 @@ static int drm_do_addbufs_pci(drm_device_t *dev, drm_buf_desc_t *request)
                        buf->bus_address = dmah->busaddr + offset;
                        buf->next    = NULL;
                        buf->pending = 0;
-                       buf->filp    = NULL;
+                       buf->file_priv = NULL;
 
                        buf->dev_priv_size = dev->driver.buf_priv_size;
                        buf->dev_private = malloc(buf->dev_priv_size, M_DRM,
@@ -621,7 +614,7 @@ static int drm_do_addbufs_pci(drm_device_t *dev, drm_buf_desc_t *request)
                                entry->seg_count = count;
                                drm_cleanup_buf_error(dev, entry);
                                free(temp_pagelist, M_DRM);
-                               return DRM_ERR(ENOMEM);
+                               return ENOMEM;
                        }
 
                        DRM_DEBUG( "buffer %d @ %p\n",
@@ -637,7 +630,7 @@ static int drm_do_addbufs_pci(drm_device_t *dev, drm_buf_desc_t *request)
                /* Free the entry because it isn't valid */
                drm_cleanup_buf_error(dev, entry);
                free(temp_pagelist, M_DRM);
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
        dma->buflist = temp_buflist;
 
@@ -705,7 +698,7 @@ static int drm_do_addbufs_sg(drm_device_t *dev, drm_buf_desc_t *request)
        entry->buflist = malloc(count * sizeof(*entry->buflist), M_DRM,
            M_NOWAIT | M_ZERO);
        if (entry->buflist == NULL)
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
 
        entry->buf_size = size;
        entry->page_order = page_order;
@@ -724,7 +717,7 @@ static int drm_do_addbufs_sg(drm_device_t *dev, drm_buf_desc_t *request)
                buf->address = (void *)(agp_offset + offset + dev->sg->handle);
                buf->next    = NULL;
                buf->pending = 0;
-               buf->filp    = NULL;
+               buf->file_priv = NULL;
 
                buf->dev_priv_size = dev->driver.buf_priv_size;
                buf->dev_private = malloc(buf->dev_priv_size, M_DRM,
@@ -733,7 +726,7 @@ static int drm_do_addbufs_sg(drm_device_t *dev, drm_buf_desc_t *request)
                        /* Set count correctly so we free the proper amount. */
                        entry->buf_count = count;
                        drm_cleanup_buf_error(dev, entry);
-                       return DRM_ERR(ENOMEM);
+                       return ENOMEM;
                }
 
                DRM_DEBUG( "buffer %d @ %p\n",
@@ -752,7 +745,7 @@ static int drm_do_addbufs_sg(drm_device_t *dev, drm_buf_desc_t *request)
        if (temp_buflist == NULL) {
                /* Free the entry because it isn't valid */
                drm_cleanup_buf_error(dev, entry);
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
        dma->buflist = temp_buflist;
 
@@ -781,21 +774,21 @@ int drm_addbufs_agp(drm_device_t *dev, drm_buf_desc_t *request)
        DRM_SPINLOCK(&dev->dma_lock);
 
        if (request->count < 0 || request->count > 4096)
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        
        order = drm_order(request->size);
        if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER)
-               return DRM_ERR(EINVAL);
+               return EINVAL;
 
        /* No more allocations after first buffer-using ioctl. */
        if (dev->buf_use != 0) {
                DRM_SPINUNLOCK(&dev->dma_lock);
-               return DRM_ERR(EBUSY);
+               return EBUSY;
        }
        /* No more than one allocation per order */
        if (dev->dma->bufs[order].buf_count != 0) {
                DRM_SPINUNLOCK(&dev->dma_lock);
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
 
        ret = drm_do_addbufs_agp(dev, request);
@@ -812,24 +805,24 @@ int drm_addbufs_sg(drm_device_t *dev, drm_buf_desc_t *request)
        DRM_SPINLOCK(&dev->dma_lock);
 
        if (!DRM_SUSER(DRM_CURPROC))
-               return DRM_ERR(EACCES);
+               return EACCES;
 
        if (request->count < 0 || request->count > 4096)
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        
        order = drm_order(request->size);
        if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER)
-               return DRM_ERR(EINVAL);
+               return EINVAL;
 
        /* No more allocations after first buffer-using ioctl. */
        if (dev->buf_use != 0) {
                DRM_SPINUNLOCK(&dev->dma_lock);
-               return DRM_ERR(EBUSY);
+               return EBUSY;
        }
        /* No more than one allocation per order */
        if (dev->dma->bufs[order].buf_count != 0) {
                DRM_SPINUNLOCK(&dev->dma_lock);
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
 
        ret = drm_do_addbufs_sg(dev, request);
@@ -846,24 +839,24 @@ int drm_addbufs_pci(drm_device_t *dev, drm_buf_desc_t *request)
        DRM_SPINLOCK(&dev->dma_lock);
 
        if (!DRM_SUSER(DRM_CURPROC))
-               return DRM_ERR(EACCES);
+               return EACCES;
 
        if (request->count < 0 || request->count > 4096)
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        
        order = drm_order(request->size);
        if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER)
-               return DRM_ERR(EINVAL);
+               return EINVAL;
 
        /* No more allocations after first buffer-using ioctl. */
        if (dev->buf_use != 0) {
                DRM_SPINUNLOCK(&dev->dma_lock);
-               return DRM_ERR(EBUSY);
+               return EBUSY;
        }
        /* No more than one allocation per order */
        if (dev->dma->bufs[order].buf_count != 0) {
                DRM_SPINUNLOCK(&dev->dma_lock);
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
 
        ret = drm_do_addbufs_pci(dev, request);
@@ -873,39 +866,29 @@ int drm_addbufs_pci(drm_device_t *dev, drm_buf_desc_t *request)
        return ret;
 }
 
-int drm_addbufs_ioctl(DRM_IOCTL_ARGS)
+int drm_addbufs_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_buf_desc_t request;
+       drm_buf_desc_t *request = data;
        int err;
 
-       DRM_COPY_FROM_USER_IOCTL(request, (drm_buf_desc_t *)data,
-           sizeof(request));
-
-       if (request.flags & _DRM_AGP_BUFFER)
-               err = drm_addbufs_agp(dev, &request);
-       else if (request.flags & _DRM_SG_BUFFER)
-               err = drm_addbufs_sg(dev, &request);
+       if (request->flags & _DRM_AGP_BUFFER)
+               err = drm_addbufs_agp(dev, request);
+       else if (request->flags & _DRM_SG_BUFFER)
+               err = drm_addbufs_sg(dev, request);
        else
-               err = drm_addbufs_pci(dev, &request);
-
-       DRM_COPY_TO_USER_IOCTL((drm_buf_desc_t *)data, request,
-           sizeof(request));
+               err = drm_addbufs_pci(dev, request);
 
        return err;
 }
 
-int drm_infobufs(DRM_IOCTL_ARGS)
+int drm_infobufs(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_device_dma_t *dma = dev->dma;
-       drm_buf_info_t request;
+       drm_buf_info_t *request = data;
        int i;
        int count;
        int retcode = 0;
 
-       DRM_COPY_FROM_USER_IOCTL( request, (drm_buf_info_t *)data, sizeof(request) );
-
        DRM_SPINLOCK(&dev->dma_lock);
        ++dev->buf_use;         /* Can't allocate more after this call */
        DRM_SPINUNLOCK(&dev->dma_lock);
@@ -916,7 +899,7 @@ int drm_infobufs(DRM_IOCTL_ARGS)
 
        DRM_DEBUG( "count = %d\n", count );
 
-       if ( request.count >= count ) {
+       if ( request->count >= count ) {
                for ( i = 0, count = 0 ; i < DRM_MAX_ORDER + 1 ; i++ ) {
                        if ( dma->bufs[i].buf_count ) {
                                drm_buf_desc_t from;
@@ -926,9 +909,9 @@ int drm_infobufs(DRM_IOCTL_ARGS)
                                from.low_mark = dma->bufs[i].freelist.low_mark;
                                from.high_mark = dma->bufs[i].freelist.high_mark;
 
-                               if (DRM_COPY_TO_USER(&request.list[count], &from,
+                               if (DRM_COPY_TO_USER(&request->list[count], &from,
                                    sizeof(drm_buf_desc_t)) != 0) {
-                                       retcode = DRM_ERR(EFAULT);
+                                       retcode = EFAULT;
                                        break;
                                }
 
@@ -942,76 +925,68 @@ int drm_infobufs(DRM_IOCTL_ARGS)
                        }
                }
        }
-       request.count = count;
-
-       DRM_COPY_TO_USER_IOCTL( (drm_buf_info_t *)data, request, sizeof(request) );
+       request->count = count;
 
        return retcode;
 }
 
-int drm_markbufs(DRM_IOCTL_ARGS)
+int drm_markbufs(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_device_dma_t *dma = dev->dma;
-       drm_buf_desc_t request;
+       drm_buf_desc_t *request = data;
        int order;
 
-       DRM_COPY_FROM_USER_IOCTL( request, (drm_buf_desc_t *)data, sizeof(request) );
-
        DRM_DEBUG( "%d, %d, %d\n",
-                  request.size, request.low_mark, request.high_mark );
+                  request->size, request->low_mark, request->high_mark );
        
 
-       order = drm_order(request.size);        
+       order = drm_order(request->size);       
        if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER ||
-           request.low_mark < 0 || request.high_mark < 0) {
-               return DRM_ERR(EINVAL);
+           request->low_mark < 0 || request->high_mark < 0) {
+               return EINVAL;
        }
 
        DRM_SPINLOCK(&dev->dma_lock);
-       if (request.low_mark > dma->bufs[order].buf_count ||
-           request.high_mark > dma->bufs[order].buf_count) {
-               return DRM_ERR(EINVAL);
+       if (request->low_mark > dma->bufs[order].buf_count ||
+           request->high_mark > dma->bufs[order].buf_count) {
+               return EINVAL;
        }
 
-       dma->bufs[order].freelist.low_mark  = request.low_mark;
-       dma->bufs[order].freelist.high_mark = request.high_mark;
+       dma->bufs[order].freelist.low_mark  = request->low_mark;
+       dma->bufs[order].freelist.high_mark = request->high_mark;
        DRM_SPINUNLOCK(&dev->dma_lock);
 
        return 0;
 }
 
-int drm_freebufs(DRM_IOCTL_ARGS)
+int drm_freebufs(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_device_dma_t *dma = dev->dma;
-       drm_buf_free_t request;
+       drm_buf_free_t *request = data;
        int i;
        int idx;
        drm_buf_t *buf;
        int retcode = 0;
 
-       DRM_COPY_FROM_USER_IOCTL( request, (drm_buf_free_t *)data, sizeof(request) );
-
-       DRM_DEBUG( "%d\n", request.count );
+       DRM_DEBUG( "%d\n", request->count );
        
        DRM_SPINLOCK(&dev->dma_lock);
-       for ( i = 0 ; i < request.count ; i++ ) {
-               if (DRM_COPY_FROM_USER(&idx, &request.list[i], sizeof(idx))) {
-                       retcode = DRM_ERR(EFAULT);
+       for ( i = 0 ; i < request->count ; i++ ) {
+               if (DRM_COPY_FROM_USER(&idx, &request->list[i], sizeof(idx))) {
+                       retcode = EFAULT;
                        break;
                }
                if ( idx < 0 || idx >= dma->buf_count ) {
                        DRM_ERROR( "Index %d (of %d max)\n",
                                   idx, dma->buf_count - 1 );
-                       retcode = DRM_ERR(EINVAL);
+                       retcode = EINVAL;
                        break;
                }
                buf = dma->buflist[idx];
-               if ( buf->filp != filp ) {
+               if ( buf->file_priv != file_priv ) {
                        DRM_ERROR("Process %d freeing buffer not owned\n",
                                   DRM_CURRENTPID);
-                       retcode = DRM_ERR(EINVAL);
+                       retcode = EINVAL;
                        break;
                }
                drm_free_buffer(dev, buf);
@@ -1021,9 +996,8 @@ int drm_freebufs(DRM_IOCTL_ARGS)
        return retcode;
 }
 
-int drm_mapbufs(DRM_IOCTL_ARGS)
+int drm_mapbufs(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_device_dma_t *dma = dev->dma;
        int retcode = 0;
        const int zero = 0;
@@ -1040,27 +1014,25 @@ int drm_mapbufs(DRM_IOCTL_ARGS)
        vaddr_t vaddr;
 #endif /* __NetBSD__ || __OpenBSD__ */
 
-       drm_buf_map_t request;
+       drm_buf_map_t *request = data;
        int i;
 
-       DRM_COPY_FROM_USER_IOCTL( request, (drm_buf_map_t *)data, sizeof(request) );
-
 #if defined(__NetBSD__) || defined(__OpenBSD__)
        if (!vfinddev(kdev, VCHR, &vn))
                return 0;       /* FIXME: Shouldn't this be EINVAL or something? */
 #endif /* __NetBSD__ || __OpenBSD */
 
 #if defined(__FreeBSD__) && __FreeBSD_version >= 500000
-       vms = p->td_proc->p_vmspace;
+       vms = DRM_CURPROC->td_proc->p_vmspace;
 #else
-       vms = p->p_vmspace;
+       vms = DRM_CURPROC->p_vmspace;
 #endif
 
        DRM_SPINLOCK(&dev->dma_lock);
        dev->buf_use++;         /* Can't allocate more after this call */
        DRM_SPINUNLOCK(&dev->dma_lock);
 
-       if (request.count < dma->buf_count)
+       if (request->count < dma->buf_count)
                goto done;
 
        if ((dev->driver.use_agp && (dma->flags & _DRM_DMA_USE_AGP)) ||
@@ -1082,10 +1054,11 @@ int drm_mapbufs(DRM_IOCTL_ARGS)
        vaddr = round_page((vm_offset_t)vms->vm_daddr + MAXDSIZ);
 #if __FreeBSD_version >= 600023
        retcode = vm_mmap(&vms->vm_map, &vaddr, size, PROT_READ | PROT_WRITE,
-           VM_PROT_ALL, MAP_SHARED, OBJT_DEVICE, kdev, foff );
+           VM_PROT_ALL, MAP_SHARED, OBJT_DEVICE, dev->devnode, foff);
 #else
        retcode = vm_mmap(&vms->vm_map, &vaddr, size, PROT_READ | PROT_WRITE,
-           VM_PROT_ALL, MAP_SHARED, SLIST_FIRST(&kdev->si_hlist), foff );
+           VM_PROT_ALL, MAP_SHARED, SLIST_FIRST(&dev->devnode->si_hlist),
+           foff);
 #endif
 #elif defined(__NetBSD__) || defined(__OpenBSD__)
        vaddr = round_page((vaddr_t)vms->vm_daddr + MAXDSIZ);
@@ -1096,26 +1069,26 @@ int drm_mapbufs(DRM_IOCTL_ARGS)
        if (retcode)
                goto done;
 
-       request.virtual = (void *)vaddr;
+       request->virtual = (void *)vaddr;
 
        for ( i = 0 ; i < dma->buf_count ; i++ ) {
-               if (DRM_COPY_TO_USER(&request.list[i].idx,
-                   &dma->buflist[i]->idx, sizeof(request.list[0].idx))) {
+               if (DRM_COPY_TO_USER(&request->list[i].idx,
+                   &dma->buflist[i]->idx, sizeof(request->list[0].idx))) {
                        retcode = EFAULT;
                        goto done;
                }
-               if (DRM_COPY_TO_USER(&request.list[i].total,
-                   &dma->buflist[i]->total, sizeof(request.list[0].total))) {
+               if (DRM_COPY_TO_USER(&request->list[i].total,
+                   &dma->buflist[i]->total, sizeof(request->list[0].total))) {
                        retcode = EFAULT;
                        goto done;
                }
-               if (DRM_COPY_TO_USER(&request.list[i].used, &zero,
+               if (DRM_COPY_TO_USER(&request->list[i].used, &zero,
                    sizeof(zero))) {
                        retcode = EFAULT;
                        goto done;
                }
                address = vaddr + dma->buflist[i]->offset; /* *** */
-               if (DRM_COPY_TO_USER(&request.list[i].address, &address,
+               if (DRM_COPY_TO_USER(&request->list[i].address, &address,
                    sizeof(address))) {
                        retcode = EFAULT;
                        goto done;
@@ -1123,11 +1096,9 @@ int drm_mapbufs(DRM_IOCTL_ARGS)
        }
 
  done:
-       request.count = dma->buf_count;
-
-       DRM_DEBUG( "%d buffers, retcode = %d\n", request.count, retcode );
+       request->count = dma->buf_count;
 
-       DRM_COPY_TO_USER_IOCTL((drm_buf_map_t *)data, request, sizeof(request));
+       DRM_DEBUG( "%d buffers, retcode = %d\n", request->count, retcode );
 
-       return DRM_ERR(retcode);
+       return retcode;
 }
index 8e00954..e34e875 100644 (file)
@@ -109,7 +109,7 @@ int drm_ctxbitmap_init(drm_device_t *dev)
        dev->ctx_bitmap = malloc(PAGE_SIZE, M_DRM, M_NOWAIT | M_ZERO);
        if ( dev->ctx_bitmap == NULL ) {
                DRM_UNLOCK();
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
        dev->context_sareas = NULL;
        dev->max_context = -1;
@@ -136,48 +136,39 @@ void drm_ctxbitmap_cleanup(drm_device_t *dev)
  * Per Context SAREA Support
  */
 
-int drm_getsareactx( DRM_IOCTL_ARGS )
+int drm_getsareactx( drm_device_t *dev, void *data, struct drm_file *file_priv )
 {
-       DRM_DEVICE;
-       drm_ctx_priv_map_t request;
+       drm_ctx_priv_map_t *request = data;
        drm_local_map_t *map;
 
-       DRM_COPY_FROM_USER_IOCTL( request, (drm_ctx_priv_map_t *)data, 
-                          sizeof(request) );
-
        DRM_LOCK();
-       if (dev->max_context < 0 || request.ctx_id >= (unsigned) dev->max_context) {
+       if (dev->max_context < 0 ||
+           request->ctx_id >= (unsigned) dev->max_context) {
                DRM_UNLOCK();
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        }
 
-       map = dev->context_sareas[request.ctx_id];
+       map = dev->context_sareas[request->ctx_id];
        DRM_UNLOCK();
 
-       request.handle = map->handle;
-
-       DRM_COPY_TO_USER_IOCTL( (drm_ctx_priv_map_t *)data, request, sizeof(request) );
+       request->handle = map->handle;
 
        return 0;
 }
 
-int drm_setsareactx( DRM_IOCTL_ARGS )
+int drm_setsareactx(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_ctx_priv_map_t request;
+       drm_ctx_priv_map_t *request = data;
        drm_local_map_t *map = NULL;
 
-       DRM_COPY_FROM_USER_IOCTL( request, (drm_ctx_priv_map_t *)data,
-                          sizeof(request) );
-
        DRM_LOCK();
        TAILQ_FOREACH(map, &dev->maplist, link) {
-               if (map->handle == request.handle) {
+               if (map->handle == request->handle) {
                        if (dev->max_context < 0)
                                goto bad;
-                       if (request.ctx_id >= (unsigned) dev->max_context)
+                       if (request->ctx_id >= (unsigned) dev->max_context)
                                goto bad;
-                       dev->context_sareas[request.ctx_id] = map;
+                       dev->context_sareas[request->ctx_id] = map;
                        DRM_UNLOCK();
                        return 0;
                }
@@ -185,7 +176,7 @@ int drm_setsareactx( DRM_IOCTL_ARGS )
 
 bad:
        DRM_UNLOCK();
-       return DRM_ERR(EINVAL);
+       return EINVAL;
 }
 
 /* ================================================================
@@ -196,7 +187,7 @@ int drm_context_switch(drm_device_t *dev, int old, int new)
 {
         if ( test_and_set_bit( 0, &dev->context_flag ) ) {
                 DRM_ERROR( "Reentering -- FIXME\n" );
-                return DRM_ERR(EBUSY);
+                return EBUSY;
         }
 
         DRM_DEBUG( "Context switch from %d to %d\n", old, new );
@@ -225,120 +216,98 @@ int drm_context_switch_complete(drm_device_t *dev, int new)
         return 0;
 }
 
-int drm_resctx(DRM_IOCTL_ARGS)
+int drm_resctx(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       drm_ctx_res_t res;
+       drm_ctx_res_t *res = data;
        drm_ctx_t ctx;
        int i;
 
-       DRM_COPY_FROM_USER_IOCTL( res, (drm_ctx_res_t *)data, sizeof(res) );
-
-       if ( res.count >= DRM_RESERVED_CONTEXTS ) {
+       if ( res->count >= DRM_RESERVED_CONTEXTS ) {
                bzero(&ctx, sizeof(ctx));
                for ( i = 0 ; i < DRM_RESERVED_CONTEXTS ; i++ ) {
                        ctx.handle = i;
-                       if ( DRM_COPY_TO_USER( &res.contexts[i],
+                       if ( DRM_COPY_TO_USER( &res->contexts[i],
                                           &ctx, sizeof(ctx) ) )
-                               return DRM_ERR(EFAULT);
+                               return EFAULT;
                }
        }
-       res.count = DRM_RESERVED_CONTEXTS;
-
-       DRM_COPY_TO_USER_IOCTL( (drm_ctx_res_t *)data, res, sizeof(res) );
+       res->count = DRM_RESERVED_CONTEXTS;
 
        return 0;
 }
 
-int drm_addctx(DRM_IOCTL_ARGS)
+int drm_addctx(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_ctx_t ctx;
-
-       DRM_COPY_FROM_USER_IOCTL( ctx, (drm_ctx_t *)data, sizeof(ctx) );
+       drm_ctx_t *ctx = data;
 
-       ctx.handle = drm_ctxbitmap_next(dev);
-       if ( ctx.handle == DRM_KERNEL_CONTEXT ) {
+       ctx->handle = drm_ctxbitmap_next(dev);
+       if ( ctx->handle == DRM_KERNEL_CONTEXT ) {
                                /* Skip kernel's context and get a new one. */
-               ctx.handle = drm_ctxbitmap_next(dev);
+               ctx->handle = drm_ctxbitmap_next(dev);
        }
-       DRM_DEBUG( "%d\n", ctx.handle );
-       if ( ctx.handle == -1 ) {
+       DRM_DEBUG( "%d\n", ctx->handle );
+       if ( ctx->handle == -1 ) {
                DRM_DEBUG( "Not enough free contexts.\n" );
                                /* Should this return -EBUSY instead? */
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
        }
 
-       if (dev->driver.context_ctor && ctx.handle != DRM_KERNEL_CONTEXT) {
+       if (dev->driver.context_ctor && ctx->handle != DRM_KERNEL_CONTEXT) {
                DRM_LOCK();
-               dev->driver.context_ctor(dev, ctx.handle);
+               dev->driver.context_ctor(dev, ctx->handle);
                DRM_UNLOCK();
        }
 
-       DRM_COPY_TO_USER_IOCTL( (drm_ctx_t *)data, ctx, sizeof(ctx) );
-
        return 0;
 }
 
-int drm_modctx(DRM_IOCTL_ARGS)
+int drm_modctx(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
        /* This does nothing */
        return 0;
 }
 
-int drm_getctx(DRM_IOCTL_ARGS)
+int drm_getctx(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       drm_ctx_t ctx;
-
-       DRM_COPY_FROM_USER_IOCTL( ctx, (drm_ctx_t *)data, sizeof(ctx) );
+       drm_ctx_t *ctx = data;
 
        /* This is 0, because we don't handle any context flags */
-       ctx.flags = 0;
-
-       DRM_COPY_TO_USER_IOCTL( (drm_ctx_t *)data, ctx, sizeof(ctx) );
+       ctx->flags = 0;
 
        return 0;
 }
 
-int drm_switchctx(DRM_IOCTL_ARGS)
+int drm_switchctx(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_ctx_t ctx;
-
-       DRM_COPY_FROM_USER_IOCTL( ctx, (drm_ctx_t *)data, sizeof(ctx) );
+       drm_ctx_t *ctx = data;
 
-       DRM_DEBUG( "%d\n", ctx.handle );
-       return drm_context_switch(dev, dev->last_context, ctx.handle);
+       DRM_DEBUG( "%d\n", ctx->handle );
+       return drm_context_switch(dev, dev->last_context, ctx->handle);
 }
 
-int drm_newctx(DRM_IOCTL_ARGS)
+int drm_newctx(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_ctx_t ctx;
-
-       DRM_COPY_FROM_USER_IOCTL( ctx, (drm_ctx_t *)data, sizeof(ctx) );
+       drm_ctx_t *ctx = data;
 
-       DRM_DEBUG( "%d\n", ctx.handle );
-       drm_context_switch_complete(dev, ctx.handle);
+       DRM_DEBUG( "%d\n", ctx->handle );
+       drm_context_switch_complete(dev, ctx->handle);
 
        return 0;
 }
 
-int drm_rmctx(DRM_IOCTL_ARGS)
+int drm_rmctx(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_ctx_t ctx;
-
-       DRM_COPY_FROM_USER_IOCTL( ctx, (drm_ctx_t *)data, sizeof(ctx) );
+       drm_ctx_t *ctx = data;
 
-       DRM_DEBUG( "%d\n", ctx.handle );
-       if ( ctx.handle != DRM_KERNEL_CONTEXT ) {
+       DRM_DEBUG( "%d\n", ctx->handle );
+       if ( ctx->handle != DRM_KERNEL_CONTEXT ) {
                if (dev->driver.context_dtor) {
                        DRM_LOCK();
-                       dev->driver.context_dtor(dev, ctx.handle);
+                       dev->driver.context_dtor(dev, ctx->handle);
                        DRM_UNLOCK();
                }
 
-               drm_ctxbitmap_free(dev, ctx.handle);
+               drm_ctxbitmap_free(dev, ctx->handle);
        }
 
        return 0;
index 67b3fe2..fc1e125 100644 (file)
@@ -38,9 +38,9 @@ int drm_dma_setup(drm_device_t *dev)
 
        dev->dma = malloc(sizeof(*dev->dma), M_DRM, M_NOWAIT | M_ZERO);
        if (dev->dma == NULL)
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
 
-       DRM_SPININIT(dev->dma_lock, "drmdma");
+       DRM_SPININIT(&dev->dma_lock, "drmdma");
 
        return 0;
 }
@@ -80,7 +80,7 @@ void drm_dma_takedown(drm_device_t *dev)
        free(dma->pagelist, M_DRM);
        free(dev->dma, M_DRM);
        dev->dma = NULL;
-       DRM_SPINUNINIT(dev->dma_lock);
+       DRM_SPINUNINIT(&dev->dma_lock);
 }
 
 
@@ -89,18 +89,18 @@ void drm_free_buffer(drm_device_t *dev, drm_buf_t *buf)
        if (!buf) return;
 
        buf->pending  = 0;
-       buf->filp     = NULL;
+       buf->file_priv= NULL;
        buf->used     = 0;
 }
 
-void drm_reclaim_buffers(drm_device_t *dev, DRMFILE filp)
+void drm_reclaim_buffers(drm_device_t *dev, struct drm_file *file_priv)
 {
        drm_device_dma_t *dma = dev->dma;
        int              i;
 
        if (!dma) return;
        for (i = 0; i < dma->buf_count; i++) {
-               if (dma->buflist[i]->filp == filp) {
+               if (dma->buflist[i]->file_priv == file_priv) {
                        switch (dma->buflist[i]->list) {
                        case DRM_LIST_NONE:
                                drm_free_buffer(dev, dma->buflist[i]);
@@ -117,12 +117,11 @@ void drm_reclaim_buffers(drm_device_t *dev, DRMFILE filp)
 }
 
 /* Call into the driver-specific DMA handler */
-int drm_dma(DRM_IOCTL_ARGS)
+int drm_dma(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
 
        if (dev->driver.dma_ioctl) {
-               return dev->driver.dma_ioctl(kdev, cmd, data, flags, p, filp);
+               return -dev->driver.dma_ioctl(dev, data, file_priv);
        } else {
                DRM_DEBUG("DMA ioctl on driver with no dma handler\n");
                return EINVAL;
index 379e0aa..7e038ab 100644 (file)
 
 #include "drmP.h"
 
-int drm_adddraw(DRM_IOCTL_ARGS)
+struct bsd_drm_drawable_info {
+       struct drm_drawable_info info;
+       int handle;
+       RB_ENTRY(bsd_drm_drawable_info) tree;
+};
+
+static int
+drm_drawable_compare(struct bsd_drm_drawable_info *a,
+    struct bsd_drm_drawable_info *b)
+{
+       if (a->handle > b->handle)
+               return 1;
+       if (a->handle < b->handle)
+               return -1;
+       return 0;
+}
+
+RB_GENERATE_STATIC(drawable_tree, bsd_drm_drawable_info, tree,
+    drm_drawable_compare);
+
+struct drm_drawable_info *
+drm_get_drawable_info(drm_device_t *dev, int handle)
 {
-       drm_draw_t draw;
+       struct bsd_drm_drawable_info find, *result;
+
+       find.handle = handle;
+       result = RB_FIND(drawable_tree, &dev->drw_head, &find);
 
-       draw.handle = 0;        /* NOOP */
-       DRM_DEBUG("%d\n", draw.handle);
-       
-       DRM_COPY_TO_USER_IOCTL( (drm_draw_t *)data, draw, sizeof(draw) );
+       return &result->info;
+}
+
+int drm_adddraw(drm_device_t *dev, void *data, struct drm_file *file_priv)
+{
+       drm_draw_t *draw = data;
+       struct bsd_drm_drawable_info *info;
+
+       info = drm_calloc(1, sizeof(struct bsd_drm_drawable_info),
+           DRM_MEM_DRAWABLE);
+       if (info == NULL)
+               return ENOMEM;
+
+       info->handle = alloc_unr(dev->drw_unrhdr);
+       DRM_SPINLOCK(&dev->drw_lock);
+       RB_INSERT(drawable_tree, &dev->drw_head, info);
+       draw->handle = info->handle;
+       DRM_SPINUNLOCK(&dev->drw_lock);
+
+       DRM_DEBUG("%d\n", draw->handle);
 
        return 0;
 }
 
-int drm_rmdraw(DRM_IOCTL_ARGS)
+int drm_rmdraw(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       return 0;               /* NOOP */
+       drm_draw_t *draw = (drm_draw_t *)data;
+       struct drm_drawable_info *info;
+
+       DRM_SPINLOCK(&dev->drw_lock);
+       info = drm_get_drawable_info(dev, draw->handle);
+       if (info != NULL) {
+               RB_REMOVE(drawable_tree, &dev->drw_head,
+                   (struct bsd_drm_drawable_info *)info);
+               DRM_SPINUNLOCK(&dev->drw_lock);
+               free_unr(dev->drw_unrhdr, draw->handle);
+               drm_free(info, sizeof(struct bsd_drm_drawable_info),
+                   DRM_MEM_DRAWABLE);
+               return 0;
+       } else {
+               DRM_SPINUNLOCK(&dev->drw_lock);
+               return EINVAL;
+       }
+}
+
+int drm_update_draw(drm_device_t *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_drawable_info *info;
+       struct drm_update_draw *update = (struct drm_update_draw *)data;
+       int ret;
+
+       info = drm_get_drawable_info(dev, update->handle);
+       if (info == NULL)
+               return EINVAL;
+
+       switch (update->type) {
+       case DRM_DRAWABLE_CLIPRECTS:
+               DRM_SPINLOCK(&dev->drw_lock);
+               if (update->num != info->num_rects) {
+                       drm_free(info->rects,
+                           sizeof(*info->rects) * info->num_rects,
+                           DRM_MEM_DRAWABLE);
+                       info->rects = NULL;
+                       info->num_rects = 0;
+               }
+               if (update->num == 0) {
+                       DRM_SPINUNLOCK(&dev->drw_lock);
+                       return 0;
+               }
+               if (info->rects == NULL) {
+                       info->rects = drm_alloc(sizeof(*info->rects) *
+                           update->num, DRM_MEM_DRAWABLE);
+                       if (info->rects == NULL)
+                               return ENOMEM;
+                       info->num_rects = update->num;
+               }
+               /* For some reason the pointer arg is unsigned long long. */
+               ret = copyin((void *)(intptr_t)update->data, info->rects,
+                   sizeof(*info->rects) * info->num_rects);
+               DRM_SPINUNLOCK(&dev->drw_lock);
+               return ret;
+       default:
+               return EINVAL;
+       }
 }
index 069774c..a978f50 100644 (file)
@@ -31,6 +31,7 @@
  *
  */
 
+#include <sys/limits.h>
 #include "drmP.h"
 #include "drm.h"
 #include "drm_sarea.h"
@@ -64,63 +65,64 @@ MODULE_DEPEND(drm, mem, 1, 1, 1);
 #endif /* __NetBSD__ || __OpenBSD__ */
 
 static drm_ioctl_desc_t                  drm_ioctls[256] = {
-       [DRM_IOCTL_NR(DRM_IOCTL_VERSION)]       = { drm_version,     0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_UNIQUE)]    = { drm_getunique,   0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_MAGIC)]     = { drm_getmagic,    0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_IRQ_BUSID)]     = { drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_MAP)]       = { drm_getmap,      0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_CLIENT)]    = { drm_getclient,   0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_STATS)]     = { drm_getstats,    0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_SET_VERSION)]   = { drm_setversion,  DRM_MASTER|DRM_ROOT_ONLY },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_SET_UNIQUE)]    = { drm_setunique,   DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_BLOCK)]         = { drm_noop,        DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)]       = { drm_noop,        DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)]    = { drm_authmagic,   DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)]       = { drm_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_RM_MAP)]        = { drm_rmmap_ioctl, DRM_AUTH },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_SET_SAREA_CTX)] = { drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_SAREA_CTX)] = { drm_getsareactx, DRM_AUTH },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_ADD_CTX)]       = { drm_addctx,      DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_RM_CTX)]        = { drm_rmctx,       DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_MOD_CTX)]       = { drm_modctx,      DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_CTX)]       = { drm_getctx,      DRM_AUTH },
-       [DRM_IOCTL_NR(DRM_IOCTL_SWITCH_CTX)]    = { drm_switchctx,   DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_NEW_CTX)]       = { drm_newctx,      DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_RES_CTX)]       = { drm_resctx,      DRM_AUTH },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_ADD_DRAW)]      = { drm_adddraw,     DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_RM_DRAW)]       = { drm_rmdraw,      DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_LOCK)]          = { drm_lock,        DRM_AUTH },
-       [DRM_IOCTL_NR(DRM_IOCTL_UNLOCK)]        = { drm_unlock,      DRM_AUTH },
-       [DRM_IOCTL_NR(DRM_IOCTL_FINISH)]        = { drm_noop,        DRM_AUTH },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_ADD_BUFS)]      = { drm_addbufs_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_MARK_BUFS)]     = { drm_markbufs,    DRM_AUTH|DRM_MASTER },
-       [DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)]     = { drm_infobufs,    DRM_AUTH },
-       [DRM_IOCTL_NR(DRM_IOCTL_MAP_BUFS)]      = { drm_mapbufs,     DRM_AUTH },
-       [DRM_IOCTL_NR(DRM_IOCTL_FREE_BUFS)]     = { drm_freebufs,    DRM_AUTH },
-       [DRM_IOCTL_NR(DRM_IOCTL_DMA)]           = { drm_dma,         DRM_AUTH },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_CONTROL)]       = { drm_control,     DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)]   = { drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_RELEASE)]   = { drm_agp_release_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ENABLE)]    = { drm_agp_enable_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)]      = { drm_agp_info_ioctl, DRM_AUTH },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ALLOC)]     = { drm_agp_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_FREE)]      = { drm_agp_free_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_BIND)]      = { drm_agp_bind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_UNBIND)]    = { drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_SG_ALLOC)]      = { drm_sg_alloc_ioctl,    DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_IOCTL_SG_FREE)]       = { drm_sg_free,     DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-
-       [DRM_IOCTL_NR(DRM_IOCTL_WAIT_VBLANK)]   = { drm_wait_vblank, 0 },
+       DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_getmap, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE, drm_setunique, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_BLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_UNBLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_rmmap_ioctl, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_getsareactx, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_addctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_modctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_CTX, drm_getctx, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_SWITCH_CTX, drm_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_resctx, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_adddraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_rmdraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_LOCK, drm_lock, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_unlock, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FINISH, drm_noop, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_ADD_BUFS, drm_addbufs_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_MARK_BUFS, drm_markbufs, DRM_AUTH|DRM_MASTER),
+       DRM_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_infobufs, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_mapbufs, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_freebufs, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_DMA, drm_dma, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_CONTROL, drm_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_ACQUIRE, drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_RELEASE, drm_agp_release_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_ENABLE, drm_agp_enable_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_INFO, drm_agp_info_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_ALLOC, drm_agp_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_FREE, drm_agp_free_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_BIND, drm_agp_bind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_UNBIND, drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_sg_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_update_draw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
 };
 
 #ifdef __FreeBSD__
@@ -198,6 +200,7 @@ int drm_attach(device_t nbdev, drm_pci_id_list_t *idlist)
                        "dri/card%d", unit);
 #if __FreeBSD_version >= 500000
        mtx_init(&dev->dev_lock, "drm device", NULL, MTX_DEF);
+       mtx_init(&dev->drw_lock, "drmdrw", NULL, MTX_DEF);
 #endif
 
        id_entry = drm_find_description(pci_get_vendor(dev->device),
@@ -496,7 +499,7 @@ static int drm_lastclose(drm_device_t *dev)
        drm_dma_takedown(dev);
        if ( dev->lock.hw_lock ) {
                dev->lock.hw_lock = NULL; /* SHM removed */
-               dev->lock.filp = NULL;
+               dev->lock.file_priv = NULL;
                DRM_WAKEUP_INT((void *)&dev->lock.lock_queue);
        }
 
@@ -529,7 +532,8 @@ static int drm_load(drm_device_t *dev)
 
        if (dev->driver.load != NULL) {
                DRM_LOCK();
-               retcode = dev->driver.load(dev, dev->id_entry->driver_private);
+               retcode = -dev->driver.load(dev,
+                   dev->id_entry->driver_private);
                DRM_UNLOCK();
                if (retcode != 0)
                        goto error;
@@ -541,7 +545,7 @@ static int drm_load(drm_device_t *dev)
                if (dev->driver.require_agp && dev->agp == NULL) {
                        DRM_ERROR("Card isn't AGP, or couldn't initialize "
                            "AGP.\n");
-                       retcode = DRM_ERR(ENOMEM);
+                       retcode = ENOMEM;
                        goto error;
                }
                if (dev->agp != NULL) {
@@ -556,7 +560,13 @@ static int drm_load(drm_device_t *dev)
                DRM_ERROR("Cannot allocate memory for context bitmap.\n");
                goto error;
        }
-       
+
+       dev->drw_unrhdr = new_unrhdr(1, INT_MAX, NULL);
+       if (dev->drw_unrhdr == NULL) {
+               DRM_ERROR("Couldn't allocate drawable number allocator\n");
+               goto error;
+       }
+
        DRM_INFO("Initialized %s %d.%d.%d %s\n",
                dev->driver.name,
                dev->driver.major,
@@ -628,6 +638,8 @@ static void drm_unload(drm_device_t *dev)
        if (dev->driver.unload != NULL)
                dev->driver.unload(dev);
 
+       delete_unrhdr(dev->drw_unrhdr);
+
        drm_mem_uninit();
 #if defined(__FreeBSD__) &&  __FreeBSD_version >= 500000
        mtx_destroy(&dev->dev_lock);
@@ -635,32 +647,27 @@ static void drm_unload(drm_device_t *dev)
 }
 
 
-int drm_version(DRM_IOCTL_ARGS)
+int drm_version(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_version_t version;
+       drm_version_t *version = data;
        int len;
 
-       DRM_COPY_FROM_USER_IOCTL( version, (drm_version_t *)data, sizeof(version) );
-
 #define DRM_COPY( name, value )                                                \
        len = strlen( value );                                          \
        if ( len > name##_len ) len = name##_len;                       \
        name##_len = strlen( value );                                   \
        if ( len && name ) {                                            \
                if ( DRM_COPY_TO_USER( name, value, len ) )             \
-                       return DRM_ERR(EFAULT);                         \
+                       return EFAULT;                          \
        }
 
-       version.version_major           = dev->driver.major;
-       version.version_minor           = dev->driver.minor;
-       version.version_patchlevel      = dev->driver.patchlevel;
-
-       DRM_COPY(version.name, dev->driver.name);
-       DRM_COPY(version.date, dev->driver.date);
-       DRM_COPY(version.desc, dev->driver.desc);
+       version->version_major          = dev->driver.major;
+       version->version_minor          = dev->driver.minor;
+       version->version_patchlevel     = dev->driver.patchlevel;
 
-       DRM_COPY_TO_USER_IOCTL( (drm_version_t *)data, version, sizeof(version) );
+       DRM_COPY(version->name, dev->driver.name);
+       DRM_COPY(version->date, dev->driver.date);
+       DRM_COPY(version->desc, dev->driver.desc);
 
        return 0;
 }
@@ -692,24 +699,23 @@ int drm_open(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
 
 int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
 {
-       drm_file_t *priv;
-       DRM_DEVICE;
+       drm_device_t *dev = drm_get_device_from_kdev(kdev);
+       drm_file_t *file_priv;
        int retcode = 0;
-       DRMFILE filp = (void *)(uintptr_t)(DRM_CURRENTPID);
-       
+
        DRM_DEBUG( "open_count = %d\n", dev->open_count );
 
        DRM_LOCK();
 
-       priv = drm_find_file_by_proc(dev, p);
-       if (!priv) {
+       file_priv = drm_find_file_by_proc(dev, p);
+       if (!file_priv) {
                DRM_UNLOCK();
                DRM_ERROR("can't find authenticator\n");
                return EINVAL;
        }
 
        if (dev->driver.preclose != NULL)
-               dev->driver.preclose(dev, filp);
+               dev->driver.preclose(dev, file_priv);
 
        /* ========================================================
         * Begin inline drm_release
@@ -724,12 +730,12 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
 #endif
 
        if (dev->lock.hw_lock && _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)
-           && dev->lock.filp == filp) {
+           && dev->lock.file_priv == file_priv) {
                DRM_DEBUG("Process %d dead, freeing lock for context %d\n",
                          DRM_CURRENTPID,
                          _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
                if (dev->driver.reclaim_buffers_locked != NULL)
-                       dev->driver.reclaim_buffers_locked(dev, filp);
+                       dev->driver.reclaim_buffers_locked(dev, file_priv);
 
                drm_lock_free(dev, &dev->lock.hw_lock->lock,
                    _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
@@ -744,12 +750,12 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
                for (;;) {
                        if ( !dev->lock.hw_lock ) {
                                /* Device has been unregistered */
-                               retcode = DRM_ERR(EINTR);
+                               retcode = EINTR;
                                break;
                        }
                        if (drm_lock_take(&dev->lock.hw_lock->lock,
                            DRM_KERNEL_CONTEXT)) {
-                               dev->lock.filp = filp;
+                               dev->lock.file_priv = file_priv;
                                dev->lock.lock_time = jiffies;
                                 atomic_inc( &dev->counts[_DRM_STAT_LOCKS] );
                                break;  /* Got lock */
@@ -766,14 +772,14 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
                                break;
                }
                if (retcode == 0) {
-                       dev->driver.reclaim_buffers_locked(dev, filp);
+                       dev->driver.reclaim_buffers_locked(dev, file_priv);
                        drm_lock_free(dev, &dev->lock.hw_lock->lock,
                            DRM_KERNEL_CONTEXT);
                }
        }
 
        if (dev->driver.use_dma && !dev->driver.reclaim_buffers_locked)
-               drm_reclaim_buffers(dev, filp);
+               drm_reclaim_buffers(dev, file_priv);
 
 #if defined (__FreeBSD__) && (__FreeBSD_version >= 500000)
        funsetown(&dev->buf_sigio);
@@ -783,11 +789,11 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
        dev->buf_pgid = 0;
 #endif /* __NetBSD__  || __OpenBSD__ */
 
-       if (--priv->refs == 0) {
+       if (--file_priv->refs == 0) {
                if (dev->driver.postclose != NULL)
-                       dev->driver.postclose(dev, priv);
-               TAILQ_REMOVE(&dev->files, priv, link);
-               free(priv, M_DRM);
+                       dev->driver.postclose(dev, file_priv);
+               TAILQ_REMOVE(&dev->files, file_priv, link);
+               free(file_priv, M_DRM);
        }
 
        /* ========================================================
@@ -812,32 +818,40 @@ int drm_close(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
 int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags, 
     DRM_STRUCTPROC *p)
 {
-       DRM_DEVICE;
+#ifdef __FreeBSD__
+       drm_device_t *dev = kdev->si_drv1;
+#elif defined(__NetBSD__)
+       drm_device_t *dev = device_lookup(&drm_cd, minor(kdev));
+#else
+       drm_device_t *dev = device_lookup(&drm_cd,
+            minor(kdev)))->dv_cfdata->cf_driver->cd_devs[minor(kdev)];
+#endif
        int retcode = 0;
        drm_ioctl_desc_t *ioctl;
-       int (*func)(DRM_IOCTL_ARGS);
+       int (*func)(drm_device_t *dev, void *data, struct drm_file *file_priv);
        int nr = DRM_IOCTL_NR(cmd);
        int is_driver_ioctl = 0;
-       drm_file_t *priv;
-       DRMFILE filp = (DRMFILE)(uintptr_t)DRM_CURRENTPID;
+       drm_file_t *file_priv;
 
        DRM_LOCK();
-       priv = drm_find_file_by_proc(dev, p);
+       file_priv = drm_find_file_by_proc(dev, p);
        DRM_UNLOCK();
-       if (priv == NULL) {
+       if (file_priv == NULL) {
                DRM_ERROR("can't find authenticator\n");
                return EINVAL;
        }
 
        atomic_inc( &dev->counts[_DRM_STAT_IOCTLS] );
-       ++priv->ioctl_count;
+       ++file_priv->ioctl_count;
 
 #ifdef __FreeBSD__
        DRM_DEBUG( "pid=%d, cmd=0x%02lx, nr=0x%02x, dev 0x%lx, auth=%d\n",
-                DRM_CURRENTPID, cmd, nr, (long)dev->device, priv->authenticated );
+           DRM_CURRENTPID, cmd, nr, (long)dev->device,
+           file_priv->authenticated );
 #elif defined(__NetBSD__) || defined(__OpenBSD__)
        DRM_DEBUG( "pid=%d, cmd=0x%02lx, nr=0x%02x, dev 0x%lx, auth=%d\n",
-                DRM_CURRENTPID, cmd, nr, (long)&dev->device, priv->authenticated );
+           DRM_CURRENTPID, cmd, nr, (long)&dev->device,
+           file_priv->authenticated );
 #endif
 
        switch (cmd) {
@@ -892,24 +906,27 @@ int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags,
                DRM_DEBUG( "no function\n" );
                return EINVAL;
        }
-       /* ioctl->master check should be against something in the filp set up
-        * for the first opener, but it doesn't matter yet.
-        */
+
        if (((ioctl->flags & DRM_ROOT_ONLY) && !DRM_SUSER(p)) ||
-           ((ioctl->flags & DRM_AUTH) && !priv->authenticated) ||
-           ((ioctl->flags & DRM_MASTER) && !priv->master))
+           ((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) ||
+           ((ioctl->flags & DRM_MASTER) && !file_priv->master))
                return EACCES;
 
        if (is_driver_ioctl)
                DRM_LOCK();
-       retcode = func(kdev, cmd, data, flags, p, filp);
-       if (is_driver_ioctl)
+       retcode = func(dev, data, file_priv);
+       if (is_driver_ioctl) {
                DRM_UNLOCK();
+               /* Driver ioctls in shared code follow the linux convention of
+                * returning -errno instead of errno.
+                */
+               retcode = -retcode;
+       }
 
        if (retcode != 0)
                DRM_DEBUG("    returning %d\n", retcode);
 
-       return DRM_ERR(retcode);
+       return retcode;
 }
 
 drm_local_map_t *drm_getsarea(drm_device_t *dev)
index f5c9349..870e4d2 100644 (file)
@@ -75,7 +75,7 @@ int drm_open_helper(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p,
                priv = malloc(sizeof(*priv), M_DRM, M_NOWAIT | M_ZERO);
                if (priv == NULL) {
                        DRM_UNLOCK();
-                       return DRM_ERR(ENOMEM);
+                       return ENOMEM;
                }
 #if __FreeBSD_version >= 500000
                priv->uid               = p->td_ucred->cr_svuid;
@@ -93,7 +93,7 @@ int drm_open_helper(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p,
                priv->authenticated     = DRM_SUSER(p);
 
                if (dev->driver.open) {
-                       retcode = dev->driver.open(dev, priv);
+                       retcode = -dev->driver.open(dev, priv);
                        if (retcode != 0) {
                                free(priv, M_DRM);
                                DRM_UNLOCK();
index e22faa8..ebdb214 100644 (file)
  * before setunique has been called.  The format for the bus-specific part of
  * the unique is not defined for any other bus.
  */
-int drm_getunique(DRM_IOCTL_ARGS)
+int drm_getunique(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_unique_t     u;
+       drm_unique_t     *u = data;
 
-       DRM_COPY_FROM_USER_IOCTL( u, (drm_unique_t *)data, sizeof(u) );
-
-       if (u.unique_len >= dev->unique_len) {
-               if (DRM_COPY_TO_USER(u.unique, dev->unique, dev->unique_len))
-                       return DRM_ERR(EFAULT);
+       if (u->unique_len >= dev->unique_len) {
+               if (DRM_COPY_TO_USER(u->unique, dev->unique, dev->unique_len))
+                       return EFAULT;
        }
-       u.unique_len = dev->unique_len;
-
-       DRM_COPY_TO_USER_IOCTL( (drm_unique_t *)data, u, sizeof(u) );
+       u->unique_len = dev->unique_len;
 
        return 0;
 }
@@ -60,28 +55,25 @@ int drm_getunique(DRM_IOCTL_ARGS)
 /* Deprecated in DRM version 1.1, and will return EBUSY when setversion has
  * requested version 1.1 or greater.
  */
-int drm_setunique(DRM_IOCTL_ARGS)
+int drm_setunique(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_unique_t u;
+       drm_unique_t *u = data;
        int domain, bus, slot, func, ret;
        char *busid;
 
-       DRM_COPY_FROM_USER_IOCTL( u, (drm_unique_t *)data, sizeof(u) );
-
        /* Check and copy in the submitted Bus ID */
-       if (!u.unique_len || u.unique_len > 1024)
-               return DRM_ERR(EINVAL);
+       if (!u->unique_len || u->unique_len > 1024)
+               return EINVAL;
 
-       busid = malloc(u.unique_len + 1, M_DRM, M_WAITOK);
+       busid = malloc(u->unique_len + 1, M_DRM, M_WAITOK);
        if (busid == NULL)
-               return DRM_ERR(ENOMEM);
+               return ENOMEM;
 
-       if (DRM_COPY_FROM_USER(busid, u.unique, u.unique_len)) {
+       if (DRM_COPY_FROM_USER(busid, u->unique, u->unique_len)) {
                free(busid, M_DRM);
-               return DRM_ERR(EFAULT);
+               return EFAULT;
        }
-       busid[u.unique_len] = '\0';
+       busid[u->unique_len] = '\0';
 
        /* Return error if the busid submitted doesn't match the device's actual
         * busid.
@@ -89,7 +81,7 @@ int drm_setunique(DRM_IOCTL_ARGS)
        ret = sscanf(busid, "PCI:%d:%d:%d", &bus, &slot, &func);
        if (ret != 3) {
                free(busid, M_DRM);
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        }
        domain = bus >> 8;
        bus &= 0xff;
@@ -99,17 +91,17 @@ int drm_setunique(DRM_IOCTL_ARGS)
            (slot != dev->pci_slot) ||
            (func != dev->pci_func)) {
                free(busid, M_DRM);
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        }
 
        /* Actually set the device's busid now. */
        DRM_LOCK();
        if (dev->unique_len || dev->unique) {
                DRM_UNLOCK();
-               return DRM_ERR(EBUSY);
+               return EBUSY;
        }
 
-       dev->unique_len = u.unique_len;
+       dev->unique_len = u->unique_len;
        dev->unique = busid;
        DRM_UNLOCK();
 
@@ -143,32 +135,29 @@ drm_set_busid(drm_device_t *dev)
        return 0;
 }
 
-int drm_getmap(DRM_IOCTL_ARGS)
+int drm_getmap(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_map_t    map;
+       drm_map_t    *map = data;
        drm_local_map_t    *mapinlist;
        int          idx;
        int          i = 0;
 
-       DRM_COPY_FROM_USER_IOCTL( map, (drm_map_t *)data, sizeof(map) );
-
-       idx = map.offset;
+       idx = map->offset;
 
        DRM_LOCK();
        if (idx < 0) {
                DRM_UNLOCK();
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        }
 
        TAILQ_FOREACH(mapinlist, &dev->maplist, link) {
                if (i==idx) {
-                       map.offset = mapinlist->offset;
-                       map.size   = mapinlist->size;
-                       map.type   = mapinlist->type;
-                       map.flags  = mapinlist->flags;
-                       map.handle = mapinlist->handle;
-                       map.mtrr   = mapinlist->mtrr;
+                       map->offset = mapinlist->offset;
+                       map->size   = mapinlist->size;
+                       map->type   = mapinlist->type;
+                       map->flags  = mapinlist->flags;
+                       map->handle = mapinlist->handle;
+                       map->mtrr   = mapinlist->mtrr;
                        break;
                }
                i++;
@@ -179,49 +168,39 @@ int drm_getmap(DRM_IOCTL_ARGS)
        if (mapinlist == NULL)
                return EINVAL;
 
-       DRM_COPY_TO_USER_IOCTL( (drm_map_t *)data, map, sizeof(map) );
-
        return 0;
 }
 
-int drm_getclient(DRM_IOCTL_ARGS)
+int drm_getclient(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_client_t client;
+       drm_client_t *client = data;
        drm_file_t   *pt;
        int          idx;
        int          i = 0;
 
-       DRM_COPY_FROM_USER_IOCTL( client, (drm_client_t *)data, sizeof(client) );
-
-       idx = client.idx;
+       idx = client->idx;
        DRM_LOCK();
        TAILQ_FOREACH(pt, &dev->files, link) {
                if (i==idx)
                {
-                       client.auth  = pt->authenticated;
-                       client.pid   = pt->pid;
-                       client.uid   = pt->uid;
-                       client.magic = pt->magic;
-                       client.iocs  = pt->ioctl_count;
+                       client->auth  = pt->authenticated;
+                       client->pid   = pt->pid;
+                       client->uid   = pt->uid;
+                       client->magic = pt->magic;
+                       client->iocs  = pt->ioctl_count;
                        DRM_UNLOCK();
-
-                       *(drm_client_t *)data = client;
                        return 0;
                }
                i++;
        }
        DRM_UNLOCK();
 
-       DRM_COPY_TO_USER_IOCTL( (drm_client_t *)data, client, sizeof(client) );
-
-       return 0;
+       return EINVAL;
 }
 
-int drm_getstats(DRM_IOCTL_ARGS)
+int drm_getstats(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_stats_t  stats;
+       drm_stats_t  *stats = data;
        int          i;
 
        memset(&stats, 0, sizeof(stats));
@@ -230,49 +209,44 @@ int drm_getstats(DRM_IOCTL_ARGS)
 
        for (i = 0; i < dev->counters; i++) {
                if (dev->types[i] == _DRM_STAT_LOCK)
-                       stats.data[i].value
+                       stats->data[i].value
                                = (dev->lock.hw_lock
                                   ? dev->lock.hw_lock->lock : 0);
                else 
-                       stats.data[i].value = atomic_read(&dev->counts[i]);
-               stats.data[i].type  = dev->types[i];
+                       stats->data[i].value = atomic_read(&dev->counts[i]);
+               stats->data[i].type  = dev->types[i];
        }
        
-       stats.count = dev->counters;
+       stats->count = dev->counters;
 
        DRM_UNLOCK();
 
-       DRM_COPY_TO_USER_IOCTL( (drm_stats_t *)data, stats, sizeof(stats) );
-
        return 0;
 }
 
 #define DRM_IF_MAJOR   1
 #define DRM_IF_MINOR   2
 
-int drm_setversion(DRM_IOCTL_ARGS)
+int drm_setversion(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_set_version_t sv;
+       drm_set_version_t *sv = data;
        drm_set_version_t retv;
        int if_version;
 
-       DRM_COPY_FROM_USER_IOCTL(sv, (drm_set_version_t *)data, sizeof(sv));
-
        retv.drm_di_major = DRM_IF_MAJOR;
        retv.drm_di_minor = DRM_IF_MINOR;
        retv.drm_dd_major = dev->driver.major;
        retv.drm_dd_minor = dev->driver.minor;
 
-       DRM_COPY_TO_USER_IOCTL((drm_set_version_t *)data, retv, sizeof(sv));
-
-       if (sv.drm_di_major != -1) {
-               if (sv.drm_di_major != DRM_IF_MAJOR ||
-                   sv.drm_di_minor < 0 || sv.drm_di_minor > DRM_IF_MINOR)
+       if (sv->drm_di_major != -1) {
+               if (sv->drm_di_major != DRM_IF_MAJOR ||
+                   sv->drm_di_minor < 0 || sv->drm_di_minor > DRM_IF_MINOR) {
                        return EINVAL;
-               if_version = DRM_IF_VERSION(sv.drm_di_major, sv.drm_dd_minor);
+               }
+               if_version = DRM_IF_VERSION(sv->drm_di_major,
+                   sv->drm_dd_minor);
                dev->if_version = DRM_MAX(if_version, dev->if_version);
-               if (sv.drm_di_minor >= 1) {
+               if (sv->drm_di_minor >= 1) {
                        /*
                         * Version 1.1 includes tying of DRM to specific device
                         */
@@ -280,16 +254,20 @@ int drm_setversion(DRM_IOCTL_ARGS)
                }
        }
 
-       if (sv.drm_dd_major != -1) {
-               if (sv.drm_dd_major != dev->driver.major ||
-                   sv.drm_dd_minor < 0 || sv.drm_dd_minor > dev->driver.minor)
+       if (sv->drm_dd_major != -1) {
+               if (sv->drm_dd_major != dev->driver.major ||
+                   sv->drm_dd_minor < 0 ||
+                   sv->drm_dd_minor > dev->driver.minor)
+               {
                        return EINVAL;
+               }
        }
+
        return 0;
 }
 
 
-int drm_noop(DRM_IOCTL_ARGS)
+int drm_noop(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
        DRM_DEBUG("\n");
        return 0;
index f7da5ed..1ab532f 100644 (file)
 #include "drmP.h"
 #include "drm.h"
 
-int drm_irq_by_busid(DRM_IOCTL_ARGS)
-{
-       DRM_DEVICE;
-       drm_irq_busid_t irq;
+static void drm_locked_task(void *context, int pending __unused);
 
-       DRM_COPY_FROM_USER_IOCTL(irq, (drm_irq_busid_t *)data, sizeof(irq));
+int drm_irq_by_busid(drm_device_t *dev, void *data, struct drm_file *file_priv)
+{
+       drm_irq_busid_t *irq = data;
 
-       if ((irq.busnum >> 8) != dev->pci_domain ||
-           (irq.busnum & 0xff) != dev->pci_bus ||
-           irq.devnum != dev->pci_slot ||
-           irq.funcnum != dev->pci_func)
+       if ((irq->busnum >> 8) != dev->pci_domain ||
+           (irq->busnum & 0xff) != dev->pci_bus ||
+           irq->devnum != dev->pci_slot ||
+           irq->funcnum != dev->pci_func)
                return EINVAL;
 
-       irq.irq = dev->irq;
+       irq->irq = dev->irq;
 
        DRM_DEBUG("%d:%d:%d => IRQ %d\n",
-                 irq.busnum, irq.devnum, irq.funcnum, irq.irq);
-
-       DRM_COPY_TO_USER_IOCTL( (drm_irq_busid_t *)data, irq, sizeof(irq) );
+                 irq->busnum, irq->devnum, irq->funcnum, irq->irq);
 
        return 0;
 }
@@ -74,20 +71,20 @@ int drm_irq_install(drm_device_t *dev)
 #endif
 
        if (dev->irq == 0 || dev->dev_private == NULL)
-               return DRM_ERR(EINVAL);
+               return EINVAL;
 
        DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, dev->irq );
 
        DRM_LOCK();
        if (dev->irq_enabled) {
                DRM_UNLOCK();
-               return DRM_ERR(EBUSY);
+               return EBUSY;
        }
        dev->irq_enabled = 1;
 
        dev->context_flag = 0;
 
-       DRM_SPININIT(dev->irq_lock, "DRM IRQ lock");
+       DRM_SPININIT(&dev->irq_lock, "DRM IRQ lock");
 
                                /* Before installing handler */
        dev->driver.irq_preinstall(dev);
@@ -131,6 +128,7 @@ int drm_irq_install(drm_device_t *dev)
        dev->driver.irq_postinstall(dev);
        DRM_UNLOCK();
 
+       TASK_INIT(&dev->locked_task, 0, drm_locked_task, dev);
        return 0;
 err:
        DRM_LOCK();
@@ -142,7 +140,7 @@ err:
                dev->irqrid = 0;
        }
 #endif
-       DRM_SPINUNINIT(dev->irq_lock);
+       DRM_SPINUNINIT(&dev->irq_lock);
        DRM_UNLOCK();
        return retcode;
 }
@@ -154,7 +152,7 @@ int drm_irq_uninstall(drm_device_t *dev)
 #endif
 
        if (!dev->irq_enabled)
-               return DRM_ERR(EINVAL);
+               return EINVAL;
 
        dev->irq_enabled = 0;
 #ifdef __FreeBSD__
@@ -174,20 +172,17 @@ int drm_irq_uninstall(drm_device_t *dev)
 #elif defined(__NetBSD__) || defined(__OpenBSD__)
        pci_intr_disestablish(&dev->pa.pa_pc, dev->irqh);
 #endif
-       DRM_SPINUNINIT(dev->irq_lock);
+       DRM_SPINUNINIT(&dev->irq_lock);
 
        return 0;
 }
 
-int drm_control(DRM_IOCTL_ARGS)
+int drm_control(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_control_t ctl;
+       drm_control_t *ctl = data;
        int err;
 
-       DRM_COPY_FROM_USER_IOCTL( ctl, (drm_control_t *) data, sizeof(ctl) );
-
-       switch ( ctl.func ) {
+       switch ( ctl->func ) {
        case DRM_INST_HANDLER:
                /* Handle drivers whose DRM used to require IRQ setup but the
                 * no longer does.
@@ -195,8 +190,8 @@ int drm_control(DRM_IOCTL_ARGS)
                if (!dev->driver.use_irq)
                        return 0;
                if (dev->if_version < DRM_IF_VERSION(1, 2) &&
-                   ctl.irq != dev->irq)
-                       return DRM_ERR(EINVAL);
+                   ctl->irq != dev->irq)
+                       return EINVAL;
                return drm_irq_install(dev);
        case DRM_UNINST_HANDLER:
                if (!dev->driver.use_irq)
@@ -206,29 +201,25 @@ int drm_control(DRM_IOCTL_ARGS)
                DRM_UNLOCK();
                return err;
        default:
-               return DRM_ERR(EINVAL);
+               return EINVAL;
        }
 }
 
-int drm_wait_vblank(DRM_IOCTL_ARGS)
+int drm_wait_vblank(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_wait_vblank_t vblwait;
+       drm_wait_vblank_t *vblwait = data;
        struct timeval now;
-       int ret;
+       int ret, flags;
 
        if (!dev->irq_enabled)
-               return DRM_ERR(EINVAL);
-
-       DRM_COPY_FROM_USER_IOCTL( vblwait, (drm_wait_vblank_t *)data,
-                                 sizeof(vblwait) );
+               return EINVAL;
 
-       if (vblwait.request.type & _DRM_VBLANK_RELATIVE) {
-               vblwait.request.sequence += atomic_read(&dev->vbl_received);
-               vblwait.request.type &= ~_DRM_VBLANK_RELATIVE;
+       if (vblwait->request.type & _DRM_VBLANK_RELATIVE) {
+               vblwait->request.sequence += atomic_read(&dev->vbl_received);
+               vblwait->request.type &= ~_DRM_VBLANK_RELATIVE;
        }
 
-       flags = vblwait.request.type & _DRM_VBLANK_FLAGS_MASK;
+       flags = vblwait->request.type & _DRM_VBLANK_FLAGS_MASK;
        if (flags & _DRM_VBLANK_SIGNAL) {
 #if 0 /* disabled */
                drm_vbl_sig_t *vbl_sig = malloc(sizeof(drm_vbl_sig_t), M_DRM,
@@ -236,11 +227,11 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
                if (vbl_sig == NULL)
                        return ENOMEM;
 
-               vbl_sig->sequence = vblwait.request.sequence;
-               vbl_sig->signo = vblwait.request.signal;
+               vbl_sig->sequence = vblwait->request.sequence;
+               vbl_sig->signo = vblwait->request.signal;
                vbl_sig->pid = DRM_CURRENTPID;
 
-               vblwait.reply.sequence = atomic_read(&dev->vbl_received);
+               vblwait->reply.sequence = atomic_read(&dev->vbl_received);
                
                DRM_SPINLOCK(&dev->irq_lock);
                TAILQ_INSERT_HEAD(&dev->vbl_sig_list, vbl_sig, link);
@@ -250,17 +241,15 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
                ret = EINVAL;
        } else {
                DRM_LOCK();
-               ret = dev->driver.vblank_wait(dev, &vblwait.request.sequence);
+               ret = -dev->driver.vblank_wait(dev,
+                   &vblwait->request.sequence);
                DRM_UNLOCK();
 
                microtime(&now);
-               vblwait.reply.tval_sec = now.tv_sec;
-               vblwait.reply.tval_usec = now.tv_usec;
+               vblwait->reply.tval_sec = now.tv_sec;
+               vblwait->reply.tval_usec = now.tv_usec;
        }
 
-       DRM_COPY_TO_USER_IOCTL( (drm_wait_vblank_t *)data, vblwait,
-                               sizeof(vblwait) );
-
        return ret;
 }
 
@@ -291,3 +280,45 @@ void drm_vbl_send_signals( drm_device_t *dev )
        }
 }
 #endif
+
+static void drm_locked_task(void *context, int pending __unused)
+{
+       drm_device_t *dev = context;
+
+       DRM_LOCK();
+       for (;;) {
+               int ret;
+
+               if (drm_lock_take(&dev->lock.hw_lock->lock,
+                   DRM_KERNEL_CONTEXT))
+               {
+                       dev->lock.file_priv = NULL; /* kernel owned */
+                       dev->lock.lock_time = jiffies;
+                       atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
+                       break;  /* Got lock */
+               }
+
+               /* Contention */
+#if defined(__FreeBSD__) && __FreeBSD_version > 500000
+               ret = msleep((void *)&dev->lock.lock_queue, &dev->dev_lock,
+                   PZERO | PCATCH, "drmlk2", 0);
+#else
+               ret = tsleep((void *)&dev->lock.lock_queue, PZERO | PCATCH,
+                   "drmlk2", 0);
+#endif
+               if (ret != 0)
+                       return;
+       }
+       DRM_UNLOCK();
+
+       dev->locked_task_call(dev);
+
+       drm_lock_free(dev, &dev->lock.hw_lock->lock, DRM_KERNEL_CONTEXT);
+}
+
+void
+drm_locked_tasklet(drm_device_t *dev, void (*tasklet)(drm_device_t *dev))
+{
+       dev->locked_task_call = tasklet;
+       taskqueue_enqueue(taskqueue_swi, &dev->locked_task);
+}
index d0e61d3..5acb13d 100644 (file)
@@ -66,7 +66,7 @@ int drm_lock_transfer(drm_device_t *dev,
 {
        unsigned int old, new;
 
-       dev->lock.filp = NULL;
+       dev->lock.file_priv = NULL;
        do {
                old  = *lock;
                new  = context | _DRM_LOCK_HELD;
@@ -80,7 +80,7 @@ int drm_lock_free(drm_device_t *dev,
 {
        unsigned int old, new;
 
-       dev->lock.filp = NULL;
+       dev->lock.file_priv = NULL;
        do {
                old  = *lock;
                new  = 0;
@@ -95,30 +95,28 @@ int drm_lock_free(drm_device_t *dev,
        return 0;
 }
 
-int drm_lock(DRM_IOCTL_ARGS)
+int drm_lock(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-        drm_lock_t lock;
+        drm_lock_t *lock = data;
         int ret = 0;
 
-       DRM_COPY_FROM_USER_IOCTL(lock, (drm_lock_t *)data, sizeof(lock));
-
-        if (lock.context == DRM_KERNEL_CONTEXT) {
+        if (lock->context == DRM_KERNEL_CONTEXT) {
                 DRM_ERROR("Process %d using kernel context %d\n",
-                   DRM_CURRENTPID, lock.context);
+                   DRM_CURRENTPID, lock->context);
                 return EINVAL;
         }
 
         DRM_DEBUG("%d (pid %d) requests lock (0x%08x), flags = 0x%08x\n",
-           lock.context, DRM_CURRENTPID, dev->lock.hw_lock->lock, lock.flags);
+           lock->context, DRM_CURRENTPID, dev->lock.hw_lock->lock,
+           lock->flags);
 
-        if (dev->driver.use_dma_queue && lock.context < 0)
+        if (dev->driver.use_dma_queue && lock->context < 0)
                 return EINVAL;
 
        DRM_LOCK();
        for (;;) {
-               if (drm_lock_take(&dev->lock.hw_lock->lock, lock.context)) {
-                       dev->lock.filp = (void *)(uintptr_t)DRM_CURRENTPID;
+               if (drm_lock_take(&dev->lock.hw_lock->lock, lock->context)) {
+                       dev->lock.file_priv = file_priv;
                        dev->lock.lock_time = jiffies;
                        atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
                        break;  /* Got lock */
@@ -136,7 +134,7 @@ int drm_lock(DRM_IOCTL_ARGS)
                        break;
        }
        DRM_UNLOCK();
-       DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock");
+       DRM_DEBUG("%d %s\n", lock->context, ret ? "interrupted" : "has lock");
 
        if (ret != 0)
                return ret;
@@ -144,22 +142,19 @@ int drm_lock(DRM_IOCTL_ARGS)
        /* XXX: Add signal blocking here */
 
        if (dev->driver.dma_quiescent != NULL &&
-           (lock.flags & _DRM_LOCK_QUIESCENT))
+           (lock->flags & _DRM_LOCK_QUIESCENT))
                dev->driver.dma_quiescent(dev);
 
        return 0;
 }
 
-int drm_unlock(DRM_IOCTL_ARGS)
+int drm_unlock(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_lock_t lock;
-
-       DRM_COPY_FROM_USER_IOCTL(lock, (drm_lock_t *)data, sizeof(lock));
+       drm_lock_t *lock = data;
 
-       if (lock.context == DRM_KERNEL_CONTEXT) {
+       if (lock->context == DRM_KERNEL_CONTEXT) {
                DRM_ERROR("Process %d using kernel context %d\n",
-                   DRM_CURRENTPID, lock.context);
+                   DRM_CURRENTPID, lock->context);
                return EINVAL;
        }
 
diff --git a/bsd-core/drm_sarea.h b/bsd-core/drm_sarea.h
new file mode 120000 (symlink)
index 0000000..fd428f4
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/drm_sarea.h
\ No newline at end of file
index 46222f1..91c3c6c 100644 (file)
@@ -44,6 +44,7 @@ int drm_sg_alloc(drm_device_t * dev, drm_scatter_gather_t * request)
 {
        drm_sg_mem_t *entry;
        unsigned long pages;
+       int i;
 
        if ( dev->sg )
                return EINVAL;
@@ -52,7 +53,7 @@ int drm_sg_alloc(drm_device_t * dev, drm_scatter_gather_t * request)
        if ( !entry )
                return ENOMEM;
 
-       pages = round_page(request.size) / PAGE_SIZE;
+       pages = round_page(request->size) / PAGE_SIZE;
        DRM_DEBUG( "sg size=%ld pages=%ld\n", request->size, pages );
 
        entry->pages = pages;
@@ -89,45 +90,31 @@ int drm_sg_alloc(drm_device_t * dev, drm_scatter_gather_t * request)
        dev->sg = entry;
        DRM_UNLOCK();
 
+       return 0;
 }
 
-int drm_sg_alloc_ioctl(DRM_IOCTL_ARGS)
+int drm_sg_alloc_ioctl(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_scatter_gather_t request;
+       drm_scatter_gather_t *request = data;
        int ret;
 
        DRM_DEBUG( "%s\n", __FUNCTION__ );
 
-
-       DRM_COPY_FROM_USER_IOCTL(request, (drm_scatter_gather_t *)data,
-                            sizeof(request) );
-
-       ret = drm_sg_alloc(dev, &request);
-       if ( ret ) return ret;
-
-       DRM_COPY_TO_USER_IOCTL( (drm_scatter_gather_t *)data,
-                          request,
-                          sizeof(request) );
-
-       return 0;
+       ret = drm_sg_alloc(dev, request);
+       return ret;
 }
 
-int drm_sg_free(DRM_IOCTL_ARGS)
+int drm_sg_free(drm_device_t *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_scatter_gather_t request;
+       drm_scatter_gather_t *request = data;
        drm_sg_mem_t *entry;
 
-       DRM_COPY_FROM_USER_IOCTL( request, (drm_scatter_gather_t *)data,
-                            sizeof(request) );
-
        DRM_LOCK();
        entry = dev->sg;
        dev->sg = NULL;
        DRM_UNLOCK();
 
-       if ( !entry || entry->handle != request.handle )
+       if ( !entry || entry->handle != request->handle )
                return EINVAL;
 
        DRM_DEBUG( "sg free virtual  = 0x%lx\n", entry->handle );
index 7f732c9..af1dbaa 100644 (file)
@@ -33,7 +33,7 @@ int drm_mmap(dev_t kdev, vm_offset_t offset, int prot)
 paddr_t drm_mmap(dev_t kdev, off_t offset, int prot)
 #endif
 {
-       DRM_DEVICE;
+       drm_device_t *dev = drm_get_device_from_kdev(kdev);
        drm_local_map_t *map;
        drm_file_t *priv;
        drm_map_type_t type;
@@ -52,7 +52,7 @@ paddr_t drm_mmap(dev_t kdev, off_t offset, int prot)
        }
 
        if (!priv->authenticated)
-               return DRM_ERR(EACCES);
+               return EACCES;
 
        if (dev->dma && offset >= 0 && offset < ptoa(dev->dma->page_count)) {
                drm_device_dma_t *dma = dev->dma;
diff --git a/bsd-core/i915_dma.c b/bsd-core/i915_dma.c
new file mode 120000 (symlink)
index 0000000..c61d967
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/i915_dma.c
\ No newline at end of file
diff --git a/bsd-core/i915_drm.h b/bsd-core/i915_drm.h
new file mode 120000 (symlink)
index 0000000..ed53f01
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/i915_drm.h
\ No newline at end of file
diff --git a/bsd-core/i915_drv.h b/bsd-core/i915_drv.h
new file mode 120000 (symlink)
index 0000000..085558c
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/i915_drv.h
\ No newline at end of file
diff --git a/bsd-core/i915_irq.c b/bsd-core/i915_irq.c
new file mode 120000 (symlink)
index 0000000..2058a2e
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/i915_irq.c
\ No newline at end of file
diff --git a/bsd-core/i915_mem.c b/bsd-core/i915_mem.c
new file mode 120000 (symlink)
index 0000000..e8e5655
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/i915_mem.c
\ No newline at end of file
diff --git a/bsd-core/mach64_dma.c b/bsd-core/mach64_dma.c
new file mode 120000 (symlink)
index 0000000..e5c2897
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mach64_dma.c
\ No newline at end of file
diff --git a/bsd-core/mach64_drm.h b/bsd-core/mach64_drm.h
new file mode 120000 (symlink)
index 0000000..136ea93
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mach64_drm.h
\ No newline at end of file
diff --git a/bsd-core/mach64_drv.h b/bsd-core/mach64_drv.h
new file mode 120000 (symlink)
index 0000000..85222cc
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mach64_drv.h
\ No newline at end of file
diff --git a/bsd-core/mach64_irq.c b/bsd-core/mach64_irq.c
new file mode 120000 (symlink)
index 0000000..a1235d5
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mach64_irq.c
\ No newline at end of file
diff --git a/bsd-core/mach64_state.c b/bsd-core/mach64_state.c
new file mode 120000 (symlink)
index 0000000..b11f202
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mach64_state.c
\ No newline at end of file
diff --git a/bsd-core/mga_dma.c b/bsd-core/mga_dma.c
new file mode 120000 (symlink)
index 0000000..f290be9
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mga_dma.c
\ No newline at end of file
diff --git a/bsd-core/mga_drm.h b/bsd-core/mga_drm.h
new file mode 120000 (symlink)
index 0000000..1c87036
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mga_drm.h
\ No newline at end of file
diff --git a/bsd-core/mga_drv.h b/bsd-core/mga_drv.h
new file mode 120000 (symlink)
index 0000000..cb0c9e1
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mga_drv.h
\ No newline at end of file
diff --git a/bsd-core/mga_irq.c b/bsd-core/mga_irq.c
new file mode 120000 (symlink)
index 0000000..cf521d2
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mga_irq.c
\ No newline at end of file
diff --git a/bsd-core/mga_state.c b/bsd-core/mga_state.c
new file mode 120000 (symlink)
index 0000000..8bda8ba
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mga_state.c
\ No newline at end of file
diff --git a/bsd-core/mga_ucode.h b/bsd-core/mga_ucode.h
new file mode 120000 (symlink)
index 0000000..728b9ac
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mga_ucode.h
\ No newline at end of file
diff --git a/bsd-core/mga_warp.c b/bsd-core/mga_warp.c
new file mode 120000 (symlink)
index 0000000..d35b325
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/mga_warp.c
\ No newline at end of file
diff --git a/bsd-core/r128_cce.c b/bsd-core/r128_cce.c
new file mode 120000 (symlink)
index 0000000..0c1d659
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/r128_cce.c
\ No newline at end of file
diff --git a/bsd-core/r128_drm.h b/bsd-core/r128_drm.h
new file mode 120000 (symlink)
index 0000000..363852c
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/r128_drm.h
\ No newline at end of file
diff --git a/bsd-core/r128_drv.h b/bsd-core/r128_drv.h
new file mode 120000 (symlink)
index 0000000..4f7e822
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/r128_drv.h
\ No newline at end of file
diff --git a/bsd-core/r128_irq.c b/bsd-core/r128_irq.c
new file mode 120000 (symlink)
index 0000000..66d28b0
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/r128_irq.c
\ No newline at end of file
diff --git a/bsd-core/r128_state.c b/bsd-core/r128_state.c
new file mode 120000 (symlink)
index 0000000..e83d84b
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/r128_state.c
\ No newline at end of file
diff --git a/bsd-core/r300_cmdbuf.c b/bsd-core/r300_cmdbuf.c
new file mode 120000 (symlink)
index 0000000..6674d05
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/r300_cmdbuf.c
\ No newline at end of file
diff --git a/bsd-core/r300_reg.h b/bsd-core/r300_reg.h
new file mode 120000 (symlink)
index 0000000..ef54eba
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/r300_reg.h
\ No newline at end of file
diff --git a/bsd-core/radeon_cp.c b/bsd-core/radeon_cp.c
new file mode 120000 (symlink)
index 0000000..ee86094
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/radeon_cp.c
\ No newline at end of file
diff --git a/bsd-core/radeon_drm.h b/bsd-core/radeon_drm.h
new file mode 120000 (symlink)
index 0000000..54f595a
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/radeon_drm.h
\ No newline at end of file
diff --git a/bsd-core/radeon_drv.h b/bsd-core/radeon_drv.h
new file mode 120000 (symlink)
index 0000000..5b415ea
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/radeon_drv.h
\ No newline at end of file
diff --git a/bsd-core/radeon_irq.c b/bsd-core/radeon_irq.c
new file mode 120000 (symlink)
index 0000000..2f394a5
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/radeon_irq.c
\ No newline at end of file
diff --git a/bsd-core/radeon_mem.c b/bsd-core/radeon_mem.c
new file mode 120000 (symlink)
index 0000000..8cc2798
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/radeon_mem.c
\ No newline at end of file
diff --git a/bsd-core/radeon_state.c b/bsd-core/radeon_state.c
new file mode 120000 (symlink)
index 0000000..ccee876
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/radeon_state.c
\ No newline at end of file
diff --git a/bsd-core/savage_bci.c b/bsd-core/savage_bci.c
new file mode 120000 (symlink)
index 0000000..b843671
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/savage_bci.c
\ No newline at end of file
diff --git a/bsd-core/savage_drm.h b/bsd-core/savage_drm.h
new file mode 120000 (symlink)
index 0000000..0dab2e3
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/savage_drm.h
\ No newline at end of file
diff --git a/bsd-core/savage_drv.h b/bsd-core/savage_drv.h
new file mode 120000 (symlink)
index 0000000..8397009
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/savage_drv.h
\ No newline at end of file
diff --git a/bsd-core/savage_state.c b/bsd-core/savage_state.c
new file mode 120000 (symlink)
index 0000000..e55dc5d
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/savage_state.c
\ No newline at end of file
diff --git a/bsd-core/sis_drm.h b/bsd-core/sis_drm.h
new file mode 120000 (symlink)
index 0000000..36c77aa
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/sis_drm.h
\ No newline at end of file
diff --git a/bsd-core/sis_drv.h b/bsd-core/sis_drv.h
new file mode 120000 (symlink)
index 0000000..3fddfda
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/sis_drv.h
\ No newline at end of file
diff --git a/bsd-core/sis_ds.c b/bsd-core/sis_ds.c
new file mode 120000 (symlink)
index 0000000..242310a
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/sis_ds.c
\ No newline at end of file
diff --git a/bsd-core/sis_ds.h b/bsd-core/sis_ds.h
new file mode 120000 (symlink)
index 0000000..8cbdaf3
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/sis_ds.h
\ No newline at end of file
diff --git a/bsd-core/sis_mm.c b/bsd-core/sis_mm.c
new file mode 120000 (symlink)
index 0000000..8f802ec
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/sis_mm.c
\ No newline at end of file
diff --git a/bsd-core/tdfx_drv.h b/bsd-core/tdfx_drv.h
new file mode 120000 (symlink)
index 0000000..8df7032
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/tdfx_drv.h
\ No newline at end of file
diff --git a/bsd-core/via_3d_reg.h b/bsd-core/via_3d_reg.h
new file mode 120000 (symlink)
index 0000000..90d238e
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_3d_reg.h
\ No newline at end of file
diff --git a/bsd-core/via_dma.c b/bsd-core/via_dma.c
new file mode 120000 (symlink)
index 0000000..1f4d920
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_dma.c
\ No newline at end of file
diff --git a/bsd-core/via_drm.h b/bsd-core/via_drm.h
new file mode 120000 (symlink)
index 0000000..7cd175d
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_drm.h
\ No newline at end of file
diff --git a/bsd-core/via_drv.h b/bsd-core/via_drv.h
new file mode 120000 (symlink)
index 0000000..8954fe8
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_drv.h
\ No newline at end of file
diff --git a/bsd-core/via_ds.c b/bsd-core/via_ds.c
new file mode 120000 (symlink)
index 0000000..b0fbb69
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_ds.c
\ No newline at end of file
diff --git a/bsd-core/via_ds.h b/bsd-core/via_ds.h
new file mode 120000 (symlink)
index 0000000..dc8f2f4
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_ds.h
\ No newline at end of file
diff --git a/bsd-core/via_irq.c b/bsd-core/via_irq.c
new file mode 120000 (symlink)
index 0000000..f615af8
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_irq.c
\ No newline at end of file
diff --git a/bsd-core/via_map.c b/bsd-core/via_map.c
new file mode 120000 (symlink)
index 0000000..b505663
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_map.c
\ No newline at end of file
diff --git a/bsd-core/via_mm.c b/bsd-core/via_mm.c
new file mode 120000 (symlink)
index 0000000..f9ec0f3
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_mm.c
\ No newline at end of file
diff --git a/bsd-core/via_mm.h b/bsd-core/via_mm.h
new file mode 120000 (symlink)
index 0000000..fe2234f
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_mm.h
\ No newline at end of file
diff --git a/bsd-core/via_verifier.c b/bsd-core/via_verifier.c
new file mode 120000 (symlink)
index 0000000..00b411b
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_verifier.c
\ No newline at end of file
diff --git a/bsd-core/via_verifier.h b/bsd-core/via_verifier.h
new file mode 120000 (symlink)
index 0000000..62d3e28
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_verifier.h
\ No newline at end of file
diff --git a/bsd-core/via_video.c b/bsd-core/via_video.c
new file mode 120000 (symlink)
index 0000000..a6d2794
--- /dev/null
@@ -0,0 +1 @@
+../shared-core/via_video.c
\ No newline at end of file
index 94c47bd..7820334 100644 (file)
@@ -35,4 +35,9 @@ AC_SYS_LARGEFILE
 pkgconfigdir=${libdir}/pkgconfig
 AC_SUBST(pkgconfigdir)
 
-AC_OUTPUT([Makefile libdrm/Makefile shared-core/Makefile libdrm.pc])
+AC_OUTPUT([
+       Makefile
+       libdrm/Makefile
+       shared-core/Makefile
+       tests/Makefile
+       libdrm.pc])
index 9318551..8cee4fb 100644 (file)
@@ -49,7 +49,6 @@
 #include <sys/mman.h>
 #include <sys/time.h>
 #include <stdarg.h>
-#include "drm.h"
 
 /* Not all systems have MAP_FAILED defined */
 #ifndef MAP_FAILED
@@ -2355,8 +2354,7 @@ int drmFenceCreate(int fd, unsigned flags, int class, unsigned type,
     arg.flags = flags;
     arg.type = type;
     arg.class = class;
-    arg.op = drm_fence_create;
-    if (ioctl(fd, DRM_IOCTL_FENCE, &arg))
+    if (ioctl(fd, DRM_IOCTL_FENCE_CREATE, &arg))
        return -errno;
     fence->handle = arg.handle;
     fence->class = arg.class;
@@ -2378,8 +2376,8 @@ int drmFenceBuffers(int fd, unsigned flags, drmFence *fence)
 
     memset(&arg, 0, sizeof(arg));
     arg.flags = flags;
-    arg.op = drm_fence_buffers;
-    if (ioctl(fd, DRM_IOCTL_FENCE, &arg))
+
+    if (ioctl(fd, DRM_IOCTL_FENCE_BUFFERS, &arg))
        return -errno;
     fence->handle = arg.handle;
     fence->class = arg.class;
@@ -2395,8 +2393,8 @@ int drmFenceDestroy(int fd, const drmFence *fence)
 
     memset(&arg, 0, sizeof(arg));
     arg.handle = fence->handle;
-    arg.op = drm_fence_destroy;
-    if (ioctl(fd, DRM_IOCTL_FENCE, &arg))
+
+    if (ioctl(fd, DRM_IOCTL_FENCE_DESTROY, &arg))
        return -errno;
     return 0;
 }
@@ -2407,8 +2405,8 @@ int drmFenceReference(int fd, unsigned handle, drmFence *fence)
 
     memset(&arg, 0, sizeof(arg));
     arg.handle = handle;
-    arg.op = drm_fence_reference;
-    if (ioctl(fd, DRM_IOCTL_FENCE, &arg))
+
+    if (ioctl(fd, DRM_IOCTL_FENCE_REFERENCE, &arg))
        return -errno;
     fence->handle = arg.handle;
     fence->class = arg.class;
@@ -2424,8 +2422,8 @@ int drmFenceUnreference(int fd, const drmFence *fence)
 
     memset(&arg, 0, sizeof(arg));
     arg.handle = fence->handle;
-    arg.op = drm_fence_unreference;
-    if (ioctl(fd, DRM_IOCTL_FENCE, &arg))
+
+    if (ioctl(fd, DRM_IOCTL_FENCE_UNREFERENCE, &arg))
        return -errno;
     return 0;
 }
@@ -2437,8 +2435,8 @@ int drmFenceFlush(int fd, drmFence *fence, unsigned flush_type)
     memset(&arg, 0, sizeof(arg));
     arg.handle = fence->handle;
     arg.type = flush_type;
-    arg.op = drm_fence_flush;
-    if (ioctl(fd, DRM_IOCTL_FENCE, &arg))
+
+    if (ioctl(fd, DRM_IOCTL_FENCE_FLUSH, &arg))
        return -errno;
     fence->class = arg.class;
     fence->type = arg.type;
@@ -2452,8 +2450,8 @@ int drmFenceUpdate(int fd, drmFence *fence)
 
     memset(&arg, 0, sizeof(arg));
     arg.handle = fence->handle;
-    arg.op = drm_fence_signaled;
-    if (ioctl(fd, DRM_IOCTL_FENCE, &arg))
+
+    if (ioctl(fd, DRM_IOCTL_FENCE_SIGNALED, &arg))
        return -errno;
     fence->class = arg.class;
     fence->type = arg.type;
@@ -2492,8 +2490,8 @@ int drmFenceEmit(int fd, unsigned flags, drmFence *fence, unsigned emit_type)
     arg.flags = flags;
     arg.handle = fence->handle;
     arg.type = emit_type;
-    arg.op = drm_fence_emit;
-    if (ioctl(fd, DRM_IOCTL_FENCE, &arg))
+
+    if (ioctl(fd, DRM_IOCTL_FENCE_EMIT, &arg))
        return -errno;
     fence->class = arg.class;
     fence->type = arg.type;
@@ -2526,9 +2524,9 @@ int drmFenceWait(int fd, unsigned flags, drmFence *fence, unsigned flush_type)
     arg.handle = fence->handle;
     arg.type = flush_type;
     arg.flags = flags;
-    arg.op = drm_fence_wait;
+
     do {
-       ret = ioctl(fd, DRM_IOCTL_FENCE, &arg);
+       ret = ioctl(fd, DRM_IOCTL_FENCE_WAIT, &arg);
     } while (ret != 0 && errno == EAGAIN);
 
     if (ret)
@@ -2678,7 +2676,7 @@ int drmBOCreateList(int numTarget, drmBOList *list)
     return drmAdjustListNodes(list);
 }
 
-static void drmBOCopyReply(const drm_bo_arg_reply_t *rep, drmBO *buf)
+static void drmBOCopyReply(const struct drm_bo_info_rep *rep, drmBO *buf)
 {
     buf->handle = rep->handle;
     buf->flags = rep->flags;
@@ -2690,16 +2688,21 @@ static void drmBOCopyReply(const drm_bo_arg_reply_t *rep, drmBO *buf)
     buf->fenceFlags = rep->fence_flags;
     buf->replyFlags = rep->rep_flags;
     buf->pageAlignment = rep->page_alignment;
+    buf->tileInfo = rep->tile_info;
+    buf->hwTileStride = rep->hw_tile_stride;
+    buf->desiredTileStride = rep->desired_tile_stride;
 }
 
-int drmBOCreate(int fd, unsigned long start, unsigned long size, 
-               unsigned pageAlignment, void *user_buffer, drm_bo_type_t type, 
-               unsigned mask,
+
+
+int drmBOCreate(int fd, unsigned long start, unsigned long size,
+               unsigned pageAlignment, void *user_buffer, drm_bo_type_t type,
+               uint64_t mask,
                unsigned hint, drmBO *buf)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_create_arg arg;
+    struct drm_bo_create_req *req = &arg.d.req;
+    struct drm_bo_info_rep *rep = &arg.d.rep;
     int ret;
 
     memset(buf, 0, sizeof(*buf));
@@ -2726,21 +2729,13 @@ int drmBOCreate(int fd, unsigned long start, unsigned long size,
     default:
        return -EINVAL;
     }
-    req->op = drm_bo_create;
 
     do {
-       ret = ioctl(fd, DRM_IOCTL_BUFOBJ, &arg);
+       ret = ioctl(fd, DRM_IOCTL_BO_CREATE, &arg);
     } while (ret != 0 && errno == EAGAIN);
 
     if (ret)
        return -errno;
-    if (!arg.handled) {
-       return -EFAULT;
-    }
-    if (rep->ret) {
-        fprintf(stderr, "Error %d\n", rep->ret);
-       return rep->ret;
-    }
     
     drmBOCopyReply(rep, buf);
     buf->mapVirtual = NULL;
@@ -2751,9 +2746,7 @@ int drmBOCreate(int fd, unsigned long start, unsigned long size,
 
 int drmBODestroy(int fd, drmBO *buf)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_handle_arg arg;
     
     if (buf->mapVirtual && (buf->type != drm_bo_type_fake)) {
        (void) drmUnmap(buf->mapVirtual, buf->start + buf->size);
@@ -2762,40 +2755,26 @@ int drmBODestroy(int fd, drmBO *buf)
     }
 
     memset(&arg, 0, sizeof(arg));
-    req->handle = buf->handle;
-    req->op = drm_bo_destroy;
+    arg.handle = buf->handle;
 
-    if (ioctl(fd, DRM_IOCTL_BUFOBJ, &arg))
+    if (ioctl(fd, DRM_IOCTL_BO_DESTROY, &arg))
        return -errno;
-    if (!arg.handled) {
-       return -EFAULT;
-    }
-    if (rep->ret) {
-       return rep->ret;
-    }
 
     buf->handle = 0;
     return 0;
 }
+
 int drmBOReference(int fd, unsigned handle, drmBO *buf)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_reference_info_arg arg;
+    struct drm_bo_handle_arg *req = &arg.d.req;
+    struct drm_bo_info_rep *rep = &arg.d.rep;
     
     memset(&arg, 0, sizeof(arg));
     req->handle = handle;
-    req->op = drm_bo_reference;
     
-    if (ioctl(fd, DRM_IOCTL_BUFOBJ, &arg))
+    if (ioctl(fd, DRM_IOCTL_BO_REFERENCE, &arg))
        return -errno;
-    if (!arg.handled) {
-       return -EFAULT;
-    }
-    if (rep->ret) {
-       return rep->ret;
-    }
 
     drmBOCopyReply(rep, buf);
     buf->type = drm_bo_type_dc;
@@ -2808,9 +2787,7 @@ int drmBOReference(int fd, unsigned handle, drmBO *buf)
 
 int drmBOUnReference(int fd, drmBO *buf)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_handle_arg arg;
 
     if (buf->mapVirtual && (buf->type != drm_bo_type_fake)) {
        (void) munmap(buf->mapVirtual, buf->start + buf->size);
@@ -2819,22 +2796,16 @@ int drmBOUnReference(int fd, drmBO *buf)
     }
 
     memset(&arg, 0, sizeof(arg));
-    req->handle = buf->handle;
-    req->op = drm_bo_unreference;
+    arg.handle = buf->handle;
 
-    if (ioctl(fd, DRM_IOCTL_BUFOBJ, &arg))
+    if (ioctl(fd, DRM_IOCTL_BO_UNREFERENCE, &arg))
        return -errno;
-    if (!arg.handled) {
-       return -EFAULT;
-    }
-    if (rep->ret) {
-       return rep->ret;
-    }
 
     buf->handle = 0;
     return 0;
 }   
 
+
 /*
  * Flags can be  DRM_BO_FLAG_READ, DRM_BO_FLAG_WRITE or'ed together
  * Hint currently be DRM_BO_HINT_DONT_BLOCK, which makes the
@@ -2844,9 +2815,9 @@ int drmBOUnReference(int fd, drmBO *buf)
 int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
             void **address)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_map_wait_idle_arg arg;
+    struct drm_bo_info_req *req = &arg.d.req;
+    struct drm_bo_info_rep *rep = &arg.d.rep;
     int ret = 0;
 
     /*
@@ -2871,7 +2842,6 @@ int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
     req->handle = buf->handle;
     req->mask = mapFlags;
     req->hint = mapHint;
-    req->op = drm_bo_map;
 
     /*
      * May hang if the buffer object is busy.
@@ -2879,15 +2849,11 @@ int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
      */
     
     do {
-       ret = ioctl(fd, DRM_IOCTL_BUFOBJ, &arg);
+       ret = ioctl(fd, DRM_IOCTL_BO_MAP, &arg);
     } while (ret != 0 && errno == EAGAIN);
 
     if (ret) 
        return -errno;
-    if (!arg.handled) 
-       return -EFAULT;
-    if (rep->ret)
-       return rep->ret;
 
     drmBOCopyReply(rep, buf);  
     buf->mapFlags = mapFlags;
@@ -2897,44 +2863,39 @@ int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
     return 0;
 }
 
+
 int drmBOUnmap(int fd, drmBO *buf)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_handle_arg arg;
 
     memset(&arg, 0, sizeof(arg));
-    req->handle = buf->handle;
-    req->op = drm_bo_unmap;
+    arg.handle = buf->handle;
 
-    if (ioctl(fd, DRM_IOCTL_BUFOBJ, &arg)) {
+    if (ioctl(fd, DRM_IOCTL_BO_UNMAP, &arg)) {
        return -errno;
     }
-    if (!arg.handled) 
-        return -EFAULT;
-    if (rep->ret)
-       return rep->ret;
-
     return 0;
 }
-    
-int drmBOValidate(int fd, drmBO *buf, unsigned flags, unsigned mask, 
+
+int drmBOValidate(int fd, drmBO *buf,
+                 uint64_t flags, uint64_t mask,
                  unsigned hint)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_op_arg arg;
+    struct drm_bo_op_req *req = &arg.d.req;
+    struct drm_bo_arg_rep *rep = &arg.d.rep;
     int ret = 0;
 
     memset(&arg, 0, sizeof(arg));
-    req->handle = buf->handle;
-    req->mask = flags;
-    req->hint = hint;
-    req->arg_handle = mask; /* Encode mask in the arg_handle field :/ */
+    req->bo_req.handle = buf->handle;
+    req->bo_req.flags = flags;
+    req->bo_req.mask = mask;
+    req->bo_req.hint = hint;
+    req->bo_req.fence_class = 0; /* Backwards compatibility. */
     req->op = drm_bo_validate;
 
     do{
-       ret = ioctl(fd, DRM_IOCTL_BUFOBJ, &arg);
+       ret = ioctl(fd, DRM_IOCTL_BO_OP, &arg);
     } while (ret && errno == EAGAIN);
 
     if (ret) 
@@ -2944,26 +2905,25 @@ int drmBOValidate(int fd, drmBO *buf, unsigned flags, unsigned mask,
     if (rep->ret)
        return rep->ret;
 
-    drmBOCopyReply(rep, buf);
+    drmBOCopyReply(&rep->bo_info, buf);
     return 0;
 }
            
 
 int drmBOFence(int fd, drmBO *buf, unsigned flags, unsigned fenceHandle)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_op_arg arg;
+    struct drm_bo_op_req *req = &arg.d.req;
+    struct drm_bo_arg_rep *rep = &arg.d.rep;
     int ret = 0;
 
     memset(&arg, 0, sizeof(arg));
-    req->handle = buf->handle;
-    req->mask = flags;
+    req->bo_req.handle = buf->handle;
+    req->bo_req.flags = flags;
     req->arg_handle = fenceHandle;
     req->op = drm_bo_fence;
 
-    ret = ioctl(fd, DRM_IOCTL_BUFOBJ, &arg);
-
+    ret = ioctl(fd, DRM_IOCTL_BO_OP, &arg);
     if (ret) 
        return -errno;
     if (!arg.handled)
@@ -2975,51 +2935,42 @@ int drmBOFence(int fd, drmBO *buf, unsigned flags, unsigned fenceHandle)
 
 int drmBOInfo(int fd, drmBO *buf)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_reference_info_arg arg;
+    struct drm_bo_handle_arg *req = &arg.d.req;
+    struct drm_bo_info_rep *rep = &arg.d.rep;
     int ret = 0;
 
     memset(&arg, 0, sizeof(arg));
     req->handle = buf->handle;
-    req->op = drm_bo_info;
-
-    ret = ioctl(fd, DRM_IOCTL_BUFOBJ, &arg);
 
+    ret = ioctl(fd, DRM_IOCTL_BO_INFO, &arg);
     if (ret) 
        return -errno;
-    if (!arg.handled)
-       return -EFAULT;
-    if (rep->ret)
-       return rep->ret;
+
     drmBOCopyReply(rep, buf);
     return 0;
 }
 
 int drmBOWaitIdle(int fd, drmBO *buf, unsigned hint)
 {
-    drm_bo_arg_t arg;
-    drm_bo_arg_request_t *req = &arg.d.req;
-    drm_bo_arg_reply_t *rep = &arg.d.rep;
+    struct drm_bo_map_wait_idle_arg arg;
+    struct drm_bo_info_req *req = &arg.d.req;
+    struct drm_bo_info_rep *rep = &arg.d.rep;
     int ret = 0;
 
     if ((buf->flags & DRM_BO_FLAG_SHAREABLE) ||
        (buf->replyFlags & DRM_BO_REP_BUSY)) {
         memset(&arg, 0, sizeof(arg));
        req->handle = buf->handle;
-       req->op = drm_bo_wait_idle;
        req->hint = hint;
 
        do {
-           ret = ioctl(fd, DRM_IOCTL_BUFOBJ, &arg);
+           ret = ioctl(fd, DRM_IOCTL_BO_WAIT_IDLE, &arg);
        } while (ret && errno == EAGAIN);
 
        if (ret) 
            return -errno;
-       if (!arg.handled)
-           return -EFAULT;
-       if (rep->ret)
-           return rep->ret;
+
        drmBOCopyReply(rep, buf);
     }
     return 0;
@@ -3041,7 +2992,6 @@ int drmBOBusy(int fd, drmBO *buf, int *busy)
     }
 }
     
-    
 int drmAddValidateItem(drmBOList *list, drmBO *buf, unsigned flags, 
                       unsigned mask,
                       int *newItem)
@@ -3103,74 +3053,74 @@ int drmBOValidateList(int fd, drmBOList *list)
 {
     drmBONode *node;
     drmMMListHead *l;
-    drm_bo_arg_t *arg, *first;
-    drm_bo_arg_request_t *req;
-    drm_bo_arg_reply_t *rep;
-    drm_u64_t *prevNext = NULL;
+    struct drm_bo_op_arg *arg, *first;
+    struct drm_bo_op_req *req;
+    struct drm_bo_arg_rep *rep;
+    uint64_t *prevNext = NULL;
     drmBO *buf;
     int ret;
 
     first = NULL;
 
     for (l = list->list.next; l != &list->list; l = l->next) {
-       node = DRMLISTENTRY(drmBONode, l, head);
+        node = DRMLISTENTRY(drmBONode, l, head);
 
-       arg = &node->bo_arg;
-       req = &arg->d.req;
+        arg = &node->bo_arg;
+        req = &arg->d.req;
 
-       if (!first)
-           first = arg;
+        if (!first)
+            first = arg;
 
        if (prevNext)
            *prevNext = (unsigned long) arg;
 
        memset(arg, 0, sizeof(*arg));
        prevNext = &arg->next;
-       req->handle = node->buf->handle;
+       req->bo_req.handle = node->buf->handle;
        req->op = drm_bo_validate;
-       req->mask = node->arg0;
-       req->hint = 0;
-       req->arg_handle = node->arg1;
+       req->bo_req.flags = node->arg0;
+       req->bo_req.hint = 0;
+       req->bo_req.mask = node->arg1;
+       req->bo_req.fence_class = 0; /* Backwards compat. */
     }
-  
-    if (!first) 
+
+    if (!first)
        return 0;
 
-    do {
-       ret = ioctl(fd, DRM_IOCTL_BUFOBJ, first);
+    do{
+       ret = ioctl(fd, DRM_IOCTL_BO_OP, first);
     } while (ret && errno == EAGAIN);
 
     if (ret)
        return -errno;
-  
+
     for (l = list->list.next; l != &list->list; l = l->next) {
        node = DRMLISTENTRY(drmBONode, l, head);
        arg = &node->bo_arg;
        rep = &arg->d.rep;
-
+      
        if (!arg->handled) {
            drmMsg("Unhandled request\n");
            return -EFAULT;
        }
        if (rep->ret)
            return rep->ret;
-
+       
        buf = node->buf;
-       drmBOCopyReply(rep, buf);
+       drmBOCopyReply(&rep->bo_info, buf);
     }
-
+    
     return 0;
 }
          
-
 int drmBOFenceList(int fd, drmBOList *list, unsigned fenceHandle)
 {
     drmBONode *node;
     drmMMListHead *l;
-    drm_bo_arg_t *arg, *first;
-    drm_bo_arg_request_t *req;
-    drm_bo_arg_reply_t *rep;
-    drm_u64_t *prevNext = NULL;
+    struct drm_bo_op_arg *arg, *first;
+    struct drm_bo_op_req *req;
+    struct drm_bo_arg_rep *rep;
+    uint64_t *prevNext = NULL;
     drmBO *buf;
     unsigned fence_flags;
     int ret;
@@ -3178,8 +3128,8 @@ int drmBOFenceList(int fd, drmBOList *list, unsigned fenceHandle)
     first = NULL;
 
     for (l = list->list.next; l != &list->list; l = l->next) {
-       node = DRMLISTENTRY(drmBONode, l, head);
-
+        node = DRMLISTENTRY(drmBONode, l, head);
+       
        arg = &node->bo_arg;
        req = &arg->d.req;
 
@@ -3191,29 +3141,31 @@ int drmBOFenceList(int fd, drmBOList *list, unsigned fenceHandle)
 
        memset(arg, 0, sizeof(*arg));
        prevNext = &arg->next;
-       req->handle = node->buf->handle;
+       req->bo_req.handle = node->buf->handle;
        req->op = drm_bo_fence;
-       req->mask = node->arg0;
+       req->bo_req.mask = node->arg0;
        req->arg_handle = fenceHandle;
     }
   
     if (!first) 
        return 0;
 
-    ret = ioctl(fd, DRM_IOCTL_BUFOBJ, first);
+    ret = ioctl(fd, DRM_IOCTL_BO_OP, first);
 
     if (ret)
        return -errno;
   
     for (l = list->list.next; l != &list->list; l = l->next) {
        node = DRMLISTENTRY(drmBONode, l, head);
+
        arg = &node->bo_arg;
        rep = &arg->d.rep;
+
        if (!arg->handled)
            return -EFAULT;
        if (rep->ret)
            return rep->ret;
-       drmBOCopyReply(rep, node->buf);
+       drmBOCopyReply(&rep->bo_info, node->buf);
     }
 
     return 0;
@@ -3222,13 +3174,16 @@ int drmBOFenceList(int fd, drmBOList *list, unsigned fenceHandle)
 int drmMMInit(int fd, unsigned long pOffset, unsigned long pSize,
              unsigned memType)
 {
-    drm_mm_init_arg_t arg;
+    struct drm_mm_init_arg arg;
 
     memset(&arg, 0, sizeof(arg));
-    arg.req.op = mm_init;
-    arg.req.p_offset = pOffset;
-    arg.req.p_size = pSize;
-    arg.req.mem_type = memType;
+
+    arg.magic = DRM_BO_INIT_MAGIC;
+    arg.major = DRM_BO_INIT_MAJOR;
+    arg.minor = DRM_BO_INIT_MINOR;
+    arg.p_offset = pOffset;
+    arg.p_size = pSize;
+    arg.mem_type = memType;
 
     if (ioctl(fd, DRM_IOCTL_MM_INIT, &arg))
        return -errno;
@@ -3237,28 +3192,26 @@ int drmMMInit(int fd, unsigned long pOffset, unsigned long pSize,
 
 int drmMMTakedown(int fd, unsigned memType)
 {
-    drm_mm_init_arg_t arg;
+    struct drm_mm_type_arg arg;
 
     memset(&arg, 0, sizeof(arg));
-    arg.req.op = mm_takedown;
-    arg.req.mem_type = memType;
+    arg.mem_type = memType;
 
-    if (ioctl(fd, DRM_IOCTL_MM_INIT, &arg))
+    if (ioctl(fd, DRM_IOCTL_MM_TAKEDOWN, &arg))
        return -errno;
     return 0;  
 }
 
 int drmMMLock(int fd, unsigned memType)
 {
-    drm_mm_init_arg_t arg;
+    struct drm_mm_type_arg arg;
     int ret;
 
     memset(&arg, 0, sizeof(arg));
-    arg.req.op = mm_lock;
-    arg.req.mem_type = memType;
+    arg.mem_type = memType;
 
     do{
-       ret = ioctl(fd, DRM_IOCTL_MM_INIT, &arg);
+        ret = ioctl(fd, DRM_IOCTL_MM_LOCK, &arg);
     } while (ret && errno == EAGAIN);
 
     return (ret) ? -errno : 0;
@@ -3266,15 +3219,15 @@ int drmMMLock(int fd, unsigned memType)
 
 int drmMMUnlock(int fd, unsigned memType)
 {
-    drm_mm_init_arg_t arg;
+    struct drm_mm_type_arg arg;
     int ret;
 
     memset(&arg, 0, sizeof(arg));
-    arg.req.op = mm_unlock;
-    arg.req.mem_type = memType;
+    
+    arg.mem_type = memType;
 
     do{
-       ret = ioctl(fd, DRM_IOCTL_MM_INIT, &arg);
+       ret = ioctl(fd, DRM_IOCTL_MM_UNLOCK, &arg);
     } while (ret && errno == EAGAIN);
 
     return (ret) ? -errno : 0;
index d4260cc..230f54c 100644 (file)
@@ -36,6 +36,7 @@
 
 #include <stdarg.h>
 #include <sys/types.h>
+#include <stdint.h>
 #include <drm.h>
 
                                /* Defaults, if nothing set in xf86config */
index d1ade06..82cbc2a 100644 (file)
@@ -74,7 +74,6 @@
 #define HASH_MAIN 0
 
 #if !HASH_MAIN
-# include "drm.h"
 # include "xf86drm.h"
 #endif
 
index 61ffb07..ecab9e2 100644 (file)
@@ -77,7 +77,6 @@
 #define RANDOM_MAIN 0
 
 #if !RANDOM_MAIN
-# include "drm.h"
 # include "xf86drm.h"
 #endif
 
index ce60648..58aefac 100644 (file)
@@ -44,7 +44,6 @@
 #define SL_MAIN 0
 
 #if !SL_MAIN
-# include "drm.h"
 # include "xf86drm.h"
 #else
 # include <sys/time.h>
index b3822d4..d1e0b28 100644 (file)
@@ -107,9 +107,9 @@ typedef struct _drmBO
 {
     drm_bo_type_t type;
     unsigned handle;
-    drm_u64_t mapHandle;
-    unsigned flags;
-    unsigned mask;
+    uint64_t mapHandle;
+    uint64_t flags;
+    uint64_t mask;
     unsigned mapFlags;
     unsigned long size;
     unsigned long offset;
@@ -117,6 +117,9 @@ typedef struct _drmBO
     unsigned replyFlags;
     unsigned fenceFlags;
     unsigned pageAlignment;
+    unsigned tileInfo;
+    unsigned hwTileStride;
+    unsigned desiredTileStride;
     void *virtual;
     void *mapVirtual;
     int mapCount;
@@ -127,7 +130,7 @@ typedef struct _drmBONode
 {
     drmMMListHead head;
     drmBO *buf;
-    drm_bo_arg_t bo_arg;
+    struct drm_bo_op_arg bo_arg;
     unsigned long arg0;
     unsigned long arg1;
 } drmBONode;
@@ -176,8 +179,8 @@ extern int drmBOCreateList(int numTarget, drmBOList *list);
  */
 
 extern int drmBOCreate(int fd, unsigned long start, unsigned long size,
-                      unsigned pageAlignment,void *user_buffer, 
-                      drm_bo_type_t type, unsigned mask,
+                      unsigned pageAlignment,void *user_buffer,
+                      drm_bo_type_t type, uint64_t mask,
                       unsigned hint, drmBO *buf);
 extern int drmBODestroy(int fd, drmBO *buf);
 extern int drmBOReference(int fd, unsigned handle, drmBO *buf);
@@ -185,14 +188,14 @@ extern int drmBOUnReference(int fd, drmBO *buf);
 extern int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
                    void **address);
 extern int drmBOUnmap(int fd, drmBO *buf);
-extern int drmBOValidate(int fd, drmBO *buf, unsigned flags, unsigned mask, 
-                        unsigned hint);
+extern int drmBOValidate(int fd, drmBO *buf, uint64_t flags,
+                        uint64_t mask, unsigned hint);
+
 extern int drmBOFence(int fd, drmBO *buf, unsigned flags, unsigned fenceHandle);
 extern int drmBOInfo(int fd, drmBO *buf);
 extern int drmBOBusy(int fd, drmBO *buf, int *busy);
 
-
-extern int drmAddValidateItem(drmBOList *list, drmBO *buf, unsigned flags, 
+extern int drmAddValidateItem(drmBOList *list, drmBO *buf, unsigned flags,
                       unsigned mask,
                       int *newItem);
 extern int drmBOValidateList(int fd, drmBOList *list);
index 321eb80..c898206 100644 (file)
@@ -22,6 +22,7 @@ i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o i915_fence.o \
                i915_buffer.o
 nouveau-objs := nouveau_drv.o nouveau_state.o nouveau_fifo.o nouveau_mem.o \
                nouveau_object.o nouveau_irq.o nouveau_notifier.o \
+               nouveau_sgdma.o \
                nv04_timer.o \
                nv04_mc.o nv40_mc.o nv50_mc.o \
                nv04_fb.o nv10_fb.o nv40_fb.o \
index 524618a..7241c2a 100644 (file)
@@ -81,9 +81,9 @@ static void drm_ati_free_pcigart_table(void *address, int order)
        free_pages((unsigned long)address, order);
 }
 
-int drm_ati_pcigart_cleanup(drm_device_t *dev, drm_ati_pcigart_info *gart_info)
+int drm_ati_pcigart_cleanup(struct drm_device *dev, struct ati_pcigart_info *gart_info)
 {
-       drm_sg_mem_t *entry = dev->sg;
+       struct drm_sg_mem *entry = dev->sg;
        unsigned long pages;
        int i;
        int order;
@@ -132,9 +132,9 @@ int drm_ati_pcigart_cleanup(drm_device_t *dev, drm_ati_pcigart_info *gart_info)
 }
 EXPORT_SYMBOL(drm_ati_pcigart_cleanup);
 
-int drm_ati_pcigart_init(drm_device_t *dev, drm_ati_pcigart_info *gart_info)
+int drm_ati_pcigart_init(struct drm_device *dev, struct ati_pcigart_info *gart_info)
 {
-       drm_sg_mem_t *entry = dev->sg;
+       struct drm_sg_mem *entry = dev->sg;
        void *address = NULL;
        unsigned long pages;
        u32 *pci_gart, page_base, bus_address = 0;
index ebb530b..2b7e0a4 100644 (file)
@@ -84,6 +84,8 @@
 #include "drm_os_linux.h"
 #include "drm_hashtab.h"
 
+struct drm_file;
+
 /* If you want the memory alloc debug functionality, change define below */
 /* #define DEBUG_MEMORY */
 
  * Test that the hardware lock is held by the caller, returning otherwise.
  *
  * \param dev DRM device.
- * \param filp file pointer of the caller.
+ * \param file_priv DRM file private pointer of the caller.
  */
-#define LOCK_TEST_WITH_RETURN( dev, filp )                             \
+#define LOCK_TEST_WITH_RETURN( dev, file_priv )                                \
 do {                                                                   \
        if ( !_DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ) ||           \
-            dev->lock.filp != filp )   {                               \
+            dev->lock.file_priv != file_priv ) {                       \
                DRM_ERROR( "%s called without lock held, held  %d owner %p %p\n",\
                           __FUNCTION__, _DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ),\
-                          dev->lock.filp, filp );                      \
+                          dev->lock.file_priv, file_priv );            \
                return -EINVAL;                                         \
        }                                                               \
 } while (0)
@@ -273,16 +275,19 @@ do {                                                                      \
                        return -EFAULT;                                 \
        }
 
+struct drm_device;
+struct drm_file;
+
 /**
  * Ioctl function type.
  *
- * \param inode device inode.
- * \param filp file pointer.
- * \param cmd command.
- * \param arg argument.
+ * \param dev DRM device structure
+ * \param data pointer to kernel-space stored data, copied in and out according
+ *            to ioctl description.
+ * \param file_priv DRM file private pointer.
  */
-typedef int drm_ioctl_t(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
+typedef int drm_ioctl_t(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
 
 typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
                               unsigned long arg);
@@ -291,31 +296,34 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
 #define DRM_MASTER      0x2
 #define DRM_ROOT_ONLY   0x4
 
-typedef struct drm_ioctl_desc {
+struct drm_ioctl_desc {
+       unsigned int cmd;
        drm_ioctl_t *func;
        int flags;
-} drm_ioctl_desc_t;
-
-typedef struct drm_devstate {
-       pid_t owner;                    /**< X server pid holding x_lock */
-} drm_devstate_t;
+};
+/**
+ * Creates a driver or general drm_ioctl_desc array entry for the given
+ * ioctl, for use by drm_ioctl().
+ */
+#define DRM_IOCTL_DEF(ioctl, func, flags) \
+       [DRM_IOCTL_NR(ioctl)] = {ioctl, func, flags}
 
-typedef struct drm_magic_entry {
+struct drm_magic_entry {
        struct list_head head;
-       drm_hash_item_t hash_item;
+       struct drm_hash_item hash_item;
        struct drm_file *priv;
-} drm_magic_entry_t;
+};
 
-typedef struct drm_vma_entry {
+struct drm_vma_entry {
        struct list_head head;
        struct vm_area_struct *vma;
        pid_t pid;
-} drm_vma_entry_t;
+};
 
 /**
  * DMA buffer.
  */
-typedef struct drm_buf {
+struct drm_buf {
        int idx;                       /**< Index into master buflist */
        int total;                     /**< Buffer size */
        int order;                     /**< log-base-2(total) */
@@ -327,7 +335,7 @@ typedef struct drm_buf {
        __volatile__ int waiting;      /**< On kernel DMA queue */
        __volatile__ int pending;      /**< On hardware DMA queue */
        wait_queue_head_t dma_wait;    /**< Processes waiting */
-       struct file *filp;             /**< Pointer to holding file descr */
+       struct drm_file *file_priv;    /**< Private of holding file descr */
        int context;                   /**< Kernel queue for this buffer */
        int while_locked;              /**< Dispatch this buffer while locked */
        enum {
@@ -341,30 +349,30 @@ typedef struct drm_buf {
 
        int dev_priv_size;              /**< Size of buffer private storage */
        void *dev_private;              /**< Per-buffer private storage */
-} drm_buf_t;
+};
 
 /** bufs is one longer than it has to be */
-typedef struct drm_waitlist {
+struct drm_waitlist {
        int count;                      /**< Number of possible buffers */
-       drm_buf_t **bufs;               /**< List of pointers to buffers */
-       drm_buf_t **rp;                 /**< Read pointer */
-       drm_buf_t **wp;                 /**< Write pointer */
-       drm_buf_t **end;                /**< End pointer */
+       struct drm_buf **bufs;          /**< List of pointers to buffers */
+       struct drm_buf **rp;                    /**< Read pointer */
+       struct drm_buf **wp;                    /**< Write pointer */
+       struct drm_buf **end;           /**< End pointer */
        spinlock_t read_lock;
        spinlock_t write_lock;
-} drm_waitlist_t;
+};
 
-typedef struct drm_freelist {
+struct drm_freelist {
        int initialized;               /**< Freelist in use */
        atomic_t count;                /**< Number of free buffers */
-       drm_buf_t *next;               /**< End pointer */
+       struct drm_buf *next;          /**< End pointer */
 
        wait_queue_head_t waiting;     /**< Processes waiting on free bufs */
        int low_mark;                  /**< Low water mark */
        int high_mark;                 /**< High water mark */
        atomic_t wfh;                  /**< If waiting for high mark */
        spinlock_t lock;
-} drm_freelist_t;
+};
 
 typedef struct drm_dma_handle {
        dma_addr_t busaddr;
@@ -375,15 +383,15 @@ typedef struct drm_dma_handle {
 /**
  * Buffer entry.  There is one of this for each buffer size order.
  */
-typedef struct drm_buf_entry {
+struct drm_buf_entry {
        int buf_size;                   /**< size */
        int buf_count;                  /**< number of buffers */
-       drm_buf_t *buflist;             /**< buffer list */
+       struct drm_buf *buflist;                /**< buffer list */
        int seg_count;
        int page_order;
-       drm_dma_handle_t **seglist;
-       drm_freelist_t freelist;
-} drm_buf_entry_t;
+       struct drm_dma_handle **seglist;
+       struct drm_freelist freelist;
+};
 
 /*
  * This should be small enough to allow the use of kmalloc for hash tables
@@ -391,15 +399,15 @@ typedef struct drm_buf_entry {
  */
 
 #define DRM_FILE_HASH_ORDER 8
-typedef enum{
+enum drm_ref_type {
        _DRM_REF_USE=0,
        _DRM_REF_TYPE1,
        _DRM_NO_REF_TYPES
-} drm_ref_t;
+};
 
 
 /** File private data */
-typedef struct drm_file {
+struct drm_file {
        int authenticated;
        int master;
        int minor;
@@ -422,12 +430,13 @@ typedef struct drm_file {
        struct list_head refd_objects;
        struct list_head user_objects;
 
-       drm_open_hash_t refd_object_hash[_DRM_NO_REF_TYPES];
+       struct drm_open_hash refd_object_hash[_DRM_NO_REF_TYPES];
+       struct file *filp;
        void *driver_priv;
-} drm_file_t;
+};
 
 /** Wait queue */
-typedef struct drm_queue {
+struct drm_queue {
        atomic_t use_count;             /**< Outstanding uses (+1) */
        atomic_t finalization;          /**< Finalization in progress */
        atomic_t block_count;           /**< Count of processes waiting */
@@ -440,33 +449,34 @@ typedef struct drm_queue {
        atomic_t total_flushed;         /**< Total flushes statistic */
        atomic_t total_locks;           /**< Total locks statistics */
 #endif
-       drm_ctx_flags_t flags;          /**< Context preserving and 2D-only */
-       drm_waitlist_t waitlist;        /**< Pending buffers */
+       enum drm_ctx_flags flags;       /**< Context preserving and 2D-only */
+       struct drm_waitlist waitlist;   /**< Pending buffers */
        wait_queue_head_t flush_queue;  /**< Processes waiting until flush */
-} drm_queue_t;
+};
 
 /**
  * Lock data.
  */
-typedef struct drm_lock_data {
-       drm_hw_lock_t *hw_lock;         /**< Hardware lock */
-       struct file *filp;              /**< File descr of lock holder (0=kernel) */
+struct drm_lock_data {
+       struct drm_hw_lock *hw_lock;            /**< Hardware lock */
+       /** Private of lock holder's file (NULL=kernel) */
+       struct drm_file *file_priv;
        wait_queue_head_t lock_queue;   /**< Queue of blocked processes */
        unsigned long lock_time;        /**< Time of last lock in jiffies */
        spinlock_t spinlock;
        uint32_t kernel_waiters;
        uint32_t user_waiters;
        int idle_has_lock;
-} drm_lock_data_t;
+};
 
 /**
  * DMA data.
  */
-typedef struct drm_device_dma {
+struct drm_device_dma {
 
-       drm_buf_entry_t bufs[DRM_MAX_ORDER + 1]; /**< buffers, grouped by their size order */
+       struct drm_buf_entry bufs[DRM_MAX_ORDER + 1];   /**< buffers, grouped by their size order */
        int buf_count;                  /**< total number of buffers */
-       drm_buf_t **buflist;            /**< Vector of pointers into drm_device_dma::bufs */
+       struct drm_buf **buflist;               /**< Vector of pointers into drm_device_dma::bufs */
        int seg_count;
        int page_count;                 /**< number of pages */
        unsigned long *pagelist;        /**< page list */
@@ -478,25 +488,25 @@ typedef struct drm_device_dma {
                _DRM_DMA_USE_PCI_RO = 0x08
        } flags;
 
-} drm_device_dma_t;
+};
 
 /**
  * AGP memory entry.  Stored as a doubly linked list.
  */
-typedef struct drm_agp_mem {
+struct drm_agp_mem {
        unsigned long handle;           /**< handle */
        DRM_AGP_MEM *memory;
        unsigned long bound;            /**< address */
        int pages;
        struct list_head head;
-} drm_agp_mem_t;
+};
 
 /**
  * AGP data.
  *
  * \sa drm_agp_init)() and drm_device::agp.
  */
-typedef struct drm_agp_head {
+struct drm_agp_head {
        DRM_AGP_KERN agp_info;          /**< AGP device information */
        struct list_head memory;
        unsigned long mode;             /**< AGP mode */
@@ -509,30 +519,30 @@ typedef struct drm_agp_head {
        int agp_mtrr;
        int cant_use_aperture;
        unsigned long page_mask;
-} drm_agp_head_t;
+};
 
 /**
  * Scatter-gather memory.
  */
-typedef struct drm_sg_mem {
+struct drm_sg_mem {
        unsigned long handle;
        void *virtual;
        int pages;
        struct page **pagelist;
        dma_addr_t *busaddr;
-} drm_sg_mem_t;
+};
 
-typedef struct drm_sigdata {
+struct drm_sigdata {
        int context;
-       drm_hw_lock_t *lock;
-} drm_sigdata_t;
+       struct drm_hw_lock *lock;
+};
 
 
 /*
  * Generic memory manager structs
  */
 
-typedef struct drm_mm_node {
+struct drm_mm_node {
        struct list_head fl_entry;
        struct list_head ml_entry;
        int free;
@@ -540,42 +550,42 @@ typedef struct drm_mm_node {
        unsigned long size;
        struct drm_mm *mm;
        void *private;
-} drm_mm_node_t;
+};
 
-typedef struct drm_mm {
+struct drm_mm {
        struct list_head fl_entry;
        struct list_head ml_entry;
-} drm_mm_t;
+};
 
 
 /**
  * Mappings list
  */
-typedef struct drm_map_list {
+struct drm_map_list {
        struct list_head head;          /**< list head */
-       drm_hash_item_t hash;
-       drm_map_t *map;                 /**< mapping */
-       drm_u64_t user_token;
-       drm_mm_node_t *file_offset_node;
-} drm_map_list_t;
+       struct drm_hash_item hash;
+       struct drm_map *map;                    /**< mapping */
+       uint64_t user_token;
+       struct drm_mm_node *file_offset_node;
+};
 
-typedef drm_map_t drm_local_map_t;
+typedef struct drm_map drm_local_map_t;
 
 /**
  * Context handle list
  */
-typedef struct drm_ctx_list {
+struct drm_ctx_list {
        struct list_head head;          /**< list head */
        drm_context_t handle;           /**< context handle */
-       drm_file_t *tag;                /**< associated fd private data */
-} drm_ctx_list_t;
+       struct drm_file *tag;           /**< associated fd private data */
+};
 
-typedef struct drm_vbl_sig {
+struct drm_vbl_sig {
        struct list_head head;
        unsigned int sequence;
        struct siginfo info;
        struct task_struct *task;
-} drm_vbl_sig_t;
+};
 
 /* location of GART table */
 #define DRM_ATI_GART_MAIN 1
@@ -585,14 +595,14 @@ typedef struct drm_vbl_sig {
 #define DRM_ATI_GART_PCIE 2
 #define DRM_ATI_GART_IGP 3
 
-typedef struct ati_pcigart_info {
+struct ati_pcigart_info {
        int gart_table_location;
        int gart_reg_if;
        void *addr;
        dma_addr_t bus_addr;
        drm_local_map_t mapping;
        int table_size;
-} drm_ati_pcigart_info;
+};
 
 #include "drm_objects.h"
 
@@ -602,16 +612,15 @@ typedef struct ati_pcigart_info {
  * in this family
  */
 
-struct drm_device;
 struct drm_driver {
        int (*load) (struct drm_device *, unsigned long flags);
        int (*firstopen) (struct drm_device *);
-       int (*open) (struct drm_device *, drm_file_t *);
-       void (*preclose) (struct drm_device *, struct file * filp);
-       void (*postclose) (struct drm_device *, drm_file_t *);
+       int (*open) (struct drm_device *, struct drm_file *);
+       void (*preclose) (struct drm_device *, struct drm_file *file_priv);
+       void (*postclose) (struct drm_device *, struct drm_file *);
        void (*lastclose) (struct drm_device *);
        int (*unload) (struct drm_device *);
-       int (*dma_ioctl) (DRM_IOCTL_ARGS);
+       int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
        void (*dma_ready) (struct drm_device *);
        int (*dma_quiescent) (struct drm_device *);
        int (*context_ctor) (struct drm_device * dev, int context);
@@ -641,14 +650,15 @@ struct drm_driver {
        void (*irq_preinstall) (struct drm_device * dev);
        void (*irq_postinstall) (struct drm_device * dev);
        void (*irq_uninstall) (struct drm_device * dev);
-       void (*reclaim_buffers) (struct drm_device *dev, struct file * filp);
+       void (*reclaim_buffers) (struct drm_device *dev,
+                                struct drm_file *file_priv);
        void (*reclaim_buffers_locked) (struct drm_device *dev,
-                                       struct file * filp);
+                                       struct drm_file *file_priv);
        void (*reclaim_buffers_idlelocked) (struct drm_device *dev,
-                                       struct file * filp);
-       unsigned long (*get_map_ofs) (drm_map_t * map);
+                                           struct drm_file *file_priv);
+       unsigned long (*get_map_ofs) (struct drm_map * map);
        unsigned long (*get_reg_ofs) (struct drm_device * dev);
-       void (*set_version) (struct drm_device * dev, drm_set_version_t * sv);
+       void (*set_version) (struct drm_device * dev, struct drm_set_version * sv);
 
        struct drm_fence_driver *fence_driver;
        struct drm_bo_driver *bo_driver;
@@ -663,7 +673,7 @@ struct drm_driver {
 /* variables */
        u32 driver_features;
        int dev_priv_size;
-       drm_ioctl_desc_t *ioctls;
+       struct drm_ioctl_desc *ioctls;
        int num_ioctls;
        struct file_operations fops;
        struct pci_driver pci_driver;
@@ -674,20 +684,20 @@ struct drm_driver {
  * that may contain multiple heads. Embed one per head of these in the
  * private drm_device structure.
  */
-typedef struct drm_head {
+struct drm_head {
        int minor;                      /**< Minor device number */
        struct drm_device *dev;
        struct proc_dir_entry *dev_root;  /**< proc directory entry */
        dev_t device;                   /**< Device number for mknod */
        struct class_device *dev_class;
-} drm_head_t;
+};
 
 
 /**
  * DRM device structure. This structure represent a complete card that
  * may contain multiple heads.
  */
-typedef struct drm_device {
+struct drm_device {
        char *unique;                   /**< Unique identifier: e.g., busid */
        int unique_len;                 /**< Length of unique field */
        char *devname;                  /**< For /proc/interrupts */
@@ -713,14 +723,14 @@ typedef struct drm_device {
        /** \name Performance counters */
        /*@{ */
        unsigned long counters;
-       drm_stat_type_t types[15];
+       enum drm_stat_type types[15];
        atomic_t counts[15];
        /*@} */
 
        /** \name Authentication */
        /*@{ */
        struct list_head filelist;
-       drm_open_hash_t magiclist;
+       struct drm_open_hash magiclist;
        struct list_head magicfree;
        /*@} */
 
@@ -728,9 +738,9 @@ typedef struct drm_device {
        /*@{ */
        struct list_head maplist;       /**< Linked list of regions */
        int map_count;                  /**< Number of mappable regions */
-       drm_open_hash_t map_hash;       /**< User token hash table for maps */
-       drm_mm_t offset_manager;        /**< User token manager */
-       drm_open_hash_t object_hash;    /**< User token hash table for objects */
+       struct drm_open_hash map_hash;       /**< User token hash table for maps */
+       struct drm_mm offset_manager;        /**< User token manager */
+       struct drm_open_hash object_hash;    /**< User token hash table for objects */
        struct address_space *dev_mapping;  /**< For unmap_mapping_range() */
        struct page *ttm_dummy_page;
 
@@ -743,7 +753,7 @@ typedef struct drm_device {
        struct idr ctx_idr;
 
        struct list_head vmalist;       /**< List of vmas (for debugging) */
-       drm_lock_data_t lock;           /**< Information on hardware lock */
+       struct drm_lock_data lock;              /**< Information on hardware lock */
        /*@} */
 
        /** \name DMA queues (contexts) */
@@ -751,8 +761,8 @@ typedef struct drm_device {
        int queue_count;                /**< Number of active DMA queues */
        int queue_reserved;             /**< Number of reserved DMA queues */
        int queue_slots;                /**< Actual length of queuelist */
-       drm_queue_t **queuelist;        /**< Vector of pointers to DMA queues */
-       drm_device_dma_t *dma;          /**< Optional pointer for DMA support */
+       struct drm_queue **queuelist;   /**< Vector of pointers to DMA queues */
+       struct drm_device_dma *dma;             /**< Optional pointer for DMA support */
        /*@} */
 
        /** \name Context support */
@@ -792,7 +802,7 @@ typedef struct drm_device {
        wait_queue_head_t buf_readers;  /**< Processes waiting to read */
        wait_queue_head_t buf_writers;  /**< Processes waiting to ctx switch */
 
-       drm_agp_head_t *agp;            /**< AGP data */
+       struct drm_agp_head *agp;               /**< AGP data */
 
        struct pci_dev *pdev;           /**< PCI device structure */
        int pci_vendor;                 /**< PCI vendor id */
@@ -800,33 +810,33 @@ typedef struct drm_device {
 #ifdef __alpha__
        struct pci_controller *hose;
 #endif
-       drm_sg_mem_t *sg;               /**< Scatter gather memory */
+       struct drm_sg_mem *sg;          /**< Scatter gather memory */
        void *dev_private;              /**< device private data */
-       drm_sigdata_t sigdata;          /**< For block_all_signals */
+       struct drm_sigdata sigdata;             /**< For block_all_signals */
        sigset_t sigmask;
 
        struct drm_driver *driver;
        drm_local_map_t *agp_buffer_map;
        unsigned int agp_buffer_token;
-       drm_head_t primary;             /**< primary screen head */
+       struct drm_head primary;                /**< primary screen head */
 
-       drm_fence_manager_t fm;
-       drm_buffer_manager_t bm;
+       struct drm_fence_manager fm;
+       struct drm_buffer_manager bm;
 
        /** \name Drawable information */
        /*@{ */
        spinlock_t drw_lock;
        struct idr drw_idr;
        /*@} */
-} drm_device_t;
+};
 
 #if __OS_HAS_AGP
-typedef struct drm_agp_ttm_backend {
-        drm_ttm_backend_t backend;
+struct drm_agp_ttm_backend {
+       struct drm_ttm_backend backend;
        DRM_AGP_MEM *mem;
        struct agp_bridge_data *bridge;
        int populated;
-} drm_agp_ttm_backend_t;
+};
 #endif
 
 
@@ -904,7 +914,7 @@ extern int drm_ioctl(struct inode *inode, struct file *filp,
 extern long drm_compat_ioctl(struct file *filp,
                             unsigned int cmd, unsigned long arg);
 
-extern int drm_lastclose(drm_device_t * dev);
+extern int drm_lastclose(struct drm_device *dev);
 
                                /* Device support (drm_fops.h) */
 extern int drm_open(struct inode *inode, struct file *filp);
@@ -915,7 +925,7 @@ unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
 
                                /* Mapping support (drm_vm.h) */
 extern int drm_mmap(struct file *filp, struct vm_area_struct *vma);
-extern unsigned long drm_core_get_map_ofs(drm_map_t * map);
+extern unsigned long drm_core_get_map_ofs(struct drm_map * map);
 extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev);
 extern pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma);
 
@@ -928,177 +938,178 @@ extern void *drm_calloc(size_t nmemb, size_t size, int area);
 extern void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area);
 extern unsigned long drm_alloc_pages(int order, int area);
 extern void drm_free_pages(unsigned long address, int order, int area);
-extern DRM_AGP_MEM *drm_alloc_agp(drm_device_t *dev, int pages, u32 type);
+extern DRM_AGP_MEM *drm_alloc_agp(struct drm_device *dev, int pages, u32 type);
 extern int drm_free_agp(DRM_AGP_MEM * handle, int pages);
 extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start);
 extern int drm_unbind_agp(DRM_AGP_MEM * handle);
 
 extern void drm_free_memctl(size_t size);
 extern int drm_alloc_memctl(size_t size);
-extern void drm_query_memctl(drm_u64_t *cur_used,
-                            drm_u64_t *low_threshold,
-                            drm_u64_t *high_threshold);
+extern void drm_query_memctl(uint64_t *cur_used,
+                            uint64_t *low_threshold,
+                            uint64_t *high_threshold);
 extern void drm_init_memctl(size_t low_threshold,
                            size_t high_threshold,
                            size_t unit_size);
 
                                /* Misc. IOCTL support (drm_ioctl.h) */
-extern int drm_irq_by_busid(struct inode *inode, struct file *filp,
-                           unsigned int cmd, unsigned long arg);
-extern int drm_getunique(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg);
-extern int drm_setunique(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg);
-extern int drm_getmap(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg);
-extern int drm_getclient(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg);
-extern int drm_getstats(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int drm_setversion(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg);
-extern int drm_noop(struct inode *inode, struct file *filp,
-                   unsigned int cmd, unsigned long arg);
+extern int drm_irq_by_busid(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv);
+extern int drm_getunique(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int drm_setunique(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int drm_getmap(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv);
+extern int drm_getclient(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int drm_getstats(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_setversion(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv);
+extern int drm_noop(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv);
 
                                /* Context IOCTL support (drm_context.h) */
-extern int drm_resctx(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg);
-extern int drm_addctx(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg);
-extern int drm_modctx(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg);
-extern int drm_getctx(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg);
-extern int drm_switchctx(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg);
-extern int drm_newctx(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg);
-extern int drm_rmctx(struct inode *inode, struct file *filp,
-                    unsigned int cmd, unsigned long arg);
-
-extern int drm_ctxbitmap_init(drm_device_t * dev);
-extern void drm_ctxbitmap_cleanup(drm_device_t * dev);
-extern void drm_ctxbitmap_free(drm_device_t * dev, int ctx_handle);
-
-extern int drm_setsareactx(struct inode *inode, struct file *filp,
-                          unsigned int cmd, unsigned long arg);
-extern int drm_getsareactx(struct inode *inode, struct file *filp,
-                          unsigned int cmd, unsigned long arg);
+extern int drm_resctx(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv);
+extern int drm_addctx(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv);
+extern int drm_modctx(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv);
+extern int drm_getctx(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv);
+extern int drm_switchctx(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int drm_newctx(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv);
+extern int drm_rmctx(struct drm_device *dev, void *data,
+                    struct drm_file *file_priv);
+
+extern int drm_ctxbitmap_init(struct drm_device *dev);
+extern void drm_ctxbitmap_cleanup(struct drm_device *dev);
+extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
+
+extern int drm_setsareactx(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
+extern int drm_getsareactx(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
 
                                /* Drawable IOCTL support (drm_drawable.h) */
-extern int drm_adddraw(struct inode *inode, struct file *filp,
-                      unsigned int cmd, unsigned long arg);
-extern int drm_rmdraw(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg);
-extern int drm_update_drawable_info(struct inode *inode, struct file *filp,
-                      unsigned int cmd, unsigned long arg);
-extern drm_drawable_info_t *drm_get_drawable_info(drm_device_t *dev,
-                                                 drm_drawable_t id);
-extern void drm_drawable_free_all(drm_device_t *dev);
+extern int drm_adddraw(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv);
+extern int drm_rmdraw(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv);
+extern int drm_update_drawable_info(struct drm_device *dev, void *data,
+                                   struct drm_file *file_priv);
+extern struct drm_drawable_info *drm_get_drawable_info(struct drm_device *dev,
+                                                      drm_drawable_t id);
+extern void drm_drawable_free_all(struct drm_device *dev);
 
                                /* Authentication IOCTL support (drm_auth.h) */
-extern int drm_getmagic(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int drm_authmagic(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg);
+extern int drm_getmagic(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_authmagic(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
 
                                /* Locking IOCTL support (drm_lock.h) */
-extern int drm_lock(struct inode *inode, struct file *filp,
-                   unsigned int cmd, unsigned long arg);
-extern int drm_unlock(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg);
-extern int drm_lock_take(drm_lock_data_t *lock_data, unsigned int context);
-extern int drm_lock_free(drm_lock_data_t *lock_data, unsigned int context);
-extern void drm_idlelock_take(drm_lock_data_t *lock_data);
-extern void drm_idlelock_release(drm_lock_data_t *lock_data);
+extern int drm_lock(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv);
+extern int drm_unlock(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv);
+extern int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context);
+extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context);
+extern void drm_idlelock_take(struct drm_lock_data *lock_data);
+extern void drm_idlelock_release(struct drm_lock_data *lock_data);
 
 /*
  * These are exported to drivers so that they can implement fencing using
  * DMA quiscent + idle. DMA quiescent usually requires the hardware lock.
  */
 
-extern int drm_i_have_hw_lock(struct file *filp);
-extern int drm_kernel_take_hw_lock(struct file *filp);
+extern int drm_i_have_hw_lock(struct drm_device *dev,
+                             struct drm_file *file_priv);
 
                                /* Buffer management support (drm_bufs.h) */
-extern int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request);
-extern int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request);
-extern int drm_addbufs_fb (drm_device_t * dev, drm_buf_desc_t * request);
-extern int drm_addmap(drm_device_t * dev, unsigned int offset,
-                     unsigned int size, drm_map_type_t type,
-                     drm_map_flags_t flags, drm_local_map_t ** map_ptr);
-extern int drm_addmap_ioctl(struct inode *inode, struct file *filp,
-                           unsigned int cmd, unsigned long arg);
-extern int drm_rmmap(drm_device_t *dev, drm_local_map_t *map);
-extern int drm_rmmap_locked(drm_device_t *dev, drm_local_map_t *map);
-extern int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
-                          unsigned int cmd, unsigned long arg);
-extern int drm_addbufs(struct inode *inode, struct file *filp,
-                      unsigned int cmd, unsigned long arg);
-extern int drm_infobufs(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int drm_markbufs(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int drm_freebufs(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int drm_mapbufs(struct inode *inode, struct file *filp,
-                      unsigned int cmd, unsigned long arg);
+extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request);
+extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request);
+extern int drm_addbufs_fb (struct drm_device *dev, struct drm_buf_desc * request);
+extern int drm_addmap(struct drm_device *dev, unsigned int offset,
+                     unsigned int size, enum drm_map_type type,
+                     enum drm_map_flags flags, drm_local_map_t ** map_ptr);
+extern int drm_addmap_ioctl(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv);
+extern int drm_rmmap(struct drm_device *dev, drm_local_map_t *map);
+extern int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map);
+extern int drm_rmmap_ioctl(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
+extern int drm_addbufs(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv);
+extern int drm_infobufs(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_markbufs(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_freebufs(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_mapbufs(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv);
 extern int drm_order(unsigned long size);
-extern unsigned long drm_get_resource_start(drm_device_t *dev,
+extern unsigned long drm_get_resource_start(struct drm_device *dev,
                                            unsigned int resource);
-extern unsigned long drm_get_resource_len(drm_device_t *dev,
+extern unsigned long drm_get_resource_len(struct drm_device *dev,
                                          unsigned int resource);
-extern drm_map_list_t *drm_find_matching_map(drm_device_t *dev,
-                                            drm_local_map_t *map);
+extern struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
+                                                 drm_local_map_t *map);
 
 
                                /* DMA support (drm_dma.h) */
-extern int drm_dma_setup(drm_device_t * dev);
-extern void drm_dma_takedown(drm_device_t * dev);
-extern void drm_free_buffer(drm_device_t * dev, drm_buf_t * buf);
-extern void drm_core_reclaim_buffers(drm_device_t *dev, struct file *filp);
+extern int drm_dma_setup(struct drm_device *dev);
+extern void drm_dma_takedown(struct drm_device *dev);
+extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf);
+extern void drm_core_reclaim_buffers(struct drm_device *dev,
+                                    struct drm_file *filp);
 
                                /* IRQ support (drm_irq.h) */
-extern int drm_control(struct inode *inode, struct file *filp,
-                      unsigned int cmd, unsigned long arg);
+extern int drm_control(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv);
 extern irqreturn_t drm_irq_handler(DRM_IRQ_ARGS);
-extern int drm_irq_uninstall(drm_device_t *dev);
-extern void drm_driver_irq_preinstall(drm_device_t * dev);
-extern void drm_driver_irq_postinstall(drm_device_t * dev);
-extern void drm_driver_irq_uninstall(drm_device_t * dev);
+extern int drm_irq_uninstall(struct drm_device *dev);
+extern void drm_driver_irq_preinstall(struct drm_device *dev);
+extern void drm_driver_irq_postinstall(struct drm_device *dev);
+extern void drm_driver_irq_uninstall(struct drm_device *dev);
 
-extern int drm_wait_vblank(struct inode *inode, struct file *filp,
-                          unsigned int cmd, unsigned long arg);
-extern int drm_vblank_wait(drm_device_t * dev, unsigned int *vbl_seq);
-extern void drm_vbl_send_signals(drm_device_t * dev);
-extern void drm_locked_tasklet(drm_device_t *dev, void(*func)(drm_device_t*));
+extern int drm_wait_vblank(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
+extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
+extern void drm_vbl_send_signals(struct drm_device *dev);
+extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*));
 
                                /* AGP/GART support (drm_agpsupport.h) */
-extern drm_agp_head_t *drm_agp_init(drm_device_t *dev);
-extern int drm_agp_acquire(drm_device_t * dev);
-extern int drm_agp_acquire_ioctl(struct inode *inode, struct file *filp,
-                          unsigned int cmd, unsigned long arg);
-extern int drm_agp_release(drm_device_t *dev);
-extern int drm_agp_release_ioctl(struct inode *inode, struct file *filp,
-                          unsigned int cmd, unsigned long arg);
-extern int drm_agp_enable(drm_device_t *dev, drm_agp_mode_t mode);
-extern int drm_agp_enable_ioctl(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg);
-extern int drm_agp_info(drm_device_t * dev, drm_agp_info_t *info);
-extern int drm_agp_info_ioctl(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int drm_agp_alloc(drm_device_t *dev, drm_agp_buffer_t *request);
-extern int drm_agp_alloc_ioctl(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg);
-extern int drm_agp_free(drm_device_t *dev, drm_agp_buffer_t *request);
-extern int drm_agp_free_ioctl(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int drm_agp_unbind(drm_device_t *dev, drm_agp_binding_t *request);
-extern int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg);
-extern int drm_agp_bind(drm_device_t *dev, drm_agp_binding_t *request);
-extern int drm_agp_bind_ioctl(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
+extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
+extern int drm_agp_acquire(struct drm_device *dev);
+extern int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
+                                struct drm_file *file_priv);
+extern int drm_agp_release(struct drm_device *dev);
+extern int drm_agp_release_ioctl(struct drm_device *dev, void *data,
+                                struct drm_file *file_priv);
+extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
+extern int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
+                               struct drm_file *file_priv);
+extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
+extern int drm_agp_info_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
+extern int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
+extern int drm_agp_free_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
+extern int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv);
+extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
+extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,11)
 extern DRM_AGP_MEM *drm_agp_allocate_memory(size_t pages, u32 type);
 #else
@@ -1107,22 +1118,22 @@ extern DRM_AGP_MEM *drm_agp_allocate_memory(struct agp_bridge_data *bridge, size
 extern int drm_agp_free_memory(DRM_AGP_MEM * handle);
 extern int drm_agp_bind_memory(DRM_AGP_MEM * handle, off_t start);
 extern int drm_agp_unbind_memory(DRM_AGP_MEM * handle);
-extern drm_ttm_backend_t *drm_agp_init_ttm(struct drm_device *dev);
+extern struct drm_ttm_backend *drm_agp_init_ttm(struct drm_device *dev);
                                /* Stub support (drm_stub.h) */
 extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
                     struct drm_driver *driver);
-extern int drm_put_dev(drm_device_t * dev);
-extern int drm_put_head(drm_head_t * head);
+extern int drm_put_dev(struct drm_device *dev);
+extern int drm_put_head(struct drm_head * head);
 extern unsigned int drm_debug; /* 1 to enable debug output */
 extern unsigned int drm_cards_limit;
-extern drm_head_t **drm_heads;
+extern struct drm_head **drm_heads;
 extern struct drm_sysfs_class *drm_class;
 extern struct proc_dir_entry *drm_proc_root;
 
 extern drm_local_map_t *drm_getsarea(struct drm_device *dev);
 
                                /* Proc support (drm_proc.h) */
-extern int drm_proc_init(drm_device_t * dev,
+extern int drm_proc_init(struct drm_device *dev,
                         int minor,
                         struct proc_dir_entry *root,
                         struct proc_dir_entry **dev_root);
@@ -1131,22 +1142,21 @@ extern int drm_proc_cleanup(int minor,
                            struct proc_dir_entry *dev_root);
 
                                /* Scatter Gather Support (drm_scatter.h) */
-extern void drm_sg_cleanup(drm_sg_mem_t * entry);
-extern int drm_sg_alloc_ioctl(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int drm_sg_alloc(drm_device_t *dev, drm_scatter_gather_t * request);
-extern int drm_sg_free(struct drm_device *dev, unsigned long handle);
-extern int drm_sg_free_ioctl(struct inode *inode, struct file *filp,
-                            unsigned int cmd, unsigned long arg);
+extern void drm_sg_cleanup(struct drm_sg_mem * entry);
+extern int drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request);
+extern int drm_sg_free(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv);
 
                               /* ATI PCIGART support (ati_pcigart.h) */
-extern int drm_ati_pcigart_init(drm_device_t * dev, drm_ati_pcigart_info *gart_info);
-extern int drm_ati_pcigart_cleanup(drm_device_t * dev, drm_ati_pcigart_info *gart_info);
+extern int drm_ati_pcigart_init(struct drm_device *dev, struct ati_pcigart_info *gart_info);
+extern int drm_ati_pcigart_cleanup(struct drm_device *dev, struct ati_pcigart_info *gart_info);
 
-extern drm_dma_handle_t *drm_pci_alloc(drm_device_t * dev, size_t size,
+extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size,
                           size_t align, dma_addr_t maxaddr);
-extern void __drm_pci_free(drm_device_t * dev, drm_dma_handle_t *dmah);
-extern void drm_pci_free(drm_device_t * dev, drm_dma_handle_t *dmah);
+extern void __drm_pci_free(struct drm_device *dev, drm_dma_handle_t *dmah);
+extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t *dmah);
 
                               /* sysfs support (drm_sysfs.c) */
 struct drm_sysfs_class;
@@ -1154,26 +1164,26 @@ extern struct drm_sysfs_class *drm_sysfs_create(struct module *owner,
                                                char *name);
 extern void drm_sysfs_destroy(struct drm_sysfs_class *cs);
 extern struct class_device *drm_sysfs_device_add(struct drm_sysfs_class *cs,
-                                                drm_head_t * head);
+                                                struct drm_head * head);
 extern void drm_sysfs_device_remove(struct class_device *class_dev);
 
 /*
  * Basic memory manager support (drm_mm.c)
  */
 
-extern drm_mm_node_t * drm_mm_get_block(drm_mm_node_t * parent, unsigned long size,
+extern struct drm_mm_node * drm_mm_get_block(struct drm_mm_node * parent, unsigned long size,
                                               unsigned alignment);
-extern void drm_mm_put_block(drm_mm_node_t *cur);
-extern drm_mm_node_t *drm_mm_search_free(const drm_mm_t *mm, unsigned long size,
+extern void drm_mm_put_block(struct drm_mm_node *cur);
+extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm, unsigned long size,
                                                unsigned alignment, int best_match);
-extern int drm_mm_init(drm_mm_t *mm, unsigned long start, unsigned long size);
-extern void drm_mm_takedown(drm_mm_t *mm);
-extern int drm_mm_clean(drm_mm_t *mm);
-extern unsigned long drm_mm_tail_space(drm_mm_t *mm);
-extern int drm_mm_remove_space_from_tail(drm_mm_t *mm, unsigned long size);
-extern int drm_mm_add_space_to_tail(drm_mm_t *mm, unsigned long size);
-
-static inline drm_mm_t *drm_get_mm(drm_mm_node_t *block)
+extern int drm_mm_init(struct drm_mm *mm, unsigned long start, unsigned long size);
+extern void drm_mm_takedown(struct drm_mm *mm);
+extern int drm_mm_clean(struct drm_mm *mm);
+extern unsigned long drm_mm_tail_space(struct drm_mm *mm);
+extern int drm_mm_remove_space_from_tail(struct drm_mm *mm, unsigned long size);
+extern int drm_mm_add_space_to_tail(struct drm_mm *mm, unsigned long size);
+
+static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)
 {
        return block->mm;
 }
@@ -1184,14 +1194,14 @@ extern void drm_core_ioremapfree(struct drm_map *map, struct drm_device *dev);
 static __inline__ struct drm_map *drm_core_findmap(struct drm_device *dev,
                                                   unsigned int token)
 {
-       drm_map_list_t *_entry;
+       struct drm_map_list *_entry;
        list_for_each_entry(_entry, &dev->maplist, head)
                if (_entry->user_token == token)
                        return _entry->map;
        return NULL;
 }
 
-static __inline__ int drm_device_is_agp(drm_device_t *dev)
+static __inline__ int drm_device_is_agp(struct drm_device *dev)
 {
        if ( dev->driver->device_is_agp != NULL ) {
                int err = (*dev->driver->device_is_agp)( dev );
@@ -1204,7 +1214,7 @@ static __inline__ int drm_device_is_agp(drm_device_t *dev)
        return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP);
 }
 
-static __inline__ int drm_device_is_pcie(drm_device_t *dev)
+static __inline__ int drm_device_is_pcie(struct drm_device *dev)
 {
        return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP);
 }
@@ -1265,5 +1275,19 @@ static inline void drm_ctl_free(void *pt, size_t size, int area)
 
 /*@}*/
 
+/** Type for the OS's non-sleepable mutex lock */
+#define DRM_SPINTYPE           spinlock_t
+/**
+ * Initialize the lock for use.  name is an optional string describing the
+ * lock
+ */
+#define DRM_SPININIT(l,name)   spin_lock_init(l)
+#define DRM_SPINUNINIT(l)
+#define DRM_SPINLOCK(l)                spin_lock(l)
+#define DRM_SPINUNLOCK(l)      spin_unlock(l)
+#define DRM_SPINLOCK_IRQSAVE(l, _flags)        spin_lock_irqsave(l, _flags);
+#define DRM_SPINUNLOCK_IRQRESTORE(l, _flags) spin_unlock_irqrestore(l, _flags);
+#define DRM_SPINLOCK_ASSERT(l)         do {} while (0) 
+
 #endif                         /* __KERNEL__ */
 #endif
index f134563..df54360 100644 (file)
@@ -40,7 +40,7 @@
  * Get AGP information.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a (output) drm_agp_info structure.
  * \return zero on success or a negative number on failure.
@@ -48,7 +48,7 @@
  * Verifies the AGP device has been initialized and acquired and fills in the
  * drm_agp_info structure with the information in drm_agp_head::agp_info.
  */
-int drm_agp_info(drm_device_t * dev, drm_agp_info_t *info)
+int drm_agp_info(struct drm_device * dev, struct drm_agp_info *info)
 {
        DRM_AGP_KERN *kern;
 
@@ -70,20 +70,16 @@ int drm_agp_info(drm_device_t * dev, drm_agp_info_t *info)
 }
 EXPORT_SYMBOL(drm_agp_info);
 
-int drm_agp_info_ioctl(struct inode *inode, struct file *filp,
-                unsigned int cmd, unsigned long arg)
+int drm_agp_info_ioctl(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_agp_info_t 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((drm_agp_info_t __user *) arg, &info, sizeof(info)))
-               return -EFAULT;
+
        return 0;
 }
 
@@ -96,7 +92,7 @@ int drm_agp_info_ioctl(struct inode *inode, struct file *filp,
  * Verifies the AGP device hasn't been acquired before and calls
  * \c agp_backend_acquire.
  */
-int drm_agp_acquire(drm_device_t * dev)
+int drm_agp_acquire(struct drm_device * dev)
 {
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,11)
        int retcode;
@@ -123,7 +119,7 @@ EXPORT_SYMBOL(drm_agp_acquire);
  * Acquire the AGP device (ioctl).
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument.
  * \return zero on success or a negative number on failure.
@@ -131,12 +127,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 file *filp,
-                         unsigned int cmd, unsigned long arg)
+int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       
-       return drm_agp_acquire( (drm_device_t *) priv->head->dev );
+       return drm_agp_acquire( (struct drm_device *) file_priv->head->dev );
 }
 
 /**
@@ -147,7 +141,7 @@ int drm_agp_acquire_ioctl(struct inode *inode, struct file *filp,
  *
  * Verifies the AGP device has been acquired and calls \c agp_backend_release.
  */
-int drm_agp_release(drm_device_t *dev)
+int drm_agp_release(struct drm_device *dev)
 {
        if (!dev->agp || !dev->agp->acquired)
                return -EINVAL;
@@ -162,12 +156,9 @@ int drm_agp_release(drm_device_t *dev)
 }
 EXPORT_SYMBOL(drm_agp_release);
 
-int drm_agp_release_ioctl(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg)
+int drm_agp_release_ioctl(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       
        return drm_agp_release(dev);
 }
 
@@ -181,7 +172,7 @@ int drm_agp_release_ioctl(struct inode *inode, struct file *filp,
  * Verifies the AGP device has been acquired but not enabled, and calls
  * \c agp_enable.
  */
-int drm_agp_enable(drm_device_t *dev, drm_agp_mode_t mode)
+int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode)
 {
        if (!dev->agp || !dev->agp->acquired)
                return -EINVAL;
@@ -198,25 +189,19 @@ int drm_agp_enable(drm_device_t *dev, drm_agp_mode_t mode)
 }
 EXPORT_SYMBOL(drm_agp_enable);
 
-int drm_agp_enable_ioctl(struct inode *inode, struct file *filp,
-                  unsigned int cmd, unsigned long arg)
+int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_agp_mode_t mode;
-
+       struct drm_agp_mode *mode = data;
 
-       if (copy_from_user(&mode, (drm_agp_mode_t __user *) arg, sizeof(mode)))
-               return -EFAULT;
-
-       return drm_agp_enable(dev, mode);
+       return drm_agp_enable(dev, *mode);
 }
 
 /**
  * Allocate AGP memory.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv file private pointer.
  * \param cmd command.
  * \param arg pointer to a drm_agp_buffer structure.
  * \return zero on success or a negative number on failure.
@@ -224,9 +209,9 @@ int drm_agp_enable_ioctl(struct inode *inode, struct file *filp,
  * Verifies the AGP device is present and has been acquired, allocates the
  * memory via alloc_agp() and creates a drm_agp_mem entry for it.
  */
-int drm_agp_alloc(drm_device_t *dev, drm_agp_buffer_t *request)
+int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
 {
-       drm_agp_mem_t *entry;
+       struct drm_agp_mem *entry;
        DRM_AGP_MEM *memory;
        unsigned long pages;
        u32 type;
@@ -259,35 +244,12 @@ int drm_agp_alloc(drm_device_t *dev, drm_agp_buffer_t *request)
 EXPORT_SYMBOL(drm_agp_alloc);
 
 
-int drm_agp_alloc_ioctl(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg)
+int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_agp_buffer_t request;
-       drm_agp_buffer_t __user *argp = (void __user *)arg;
-       int err;
-
-       if (copy_from_user(&request, argp, sizeof(request)))
-               return -EFAULT;
+       struct drm_agp_buffer *request = data;
 
-       err = drm_agp_alloc(dev, &request);
-       if (err)
-               return err;
-
-       if (copy_to_user(argp, &request, sizeof(request))) {
-               drm_agp_mem_t *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;
-       }
-
-       return 0;
+       return drm_agp_alloc(dev, request);
 }
 
 /**
@@ -299,10 +261,10 @@ int drm_agp_alloc_ioctl(struct inode *inode, struct file *filp,
  *
  * Walks through drm_agp_head::memory until finding a matching handle.
  */
-static drm_agp_mem_t *drm_agp_lookup_entry(drm_device_t * dev,
+static struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device * dev,
                                           unsigned long handle)
 {
-       drm_agp_mem_t *entry;
+       struct drm_agp_mem *entry;
 
        list_for_each_entry(entry, &dev->agp->memory, head) {
                if (entry->handle == handle)
@@ -315,7 +277,7 @@ static drm_agp_mem_t *drm_agp_lookup_entry(drm_device_t * dev,
  * Unbind AGP memory from the GATT (ioctl).
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a drm_agp_binding structure.
  * \return zero on success or a negative number on failure.
@@ -323,9 +285,9 @@ static drm_agp_mem_t *drm_agp_lookup_entry(drm_device_t * dev,
  * Verifies the AGP device is present and acquired, looks-up the AGP memory
  * entry and passes it to the unbind_agp() function.
  */
-int drm_agp_unbind(drm_device_t *dev, drm_agp_binding_t *request)
+int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request)
 {
-       drm_agp_mem_t *entry;
+       struct drm_agp_mem *entry;
        int ret;
 
        if (!dev->agp || !dev->agp->acquired)
@@ -342,18 +304,12 @@ int drm_agp_unbind(drm_device_t *dev, drm_agp_binding_t *request)
 EXPORT_SYMBOL(drm_agp_unbind);
 
 
-int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg)
+int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_agp_binding_t request;
-
-       if (copy_from_user
-           (&request, (drm_agp_binding_t __user *) arg, sizeof(request)))
-               return -EFAULT;
+       struct drm_agp_binding *request = data;
 
-       return drm_agp_unbind(dev, &request);
+       return drm_agp_unbind(dev, request);
 }
 
 
@@ -361,7 +317,7 @@ int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp,
  * Bind AGP memory into the GATT (ioctl)
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a drm_agp_binding structure.
  * \return zero on success or a negative number on failure.
@@ -370,9 +326,9 @@ int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp,
  * is currently bound into the GATT. Looks-up the AGP memory entry and passes
  * it to bind_agp() function.
  */
-int drm_agp_bind(drm_device_t *dev, drm_agp_binding_t *request)
+int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request)
 {
-       drm_agp_mem_t *entry;
+       struct drm_agp_mem *entry;
        int retcode;
        int page;
 
@@ -393,18 +349,12 @@ int drm_agp_bind(drm_device_t *dev, drm_agp_binding_t *request)
 EXPORT_SYMBOL(drm_agp_bind);
 
 
-int drm_agp_bind_ioctl(struct inode *inode, struct file *filp,
-                      unsigned int cmd, unsigned long arg)
+int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_agp_binding_t request;
+       struct drm_agp_binding *request = data;
 
-       if (copy_from_user
-           (&request, (drm_agp_binding_t __user *) arg, sizeof(request)))
-               return -EFAULT;
-
-       return drm_agp_bind(dev, &request);
+       return drm_agp_bind(dev, request);
 }
 
 
@@ -412,7 +362,7 @@ int drm_agp_bind_ioctl(struct inode *inode, struct file *filp,
  * Free AGP memory (ioctl).
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a drm_agp_buffer structure.
  * \return zero on success or a negative number on failure.
@@ -422,9 +372,9 @@ int drm_agp_bind_ioctl(struct inode *inode, struct file *filp,
  * unbind_agp(). Frees it via free_agp() as well as the entry itself
  * and unlinks from the doubly linked list it's inserted in.
  */
-int drm_agp_free(drm_device_t *dev, drm_agp_buffer_t *request)
+int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request)
 {
-       drm_agp_mem_t *entry;
+       struct drm_agp_mem *entry;
 
        if (!dev->agp || !dev->agp->acquired)
                return -EINVAL;
@@ -443,18 +393,12 @@ EXPORT_SYMBOL(drm_agp_free);
 
 
 
-int drm_agp_free_ioctl(struct inode *inode, struct file *filp,
-                      unsigned int cmd, unsigned long arg)
+int drm_agp_free_ioctl(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_agp_buffer_t request;
-
-       if (copy_from_user
-           (&request, (drm_agp_buffer_t __user *) arg, sizeof(request)))
-               return -EFAULT;
+       struct drm_agp_buffer *request = data;
 
-       return drm_agp_free(dev, &request);
+       return drm_agp_free(dev, request);
 }
 
 
@@ -467,9 +411,9 @@ int drm_agp_free_ioctl(struct inode *inode, struct file *filp,
  * via the inter_module_* functions. Creates and initializes a drm_agp_head
  * structure.
  */
-drm_agp_head_t *drm_agp_init(drm_device_t *dev)
+struct drm_agp_head *drm_agp_init(struct drm_device *dev)
 {
-       drm_agp_head_t *head = NULL;
+       struct drm_agp_head *head = NULL;
 
        if (!(head = drm_alloc(sizeof(*head), DRM_MEM_AGPLISTS)))
                return NULL;
@@ -554,16 +498,16 @@ int drm_agp_unbind_memory(DRM_AGP_MEM * handle)
 #define AGP_REQUIRED_MAJOR 0
 #define AGP_REQUIRED_MINOR 102
 
-static int drm_agp_needs_unbind_cache_adjust(drm_ttm_backend_t *backend) {
+static int drm_agp_needs_unbind_cache_adjust(struct drm_ttm_backend *backend) {
        return ((backend->flags & DRM_BE_FLAG_BOUND_CACHED) ? 0 : 1);
 }
 
 
-static int drm_agp_populate(drm_ttm_backend_t *backend, unsigned long num_pages,
+static int drm_agp_populate(struct drm_ttm_backend *backend, unsigned long num_pages,
                            struct page **pages) {
 
-       drm_agp_ttm_backend_t *agp_be = 
-               container_of(backend, drm_agp_ttm_backend_t, backend);
+       struct drm_agp_ttm_backend *agp_be = 
+               container_of(backend, struct drm_agp_ttm_backend, backend);
        struct page **cur_page, **last_page = pages + num_pages;
        DRM_AGP_MEM *mem;
 
@@ -590,12 +534,12 @@ static int drm_agp_populate(drm_ttm_backend_t *backend, unsigned long num_pages,
        return 0;
 }
 
-static int drm_agp_bind_ttm(drm_ttm_backend_t *backend,
+static int drm_agp_bind_ttm(struct drm_ttm_backend *backend,
                            unsigned long offset,
                            int cached)
 {
-       drm_agp_ttm_backend_t *agp_be = 
-               container_of(backend, drm_agp_ttm_backend_t, backend);
+       struct drm_agp_ttm_backend *agp_be = 
+               container_of(backend, struct drm_agp_ttm_backend, backend);
        DRM_AGP_MEM *mem = agp_be->mem;
        int ret;
 
@@ -612,10 +556,10 @@ static int drm_agp_bind_ttm(drm_ttm_backend_t *backend,
        return ret;
 }
 
-static int drm_agp_unbind_ttm(drm_ttm_backend_t *backend) {
+static int drm_agp_unbind_ttm(struct drm_ttm_backend *backend) {
 
-       drm_agp_ttm_backend_t *agp_be = 
-               container_of(backend, drm_agp_ttm_backend_t, backend);
+       struct drm_agp_ttm_backend *agp_be = 
+               container_of(backend, struct drm_agp_ttm_backend, backend);
 
        DRM_DEBUG("drm_agp_unbind_ttm\n");
        if (agp_be->mem->is_bound)
@@ -624,10 +568,10 @@ static int drm_agp_unbind_ttm(drm_ttm_backend_t *backend) {
                return 0;
 }
 
-static void drm_agp_clear_ttm(drm_ttm_backend_t *backend) {
+static void drm_agp_clear_ttm(struct drm_ttm_backend *backend) {
 
-       drm_agp_ttm_backend_t *agp_be = 
-               container_of(backend, drm_agp_ttm_backend_t, backend);
+       struct drm_agp_ttm_backend *agp_be = 
+               container_of(backend, struct drm_agp_ttm_backend, backend);
        DRM_AGP_MEM *mem = agp_be->mem;
 
        DRM_DEBUG("drm_agp_clear_ttm\n");
@@ -640,13 +584,13 @@ static void drm_agp_clear_ttm(drm_ttm_backend_t *backend) {
        agp_be->mem = NULL;
 }
 
-static void drm_agp_destroy_ttm(drm_ttm_backend_t *backend) {
+static void drm_agp_destroy_ttm(struct drm_ttm_backend *backend) {
 
-       drm_agp_ttm_backend_t *agp_be;
+       struct drm_agp_ttm_backend *agp_be;
 
        if (backend) {
                DRM_DEBUG("drm_agp_destroy_ttm\n");
-               agp_be = container_of(backend, drm_agp_ttm_backend_t, backend);
+               agp_be = container_of(backend, struct drm_agp_ttm_backend, backend);
                if (agp_be) {
                        if (agp_be->mem) {
                                backend->func->clear(backend);
@@ -656,7 +600,7 @@ static void drm_agp_destroy_ttm(drm_ttm_backend_t *backend) {
        }
 }
 
-static drm_ttm_backend_func_t agp_ttm_backend = 
+static struct drm_ttm_backend_func agp_ttm_backend = 
 {
        .needs_ub_cache_adjust = drm_agp_needs_unbind_cache_adjust,
        .populate = drm_agp_populate,
@@ -666,10 +610,10 @@ static drm_ttm_backend_func_t agp_ttm_backend =
        .destroy =  drm_agp_destroy_ttm,
 };
 
-drm_ttm_backend_t *drm_agp_init_ttm(struct drm_device *dev)
+struct drm_ttm_backend *drm_agp_init_ttm(struct drm_device *dev)
 {
 
-       drm_agp_ttm_backend_t *agp_be;
+       struct drm_agp_ttm_backend *agp_be;
        struct agp_kern_info *info;
 
        if (!dev->agp) {
index 6948d85..e35e8b6 100644 (file)
  * the one with matching magic number, while holding the drm_device::struct_mutex
  * lock.
  */
-static drm_file_t *drm_find_file(drm_device_t * dev, drm_magic_t magic)
+static struct drm_file *drm_find_file(struct drm_device * dev, drm_magic_t magic)
 {
-       drm_file_t *retval = NULL;
-       drm_magic_entry_t *pt;
-       drm_hash_item_t *hash;
+       struct drm_file *retval = NULL;
+       struct drm_magic_entry *pt;
+       struct drm_hash_item *hash;
 
-       mutex_lock(&dev->struct_mutex); 
-       if (!drm_ht_find_item(&dev->magiclist, (unsigned long) magic, &hash)) {
-               pt = drm_hash_entry(hash, drm_magic_entry_t, hash_item);
+       mutex_lock(&dev->struct_mutex);
+       if (!drm_ht_find_item(&dev->magiclist, (unsigned long)magic, &hash)) {
+               pt = drm_hash_entry(hash, struct drm_magic_entry, hash_item);
                retval = pt->priv;
        }
        mutex_unlock(&dev->struct_mutex);
@@ -71,10 +71,10 @@ static drm_file_t *drm_find_file(drm_device_t * dev, drm_magic_t magic)
  * associated the magic number hash key in drm_device::magiclist, while holding
  * the drm_device::struct_mutex lock.
  */
-static int drm_add_magic(drm_device_t *dev, drm_file_t *priv,
+static int drm_add_magic(struct drm_device * dev, struct drm_file * priv,
                         drm_magic_t magic)
 {
-       drm_magic_entry_t *entry;
+       struct drm_magic_entry *entry;
 
        DRM_DEBUG("%d\n", magic);
 
@@ -101,10 +101,10 @@ static int drm_add_magic(drm_device_t *dev, drm_file_t *priv,
  * Searches and unlinks the entry in drm_device::magiclist with the magic
  * number hash key, while holding the drm_device::struct_mutex lock.
  */
-static int drm_remove_magic(drm_device_t * dev, drm_magic_t magic)
+static int drm_remove_magic(struct drm_device * dev, drm_magic_t magic)
 {
-       drm_magic_entry_t *pt;
-       drm_hash_item_t *hash;
+       struct drm_magic_entry *pt;
+       struct drm_hash_item *hash;
 
        DRM_DEBUG("%d\n", magic);
 
@@ -113,7 +113,7 @@ static int drm_remove_magic(drm_device_t * dev, drm_magic_t magic)
                mutex_unlock(&dev->struct_mutex);
                return -EINVAL;
        }
-       pt = drm_hash_entry(hash, drm_magic_entry_t, hash_item);
+       pt = drm_hash_entry(hash, struct drm_magic_entry, hash_item);
        drm_ht_remove_item(&dev->magiclist, hash);
        list_del(&pt->head);
        mutex_unlock(&dev->struct_mutex);
@@ -127,42 +127,38 @@ static int drm_remove_magic(drm_device_t * dev, drm_magic_t magic)
  * Get a unique magic number (ioctl).
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a resulting drm_auth structure.
  * \return zero on success, or a negative number on failure.
  *
  * If there is a magic number in drm_file::magic then use it, otherwise
  * searches an unique non-zero magic number and add it associating it with \p
- * filp.
+ * file_priv.
  */
-int drm_getmagic(struct inode *inode, struct file *filp,
-                unsigned int cmd, unsigned long arg)
+int drm_getmagic(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
        static drm_magic_t sequence = 0;
        static DEFINE_SPINLOCK(lock);
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_auth_t auth;
+       struct drm_auth *auth = data;
 
        /* Find unique magic */
-       if (priv->magic) {
-               auth.magic = priv->magic;
+       if (file_priv->magic) {
+               auth->magic = file_priv->magic;
        } else {
                do {
                        spin_lock(&lock);
                        if (!sequence)
                                ++sequence;     /* reserve 0 */
-                       auth.magic = sequence++;
+                       auth->magic = sequence++;
                        spin_unlock(&lock);
-               } while (drm_find_file(dev, auth.magic));
-               priv->magic = auth.magic;
-               drm_add_magic(dev, priv, auth.magic);
+               } while (drm_find_file(dev, auth->magic));
+               file_priv->magic = auth->magic;
+               drm_add_magic(dev, file_priv, auth->magic);
        }
 
-       DRM_DEBUG("%u\n", auth.magic);
-       if (copy_to_user((drm_auth_t __user *) arg, &auth, sizeof(auth)))
-               return -EFAULT;
+       DRM_DEBUG("%u\n", auth->magic);
+
        return 0;
 }
 
@@ -170,27 +166,23 @@ int drm_getmagic(struct inode *inode, struct file *filp,
  * Authenticate with a magic.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a drm_auth structure.
  * \return zero if authentication successed, or a negative number otherwise.
  *
- * Checks if \p filp is associated with the magic number passed in \arg.
+ * Checks if \p file_priv is associated with the magic number passed in \arg.
  */
-int drm_authmagic(struct inode *inode, struct file *filp,
-                 unsigned int cmd, unsigned long arg)
+int drm_authmagic(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_auth_t auth;
-       drm_file_t *file;
-
-       if (copy_from_user(&auth, (drm_auth_t __user *) arg, sizeof(auth)))
-               return -EFAULT;
-       DRM_DEBUG("%u\n", auth.magic);
-       if ((file = drm_find_file(dev, auth.magic))) {
+       struct drm_auth *auth = data;
+       struct drm_file *file;
+
+       DRM_DEBUG("%u\n", auth->magic);
+       if ((file = drm_find_file(dev, auth->magic))) {
                file->authenticated = 1;
-               drm_remove_magic(dev, auth.magic);
+               drm_remove_magic(dev, auth->magic);
                return 0;
        }
        return -EINVAL;
index ab25782..467d03f 100644 (file)
  *
  */
 
-static void drm_bo_destroy_locked(drm_buffer_object_t * bo);
-static int drm_bo_setup_vm_locked(drm_buffer_object_t * bo);
-static void drm_bo_takedown_vm_locked(drm_buffer_object_t * bo);
-static void drm_bo_unmap_virtual(drm_buffer_object_t * bo);
+static void drm_bo_destroy_locked(struct drm_buffer_object * bo);
+static int drm_bo_setup_vm_locked(struct drm_buffer_object * bo);
+static void drm_bo_takedown_vm_locked(struct drm_buffer_object * bo);
+static void drm_bo_unmap_virtual(struct drm_buffer_object * bo);
 
 static inline uint32_t drm_bo_type_flags(unsigned type)
 {
@@ -63,9 +63,9 @@ static inline uint32_t drm_bo_type_flags(unsigned type)
  * bo locked. dev->struct_mutex locked.
  */
 
-void drm_bo_add_to_pinned_lru(drm_buffer_object_t * bo)
+void drm_bo_add_to_pinned_lru(struct drm_buffer_object * bo)
 {
-       drm_mem_type_manager_t *man;
+       struct drm_mem_type_manager *man;
 
        DRM_ASSERT_LOCKED(&bo->dev->struct_mutex);
        DRM_ASSERT_LOCKED(&bo->mutex);
@@ -74,9 +74,9 @@ void drm_bo_add_to_pinned_lru(drm_buffer_object_t * bo)
        list_add_tail(&bo->pinned_lru, &man->pinned);
 }
 
-void drm_bo_add_to_lru(drm_buffer_object_t * bo)
+void drm_bo_add_to_lru(struct drm_buffer_object * bo)
 {
-       drm_mem_type_manager_t *man;
+       struct drm_mem_type_manager *man;
 
        DRM_ASSERT_LOCKED(&bo->dev->struct_mutex);
 
@@ -89,7 +89,7 @@ void drm_bo_add_to_lru(drm_buffer_object_t * bo)
        }
 }
 
-static int drm_bo_vm_pre_move(drm_buffer_object_t * bo, int old_is_pci)
+static int drm_bo_vm_pre_move(struct drm_buffer_object * bo, int old_is_pci)
 {
 #ifdef DRM_ODD_MM_COMPAT
        int ret;
@@ -112,7 +112,7 @@ static int drm_bo_vm_pre_move(drm_buffer_object_t * bo, int old_is_pci)
        return 0;
 }
 
-static void drm_bo_vm_post_move(drm_buffer_object_t * bo)
+static void drm_bo_vm_post_move(struct drm_buffer_object * bo)
 {
 #ifdef DRM_ODD_MM_COMPAT
        int ret;
@@ -133,9 +133,9 @@ static void drm_bo_vm_post_move(drm_buffer_object_t * bo)
  * Call bo->mutex locked.
  */
 
-static int drm_bo_add_ttm(drm_buffer_object_t * bo)
+static int drm_bo_add_ttm(struct drm_buffer_object * bo)
 {
-       drm_device_t *dev = bo->dev;
+       struct drm_device *dev = bo->dev;
        int ret = 0;
        bo->ttm = NULL;
 
@@ -164,16 +164,16 @@ static int drm_bo_add_ttm(drm_buffer_object_t * bo)
        return ret;
 }
 
-static int drm_bo_handle_move_mem(drm_buffer_object_t * bo,
-                                 drm_bo_mem_reg_t * mem,
+static int drm_bo_handle_move_mem(struct drm_buffer_object * bo,
+                                 struct drm_bo_mem_reg * mem,
                                  int evict, int no_wait)
 {
-       drm_device_t *dev = bo->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_device *dev = bo->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
        int old_is_pci = drm_mem_reg_is_pci(dev, &bo->mem);
        int new_is_pci = drm_mem_reg_is_pci(dev, mem);
-       drm_mem_type_manager_t *old_man = &bm->man[bo->mem.mem_type];
-       drm_mem_type_manager_t *new_man = &bm->man[mem->mem_type];
+       struct drm_mem_type_manager *old_man = &bm->man[bo->mem.mem_type];
+       struct drm_mem_type_manager *new_man = &bm->man[mem->mem_type];
        int ret = 0;
 
        if (old_is_pci || new_is_pci)
@@ -201,9 +201,9 @@ static int drm_bo_handle_move_mem(drm_buffer_object_t * bo,
 
        if ((bo->mem.mem_type == DRM_BO_MEM_LOCAL) && bo->ttm == NULL) {
 
-               drm_bo_mem_reg_t *old_mem = &bo->mem;
-               uint32_t save_flags = old_mem->flags;
-               uint32_t save_mask = old_mem->mask;
+               struct drm_bo_mem_reg *old_mem = &bo->mem;
+               uint64_t save_flags = old_mem->flags;
+               uint64_t save_mask = old_mem->mask;
 
                *old_mem = *mem;
                mem->mm_node = NULL;
@@ -266,7 +266,7 @@ static int drm_bo_handle_move_mem(drm_buffer_object_t * bo,
  * Wait until the buffer is idle.
  */
 
-int drm_bo_wait(drm_buffer_object_t * bo, int lazy, int ignore_signals,
+int drm_bo_wait(struct drm_buffer_object * bo, int lazy, int ignore_signals,
                int no_wait)
 {
        int ret;
@@ -292,10 +292,10 @@ int drm_bo_wait(drm_buffer_object_t * bo, int lazy, int ignore_signals,
        return 0;
 }
 
-static int drm_bo_expire_fence(drm_buffer_object_t * bo, int allow_errors)
+static int drm_bo_expire_fence(struct drm_buffer_object * bo, int allow_errors)
 {
-       drm_device_t *dev = bo->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_device *dev = bo->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
 
        if (bo->fence) {
                if (bm->nice_mode) {
@@ -327,10 +327,10 @@ static int drm_bo_expire_fence(drm_buffer_object_t * bo, int allow_errors)
  * fence object and removing from lru lists and memory managers.
  */
 
-static void drm_bo_cleanup_refs(drm_buffer_object_t * bo, int remove_all)
+static void drm_bo_cleanup_refs(struct drm_buffer_object * bo, int remove_all)
 {
-       drm_device_t *dev = bo->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_device *dev = bo->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
 
        DRM_ASSERT_LOCKED(&dev->struct_mutex);
 
@@ -389,10 +389,10 @@ static void drm_bo_cleanup_refs(drm_buffer_object_t * bo, int remove_all)
  * to the buffer object. Then destroy it.
  */
 
-static void drm_bo_destroy_locked(drm_buffer_object_t * bo)
+static void drm_bo_destroy_locked(struct drm_buffer_object * bo)
 {
-       drm_device_t *dev = bo->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_device *dev = bo->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
 
        DRM_ASSERT_LOCKED(&dev->struct_mutex);
 
@@ -438,19 +438,19 @@ static void drm_bo_destroy_locked(drm_buffer_object_t * bo)
  * Call dev->struct_mutex locked.
  */
 
-static void drm_bo_delayed_delete(drm_device_t * dev, int remove_all)
+static void drm_bo_delayed_delete(struct drm_device * dev, int remove_all)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_buffer_manager *bm = &dev->bm;
 
-       drm_buffer_object_t *entry, *nentry;
+       struct drm_buffer_object *entry, *nentry;
        struct list_head *list, *next;
 
        list_for_each_safe(list, next, &bm->ddestroy) {
-               entry = list_entry(list, drm_buffer_object_t, ddestroy);
+               entry = list_entry(list, struct drm_buffer_object, ddestroy);
 
                nentry = NULL;
                if (next != &bm->ddestroy) {
-                       nentry = list_entry(next, drm_buffer_object_t,
+                       nentry = list_entry(next, struct drm_buffer_object,
                                            ddestroy);
                        atomic_inc(&nentry->usage);
                }
@@ -470,12 +470,12 @@ static void drm_bo_delayed_workqueue(struct work_struct *work)
 #endif
 {
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
-       drm_device_t *dev = (drm_device_t *) data;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_device *dev = (struct drm_device *) data;
+       struct drm_buffer_manager *bm = &dev->bm;
 #else
-       drm_buffer_manager_t *bm =
-           container_of(work, drm_buffer_manager_t, wq.work);
-       drm_device_t *dev = container_of(bm, drm_device_t, bm);
+       struct drm_buffer_manager *bm =
+           container_of(work, struct drm_buffer_manager, wq.work);
+       struct drm_device *dev = container_of(bm, struct drm_device, bm);
 #endif
 
        DRM_DEBUG("Delayed delete Worker\n");
@@ -493,7 +493,7 @@ static void drm_bo_delayed_workqueue(struct work_struct *work)
        mutex_unlock(&dev->struct_mutex);
 }
 
-void drm_bo_usage_deref_locked(drm_buffer_object_t ** bo)
+void drm_bo_usage_deref_locked(struct drm_buffer_object ** bo)
 {
         struct drm_buffer_object *tmp_bo = *bo;
        bo = NULL;
@@ -505,10 +505,11 @@ void drm_bo_usage_deref_locked(drm_buffer_object_t ** bo)
        }
 }
 
-static void drm_bo_base_deref_locked(drm_file_t * priv, drm_user_object_t * uo)
+static void drm_bo_base_deref_locked(struct drm_file * file_priv,
+                                    struct drm_user_object * uo)
 {
-       drm_buffer_object_t *bo =
-           drm_user_object_entry(uo, drm_buffer_object_t, base);
+       struct drm_buffer_object *bo =
+           drm_user_object_entry(uo, struct drm_buffer_object, base);
 
        DRM_ASSERT_LOCKED(&bo->dev->struct_mutex);
 
@@ -516,10 +517,10 @@ static void drm_bo_base_deref_locked(drm_file_t * priv, drm_user_object_t * uo)
        drm_bo_usage_deref_locked(&bo);
 }
 
-static void drm_bo_usage_deref_unlocked(drm_buffer_object_t ** bo)
+static void drm_bo_usage_deref_unlocked(struct drm_buffer_object ** bo)
 {
        struct drm_buffer_object *tmp_bo = *bo;
-       drm_device_t *dev = tmp_bo->dev;
+       struct drm_device *dev = tmp_bo->dev;
 
        *bo = NULL;
        if (atomic_dec_and_test(&tmp_bo->usage)) {
@@ -535,16 +536,16 @@ static void drm_bo_usage_deref_unlocked(drm_buffer_object_t ** bo)
  * and deregister fence object usage.
  */
 
-int drm_fence_buffer_objects(drm_file_t * priv,
+int drm_fence_buffer_objects(struct drm_file * file_priv,
                             struct list_head *list,
                             uint32_t fence_flags,
-                            drm_fence_object_t * fence,
-                            drm_fence_object_t ** used_fence)
+                            struct drm_fence_object * fence,
+                            struct drm_fence_object ** used_fence)
 {
-       drm_device_t *dev = priv->head->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_device *dev = file_priv->head->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
 
-       drm_buffer_object_t *entry;
+       struct drm_buffer_object *entry;
        uint32_t fence_type = 0;
        int count = 0;
        int ret = 0;
@@ -602,7 +603,7 @@ int drm_fence_buffer_objects(drm_file_t * priv,
        l = f_list.next;
        while (l != &f_list) {
                prefetch(l->next);
-               entry = list_entry(l, drm_buffer_object_t, lru);
+               entry = list_entry(l, struct drm_buffer_object, lru);
                atomic_inc(&entry->usage);
                mutex_unlock(&dev->struct_mutex);
                mutex_lock(&entry->mutex);
@@ -635,12 +636,12 @@ EXPORT_SYMBOL(drm_fence_buffer_objects);
  * bo->mutex locked
  */
 
-static int drm_bo_evict(drm_buffer_object_t * bo, unsigned mem_type,
+static int drm_bo_evict(struct drm_buffer_object * bo, unsigned mem_type,
                        int no_wait)
 {
        int ret = 0;
-       drm_device_t *dev = bo->dev;
-       drm_bo_mem_reg_t evict_mem;
+       struct drm_device *dev = bo->dev;
+       struct drm_bo_mem_reg evict_mem;
 
        /*
         * Someone might have modified the buffer before we took the buffer mutex.
@@ -705,14 +706,14 @@ static int drm_bo_evict(drm_buffer_object_t * bo, unsigned mem_type,
        return ret;
 }
 
-static int drm_bo_mem_force_space(drm_device_t * dev,
-                                 drm_bo_mem_reg_t * mem,
+static int drm_bo_mem_force_space(struct drm_device * dev,
+                                 struct drm_bo_mem_reg * mem,
                                  uint32_t mem_type, int no_wait)
 {
-       drm_mm_node_t *node;
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_buffer_object_t *entry;
-       drm_mem_type_manager_t *man = &bm->man[mem_type];
+       struct drm_mm_node *node;
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_buffer_object *entry;
+       struct drm_mem_type_manager *man = &bm->man[mem_type];
        struct list_head *lru;
        unsigned long num_pages = mem->num_pages;
        int ret;
@@ -728,7 +729,7 @@ static int drm_bo_mem_force_space(drm_device_t * dev,
                if (lru->next == lru)
                        break;
 
-               entry = list_entry(lru->next, drm_buffer_object_t, lru);
+               entry = list_entry(lru->next, struct drm_buffer_object, lru);
                atomic_inc(&entry->usage);
                mutex_unlock(&dev->struct_mutex);
                mutex_lock(&entry->mutex);
@@ -754,7 +755,7 @@ static int drm_bo_mem_force_space(drm_device_t * dev,
        return 0;
 }
 
-static int drm_bo_mt_compatible(drm_mem_type_manager_t * man,
+static int drm_bo_mt_compatible(struct drm_mem_type_manager * man,
                                uint32_t mem_type,
                                uint32_t mask, uint32_t * res_mask)
 {
@@ -791,12 +792,12 @@ static int drm_bo_mt_compatible(drm_mem_type_manager_t * man,
        return 1;
 }
 
-int drm_bo_mem_space(drm_buffer_object_t * bo,
-                    drm_bo_mem_reg_t * mem, int no_wait)
+int drm_bo_mem_space(struct drm_buffer_object * bo,
+                    struct drm_bo_mem_reg * mem, int no_wait)
 {
-       drm_device_t *dev = bo->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_mem_type_manager_t *man;
+       struct drm_device *dev = bo->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_mem_type_manager *man;
 
        uint32_t num_prios = dev->driver->bo_driver->num_mem_type_prio;
        const uint32_t *prios = dev->driver->bo_driver->mem_type_prio;
@@ -806,7 +807,7 @@ int drm_bo_mem_space(drm_buffer_object_t * bo,
        int type_found = 0;
        int type_ok = 0;
        int has_eagain = 0;
-       drm_mm_node_t *node = NULL;
+       struct drm_mm_node *node = NULL;
        int ret;
 
        mem->mm_node = NULL;
@@ -883,8 +884,8 @@ int drm_bo_mem_space(drm_buffer_object_t * bo,
 
 EXPORT_SYMBOL(drm_bo_mem_space);
 
-static int drm_bo_new_mask(drm_buffer_object_t * bo,
-                          uint32_t new_mask, uint32_t hint)
+static int drm_bo_new_mask(struct drm_buffer_object * bo,
+                          uint64_t new_mask, uint32_t hint)
 {
        uint32_t new_props;
 
@@ -921,25 +922,25 @@ static int drm_bo_new_mask(drm_buffer_object_t * bo,
  * Call dev->struct_mutex locked.
  */
 
-drm_buffer_object_t *drm_lookup_buffer_object(drm_file_t * priv,
+struct drm_buffer_object *drm_lookup_buffer_object(struct drm_file *file_priv,
                                              uint32_t handle, int check_owner)
 {
-       drm_user_object_t *uo;
-       drm_buffer_object_t *bo;
+       struct drm_user_object *uo;
+       struct drm_buffer_object *bo;
 
-       uo = drm_lookup_user_object(priv, handle);
+       uo = drm_lookup_user_object(file_priv, handle);
 
        if (!uo || (uo->type != drm_buffer_type)) {
                DRM_ERROR("Could not find buffer object 0x%08x\n", handle);
                return NULL;
        }
 
-       if (check_owner && priv != uo->owner) {
-               if (!drm_lookup_ref_object(priv, uo, _DRM_REF_USE))
+       if (check_owner && file_priv != uo->owner) {
+               if (!drm_lookup_ref_object(file_priv, uo, _DRM_REF_USE))
                        return NULL;
        }
 
-       bo = drm_user_object_entry(uo, drm_buffer_object_t, base);
+       bo = drm_user_object_entry(uo, struct drm_buffer_object, base);
        atomic_inc(&bo->usage);
        return bo;
 }
@@ -950,9 +951,9 @@ drm_buffer_object_t *drm_lookup_buffer_object(drm_file_t * priv,
  * Doesn't do any fence flushing as opposed to the drm_bo_busy function.
  */
 
-static int drm_bo_quick_busy(drm_buffer_object_t * bo)
+static int drm_bo_quick_busy(struct drm_buffer_object * bo)
 {
-       drm_fence_object_t *fence = bo->fence;
+       struct drm_fence_object *fence = bo->fence;
 
        BUG_ON(bo->priv_flags & _DRM_BO_FLAG_UNFENCED);
        if (fence) {
@@ -970,9 +971,9 @@ static int drm_bo_quick_busy(drm_buffer_object_t * bo)
  * Returns 1 if the buffer is currently rendered to or from. 0 otherwise.
  */
 
-static int drm_bo_busy(drm_buffer_object_t * bo)
+static int drm_bo_busy(struct drm_buffer_object * bo)
 {
-       drm_fence_object_t *fence = bo->fence;
+       struct drm_fence_object *fence = bo->fence;
 
        BUG_ON(bo->priv_flags & _DRM_BO_FLAG_UNFENCED);
        if (fence) {
@@ -990,7 +991,7 @@ static int drm_bo_busy(drm_buffer_object_t * bo)
        return 0;
 }
 
-static int drm_bo_read_cached(drm_buffer_object_t * bo)
+static int drm_bo_read_cached(struct drm_buffer_object * bo)
 {
        int ret = 0;
 
@@ -1004,7 +1005,7 @@ static int drm_bo_read_cached(drm_buffer_object_t * bo)
  * Wait until a buffer is unmapped.
  */
 
-static int drm_bo_wait_unmapped(drm_buffer_object_t * bo, int no_wait)
+static int drm_bo_wait_unmapped(struct drm_buffer_object * bo, int no_wait)
 {
        int ret = 0;
 
@@ -1020,7 +1021,7 @@ static int drm_bo_wait_unmapped(drm_buffer_object_t * bo, int no_wait)
        return ret;
 }
 
-static int drm_bo_check_unfenced(drm_buffer_object_t * bo)
+static int drm_bo_check_unfenced(struct drm_buffer_object * bo)
 {
        int ret;
 
@@ -1042,7 +1043,7 @@ static int drm_bo_check_unfenced(drm_buffer_object_t * bo)
  * the buffer "unfenced" after validating, but before fencing.
  */
 
-static int drm_bo_wait_unfenced(drm_buffer_object_t * bo, int no_wait,
+static int drm_bo_wait_unfenced(struct drm_buffer_object * bo, int no_wait,
                                int eagain_if_wait)
 {
        int ret = (bo->priv_flags & _DRM_BO_FLAG_UNFENCED);
@@ -1075,8 +1076,8 @@ static int drm_bo_wait_unfenced(drm_buffer_object_t * bo, int no_wait,
  * Bo locked.
  */
 
-static void drm_bo_fill_rep_arg(drm_buffer_object_t * bo,
-                               drm_bo_arg_reply_t * rep)
+static void drm_bo_fill_rep_arg(struct drm_buffer_object * bo,
+                               struct drm_bo_info_rep *rep)
 {
        rep->handle = bo->base.hash.key;
        rep->flags = bo->mem.flags;
@@ -1102,17 +1103,17 @@ static void drm_bo_fill_rep_arg(drm_buffer_object_t * bo,
  * unregistered.
  */
 
-static int drm_buffer_object_map(drm_file_t * priv, uint32_t handle,
+static int drm_buffer_object_map(struct drm_file *file_priv, uint32_t handle,
                                 uint32_t map_flags, unsigned hint,
-                                drm_bo_arg_reply_t * rep)
+                                struct drm_bo_info_rep *rep)
 {
-       drm_buffer_object_t *bo;
-       drm_device_t *dev = priv->head->dev;
+       struct drm_buffer_object *bo;
+       struct drm_device *dev = file_priv->head->dev;
        int ret = 0;
        int no_wait = hint & DRM_BO_HINT_DONT_BLOCK;
 
        mutex_lock(&dev->struct_mutex);
-       bo = drm_lookup_buffer_object(priv, handle, 1);
+       bo = drm_lookup_buffer_object(file_priv, handle, 1);
        mutex_unlock(&dev->struct_mutex);
 
        if (!bo)
@@ -1169,7 +1170,7 @@ static int drm_buffer_object_map(drm_file_t * priv, uint32_t handle,
        }
 
        mutex_lock(&dev->struct_mutex);
-       ret = drm_add_ref_object(priv, &bo->base, _DRM_REF_TYPE1);
+       ret = drm_add_ref_object(file_priv, &bo->base, _DRM_REF_TYPE1);
        mutex_unlock(&dev->struct_mutex);
        if (ret) {
                if (atomic_add_negative(-1, &bo->mapped))
@@ -1183,28 +1184,28 @@ static int drm_buffer_object_map(drm_file_t * priv, uint32_t handle,
        return ret;
 }
 
-static int drm_buffer_object_unmap(drm_file_t * priv, uint32_t handle)
+static int drm_buffer_object_unmap(struct drm_file *file_priv, uint32_t handle)
 {
-       drm_device_t *dev = priv->head->dev;
-       drm_buffer_object_t *bo;
-       drm_ref_object_t *ro;
+       struct drm_device *dev = file_priv->head->dev;
+       struct drm_buffer_object *bo;
+       struct drm_ref_object *ro;
        int ret = 0;
 
        mutex_lock(&dev->struct_mutex);
 
-       bo = drm_lookup_buffer_object(priv, handle, 1);
+       bo = drm_lookup_buffer_object(file_priv, handle, 1);
        if (!bo) {
                ret = -EINVAL;
                goto out;
        }
 
-       ro = drm_lookup_ref_object(priv, &bo->base, _DRM_REF_TYPE1);
+       ro = drm_lookup_ref_object(file_priv, &bo->base, _DRM_REF_TYPE1);
        if (!ro) {
                ret = -EINVAL;
                goto out;
        }
 
-       drm_remove_ref_object(priv, ro);
+       drm_remove_ref_object(file_priv, ro);
        drm_bo_usage_deref_locked(&bo);
       out:
        mutex_unlock(&dev->struct_mutex);
@@ -1215,12 +1216,12 @@ static int drm_buffer_object_unmap(drm_file_t * priv, uint32_t handle)
  * Call struct-sem locked.
  */
 
-static void drm_buffer_user_object_unmap(drm_file_t * priv,
-                                        drm_user_object_t * uo,
-                                        drm_ref_t action)
+static void drm_buffer_user_object_unmap(struct drm_file *file_priv,
+                                        struct drm_user_object * uo,
+                                        enum drm_ref_type action)
 {
-       drm_buffer_object_t *bo =
-           drm_user_object_entry(uo, drm_buffer_object_t, base);
+       struct drm_buffer_object *bo =
+           drm_user_object_entry(uo, struct drm_buffer_object, base);
 
        /*
         * We DON'T want to take the bo->lock here, because we want to
@@ -1238,13 +1239,13 @@ static void drm_buffer_user_object_unmap(drm_file_t * priv,
  * Note that new_mem_flags are NOT transferred to the bo->mem.mask.
  */
 
-int drm_bo_move_buffer(drm_buffer_object_t * bo, uint32_t new_mem_flags,
+int drm_bo_move_buffer(struct drm_buffer_object * bo, uint32_t new_mem_flags,
                       int no_wait, int move_unfenced)
 {
-       drm_device_t *dev = bo->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_device *dev = bo->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
        int ret = 0;
-       drm_bo_mem_reg_t mem;
+       struct drm_bo_mem_reg mem;
        /*
         * Flush outstanding fences.
         */
@@ -1300,7 +1301,7 @@ int drm_bo_move_buffer(drm_buffer_object_t * bo, uint32_t new_mem_flags,
        return ret;
 }
 
-static int drm_bo_mem_compat(drm_bo_mem_reg_t * mem)
+static int drm_bo_mem_compat(struct drm_bo_mem_reg * mem)
 {
        uint32_t flag_diff = (mem->mask ^ mem->flags);
 
@@ -1318,10 +1319,10 @@ static int drm_bo_mem_compat(drm_bo_mem_reg_t * mem)
        return 1;
 }
 
-static int drm_bo_check_fake(drm_device_t * dev, drm_bo_mem_reg_t * mem)
+static int drm_bo_check_fake(struct drm_device * dev, struct drm_bo_mem_reg * mem)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_mem_type_manager_t *man;
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_mem_type_manager *man;
        uint32_t num_prios = dev->driver->bo_driver->num_mem_type_prio;
        const uint32_t *prios = dev->driver->bo_driver->mem_type_prio;
        uint32_t i;
@@ -1351,7 +1352,8 @@ static int drm_bo_check_fake(drm_device_t * dev, drm_bo_mem_reg_t * mem)
                return 0;
        }
 
-       DRM_ERROR("Illegal fake buffer flags 0x%08x\n", mem->mask);
+       DRM_ERROR("Illegal fake buffer flags 0x%016llx\n",
+                 (unsigned long long) mem->mask);
        return -EINVAL;
 }
 
@@ -1359,23 +1361,46 @@ static int drm_bo_check_fake(drm_device_t * dev, drm_bo_mem_reg_t * mem)
  * bo locked.
  */
 
-static int drm_buffer_object_validate(drm_buffer_object_t * bo,
+static int drm_buffer_object_validate(struct drm_buffer_object * bo,
+                                     uint32_t fence_class,
                                      int move_unfenced, int no_wait)
 {
-       drm_device_t *dev = bo->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_bo_driver_t *driver = dev->driver->bo_driver;
+       struct drm_device *dev = bo->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_bo_driver *driver = dev->driver->bo_driver;
+       uint32_t ftype;
        int ret;
 
-       DRM_DEBUG("New flags 0x%08x, Old flags 0x%08x\n", bo->mem.mask,
-                 bo->mem.flags);
-       ret =
-           driver->fence_type(bo, &bo->fence_class, &bo->fence_type);
+       DRM_DEBUG("New flags 0x%016llx, Old flags 0x%016llx\n",
+                 (unsigned long long) bo->mem.mask,
+                 (unsigned long long) bo->mem.flags);
+
+       ret = driver->fence_type(bo, &ftype);
+
        if (ret) {
                DRM_ERROR("Driver did not support given buffer permissions\n");
                return ret;
        }
 
+       /*
+        * We're switching command submission mechanism,
+        * or cannot simply rely on the hardware serializing for us.
+        *
+        * Wait for buffer idle.
+        */
+
+       if ((fence_class != bo->fence_class) ||
+           ((ftype ^ bo->fence_type) & bo->fence_type)) {
+
+               ret = drm_bo_wait(bo, 0, 0, no_wait);
+
+               if (ret)
+                       return ret;
+
+       }
+       
+       bo->fence_class = fence_class;
+       bo->fence_type = ftype;
        ret = drm_bo_wait_unmapped(bo, no_wait);
        if (ret)
                return ret;
@@ -1465,17 +1490,19 @@ static int drm_buffer_object_validate(drm_buffer_object_t * bo,
        return 0;
 }
 
-static int drm_bo_handle_validate(drm_file_t * priv, uint32_t handle,
-                                 uint32_t flags, uint32_t mask, uint32_t hint,
-                                 drm_bo_arg_reply_t * rep)
+static int drm_bo_handle_validate(struct drm_file *file_priv,
+                                 uint32_t handle,
+                                 uint32_t fence_class,
+                                 uint64_t flags, uint64_t mask, uint32_t hint,
+                                 struct drm_bo_info_rep *rep)
 {
-       struct drm_device *dev = priv->head->dev;
-       drm_buffer_object_t *bo;
+       struct drm_device *dev = file_priv->head->dev;
+       struct drm_buffer_object *bo;
        int ret;
        int no_wait = hint & DRM_BO_HINT_DONT_BLOCK;
 
        mutex_lock(&dev->struct_mutex);
-       bo = drm_lookup_buffer_object(priv, handle, 1);
+       bo = drm_lookup_buffer_object(file_priv, handle, 1);
        mutex_unlock(&dev->struct_mutex);
        if (!bo) {
                return -EINVAL;
@@ -1493,7 +1520,8 @@ static int drm_bo_handle_validate(drm_file_t * priv, uint32_t handle,
                goto out;
 
        ret =
-           drm_buffer_object_validate(bo, !(hint & DRM_BO_HINT_DONT_FENCE),
+           drm_buffer_object_validate(bo, fence_class,
+                                      !(hint & DRM_BO_HINT_DONT_FENCE),
                                       no_wait);
        drm_bo_fill_rep_arg(bo, rep);
 
@@ -1505,14 +1533,14 @@ static int drm_bo_handle_validate(drm_file_t * priv, uint32_t handle,
        return ret;
 }
 
-static int drm_bo_handle_info(drm_file_t * priv, uint32_t handle,
-                             drm_bo_arg_reply_t * rep)
+static int drm_bo_handle_info(struct drm_file *file_priv, uint32_t handle,
+                             struct drm_bo_info_rep *rep)
 {
-       struct drm_device *dev = priv->head->dev;
-       drm_buffer_object_t *bo;
+       struct drm_device *dev = file_priv->head->dev;
+       struct drm_buffer_object *bo;
 
        mutex_lock(&dev->struct_mutex);
-       bo = drm_lookup_buffer_object(priv, handle, 1);
+       bo = drm_lookup_buffer_object(file_priv, handle, 1);
        mutex_unlock(&dev->struct_mutex);
 
        if (!bo) {
@@ -1527,16 +1555,17 @@ static int drm_bo_handle_info(drm_file_t * priv, uint32_t handle,
        return 0;
 }
 
-static int drm_bo_handle_wait(drm_file_t * priv, uint32_t handle,
-                             uint32_t hint, drm_bo_arg_reply_t * rep)
+static int drm_bo_handle_wait(struct drm_file *file_priv, uint32_t handle,
+                             uint32_t hint,
+                             struct drm_bo_info_rep *rep)
 {
-       struct drm_device *dev = priv->head->dev;
-       drm_buffer_object_t *bo;
+       struct drm_device *dev = file_priv->head->dev;
+       struct drm_buffer_object *bo;
        int no_wait = hint & DRM_BO_HINT_DONT_BLOCK;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
-       bo = drm_lookup_buffer_object(priv, handle, 1);
+       bo = drm_lookup_buffer_object(file_priv, handle, 1);
        mutex_unlock(&dev->struct_mutex);
 
        if (!bo) {
@@ -1559,17 +1588,17 @@ static int drm_bo_handle_wait(drm_file_t * priv, uint32_t handle,
        return ret;
 }
 
-int drm_buffer_object_create(drm_device_t *dev,
+int drm_buffer_object_create(struct drm_device *dev,
                             unsigned long size,
-                            drm_bo_type_t type,
-                            uint32_t mask,
+                            enum drm_bo_type type,
+                            uint64_t mask,
                             uint32_t hint,
                             uint32_t page_alignment,
                             unsigned long buffer_start,
-                            drm_buffer_object_t ** buf_obj)
+                            struct drm_buffer_object ** buf_obj)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_buffer_object_t *bo;
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_buffer_object *bo;
        int ret = 0;
        unsigned long num_pages;
 
@@ -1614,8 +1643,8 @@ int drm_buffer_object_create(drm_device_t *dev,
                bo->buffer_start = buffer_start;
        }
        bo->priv_flags = 0;
-       bo->mem.flags = 0;
-       bo->mem.mask = 0;
+       bo->mem.flags = 0ULL;
+       bo->mem.mask = 0ULL;
        atomic_inc(&bm->count);
        ret = drm_bo_new_mask(bo, mask, hint);
 
@@ -1629,7 +1658,7 @@ int drm_buffer_object_create(drm_device_t *dev,
                if (ret)
                        goto out_err;
        }
-       ret = drm_buffer_object_validate(bo, 0, hint & DRM_BO_HINT_DONT_BLOCK);
+       ret = drm_buffer_object_validate(bo, 0, 0, hint & DRM_BO_HINT_DONT_BLOCK);
        if (ret)
                goto out_err;
 
@@ -1644,14 +1673,15 @@ int drm_buffer_object_create(drm_device_t *dev,
        return ret;
 }
 
-static int drm_bo_add_user_object(drm_file_t * priv, drm_buffer_object_t * bo,
+static int drm_bo_add_user_object(struct drm_file *file_priv,
+                                 struct drm_buffer_object *bo,
                                  int shareable)
 {
-       drm_device_t *dev = priv->head->dev;
+       struct drm_device *dev = file_priv->head->dev;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
-       ret = drm_add_user_object(priv, &bo->base, shareable);
+       ret = drm_add_user_object(file_priv, &bo->base, shareable);
        if (ret)
                goto out;
 
@@ -1665,21 +1695,21 @@ static int drm_bo_add_user_object(drm_file_t * priv, drm_buffer_object_t * bo,
        return ret;
 }
 
-static int drm_bo_lock_test(drm_device_t * dev, struct file *filp)
+static int drm_bo_lock_test(struct drm_device * dev, struct drm_file *file_priv)
 {
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
        return 0;
 }
 
-int drm_bo_ioctl(DRM_IOCTL_ARGS)
+int drm_bo_op_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_bo_arg_t arg;
-       drm_bo_arg_request_t *req = &arg.d.req;
-       drm_bo_arg_reply_t rep;
-       unsigned long next;
-       drm_user_object_t *uo;
-       drm_buffer_object_t *entry;
+       struct drm_bo_op_arg curarg;
+       struct drm_bo_op_arg *arg = data;
+       struct drm_bo_op_req *req = &arg->d.req;
+       struct drm_bo_info_rep rep;
+       unsigned long next = 0;
+       void __user *curuserarg = NULL;
+       int ret;
 
        if (!dev->bm.initialized) {
                DRM_ERROR("Buffer object manager is not initialized.\n");
@@ -1687,122 +1717,239 @@ int drm_bo_ioctl(DRM_IOCTL_ARGS)
        }
 
        do {
-               DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
+               if (next != 0) {
+                       curuserarg = (void __user *)next;
+                       if (copy_from_user(&curarg, curuserarg,
+                                          sizeof(curarg)) != 0)
+                               return -EFAULT;
+                       arg = &curarg;
+               }
 
-               if (arg.handled) {
-                       data = arg.next;
+               if (arg->handled) {
+                       next = arg->next;
                        continue;
                }
-
-               rep.ret = 0;
+               req = &arg->d.req;
+               ret = 0;
                switch (req->op) {
-               case drm_bo_create:
-                       rep.ret = drm_bo_lock_test(dev, filp);
-                       if (rep.ret)
-                               break;  
-                       rep.ret =
-                           drm_buffer_object_create(priv->head->dev,
-                                                    req->size,
-                                                    req->type,
-                                                    req->mask,
-                                                    req->hint,
-                                                    req->page_alignment,
-                                                    req->buffer_start, &entry);
-                       if (rep.ret)
-                               break;
-
-                       rep.ret =
-                           drm_bo_add_user_object(priv, entry,
-                                                  req->
-                                                  mask &
-                                                  DRM_BO_FLAG_SHAREABLE);
-                       if (rep.ret)
-                               drm_bo_usage_deref_unlocked(&entry);
-
-                       if (rep.ret)
-                               break;
-
-                       mutex_lock(&entry->mutex);
-                       drm_bo_fill_rep_arg(entry, &rep);
-                       mutex_unlock(&entry->mutex);
-                       break;
-               case drm_bo_unmap:
-                       rep.ret = drm_buffer_object_unmap(priv, req->handle);
-                       break;
-               case drm_bo_map:
-                       rep.ret = drm_buffer_object_map(priv, req->handle,
-                                                       req->mask,
-                                                       req->hint, &rep);
-                       break;
-               case drm_bo_destroy:
-                       mutex_lock(&dev->struct_mutex);
-                       uo = drm_lookup_user_object(priv, req->handle);
-                       if (!uo || (uo->type != drm_buffer_type)
-                           || uo->owner != priv) {
-                               mutex_unlock(&dev->struct_mutex);
-                               rep.ret = -EINVAL;
-                               break;
-                       }
-                       rep.ret = drm_remove_user_object(priv, uo);
-                       mutex_unlock(&dev->struct_mutex);
-                       break;
-               case drm_bo_reference:
-                       rep.ret = drm_user_object_ref(priv, req->handle,
-                                                     drm_buffer_type, &uo);
-                       if (rep.ret)
-                               break;
-
-                       rep.ret = drm_bo_handle_info(priv, req->handle, &rep);
-                       break;
-               case drm_bo_unreference:
-                       rep.ret = drm_user_object_unref(priv, req->handle,
-                                                       drm_buffer_type);
-                       break;
                case drm_bo_validate:
-                       rep.ret = drm_bo_lock_test(dev, filp);
-
-                       if (rep.ret)
+                       ret = drm_bo_lock_test(dev, file_priv);
+                       if (ret)
                                break;
-                       rep.ret =
-                           drm_bo_handle_validate(priv, req->handle, req->mask,
-                                                  req->arg_handle, req->hint,
-                                                  &rep);
+                       ret = drm_bo_handle_validate(file_priv, req->bo_req.handle,
+                                                    req->bo_req.fence_class,
+                                                    req->bo_req.flags,
+                                                    req->bo_req.mask,
+                                                    req->bo_req.hint,
+                                                    &rep);
                        break;
                case drm_bo_fence:
-                       rep.ret = drm_bo_lock_test(dev, filp);
-                       if (rep.ret)
-                               break;
-                        /**/ break;
-               case drm_bo_info:
-                       rep.ret = drm_bo_handle_info(priv, req->handle, &rep);
-                       break;
-               case drm_bo_wait_idle:
-                       rep.ret = drm_bo_handle_wait(priv, req->handle,
-                                                    req->hint, &rep);
+                       ret = -EINVAL;
+                       DRM_ERROR("Function is not implemented yet.\n");
                        break;
                case drm_bo_ref_fence:
-                       rep.ret = -EINVAL;
+                       ret = -EINVAL;
                        DRM_ERROR("Function is not implemented yet.\n");
+                       break;
                default:
-                       rep.ret = -EINVAL;
+                       ret = -EINVAL;
                }
-               next = arg.next;
+               next = arg->next;
 
                /*
                 * A signal interrupted us. Make sure the ioctl is restartable.
                 */
 
-               if (rep.ret == -EAGAIN)
+               if (ret == -EAGAIN)
                        return -EAGAIN;
 
-               arg.handled = 1;
-               arg.d.rep = rep;
-               DRM_COPY_TO_USER_IOCTL((void __user *)data, arg, sizeof(arg));
-               data = next;
-       } while (data);
+               arg->handled = 1;
+               arg->d.rep.ret = ret;
+               arg->d.rep.bo_info = rep;
+               if (arg != data) {
+                       if (copy_to_user(curuserarg, &curarg,
+                                        sizeof(curarg)) != 0)
+                               return -EFAULT;
+               }
+       } while (next != 0);
        return 0;
 }
 
+int drm_bo_create_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_create_arg *arg = data;
+       struct drm_bo_create_req *req = &arg->d.req;
+       struct drm_bo_info_rep *rep = &arg->d.rep;
+       struct drm_buffer_object *entry;
+       int ret = 0;
+
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized.\n");
+               return -EINVAL;
+       }
+
+       ret = drm_bo_lock_test(dev, file_priv);
+       if (ret)
+               goto out;
+
+       ret = drm_buffer_object_create(file_priv->head->dev,
+                                      req->size, req->type, req->mask,
+                                      req->hint, req->page_alignment,
+                                      req->buffer_start, &entry);
+       if (ret)
+               goto out;
+       
+       ret = drm_bo_add_user_object(file_priv, entry,
+                                    req->mask & DRM_BO_FLAG_SHAREABLE);
+       if (ret) {
+               drm_bo_usage_deref_unlocked(&entry);
+               goto out;
+       }
+       
+       mutex_lock(&entry->mutex);
+       drm_bo_fill_rep_arg(entry, rep);
+       mutex_unlock(&entry->mutex);
+
+out:
+       return ret;
+}
+
+
+int drm_bo_destroy_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_handle_arg *arg = data;
+       struct drm_user_object *uo;
+       int ret = 0;
+
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized.\n");
+               return -EINVAL;
+       }
+
+       mutex_lock(&dev->struct_mutex);
+       uo = drm_lookup_user_object(file_priv, arg->handle);
+       if (!uo || (uo->type != drm_buffer_type) || uo->owner != file_priv) {
+               mutex_unlock(&dev->struct_mutex);
+               return -EINVAL;
+       }
+       ret = drm_remove_user_object(file_priv, uo);
+       mutex_unlock(&dev->struct_mutex);
+       
+       return ret;
+}
+
+int drm_bo_map_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_map_wait_idle_arg *arg = data;
+       struct drm_bo_info_req *req = &arg->d.req;
+       struct drm_bo_info_rep *rep = &arg->d.rep;
+       int ret;
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized.\n");
+               return -EINVAL;
+       }
+
+       ret = drm_buffer_object_map(file_priv, req->handle, req->mask,
+                                   req->hint, rep);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+int drm_bo_unmap_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_handle_arg *arg = data;
+       int ret;
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized.\n");
+               return -EINVAL;
+       }
+
+       ret = drm_buffer_object_unmap(file_priv, arg->handle);
+       return ret;
+}
+
+
+int drm_bo_reference_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_reference_info_arg *arg = data;
+       struct drm_bo_handle_arg *req = &arg->d.req;
+       struct drm_bo_info_rep *rep = &arg->d.rep;
+       struct drm_user_object *uo;
+       int ret;
+
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized.\n");
+               return -EINVAL;
+       }
+
+       ret = drm_user_object_ref(file_priv, req->handle,
+                                 drm_buffer_type, &uo);
+       if (ret)
+               return ret;
+       
+       ret = drm_bo_handle_info(file_priv, req->handle, rep);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+int drm_bo_unreference_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_handle_arg *arg = data;
+       int ret = 0;
+
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized.\n");
+               return -EINVAL;
+       }
+
+       ret = drm_user_object_unref(file_priv, arg->handle, drm_buffer_type);
+       return ret;
+}
+
+int drm_bo_info_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_reference_info_arg *arg = data;
+       struct drm_bo_handle_arg *req = &arg->d.req;
+       struct drm_bo_info_rep *rep = &arg->d.rep;
+       int ret;
+
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized.\n");
+               return -EINVAL;
+       }
+
+       ret = drm_bo_handle_info(file_priv, req->handle, rep);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+int drm_bo_wait_idle_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_map_wait_idle_arg *arg = data;
+       struct drm_bo_info_req *req = &arg->d.req;
+       struct drm_bo_info_rep *rep = &arg->d.rep;
+       int ret;
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized.\n");
+               return -EINVAL;
+       }
+
+       ret = drm_bo_handle_wait(file_priv, req->handle,
+                                req->hint, rep);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+
+
 /**
  *Clean the unfenced list and put on regular LRU.
  *This is part of the memory manager cleanup and should only be
@@ -1810,18 +1957,18 @@ int drm_bo_ioctl(DRM_IOCTL_ARGS)
  *Call dev->struct_sem locked.
  */
 
-static void drm_bo_clean_unfenced(drm_device_t *dev)
+static void drm_bo_clean_unfenced(struct drm_device *dev)
 {
-       drm_buffer_manager_t *bm  = &dev->bm;
+       struct drm_buffer_manager *bm  = &dev->bm;
        struct list_head *head, *list;
-       drm_buffer_object_t *entry;
+       struct drm_buffer_object *entry;
 
        head = &bm->unfenced;
 
        list = head->next;
        while(list != head) {
                prefetch(list->next);
-               entry = list_entry(list, drm_buffer_object_t, lru);
+               entry = list_entry(list, struct drm_buffer_object, lru);
 
                atomic_inc(&entry->usage);
                mutex_unlock(&dev->struct_mutex);
@@ -1836,11 +1983,11 @@ static void drm_bo_clean_unfenced(drm_device_t *dev)
        }
 }
 
-static int drm_bo_leave_list(drm_buffer_object_t * bo,
+static int drm_bo_leave_list(struct drm_buffer_object * bo,
                             uint32_t mem_type,
                             int free_pinned, int allow_errors)
 {
-       drm_device_t *dev = bo->dev;
+       struct drm_device *dev = bo->dev;
        int ret = 0;
 
        mutex_lock(&bo->mutex);
@@ -1887,20 +2034,20 @@ static int drm_bo_leave_list(drm_buffer_object_t * bo,
 }
 
 
-static drm_buffer_object_t *drm_bo_entry(struct list_head *list,
+static struct drm_buffer_object *drm_bo_entry(struct list_head *list,
                                         int pinned_list)
 {
        if (pinned_list)
-               return list_entry(list, drm_buffer_object_t, pinned_lru);
+               return list_entry(list, struct drm_buffer_object, pinned_lru);
        else
-               return list_entry(list, drm_buffer_object_t, lru);
+               return list_entry(list, struct drm_buffer_object, lru);
 }
 
 /*
  * dev->struct_mutex locked.
  */
 
-static int drm_bo_force_list_clean(drm_device_t * dev,
+static int drm_bo_force_list_clean(struct drm_device * dev,
                                   struct list_head *head,
                                   unsigned mem_type,
                                   int free_pinned,
@@ -1908,7 +2055,7 @@ static int drm_bo_force_list_clean(drm_device_t * dev,
                                   int pinned_list)
 {
        struct list_head *list, *next, *prev;
-       drm_buffer_object_t *entry, *nentry;
+       struct drm_buffer_object *entry, *nentry;
        int ret;
        int do_restart;
 
@@ -1965,10 +2112,10 @@ restart:
        return 0;
 }
 
-int drm_bo_clean_mm(drm_device_t * dev, unsigned mem_type)
+int drm_bo_clean_mm(struct drm_device * dev, unsigned mem_type)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_mem_type_manager_t *man = &bm->man[mem_type];
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_mem_type_manager *man = &bm->man[mem_type];
        int ret = -EINVAL;
 
        if (mem_type >= DRM_BO_MEM_TYPES) {
@@ -2007,11 +2154,11 @@ int drm_bo_clean_mm(drm_device_t * dev, unsigned mem_type)
  *point since we have the hardware lock.
  */
 
-static int drm_bo_lock_mm(drm_device_t * dev, unsigned mem_type)
+static int drm_bo_lock_mm(struct drm_device * dev, unsigned mem_type)
 {
        int ret;
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_mem_type_manager_t *man = &bm->man[mem_type];
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_mem_type_manager *man = &bm->man[mem_type];
 
        if (mem_type == 0 || mem_type >= DRM_BO_MEM_TYPES) {
                DRM_ERROR("Illegal memory manager memory type %u.\n", mem_type);
@@ -2033,13 +2180,13 @@ static int drm_bo_lock_mm(drm_device_t * dev, unsigned mem_type)
        return ret;
 }
 
-int drm_bo_init_mm(drm_device_t * dev,
+int drm_bo_init_mm(struct drm_device * dev,
                   unsigned type,
                   unsigned long p_offset, unsigned long p_size)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_buffer_manager *bm = &dev->bm;
        int ret = -EINVAL;
-       drm_mem_type_manager_t *man;
+       struct drm_mem_type_manager *man;
 
        if (type >= DRM_BO_MEM_TYPES) {
                DRM_ERROR("Illegal memory type %d\n", type);
@@ -2082,12 +2229,12 @@ EXPORT_SYMBOL(drm_bo_init_mm);
  * any clients still running when we set the initialized flag to zero.
  */
 
-int drm_bo_driver_finish(drm_device_t * dev)
+int drm_bo_driver_finish(struct drm_device * dev)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_buffer_manager *bm = &dev->bm;
        int ret = 0;
        unsigned i = DRM_BO_MEM_TYPES;
-       drm_mem_type_manager_t *man;
+       struct drm_mem_type_manager *man;
 
        mutex_lock(&dev->bm.init_mutex);
        mutex_lock(&dev->struct_mutex);
@@ -2133,10 +2280,10 @@ int drm_bo_driver_finish(drm_device_t * dev)
        return ret;
 }
 
-int drm_bo_driver_init(drm_device_t * dev)
+int drm_bo_driver_init(struct drm_device * dev)
 {
-       drm_bo_driver_t *driver = dev->driver->bo_driver;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_bo_driver *driver = dev->driver->bo_driver;
+       struct drm_buffer_manager *bm = &dev->bm;
        int ret = -EINVAL;
 
        mutex_lock(&dev->bm.init_mutex);
@@ -2172,81 +2319,141 @@ int drm_bo_driver_init(drm_device_t * dev)
 
 EXPORT_SYMBOL(drm_bo_driver_init);
 
-int drm_mm_init_ioctl(DRM_IOCTL_ARGS)
+int drm_mm_init_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_mm_init_arg *arg = data;
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_bo_driver *driver = dev->driver->bo_driver;
+       int ret;
+
+       if (!driver) {
+               DRM_ERROR("Buffer objects are not supported by this driver\n");
+               return -EINVAL;
+       }
+
+       ret = -EINVAL;
+       if (arg->magic != DRM_BO_INIT_MAGIC) {
+               DRM_ERROR("You are using an old libdrm that is not compatible with\n"
+                         "\tthe kernel DRM module. Please upgrade your libdrm.\n");
+               return -EINVAL;
+       }
+       if (arg->major != DRM_BO_INIT_MAJOR) {
+               DRM_ERROR("libdrm and kernel DRM buffer object interface major\n"
+                         "\tversion don't match. Got %d, expected %d,\n",
+                         arg->major, DRM_BO_INIT_MAJOR);
+               return -EINVAL;
+       }
+       if (arg->minor > DRM_BO_INIT_MINOR) {
+               DRM_ERROR("libdrm expects a newer DRM buffer object interface.\n"
+                         "\tlibdrm buffer object interface version is %d.%d.\n"
+                         "\tkernel DRM buffer object interface version is %d.%d\n",
+                         arg->major, arg->minor, DRM_BO_INIT_MAJOR, DRM_BO_INIT_MINOR);
+               return -EINVAL;
+       }
+
+       mutex_lock(&dev->bm.init_mutex);
+       mutex_lock(&dev->struct_mutex);
+       if (!bm->initialized) {
+               DRM_ERROR("DRM memory manager was not initialized.\n");
+               goto out;
+       }
+       if (arg->mem_type == 0) {
+               DRM_ERROR("System memory buffers already initialized.\n");
+               goto out;
+       }
+       ret = drm_bo_init_mm(dev, arg->mem_type,
+                            arg->p_offset, arg->p_size);
+
+out:
+       mutex_unlock(&dev->struct_mutex);
+       mutex_unlock(&dev->bm.init_mutex);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+int drm_mm_takedown_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
+       struct drm_mm_type_arg *arg = data;
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_bo_driver *driver = dev->driver->bo_driver;
+       int ret;
 
-       int ret = 0;
-       drm_mm_init_arg_t arg;
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_bo_driver_t *driver = dev->driver->bo_driver;
+       if (!driver) {
+               DRM_ERROR("Buffer objects are not supported by this driver\n");
+               return -EINVAL;
+       }
+
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
+       mutex_lock(&dev->bm.init_mutex);
+       mutex_lock(&dev->struct_mutex);
+       ret = -EINVAL;
+       if (!bm->initialized) {
+               DRM_ERROR("DRM memory manager was not initialized\n");
+               goto out;
+       }
+       if (arg->mem_type == 0) {
+               DRM_ERROR("No takedown for System memory buffers.\n");
+               goto out;
+       }
+       ret = 0;
+       if (drm_bo_clean_mm(dev, arg->mem_type)) {
+               DRM_ERROR("Memory manager type %d not clean. "
+                         "Delaying takedown\n", arg->mem_type);
+       }
+out:
+       mutex_unlock(&dev->struct_mutex);
+       mutex_unlock(&dev->bm.init_mutex);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+int drm_mm_lock_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_mm_type_arg *arg = data;
+       struct drm_bo_driver *driver = dev->driver->bo_driver;
+       int ret;
 
        if (!driver) {
                DRM_ERROR("Buffer objects are not supported by this driver\n");
                return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
+       mutex_lock(&dev->bm.init_mutex);
+       mutex_lock(&dev->struct_mutex);
+       ret = drm_bo_lock_mm(dev, arg->mem_type);
+       mutex_unlock(&dev->struct_mutex);
+       mutex_unlock(&dev->bm.init_mutex);
+       if (ret)
+               return ret;
 
-       switch (arg.req.op) {
-       case mm_init:
-               ret = -EINVAL;
-               mutex_lock(&dev->bm.init_mutex);
-               mutex_lock(&dev->struct_mutex);
-               if (!bm->initialized) {
-                       DRM_ERROR("DRM memory manager was not initialized.\n");
-                       break;
-               }
-               if (arg.req.mem_type == 0) {
-                       DRM_ERROR
-                           ("System memory buffers already initialized.\n");
-                       break;
-               }
-               ret = drm_bo_init_mm(dev, arg.req.mem_type,
-                                    arg.req.p_offset, arg.req.p_size);
-               break;
-       case mm_takedown:
-               LOCK_TEST_WITH_RETURN(dev, filp);
-               mutex_lock(&dev->bm.init_mutex);
-               mutex_lock(&dev->struct_mutex);
-               ret = -EINVAL;
-               if (!bm->initialized) {
-                       DRM_ERROR("DRM memory manager was not initialized\n");
-                       break;
-               }
-               if (arg.req.mem_type == 0) {
-                       DRM_ERROR("No takedown for System memory buffers.\n");
-                       break;
-               }
-               ret = 0;
-               if (drm_bo_clean_mm(dev, arg.req.mem_type)) {
-                       DRM_ERROR("Memory manager type %d not clean. "
-                                 "Delaying takedown\n", arg.req.mem_type);
-               }
-               break;
-       case mm_lock:
-               LOCK_TEST_WITH_RETURN(dev, filp);
-               mutex_lock(&dev->bm.init_mutex);
-               mutex_lock(&dev->struct_mutex);
-               ret = drm_bo_lock_mm(dev, arg.req.mem_type);
-               break;
-       case mm_unlock:
-               LOCK_TEST_WITH_RETURN(dev, filp);
-               mutex_lock(&dev->bm.init_mutex);
-               mutex_lock(&dev->struct_mutex);
-               ret = 0;
-               break;
-       default:
-               DRM_ERROR("Function not implemented yet\n");
+       return 0;
+}
+
+int drm_mm_unlock_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       struct drm_bo_driver *driver = dev->driver->bo_driver;
+       int ret;
+
+       if (!driver) {
+               DRM_ERROR("Buffer objects are not supported by this driver\n");
                return -EINVAL;
        }
 
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
+       mutex_lock(&dev->bm.init_mutex);
+       mutex_lock(&dev->struct_mutex);
+       ret = 0;
+
        mutex_unlock(&dev->struct_mutex);
        mutex_unlock(&dev->bm.init_mutex);
        if (ret)
                return ret;
 
-       DRM_COPY_TO_USER_IOCTL((void __user *)data, arg, sizeof(arg));
        return 0;
 }
 
@@ -2254,10 +2461,10 @@ int drm_mm_init_ioctl(DRM_IOCTL_ARGS)
  * buffer object vm functions.
  */
 
-int drm_mem_reg_is_pci(drm_device_t * dev, drm_bo_mem_reg_t * mem)
+int drm_mem_reg_is_pci(struct drm_device * dev, struct drm_bo_mem_reg * mem)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_mem_type_manager_t *man = &bm->man[mem->mem_type];
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_mem_type_manager *man = &bm->man[mem->mem_type];
 
        if (!(man->flags & _DRM_FLAG_MEMTYPE_FIXED)) {
                if (mem->mem_type == DRM_BO_MEM_LOCAL)
@@ -2288,13 +2495,13 @@ EXPORT_SYMBOL(drm_mem_reg_is_pci);
  * Otherwise returns zero.
  */
 
-int drm_bo_pci_offset(drm_device_t * dev,
-                     drm_bo_mem_reg_t * mem,
+int drm_bo_pci_offset(struct drm_device *dev,
+                     struct drm_bo_mem_reg *mem,
                      unsigned long *bus_base,
                      unsigned long *bus_offset, unsigned long *bus_size)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_mem_type_manager_t *man = &bm->man[mem->mem_type];
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_mem_type_manager *man = &bm->man[mem->mem_type];
 
        *bus_size = 0;
        if (!(man->flags & _DRM_FLAG_MEMTYPE_MAPPABLE))
@@ -2317,9 +2524,9 @@ int drm_bo_pci_offset(drm_device_t * dev,
  * Call bo->mutex locked.
  */
 
-void drm_bo_unmap_virtual(drm_buffer_object_t * bo)
+void drm_bo_unmap_virtual(struct drm_buffer_object * bo)
 {
-       drm_device_t *dev = bo->dev;
+       struct drm_device *dev = bo->dev;
        loff_t offset = ((loff_t) bo->map_list.hash.key) << PAGE_SHIFT;
        loff_t holelen = ((loff_t) bo->mem.num_pages) << PAGE_SHIFT;
 
@@ -2329,11 +2536,11 @@ void drm_bo_unmap_virtual(drm_buffer_object_t * bo)
        unmap_mapping_range(dev->dev_mapping, offset, holelen, 1);
 }
 
-static void drm_bo_takedown_vm_locked(drm_buffer_object_t * bo)
+static void drm_bo_takedown_vm_locked(struct drm_buffer_object * bo)
 {
-       drm_map_list_t *list = &bo->map_list;
+       struct drm_map_list *list = &bo->map_list;
        drm_local_map_t *map;
-       drm_device_t *dev = bo->dev;
+       struct drm_device *dev = bo->dev;
 
        DRM_ASSERT_LOCKED(&dev->struct_mutex);
        if (list->user_token) {
@@ -2355,11 +2562,11 @@ static void drm_bo_takedown_vm_locked(drm_buffer_object_t * bo)
        drm_bo_usage_deref_locked(&bo);
 }
 
-static int drm_bo_setup_vm_locked(drm_buffer_object_t * bo)
+static int drm_bo_setup_vm_locked(struct drm_buffer_object * bo)
 {
-       drm_map_list_t *list = &bo->map_list;
+       struct drm_map_list *list = &bo->map_list;
        drm_local_map_t *map;
-       drm_device_t *dev = bo->dev;
+       struct drm_device *dev = bo->dev;
 
        DRM_ASSERT_LOCKED(&dev->struct_mutex);
        list->map = drm_ctl_calloc(1, sizeof(*map), DRM_MEM_BUFOBJ);
@@ -2391,7 +2598,7 @@ static int drm_bo_setup_vm_locked(drm_buffer_object_t * bo)
                return -ENOMEM;
        }
 
-       list->user_token = ((drm_u64_t) list->hash.key) << PAGE_SHIFT;
+       list->user_token = ((uint64_t) list->hash.key) << PAGE_SHIFT;
 
        return 0;
 }
index 8ef2a8f..5e21173 100644 (file)
@@ -35,9 +35,9 @@
  * have not been requested to free also pinned regions.
  */
 
-static void drm_bo_free_old_node(drm_buffer_object_t * bo)
+static void drm_bo_free_old_node(struct drm_buffer_object * bo)
 {
-       drm_bo_mem_reg_t *old_mem = &bo->mem;
+       struct drm_bo_mem_reg *old_mem = &bo->mem;
 
        if (old_mem->mm_node && (old_mem->mm_node != bo->pinned_node)) {
                mutex_lock(&bo->dev->struct_mutex);
@@ -48,11 +48,11 @@ static void drm_bo_free_old_node(drm_buffer_object_t * bo)
        old_mem->mm_node = NULL;
 }
 
-int drm_bo_move_ttm(drm_buffer_object_t * bo,
-                   int evict, int no_wait, drm_bo_mem_reg_t * new_mem)
+int drm_bo_move_ttm(struct drm_buffer_object * bo,
+                   int evict, int no_wait, struct drm_bo_mem_reg * new_mem)
 {
-       drm_ttm_t *ttm = bo->ttm;
-       drm_bo_mem_reg_t *old_mem = &bo->mem;
+       struct drm_ttm *ttm = bo->ttm;
+       struct drm_bo_mem_reg *old_mem = &bo->mem;
        uint32_t save_flags = old_mem->flags;
        uint32_t save_mask = old_mem->mask;
        int ret;
@@ -102,11 +102,11 @@ EXPORT_SYMBOL(drm_bo_move_ttm);
  * Call bo->mutex locked.
  */
 
-int drm_mem_reg_ioremap(drm_device_t * dev, drm_bo_mem_reg_t * mem,
+int drm_mem_reg_ioremap(struct drm_device * dev, struct drm_bo_mem_reg * mem,
                        void **virtual)
 {
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_mem_type_manager_t *man = &bm->man[mem->mem_type];
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_mem_type_manager *man = &bm->man[mem->mem_type];
        unsigned long bus_offset;
        unsigned long bus_size;
        unsigned long bus_base;
@@ -137,11 +137,11 @@ int drm_mem_reg_ioremap(drm_device_t * dev, drm_bo_mem_reg_t * mem,
  * Call bo->mutex locked.
  */
 
-void drm_mem_reg_iounmap(drm_device_t * dev, drm_bo_mem_reg_t * mem,
+void drm_mem_reg_iounmap(struct drm_device * dev, struct drm_bo_mem_reg * mem,
                         void *virtual)
 {
-       drm_buffer_manager_t *bm;
-       drm_mem_type_manager_t *man;
+       struct drm_buffer_manager *bm;
+       struct drm_mem_type_manager *man;
 
        bm = &dev->bm;
        man = &bm->man[mem->mem_type];
@@ -164,7 +164,7 @@ static int drm_copy_io_page(void *dst, void *src, unsigned long page)
        return 0;
 }
 
-static int drm_copy_io_ttm_page(drm_ttm_t * ttm, void *src, unsigned long page)
+static int drm_copy_io_ttm_page(struct drm_ttm * ttm, void *src, unsigned long page)
 {
        struct page *d = drm_ttm_get_page(ttm, page);
        void *dst;
@@ -182,7 +182,7 @@ static int drm_copy_io_ttm_page(drm_ttm_t * ttm, void *src, unsigned long page)
        return 0;
 }
 
-static int drm_copy_ttm_io_page(drm_ttm_t * ttm, void *dst, unsigned long page)
+static int drm_copy_ttm_io_page(struct drm_ttm * ttm, void *dst, unsigned long page)
 {
        struct page *s = drm_ttm_get_page(ttm, page);
        void *src;
@@ -200,14 +200,14 @@ static int drm_copy_ttm_io_page(drm_ttm_t * ttm, void *dst, unsigned long page)
        return 0;
 }
 
-int drm_bo_move_memcpy(drm_buffer_object_t * bo,
-                      int evict, int no_wait, drm_bo_mem_reg_t * new_mem)
+int drm_bo_move_memcpy(struct drm_buffer_object * bo,
+                      int evict, int no_wait, struct drm_bo_mem_reg * new_mem)
 {
-       drm_device_t *dev = bo->dev;
-       drm_mem_type_manager_t *man = &dev->bm.man[new_mem->mem_type];
-       drm_ttm_t *ttm = bo->ttm;
-       drm_bo_mem_reg_t *old_mem = &bo->mem;
-       drm_bo_mem_reg_t old_copy = *old_mem;
+       struct drm_device *dev = bo->dev;
+       struct drm_mem_type_manager *man = &dev->bm.man[new_mem->mem_type];
+       struct drm_ttm *ttm = bo->ttm;
+       struct drm_bo_mem_reg *old_mem = &bo->mem;
+       struct drm_bo_mem_reg old_copy = *old_mem;
        void *old_iomap;
        void *new_iomap;
        int ret;
@@ -281,12 +281,12 @@ EXPORT_SYMBOL(drm_bo_move_memcpy);
  * object. Call bo->mutex locked.
  */
 
-int drm_buffer_object_transfer(drm_buffer_object_t * bo,
-                              drm_buffer_object_t ** new_obj)
+int drm_buffer_object_transfer(struct drm_buffer_object * bo,
+                              struct drm_buffer_object ** new_obj)
 {
-       drm_buffer_object_t *fbo;
-       drm_device_t *dev = bo->dev;
-       drm_buffer_manager_t *bm = &dev->bm;
+       struct drm_buffer_object *fbo;
+       struct drm_device *dev = bo->dev;
+       struct drm_buffer_manager *bm = &dev->bm;
 
        fbo = drm_ctl_calloc(1, sizeof(*fbo), DRM_MEM_BUFOBJ);
        if (!fbo)
@@ -323,20 +323,20 @@ int drm_buffer_object_transfer(drm_buffer_object_t * bo,
  * We cannot restart until it has finished.
  */
 
-int drm_bo_move_accel_cleanup(drm_buffer_object_t * bo,
+int drm_bo_move_accel_cleanup(struct drm_buffer_object * bo,
                              int evict,
                              int no_wait,
                              uint32_t fence_class,
                              uint32_t fence_type,
-                             uint32_t fence_flags, drm_bo_mem_reg_t * new_mem)
+                             uint32_t fence_flags, struct drm_bo_mem_reg * new_mem)
 {
-       drm_device_t *dev = bo->dev;
-       drm_mem_type_manager_t *man = &dev->bm.man[new_mem->mem_type];
-       drm_bo_mem_reg_t *old_mem = &bo->mem;
+       struct drm_device *dev = bo->dev;
+       struct drm_mem_type_manager *man = &dev->bm.man[new_mem->mem_type];
+       struct drm_bo_mem_reg *old_mem = &bo->mem;
        int ret;
        uint32_t save_flags = old_mem->flags;
        uint32_t save_mask = old_mem->mask;
-       drm_buffer_object_t *old_obj;
+       struct drm_buffer_object *old_obj;
 
        if (bo->fence)
                drm_fence_usage_deref_unlocked(&bo->fence);
index 2f3e4b2..f9987ca 100644 (file)
 #include <linux/vmalloc.h>
 #include "drmP.h"
 
-unsigned long drm_get_resource_start(drm_device_t *dev, unsigned int resource)
+unsigned long drm_get_resource_start(struct drm_device *dev, unsigned int resource)
 {
        return pci_resource_start(dev->pdev, resource);
 }
 EXPORT_SYMBOL(drm_get_resource_start);
 
-unsigned long drm_get_resource_len(drm_device_t *dev, unsigned int resource)
+unsigned long drm_get_resource_len(struct drm_device *dev, unsigned int resource)
 {
        return pci_resource_len(dev->pdev, resource);
 }
 EXPORT_SYMBOL(drm_get_resource_len);
 
-drm_map_list_t *drm_find_matching_map(drm_device_t *dev, drm_local_map_t *map)
+struct drm_map_list *drm_find_matching_map(struct drm_device *dev, drm_local_map_t *map)
 {
-       drm_map_list_t *entry;
+       struct drm_map_list *entry;
        list_for_each_entry(entry, &dev->maplist, head) {
                if (entry->map && map->type == entry->map->type &&
                    ((entry->map->offset == map->offset) || 
@@ -63,7 +63,7 @@ drm_map_list_t *drm_find_matching_map(drm_device_t *dev, drm_local_map_t *map)
 }
 EXPORT_SYMBOL(drm_find_matching_map);
 
-static int drm_map_handle(drm_device_t *dev, drm_hash_item_t *hash,
+static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash,
                          unsigned long user_token, int hashed_handle)
 {
        int use_hashed_handle;
@@ -92,7 +92,7 @@ static int drm_map_handle(drm_device_t *dev, drm_hash_item_t *hash,
  * Ioctl to specify a range of memory that is available for mapping by a non-root process.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a drm_map structure.
  * \return zero on success or a negative value on error.
@@ -101,12 +101,13 @@ static int drm_map_handle(drm_device_t *dev, drm_hash_item_t *hash,
  * type.  Adds the map to the map list drm_device::maplist. Adds MTRR's where
  * applicable and if supported by the kernel.
  */
-static int drm_addmap_core(drm_device_t * dev, unsigned int offset,
-                   unsigned int size, drm_map_type_t type,
-                   drm_map_flags_t flags, drm_map_list_t ** maplist)
+static int drm_addmap_core(struct drm_device *dev, unsigned int offset,
+                          unsigned int size, enum drm_map_type type,
+                          enum drm_map_flags flags,
+                          struct drm_map_list **maplist)
 {
-       drm_map_t *map;
-       drm_map_list_t *list;
+       struct drm_map *map;
+       struct drm_map_list *list;
        drm_dma_handle_t *dmah;
        unsigned long user_token;
        int ret;
@@ -212,7 +213,7 @@ static int drm_addmap_core(drm_device_t * dev, unsigned int offset,
                }
                break;
        case _DRM_AGP: {
-               drm_agp_mem_t *entry;
+               struct drm_agp_mem *entry;
                int valid = 0;
 
                if (!drm_core_has_AGP(dev)) {
@@ -310,11 +311,11 @@ static int drm_addmap_core(drm_device_t * dev, unsigned int offset,
        return 0;
 }
 
-int drm_addmap(drm_device_t * dev, unsigned int offset,
-              unsigned int size, drm_map_type_t type,
-              drm_map_flags_t flags, drm_local_map_t ** map_ptr)
+int drm_addmap(struct drm_device *dev, unsigned int offset,
+              unsigned int size, enum drm_map_type type,
+              enum drm_map_flags flags, drm_local_map_t ** map_ptr)
 {
-       drm_map_list_t *list;
+       struct drm_map_list *list;
        int rc;
 
        rc = drm_addmap_core(dev, offset, size, type, flags, &list);
@@ -325,38 +326,24 @@ int drm_addmap(drm_device_t * dev, unsigned int offset,
 
 EXPORT_SYMBOL(drm_addmap);
 
-int drm_addmap_ioctl(struct inode *inode, struct file *filp,
-                    unsigned int cmd, unsigned long arg)
+int drm_addmap_ioctl(struct drm_device *dev, void *data,
+                    struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_map_t map;
-       drm_map_list_t *maplist;
-       drm_map_t __user *argp = (void __user *)arg;
+       struct drm_map *map = data;
+       struct drm_map_list *maplist;
        int err;
 
-       if (!(filp->f_mode & 3))
-               return -EACCES; /* Require read/write */
-
-       if (copy_from_user(&map, argp, sizeof(map))) {
-               return -EFAULT;
-       }
-
-       if (!(capable(CAP_SYS_ADMIN) || map.type == _DRM_AGP))
+       if (!(capable(CAP_SYS_ADMIN) || map->type == _DRM_AGP))
                return -EPERM;
 
-       err = drm_addmap_core(dev, map.offset, map.size, map.type, map.flags,
-                             &maplist);
+       err = drm_addmap_core(dev, map->offset, map->size, map->type,
+                             map->flags, &maplist);
 
        if (err)
                return err;
 
-       if (copy_to_user(argp, maplist->map, sizeof(drm_map_t)))
-               return -EFAULT;
-
        /* avoid a warning on 64-bit, this casting isn't very nice, but the API is set so too late */
-       if (put_user((void *)(unsigned long)maplist->user_token, &argp->handle))
-               return -EFAULT;
+       map->handle = (void *)(unsigned long)maplist->user_token;
        return 0;
 }
 
@@ -365,9 +352,9 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp,
  * isn't in use.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
- * \param arg pointer to a drm_map_t structure.
+ * \param arg pointer to a struct drm_map structure.
  * \return zero on success or a negative value on error.
  *
  * Searches the map on drm_device::maplist, removes it from the list, see if
@@ -376,9 +363,9 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp,
  *
  * \sa drm_addmap
  */
-int drm_rmmap_locked(drm_device_t *dev, drm_local_map_t *map)
+int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map)
 {
-       drm_map_list_t *r_list = NULL, *list_t;
+       struct drm_map_list *r_list = NULL, *list_t;
        drm_dma_handle_t dmah;
        int found = 0;
 
@@ -433,7 +420,7 @@ int drm_rmmap_locked(drm_device_t *dev, drm_local_map_t *map)
 }
 EXPORT_SYMBOL(drm_rmmap_locked);
 
-int drm_rmmap(drm_device_t *dev, drm_local_map_t *map)
+int drm_rmmap(struct drm_device *dev, drm_local_map_t *map)
 {
        int ret;
 
@@ -454,24 +441,18 @@ EXPORT_SYMBOL(drm_rmmap);
  * gets used by drivers that the server doesn't need to care about.  This seems
  * unlikely.
  */
-int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
-                   unsigned int cmd, unsigned long arg)
+int drm_rmmap_ioctl(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_map_t request;
+       struct drm_map *request = data;
        drm_local_map_t *map = NULL;
-       drm_map_list_t *r_list;
+       struct drm_map_list *r_list;
        int ret;
 
-       if (copy_from_user(&request, (drm_map_t __user *) arg, sizeof(request))) {
-               return -EFAULT;
-       }
-
        mutex_lock(&dev->struct_mutex);
        list_for_each_entry(r_list, &dev->maplist, head) {
                if (r_list->map &&
-                   r_list->user_token == (unsigned long)request.handle &&
+                   r_list->user_token == (unsigned long)request->handle &&
                    r_list->map->flags & _DRM_REMOVABLE) {
                        map = r_list->map;
                        break;
@@ -486,11 +467,6 @@ int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
                return -EINVAL;
        }
 
-       if (!map) {
-               mutex_unlock(&dev->struct_mutex);
-               return -EINVAL;
-       }
-
        /* Register and framebuffer maps are permanent */
        if ((map->type == _DRM_REGISTERS) || (map->type == _DRM_FRAME_BUFFER)) {
                mutex_unlock(&dev->struct_mutex);
@@ -512,7 +488,7 @@ int drm_rmmap_ioctl(struct inode *inode, struct file *filp,
  *
  * Frees any pages and buffers associated with the given entry.
  */
-static void drm_cleanup_buf_error(drm_device_t * dev, drm_buf_entry_t * entry)
+static void drm_cleanup_buf_error(struct drm_device *dev, struct drm_buf_entry * entry)
 {
        int i;
 
@@ -549,20 +525,20 @@ static void drm_cleanup_buf_error(drm_device_t * dev, drm_buf_entry_t * entry)
 /**
  * Add AGP buffers for DMA transfers
  *
- * \param dev drm_device_t to which the buffers are to be added.
- * \param request pointer to a drm_buf_desc_t describing the request.
+ * \param dev struct drm_device to which the buffers are to be added.
+ * \param request pointer to a struct drm_buf_desc describing the request.
  * \return zero on success or a negative number on failure.
  *
  * After some sanity checks creates a drm_buf structure for each buffer and
  * reallocates the buffer list of the same size order to accommodate the new
  * buffers.
  */
-int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
+int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request)
 {
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_entry_t *entry;
-       drm_agp_mem_t *agp_entry;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf_entry *entry;
+       struct drm_agp_mem *agp_entry;
+       struct drm_buf *buf;
        unsigned long offset;
        unsigned long agp_offset;
        int count;
@@ -573,7 +549,7 @@ int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
        int total;
        int byte_count;
        int i, valid;
-       drm_buf_t **temp_buflist;
+       struct drm_buf **temp_buflist;
 
        if (!dma)
                return -EINVAL;
@@ -666,7 +642,7 @@ int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
                buf->waiting = 0;
                buf->pending = 0;
                init_waitqueue_head(&buf->dma_wait);
-               buf->filp = NULL;
+               buf->file_priv = NULL;
 
                buf->dev_priv_size = dev->driver->dev_priv_size;
                buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
@@ -727,24 +703,24 @@ int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request)
 EXPORT_SYMBOL(drm_addbufs_agp);
 #endif                         /* __OS_HAS_AGP */
 
-int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
+int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int count;
        int order;
        int size;
        int total;
        int page_order;
-       drm_buf_entry_t *entry;
+       struct drm_buf_entry *entry;
        drm_dma_handle_t *dmah;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        int alignment;
        unsigned long offset;
        int i;
        int byte_count;
        int page_count;
        unsigned long *temp_pagelist;
-       drm_buf_t **temp_buflist;
+       struct drm_buf **temp_buflist;
 
        if (!drm_core_check_feature(dev, DRIVER_PCI_DMA))
                return -EINVAL;
@@ -877,7 +853,7 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
                        buf->waiting = 0;
                        buf->pending = 0;
                        init_waitqueue_head(&buf->dma_wait);
-                       buf->filp = NULL;
+                       buf->file_priv = NULL;
 
                        buf->dev_priv_size = dev->driver->dev_priv_size;
                        buf->dev_private = drm_alloc(buf->dev_priv_size,
@@ -953,11 +929,11 @@ int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request)
 }
 EXPORT_SYMBOL(drm_addbufs_pci);
 
-static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
+static int drm_addbufs_sg(struct drm_device *dev, struct drm_buf_desc * request)
 {
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_entry_t *entry;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf_entry *entry;
+       struct drm_buf *buf;
        unsigned long offset;
        unsigned long agp_offset;
        int count;
@@ -968,7 +944,7 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
        int total;
        int byte_count;
        int i;
-       drm_buf_t **temp_buflist;
+       struct drm_buf **temp_buflist;
 
        if (!drm_core_check_feature(dev, DRIVER_SG))
                return -EINVAL;
@@ -1055,7 +1031,7 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
                buf->waiting = 0;
                buf->pending = 0;
                init_waitqueue_head(&buf->dma_wait);
-               buf->filp = NULL;
+               buf->file_priv = NULL;
 
                buf->dev_priv_size = dev->driver->dev_priv_size;
                buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
@@ -1115,11 +1091,11 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
        return 0;
 }
 
-int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
+int drm_addbufs_fb(struct drm_device *dev, struct drm_buf_desc *request)
 {
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_entry_t *entry;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf_entry *entry;
+       struct drm_buf *buf;
        unsigned long offset;
        unsigned long agp_offset;
        int count;
@@ -1130,7 +1106,7 @@ int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
        int total;
        int byte_count;
        int i;
-       drm_buf_t **temp_buflist;
+       struct drm_buf **temp_buflist;
 
        if (!drm_core_check_feature(dev, DRIVER_FB_DMA))
                return -EINVAL;
@@ -1216,7 +1192,7 @@ int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
                buf->waiting = 0;
                buf->pending = 0;
                init_waitqueue_head(&buf->dma_wait);
-               buf->filp = NULL;
+               buf->file_priv = NULL;
 
                buf->dev_priv_size = dev->driver->dev_priv_size;
                buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
@@ -1281,9 +1257,9 @@ EXPORT_SYMBOL(drm_addbufs_fb);
  * Add buffers for DMA transfers (ioctl).
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
- * \param arg pointer to a drm_buf_desc_t request.
+ * \param arg pointer to a struct drm_buf_desc request.
  * \return zero on success or a negative number on failure.
  *
  * According with the memory type specified in drm_buf_desc::flags and the
@@ -1291,39 +1267,27 @@ EXPORT_SYMBOL(drm_addbufs_fb);
  * addbufs_sg() or addbufs_pci() for AGP, scatter-gather or consistent
  * PCI memory respectively.
  */
-int drm_addbufs(struct inode *inode, struct file *filp,
-               unsigned int cmd, unsigned long arg)
+int drm_addbufs(struct drm_device *dev, void *data,
+               struct drm_file *file_priv)
 {
-       drm_buf_desc_t request;
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
+       struct drm_buf_desc *request = data;
        int ret;
 
        if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
                return -EINVAL;
 
-       if (copy_from_user(&request, (drm_buf_desc_t __user *) arg,
-                          sizeof(request)))
-               return -EFAULT;
-
 #if __OS_HAS_AGP
-       if (request.flags & _DRM_AGP_BUFFER)
-               ret = drm_addbufs_agp(dev, &request);
+       if (request->flags & _DRM_AGP_BUFFER)
+               ret = drm_addbufs_agp(dev, request);
        else
 #endif
-       if (request.flags & _DRM_SG_BUFFER)
-               ret = drm_addbufs_sg(dev, &request);
-       else if (request.flags & _DRM_FB_BUFFER)
-               ret = drm_addbufs_fb(dev, &request);
+       if (request->flags & _DRM_SG_BUFFER)
+               ret = drm_addbufs_sg(dev, request);
+       else if (request->flags & _DRM_FB_BUFFER)
+               ret = drm_addbufs_fb(dev, request);
        else
-               ret = drm_addbufs_pci(dev, &request);
+               ret = drm_addbufs_pci(dev, request);
 
-       if (ret == 0) {
-               if (copy_to_user((void __user *) arg, &request,
-                                 sizeof(request))) {
-                       ret = -EFAULT;
-               }
-       }
        return ret;
 }
 
@@ -1335,7 +1299,7 @@ int drm_addbufs(struct inode *inode, struct file *filp,
  * large buffers can be used for image transfer).
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a drm_buf_info structure.
  * \return zero on success or a negative number on failure.
@@ -1344,14 +1308,11 @@ int drm_addbufs(struct inode *inode, struct file *filp,
  * lock, preventing of allocating more buffers after this call. Information
  * about each requested buffer is then copied into user space.
  */
-int drm_infobufs(struct inode *inode, struct file *filp,
-                unsigned int cmd, unsigned long arg)
+int drm_infobufs(struct drm_device *dev, void *data,
+                struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_info_t request;
-       drm_buf_info_t __user *argp = (void __user *)arg;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf_info *request = data;
        int i;
        int count;
 
@@ -1369,9 +1330,6 @@ int drm_infobufs(struct inode *inode, struct file *filp,
        ++dev->buf_use;         /* Can't allocate more after this call */
        spin_unlock(&dev->count_lock);
 
-       if (copy_from_user(&request, argp, sizeof(request)))
-               return -EFAULT;
-
        for (i = 0, count = 0; i < DRM_MAX_ORDER + 1; i++) {
                if (dma->bufs[i].buf_count)
                        ++count;
@@ -1379,13 +1337,13 @@ int drm_infobufs(struct inode *inode, struct file *filp,
 
        DRM_DEBUG("count = %d\n", count);
 
-       if (request.count >= count) {
+       if (request->count >= count) {
                for (i = 0, count = 0; i < DRM_MAX_ORDER + 1; i++) {
                        if (dma->bufs[i].buf_count) {
-                               drm_buf_desc_t __user *to =
-                                   &request.list[count];
-                               drm_buf_entry_t *from = &dma->bufs[i];
-                               drm_freelist_t *list = &dma->bufs[i].freelist;
+                               struct drm_buf_desc __user *to =
+                                   &request->list[count];
+                               struct drm_buf_entry *from = &dma->bufs[i];
+                               struct drm_freelist *list = &dma->bufs[i].freelist;
                                if (copy_to_user(&to->count,
                                                 &from->buf_count,
                                                 sizeof(from->buf_count)) ||
@@ -1410,10 +1368,7 @@ int drm_infobufs(struct inode *inode, struct file *filp,
                        }
                }
        }
-       request.count = count;
-
-       if (copy_to_user(argp, &request, sizeof(request)))
-               return -EFAULT;
+       request->count = count;
 
        return 0;
 }
@@ -1422,7 +1377,7 @@ int drm_infobufs(struct inode *inode, struct file *filp,
  * Specifies a low and high water mark for buffer allocation
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg a pointer to a drm_buf_desc structure.
  * \return zero on success or a negative number on failure.
@@ -1432,15 +1387,13 @@ int drm_infobufs(struct inode *inode, struct file *filp,
  *
  * \note This ioctl is deprecated and mostly never used.
  */
-int drm_markbufs(struct inode *inode, struct file *filp,
-                unsigned int cmd, unsigned long arg)
+int drm_markbufs(struct drm_device *dev, void *data,
+                struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_desc_t request;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf_desc *request = data;
        int order;
-       drm_buf_entry_t *entry;
+       struct drm_buf_entry *entry;
 
        if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
                return -EINVAL;
@@ -1448,24 +1401,20 @@ int drm_markbufs(struct inode *inode, struct file *filp,
        if (!dma)
                return -EINVAL;
 
-       if (copy_from_user(&request,
-                          (drm_buf_desc_t __user *) arg, sizeof(request)))
-               return -EFAULT;
-
        DRM_DEBUG("%d, %d, %d\n",
-                 request.size, request.low_mark, request.high_mark);
-       order = drm_order(request.size);
+                 request->size, request->low_mark, request->high_mark);
+       order = drm_order(request->size);
        if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER)
                return -EINVAL;
        entry = &dma->bufs[order];
 
-       if (request.low_mark < 0 || request.low_mark > entry->buf_count)
+       if (request->low_mark < 0 || request->low_mark > entry->buf_count)
                return -EINVAL;
-       if (request.high_mark < 0 || request.high_mark > entry->buf_count)
+       if (request->high_mark < 0 || request->high_mark > entry->buf_count)
                return -EINVAL;
 
-       entry->freelist.low_mark = request.low_mark;
-       entry->freelist.high_mark = request.high_mark;
+       entry->freelist.low_mark = request->low_mark;
+       entry->freelist.high_mark = request->high_mark;
 
        return 0;
 }
@@ -1474,7 +1423,7 @@ int drm_markbufs(struct inode *inode, struct file *filp,
  * Unreserve the buffers in list, previously reserved using drmDMA.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a drm_buf_free structure.
  * \return zero on success or a negative number on failure.
@@ -1482,16 +1431,14 @@ int drm_markbufs(struct inode *inode, struct file *filp,
  * Calls free_buffer() for each used buffer.
  * This function is primarily used for debugging.
  */
-int drm_freebufs(struct inode *inode, struct file *filp,
-                unsigned int cmd, unsigned long arg)
+int drm_freebufs(struct drm_device *dev, void *data,
+                struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_free_t request;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf_free *request = data;
        int i;
        int idx;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
 
        if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
                return -EINVAL;
@@ -1499,13 +1446,9 @@ int drm_freebufs(struct inode *inode, struct file *filp,
        if (!dma)
                return -EINVAL;
 
-       if (copy_from_user(&request,
-                          (drm_buf_free_t __user *) arg, sizeof(request)))
-               return -EFAULT;
-
-       DRM_DEBUG("%d\n", request.count);
-       for (i = 0; i < request.count; i++) {
-               if (copy_from_user(&idx, &request.list[i], sizeof(idx)))
+       DRM_DEBUG("%d\n", request->count);
+       for (i = 0; i < request->count; i++) {
+               if (copy_from_user(&idx, &request->list[i], sizeof(idx)))
                        return -EFAULT;
                if (idx < 0 || idx >= dma->buf_count) {
                        DRM_ERROR("Index %d (of %d max)\n",
@@ -1513,7 +1456,7 @@ int drm_freebufs(struct inode *inode, struct file *filp,
                        return -EINVAL;
                }
                buf = dma->buflist[idx];
-               if (buf->filp != filp) {
+               if (buf->file_priv != file_priv) {
                        DRM_ERROR("Process %d freeing buffer not owned\n",
                                  current->pid);
                        return -EINVAL;
@@ -1528,7 +1471,7 @@ int drm_freebufs(struct inode *inode, struct file *filp,
  * Maps all of the DMA buffers into client-virtual space (ioctl).
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg pointer to a drm_buf_map structure.
  * \return zero on success or a negative number on failure.
@@ -1538,18 +1481,15 @@ int drm_freebufs(struct inode *inode, struct file *filp,
  * offset equal to 0, which drm_mmap() interpretes as PCI buffers and calls
  * drm_mmap_dma().
  */
-int drm_mapbufs(struct inode *inode, struct file *filp,
-               unsigned int cmd, unsigned long arg)
+int drm_mapbufs(struct drm_device *dev, void *data,
+               struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_map_t __user *argp = (void __user *)arg;
+       struct drm_device_dma *dma = dev->dma;
        int retcode = 0;
        const int zero = 0;
        unsigned long virtual;
        unsigned long address;
-       drm_buf_map_t request;
+       struct drm_buf_map *request = data;
        int i;
 
        if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
@@ -1566,16 +1506,13 @@ int drm_mapbufs(struct inode *inode, struct file *filp,
        dev->buf_use++;         /* Can't allocate more after this call */
        spin_unlock(&dev->count_lock);
 
-       if (copy_from_user(&request, argp, sizeof(request)))
-               return -EFAULT;
-
-       if (request.count >= dma->buf_count) {
+       if (request->count >= dma->buf_count) {
                if ((drm_core_has_AGP(dev) && (dma->flags & _DRM_DMA_USE_AGP))
                    || (drm_core_check_feature(dev, DRIVER_SG)
                        && (dma->flags & _DRM_DMA_USE_SG))
                    || (drm_core_check_feature(dev, DRIVER_FB_DMA)
                        && (dma->flags & _DRM_DMA_USE_FB))) {
-                       drm_map_t *map = dev->agp_buffer_map;
+                       struct drm_map *map = dev->agp_buffer_map;
                        unsigned long token = dev->agp_buffer_token;
 
                        if (!map) {
@@ -1583,14 +1520,14 @@ int drm_mapbufs(struct inode *inode, struct file *filp,
                                goto done;
                        }
                        down_write(&current->mm->mmap_sem);
-                       virtual = do_mmap(filp, 0, map->size,
+                       virtual = do_mmap(file_priv->filp, 0, map->size,
                                          PROT_READ | PROT_WRITE,
                                          MAP_SHARED,
                                          token);
                        up_write(&current->mm->mmap_sem);
                } else {
                        down_write(&current->mm->mmap_sem);
-                       virtual = do_mmap(filp, 0, dma->byte_count,
+                       virtual = do_mmap(file_priv->filp, 0, dma->byte_count,
                                          PROT_READ | PROT_WRITE,
                                          MAP_SHARED, 0);
                        up_write(&current->mm->mmap_sem);
@@ -1600,28 +1537,28 @@ int drm_mapbufs(struct inode *inode, struct file *filp,
                        retcode = (signed long)virtual;
                        goto done;
                }
-               request.virtual = (void __user *)virtual;
+               request->virtual = (void __user *)virtual;
 
                for (i = 0; i < dma->buf_count; i++) {
-                       if (copy_to_user(&request.list[i].idx,
+                       if (copy_to_user(&request->list[i].idx,
                                         &dma->buflist[i]->idx,
-                                        sizeof(request.list[0].idx))) {
+                                        sizeof(request->list[0].idx))) {
                                retcode = -EFAULT;
                                goto done;
                        }
-                       if (copy_to_user(&request.list[i].total,
+                       if (copy_to_user(&request->list[i].total,
                                         &dma->buflist[i]->total,
-                                        sizeof(request.list[0].total))) {
+                                        sizeof(request->list[0].total))) {
                                retcode = -EFAULT;
                                goto done;
                        }
-                       if (copy_to_user(&request.list[i].used,
+                       if (copy_to_user(&request->list[i].used,
                                         &zero, sizeof(zero))) {
                                retcode = -EFAULT;
                                goto done;
                        }
                        address = virtual + dma->buflist[i]->offset;    /* *** */
-                       if (copy_to_user(&request.list[i].address,
+                       if (copy_to_user(&request->list[i].address,
                                         &address, sizeof(address))) {
                                retcode = -EFAULT;
                                goto done;
@@ -1629,11 +1566,8 @@ int drm_mapbufs(struct inode *inode, struct file *filp,
                }
        }
       done:
-       request.count = dma->buf_count;
-       DRM_DEBUG("%d buffers, retcode = %d\n", request.count, retcode);
-
-       if (copy_to_user(argp, &request, sizeof(request)))
-               return -EFAULT;
+       request->count = dma->buf_count;
+       DRM_DEBUG("%d buffers, retcode = %d\n", request->count, retcode);
 
        return retcode;
 }
index 08d20d0..9a6da7e 100644 (file)
@@ -196,15 +196,16 @@ static int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
        return ret;
 }
 
-static struct page *drm_bo_vm_fault(struct vm_area_struct *vma, 
+
+static struct page *drm_bo_vm_fault(struct vm_area_struct *vma,
                                    struct fault_data *data)
 {
        unsigned long address = data->address;
-       drm_buffer_object_t *bo = (drm_buffer_object_t *) vma->vm_private_data;
+       struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
        unsigned long page_offset;
        struct page *page = NULL;
-       drm_ttm_t *ttm; 
-       drm_device_t *dev;
+       struct drm_ttm *ttm; 
+       struct drm_device *dev;
        unsigned long pfn;
        int err;
        unsigned long bus_base;
@@ -261,7 +262,7 @@ static struct page *drm_bo_vm_fault(struct vm_area_struct *vma,
        page_offset = (address - vma->vm_start) >> PAGE_SHIFT;
 
        if (bus_size) {
-               drm_mem_type_manager_t *man = &dev->bm.man[bo->mem.mem_type];
+               struct drm_mem_type_manager *man = &dev->bm.man[bo->mem.mem_type];
 
                pfn = ((bus_base + bus_offset) >> PAGE_SHIFT) + page_offset;
                vma->vm_page_prot = drm_io_prot(man->drm_bus_maptype, vma);
@@ -350,11 +351,11 @@ struct page *drm_bo_vm_nopage(struct vm_area_struct *vma,
                               unsigned long address, 
                               int *type)
 {
-       drm_buffer_object_t *bo = (drm_buffer_object_t *) vma->vm_private_data;
+       struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
        unsigned long page_offset;
        struct page *page;
-       drm_ttm_t *ttm; 
-       drm_device_t *dev;
+       struct drm_ttm *ttm; 
+       struct drm_device *dev;
 
        mutex_lock(&bo->mutex);
 
@@ -394,7 +395,7 @@ out_unlock:
 
 int drm_bo_map_bound(struct vm_area_struct *vma)
 {
-       drm_buffer_object_t *bo = (drm_buffer_object_t *)vma->vm_private_data;
+       struct drm_buffer_object *bo = (struct drm_buffer_object *)vma->vm_private_data;
        int ret = 0;
        unsigned long bus_base;
        unsigned long bus_offset;
@@ -405,7 +406,7 @@ int drm_bo_map_bound(struct vm_area_struct *vma)
        BUG_ON(ret);
 
        if (bus_size) {
-               drm_mem_type_manager_t *man = &bo->dev->bm.man[bo->mem.mem_type];
+               struct drm_mem_type_manager *man = &bo->dev->bm.man[bo->mem.mem_type];
                unsigned long pfn = (bus_base + bus_offset) >> PAGE_SHIFT;
                pgprot_t pgprot = drm_io_prot(man->drm_bus_maptype, vma);
                ret = io_remap_pfn_range(vma, vma->vm_start, pfn,
@@ -417,7 +418,7 @@ int drm_bo_map_bound(struct vm_area_struct *vma)
 }
        
 
-int drm_bo_add_vma(drm_buffer_object_t * bo, struct vm_area_struct *vma)
+int drm_bo_add_vma(struct drm_buffer_object * bo, struct vm_area_struct *vma)
 {
        p_mm_entry_t *entry, *n_entry;
        vma_entry_t *v_entry;
@@ -453,7 +454,7 @@ int drm_bo_add_vma(drm_buffer_object_t * bo, struct vm_area_struct *vma)
        return 0;
 }
 
-void drm_bo_delete_vma(drm_buffer_object_t * bo, struct vm_area_struct *vma)
+void drm_bo_delete_vma(struct drm_buffer_object * bo, struct vm_area_struct *vma)
 {
        p_mm_entry_t *entry, *n;
        vma_entry_t *v_entry, *v_n;
@@ -485,7 +486,7 @@ void drm_bo_delete_vma(drm_buffer_object_t * bo, struct vm_area_struct *vma)
 
 
 
-int drm_bo_lock_kmm(drm_buffer_object_t * bo)
+int drm_bo_lock_kmm(struct drm_buffer_object * bo)
 {
        p_mm_entry_t *entry;
        int lock_ok = 1;
@@ -517,7 +518,7 @@ int drm_bo_lock_kmm(drm_buffer_object_t * bo)
        return -EAGAIN;
 }
 
-void drm_bo_unlock_kmm(drm_buffer_object_t * bo)
+void drm_bo_unlock_kmm(struct drm_buffer_object * bo)
 {
        p_mm_entry_t *entry;
        
@@ -528,7 +529,7 @@ void drm_bo_unlock_kmm(drm_buffer_object_t * bo)
        }
 }
 
-int drm_bo_remap_bound(drm_buffer_object_t *bo) 
+int drm_bo_remap_bound(struct drm_buffer_object *bo) 
 {
        vma_entry_t *v_entry;
        int ret = 0;
@@ -544,7 +545,7 @@ int drm_bo_remap_bound(drm_buffer_object_t *bo)
        return ret;
 }
 
-void drm_bo_finish_unmap(drm_buffer_object_t *bo)
+void drm_bo_finish_unmap(struct drm_buffer_object *bo)
 {
        vma_entry_t *v_entry;
 
index 024059a..0b00ba4 100644 (file)
@@ -306,8 +306,10 @@ extern int drm_bo_map_bound(struct vm_area_struct *vma);
 
 #endif
 
-/* fixme when functions are upstreamed */
+/* fixme when functions are upstreamed - upstreamed for 2.6.23 */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
 #define DRM_IDR_COMPAT_FN
+#endif
 #ifdef DRM_IDR_COMPAT_FN
 int idr_for_each(struct idr *idp,
                 int (*fn)(int id, void *p, void *data), void *data);
index 195c7fb..7854e89 100644 (file)
@@ -56,7 +56,7 @@
  * in drm_device::ctx_idr, while holding the drm_device::struct_mutex
  * lock.
  */
-void drm_ctxbitmap_free(drm_device_t * dev, int ctx_handle)
+void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle)
 {
        mutex_lock(&dev->struct_mutex);
        idr_remove(&dev->ctx_idr, ctx_handle);
@@ -72,7 +72,7 @@ void drm_ctxbitmap_free(drm_device_t * dev, int ctx_handle)
  * Allocate a new idr from drm_device::ctx_idr while holding the
  * drm_device::struct_mutex lock.
  */
-static int drm_ctxbitmap_next(drm_device_t * dev)
+static int drm_ctxbitmap_next(struct drm_device *dev)
 {
        int new_id;
        int ret;
@@ -101,7 +101,7 @@ again:
  *
  * Initialise the drm_device::ctx_idr
  */
-int drm_ctxbitmap_init(drm_device_t * dev)
+int drm_ctxbitmap_init(struct drm_device *dev)
 {
        idr_init(&dev->ctx_idr);
        return 0;
@@ -115,7 +115,7 @@ int drm_ctxbitmap_init(drm_device_t * dev)
  * Free all idr members using drm_ctx_sarea_free helper function
  * while holding the drm_device::struct_mutex lock.
  */
-void drm_ctxbitmap_cleanup(drm_device_t * dev)
+void drm_ctxbitmap_cleanup(struct drm_device *dev)
 {
        mutex_lock(&dev->struct_mutex);
        idr_remove_all(&dev->ctx_idr);
@@ -132,7 +132,7 @@ void drm_ctxbitmap_cleanup(drm_device_t * dev)
  * Get per-context SAREA.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument pointing to a drm_ctx_priv_map structure.
  * \return zero on success or a negative number on failure.
@@ -140,22 +140,16 @@ void drm_ctxbitmap_cleanup(drm_device_t * dev)
  * Gets the map from drm_device::ctx_idr with the handle specified and
  * returns its handle.
  */
-int drm_getsareactx(struct inode *inode, struct file *filp,
-                   unsigned int cmd, unsigned long arg)
+int drm_getsareactx(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_ctx_priv_map_t __user *argp = (void __user *)arg;
-       drm_ctx_priv_map_t request;
-       drm_map_t *map;
-       drm_map_list_t *_entry;
-
-       if (copy_from_user(&request, argp, sizeof(request)))
-               return -EFAULT;
+       struct drm_ctx_priv_map *request = data;
+       struct drm_map *map;
+       struct drm_map_list *_entry;
 
        mutex_lock(&dev->struct_mutex);
 
-       map = idr_find(&dev->ctx_idr, request.ctx_id);
+       map = idr_find(&dev->ctx_idr, request->ctx_id);
        if (!map) {
                mutex_unlock(&dev->struct_mutex);
                return -EINVAL;
@@ -163,19 +157,17 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
 
        mutex_unlock(&dev->struct_mutex);
 
-       request.handle = NULL;
+       request->handle = NULL;
        list_for_each_entry(_entry, &dev->maplist, head) {
                if (_entry->map == map) {
-                       request.handle = 
+                       request->handle = 
                            (void *)(unsigned long)_entry->user_token;
                        break;
                }
        }
-       if (request.handle == NULL)
+       if (request->handle == NULL)
                return -EINVAL;
 
-       if (copy_to_user(argp, &request, sizeof(request)))
-               return -EFAULT;
        return 0;
 }
 
@@ -183,7 +175,7 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
  * Set per-context SAREA.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument pointing to a drm_ctx_priv_map structure.
  * \return zero on success or a negative number on failure.
@@ -191,23 +183,17 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
  * Searches the mapping specified in \p arg and update the entry in
  * drm_device::ctx_idr with it.
  */
-int drm_setsareactx(struct inode *inode, struct file *filp,
-                   unsigned int cmd, unsigned long arg)
+int drm_setsareactx(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_ctx_priv_map_t request;
-       drm_map_t *map = NULL;
-       drm_map_list_t *r_list = NULL;
-
-       if (copy_from_user(&request,
-                          (drm_ctx_priv_map_t __user *) arg, sizeof(request)))
-               return -EFAULT;
+       struct drm_ctx_priv_map *request = data;
+       struct drm_map *map = NULL;
+       struct drm_map_list *r_list = NULL;
 
        mutex_lock(&dev->struct_mutex);
        list_for_each_entry(r_list, &dev->maplist, head) {
                if (r_list->map
-                   && r_list->user_token == (unsigned long) request.handle)
+                   && r_list->user_token == (unsigned long) request->handle)
                        goto found;
        }
       bad:
@@ -219,7 +205,7 @@ int drm_setsareactx(struct inode *inode, struct file *filp,
        if (!map)
                goto bad;
 
-       if (IS_ERR(idr_replace(&dev->ctx_idr, map, request.ctx_id)))
+       if (IS_ERR(idr_replace(&dev->ctx_idr, map, request->ctx_id)))
                goto bad;
 
        mutex_unlock(&dev->struct_mutex);
@@ -243,7 +229,7 @@ int drm_setsareactx(struct inode *inode, struct file *filp,
  *
  * Attempt to set drm_device::context_flag.
  */
-static int drm_context_switch(drm_device_t * dev, int old, int new)
+static int drm_context_switch(struct drm_device *dev, int old, int new)
 {
        if (test_and_set_bit(0, &dev->context_flag)) {
                DRM_ERROR("Reentering -- FIXME\n");
@@ -271,7 +257,7 @@ static int drm_context_switch(drm_device_t * dev, int old, int new)
  * hardware lock is held, clears the drm_device::context_flag and wakes up
  * drm_device::context_wait.
  */
-static int drm_context_switch_complete(drm_device_t * dev, int new)
+static int drm_context_switch_complete(struct drm_device *dev, int new)
 {
        dev->last_context = new;        /* PRE/POST: This is the _only_ writer. */
        dev->last_switch = jiffies;
@@ -293,34 +279,28 @@ static int drm_context_switch_complete(drm_device_t * dev, int new)
  * Reserve contexts.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument pointing to a drm_ctx_res structure.
  * \return zero on success or a negative number on failure.
  */
-int drm_resctx(struct inode *inode, struct file *filp,
-              unsigned int cmd, unsigned long arg)
+int drm_resctx(struct drm_device *dev, void *data,
+              struct drm_file *file_priv)
 {
-       drm_ctx_res_t res;
-       drm_ctx_t __user *argp = (void __user *)arg;
-       drm_ctx_t ctx;
+       struct drm_ctx_res *res = data;
+       struct drm_ctx ctx;
        int i;
 
-       if (copy_from_user(&res, argp, sizeof(res)))
-               return -EFAULT;
-
-       if (res.count >= DRM_RESERVED_CONTEXTS) {
+       if (res->count >= DRM_RESERVED_CONTEXTS) {
                memset(&ctx, 0, sizeof(ctx));
                for (i = 0; i < DRM_RESERVED_CONTEXTS; i++) {
                        ctx.handle = i;
-                       if (copy_to_user(&res.contexts[i], &ctx, sizeof(ctx)))
+                       if (copy_to_user(&res->contexts[i], &ctx, sizeof(ctx)))
                                return -EFAULT;
                }
        }
-       res.count = DRM_RESERVED_CONTEXTS;
+       res->count = DRM_RESERVED_CONTEXTS;
 
-       if (copy_to_user(argp, &res, sizeof(res)))
-               return -EFAULT;
        return 0;
 }
 
@@ -328,40 +308,34 @@ int drm_resctx(struct inode *inode, struct file *filp,
  * Add context.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument pointing to a drm_ctx structure.
  * \return zero on success or a negative number on failure.
  *
  * Get a new handle for the context and copy to userspace.
  */
-int drm_addctx(struct inode *inode, struct file *filp,
-              unsigned int cmd, unsigned long arg)
+int drm_addctx(struct drm_device *dev, void *data,
+              struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_ctx_list_t *ctx_entry;
-       drm_ctx_t __user *argp = (void __user *)arg;
-       drm_ctx_t ctx;
-
-       if (copy_from_user(&ctx, argp, sizeof(ctx)))
-               return -EFAULT;
+       struct drm_ctx_list *ctx_entry;
+       struct drm_ctx *ctx = data;
 
-       ctx.handle = drm_ctxbitmap_next(dev);
-       if (ctx.handle == DRM_KERNEL_CONTEXT) {
+       ctx->handle = drm_ctxbitmap_next(dev);
+       if (ctx->handle == DRM_KERNEL_CONTEXT) {
                /* Skip kernel's context and get a new one. */
-               ctx.handle = drm_ctxbitmap_next(dev);
+               ctx->handle = drm_ctxbitmap_next(dev);
        }
-       DRM_DEBUG("%d\n", ctx.handle);
-       if (ctx.handle == -1) {
+       DRM_DEBUG("%d\n", ctx->handle);
+       if (ctx->handle == -1) {
                DRM_DEBUG("Not enough free contexts.\n");
                /* Should this return -EBUSY instead? */
                return -ENOMEM;
        }
 
-       if (ctx.handle != DRM_KERNEL_CONTEXT) {
+       if (ctx->handle != DRM_KERNEL_CONTEXT) {
                if (dev->driver->context_ctor)
-                       if (!dev->driver->context_ctor(dev, ctx.handle)) {
+                       if (!dev->driver->context_ctor(dev, ctx->handle)) {
                                DRM_DEBUG("Running out of ctxs or memory.\n");
                                return -ENOMEM;
                        }
@@ -374,21 +348,18 @@ int drm_addctx(struct inode *inode, struct file *filp,
        }
 
        INIT_LIST_HEAD(&ctx_entry->head);
-       ctx_entry->handle = ctx.handle;
-       ctx_entry->tag = priv;
+       ctx_entry->handle = ctx->handle;
+       ctx_entry->tag = file_priv;
 
        mutex_lock(&dev->ctxlist_mutex);
        list_add(&ctx_entry->head, &dev->ctxlist);
        ++dev->ctx_count;
        mutex_unlock(&dev->ctxlist_mutex);
 
-       if (copy_to_user(argp, &ctx, sizeof(ctx)))
-               return -EFAULT;
        return 0;
 }
 
-int drm_modctx(struct inode *inode, struct file *filp,
-              unsigned int cmd, unsigned long arg)
+int drm_modctx(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
        /* This does nothing */
        return 0;
@@ -398,25 +369,18 @@ int drm_modctx(struct inode *inode, struct file *filp,
  * Get context.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument pointing to a drm_ctx structure.
  * \return zero on success or a negative number on failure.
  */
-int drm_getctx(struct inode *inode, struct file *filp,
-              unsigned int cmd, unsigned long arg)
+int drm_getctx(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_ctx_t __user *argp = (void __user *)arg;
-       drm_ctx_t ctx;
-
-       if (copy_from_user(&ctx, argp, sizeof(ctx)))
-               return -EFAULT;
+       struct drm_ctx *ctx = data;
 
        /* This is 0, because we don't handle any context flags */
-       ctx.flags = 0;
+       ctx->flags = 0;
 
-       if (copy_to_user(argp, &ctx, sizeof(ctx)))
-               return -EFAULT;
        return 0;
 }
 
@@ -424,50 +388,40 @@ int drm_getctx(struct inode *inode, struct file *filp,
  * Switch context.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument pointing to a drm_ctx structure.
  * \return zero on success or a negative number on failure.
  *
  * Calls context_switch().
  */
-int drm_switchctx(struct inode *inode, struct file *filp,
-                 unsigned int cmd, unsigned long arg)
+int drm_switchctx(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_ctx_t ctx;
-
-       if (copy_from_user(&ctx, (drm_ctx_t __user *) arg, sizeof(ctx)))
-               return -EFAULT;
+       struct drm_ctx *ctx = data;
 
-       DRM_DEBUG("%d\n", ctx.handle);
-       return drm_context_switch(dev, dev->last_context, ctx.handle);
+       DRM_DEBUG("%d\n", ctx->handle);
+       return drm_context_switch(dev, dev->last_context, ctx->handle);
 }
 
 /**
  * New context.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument pointing to a drm_ctx structure.
  * \return zero on success or a negative number on failure.
  *
  * Calls context_switch_complete().
  */
-int drm_newctx(struct inode *inode, struct file *filp,
-              unsigned int cmd, unsigned long arg)
+int drm_newctx(struct drm_device *dev, void *data,
+              struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_ctx_t ctx;
+       struct drm_ctx *ctx = data;
 
-       if (copy_from_user(&ctx, (drm_ctx_t __user *) arg, sizeof(ctx)))
-               return -EFAULT;
-
-       DRM_DEBUG("%d\n", ctx.handle);
-       drm_context_switch_complete(dev, ctx.handle);
+       DRM_DEBUG("%d\n", ctx->handle);
+       drm_context_switch_complete(dev, ctx->handle);
 
        return 0;
 }
@@ -476,39 +430,34 @@ int drm_newctx(struct inode *inode, struct file *filp,
  * Remove context.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument pointing to a drm_ctx structure.
  * \return zero on success or a negative number on failure.
  *
  * If not the special kernel context, calls ctxbitmap_free() to free the specified context.
  */
-int drm_rmctx(struct inode *inode, struct file *filp,
-             unsigned int cmd, unsigned long arg)
+int drm_rmctx(struct drm_device *dev, void *data,
+             struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_ctx_t ctx;
-
-       if (copy_from_user(&ctx, (drm_ctx_t __user *) arg, sizeof(ctx)))
-               return -EFAULT;
+       struct drm_ctx *ctx = data;
 
-       DRM_DEBUG("%d\n", ctx.handle);
-       if (ctx.handle == DRM_KERNEL_CONTEXT + 1) {
-               priv->remove_auth_on_close = 1;
+       DRM_DEBUG("%d\n", ctx->handle);
+       if (ctx->handle == DRM_KERNEL_CONTEXT + 1) {
+               file_priv->remove_auth_on_close = 1;
        }
-       if (ctx.handle != DRM_KERNEL_CONTEXT) {
+       if (ctx->handle != DRM_KERNEL_CONTEXT) {
                if (dev->driver->context_dtor)
-                       dev->driver->context_dtor(dev, ctx.handle);
-               drm_ctxbitmap_free(dev, ctx.handle);
+                       dev->driver->context_dtor(dev, ctx->handle);
+               drm_ctxbitmap_free(dev, ctx->handle);
        }
 
        mutex_lock(&dev->ctxlist_mutex);
        if (!list_empty(&dev->ctxlist)) {
-               drm_ctx_list_t *pos, *n;
+               struct drm_ctx_list *pos, *n;
 
                list_for_each_entry_safe(pos, n, &dev->ctxlist, head) {
-                       if (pos->handle == ctx.handle) {
+                       if (pos->handle == ctx->handle) {
                                list_del(&pos->head);
                                drm_free(pos, sizeof(*pos), DRM_MEM_CTXLIST);
                                --dev->ctx_count;
index a7eee1a..7cc4419 100644 (file)
@@ -43,7 +43,7 @@
  *
  * Allocate and initialize a drm_device_dma structure.
  */
-int drm_dma_setup(drm_device_t * dev)
+int drm_dma_setup(struct drm_device * dev)
 {
        int i;
 
@@ -67,9 +67,9 @@ int drm_dma_setup(drm_device_t * dev)
  * Free all pages associated with DMA buffers, the buffers and pages lists, and
  * finally the the drm_device::dma structure itself.
  */
-void drm_dma_takedown(drm_device_t * dev)
+void drm_dma_takedown(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int i, j;
 
        if (!dma)
@@ -129,14 +129,14 @@ void drm_dma_takedown(drm_device_t * dev)
  *
  * Resets the fields of \p buf.
  */
-void drm_free_buffer(drm_device_t * dev, drm_buf_t * buf)
+void drm_free_buffer(struct drm_device * dev, struct drm_buf * buf)
 {
        if (!buf)
                return;
 
        buf->waiting = 0;
        buf->pending = 0;
-       buf->filp = NULL;
+       buf->file_priv = NULL;
        buf->used = 0;
 
        if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE)
@@ -148,19 +148,20 @@ void drm_free_buffer(drm_device_t * dev, drm_buf_t * buf)
 /**
  * Reclaim the buffers.
  *
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  *
- * Frees each buffer associated with \p filp not already on the hardware.
+ * Frees each buffer associated with \p file_priv not already on the hardware.
  */
-void drm_core_reclaim_buffers(drm_device_t *dev, struct file *filp)
+void drm_core_reclaim_buffers(struct drm_device *dev,
+                             struct drm_file *file_priv)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int i;
 
        if (!dma)
                return;
        for (i = 0; i < dma->buf_count; i++) {
-               if (dma->buflist[i]->filp == filp) {
+               if (dma->buflist[i]->file_priv == file_priv) {
                        switch (dma->buflist[i]->list) {
                        case DRM_LIST_NONE:
                                drm_free_buffer(dev, dma->buflist[i]);
index 7129980..1839c57 100644 (file)
 /**
  * Allocate drawable ID and memory to store information about it.
  */
-int drm_adddraw(DRM_IOCTL_ARGS)
+int drm_adddraw(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        unsigned long irqflags;
-       drm_draw_t draw;
+       struct drm_draw *draw = data;
        int new_id = 0;
        int ret;
 
@@ -63,11 +62,9 @@ again:
 
        spin_unlock_irqrestore(&dev->drw_lock, irqflags);
 
-       draw.handle = new_id;
+       draw->handle = new_id;
 
-       DRM_DEBUG("%d\n", draw.handle);
-
-       DRM_COPY_TO_USER_IOCTL((drm_draw_t __user *)data, draw, sizeof(draw));
+       DRM_DEBUG("%d\n", draw->handle);
 
        return 0;
 }
@@ -75,72 +72,64 @@ again:
 /**
  * Free drawable ID and memory to store information about it.
  */
-int drm_rmdraw(DRM_IOCTL_ARGS)
+int drm_rmdraw(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_draw_t draw;
+       struct drm_draw *draw = data;
        unsigned long irqflags;
 
-       DRM_COPY_FROM_USER_IOCTL(draw, (drm_draw_t __user *) data,
-                                sizeof(draw));
-
        spin_lock_irqsave(&dev->drw_lock, irqflags);
 
-       drm_free(drm_get_drawable_info(dev, draw.handle),
+       drm_free(drm_get_drawable_info(dev, draw->handle),
                 sizeof(struct drm_drawable_info), DRM_MEM_BUFS);
 
-       idr_remove(&dev->drw_idr, draw.handle);
+       idr_remove(&dev->drw_idr, draw->handle);
 
        spin_unlock_irqrestore(&dev->drw_lock, irqflags);
-       DRM_DEBUG("%d\n", draw.handle);
+       DRM_DEBUG("%d\n", draw->handle);
        return 0;
 }
 
-int drm_update_drawable_info(DRM_IOCTL_ARGS)
+int drm_update_drawable_info(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_update_draw_t update;
+       struct drm_update_draw *update = data;
        unsigned long irqflags;
-       drm_clip_rect_t *rects;
+       struct drm_clip_rect *rects;
        struct drm_drawable_info *info;
        int err;
 
-       DRM_COPY_FROM_USER_IOCTL(update, (drm_update_draw_t __user *) data,
-                                sizeof(update));
-
-       info = idr_find(&dev->drw_idr, update.handle);
+       info = idr_find(&dev->drw_idr, update->handle);
        if (!info) {
                info = drm_calloc(1, sizeof(*info), DRM_MEM_BUFS);
                if (!info)
                        return -ENOMEM;
-               if (IS_ERR(idr_replace(&dev->drw_idr, info, update.handle))) {
-                       DRM_ERROR("No such drawable %d\n", update.handle);
+               if (IS_ERR(idr_replace(&dev->drw_idr, info, update->handle))) {
+                       DRM_ERROR("No such drawable %d\n", update->handle);
                        drm_free(info, sizeof(*info), DRM_MEM_BUFS);
                        return -EINVAL;
                }
        }
 
-       switch (update.type) {
+       switch (update->type) {
        case DRM_DRAWABLE_CLIPRECTS:
-               if (update.num != info->num_rects) {
-                       rects = drm_alloc(update.num * sizeof(drm_clip_rect_t),
+               if (update->num != info->num_rects) {
+                       rects = drm_alloc(update->num * sizeof(struct drm_clip_rect),
                                         DRM_MEM_BUFS);
                } else
                        rects = info->rects;
 
-               if (update.num && !rects) {
+               if (update->num && !rects) {
                        DRM_ERROR("Failed to allocate cliprect memory\n");
-                       err = DRM_ERR(ENOMEM);
+                       err = -ENOMEM;
                        goto error;
                }
 
-               if (update.num && DRM_COPY_FROM_USER(rects,
-                                                    (drm_clip_rect_t __user *)
-                                                    (unsigned long)update.data,
-                                                    update.num *
+               if (update->num && DRM_COPY_FROM_USER(rects,
+                                                    (struct drm_clip_rect __user *)
+                                                    (unsigned long)update->data,
+                                                    update->num *
                                                     sizeof(*rects))) {
                        DRM_ERROR("Failed to copy cliprects from userspace\n");
-                       err = DRM_ERR(EFAULT);
+                       err = -EFAULT;
                        goto error;
                }
 
@@ -148,27 +137,27 @@ int drm_update_drawable_info(DRM_IOCTL_ARGS)
 
                if (rects != info->rects) {
                        drm_free(info->rects, info->num_rects *
-                                sizeof(drm_clip_rect_t), DRM_MEM_BUFS);
+                                sizeof(struct drm_clip_rect), DRM_MEM_BUFS);
                }
 
                info->rects = rects;
-               info->num_rects = update.num;
+               info->num_rects = update->num;
 
                spin_unlock_irqrestore(&dev->drw_lock, irqflags);
 
                DRM_DEBUG("Updated %d cliprects for drawable %d\n",
-                         info->num_rects, update.handle);
+                         info->num_rects, update->handle);
                break;
        default:
-               DRM_ERROR("Invalid update type %d\n", update.type);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("Invalid update type %d\n", update->type);
+               return -EINVAL;
        }
 
        return 0;
 
 error:
        if (rects != info->rects)
-               drm_free(rects, update.num * sizeof(drm_clip_rect_t),
+               drm_free(rects, update->num * sizeof(struct drm_clip_rect),
                         DRM_MEM_BUFS);
 
        return err;
@@ -177,7 +166,7 @@ error:
 /**
  * Caller must hold the drawable spinlock!
  */
-drm_drawable_info_t *drm_get_drawable_info(drm_device_t *dev, drm_drawable_t id)
+struct drm_drawable_info *drm_get_drawable_info(struct drm_device *dev, drm_drawable_t id)
 {
        return idr_find(&dev->drw_idr, id);
 }
@@ -189,14 +178,14 @@ static int drm_drawable_free(int idr, void *p, void *data)
 
        if (info) {
                drm_free(info->rects, info->num_rects *
-                        sizeof(drm_clip_rect_t), DRM_MEM_BUFS);
+                        sizeof(struct drm_clip_rect), DRM_MEM_BUFS);
                drm_free(info, sizeof(*info), DRM_MEM_BUFS);
        }
 
        return 0;
 }
 
-void drm_drawable_free_all(drm_device_t *dev)
+void drm_drawable_free_all(struct drm_device *dev)
 {
        idr_for_each(&dev->drw_idr, drm_drawable_free, NULL);
        idr_remove_all(&dev->drw_idr);
index 0d446a1..cc676bd 100644 (file)
 #include "drmP.h"
 #include "drm_core.h"
 
-static void drm_cleanup(drm_device_t * dev);
+static void drm_cleanup(struct drm_device * dev);
 int drm_fb_loaded = 0;
 
-static int drm_version(struct inode *inode, struct file *filp,
-               unsigned int cmd, unsigned long arg);
+static int drm_version(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv);
 
 /** Ioctl table */
-static drm_ioctl_desc_t drm_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_IOCTL_VERSION)] = {drm_version, 0},
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_UNIQUE)] = {drm_getunique, 0},
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_MAGIC)] = {drm_getmagic, 0},
-       [DRM_IOCTL_NR(DRM_IOCTL_IRQ_BUSID)] = {drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_MAP)] = {drm_getmap, 0},
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_CLIENT)] = {drm_getclient, 0},
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_STATS)] = {drm_getstats, 0},
-       [DRM_IOCTL_NR(DRM_IOCTL_SET_VERSION)] = {drm_setversion, DRM_MASTER|DRM_ROOT_ONLY},
-
-       [DRM_IOCTL_NR(DRM_IOCTL_SET_UNIQUE)] = {drm_setunique, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_BLOCK)] = {drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)] = {drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = {drm_authmagic, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-
-       [DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)] = {drm_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_RM_MAP)] = {drm_rmmap_ioctl, DRM_AUTH},
-
-       [DRM_IOCTL_NR(DRM_IOCTL_SET_SAREA_CTX)] = {drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_SAREA_CTX)] = {drm_getsareactx, DRM_AUTH},
-
-       [DRM_IOCTL_NR(DRM_IOCTL_ADD_CTX)] = {drm_addctx, DRM_AUTH|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_RM_CTX)] = {drm_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_MOD_CTX)] = {drm_modctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_GET_CTX)] = {drm_getctx, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_IOCTL_SWITCH_CTX)] = {drm_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_NEW_CTX)] = {drm_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_RES_CTX)] = {drm_resctx, DRM_AUTH},
-
-       [DRM_IOCTL_NR(DRM_IOCTL_ADD_DRAW)] = {drm_adddraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_RM_DRAW)] = {drm_rmdraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-
-       [DRM_IOCTL_NR(DRM_IOCTL_LOCK)] = {drm_lock, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_IOCTL_UNLOCK)] = {drm_unlock, DRM_AUTH},
-
-       [DRM_IOCTL_NR(DRM_IOCTL_FINISH)] = {drm_noop, DRM_AUTH},
-
-       [DRM_IOCTL_NR(DRM_IOCTL_ADD_BUFS)] = {drm_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_MARK_BUFS)] = {drm_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)] = {drm_infobufs, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_IOCTL_MAP_BUFS)] = {drm_mapbufs, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_IOCTL_FREE_BUFS)] = {drm_freebufs, DRM_AUTH},
+static struct drm_ioctl_desc drm_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_getmap, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE, drm_setunique, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_BLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_UNBLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_rmmap_ioctl, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_getsareactx, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_addctx, DRM_AUTH|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_modctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_GET_CTX, drm_getctx, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_SWITCH_CTX, drm_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_resctx, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_adddraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_rmdraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_LOCK, drm_lock, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_unlock, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_FINISH, drm_noop, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_ADD_BUFS, drm_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_MARK_BUFS, drm_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_infobufs, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_mapbufs, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_freebufs, DRM_AUTH),
        /* The DRM_IOCTL_DMA ioctl should be defined by the driver. */
-       [DRM_IOCTL_NR(DRM_IOCTL_DMA)] = {NULL, DRM_AUTH},
+       DRM_IOCTL_DEF(DRM_IOCTL_DMA, NULL, DRM_AUTH),
 
-       [DRM_IOCTL_NR(DRM_IOCTL_CONTROL)] = {drm_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
+       DRM_IOCTL_DEF(DRM_IOCTL_CONTROL, drm_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
 
 #if __OS_HAS_AGP
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)] = {drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_RELEASE)] = {drm_agp_release_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ENABLE)] = {drm_agp_enable_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)] = {drm_agp_info_ioctl, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ALLOC)] = {drm_agp_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_FREE)] = {drm_agp_free_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_BIND)] = {drm_agp_bind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_UNBIND)] = {drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_ACQUIRE, drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_RELEASE, drm_agp_release_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_ENABLE, drm_agp_enable_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_INFO, drm_agp_info_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_ALLOC, drm_agp_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_FREE, drm_agp_free_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_BIND, drm_agp_bind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_AGP_UNBIND, drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
 #endif
 
-       [DRM_IOCTL_NR(DRM_IOCTL_SG_ALLOC)] = {drm_sg_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_IOCTL_SG_FREE)] = {drm_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
+       DRM_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_sg_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
 
-       [DRM_IOCTL_NR(DRM_IOCTL_WAIT_VBLANK)] = {drm_wait_vblank, 0},
-       [DRM_IOCTL_NR(DRM_IOCTL_FENCE)] = {drm_fence_ioctl, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_IOCTL_BUFOBJ)] = {drm_bo_ioctl, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_IOCTL_MM_INIT)] = {drm_mm_init_ioctl, 
-                                            DRM_AUTH },
+       DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank, 0),
 
-       [DRM_IOCTL_NR(DRM_IOCTL_UPDATE_DRAW)] = {drm_update_drawable_info, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
+       //      DRM_IOCTL_DEF(DRM_IOCTL_BUFOBJ, drm_bo_ioctl, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_update_drawable_info, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+
+       DRM_IOCTL_DEF(DRM_IOCTL_MM_INIT, drm_mm_init_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_MM_TAKEDOWN, drm_mm_takedown_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_MM_LOCK, drm_mm_lock_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_MM_UNLOCK, drm_mm_unlock_ioctl, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_CREATE, drm_fence_create_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_DESTROY, drm_fence_destroy_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_REFERENCE, drm_fence_reference_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_UNREFERENCE, drm_fence_unreference_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_SIGNALED, drm_fence_signaled_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_FLUSH, drm_fence_flush_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_WAIT, drm_fence_wait_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_EMIT, drm_fence_emit_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_FENCE_BUFFERS, drm_fence_buffers_ioctl, DRM_AUTH),
+
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_CREATE, drm_bo_create_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_DESTROY, drm_bo_destroy_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_MAP, drm_bo_map_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_UNMAP, drm_bo_unmap_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_REFERENCE, drm_bo_reference_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_UNREFERENCE, drm_bo_unreference_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_OP, drm_bo_op_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_INFO, drm_bo_info_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_BO_WAIT_IDLE, drm_bo_wait_idle_ioctl, DRM_AUTH),
 };
 
 #define DRM_CORE_IOCTL_COUNT   ARRAY_SIZE( drm_ioctls )
@@ -137,11 +161,11 @@ static drm_ioctl_desc_t drm_ioctls[] = {
  *
  * \sa drm_device
  */
-int drm_lastclose(drm_device_t * dev)
+int drm_lastclose(struct drm_device * dev)
 {
-       drm_magic_entry_t *pt, *next;
-       drm_map_list_t *r_list, *list_t;
-       drm_vma_entry_t *vma, *vma_temp;
+       struct drm_magic_entry *pt, *next;
+       struct drm_map_list *r_list, *list_t;
+       struct drm_vma_entry *vma, *vma_temp;
        int i;
 
        DRM_DEBUG("\n");
@@ -189,7 +213,7 @@ int drm_lastclose(drm_device_t * dev)
 
        /* Clear AGP information */
        if (drm_core_has_AGP(dev) && dev->agp) {
-               drm_agp_mem_t *entry, *tempe;
+               struct drm_agp_mem *entry, *tempe;
 
                /* Remove AGP resources, but leave dev->agp
                   intact until drv_cleanup is called. */
@@ -245,7 +269,7 @@ int drm_lastclose(drm_device_t * dev)
 
        if (dev->lock.hw_lock) {
                dev->sigdata.lock = dev->lock.hw_lock = NULL;   /* SHM removed */
-               dev->lock.filp = NULL;
+               dev->lock.file_priv = NULL;
                wake_up_interruptible(&dev->lock.lock_queue);
        }
        dev->dev_mapping = NULL;
@@ -257,7 +281,7 @@ int drm_lastclose(drm_device_t * dev)
 
 void drm_cleanup_pci(struct pci_dev *pdev)
 {
-       drm_device_t *dev = pci_get_drvdata(pdev);
+       struct drm_device *dev = pci_get_drvdata(pdev);
 
        pci_set_drvdata(pdev, NULL);
        pci_release_regions(pdev);
@@ -343,7 +367,7 @@ EXPORT_SYMBOL(drm_init);
  *
  * \sa drm_init
  */
-static void drm_cleanup(drm_device_t * dev)
+static void drm_cleanup(struct drm_device * dev)
 {
 
        DRM_DEBUG("\n");
@@ -388,8 +412,8 @@ static void drm_cleanup(drm_device_t * dev)
 void drm_exit(struct drm_driver *driver)
 {
        int i;
-       drm_device_t *dev = NULL;
-       drm_head_t *head;
+       struct drm_device *dev = NULL;
+       struct drm_head *head;
 
        DRM_DEBUG("\n");
        if (drm_fb_loaded) {
@@ -507,34 +531,26 @@ module_exit(drm_core_exit);
  * Get version information
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_version structure.
  * \return zero on success or negative number on failure.
  *
  * Fills in the version information in \p arg.
  */
-static int drm_version(struct inode *inode, struct file *filp,
-               unsigned int cmd, unsigned long arg)
+static int drm_version(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_version_t __user *argp = (void __user *)arg;
-       drm_version_t version;
+       struct drm_version *version = data;
        int len;
 
-       if (copy_from_user(&version, argp, sizeof(version)))
-               return -EFAULT;
-
-       version.version_major = dev->driver->major;
-       version.version_minor = dev->driver->minor;
-       version.version_patchlevel = dev->driver->patchlevel;
-       DRM_COPY(version.name, dev->driver->name);
-       DRM_COPY(version.date, dev->driver->date);
-       DRM_COPY(version.desc, dev->driver->desc);
+       version->version_major = dev->driver->major;
+       version->version_minor = dev->driver->minor;
+       version->version_patchlevel = dev->driver->patchlevel;
+       DRM_COPY(version->name, dev->driver->name);
+       DRM_COPY(version->date, dev->driver->date);
+       DRM_COPY(version->desc, dev->driver->desc);
 
-       if (copy_to_user(argp, &version, sizeof(version)))
-               return -EFAULT;
        return 0;
 }
 
@@ -542,31 +558,37 @@ static int drm_version(struct inode *inode, struct file *filp,
  * Called whenever a process performs an ioctl on /dev/drm.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument.
  * \return zero on success or negative number on failure.
  *
  * Looks up the ioctl function in the ::ioctls table, checking for root
  * previleges if so required, and dispatches to the respective function.
+ *
+ * Copies data in and out according to the size and direction given in cmd,
+ * which must match the ioctl cmd known by the kernel.  The kernel uses a 512
+ * byte stack buffer to store the ioctl arguments in kernel space.  Should we
+ * ever need much larger ioctl arguments, we may need to allocate memory.
  */
 int drm_ioctl(struct inode *inode, struct file *filp,
              unsigned int cmd, unsigned long arg)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_ioctl_desc_t *ioctl;
+       struct drm_file *file_priv = filp->private_data;
+       struct drm_device *dev = file_priv->head->dev;
+       struct drm_ioctl_desc *ioctl;
        drm_ioctl_t *func;
        unsigned int nr = DRM_IOCTL_NR(cmd);
        int retcode = -EINVAL;
+       char kdata[512];
 
        atomic_inc(&dev->ioctl_count);
        atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]);
-       ++priv->ioctl_count;
+       ++file_priv->ioctl_count;
 
        DRM_DEBUG("pid=%d, cmd=0x%02x, nr=0x%02x, dev 0x%lx, auth=%d\n",
-                 current->pid, cmd, nr, (long)old_encode_dev(priv->head->device),
-                 priv->authenticated);
+                 current->pid, cmd, nr, (long)old_encode_dev(file_priv->head->device),
+                 file_priv->authenticated);
 
        if ((nr >= DRM_CORE_IOCTL_COUNT) &&
            ((nr < DRM_COMMAND_BASE) || (nr >= DRM_COMMAND_END)))
@@ -576,24 +598,52 @@ int drm_ioctl(struct inode *inode, struct file *filp,
                ioctl = &dev->driver->ioctls[nr - DRM_COMMAND_BASE];
        else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE))
                ioctl = &drm_ioctls[nr];
-       else
+       else {
+               retcode = -EINVAL;
                goto err_i1;
-
+       }
+#if 0
+       /*
+        * This check is disabled, because driver private ioctl->cmd
+        * are not the ioctl commands with size and direction bits but
+        * just the indices. The DRM core ioctl->cmd are the proper ioctl
+        * commands. The drivers' ioctl tables need to be fixed.
+        */
+       if (ioctl->cmd != cmd) {
+               retcode = -EINVAL;
+               goto err_i1;
+       }
+#endif
        func = ioctl->func;
        /* is there a local override? */
        if ((nr == DRM_IOCTL_NR(DRM_IOCTL_DMA)) && dev->driver->dma_ioctl)
                func = dev->driver->dma_ioctl;
 
+       if (cmd & IOC_IN) {
+               if (copy_from_user(kdata, (void __user *)arg,
+                                  _IOC_SIZE(cmd)) != 0) {
+                       retcode = -EACCES;
+                       goto err_i1;
+               }
+       }
+
        if (!func) {
                DRM_DEBUG("no function\n");
                retcode = -EINVAL;
        } else if (((ioctl->flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN)) ||
-                  ((ioctl->flags & DRM_AUTH) && !priv->authenticated) ||
-                  ((ioctl->flags & DRM_MASTER) && !priv->master)) {
+                  ((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) ||
+                  ((ioctl->flags & DRM_MASTER) && !file_priv->master)) {
                retcode = -EACCES;
        } else {
-               retcode = func(inode, filp, cmd, arg);
+               retcode = func(dev, kdata, file_priv);
        }
+
+       if (cmd & IOC_OUT) {
+               if (copy_to_user((void __user *)arg, kdata,
+                                _IOC_SIZE(cmd)) != 0)
+                       retcode = -EACCES;
+       }
+
 err_i1:
        atomic_dec(&dev->ioctl_count);
        if (retcode)
@@ -604,7 +654,7 @@ EXPORT_SYMBOL(drm_ioctl);
 
 drm_local_map_t *drm_getsarea(struct drm_device *dev)
 {
-       drm_map_list_t *entry;
+       struct drm_map_list *entry;
 
        list_for_each_entry(entry, &dev->maplist, head) {
                if (entry->map && entry->map->type == _DRM_SHM &&
index 5215feb..c4f7da1 100644 (file)
  * Typically called by the IRQ handler.
  */
 
-void drm_fence_handler(drm_device_t * dev, uint32_t class,
+void drm_fence_handler(struct drm_device * dev, uint32_t class,
                       uint32_t sequence, uint32_t type)
 {
        int wake = 0;
        uint32_t diff;
        uint32_t relevant;
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_class_manager_t *fc = &fm->class[class];
-       drm_fence_driver_t *driver = dev->driver->fence_driver;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_class_manager *fc = &fm->class[class];
+       struct drm_fence_driver *driver = dev->driver->fence_driver;
        struct list_head *head;
-       drm_fence_object_t *fence, *next;
+       struct drm_fence_object *fence, *next;
        int found = 0;
        int is_exe = (type & DRM_FENCE_TYPE_EXE);
        int ge_last_exe;
@@ -114,9 +114,9 @@ void drm_fence_handler(drm_device_t * dev, uint32_t class,
 
 EXPORT_SYMBOL(drm_fence_handler);
 
-static void drm_fence_unring(drm_device_t * dev, struct list_head *ring)
+static void drm_fence_unring(struct drm_device * dev, struct list_head *ring)
 {
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
        unsigned long flags;
 
        write_lock_irqsave(&fm->lock, flags);
@@ -124,11 +124,11 @@ static void drm_fence_unring(drm_device_t * dev, struct list_head *ring)
        write_unlock_irqrestore(&fm->lock, flags);
 }
 
-void drm_fence_usage_deref_locked(drm_fence_object_t ** fence)
+void drm_fence_usage_deref_locked(struct drm_fence_object ** fence)
 {
        struct drm_fence_object *tmp_fence = *fence;
        struct drm_device *dev = tmp_fence->dev;
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
 
        DRM_ASSERT_LOCKED(&dev->struct_mutex);
        *fence = NULL;
@@ -142,11 +142,11 @@ void drm_fence_usage_deref_locked(drm_fence_object_t ** fence)
        }
 }
 
-void drm_fence_usage_deref_unlocked(drm_fence_object_t ** fence)
+void drm_fence_usage_deref_unlocked(struct drm_fence_object ** fence)
 {
        struct drm_fence_object *tmp_fence = *fence;
        struct drm_device *dev = tmp_fence->dev;
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
 
        *fence = NULL;
        if (atomic_dec_and_test(&tmp_fence->usage)) {
@@ -180,22 +180,22 @@ void drm_fence_reference_unlocked(struct drm_fence_object **dst,
 }
 
 
-static void drm_fence_object_destroy(drm_file_t *priv, drm_user_object_t * base)
+static void drm_fence_object_destroy(struct drm_file *priv, struct drm_user_object * base)
 {
-       drm_fence_object_t *fence =
-           drm_user_object_entry(base, drm_fence_object_t, base);
+       struct drm_fence_object *fence =
+           drm_user_object_entry(base, struct drm_fence_object, base);
 
        drm_fence_usage_deref_locked(&fence);
 }
 
-int drm_fence_object_signaled(drm_fence_object_t * fence,
+int drm_fence_object_signaled(struct drm_fence_object * fence,
                              uint32_t mask, int poke_flush)
 {
        unsigned long flags;
        int signaled;
        struct drm_device *dev = fence->dev;
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_driver_t *driver = dev->driver->fence_driver;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_driver *driver = dev->driver->fence_driver;
 
        if (poke_flush)
                driver->poke_flush(dev, fence->class);
@@ -207,8 +207,8 @@ int drm_fence_object_signaled(drm_fence_object_t * fence,
        return signaled;
 }
 
-static void drm_fence_flush_exe(drm_fence_class_manager_t * fc,
-                               drm_fence_driver_t * driver, uint32_t sequence)
+static void drm_fence_flush_exe(struct drm_fence_class_manager * fc,
+                               struct drm_fence_driver * driver, uint32_t sequence)
 {
        uint32_t diff;
 
@@ -224,13 +224,13 @@ static void drm_fence_flush_exe(drm_fence_class_manager_t * fc,
        }
 }
 
-int drm_fence_object_flush(drm_fence_object_t * fence,
+int drm_fence_object_flush(struct drm_fence_object * fence,
                           uint32_t type)
 {
        struct drm_device *dev = fence->dev;
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_class_manager_t *fc = &fm->class[fence->class];
-       drm_fence_driver_t *driver = dev->driver->fence_driver;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_class_manager *fc = &fm->class[fence->class];
+       struct drm_fence_driver *driver = dev->driver->fence_driver;
        unsigned long flags;
 
        if (type & ~fence->type) {
@@ -262,14 +262,14 @@ int drm_fence_object_flush(drm_fence_object_t * fence,
  * wrapped around and reused.
  */
 
-void drm_fence_flush_old(drm_device_t * dev, uint32_t class, uint32_t sequence)
+void drm_fence_flush_old(struct drm_device * dev, uint32_t class, uint32_t sequence)
 {
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_class_manager_t *fc = &fm->class[class];
-       drm_fence_driver_t *driver = dev->driver->fence_driver;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_class_manager *fc = &fm->class[class];
+       struct drm_fence_driver *driver = dev->driver->fence_driver;
        uint32_t old_sequence;
        unsigned long flags;
-       drm_fence_object_t *fence;
+       struct drm_fence_object *fence;
        uint32_t diff;
 
        write_lock_irqsave(&fm->lock, flags);
@@ -290,7 +290,7 @@ void drm_fence_flush_old(drm_device_t * dev, uint32_t class, uint32_t sequence)
                mutex_unlock(&dev->struct_mutex);
                return;
        }
-       fence = drm_fence_reference_locked(list_entry(fc->ring.next, drm_fence_object_t, ring));
+       fence = drm_fence_reference_locked(list_entry(fc->ring.next, struct drm_fence_object, ring));
        mutex_unlock(&dev->struct_mutex);
        diff = (old_sequence - fence->sequence) & driver->sequence_mask;
        read_unlock_irqrestore(&fm->lock, flags);
@@ -302,13 +302,13 @@ void drm_fence_flush_old(drm_device_t * dev, uint32_t class, uint32_t sequence)
 
 EXPORT_SYMBOL(drm_fence_flush_old);
 
-static int drm_fence_lazy_wait(drm_fence_object_t *fence,
+static int drm_fence_lazy_wait(struct drm_fence_object *fence,
                               int ignore_signals,
                               uint32_t mask)
 {
        struct drm_device *dev = fence->dev;
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_class_manager_t *fc = &fm->class[fence->class];
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_class_manager *fc = &fm->class[fence->class];
        int signaled;
        unsigned long _end = jiffies + 3*DRM_HZ;
        int ret = 0;
@@ -336,11 +336,11 @@ static int drm_fence_lazy_wait(drm_fence_object_t *fence,
        return 0;
 }
 
-int drm_fence_object_wait(drm_fence_object_t * fence,
+int drm_fence_object_wait(struct drm_fence_object * fence,
                          int lazy, int ignore_signals, uint32_t mask)
 {
        struct drm_device *dev = fence->dev;
-       drm_fence_driver_t *driver = dev->driver->fence_driver;
+       struct drm_fence_driver *driver = dev->driver->fence_driver;
        int ret = 0;
        unsigned long _end;
        int signaled;
@@ -403,13 +403,13 @@ int drm_fence_object_wait(drm_fence_object_t * fence,
        return 0;
 }
 
-int drm_fence_object_emit(drm_fence_object_t * fence,
+int drm_fence_object_emit(struct drm_fence_object * fence,
                          uint32_t fence_flags, uint32_t class, uint32_t type)
 {
        struct drm_device *dev = fence->dev;
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_driver_t *driver = dev->driver->fence_driver;
-       drm_fence_class_manager_t *fc = &fm->class[fence->class];
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_driver *driver = dev->driver->fence_driver;
+       struct drm_fence_class_manager *fc = &fm->class[fence->class];
        unsigned long flags;
        uint32_t sequence;
        uint32_t native_type;
@@ -435,14 +435,14 @@ int drm_fence_object_emit(drm_fence_object_t * fence,
        return 0;
 }
 
-static int drm_fence_object_init(drm_device_t * dev, uint32_t class,
+static int drm_fence_object_init(struct drm_device * dev, uint32_t class,
                                 uint32_t type,
                                 uint32_t fence_flags,
-                                drm_fence_object_t * fence)
+                                struct drm_fence_object * fence)
 {
        int ret = 0;
        unsigned long flags;
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
 
        mutex_lock(&dev->struct_mutex);
        atomic_set(&fence->usage, 1);
@@ -471,10 +471,10 @@ static int drm_fence_object_init(drm_device_t * dev, uint32_t class,
        return ret;
 }
 
-int drm_fence_add_user_object(drm_file_t * priv, drm_fence_object_t * fence,
+int drm_fence_add_user_object(struct drm_file * priv, struct drm_fence_object * fence,
                              int shareable)
 {
-       drm_device_t *dev = priv->head->dev;
+       struct drm_device *dev = priv->head->dev;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
@@ -491,12 +491,12 @@ out:
 }
 EXPORT_SYMBOL(drm_fence_add_user_object);
 
-int drm_fence_object_create(drm_device_t * dev, uint32_t class, uint32_t type,
-                           unsigned flags, drm_fence_object_t ** c_fence)
+int drm_fence_object_create(struct drm_device * dev, uint32_t class, uint32_t type,
+                           unsigned flags, struct drm_fence_object ** c_fence)
 {
-       drm_fence_object_t *fence;
+       struct drm_fence_object *fence;
        int ret;
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
 
        fence = drm_ctl_calloc(1, sizeof(*fence), DRM_MEM_FENCE);
        if (!fence)
@@ -514,11 +514,11 @@ int drm_fence_object_create(drm_device_t * dev, uint32_t class, uint32_t type,
 
 EXPORT_SYMBOL(drm_fence_object_create);
 
-void drm_fence_manager_init(drm_device_t * dev)
+void drm_fence_manager_init(struct drm_device * dev)
 {
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_class_manager_t *class;
-       drm_fence_driver_t *fed = dev->driver->fence_driver;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_class_manager *class;
+       struct drm_fence_driver *fed = dev->driver->fence_driver;
        int i;
 
        rwlock_init(&fm->lock);
@@ -544,15 +544,15 @@ void drm_fence_manager_init(drm_device_t * dev)
        write_unlock(&fm->lock);
 }
 
-void drm_fence_manager_takedown(drm_device_t * dev)
+void drm_fence_manager_takedown(struct drm_device * dev)
 {
 }
 
-drm_fence_object_t *drm_lookup_fence_object(drm_file_t * priv, uint32_t handle)
+struct drm_fence_object *drm_lookup_fence_object(struct drm_file * priv, uint32_t handle)
 {
-       drm_device_t *dev = priv->head->dev;
-       drm_user_object_t *uo;
-       drm_fence_object_t *fence;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_user_object *uo;
+       struct drm_fence_object *fence;
 
        mutex_lock(&dev->struct_mutex);
        uo = drm_lookup_user_object(priv, handle);
@@ -560,19 +560,17 @@ drm_fence_object_t *drm_lookup_fence_object(drm_file_t * priv, uint32_t handle)
                mutex_unlock(&dev->struct_mutex);
                return NULL;
        }
-       fence = drm_fence_reference_locked(drm_user_object_entry(uo, drm_fence_object_t, base));
+       fence = drm_fence_reference_locked(drm_user_object_entry(uo, struct drm_fence_object, base));
        mutex_unlock(&dev->struct_mutex);
        return fence;
 }
 
-int drm_fence_ioctl(DRM_IOCTL_ARGS)
+int drm_fence_create_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        int ret;
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_arg_t arg;
-       drm_fence_object_t *fence;
-       drm_user_object_t *uo;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       struct drm_fence_object *fence;
        unsigned long flags;
        ret = 0;
 
@@ -581,100 +579,266 @@ int drm_fence_ioctl(DRM_IOCTL_ARGS)
                return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(arg, (void __user *)data, sizeof(arg));
-       switch (arg.op) {
-       case drm_fence_create:
-               if (arg.flags & DRM_FENCE_FLAG_EMIT)
-                       LOCK_TEST_WITH_RETURN(dev, filp);
-               ret = drm_fence_object_create(dev, arg.class,
-                                             arg.type, arg.flags, &fence);
-               if (ret)
-                       return ret;
-               ret = drm_fence_add_user_object(priv, fence,
-                                               arg.flags &
-                                               DRM_FENCE_FLAG_SHAREABLE);
-               if (ret) {
-                       drm_fence_usage_deref_unlocked(&fence);
-                       return ret;
-               }
-               arg.handle = fence->base.hash.key;
+       if (arg->flags & DRM_FENCE_FLAG_EMIT)
+               LOCK_TEST_WITH_RETURN(dev, file_priv);
+       ret = drm_fence_object_create(dev, arg->class,
+                                     arg->type, arg->flags, &fence);
+       if (ret)
+               return ret;
+       ret = drm_fence_add_user_object(file_priv, fence,
+                                       arg->flags &
+                                       DRM_FENCE_FLAG_SHAREABLE);
+       if (ret) {
+               drm_fence_usage_deref_unlocked(&fence);
+               return ret;
+       }
+       
+       /*
+        * usage > 0. No need to lock dev->struct_mutex;
+        */
+       
+       atomic_inc(&fence->usage);
+       arg->handle = fence->base.hash.key;
 
-               break;
-       case drm_fence_destroy:
-               mutex_lock(&dev->struct_mutex);
-               uo = drm_lookup_user_object(priv, arg.handle);
-               if (!uo || (uo->type != drm_fence_type) || uo->owner != priv) {
-                       mutex_unlock(&dev->struct_mutex);
-                       return -EINVAL;
-               }
-               ret = drm_remove_user_object(priv, uo);
+       read_lock_irqsave(&fm->lock, flags);
+       arg->class = fence->class;
+       arg->type = fence->type;
+       arg->signaled = fence->signaled;
+       read_unlock_irqrestore(&fm->lock, flags);
+       drm_fence_usage_deref_unlocked(&fence);
+
+       return ret;
+}
+
+int drm_fence_destroy_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       int ret;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       struct drm_user_object *uo;
+       ret = 0;
+
+       if (!fm->initialized) {
+               DRM_ERROR("The DRM driver does not support fencing.\n");
+               return -EINVAL;
+       }
+
+       mutex_lock(&dev->struct_mutex);
+       uo = drm_lookup_user_object(file_priv, arg->handle);
+       if (!uo || (uo->type != drm_fence_type) || uo->owner != file_priv) {
                mutex_unlock(&dev->struct_mutex);
+               return -EINVAL;
+       }
+       ret = drm_remove_user_object(file_priv, uo);
+       mutex_unlock(&dev->struct_mutex);
+       return ret;
+}
+
+
+int drm_fence_reference_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       int ret;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       struct drm_fence_object *fence;
+       struct drm_user_object *uo;
+       unsigned long flags;
+       ret = 0;
+
+       if (!fm->initialized) {
+               DRM_ERROR("The DRM driver does not support fencing.\n");
+               return -EINVAL;
+       }
+
+       ret = drm_user_object_ref(file_priv, arg->handle, drm_fence_type, &uo);
+       if (ret)
                return ret;
-       case drm_fence_reference:
-               ret =
-                   drm_user_object_ref(priv, arg.handle, drm_fence_type, &uo);
-               if (ret)
-                       return ret;
-               fence = drm_lookup_fence_object(priv, arg.handle);
-               break;
-       case drm_fence_unreference:
-               ret = drm_user_object_unref(priv, arg.handle, drm_fence_type);
-               return ret;
-       case drm_fence_signaled:
-               fence = drm_lookup_fence_object(priv, arg.handle);
-               if (!fence)
-                       return -EINVAL;
-               break;
-       case drm_fence_flush:
-               fence = drm_lookup_fence_object(priv, arg.handle);
-               if (!fence)
-                       return -EINVAL;
-               ret = drm_fence_object_flush(fence, arg.type);
-               break;
-       case drm_fence_wait:
-               fence = drm_lookup_fence_object(priv, arg.handle);
-               if (!fence)
-                       return -EINVAL;
-               ret =
-                   drm_fence_object_wait(fence,
-                                         arg.flags & DRM_FENCE_FLAG_WAIT_LAZY,
-                                         0, arg.type);
-               break;
-       case drm_fence_emit:
-               LOCK_TEST_WITH_RETURN(dev, filp);
-               fence = drm_lookup_fence_object(priv, arg.handle);
-               if (!fence)
-                       return -EINVAL;
-               ret = drm_fence_object_emit(fence, arg.flags, arg.class,
-                                           arg.type);
-               break;
-       case drm_fence_buffers:
-               if (!dev->bm.initialized) {
-                       DRM_ERROR("Buffer object manager is not initialized\n");
-                       return -EINVAL;
-               }
-               LOCK_TEST_WITH_RETURN(dev, filp);
-               ret = drm_fence_buffer_objects(priv, NULL, arg.flags,
-                                              NULL, &fence);
-               if (ret)
-                       return ret;
-               ret = drm_fence_add_user_object(priv, fence,
-                                               arg.flags &
-                                               DRM_FENCE_FLAG_SHAREABLE);
-               if (ret)
-                       return ret;
-               arg.handle = fence->base.hash.key;
-               break;
-       default:
+       fence = drm_lookup_fence_object(file_priv, arg->handle);
+
+       read_lock_irqsave(&fm->lock, flags);
+       arg->class = fence->class;
+       arg->type = fence->type;
+       arg->signaled = fence->signaled;
+       read_unlock_irqrestore(&fm->lock, flags);
+       drm_fence_usage_deref_unlocked(&fence);
+
+       return ret;
+}
+
+
+int drm_fence_unreference_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       int ret;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       ret = 0;
+
+       if (!fm->initialized) {
+               DRM_ERROR("The DRM driver does not support fencing.\n");
+               return -EINVAL;
+       }
+
+       return drm_user_object_unref(file_priv, arg->handle, drm_fence_type);
+}
+
+int drm_fence_signaled_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       int ret;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       struct drm_fence_object *fence;
+       unsigned long flags;
+       ret = 0;
+
+       if (!fm->initialized) {
+               DRM_ERROR("The DRM driver does not support fencing.\n");
+               return -EINVAL;
+       }
+
+       fence = drm_lookup_fence_object(file_priv, arg->handle);
+       if (!fence)
+               return -EINVAL;
+
+       read_lock_irqsave(&fm->lock, flags);
+       arg->class = fence->class;
+       arg->type = fence->type;
+       arg->signaled = fence->signaled;
+       read_unlock_irqrestore(&fm->lock, flags);
+       drm_fence_usage_deref_unlocked(&fence);
+
+       return ret;
+}
+
+int drm_fence_flush_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       int ret;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       struct drm_fence_object *fence;
+       unsigned long flags;
+       ret = 0;
+
+       if (!fm->initialized) {
+               DRM_ERROR("The DRM driver does not support fencing.\n");
+               return -EINVAL;
+       }
+
+       fence = drm_lookup_fence_object(file_priv, arg->handle);
+       if (!fence)
+               return -EINVAL;
+       ret = drm_fence_object_flush(fence, arg->type);
+
+       read_lock_irqsave(&fm->lock, flags);
+       arg->class = fence->class;
+       arg->type = fence->type;
+       arg->signaled = fence->signaled;
+       read_unlock_irqrestore(&fm->lock, flags);
+       drm_fence_usage_deref_unlocked(&fence);
+
+       return ret;
+}
+
+
+int drm_fence_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       int ret;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       struct drm_fence_object *fence;
+       unsigned long flags;
+       ret = 0;
+
+       if (!fm->initialized) {
+               DRM_ERROR("The DRM driver does not support fencing.\n");
+               return -EINVAL;
+       }
+
+       fence = drm_lookup_fence_object(file_priv, arg->handle);
+       if (!fence)
+               return -EINVAL;
+       ret = drm_fence_object_wait(fence,
+                                   arg->flags & DRM_FENCE_FLAG_WAIT_LAZY,
+                                   0, arg->type);
+
+       read_lock_irqsave(&fm->lock, flags);
+       arg->class = fence->class;
+       arg->type = fence->type;
+       arg->signaled = fence->signaled;
+       read_unlock_irqrestore(&fm->lock, flags);
+       drm_fence_usage_deref_unlocked(&fence);
+
+       return ret;
+}
+
+
+int drm_fence_emit_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       int ret;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       struct drm_fence_object *fence;
+       unsigned long flags;
+       ret = 0;
+
+       if (!fm->initialized) {
+               DRM_ERROR("The DRM driver does not support fencing.\n");
+               return -EINVAL;
+       }
+
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
+       fence = drm_lookup_fence_object(file_priv, arg->handle);
+       if (!fence)
+               return -EINVAL;
+       ret = drm_fence_object_emit(fence, arg->flags, arg->class,
+                                   arg->type);
+
+       read_lock_irqsave(&fm->lock, flags);
+       arg->class = fence->class;
+       arg->type = fence->type;
+       arg->signaled = fence->signaled;
+       read_unlock_irqrestore(&fm->lock, flags);
+       drm_fence_usage_deref_unlocked(&fence);
+
+       return ret;
+}
+
+int drm_fence_buffers_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+       int ret;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_arg *arg = data;
+       struct drm_fence_object *fence;
+       unsigned long flags;
+       ret = 0;
+
+       if (!fm->initialized) {
+               DRM_ERROR("The DRM driver does not support fencing.\n");
+               return -EINVAL;
+       }
+
+       if (!dev->bm.initialized) {
+               DRM_ERROR("Buffer object manager is not initialized\n");
                return -EINVAL;
        }
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
+       ret = drm_fence_buffer_objects(file_priv, NULL, arg->flags,
+                                      NULL, &fence);
+       if (ret)
+               return ret;
+       ret = drm_fence_add_user_object(file_priv, fence,
+                                       arg->flags &
+                                       DRM_FENCE_FLAG_SHAREABLE);
+       if (ret)
+               return ret;
+       atomic_inc(&fence->usage);
+       arg->handle = fence->base.hash.key;
+
        read_lock_irqsave(&fm->lock, flags);
-       arg.class = fence->class;
-       arg.type = fence->type;
-       arg.signaled = fence->signaled;
+       arg->class = fence->class;
+       arg->type = fence->type;
+       arg->signaled = fence->signaled;
        read_unlock_irqrestore(&fm->lock, flags);
        drm_fence_usage_deref_unlocked(&fence);
 
-       DRM_COPY_TO_USER_IOCTL((void __user *)data, arg, sizeof(arg));
        return ret;
 }
index e54d507..ab5f4ca 100644 (file)
@@ -39,9 +39,9 @@
 #include <linux/poll.h>
 
 static int drm_open_helper(struct inode *inode, struct file *filp,
-                          drm_device_t * dev);
+                          struct drm_device * dev);
 
-static int drm_setup(drm_device_t * dev)
+static int drm_setup(struct drm_device * dev)
 {
        drm_local_map_t *map;
        int i;
@@ -128,7 +128,7 @@ static int drm_setup(drm_device_t * dev)
  */
 int drm_open(struct inode *inode, struct file *filp)
 {
-       drm_device_t *dev = NULL;
+       struct drm_device *dev = NULL;
        int minor = iminor(inode);
        int retcode = 0;
 
@@ -176,7 +176,7 @@ EXPORT_SYMBOL(drm_open);
  */
 int drm_stub_open(struct inode *inode, struct file *filp)
 {
-       drm_device_t *dev = NULL;
+       struct drm_device *dev = NULL;
        int minor = iminor(inode);
        int err = -ENODEV;
        const struct file_operations *old_fops;
@@ -232,10 +232,10 @@ static int drm_cpu_valid(void)
  * filp and add it into the double linked list in \p dev.
  */
 static int drm_open_helper(struct inode *inode, struct file *filp,
-                          drm_device_t * dev)
+                          struct drm_device * dev)
 {
        int minor = iminor(inode);
-       drm_file_t *priv;
+       struct drm_file *priv;
        int ret;
        int i,j;
 
@@ -252,6 +252,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
 
        memset(priv, 0, sizeof(*priv));
        filp->private_data = priv;
+       priv->filp = filp;
        priv->uid = current->euid;
        priv->pid = current->pid;
        priv->minor = minor;
@@ -320,8 +321,8 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
 /** No-op. */
 int drm_fasync(int fd, struct file *filp, int on)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
+       struct drm_file *priv = filp->private_data;
+       struct drm_device *dev = priv->head->dev;
        int retcode;
 
        DRM_DEBUG("fd = %d, device = 0x%lx\n", fd,
@@ -335,10 +336,10 @@ EXPORT_SYMBOL(drm_fasync);
 
 static void drm_object_release(struct file *filp) {
 
-        drm_file_t *priv = filp->private_data;
+       struct drm_file *priv = filp->private_data;
        struct list_head *head;
-       drm_user_object_t *user_object;
-       drm_ref_object_t *ref_object;
+       struct drm_user_object *user_object;
+       struct drm_ref_object *ref_object;
        int i;
 
        /*
@@ -351,7 +352,7 @@ static void drm_object_release(struct file *filp) {
 
        head = &priv->refd_objects;
        while (head->next != head) {
-               ref_object = list_entry(head->next, drm_ref_object_t, list);
+               ref_object = list_entry(head->next, struct drm_ref_object, list);
                drm_remove_ref_object(priv, ref_object);
                head = &priv->refd_objects;
        }
@@ -362,7 +363,7 @@ static void drm_object_release(struct file *filp) {
 
        head = &priv->user_objects;
        while (head->next != head) {
-               user_object = list_entry(head->next, drm_user_object_t, list);
+               user_object = list_entry(head->next, struct drm_user_object, list);
                drm_remove_user_object(priv, user_object);
                head = &priv->user_objects;
        }
@@ -376,7 +377,7 @@ static void drm_object_release(struct file *filp) {
  * Release file.
  *
  * \param inode device inode
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \return zero on success or a negative number on failure.
  *
  * If the hardware lock is held then free it, and take it again for the kernel
@@ -386,29 +387,28 @@ static void drm_object_release(struct file *filp) {
  */
 int drm_release(struct inode *inode, struct file *filp)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev;
+       struct drm_file *file_priv = filp->private_data;
+       struct drm_device *dev = file_priv->head->dev;
        int retcode = 0;
 
        lock_kernel();
-       dev = priv->head->dev;
 
        DRM_DEBUG("open_count = %d\n", dev->open_count);
 
        if (dev->driver->preclose)
-               dev->driver->preclose(dev, filp);
+               dev->driver->preclose(dev, file_priv);
 
        /* ========================================================
         * Begin inline drm_release
         */
 
        DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n",
-                 current->pid, (long)old_encode_dev(priv->head->device),
+                 current->pid, (long)old_encode_dev(file_priv->head->device),
                  dev->open_count);
 
        if (dev->driver->reclaim_buffers_locked && dev->lock.hw_lock) {
-               if (drm_i_have_hw_lock(filp)) {
-                       dev->driver->reclaim_buffers_locked(dev, filp);
+               if (drm_i_have_hw_lock(dev, file_priv)) {
+                       dev->driver->reclaim_buffers_locked(dev, file_priv);
                } else {
                        unsigned long _end=jiffies + 3*DRM_HZ;
                        int locked = 0;
@@ -434,7 +434,7 @@ int drm_release(struct inode *inode, struct file *filp)
                                          "\tI will go on reclaiming the buffers anyway.\n");
                        }
 
-                       dev->driver->reclaim_buffers_locked(dev, filp);
+                       dev->driver->reclaim_buffers_locked(dev, file_priv);
                        drm_idlelock_release(&dev->lock);
                }
        }
@@ -442,12 +442,12 @@ int drm_release(struct inode *inode, struct file *filp)
        if (dev->driver->reclaim_buffers_idlelocked && dev->lock.hw_lock) {
 
                drm_idlelock_take(&dev->lock);
-               dev->driver->reclaim_buffers_idlelocked(dev, filp);
+               dev->driver->reclaim_buffers_idlelocked(dev, file_priv);
                drm_idlelock_release(&dev->lock);
 
        }
 
-       if (drm_i_have_hw_lock(filp)) {
+       if (drm_i_have_hw_lock(dev, file_priv)) {
                DRM_DEBUG("File %p released, freeing lock for context %d\n",
                          filp, _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
 
@@ -458,7 +458,7 @@ int drm_release(struct inode *inode, struct file *filp)
 
        if (drm_core_check_feature(dev, DRIVER_HAVE_DMA) &&
            !dev->driver->reclaim_buffers_locked) {
-               dev->driver->reclaim_buffers(dev, filp);
+               dev->driver->reclaim_buffers(dev, file_priv);
        }
 
        drm_fasync(-1, filp, 0);
@@ -466,10 +466,10 @@ int drm_release(struct inode *inode, struct file *filp)
        mutex_lock(&dev->ctxlist_mutex);
 
        if (!list_empty(&dev->ctxlist)) {
-               drm_ctx_list_t *pos, *n;
+               struct drm_ctx_list *pos, *n;
 
                list_for_each_entry_safe(pos, n, &dev->ctxlist, head) {
-                       if (pos->tag == priv &&
+                       if (pos->tag == file_priv &&
                            pos->handle != DRM_KERNEL_CONTEXT) {
                                if (dev->driver->context_dtor)
                                        dev->driver->context_dtor(dev,
@@ -487,18 +487,18 @@ int drm_release(struct inode *inode, struct file *filp)
 
        mutex_lock(&dev->struct_mutex);
        drm_object_release(filp);
-       if (priv->remove_auth_on_close == 1) {
-               drm_file_t *temp;
+       if (file_priv->remove_auth_on_close == 1) {
+               struct drm_file *temp;
 
                list_for_each_entry(temp, &dev->filelist, lhead)
                        temp->authenticated = 0;
        }
-       list_del(&priv->lhead);
+       list_del(&file_priv->lhead);
        mutex_unlock(&dev->struct_mutex);
 
        if (dev->driver->postclose)
-               dev->driver->postclose(dev, priv);
-       drm_free(priv, sizeof(*priv), DRM_MEM_FILES);
+               dev->driver->postclose(dev, file_priv);
+       drm_free(file_priv, sizeof(*file_priv), DRM_MEM_FILES);
 
        /* ========================================================
         * End inline drm_release
index 6f17e11..a8ec846 100644 (file)
@@ -36,7 +36,7 @@
 #include "drm_hashtab.h"
 #include <linux/hash.h>
 
-int drm_ht_create(drm_open_hash_t * ht, unsigned int order)
+int drm_ht_create(struct drm_open_hash * ht, unsigned int order)
 {
        unsigned int i;
 
@@ -63,9 +63,9 @@ int drm_ht_create(drm_open_hash_t * ht, unsigned int order)
        return 0;
 }
 
-void drm_ht_verbose_list(drm_open_hash_t * ht, unsigned long key)
+void drm_ht_verbose_list(struct drm_open_hash * ht, unsigned long key)
 {
-       drm_hash_item_t *entry;
+       struct drm_hash_item *entry;
        struct hlist_head *h_list;
        struct hlist_node *list;
        unsigned int hashed_key;
@@ -75,15 +75,15 @@ void drm_ht_verbose_list(drm_open_hash_t * ht, unsigned long key)
        DRM_DEBUG("Key is 0x%08lx, Hashed key is 0x%08x\n", key, hashed_key);
        h_list = &ht->table[hashed_key];
        hlist_for_each(list, h_list) {
-               entry = hlist_entry(list, drm_hash_item_t, head);
+               entry = hlist_entry(list, struct drm_hash_item, head);
                DRM_DEBUG("count %d, key: 0x%08lx\n", count++, entry->key);
        }
 }
 
-static struct hlist_node *drm_ht_find_key(drm_open_hash_t * ht,
+static struct hlist_node *drm_ht_find_key(struct drm_open_hash * ht,
                                          unsigned long key)
 {
-       drm_hash_item_t *entry;
+       struct drm_hash_item *entry;
        struct hlist_head *h_list;
        struct hlist_node *list;
        unsigned int hashed_key;
@@ -91,7 +91,7 @@ static struct hlist_node *drm_ht_find_key(drm_open_hash_t * ht,
        hashed_key = hash_long(key, ht->order);
        h_list = &ht->table[hashed_key];
        hlist_for_each(list, h_list) {
-               entry = hlist_entry(list, drm_hash_item_t, head);
+               entry = hlist_entry(list, struct drm_hash_item, head);
                if (entry->key == key)
                        return list;
                if (entry->key > key)
@@ -100,9 +100,9 @@ static struct hlist_node *drm_ht_find_key(drm_open_hash_t * ht,
        return NULL;
 }
 
-int drm_ht_insert_item(drm_open_hash_t * ht, drm_hash_item_t * item)
+int drm_ht_insert_item(struct drm_open_hash * ht, struct drm_hash_item * item)
 {
-       drm_hash_item_t *entry;
+       struct drm_hash_item *entry;
        struct hlist_head *h_list;
        struct hlist_node *list, *parent;
        unsigned int hashed_key;
@@ -112,7 +112,7 @@ int drm_ht_insert_item(drm_open_hash_t * ht, drm_hash_item_t * item)
        h_list = &ht->table[hashed_key];
        parent = NULL;
        hlist_for_each(list, h_list) {
-               entry = hlist_entry(list, drm_hash_item_t, head);
+               entry = hlist_entry(list, struct drm_hash_item, head);
                if (entry->key == key)
                        return -EINVAL;
                if (entry->key > key)
@@ -131,7 +131,7 @@ int drm_ht_insert_item(drm_open_hash_t * ht, drm_hash_item_t * item)
  * Just insert an item and return any "bits" bit key that hasn't been 
  * used before.
  */
-int drm_ht_just_insert_please(drm_open_hash_t * ht, drm_hash_item_t * item,
+int drm_ht_just_insert_please(struct drm_open_hash * ht, struct drm_hash_item * item,
                              unsigned long seed, int bits, int shift,
                              unsigned long add)
 {
@@ -155,8 +155,8 @@ int drm_ht_just_insert_please(drm_open_hash_t * ht, drm_hash_item_t * item,
        return 0;
 }
 
-int drm_ht_find_item(drm_open_hash_t * ht, unsigned long key,
-                    drm_hash_item_t ** item)
+int drm_ht_find_item(struct drm_open_hash * ht, unsigned long key,
+                    struct drm_hash_item ** item)
 {
        struct hlist_node *list;
 
@@ -164,11 +164,11 @@ int drm_ht_find_item(drm_open_hash_t * ht, unsigned long key,
        if (!list)
                return -EINVAL;
 
-       *item = hlist_entry(list, drm_hash_item_t, head);
+       *item = hlist_entry(list, struct drm_hash_item, head);
        return 0;
 }
 
-int drm_ht_remove_key(drm_open_hash_t * ht, unsigned long key)
+int drm_ht_remove_key(struct drm_open_hash * ht, unsigned long key)
 {
        struct hlist_node *list;
 
@@ -181,14 +181,14 @@ int drm_ht_remove_key(drm_open_hash_t * ht, unsigned long key)
        return -EINVAL;
 }
 
-int drm_ht_remove_item(drm_open_hash_t * ht, drm_hash_item_t * item)
+int drm_ht_remove_item(struct drm_open_hash * ht, struct drm_hash_item * item)
 {
        hlist_del_init(&item->head);
        ht->fill--;
        return 0;
 }
 
-void drm_ht_remove(drm_open_hash_t * ht)
+void drm_ht_remove(struct drm_open_hash * ht)
 {
        if (ht->table) {
                if (ht->use_vmalloc)
index 613091c..0f13767 100644 (file)
 
 #define drm_hash_entry(_ptr, _type, _member) container_of(_ptr, _type, _member)
 
-typedef struct drm_hash_item{
+struct drm_hash_item {
        struct hlist_node head;
        unsigned long key;
-} drm_hash_item_t;
+};
 
-typedef struct drm_open_hash{
+struct drm_open_hash {
        unsigned int size;
        unsigned int order;
        unsigned int fill;
        struct hlist_head *table;
        int use_vmalloc;
-} drm_open_hash_t;
+};
 
 
-extern int drm_ht_create(drm_open_hash_t *ht, unsigned int order);
-extern int drm_ht_insert_item(drm_open_hash_t *ht, drm_hash_item_t *item);
-extern int drm_ht_just_insert_please(drm_open_hash_t *ht, drm_hash_item_t *item,
+extern int drm_ht_create(struct drm_open_hash *ht, unsigned int order);
+extern int drm_ht_insert_item(struct drm_open_hash *ht, struct drm_hash_item *item);
+extern int drm_ht_just_insert_please(struct drm_open_hash *ht, struct drm_hash_item *item,
                                     unsigned long seed, int bits, int shift,
                                     unsigned long add);
-extern int drm_ht_find_item(drm_open_hash_t *ht, unsigned long key, drm_hash_item_t **item);
+extern int drm_ht_find_item(struct drm_open_hash *ht, unsigned long key, struct drm_hash_item **item);
 
-extern void drm_ht_verbose_list(drm_open_hash_t *ht, unsigned long key);
-extern int drm_ht_remove_key(drm_open_hash_t *ht, unsigned long key);
-extern int drm_ht_remove_item(drm_open_hash_t *ht, drm_hash_item_t *item);
-extern void drm_ht_remove(drm_open_hash_t *ht);
+extern void drm_ht_verbose_list(struct drm_open_hash *ht, unsigned long key);
+extern int drm_ht_remove_key(struct drm_open_hash *ht, unsigned long key);
+extern int drm_ht_remove_item(struct drm_open_hash *ht, struct drm_hash_item *item);
+extern void drm_ht_remove(struct drm_open_hash *ht);
 
 
 #endif
index bbab3ea..558376d 100644 (file)
@@ -82,7 +82,7 @@ static int compat_drm_version(struct file *file, unsigned int cmd,
                              unsigned long arg)
 {
        drm_version32_t v32;
-       drm_version_t __user *version;
+       struct drm_version __user *version;
        int err;
 
        if (copy_from_user(&v32, (void __user *)arg, sizeof(v32)))
@@ -129,7 +129,7 @@ static int compat_drm_getunique(struct file *file, unsigned int cmd,
                                unsigned long arg)
 {
        drm_unique32_t uq32;
-       drm_unique_t __user *u;
+       struct drm_unique __user *u;
        int err;
 
        if (copy_from_user(&uq32, (void __user *)arg, sizeof(uq32)))
@@ -159,7 +159,7 @@ static int compat_drm_setunique(struct file *file, unsigned int cmd,
                                unsigned long arg)
 {
        drm_unique32_t uq32;
-       drm_unique_t __user *u;
+       struct drm_unique __user *u;
 
        if (copy_from_user(&uq32, (void __user *)arg, sizeof(uq32)))
                return -EFAULT;
@@ -179,8 +179,8 @@ static int compat_drm_setunique(struct file *file, unsigned int cmd,
 typedef struct drm_map32 {
        u32 offset;             /**< Requested physical address (0 for SAREA)*/
        u32 size;               /**< Requested physical size (bytes) */
-       drm_map_type_t type;    /**< Type of memory to map */
-       drm_map_flags_t flags;  /**< Flags */
+       enum drm_map_type type; /**< Type of memory to map */
+       enum drm_map_flags flags;       /**< Flags */
        u32 handle;             /**< User-space: "Handle" to pass to mmap() */
        int mtrr;               /**< MTRR slot used */
 } drm_map32_t;
@@ -190,7 +190,7 @@ static int compat_drm_getmap(struct file *file, unsigned int cmd,
 {
        drm_map32_t __user *argp = (void __user *)arg;
        drm_map32_t m32;
-       drm_map_t __user *map;
+       struct drm_map __user *map;
        int idx, err;
        void *handle;
 
@@ -228,7 +228,7 @@ static int compat_drm_addmap(struct file *file, unsigned int cmd,
 {
        drm_map32_t __user *argp = (void __user *)arg;
        drm_map32_t m32;
-       drm_map_t __user *map;
+       struct drm_map __user *map;
        int err;
        void *handle;
 
@@ -270,7 +270,7 @@ static int compat_drm_rmmap(struct file *file, unsigned int cmd,
                            unsigned long arg)
 {
        drm_map32_t __user *argp = (void __user *)arg;
-       drm_map_t __user *map;
+       struct drm_map __user *map;
        u32 handle;
 
        if (get_user(handle, &argp->handle))
@@ -300,7 +300,7 @@ static int compat_drm_getclient(struct file *file, unsigned int cmd,
 {
        drm_client32_t c32;
        drm_client32_t __user *argp = (void __user *)arg;
-       drm_client_t __user *client;
+       struct drm_client __user *client;
        int idx, err;
 
        if (get_user(idx, &argp->idx))
@@ -333,7 +333,7 @@ typedef struct drm_stats32 {
        u32 count;
        struct {
                u32 value;
-               drm_stat_type_t type;
+               enum drm_stat_type type;
        } data[15];
 } drm_stats32_t;
 
@@ -342,7 +342,7 @@ static int compat_drm_getstats(struct file *file, unsigned int cmd,
 {
        drm_stats32_t s32;
        drm_stats32_t __user *argp = (void __user *)arg;
-       drm_stats_t __user *stats;
+       struct drm_stats __user *stats;
        int i, err;
 
        stats = compat_alloc_user_space(sizeof(*stats));
@@ -379,7 +379,7 @@ static int compat_drm_addbufs(struct file *file, unsigned int cmd,
                              unsigned long arg)
 {
        drm_buf_desc32_t __user *argp = (void __user *)arg;
-       drm_buf_desc_t __user *buf;
+       struct drm_buf_desc __user *buf;
        int err;
        unsigned long agp_start;
 
@@ -411,7 +411,7 @@ static int compat_drm_markbufs(struct file *file, unsigned int cmd,
 {
        drm_buf_desc32_t b32;
        drm_buf_desc32_t __user *argp = (void __user *)arg;
-       drm_buf_desc_t __user *buf;
+       struct drm_buf_desc __user *buf;
 
        if (copy_from_user(&b32, argp, sizeof(b32)))
                return -EFAULT;
@@ -440,8 +440,8 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd,
        drm_buf_info32_t req32;
        drm_buf_info32_t __user *argp = (void __user *)arg;
        drm_buf_desc32_t __user *to;
-       drm_buf_info_t __user *request;
-       drm_buf_desc_t __user *list;
+       struct drm_buf_info __user *request;
+       struct drm_buf_desc __user *list;
        size_t nbytes;
        int i, err;
        int count, actual;
@@ -457,11 +457,11 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd,
            && !access_ok(VERIFY_WRITE, to, count * sizeof(drm_buf_desc32_t)))
                return -EFAULT;
 
-       nbytes = sizeof(*request) + count * sizeof(drm_buf_desc_t);
+       nbytes = sizeof(*request) + count * sizeof(struct drm_buf_desc);
        request = compat_alloc_user_space(nbytes);
        if (!access_ok(VERIFY_WRITE, request, nbytes))
                return -EFAULT;
-       list = (drm_buf_desc_t *) (request + 1);
+       list = (struct drm_buf_desc *) (request + 1);
 
        if (__put_user(count, &request->count)
            || __put_user(list, &request->list))
@@ -477,7 +477,7 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd,
        if (count >= actual)
                for (i = 0; i < actual; ++i)
                        if (__copy_in_user(&to[i], &list[i],
-                                          offsetof(drm_buf_desc_t, flags)))
+                                          offsetof(struct drm_buf_desc, flags)))
                                return -EFAULT;
 
        if (__put_user(actual, &argp->count))
@@ -505,8 +505,8 @@ static int compat_drm_mapbufs(struct file *file, unsigned int cmd,
        drm_buf_map32_t __user *argp = (void __user *)arg;
        drm_buf_map32_t req32;
        drm_buf_pub32_t __user *list32;
-       drm_buf_map_t __user *request;
-       drm_buf_pub_t __user *list;
+       struct drm_buf_map __user *request;
+       struct drm_buf_pub __user *list;
        int i, err;
        int count, actual;
        size_t nbytes;
@@ -519,11 +519,11 @@ static int compat_drm_mapbufs(struct file *file, unsigned int cmd,
 
        if (count < 0)
                return -EINVAL;
-       nbytes = sizeof(*request) + count * sizeof(drm_buf_pub_t);
+       nbytes = sizeof(*request) + count * sizeof(struct drm_buf_pub);
        request = compat_alloc_user_space(nbytes);
        if (!access_ok(VERIFY_WRITE, request, nbytes))
                return -EFAULT;
-       list = (drm_buf_pub_t *) (request + 1);
+       list = (struct drm_buf_pub *) (request + 1);
 
        if (__put_user(count, &request->count)
            || __put_user(list, &request->list))
@@ -539,7 +539,7 @@ static int compat_drm_mapbufs(struct file *file, unsigned int cmd,
        if (count >= actual)
                for (i = 0; i < actual; ++i)
                        if (__copy_in_user(&list32[i], &list[i],
-                                          offsetof(drm_buf_pub_t, address))
+                                          offsetof(struct drm_buf_pub, address))
                            || __get_user(addr, &list[i].address)
                            || __put_user((unsigned long)addr,
                                          &list32[i].address))
@@ -562,7 +562,7 @@ static int compat_drm_freebufs(struct file *file, unsigned int cmd,
                               unsigned long arg)
 {
        drm_buf_free32_t req32;
-       drm_buf_free_t __user *request;
+       struct drm_buf_free __user *request;
        drm_buf_free32_t __user *argp = (void __user *)arg;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
@@ -589,7 +589,7 @@ static int compat_drm_setsareactx(struct file *file, unsigned int cmd,
                                  unsigned long arg)
 {
        drm_ctx_priv_map32_t req32;
-       drm_ctx_priv_map_t __user *request;
+       struct drm_ctx_priv_map __user *request;
        drm_ctx_priv_map32_t __user *argp = (void __user *)arg;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
@@ -610,7 +610,7 @@ static int compat_drm_setsareactx(struct file *file, unsigned int cmd,
 static int compat_drm_getsareactx(struct file *file, unsigned int cmd,
                                  unsigned long arg)
 {
-       drm_ctx_priv_map_t __user *request;
+       struct drm_ctx_priv_map __user *request;
        drm_ctx_priv_map32_t __user *argp = (void __user *)arg;
        int err;
        unsigned int ctx_id;
@@ -648,7 +648,7 @@ static int compat_drm_resctx(struct file *file, unsigned int cmd,
 {
        drm_ctx_res32_t __user *argp = (void __user *)arg;
        drm_ctx_res32_t res32;
-       drm_ctx_res_t __user *res;
+       struct drm_ctx_res __user *res;
        int err;
 
        if (copy_from_user(&res32, argp, sizeof(res32)))
@@ -658,7 +658,7 @@ static int compat_drm_resctx(struct file *file, unsigned int cmd,
        if (!access_ok(VERIFY_WRITE, res, sizeof(*res)))
                return -EFAULT;
        if (__put_user(res32.count, &res->count)
-           || __put_user((drm_ctx_t __user *)(unsigned long)res32.contexts,
+           || __put_user((struct drm_ctx __user *) (unsigned long)res32.contexts,
                          &res->contexts))
                return -EFAULT;
 
@@ -679,7 +679,7 @@ typedef struct drm_dma32 {
        int send_count;           /**< Number of buffers to send */
        u32 send_indices;         /**< List of handles to buffers */
        u32 send_sizes;           /**< Lengths of data to send */
-       drm_dma_flags_t flags;    /**< Flags */
+       enum drm_dma_flags flags;                 /**< Flags */
        int request_count;        /**< Number of buffers requested */
        int request_size;         /**< Desired size for buffers */
        u32 request_indices;      /**< Buffer information */
@@ -692,7 +692,7 @@ static int compat_drm_dma(struct file *file, unsigned int cmd,
 {
        drm_dma32_t d32;
        drm_dma32_t __user *argp = (void __user *)arg;
-       drm_dma_t __user *d;
+       struct drm_dma __user *d;
        int err;
 
        if (copy_from_user(&d32, argp, sizeof(d32)))
@@ -740,7 +740,7 @@ static int compat_drm_agp_enable(struct file *file, unsigned int cmd,
 {
        drm_agp_mode32_t __user *argp = (void __user *)arg;
        drm_agp_mode32_t m32;
-       drm_agp_mode_t __user *mode;
+       struct drm_agp_mode __user *mode;
 
        if (get_user(m32.mode, &argp->mode))
                return -EFAULT;
@@ -772,7 +772,7 @@ static int compat_drm_agp_info(struct file *file, unsigned int cmd,
 {
        drm_agp_info32_t __user *argp = (void __user *)arg;
        drm_agp_info32_t i32;
-       drm_agp_info_t __user *info;
+       struct drm_agp_info __user *info;
        int err;
 
        info = compat_alloc_user_space(sizeof(*info));
@@ -813,7 +813,7 @@ static int compat_drm_agp_alloc(struct file *file, unsigned int cmd,
 {
        drm_agp_buffer32_t __user *argp = (void __user *)arg;
        drm_agp_buffer32_t req32;
-       drm_agp_buffer_t __user *request;
+       struct drm_agp_buffer __user *request;
        int err;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
@@ -845,7 +845,7 @@ static int compat_drm_agp_free(struct file *file, unsigned int cmd,
                               unsigned long arg)
 {
        drm_agp_buffer32_t __user *argp = (void __user *)arg;
-       drm_agp_buffer_t __user *request;
+       struct drm_agp_buffer __user *request;
        u32 handle;
 
        request = compat_alloc_user_space(sizeof(*request));
@@ -868,7 +868,7 @@ static int compat_drm_agp_bind(struct file *file, unsigned int cmd,
 {
        drm_agp_binding32_t __user *argp = (void __user *)arg;
        drm_agp_binding32_t req32;
-       drm_agp_binding_t __user *request;
+       struct drm_agp_binding __user *request;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
                return -EFAULT;
@@ -887,7 +887,7 @@ static int compat_drm_agp_unbind(struct file *file, unsigned int cmd,
                                 unsigned long arg)
 {
        drm_agp_binding32_t __user *argp = (void __user *)arg;
-       drm_agp_binding_t __user *request;
+       struct drm_agp_binding __user *request;
        u32 handle;
 
        request = compat_alloc_user_space(sizeof(*request));
@@ -910,7 +910,7 @@ static int compat_drm_sg_alloc(struct file *file, unsigned int cmd,
                               unsigned long arg)
 {
        drm_scatter_gather32_t __user *argp = (void __user *)arg;
-       drm_scatter_gather_t __user *request;
+       struct drm_scatter_gather __user *request;
        int err;
        unsigned long x;
 
@@ -938,7 +938,7 @@ static int compat_drm_sg_free(struct file *file, unsigned int cmd,
                              unsigned long arg)
 {
        drm_scatter_gather32_t __user *argp = (void __user *)arg;
-       drm_scatter_gather_t __user *request;
+       struct drm_scatter_gather __user *request;
        unsigned long x;
 
        request = compat_alloc_user_space(sizeof(*request));
@@ -953,13 +953,13 @@ static int compat_drm_sg_free(struct file *file, unsigned int cmd,
 }
 
 struct drm_wait_vblank_request32 {
-       drm_vblank_seq_type_t type;
+       enum drm_vblank_seq_type type;
        unsigned int sequence;
        u32 signal;
 };
 
 struct drm_wait_vblank_reply32 {
-       drm_vblank_seq_type_t type;
+       enum drm_vblank_seq_type type;
        unsigned int sequence;
        s32 tval_sec;
        s32 tval_usec;
@@ -975,7 +975,7 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd,
 {
        drm_wait_vblank32_t __user *argp = (void __user *)arg;
        drm_wait_vblank32_t req32;
-       drm_wait_vblank_t __user *request;
+       union drm_wait_vblank __user *request;
        int err;
 
        if (copy_from_user(&req32, argp, sizeof(req32)))
@@ -1040,7 +1040,7 @@ drm_ioctl_compat_t *drm_compat_ioctls[] = {
  * Called whenever a 32-bit process running under a 64-bit kernel
  * performs an ioctl on /dev/drm.
  *
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument.
  * \return zero on success or negative number on failure.
index 97df972..f3f757d 100644 (file)
  * Get the bus id.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_unique structure.
  * \return zero on success or a negative number on failure.
  *
  * Copies the bus id from drm_device::unique into user space.
  */
-int drm_getunique(struct inode *inode, struct file *filp,
-                 unsigned int cmd, unsigned long arg)
+int drm_getunique(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_unique_t __user *argp = (void __user *)arg;
-       drm_unique_t u;
+       struct drm_unique *u = data;
 
-       if (copy_from_user(&u, argp, sizeof(u)))
-               return -EFAULT;
-       if (u.unique_len >= dev->unique_len) {
-               if (copy_to_user(u.unique, dev->unique, dev->unique_len))
+       if (u->unique_len >= dev->unique_len) {
+               if (copy_to_user(u->unique, dev->unique, dev->unique_len))
                        return -EFAULT;
        }
-       u.unique_len = dev->unique_len;
-       if (copy_to_user(argp, &u, sizeof(u)))
-               return -EFAULT;
+       u->unique_len = dev->unique_len;
+
        return 0;
 }
 
@@ -73,7 +67,7 @@ int drm_getunique(struct inode *inode, struct file *filp,
  * Set the bus id.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_unique structure.
  * \return zero on success or a negative number on failure.
@@ -83,28 +77,23 @@ int drm_getunique(struct inode *inode, struct file *filp,
  * in interface version 1.1 and will return EBUSY when setversion has requested
  * version 1.1 or greater.
  */
-int drm_setunique(struct inode *inode, struct file *filp,
-                 unsigned int cmd, unsigned long arg)
+int drm_setunique(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_unique_t u;
+       struct drm_unique *u = data;
        int domain, bus, slot, func, ret;
 
        if (dev->unique_len || dev->unique)
                return -EBUSY;
 
-       if (copy_from_user(&u, (drm_unique_t __user *) arg, sizeof(u)))
-               return -EFAULT;
-
-       if (!u.unique_len || u.unique_len > 1024)
+       if (!u->unique_len || u->unique_len > 1024)
                return -EINVAL;
 
-       dev->unique_len = u.unique_len;
-       dev->unique = drm_alloc(u.unique_len + 1, DRM_MEM_DRIVER);
+       dev->unique_len = u->unique_len;
+       dev->unique = drm_alloc(u->unique_len + 1, DRM_MEM_DRIVER);
        if (!dev->unique)
                return -ENOMEM;
-       if (copy_from_user(dev->unique, u.unique, dev->unique_len))
+       if (copy_from_user(dev->unique, u->unique, dev->unique_len))
                return -EFAULT;
 
        dev->unique[dev->unique_len] = '\0';
@@ -121,7 +110,7 @@ int drm_setunique(struct inode *inode, struct file *filp,
         */
        ret = sscanf(dev->unique, "PCI:%d:%d:%d", &bus, &slot, &func);
        if (ret != 3)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        domain = bus >> 8;
        bus &= 0xff;
 
@@ -134,7 +123,7 @@ int drm_setunique(struct inode *inode, struct file *filp,
        return 0;
 }
 
-static int drm_set_busid(drm_device_t * dev)
+static int drm_set_busid(struct drm_device * dev)
 {
        int len;
        if (dev->unique != NULL)
@@ -167,7 +156,7 @@ static int drm_set_busid(drm_device_t * dev)
  * Get a mapping information.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_map structure.
  *
@@ -176,21 +165,16 @@ static int drm_set_busid(drm_device_t * dev)
  * Searches for the mapping with the specified offset and copies its information
  * into userspace
  */
-int drm_getmap(struct inode *inode, struct file *filp,
-              unsigned int cmd, unsigned long arg)
+int drm_getmap(struct drm_device *dev, void *data,
+              struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_map_t __user *argp = (void __user *)arg;
-       drm_map_t map;
-       drm_map_list_t *r_list = NULL;
+       struct drm_map *map = data;
+       struct drm_map_list *r_list = NULL;
        struct list_head *list;
        int idx;
        int i;
 
-       if (copy_from_user(&map, argp, sizeof(map)))
-               return -EFAULT;
-       idx = map.offset;
+       idx = map->offset;
 
        mutex_lock(&dev->struct_mutex);
        if (idx < 0) {
@@ -201,7 +185,7 @@ int drm_getmap(struct inode *inode, struct file *filp,
        i = 0;
        list_for_each(list, &dev->maplist) {
                if (i == idx) {
-                       r_list = list_entry(list, drm_map_list_t, head);
+                       r_list = list_entry(list, struct drm_map_list, head);
                        break;
                }
                i++;
@@ -211,16 +195,14 @@ int drm_getmap(struct inode *inode, struct file *filp,
                return -EINVAL;
        }
 
-       map.offset = r_list->map->offset;
-       map.size = r_list->map->size;
-       map.type = r_list->map->type;
-       map.flags = r_list->map->flags;
-       map.handle = (void *)(unsigned long) r_list->user_token;
-       map.mtrr = r_list->map->mtrr;
+       map->offset = r_list->map->offset;
+       map->size = r_list->map->size;
+       map->type = r_list->map->type;
+       map->flags = r_list->map->flags;
+       map->handle = (void *)(unsigned long) r_list->user_token;
+       map->mtrr = r_list->map->mtrr;
        mutex_unlock(&dev->struct_mutex);
 
-       if (copy_to_user(argp, &map, sizeof(map)))
-               return -EFAULT;
        return 0;
 }
 
@@ -228,7 +210,7 @@ int drm_getmap(struct inode *inode, struct file *filp,
  * Get client information.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_client structure.
  *
@@ -237,20 +219,15 @@ int drm_getmap(struct inode *inode, struct file *filp,
  * Searches for the client with the specified index and copies its information
  * into userspace
  */
-int drm_getclient(struct inode *inode, struct file *filp,
-                 unsigned int cmd, unsigned long arg)
+int drm_getclient(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_client_t __user *argp = (drm_client_t __user *)arg;
-       drm_client_t client;
-       drm_file_t *pt;
+       struct drm_client *client = data;
+       struct drm_file *pt;
        int idx;
        int i;
 
-       if (copy_from_user(&client, argp, sizeof(client)))
-               return -EFAULT;
-       idx = client.idx;
+       idx = client->idx;
        mutex_lock(&dev->struct_mutex);
        
        if (list_empty(&dev->filelist)) {
@@ -264,15 +241,13 @@ int drm_getclient(struct inode *inode, struct file *filp,
                        break;
        }
 
-       client.auth = pt->authenticated;
-       client.pid = pt->pid;
-       client.uid = pt->uid;
-       client.magic = pt->magic;
-       client.iocs = pt->ioctl_count;
+       client->auth = pt->authenticated;
+       client->pid = pt->pid;
+       client->uid = pt->uid;
+       client->magic = pt->magic;
+       client->iocs = pt->ioctl_count;
        mutex_unlock(&dev->struct_mutex);
 
-       if (copy_to_user(argp, &client, sizeof(client)))
-               return -EFAULT;
        return 0;
 }
 
@@ -280,39 +255,35 @@ int drm_getclient(struct inode *inode, struct file *filp,
  * Get statistics information.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_stats structure.
  *
  * \return zero on success or a negative number on failure.
  */
-int drm_getstats(struct inode *inode, struct file *filp,
-                unsigned int cmd, unsigned long arg)
+int drm_getstats(struct drm_device *dev, void *data,
+                struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_stats_t stats;
+       struct drm_stats *stats = data;
        int i;
 
-       memset(&stats, 0, sizeof(stats));
+       memset(stats, 0, sizeof(stats));
 
        mutex_lock(&dev->struct_mutex);
 
        for (i = 0; i < dev->counters; i++) {
                if (dev->types[i] == _DRM_STAT_LOCK)
-                       stats.data[i].value
-                           (dev->lock.hw_lock ? dev->lock.hw_lock->lock : 0);
+                       stats->data[i].value =
+                           (dev->lock.hw_lock ? dev->lock.hw_lock->lock : 0);
                else
-                       stats.data[i].value = atomic_read(&dev->counts[i]);
-               stats.data[i].type = dev->types[i];
+                       stats->data[i].value = atomic_read(&dev->counts[i]);
+               stats->data[i].type = dev->types[i];
        }
 
-       stats.count = dev->counters;
+       stats->count = dev->counters;
 
        mutex_unlock(&dev->struct_mutex);
 
-       if (copy_to_user((drm_stats_t __user *) arg, &stats, sizeof(stats)))
-               return -EFAULT;
        return 0;
 }
 
@@ -320,39 +291,28 @@ int drm_getstats(struct inode *inode, struct file *filp,
  * Setversion ioctl.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_lock structure.
  * \return zero on success or negative number on failure.
  *
  * Sets the requested interface version
  */
-int drm_setversion(DRM_IOCTL_ARGS)
+int drm_setversion(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_set_version_t sv;
-       drm_set_version_t retv;
-       int if_version;
-       drm_set_version_t __user *argp = (void __user *)data;
-       if (copy_from_user(&sv, argp, sizeof(sv)))
-               return -EFAULT;
-
-       retv.drm_di_major = DRM_IF_MAJOR;
-       retv.drm_di_minor = DRM_IF_MINOR;
-       retv.drm_dd_major = dev->driver->major;
-       retv.drm_dd_minor = dev->driver->minor;
-
-       if (copy_to_user(argp, &retv, sizeof(retv)))
-               return -EFAULT;
-
-       if (sv.drm_di_major != -1) {
-               if (sv.drm_di_major != DRM_IF_MAJOR ||
-                   sv.drm_di_minor < 0 || sv.drm_di_minor > DRM_IF_MINOR)
-                       return -EINVAL;
-               if_version = DRM_IF_VERSION(sv.drm_di_major, sv.drm_di_minor);
+       struct drm_set_version *sv = data;
+       int if_version, retcode = 0;
+
+       if (sv->drm_di_major != -1) {
+               if (sv->drm_di_major != DRM_IF_MAJOR ||
+                   sv->drm_di_minor < 0 || sv->drm_di_minor > DRM_IF_MINOR) {
+                       retcode = -EINVAL;
+                       goto done;
+               }
+               if_version = DRM_IF_VERSION(sv->drm_di_major,
+                                           sv->drm_di_minor);
                dev->if_version = max(if_version, dev->if_version);
-               if (sv.drm_di_minor >= 1) {
+               if (sv->drm_di_minor >= 1) {
                        /*
                         * Version 1.1 includes tying of DRM to specific device
                         */
@@ -360,20 +320,30 @@ int drm_setversion(DRM_IOCTL_ARGS)
                }
        }
 
-       if (sv.drm_dd_major != -1) {
-               if (sv.drm_dd_major != dev->driver->major ||
-                   sv.drm_dd_minor < 0 || sv.drm_dd_minor > dev->driver->minor)
-                       return -EINVAL;
+       if (sv->drm_dd_major != -1) {
+               if (sv->drm_dd_major != dev->driver->major ||
+                   sv->drm_dd_minor < 0 || sv->drm_dd_minor >
+                   dev->driver->minor) {
+                       retcode = -EINVAL;
+                       goto done;
+               }
 
                if (dev->driver->set_version)
-                       dev->driver->set_version(dev, &sv);
+                       dev->driver->set_version(dev, sv);
        }
-       return 0;
+
+done:
+       sv->drm_di_major = DRM_IF_MAJOR;
+       sv->drm_di_minor = DRM_IF_MINOR;
+       sv->drm_dd_major = dev->driver->major;
+       sv->drm_dd_minor = dev->driver->minor;
+
+       return retcode;
 }
 
 /** No-op ioctl. */
-int drm_noop(struct inode *inode, struct file *filp, unsigned int cmd,
-            unsigned long arg)
+int drm_noop(struct drm_device *dev, void *data,
+            struct drm_file *file_priv)
 {
        DRM_DEBUG("\n");
        return 0;
index 8871671..fe4316e 100644 (file)
@@ -41,7 +41,7 @@
  * Get interrupt from bus id.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_irq_busid structure.
  * \return zero on success or a negative number on failure.
  * This IOCTL is deprecated, and will now return EINVAL for any busid not equal
  * to that of the device that this DRM instance attached to.
  */
-int drm_irq_by_busid(struct inode *inode, struct file *filp,
-                    unsigned int cmd, unsigned long arg)
+int drm_irq_by_busid(struct drm_device *dev, void *data,
+                    struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_irq_busid_t __user *argp = (void __user *)arg;
-       drm_irq_busid_t p;
+       struct drm_irq_busid *p = data;
 
        if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
                return -EINVAL;
 
-       if (copy_from_user(&p, argp, sizeof(p)))
-               return -EFAULT;
-
-       if ((p.busnum >> 8) != drm_get_pci_domain(dev) ||
-           (p.busnum & 0xff) != dev->pdev->bus->number ||
-           p.devnum != PCI_SLOT(dev->pdev->devfn) || p.funcnum != PCI_FUNC(dev->pdev->devfn))
+       if ((p->busnum >> 8) != drm_get_pci_domain(dev) ||
+           (p->busnum & 0xff) != dev->pdev->bus->number ||
+           p->devnum != PCI_SLOT(dev->pdev->devfn) || p->funcnum != PCI_FUNC(dev->pdev->devfn))
                return -EINVAL;
 
-       p.irq = dev->irq;
+       p->irq = dev->irq;
+
+       DRM_DEBUG("%d:%d:%d => IRQ %d\n", p->busnum, p->devnum, p->funcnum,
+                 p->irq);
 
-       DRM_DEBUG("%d:%d:%d => IRQ %d\n", p.busnum, p.devnum, p.funcnum, p.irq);
-       if (copy_to_user(argp, &p, sizeof(p)))
-               return -EFAULT;
        return 0;
 }
 
@@ -86,7 +80,7 @@ int drm_irq_by_busid(struct inode *inode, struct file *filp,
  * \c drm_driver_irq_preinstall() and \c drm_driver_irq_postinstall() functions
  * before and after the installation.
  */
-static int drm_irq_install(drm_device_t * dev)
+static int drm_irq_install(struct drm_device * dev)
 {
        int ret;
        unsigned long sh_flags = 0;
@@ -154,7 +148,7 @@ static int drm_irq_install(drm_device_t * dev)
  *
  * Calls the driver's \c drm_driver_irq_uninstall() function, and stops the irq.
  */
-int drm_irq_uninstall(drm_device_t * dev)
+int drm_irq_uninstall(struct drm_device * dev)
 {
        int irq_enabled;
 
@@ -185,31 +179,27 @@ EXPORT_SYMBOL(drm_irq_uninstall);
  * IRQ control ioctl.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_control structure.
  * \return zero on success or a negative number on failure.
  *
  * Calls irq_install() or irq_uninstall() according to \p arg.
  */
-int drm_control(struct inode *inode, struct file *filp,
-               unsigned int cmd, unsigned long arg)
+int drm_control(struct drm_device *dev, void *data,
+               struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_control_t ctl;
+       struct drm_control *ctl = data;
 
        /* if we haven't irq we fallback for compatibility reasons - this used to be a separate function in drm_dma.h */
 
-       if (copy_from_user(&ctl, (drm_control_t __user *) arg, sizeof(ctl)))
-               return -EFAULT;
 
-       switch (ctl.func) {
+       switch (ctl->func) {
        case DRM_INST_HANDLER:
                if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
                        return 0;
                if (dev->if_version < DRM_IF_VERSION(1, 2) &&
-                   ctl.irq != dev->irq)
+                   ctl->irq != dev->irq)
                        return -EINVAL;
                return drm_irq_install(dev);
        case DRM_UNINST_HANDLER:
@@ -225,7 +215,7 @@ int drm_control(struct inode *inode, struct file *filp,
  * Wait for VBLANK.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param data user argument, pointing to a drm_wait_vblank structure.
  * \return zero on success or a negative number on failure.
@@ -240,12 +230,9 @@ int drm_control(struct inode *inode, struct file *filp,
  *
  * If a signal is not requested, then calls vblank_wait().
  */
-int drm_wait_vblank(DRM_IOCTL_ARGS)
+int drm_wait_vblank(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_wait_vblank_t __user *argp = (void __user *)data;
-       drm_wait_vblank_t vblwait;
+       union drm_wait_vblank *vblwait = data;
        struct timeval now;
        int ret = 0;
        unsigned int flags, seq;
@@ -253,18 +240,15 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
        if ((!dev->irq) || (!dev->irq_enabled))
                return -EINVAL;
 
-       if (copy_from_user(&vblwait, argp, sizeof(vblwait)))
-               return -EFAULT;
-
-       if (vblwait.request.type &
+       if (vblwait->request.type &
            ~(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK)) {
                DRM_ERROR("Unsupported type value 0x%x, supported mask 0x%x\n",
-                         vblwait.request.type,
+                         vblwait->request.type,
                          (_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK));
                return -EINVAL;
        }
 
-       flags = vblwait.request.type & _DRM_VBLANK_FLAGS_MASK;
+       flags = vblwait->request.type & _DRM_VBLANK_FLAGS_MASK;
 
        if (!drm_core_check_feature(dev, (flags & _DRM_VBLANK_SECONDARY) ?
                                    DRIVER_IRQ_VBL2 : DRIVER_IRQ_VBL))
@@ -273,10 +257,10 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
        seq = atomic_read((flags & _DRM_VBLANK_SECONDARY) ? &dev->vbl_received2
                          : &dev->vbl_received);
 
-       switch (vblwait.request.type & _DRM_VBLANK_TYPES_MASK) {
+       switch (vblwait->request.type & _DRM_VBLANK_TYPES_MASK) {
        case _DRM_VBLANK_RELATIVE:
-               vblwait.request.sequence += seq;
-               vblwait.request.type &= ~_DRM_VBLANK_RELATIVE;
+               vblwait->request.sequence += seq;
+               vblwait->request.type &= ~_DRM_VBLANK_RELATIVE;
        case _DRM_VBLANK_ABSOLUTE:
                break;
        default:
@@ -284,15 +268,15 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
        }
 
        if ((flags & _DRM_VBLANK_NEXTONMISS) &&
-           (seq - vblwait.request.sequence) <= (1<<23)) {
-               vblwait.request.sequence = seq + 1;
+           (seq - vblwait->request.sequence) <= (1<<23)) {
+               vblwait->request.sequence = seq + 1;
        }
 
        if (flags & _DRM_VBLANK_SIGNAL) {
                unsigned long irqflags;
                struct list_head *vbl_sigs = (flags & _DRM_VBLANK_SECONDARY)
                                      ? &dev->vbl_sigs2 : &dev->vbl_sigs;
-               drm_vbl_sig_t *vbl_sig;
+               struct drm_vbl_sig *vbl_sig;
 
                spin_lock_irqsave(&dev->vbl_lock, irqflags);
 
@@ -301,12 +285,13 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
                 * that case
                 */
                list_for_each_entry(vbl_sig, vbl_sigs, head) {
-                       if (vbl_sig->sequence == vblwait.request.sequence
-                           && vbl_sig->info.si_signo == vblwait.request.signal
+                       if (vbl_sig->sequence == vblwait->request.sequence
+                           && vbl_sig->info.si_signo ==
+                           vblwait->request.signal
                            && vbl_sig->task == current) {
                                spin_unlock_irqrestore(&dev->vbl_lock,
                                                       irqflags);
-                               vblwait.reply.sequence = seq;
+                               vblwait->reply.sequence = seq;
                                goto done;
                        }
                }
@@ -322,14 +307,14 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
 
                if (!
                    (vbl_sig =
-                    drm_alloc(sizeof(drm_vbl_sig_t), DRM_MEM_DRIVER))) {
+                    drm_alloc(sizeof(struct drm_vbl_sig), DRM_MEM_DRIVER))) {
                        return -ENOMEM;
                }
 
                memset((void *)vbl_sig, 0, sizeof(*vbl_sig));
 
-               vbl_sig->sequence = vblwait.request.sequence;
-               vbl_sig->info.si_signo = vblwait.request.signal;
+               vbl_sig->sequence = vblwait->request.sequence;
+               vbl_sig->info.si_signo = vblwait->request.signal;
                vbl_sig->task = current;
 
                spin_lock_irqsave(&dev->vbl_lock, irqflags);
@@ -338,25 +323,22 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
 
                spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
 
-               vblwait.reply.sequence = seq;
+               vblwait->reply.sequence = seq;
        } else {
                if (flags & _DRM_VBLANK_SECONDARY) {
                        if (dev->driver->vblank_wait2)
-                               ret = dev->driver->vblank_wait2(dev, &vblwait.request.sequence);
+                               ret = dev->driver->vblank_wait2(dev, &vblwait->request.sequence);
                } else if (dev->driver->vblank_wait)
                        ret =
                            dev->driver->vblank_wait(dev,
-                                                    &vblwait.request.sequence);
+                                                    &vblwait->request.sequence);
 
                do_gettimeofday(&now);
-               vblwait.reply.tval_sec = now.tv_sec;
-               vblwait.reply.tval_usec = now.tv_usec;
+               vblwait->reply.tval_sec = now.tv_sec;
+               vblwait->reply.tval_usec = now.tv_usec;
        }
 
       done:
-       if (copy_to_user(argp, &vblwait, sizeof(vblwait)))
-               return -EFAULT;
-
        return ret;
 }
 
@@ -369,7 +351,7 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
  *
  * If a signal is not requested, then calls vblank_wait().
  */
-void drm_vbl_send_signals(drm_device_t * dev)
+void drm_vbl_send_signals(struct drm_device * dev)
 {
        unsigned long flags;
        int i;
@@ -377,7 +359,7 @@ void drm_vbl_send_signals(drm_device_t * dev)
        spin_lock_irqsave(&dev->vbl_lock, flags);
 
        for (i = 0; i < 2; i++) {
-               drm_vbl_sig_t *vbl_sig, *tmp;
+               struct drm_vbl_sig *vbl_sig, *tmp;
                struct list_head *vbl_sigs = i ? &dev->vbl_sigs2 : &dev->vbl_sigs;
                unsigned int vbl_seq = atomic_read(i ? &dev->vbl_received2 :
                                                   &dev->vbl_received);
@@ -413,7 +395,7 @@ EXPORT_SYMBOL(drm_vbl_send_signals);
  */
 static void drm_locked_tasklet_func(unsigned long data)
 {
-       drm_device_t *dev = (drm_device_t*)data;
+       struct drm_device *dev = (struct drm_device*)data;
        unsigned long irqflags;
 
        spin_lock_irqsave(&dev->tasklet_lock, irqflags);
@@ -450,7 +432,7 @@ static void drm_locked_tasklet_func(unsigned long data)
  * context, it must not make any assumptions about this. Also, the HW lock will
  * be held with the kernel context or any client context.
  */
-void drm_locked_tasklet(drm_device_t *dev, void (*func)(drm_device_t*))
+void drm_locked_tasklet(struct drm_device *dev, void (*func)(struct drm_device*))
 {
        unsigned long irqflags;
        static DECLARE_TASKLET(drm_tasklet, drm_locked_tasklet_func, 0);
index f02df36..b8e4a5d 100644 (file)
@@ -41,39 +41,33 @@ static int drm_notifier(void *priv);
  * Lock ioctl.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_lock structure.
  * \return zero on success or negative number on failure.
  *
  * Add the current task to the lock wait queue, and attempt to take to lock.
  */
-int drm_lock(struct inode *inode, struct file *filp,
-            unsigned int cmd, unsigned long arg)
+int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        DECLARE_WAITQUEUE(entry, current);
-       drm_lock_t lock;
+       struct drm_lock *lock = data;
        int ret = 0;
 
-       ++priv->lock_count;
+       ++file_priv->lock_count;
 
-       if (copy_from_user(&lock, (drm_lock_t __user *) arg, sizeof(lock)))
-               return -EFAULT;
-
-       if (lock.context == DRM_KERNEL_CONTEXT) {
+       if (lock->context == DRM_KERNEL_CONTEXT) {
                DRM_ERROR("Process %d using kernel context %d\n",
-                         current->pid, lock.context);
+                         current->pid, lock->context);
                return -EINVAL;
        }
 
        DRM_DEBUG("%d (pid %d) requests lock (0x%08x), flags = 0x%08x\n",
-                 lock.context, current->pid,
-                 dev->lock.hw_lock->lock, lock.flags);
+                 lock->context, current->pid,
+                 dev->lock.hw_lock->lock, lock->flags);
 
        if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE))
-               if (lock.context < 0)
+               if (lock->context < 0)
                        return -EINVAL;
 
        add_wait_queue(&dev->lock.lock_queue, &entry);
@@ -87,8 +81,8 @@ int drm_lock(struct inode *inode, struct file *filp,
                        ret = -EINTR;
                        break;
                }
-               if (drm_lock_take(&dev->lock, lock.context)) {
-                       dev->lock.filp = filp;
+               if (drm_lock_take(&dev->lock, lock->context)) {
+                       dev->lock.file_priv = file_priv;
                        dev->lock.lock_time = jiffies;
                        atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
                        break;  /* Got lock */
@@ -107,7 +101,8 @@ int drm_lock(struct inode *inode, struct file *filp,
        __set_current_state(TASK_RUNNING);
        remove_wait_queue(&dev->lock.lock_queue, &entry);
 
-       DRM_DEBUG( "%d %s\n", lock.context, ret ? "interrupted" : "has lock" );
+       DRM_DEBUG("%d %s\n", lock->context,
+                 ret ? "interrupted" : "has lock");
        if (ret) return ret;
 
        sigemptyset(&dev->sigmask);
@@ -115,24 +110,26 @@ int drm_lock(struct inode *inode, struct file *filp,
        sigaddset(&dev->sigmask, SIGTSTP);
        sigaddset(&dev->sigmask, SIGTTIN);
        sigaddset(&dev->sigmask, SIGTTOU);
-       dev->sigdata.context = lock.context;
+       dev->sigdata.context = lock->context;
        dev->sigdata.lock = dev->lock.hw_lock;
        block_all_signals(drm_notifier, &dev->sigdata, &dev->sigmask);
 
-       if (dev->driver->dma_ready && (lock.flags & _DRM_LOCK_READY))
+       if (dev->driver->dma_ready && (lock->flags & _DRM_LOCK_READY))
                dev->driver->dma_ready(dev);
 
-       if (dev->driver->dma_quiescent && (lock.flags & _DRM_LOCK_QUIESCENT)) {
+       if (dev->driver->dma_quiescent && (lock->flags & _DRM_LOCK_QUIESCENT))
+       {
                if (dev->driver->dma_quiescent(dev)) {
-                       DRM_DEBUG( "%d waiting for DMA quiescent\n", lock.context);
-                       return DRM_ERR(EBUSY);
+                       DRM_DEBUG("%d waiting for DMA quiescent\n",
+                                 lock->context);
+                       return -EBUSY;
                }
        }
 
        if (dev->driver->kernel_context_switch &&
-           dev->last_context != lock.context) {
+           dev->last_context != lock->context) {
                dev->driver->kernel_context_switch(dev, dev->last_context,
-                                                  lock.context);
+                                                  lock->context);
        }
 
        return 0;
@@ -142,27 +139,21 @@ int drm_lock(struct inode *inode, struct file *filp,
  * Unlock ioctl.
  *
  * \param inode device inode.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param cmd command.
  * \param arg user argument, pointing to a drm_lock structure.
  * \return zero on success or negative number on failure.
  *
  * Transfer and free the lock.
  */
-int drm_unlock(struct inode *inode, struct file *filp,
-              unsigned int cmd, unsigned long arg)
+int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_lock_t lock;
+       struct drm_lock *lock = data;
        unsigned long irqflags;
 
-       if (copy_from_user(&lock, (drm_lock_t __user *) arg, sizeof(lock)))
-               return -EFAULT;
-
-       if (lock.context == DRM_KERNEL_CONTEXT) {
+       if (lock->context == DRM_KERNEL_CONTEXT) {
                DRM_ERROR("Process %d using kernel context %d\n",
-                         current->pid, lock.context);
+                         current->pid, lock->context);
                return -EINVAL;
        }
 
@@ -184,7 +175,7 @@ int drm_unlock(struct inode *inode, struct file *filp,
        if (dev->driver->kernel_context_switch_unlock)
                dev->driver->kernel_context_switch_unlock(dev);
        else {
-               if (drm_lock_free(&dev->lock,lock.context)) {
+               if (drm_lock_free(&dev->lock,lock->context)) {
                        /* FIXME: Should really bail out here. */
                }
        }
@@ -202,7 +193,7 @@ int drm_unlock(struct inode *inode, struct file *filp,
  *
  * Attempt to mark the lock as held by the given context, via the \p cmpxchg instruction.
  */
-int drm_lock_take(drm_lock_data_t *lock_data,
+int drm_lock_take(struct drm_lock_data *lock_data,
                  unsigned int context)
 {
        unsigned int old, new, prev;
@@ -252,13 +243,13 @@ int drm_lock_take(drm_lock_data_t *lock_data,
  * Resets the lock file pointer.
  * Marks the lock as held by the given context, via the \p cmpxchg instruction.
  */
-static int drm_lock_transfer(drm_lock_data_t *lock_data,
+static int drm_lock_transfer(struct drm_lock_data *lock_data,
                             unsigned int context)
 {
        unsigned int old, new, prev;
        volatile unsigned int *lock = &lock_data->hw_lock->lock;
 
-       lock_data->filp = NULL;
+       lock_data->file_priv = NULL;
        do {
                old = *lock;
                new = context | _DRM_LOCK_HELD;
@@ -278,7 +269,7 @@ static int drm_lock_transfer(drm_lock_data_t *lock_data,
  * Marks the lock as not held, via the \p cmpxchg instruction. Wakes any task
  * waiting on the lock queue.
  */
-int drm_lock_free(drm_lock_data_t *lock_data, unsigned int context)
+int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context)
 {
        unsigned int old, new, prev;
        volatile unsigned int *lock = &lock_data->hw_lock->lock;
@@ -320,7 +311,7 @@ int drm_lock_free(drm_lock_data_t *lock_data, unsigned int context)
  */
 static int drm_notifier(void *priv)
 {
-       drm_sigdata_t *s = (drm_sigdata_t *) priv;
+       struct drm_sigdata *s = (struct drm_sigdata *) priv;
        unsigned int old, new, prev;
 
        /* Allow signal delivery if lock isn't held */
@@ -351,7 +342,7 @@ static int drm_notifier(void *priv)
  * having to worry about starvation.
  */
 
-void drm_idlelock_take(drm_lock_data_t *lock_data)
+void drm_idlelock_take(struct drm_lock_data *lock_data)
 {
        int ret = 0;
 
@@ -370,7 +361,7 @@ void drm_idlelock_take(drm_lock_data_t *lock_data)
 }
 EXPORT_SYMBOL(drm_idlelock_take);
 
-void drm_idlelock_release(drm_lock_data_t *lock_data)
+void drm_idlelock_release(struct drm_lock_data *lock_data)
 {
        unsigned int old, prev;
        volatile unsigned int *lock = &lock_data->hw_lock->lock;
@@ -391,13 +382,12 @@ void drm_idlelock_release(drm_lock_data_t *lock_data)
 EXPORT_SYMBOL(drm_idlelock_release);
 
 
-int drm_i_have_hw_lock(struct file *filp)
+int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
 
-       return (priv->lock_count && dev->lock.hw_lock &&
+       return (file_priv->lock_count && dev->lock.hw_lock &&
                _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) &&
-               dev->lock.filp == filp);
+               dev->lock.file_priv == file_priv);
 }
 
 EXPORT_SYMBOL(drm_i_have_hw_lock);
index b1423c1..f68a3a3 100644 (file)
@@ -38,9 +38,9 @@
 
 static struct {
        spinlock_t lock;
-       drm_u64_t cur_used;
-       drm_u64_t low_threshold;
-       drm_u64_t high_threshold;
+       uint64_t cur_used;
+       uint64_t low_threshold;
+       uint64_t high_threshold;
 } drm_memctl = {
        .lock = SPIN_LOCK_UNLOCKED
 };
@@ -82,9 +82,9 @@ void drm_free_memctl(size_t size)
 }
 EXPORT_SYMBOL(drm_free_memctl);
 
-void drm_query_memctl(drm_u64_t *cur_used,
-                     drm_u64_t *low_threshold,
-                     drm_u64_t *high_threshold)
+void drm_query_memctl(uint64_t *cur_used,
+                     uint64_t *low_threshold,
+                     uint64_t *high_threshold)
 {
        spin_lock(&drm_memctl.lock);
        *cur_used = drm_memctl.cur_used;
@@ -214,7 +214,7 @@ void drm_free_pages(unsigned long address, int order, int area)
 
 #if __OS_HAS_AGP
 static void *agp_remap(unsigned long offset, unsigned long size,
-                             drm_device_t * dev)
+                             struct drm_device * dev)
 {
        unsigned long *phys_addr_map, i, num_pages =
            PAGE_ALIGN(size) / PAGE_SIZE;
@@ -258,12 +258,12 @@ static void *agp_remap(unsigned long offset, unsigned long size,
 
 /** Wrapper around agp_allocate_memory() */
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,11)
-DRM_AGP_MEM *drm_alloc_agp(drm_device_t *dev, int pages, u32 type)
+DRM_AGP_MEM *drm_alloc_agp(struct drm_device *dev, int pages, u32 type)
 {
        return drm_agp_allocate_memory(pages, type);
 }
 #else
-DRM_AGP_MEM *drm_alloc_agp(drm_device_t *dev, int pages, u32 type)
+DRM_AGP_MEM *drm_alloc_agp(struct drm_device *dev, int pages, u32 type)
 {
        return drm_agp_allocate_memory(dev->agp->bridge, pages, type);
 }
@@ -289,7 +289,7 @@ int drm_unbind_agp(DRM_AGP_MEM * handle)
 
 #else  /* __OS_HAS_AGP*/
 static void *agp_remap(unsigned long offset, unsigned long size,
-                      drm_device_t * dev)
+                      struct drm_device * dev)
 {
        return NULL;
 }
index c124f8f..c196ee2 100644 (file)
@@ -291,7 +291,7 @@ void drm_free_pages(unsigned long address, int order, int area)
 
 #if __OS_HAS_AGP
 
-DRM_AGP_MEM *drm_alloc_agp(drm_device_t *dev, int pages, u32 type)
+DRM_AGP_MEM *drm_alloc_agp(struct drm_device *dev, int pages, u32 type)
 {
        DRM_AGP_MEM *handle;
 
index 9d0dedf..b055ac0 100644 (file)
@@ -277,7 +277,7 @@ void drm_free_pages (unsigned long address, int order, int area) {
 
 #if __OS_HAS_AGP
 
-DRM_AGP_MEM *drm_alloc_agp (drm_device_t *dev, int pages, u32 type) {
+DRM_AGP_MEM *drm_alloc_agp (struct drm_device *dev, int pages, u32 type) {
        DRM_AGP_MEM *handle;
 
        if (!pages) {
index 2caf596..cf0d92f 100644 (file)
 #include "drmP.h"
 #include <linux/slab.h>
 
-unsigned long drm_mm_tail_space(drm_mm_t *mm)
+unsigned long drm_mm_tail_space(struct drm_mm *mm)
 {
        struct list_head *tail_node;
-       drm_mm_node_t *entry;
+       struct drm_mm_node *entry;
 
        tail_node = mm->ml_entry.prev;
-       entry = list_entry(tail_node, drm_mm_node_t, ml_entry);
+       entry = list_entry(tail_node, struct drm_mm_node, ml_entry);
        if (!entry->free)
                return 0;
 
        return entry->size;
 }
 
-int drm_mm_remove_space_from_tail(drm_mm_t *mm, unsigned long size)
+int drm_mm_remove_space_from_tail(struct drm_mm *mm, unsigned long size)
 {
        struct list_head *tail_node;
-       drm_mm_node_t *entry;
+       struct drm_mm_node *entry;
 
        tail_node = mm->ml_entry.prev;
-       entry = list_entry(tail_node, drm_mm_node_t, ml_entry);
+       entry = list_entry(tail_node, struct drm_mm_node, ml_entry);
        if (!entry->free)
                return -ENOMEM;
 
@@ -75,13 +75,13 @@ int drm_mm_remove_space_from_tail(drm_mm_t *mm, unsigned long size)
 }
 
 
-static int drm_mm_create_tail_node(drm_mm_t *mm,
+static int drm_mm_create_tail_node(struct drm_mm *mm,
                            unsigned long start,
                            unsigned long size)
 {
-       drm_mm_node_t *child;
+       struct drm_mm_node *child;
 
-       child = (drm_mm_node_t *)
+       child = (struct drm_mm_node *)
                drm_ctl_alloc(sizeof(*child), DRM_MEM_MM);
        if (!child)
                return -ENOMEM;
@@ -98,13 +98,13 @@ static int drm_mm_create_tail_node(drm_mm_t *mm,
 }
 
 
-int drm_mm_add_space_to_tail(drm_mm_t *mm, unsigned long size)
+int drm_mm_add_space_to_tail(struct drm_mm *mm, unsigned long size)
 {
        struct list_head *tail_node;
-       drm_mm_node_t *entry;
+       struct drm_mm_node *entry;
 
        tail_node = mm->ml_entry.prev;
-       entry = list_entry(tail_node, drm_mm_node_t, ml_entry);
+       entry = list_entry(tail_node, struct drm_mm_node, ml_entry);
        if (!entry->free) {
                return drm_mm_create_tail_node(mm, entry->start + entry->size, size);
        }
@@ -112,12 +112,12 @@ int drm_mm_add_space_to_tail(drm_mm_t *mm, unsigned long size)
        return 0;
 }
 
-static drm_mm_node_t *drm_mm_split_at_start(drm_mm_node_t *parent,
+static struct drm_mm_node *drm_mm_split_at_start(struct drm_mm_node *parent,
                                            unsigned long size)
 {
-       drm_mm_node_t *child;
+       struct drm_mm_node *child;
 
-       child = (drm_mm_node_t *)
+       child = (struct drm_mm_node *)
                drm_ctl_alloc(sizeof(*child), DRM_MEM_MM);
        if (!child)
                return NULL;
@@ -137,12 +137,12 @@ static drm_mm_node_t *drm_mm_split_at_start(drm_mm_node_t *parent,
        return child;
 }
 
-drm_mm_node_t *drm_mm_get_block(drm_mm_node_t * parent,
+struct drm_mm_node *drm_mm_get_block(struct drm_mm_node * parent,
                                unsigned long size, unsigned alignment)
 {
 
-       drm_mm_node_t *align_splitoff = NULL;
-       drm_mm_node_t *child;
+       struct drm_mm_node *align_splitoff = NULL;
+       struct drm_mm_node *child;
        unsigned tmp = 0;
 
        if (alignment)
@@ -173,26 +173,26 @@ drm_mm_node_t *drm_mm_get_block(drm_mm_node_t * parent,
  * Otherwise add to the free stack.
  */
 
-void drm_mm_put_block(drm_mm_node_t * cur)
+void drm_mm_put_block(struct drm_mm_node * cur)
 {
 
-       drm_mm_t *mm = cur->mm;
+       struct drm_mm *mm = cur->mm;
        struct list_head *cur_head = &cur->ml_entry;
        struct list_head *root_head = &mm->ml_entry;
-       drm_mm_node_t *prev_node = NULL;
-       drm_mm_node_t *next_node;
+       struct drm_mm_node *prev_node = NULL;
+       struct drm_mm_node *next_node;
 
        int merged = 0;
 
        if (cur_head->prev != root_head) {
-               prev_node = list_entry(cur_head->prev, drm_mm_node_t, ml_entry);
+               prev_node = list_entry(cur_head->prev, struct drm_mm_node, ml_entry);
                if (prev_node->free) {
                        prev_node->size += cur->size;
                        merged = 1;
                }
        }
        if (cur_head->next != root_head) {
-               next_node = list_entry(cur_head->next, drm_mm_node_t, ml_entry);
+               next_node = list_entry(cur_head->next, struct drm_mm_node, ml_entry);
                if (next_node->free) {
                        if (merged) {
                                prev_node->size += next_node->size;
@@ -217,14 +217,14 @@ void drm_mm_put_block(drm_mm_node_t * cur)
 }
 EXPORT_SYMBOL(drm_mm_put_block);
 
-drm_mm_node_t *drm_mm_search_free(const drm_mm_t * mm,
+struct drm_mm_node *drm_mm_search_free(const struct drm_mm * mm,
                                  unsigned long size,
                                  unsigned alignment, int best_match)
 {
        struct list_head *list;
        const struct list_head *free_stack = &mm->fl_entry;
-       drm_mm_node_t *entry;
-       drm_mm_node_t *best;
+       struct drm_mm_node *entry;
+       struct drm_mm_node *best;
        unsigned long best_size;
        unsigned wasted;
 
@@ -232,7 +232,7 @@ drm_mm_node_t *drm_mm_search_free(const drm_mm_t * mm,
        best_size = ~0UL;
 
        list_for_each(list, free_stack) {
-               entry = list_entry(list, drm_mm_node_t, fl_entry);
+               entry = list_entry(list, struct drm_mm_node, fl_entry);
                wasted = 0;
 
                if (entry->size < size) 
@@ -258,14 +258,14 @@ drm_mm_node_t *drm_mm_search_free(const drm_mm_t * mm,
        return best;
 }
 
-int drm_mm_clean(drm_mm_t * mm)
+int drm_mm_clean(struct drm_mm * mm)
 {
        struct list_head *head = &mm->ml_entry;
 
        return (head->next->next == head);
 }
 
-int drm_mm_init(drm_mm_t * mm, unsigned long start, unsigned long size)
+int drm_mm_init(struct drm_mm * mm, unsigned long start, unsigned long size)
 {
        INIT_LIST_HEAD(&mm->ml_entry);
        INIT_LIST_HEAD(&mm->fl_entry);
@@ -275,12 +275,12 @@ int drm_mm_init(drm_mm_t * mm, unsigned long start, unsigned long size)
 
 EXPORT_SYMBOL(drm_mm_init);
 
-void drm_mm_takedown(drm_mm_t * mm)
+void drm_mm_takedown(struct drm_mm * mm)
 {
        struct list_head *bnode = mm->fl_entry.next;
-       drm_mm_node_t *entry;
+       struct drm_mm_node *entry;
 
-       entry = list_entry(bnode, drm_mm_node_t, fl_entry);
+       entry = list_entry(bnode, struct drm_mm_node, fl_entry);
 
        if (entry->ml_entry.next != &mm->ml_entry ||
            entry->fl_entry.next != &mm->fl_entry) {
index 567a7d2..3d86633 100644 (file)
 
 #include "drmP.h"
 
-int drm_add_user_object(drm_file_t * priv, drm_user_object_t * item,
+int drm_add_user_object(struct drm_file * priv, struct drm_user_object * item,
                        int shareable)
 {
-       drm_device_t *dev = priv->head->dev;
+       struct drm_device *dev = priv->head->dev;
        int ret;
 
        DRM_ASSERT_LOCKED(&dev->struct_mutex);
@@ -51,12 +51,12 @@ int drm_add_user_object(drm_file_t * priv, drm_user_object_t * item,
        return 0;
 }
 
-drm_user_object_t *drm_lookup_user_object(drm_file_t * priv, uint32_t key)
+struct drm_user_object *drm_lookup_user_object(struct drm_file * priv, uint32_t key)
 {
-       drm_device_t *dev = priv->head->dev;
-       drm_hash_item_t *hash;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_hash_item *hash;
        int ret;
-       drm_user_object_t *item;
+       struct drm_user_object *item;
 
        DRM_ASSERT_LOCKED(&dev->struct_mutex);
 
@@ -64,10 +64,10 @@ drm_user_object_t *drm_lookup_user_object(drm_file_t * priv, uint32_t key)
        if (ret) {
                return NULL;
        }
-       item = drm_hash_entry(hash, drm_user_object_t, hash);
+       item = drm_hash_entry(hash, struct drm_user_object, hash);
 
        if (priv != item->owner) {
-               drm_open_hash_t *ht = &priv->refd_object_hash[_DRM_REF_USE];
+               struct drm_open_hash *ht = &priv->refd_object_hash[_DRM_REF_USE];
                ret = drm_ht_find_item(ht, (unsigned long)item, &hash);
                if (ret) {
                        DRM_ERROR("Object not registered for usage\n");
@@ -77,9 +77,9 @@ drm_user_object_t *drm_lookup_user_object(drm_file_t * priv, uint32_t key)
        return item;
 }
 
-static void drm_deref_user_object(drm_file_t * priv, drm_user_object_t * item)
+static void drm_deref_user_object(struct drm_file * priv, struct drm_user_object * item)
 {
-       drm_device_t *dev = priv->head->dev;
+       struct drm_device *dev = priv->head->dev;
        int ret;
 
        if (atomic_dec_and_test(&item->refcount)) {
@@ -90,7 +90,7 @@ static void drm_deref_user_object(drm_file_t * priv, drm_user_object_t * item)
        }
 }
 
-int drm_remove_user_object(drm_file_t * priv, drm_user_object_t * item)
+int drm_remove_user_object(struct drm_file * priv, struct drm_user_object * item)
 {
        DRM_ASSERT_LOCKED(&priv->head->dev->struct_mutex);
 
@@ -105,8 +105,8 @@ int drm_remove_user_object(drm_file_t * priv, drm_user_object_t * item)
        return 0;
 }
 
-static int drm_object_ref_action(drm_file_t * priv, drm_user_object_t * ro,
-                                drm_ref_t action)
+static int drm_object_ref_action(struct drm_file * priv, struct drm_user_object * ro,
+                                enum drm_ref_type action)
 {
        int ret = 0;
 
@@ -124,12 +124,12 @@ static int drm_object_ref_action(drm_file_t * priv, drm_user_object_t * ro,
        return ret;
 }
 
-int drm_add_ref_object(drm_file_t * priv, drm_user_object_t * referenced_object,
-                      drm_ref_t ref_action)
+int drm_add_ref_object(struct drm_file * priv, struct drm_user_object * referenced_object,
+                      enum drm_ref_type ref_action)
 {
        int ret = 0;
-       drm_ref_object_t *item;
-       drm_open_hash_t *ht = &priv->refd_object_hash[ref_action];
+       struct drm_ref_object *item;
+       struct drm_open_hash *ht = &priv->refd_object_hash[ref_action];
 
        DRM_ASSERT_LOCKED(&priv->head->dev->struct_mutex);
        if (!referenced_object->shareable && priv != referenced_object->owner) {
@@ -181,11 +181,11 @@ int drm_add_ref_object(drm_file_t * priv, drm_user_object_t * referenced_object,
        return ret;
 }
 
-drm_ref_object_t *drm_lookup_ref_object(drm_file_t * priv,
-                                       drm_user_object_t * referenced_object,
-                                       drm_ref_t ref_action)
+struct drm_ref_object *drm_lookup_ref_object(struct drm_file * priv,
+                                       struct drm_user_object * referenced_object,
+                                       enum drm_ref_type ref_action)
 {
-       drm_hash_item_t *hash;
+       struct drm_hash_item *hash;
        int ret;
 
        DRM_ASSERT_LOCKED(&priv->head->dev->struct_mutex);
@@ -194,32 +194,32 @@ drm_ref_object_t *drm_lookup_ref_object(drm_file_t * priv,
        if (ret)
                return NULL;
 
-       return drm_hash_entry(hash, drm_ref_object_t, hash);
+       return drm_hash_entry(hash, struct drm_ref_object, hash);
 }
 
-static void drm_remove_other_references(drm_file_t * priv,
-                                       drm_user_object_t * ro)
+static void drm_remove_other_references(struct drm_file * priv,
+                                       struct drm_user_object * ro)
 {
        int i;
-       drm_open_hash_t *ht;
-       drm_hash_item_t *hash;
-       drm_ref_object_t *item;
+       struct drm_open_hash *ht;
+       struct drm_hash_item *hash;
+       struct drm_ref_object *item;
 
        for (i = _DRM_REF_USE + 1; i < _DRM_NO_REF_TYPES; ++i) {
                ht = &priv->refd_object_hash[i];
                while (!drm_ht_find_item(ht, (unsigned long)ro, &hash)) {
-                       item = drm_hash_entry(hash, drm_ref_object_t, hash);
+                       item = drm_hash_entry(hash, struct drm_ref_object, hash);
                        drm_remove_ref_object(priv, item);
                }
        }
 }
 
-void drm_remove_ref_object(drm_file_t * priv, drm_ref_object_t * item)
+void drm_remove_ref_object(struct drm_file * priv, struct drm_ref_object * item)
 {
        int ret;
-       drm_user_object_t *user_object = (drm_user_object_t *) item->hash.key;
-       drm_open_hash_t *ht = &priv->refd_object_hash[item->unref_action];
-       drm_ref_t unref_action;
+       struct drm_user_object *user_object = (struct drm_user_object *) item->hash.key;
+       struct drm_open_hash *ht = &priv->refd_object_hash[item->unref_action];
+       enum drm_ref_type unref_action;
 
        DRM_ASSERT_LOCKED(&priv->head->dev->struct_mutex);
        unref_action = item->unref_action;
@@ -244,12 +244,12 @@ void drm_remove_ref_object(drm_file_t * priv, drm_ref_object_t * item)
 
 }
 
-int drm_user_object_ref(drm_file_t * priv, uint32_t user_token,
-                       drm_object_type_t type, drm_user_object_t ** object)
+int drm_user_object_ref(struct drm_file * priv, uint32_t user_token,
+                       enum drm_object_type type, struct drm_user_object ** object)
 {
-       drm_device_t *dev = priv->head->dev;
-       drm_user_object_t *uo;
-       drm_hash_item_t *hash;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_user_object *uo;
+       struct drm_hash_item *hash;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
@@ -258,7 +258,7 @@ int drm_user_object_ref(drm_file_t * priv, uint32_t user_token,
                DRM_ERROR("Could not find user object to reference.\n");
                goto out_err;
        }
-       uo = drm_hash_entry(hash, drm_user_object_t, hash);
+       uo = drm_hash_entry(hash, struct drm_user_object, hash);
        if (uo->type != type) {
                ret = -EINVAL;
                goto out_err;
@@ -274,12 +274,12 @@ int drm_user_object_ref(drm_file_t * priv, uint32_t user_token,
        return ret;
 }
 
-int drm_user_object_unref(drm_file_t * priv, uint32_t user_token,
-                         drm_object_type_t type)
+int drm_user_object_unref(struct drm_file * priv, uint32_t user_token,
+                         enum drm_object_type type)
 {
-       drm_device_t *dev = priv->head->dev;
-       drm_user_object_t *uo;
-       drm_ref_object_t *ro;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_user_object *uo;
+       struct drm_ref_object *ro;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
index f82d662..e5f2b69 100644 (file)
@@ -39,14 +39,14 @@ struct drm_device;
 
 #define drm_user_object_entry(_ptr, _type, _member) container_of(_ptr, _type, _member)
 
-typedef enum {
+enum drm_object_type {
        drm_fence_type,
        drm_buffer_type,
        drm_ttm_type
            /*
             * Add other user space object types here.
             */
-} drm_object_type_t;
+};
 
 /*
  * A user object is a structure that helps the drm give out user handles
@@ -55,20 +55,20 @@ typedef enum {
  * Designed to be accessible using a user space 32-bit handle.
  */
 
-typedef struct drm_user_object {
-       drm_hash_item_t hash;
+struct drm_user_object {
+       struct drm_hash_item hash;
        struct list_head list;
-       drm_object_type_t type;
+       enum drm_object_type type;
        atomic_t refcount;
        int shareable;
-       drm_file_t *owner;
-       void (*ref_struct_locked) (drm_file_t * priv,
+       struct drm_file *owner;
+       void (*ref_struct_locked) (struct drm_file * priv,
                                   struct drm_user_object * obj,
-                                  drm_ref_t ref_action);
-       void (*unref) (drm_file_t * priv, struct drm_user_object * obj,
-                      drm_ref_t unref_action);
-       void (*remove) (drm_file_t * priv, struct drm_user_object * obj);
-} drm_user_object_t;
+                                  enum drm_ref_type ref_action);
+       void (*unref) (struct drm_file * priv, struct drm_user_object * obj,
+                      enum drm_ref_type unref_action);
+       void (*remove) (struct drm_file * priv, struct drm_user_object * obj);
+};
 
 /*
  * A ref object is a structure which is used to
@@ -77,24 +77,24 @@ typedef struct drm_user_object {
  * process exits. Designed to be accessible using a pointer to the _user_ object.
  */
 
-typedef struct drm_ref_object {
-       drm_hash_item_t hash;
+struct drm_ref_object {
+       struct drm_hash_item hash;
        struct list_head list;
        atomic_t refcount;
-       drm_ref_t unref_action;
-} drm_ref_object_t;
+       enum drm_ref_type unref_action;
+};
 
 /**
  * Must be called with the struct_mutex held.
  */
 
-extern int drm_add_user_object(drm_file_t * priv, drm_user_object_t * item,
+extern int drm_add_user_object(struct drm_file * priv, struct drm_user_object * item,
                               int shareable);
 /**
  * Must be called with the struct_mutex held.
  */
 
-extern drm_user_object_t *drm_lookup_user_object(drm_file_t * priv,
+extern struct drm_user_object *drm_lookup_user_object(struct drm_file * priv,
                                                 uint32_t key);
 
 /*
@@ -104,23 +104,23 @@ extern drm_user_object_t *drm_lookup_user_object(drm_file_t * priv,
  * This function may temporarily release the struct_mutex.
  */
 
-extern int drm_remove_user_object(drm_file_t * priv, drm_user_object_t * item);
+extern int drm_remove_user_object(struct drm_file * priv, struct drm_user_object * item);
 
 /*
  * Must be called with the struct_mutex held. May temporarily release it.
  */
 
-extern int drm_add_ref_object(drm_file_t * priv,
-                             drm_user_object_t * referenced_object,
-                             drm_ref_t ref_action);
+extern int drm_add_ref_object(struct drm_file * priv,
+                             struct drm_user_object * referenced_object,
+                             enum drm_ref_type ref_action);
 
 /*
  * Must be called with the struct_mutex held.
  */
 
-drm_ref_object_t *drm_lookup_ref_object(drm_file_t * priv,
-                                       drm_user_object_t * referenced_object,
-                                       drm_ref_t ref_action);
+struct drm_ref_object *drm_lookup_ref_object(struct drm_file * priv,
+                                       struct drm_user_object * referenced_object,
+                                       enum drm_ref_type ref_action);
 /*
  * Must be called with the struct_mutex held.
  * If "item" has been obtained by a call to drm_lookup_ref_object. You may not
@@ -128,19 +128,19 @@ drm_ref_object_t *drm_lookup_ref_object(drm_file_t * priv,
  * This function may temporarily release the struct_mutex.
  */
 
-extern void drm_remove_ref_object(drm_file_t * priv, drm_ref_object_t * item);
-extern int drm_user_object_ref(drm_file_t * priv, uint32_t user_token,
-                              drm_object_type_t type,
-                              drm_user_object_t ** object);
-extern int drm_user_object_unref(drm_file_t * priv, uint32_t user_token,
-                                drm_object_type_t type);
+extern void drm_remove_ref_object(struct drm_file * priv, struct drm_ref_object * item);
+extern int drm_user_object_ref(struct drm_file * priv, uint32_t user_token,
+                              enum drm_object_type type,
+                              struct drm_user_object ** object);
+extern int drm_user_object_unref(struct drm_file * priv, uint32_t user_token,
+                                enum drm_object_type type);
 
 /***************************************************
  * Fence objects. (drm_fence.c)
  */
 
-typedef struct drm_fence_object {
-       drm_user_object_t base;
+struct drm_fence_object {
+       struct drm_user_object base;
         struct drm_device *dev;
        atomic_t usage;
 
@@ -156,29 +156,29 @@ typedef struct drm_fence_object {
        uint32_t sequence;
        uint32_t flush_mask;
        uint32_t submitted_flush;
-} drm_fence_object_t;
+};
 
 #define _DRM_FENCE_CLASSES 8
 #define _DRM_FENCE_TYPE_EXE 0x00
 
-typedef struct drm_fence_class_manager {
+struct drm_fence_class_manager {
        struct list_head ring;
        uint32_t pending_flush;
        wait_queue_head_t fence_queue;
        int pending_exe_flush;
        uint32_t last_exe_flush;
        uint32_t exe_flush_sequence;
-} drm_fence_class_manager_t;
+};
 
-typedef struct drm_fence_manager {
+struct drm_fence_manager {
        int initialized;
        rwlock_t lock;
-       drm_fence_class_manager_t class[_DRM_FENCE_CLASSES];
+       struct drm_fence_class_manager class[_DRM_FENCE_CLASSES];
        uint32_t num_classes;
        atomic_t count;
-} drm_fence_manager_t;
+};
 
-typedef struct drm_fence_driver {
+struct drm_fence_driver {
        uint32_t num_classes;
        uint32_t wrap_diff;
        uint32_t flush_diff;
@@ -189,7 +189,7 @@ typedef struct drm_fence_driver {
        int (*emit) (struct drm_device * dev, uint32_t class, uint32_t flags,
                     uint32_t * breadcrumb, uint32_t * native_type);
        void (*poke_flush) (struct drm_device * dev, uint32_t class);
-} drm_fence_driver_t;
+};
 
 extern void drm_fence_handler(struct drm_device *dev, uint32_t class,
                              uint32_t sequence, uint32_t type);
@@ -197,23 +197,40 @@ extern void drm_fence_manager_init(struct drm_device *dev);
 extern void drm_fence_manager_takedown(struct drm_device *dev);
 extern void drm_fence_flush_old(struct drm_device *dev, uint32_t class,
                                uint32_t sequence);
-extern int drm_fence_object_flush(drm_fence_object_t * fence, uint32_t type);
-extern int drm_fence_object_signaled(drm_fence_object_t * fence,
+extern int drm_fence_object_flush(struct drm_fence_object * fence, uint32_t type);
+extern int drm_fence_object_signaled(struct drm_fence_object * fence,
                                     uint32_t type, int flush);
-extern void drm_fence_usage_deref_locked(drm_fence_object_t ** fence);
-extern void drm_fence_usage_deref_unlocked(drm_fence_object_t ** fence);
+extern void drm_fence_usage_deref_locked(struct drm_fence_object ** fence);
+extern void drm_fence_usage_deref_unlocked(struct drm_fence_object ** fence);
 extern struct drm_fence_object *drm_fence_reference_locked(struct drm_fence_object *src);
 extern void drm_fence_reference_unlocked(struct drm_fence_object **dst,
                                         struct drm_fence_object *src);
-extern int drm_fence_object_wait(drm_fence_object_t * fence,
+extern int drm_fence_object_wait(struct drm_fence_object * fence,
                                 int lazy, int ignore_signals, uint32_t mask);
 extern int drm_fence_object_create(struct drm_device *dev, uint32_t type,
                                   uint32_t fence_flags, uint32_t class,
-                                  drm_fence_object_t ** c_fence);
-extern int drm_fence_add_user_object(drm_file_t * priv,
-                                    drm_fence_object_t * fence, int shareable);
-extern int drm_fence_ioctl(DRM_IOCTL_ARGS);
-
+                                  struct drm_fence_object ** c_fence);
+extern int drm_fence_add_user_object(struct drm_file * priv,
+                                    struct drm_fence_object * fence, int shareable);
+
+extern int drm_fence_create_ioctl(struct drm_device *dev, void *data,
+                                 struct drm_file *file_priv);
+extern int drm_fence_destroy_ioctl(struct drm_device *dev, void *data,
+                                  struct drm_file *file_priv);
+extern int drm_fence_reference_ioctl(struct drm_device *dev, void *data,
+                                    struct drm_file *file_priv);
+extern int drm_fence_unreference_ioctl(struct drm_device *dev, void *data,
+                                      struct drm_file *file_priv);
+extern int drm_fence_signaled_ioctl(struct drm_device *dev, void *data,
+                                   struct drm_file *file_priv);
+extern int drm_fence_flush_ioctl(struct drm_device *dev, void *data,
+                                struct drm_file *file_priv);
+extern int drm_fence_wait_ioctl(struct drm_device *dev, void *data,
+                               struct drm_file *file_priv);
+extern int drm_fence_emit_ioctl(struct drm_device *dev, void *data,
+                               struct drm_file *file_priv);
+extern int drm_fence_buffers_ioctl(struct drm_device *dev, void *data,
+                                  struct drm_file *file_priv);
 /**************************************************
  *TTMs
  */
@@ -235,7 +252,7 @@ extern int drm_fence_ioctl(DRM_IOCTL_ARGS);
 #define DRM_BE_FLAG_BOUND_CACHED   0x00000002
 
 struct drm_ttm_backend;
-typedef struct drm_ttm_backend_func {
+struct drm_ttm_backend_func {
        int (*needs_ub_cache_adjust) (struct drm_ttm_backend * backend);
        int (*populate) (struct drm_ttm_backend * backend,
                         unsigned long num_pages, struct page ** pages);
@@ -244,16 +261,16 @@ typedef struct drm_ttm_backend_func {
                     unsigned long offset, int cached);
        int (*unbind) (struct drm_ttm_backend * backend);
        void (*destroy) (struct drm_ttm_backend * backend);
-} drm_ttm_backend_func_t;
+};
 
 
-typedef struct drm_ttm_backend {
+struct drm_ttm_backend {
        uint32_t flags;
        int mem_type;
-       drm_ttm_backend_func_t *func;
-} drm_ttm_backend_t;
+       struct drm_ttm_backend_func *func;
+};
 
-typedef struct drm_ttm {
+struct drm_ttm {
        struct page **pages;
        uint32_t page_flags;
        unsigned long num_pages;
@@ -262,7 +279,7 @@ typedef struct drm_ttm {
        struct drm_device *dev;
        int destroy;
        uint32_t mapping_offset;
-       drm_ttm_backend_t *be;
+       struct drm_ttm_backend *be;
        enum {
                ttm_bound,
                ttm_evicted,
@@ -270,14 +287,14 @@ typedef struct drm_ttm {
                ttm_unpopulated,
        } state;
 
-} drm_ttm_t;
+};
 
-extern drm_ttm_t *drm_ttm_init(struct drm_device *dev, unsigned long size);
-extern int drm_bind_ttm(drm_ttm_t * ttm, int cached, unsigned long aper_offset);
-extern void drm_ttm_unbind(drm_ttm_t * ttm);
-extern void drm_ttm_evict(drm_ttm_t * ttm);
-extern void drm_ttm_fixup_caching(drm_ttm_t * ttm);
-extern struct page *drm_ttm_get_page(drm_ttm_t * ttm, int index);
+extern struct drm_ttm *drm_ttm_init(struct drm_device *dev, unsigned long size);
+extern int drm_bind_ttm(struct drm_ttm * ttm, int cached, unsigned long aper_offset);
+extern void drm_ttm_unbind(struct drm_ttm * ttm);
+extern void drm_ttm_evict(struct drm_ttm * ttm);
+extern void drm_ttm_fixup_caching(struct drm_ttm * ttm);
+extern struct page *drm_ttm_get_page(struct drm_ttm * ttm, int index);
 
 /*
  * Destroy a ttm. The user normally calls drmRmMap or a similar IOCTL to do this,
@@ -285,7 +302,7 @@ extern struct page *drm_ttm_get_page(drm_ttm_t * ttm, int index);
  * when the last vma exits.
  */
 
-extern int drm_destroy_ttm(drm_ttm_t * ttm);
+extern int drm_destroy_ttm(struct drm_ttm * ttm);
 
 #define DRM_FLAG_MASKED(_old, _new, _mask) {\
 (_old) ^= (((_old) ^ (_new)) & (_mask)); \
@@ -308,19 +325,19 @@ extern int drm_destroy_ttm(drm_ttm_t * ttm);
  * Buffer objects. (drm_bo.c, drm_bo_move.c)
  */
 
-typedef struct drm_bo_mem_reg {
-       drm_mm_node_t *mm_node;
+struct drm_bo_mem_reg {
+       struct drm_mm_node *mm_node;
        unsigned long size;
        unsigned long num_pages;
        uint32_t page_alignment;
        uint32_t mem_type;
-       uint32_t flags;
-       uint32_t mask;
-} drm_bo_mem_reg_t;
+       uint64_t flags;
+       uint64_t mask;
+};
 
-typedef struct drm_buffer_object {
+struct drm_buffer_object {
        struct drm_device *dev;
-       drm_user_object_t base;
+       struct drm_user_object base;
 
        /*
         * If there is a possibility that the usage variable is zero,
@@ -329,30 +346,30 @@ typedef struct drm_buffer_object {
 
        atomic_t usage;
        unsigned long buffer_start;
-       drm_bo_type_t type;
+       enum drm_bo_type type;
        unsigned long offset;
        atomic_t mapped;
-       drm_bo_mem_reg_t mem;
+       struct drm_bo_mem_reg mem;
 
        struct list_head lru;
        struct list_head ddestroy;
 
        uint32_t fence_type;
        uint32_t fence_class;
-       drm_fence_object_t *fence;
+       struct drm_fence_object *fence;
        uint32_t priv_flags;
        wait_queue_head_t event_queue;
        struct mutex mutex;
 
        /* For pinned buffers */
-       drm_mm_node_t *pinned_node;
+       struct drm_mm_node *pinned_node;
        uint32_t pinned_mem_type;
        struct list_head pinned_lru;
 
        /* For vm */
 
-       drm_ttm_t *ttm;
-       drm_map_list_t map_list;
+       struct drm_ttm *ttm;
+       struct drm_map_list map_list;
        uint32_t memory_type;
        unsigned long bus_offset;
        uint32_t vm_flags;
@@ -364,15 +381,15 @@ typedef struct drm_buffer_object {
        struct list_head p_mm_list;
 #endif
 
-} drm_buffer_object_t;
+};
 
 #define _DRM_BO_FLAG_UNFENCED 0x00000001
 #define _DRM_BO_FLAG_EVICTED  0x00000002
 
-typedef struct drm_mem_type_manager {
+struct drm_mem_type_manager {
        int has_type;
        int use_type;
-       drm_mm_t manager;
+       struct drm_mm manager;
        struct list_head lru;
        struct list_head pinned;
        uint32_t flags;
@@ -380,7 +397,7 @@ typedef struct drm_mem_type_manager {
        unsigned long io_offset;
        unsigned long io_size;
        void *io_addr;
-} drm_mem_type_manager_t;
+};
 
 #define _DRM_FLAG_MEMTYPE_FIXED     0x00000001 /* Fixed (on-card) PCI memory */
 #define _DRM_FLAG_MEMTYPE_MAPPABLE  0x00000002 /* Memory mappable */
@@ -390,13 +407,13 @@ typedef struct drm_mem_type_manager {
 #define _DRM_FLAG_MEMTYPE_CMA       0x00000010 /* Can't map aperture */
 #define _DRM_FLAG_MEMTYPE_CSELECT   0x00000020 /* Select caching */
 
-typedef struct drm_buffer_manager {
+struct drm_buffer_manager {
        struct mutex init_mutex;
        struct mutex evict_mutex;
        int nice_mode;
        int initialized;
-       drm_file_t *last_to_validate;
-       drm_mem_type_manager_t man[DRM_BO_MEM_TYPES];
+       struct drm_file *last_to_validate;
+       struct drm_mem_type_manager man[DRM_BO_MEM_TYPES];
        struct list_head unfenced;
        struct list_head ddestroy;
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
@@ -407,51 +424,64 @@ typedef struct drm_buffer_manager {
        uint32_t fence_type;
        unsigned long cur_pages;
        atomic_t count;
-} drm_buffer_manager_t;
+};
 
-typedef struct drm_bo_driver {
+struct drm_bo_driver {
        const uint32_t *mem_type_prio;
        const uint32_t *mem_busy_prio;
        uint32_t num_mem_type_prio;
        uint32_t num_mem_busy_prio;
-       drm_ttm_backend_t *(*create_ttm_backend_entry)
+       struct drm_ttm_backend *(*create_ttm_backend_entry)
         (struct drm_device * dev);
-       int (*fence_type) (struct drm_buffer_object *bo, uint32_t * class, uint32_t * type);
-       int (*invalidate_caches) (struct drm_device * dev, uint32_t flags);
+       int (*fence_type) (struct drm_buffer_object *bo, uint32_t * type);
+       int (*invalidate_caches) (struct drm_device * dev, uint64_t flags);
        int (*init_mem_type) (struct drm_device * dev, uint32_t type,
-                             drm_mem_type_manager_t * man);
+                             struct drm_mem_type_manager * man);
         uint32_t(*evict_mask) (struct drm_buffer_object *bo);
        int (*move) (struct drm_buffer_object * bo,
                     int evict, int no_wait, struct drm_bo_mem_reg * new_mem);
-} drm_bo_driver_t;
+};
 
 /*
  * buffer objects (drm_bo.c)
  */
 
-extern int drm_bo_ioctl(DRM_IOCTL_ARGS);
-extern int drm_mm_init_ioctl(DRM_IOCTL_ARGS);
+extern int drm_bo_create_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_bo_destroy_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_bo_map_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_bo_unmap_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_bo_reference_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_bo_unreference_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_bo_wait_idle_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_bo_info_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_bo_op_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+
+
+extern int drm_mm_init_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_mm_takedown_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_mm_lock_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int drm_mm_unlock_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv);
 extern int drm_bo_driver_finish(struct drm_device *dev);
 extern int drm_bo_driver_init(struct drm_device *dev);
 extern int drm_bo_pci_offset(struct drm_device *dev,
-                            drm_bo_mem_reg_t * mem,
+                            struct drm_bo_mem_reg * mem,
                             unsigned long *bus_base,
                             unsigned long *bus_offset,
                             unsigned long *bus_size);
-extern int drm_mem_reg_is_pci(struct drm_device *dev, drm_bo_mem_reg_t * mem);
+extern int drm_mem_reg_is_pci(struct drm_device *dev, struct drm_bo_mem_reg * mem);
 
-extern void drm_bo_usage_deref_locked(drm_buffer_object_t ** bo);
-extern int drm_fence_buffer_objects(drm_file_t * priv,
+extern void drm_bo_usage_deref_locked(struct drm_buffer_object ** bo);
+extern int drm_fence_buffer_objects(struct drm_file * priv,
                                    struct list_head *list,
                                    uint32_t fence_flags,
-                                   drm_fence_object_t * fence,
-                                   drm_fence_object_t ** used_fence);
-extern void drm_bo_add_to_lru(drm_buffer_object_t * bo);
-extern int drm_bo_wait(drm_buffer_object_t * bo, int lazy, int ignore_signals,
+                                   struct drm_fence_object * fence,
+                                   struct drm_fence_object ** used_fence);
+extern void drm_bo_add_to_lru(struct drm_buffer_object * bo);
+extern int drm_bo_wait(struct drm_buffer_object * bo, int lazy, int ignore_signals,
                       int no_wait);
-extern int drm_bo_mem_space(drm_buffer_object_t * bo,
-                           drm_bo_mem_reg_t * mem, int no_wait);
-extern int drm_bo_move_buffer(drm_buffer_object_t * bo, uint32_t new_mem_flags,
+extern int drm_bo_mem_space(struct drm_buffer_object * bo,
+                           struct drm_bo_mem_reg * mem, int no_wait);
+extern int drm_bo_move_buffer(struct drm_buffer_object * bo, uint32_t new_mem_flags,
                              int no_wait, int move_unfenced);
 
 /*
@@ -459,18 +489,18 @@ extern int drm_bo_move_buffer(drm_buffer_object_t * bo, uint32_t new_mem_flags,
  * drm_bo_move.c
  */
 
-extern int drm_bo_move_ttm(drm_buffer_object_t * bo,
-                          int evict, int no_wait, drm_bo_mem_reg_t * new_mem);
-extern int drm_bo_move_memcpy(drm_buffer_object_t * bo,
+extern int drm_bo_move_ttm(struct drm_buffer_object * bo,
+                          int evict, int no_wait, struct drm_bo_mem_reg * new_mem);
+extern int drm_bo_move_memcpy(struct drm_buffer_object * bo,
                              int evict,
-                             int no_wait, drm_bo_mem_reg_t * new_mem);
-extern int drm_bo_move_accel_cleanup(drm_buffer_object_t * bo,
+                             int no_wait, struct drm_bo_mem_reg * new_mem);
+extern int drm_bo_move_accel_cleanup(struct drm_buffer_object * bo,
                                     int evict,
                                     int no_wait,
                                     uint32_t fence_class,
                                     uint32_t fence_type,
                                     uint32_t fence_flags,
-                                    drm_bo_mem_reg_t * new_mem);
+                                    struct drm_bo_mem_reg * new_mem);
 
 #ifdef CONFIG_DEBUG_MUTEXES
 #define DRM_ASSERT_LOCKED(_mutex)                                      \
index 2ea105c..2688479 100644 (file)
@@ -6,11 +6,6 @@
 #include <linux/interrupt.h>   /* For task queue support */
 #include <linux/delay.h>
 
-/** File pointer type */
-#define DRMFILE                         struct file *
-/** Ioctl arguments */
-#define DRM_IOCTL_ARGS                 struct inode *inode, struct file *filp, unsigned int cmd, unsigned long data
-#define DRM_ERR(d)                     -(d)
 /** Current process ID */
 #define DRM_CURRENTPID                 current->pid
 #define DRM_SUSER(p)                   capable(CAP_SYS_ADMIN)
@@ -51,9 +46,6 @@
 #define DRM_WRITEMEMORYBARRIER()       wmb()
 /** Read/write memory barrier */
 #define DRM_MEMORYBARRIER()            mb()
-/** DRM device local declaration */
-#define DRM_DEVICE     drm_file_t      *priv   = filp->private_data; \
-                       drm_device_t    *dev    = priv->head->dev
 
 /** IRQ handler arguments and return type and values */
 #define DRM_IRQ_ARGS           int irq, void *arg
@@ -93,14 +85,6 @@ static __inline__ int mtrr_del(int reg, unsigned long base, unsigned long size)
 #define MTRR_TYPE_WRCOMB     1
 #endif
 
-/** For data going into the kernel through the ioctl argument */
-#define DRM_COPY_FROM_USER_IOCTL(arg1, arg2, arg3)     \
-       if ( copy_from_user(&arg1, arg2, arg3) )        \
-               return -EFAULT
-/** For data going from the kernel through the ioctl argument */
-#define DRM_COPY_TO_USER_IOCTL(arg1, arg2, arg3)       \
-       if ( copy_to_user(arg1, &arg2, arg3) )          \
-               return -EFAULT
 /** Other copying of data to kernel space */
 #define DRM_COPY_FROM_USER(arg1, arg2, arg3)           \
        copy_from_user(arg1, arg2, arg3)
@@ -117,8 +101,6 @@ static __inline__ int mtrr_del(int reg, unsigned long base, unsigned long size)
 #define DRM_GET_USER_UNCHECKED(val, uaddr)             \
        __get_user(val, uaddr)
 
-#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) _priv = _filp->private_data
-
 #define DRM_HZ HZ
 
 #define DRM_WAIT_ON( ret, queue, timeout, condition )          \
index 7625220..a608eed 100644 (file)
@@ -47,7 +47,7 @@
 /**
  * \brief Allocate a PCI consistent memory block, for DMA.
  */
-drm_dma_handle_t *drm_pci_alloc(drm_device_t * dev, size_t size, size_t align,
+drm_dma_handle_t *drm_pci_alloc(struct drm_device * dev, size_t size, size_t align,
                                dma_addr_t maxaddr)
 {
        drm_dma_handle_t *dmah;
@@ -123,7 +123,7 @@ EXPORT_SYMBOL(drm_pci_alloc);
  *
  * This function is for internal use in the Linux-specific DRM core code.
  */
-void __drm_pci_free(drm_device_t * dev, drm_dma_handle_t *dmah)
+void __drm_pci_free(struct drm_device * dev, drm_dma_handle_t *dmah)
 {
        unsigned long addr;
        size_t sz;
@@ -167,7 +167,7 @@ void __drm_pci_free(drm_device_t * dev, drm_dma_handle_t *dmah)
 /**
  * \brief Free a PCI consistent memory block
  */
-void drm_pci_free(drm_device_t * dev, drm_dma_handle_t *dmah)
+void drm_pci_free(struct drm_device * dev, drm_dma_handle_t *dmah)
 {
        __drm_pci_free(dev, dmah);
        kfree(dmah);
index e93a040..08bf99d 100644 (file)
@@ -90,7 +90,7 @@ static struct drm_proc_list {
  * "/proc/dri/%minor%/", and each entry in proc_list as
  * "/proc/dri/%minor%/%name%".
  */
-int drm_proc_init(drm_device_t * dev, int minor,
+int drm_proc_init(struct drm_device * dev, int minor,
                  struct proc_dir_entry *root, struct proc_dir_entry **dev_root)
 {
        struct proc_dir_entry *ent;
@@ -165,7 +165,7 @@ int drm_proc_cleanup(int minor, struct proc_dir_entry *root,
 static int drm_name_info(char *buf, char **start, off_t offset, int request,
                         int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int len = 0;
 
        if (offset > DRM_PROC_LIMIT) {
@@ -207,10 +207,10 @@ static int drm_name_info(char *buf, char **start, off_t offset, int request,
 static int drm__vm_info(char *buf, char **start, off_t offset, int request,
                        int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int len = 0;
-       drm_map_t *map;
-       drm_map_list_t *r_list;
+       struct drm_map *map;
+       struct drm_map_list *r_list;
 
        /* Hardcoded from _DRM_FRAME_BUFFER,
           _DRM_REGISTERS, _DRM_SHM, _DRM_AGP,
@@ -264,7 +264,7 @@ static int drm__vm_info(char *buf, char **start, off_t offset, int request,
 static int drm_vm_info(char *buf, char **start, off_t offset, int request,
                       int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
@@ -287,10 +287,10 @@ static int drm_vm_info(char *buf, char **start, off_t offset, int request,
 static int drm__queues_info(char *buf, char **start, off_t offset,
                            int request, int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int len = 0;
        int i;
-       drm_queue_t *q;
+       struct drm_queue *q;
 
        if (offset > DRM_PROC_LIMIT) {
                *eof = 1;
@@ -337,7 +337,7 @@ static int drm__queues_info(char *buf, char **start, off_t offset,
 static int drm_queues_info(char *buf, char **start, off_t offset, int request,
                           int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
@@ -360,9 +360,9 @@ static int drm_queues_info(char *buf, char **start, off_t offset, int request,
 static int drm__bufs_info(char *buf, char **start, off_t offset, int request,
                          int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int len = 0;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int i;
 
        if (!dma || offset > DRM_PROC_LIMIT) {
@@ -409,7 +409,7 @@ static int drm__bufs_info(char *buf, char **start, off_t offset, int request,
 static int drm_bufs_info(char *buf, char **start, off_t offset, int request,
                         int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
@@ -432,13 +432,13 @@ static int drm_bufs_info(char *buf, char **start, off_t offset, int request,
 static int drm__objects_info(char *buf, char **start, off_t offset, int request,
                          int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int len = 0;
-       drm_buffer_manager_t *bm = &dev->bm;
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_u64_t used_mem;
-       drm_u64_t low_mem;
-       drm_u64_t high_mem;
+       struct drm_buffer_manager *bm = &dev->bm;
+       struct drm_fence_manager *fm = &dev->fm;
+       uint64_t used_mem;
+       uint64_t low_mem;
+       uint64_t high_mem;
 
 
        if (offset > DRM_PROC_LIMIT) {
@@ -496,7 +496,7 @@ static int drm__objects_info(char *buf, char **start, off_t offset, int request,
 static int drm_objects_info(char *buf, char **start, off_t offset, int request,
                         int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
@@ -519,9 +519,9 @@ static int drm_objects_info(char *buf, char **start, off_t offset, int request,
 static int drm__clients_info(char *buf, char **start, off_t offset,
                             int request, int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int len = 0;
-       drm_file_t *priv;
+       struct drm_file *priv;
 
        if (offset > DRM_PROC_LIMIT) {
                *eof = 1;
@@ -552,7 +552,7 @@ static int drm__clients_info(char *buf, char **start, off_t offset,
 static int drm_clients_info(char *buf, char **start, off_t offset,
                            int request, int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
@@ -566,9 +566,9 @@ static int drm_clients_info(char *buf, char **start, off_t offset,
 static int drm__vma_info(char *buf, char **start, off_t offset, int request,
                         int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int len = 0;
-       drm_vma_entry_t *pt;
+       struct drm_vma_entry *pt;
        struct vm_area_struct *vma;
 #if defined(__i386__)
        unsigned int pgprot;
@@ -625,7 +625,7 @@ static int drm__vma_info(char *buf, char **start, off_t offset, int request,
 static int drm_vma_info(char *buf, char **start, off_t offset, int request,
                        int *eof, void *data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
index 5581dc0..3c0f672 100644 (file)
@@ -36,7 +36,7 @@
 
 #define DEBUG_SCATTER 0
 
-void drm_sg_cleanup(drm_sg_mem_t * entry)
+void drm_sg_cleanup(struct drm_sg_mem *entry)
 {
        struct page *page;
        int i;
@@ -63,9 +63,9 @@ EXPORT_SYMBOL(drm_sg_cleanup);
 # define ScatterHandle(x) (unsigned int)(x)
 #endif
 
-int drm_sg_alloc(drm_device_t * dev, drm_scatter_gather_t * request)
+int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request)
 {
-       drm_sg_mem_t *entry;
+       struct drm_sg_mem *entry;
        unsigned long pages, i, j;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
@@ -187,43 +187,28 @@ int drm_sg_alloc(drm_device_t * dev, drm_scatter_gather_t * request)
 }
 EXPORT_SYMBOL(drm_sg_alloc);
 
-int drm_sg_alloc_ioctl(struct inode *inode, struct file *filp,
-                unsigned int cmd, unsigned long arg)
+int drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_scatter_gather_t __user *argp = (void __user *)arg;
-       drm_scatter_gather_t request;
-       int ret;
+       struct drm_scatter_gather *request = data;
 
-       if (copy_from_user(&request, argp, sizeof(request)))
-               return -EFAULT;
-
-       ret = drm_sg_alloc(priv->head->dev, &request);
-       if ( ret ) return ret;
-
-       if (copy_to_user(argp, &request, sizeof(request))) {
-               drm_sg_cleanup(priv->head->dev->sg);
-               priv->head->dev->sg = NULL;
-               return -EFAULT;
-       }
-
-
-       return 0;
+       return drm_sg_alloc(dev, request);
 
 }
 
-int drm_sg_free(struct drm_device *dev, unsigned long handle)
+int drm_sg_free(struct drm_device *dev, void *data,
+               struct drm_file *file_priv)
 {
-       drm_sg_mem_t *entry;
+       struct drm_scatter_gather *request = data;
+       struct drm_sg_mem *entry;
 
        if (!drm_core_check_feature(dev, DRIVER_SG))
                return -EINVAL;
 
-
        entry = dev->sg;
        dev->sg = NULL;
 
-       if (!entry || entry->handle != handle)
+       if (!entry || entry->handle != request->handle)
                return -EINVAL;
 
        DRM_DEBUG("sg free virtual  = %p\n", entry->virtual);
@@ -232,19 +217,3 @@ int drm_sg_free(struct drm_device *dev, unsigned long handle)
 
        return 0;
 }
-
-EXPORT_SYMBOL(drm_sg_free);
-
-int drm_sg_free_ioctl(struct inode *inode, struct file *filp,
-                     unsigned int cmd, unsigned long arg)
-{
-       struct drm_file *priv = filp->private_data;
-       struct drm_device *dev = priv->head->dev;
-       struct drm_scatter_gather __user *argp = (void __user *)arg;
-       struct drm_scatter_gather request;
-
-       if (copy_from_user(&request, argp, sizeof(request)))
-               return -EFAULT;
-
-       return drm_sg_free(dev, request.handle);
-}
index e15db6d..118e82a 100644 (file)
 
 #include "drm_sman.h"
 
-typedef struct drm_owner_item {
-       drm_hash_item_t owner_hash;
+struct drm_owner_item {
+       struct drm_hash_item owner_hash;
        struct list_head sman_list;
        struct list_head mem_blocks;
-} drm_owner_item_t;
+};
 
-void drm_sman_takedown(drm_sman_t * sman)
+void drm_sman_takedown(struct drm_sman * sman)
 {
        drm_ht_remove(&sman->user_hash_tab);
        drm_ht_remove(&sman->owner_hash_tab);
@@ -56,12 +56,12 @@ void drm_sman_takedown(drm_sman_t * sman)
 EXPORT_SYMBOL(drm_sman_takedown);
 
 int
-drm_sman_init(drm_sman_t * sman, unsigned int num_managers,
+drm_sman_init(struct drm_sman * sman, unsigned int num_managers,
              unsigned int user_order, unsigned int owner_order)
 {
        int ret = 0;
 
-       sman->mm = (drm_sman_mm_t *) drm_calloc(num_managers, sizeof(*sman->mm),
+       sman->mm = (struct drm_sman_mm *) drm_calloc(num_managers, sizeof(*sman->mm),
                                                DRM_MEM_MM);
        if (!sman->mm) {
                ret = -ENOMEM;
@@ -88,8 +88,8 @@ EXPORT_SYMBOL(drm_sman_init);
 static void *drm_sman_mm_allocate(void *private, unsigned long size,
                                  unsigned alignment)
 {
-       drm_mm_t *mm = (drm_mm_t *) private;
-       drm_mm_node_t *tmp;
+       struct drm_mm *mm = (struct drm_mm *) private;
+       struct drm_mm_node *tmp;
 
        tmp = drm_mm_search_free(mm, size, alignment, 1);
        if (!tmp) {
@@ -101,30 +101,30 @@ static void *drm_sman_mm_allocate(void *private, unsigned long size,
 
 static void drm_sman_mm_free(void *private, void *ref)
 {
-       drm_mm_node_t *node = (drm_mm_node_t *) ref;
+       struct drm_mm_node *node = (struct drm_mm_node *) ref;
 
        drm_mm_put_block(node);
 }
 
 static void drm_sman_mm_destroy(void *private)
 {
-       drm_mm_t *mm = (drm_mm_t *) private;
+       struct drm_mm *mm = (struct drm_mm *) private;
        drm_mm_takedown(mm);
        drm_free(mm, sizeof(*mm), DRM_MEM_MM);
 }
 
 static unsigned long drm_sman_mm_offset(void *private, void *ref)
 {
-       drm_mm_node_t *node = (drm_mm_node_t *) ref;
+       struct drm_mm_node *node = (struct drm_mm_node *) ref;
        return node->start;
 }
 
 int
-drm_sman_set_range(drm_sman_t * sman, unsigned int manager,
+drm_sman_set_range(struct drm_sman * sman, unsigned int manager,
                   unsigned long start, unsigned long size)
 {
-       drm_sman_mm_t *sman_mm;
-       drm_mm_t *mm;
+       struct drm_sman_mm *sman_mm;
+       struct drm_mm *mm;
        int ret;
 
        BUG_ON(manager >= sman->num_managers);
@@ -153,8 +153,8 @@ drm_sman_set_range(drm_sman_t * sman, unsigned int manager,
 EXPORT_SYMBOL(drm_sman_set_range);
 
 int
-drm_sman_set_manager(drm_sman_t * sman, unsigned int manager,
-                    drm_sman_mm_t * allocator)
+drm_sman_set_manager(struct drm_sman * sman, unsigned int manager,
+                    struct drm_sman_mm * allocator)
 {
        BUG_ON(manager >= sman->num_managers);
        sman->mm[manager] = *allocator;
@@ -163,16 +163,16 @@ drm_sman_set_manager(drm_sman_t * sman, unsigned int manager,
 }
 EXPORT_SYMBOL(drm_sman_set_manager);
 
-static drm_owner_item_t *drm_sman_get_owner_item(drm_sman_t * sman,
+static struct drm_owner_item *drm_sman_get_owner_item(struct drm_sman * sman,
                                                 unsigned long owner)
 {
        int ret;
-       drm_hash_item_t *owner_hash_item;
-       drm_owner_item_t *owner_item;
+       struct drm_hash_item *owner_hash_item;
+       struct drm_owner_item *owner_item;
 
        ret = drm_ht_find_item(&sman->owner_hash_tab, owner, &owner_hash_item);
        if (!ret) {
-               return drm_hash_entry(owner_hash_item, drm_owner_item_t,
+               return drm_hash_entry(owner_hash_item, struct drm_owner_item,
                                      owner_hash);
        }
 
@@ -194,14 +194,14 @@ out:
        return NULL;
 }
 
-drm_memblock_item_t *drm_sman_alloc(drm_sman_t *sman, unsigned int manager,
+struct drm_memblock_item *drm_sman_alloc(struct drm_sman *sman, unsigned int manager,
                                    unsigned long size, unsigned alignment,
                                    unsigned long owner)
 {
        void *tmp;
-       drm_sman_mm_t *sman_mm;
-       drm_owner_item_t *owner_item;
-       drm_memblock_item_t *memblock;
+       struct drm_sman_mm *sman_mm;
+       struct drm_owner_item *owner_item;
+       struct drm_memblock_item *memblock;
 
        BUG_ON(manager >= sman->num_managers);
 
@@ -246,9 +246,9 @@ out:
 
 EXPORT_SYMBOL(drm_sman_alloc);
 
-static void drm_sman_free(drm_memblock_item_t *item)
+static void drm_sman_free(struct drm_memblock_item *item)
 {
-       drm_sman_t *sman = item->sman;
+       struct drm_sman *sman = item->sman;
 
        list_del(&item->owner_list);
        drm_ht_remove_item(&sman->user_hash_tab, &item->user_hash);
@@ -256,40 +256,40 @@ static void drm_sman_free(drm_memblock_item_t *item)
        drm_free(item, sizeof(*item), DRM_MEM_MM);
 }
 
-int drm_sman_free_key(drm_sman_t *sman, unsigned int key)
+int drm_sman_free_key(struct drm_sman *sman, unsigned int key)
 {
-       drm_hash_item_t *hash_item;
-       drm_memblock_item_t *memblock_item;
+       struct drm_hash_item *hash_item;
+       struct drm_memblock_item *memblock_item;
 
        if (drm_ht_find_item(&sman->user_hash_tab, key, &hash_item))
                return -EINVAL;
 
-       memblock_item = drm_hash_entry(hash_item, drm_memblock_item_t, user_hash);
+       memblock_item = drm_hash_entry(hash_item, struct drm_memblock_item, user_hash);
        drm_sman_free(memblock_item);
        return 0;
 }
 
 EXPORT_SYMBOL(drm_sman_free_key);
 
-static void drm_sman_remove_owner(drm_sman_t *sman,
-                                 drm_owner_item_t *owner_item)
+static void drm_sman_remove_owner(struct drm_sman *sman,
+                                 struct drm_owner_item *owner_item)
 {
        list_del(&owner_item->sman_list);
        drm_ht_remove_item(&sman->owner_hash_tab, &owner_item->owner_hash);
        drm_free(owner_item, sizeof(*owner_item), DRM_MEM_MM);
 }
 
-int drm_sman_owner_clean(drm_sman_t *sman, unsigned long owner)
+int drm_sman_owner_clean(struct drm_sman *sman, unsigned long owner)
 {
 
-       drm_hash_item_t *hash_item;
-       drm_owner_item_t *owner_item;
+       struct drm_hash_item *hash_item;
+       struct drm_owner_item *owner_item;
 
        if (drm_ht_find_item(&sman->owner_hash_tab, owner, &hash_item)) {
                return -1;
        }
 
-       owner_item = drm_hash_entry(hash_item, drm_owner_item_t, owner_hash);
+       owner_item = drm_hash_entry(hash_item, struct drm_owner_item, owner_hash);
        if (owner_item->mem_blocks.next == &owner_item->mem_blocks) {
                drm_sman_remove_owner(sman, owner_item);
                return -1;
@@ -300,10 +300,10 @@ int drm_sman_owner_clean(drm_sman_t *sman, unsigned long owner)
 
 EXPORT_SYMBOL(drm_sman_owner_clean);
 
-static void drm_sman_do_owner_cleanup(drm_sman_t *sman,
-                                     drm_owner_item_t *owner_item)
+static void drm_sman_do_owner_cleanup(struct drm_sman *sman,
+                                     struct drm_owner_item *owner_item)
 {
-       drm_memblock_item_t *entry, *next;
+       struct drm_memblock_item *entry, *next;
 
        list_for_each_entry_safe(entry, next, &owner_item->mem_blocks,
                                 owner_list) {
@@ -312,28 +312,28 @@ static void drm_sman_do_owner_cleanup(drm_sman_t *sman,
        drm_sman_remove_owner(sman, owner_item);
 }
 
-void drm_sman_owner_cleanup(drm_sman_t *sman, unsigned long owner)
+void drm_sman_owner_cleanup(struct drm_sman *sman, unsigned long owner)
 {
 
-       drm_hash_item_t *hash_item;
-       drm_owner_item_t *owner_item;
+       struct drm_hash_item *hash_item;
+       struct drm_owner_item *owner_item;
 
        if (drm_ht_find_item(&sman->owner_hash_tab, owner, &hash_item)) {
 
                return;
        }
 
-       owner_item = drm_hash_entry(hash_item, drm_owner_item_t, owner_hash);
+       owner_item = drm_hash_entry(hash_item, struct drm_owner_item, owner_hash);
        drm_sman_do_owner_cleanup(sman, owner_item);
 }
 
 EXPORT_SYMBOL(drm_sman_owner_cleanup);
 
-void drm_sman_cleanup(drm_sman_t *sman)
+void drm_sman_cleanup(struct drm_sman *sman)
 {
-       drm_owner_item_t *entry, *next;
+       struct drm_owner_item *entry, *next;
        unsigned int i;
-       drm_sman_mm_t *sman_mm;
+       struct drm_sman_mm *sman_mm;
 
        list_for_each_entry_safe(entry, next, &sman->owner_items, sman_list) {
                drm_sman_do_owner_cleanup(sman, entry);
index ddc732a..39a39fe 100644 (file)
@@ -50,7 +50,7 @@
  * for memory management.
  */
 
-typedef struct drm_sman_mm {
+struct drm_sman_mm {
        /* private info. If allocated, needs to be destroyed by the destroy
           function */
        void *private;
@@ -74,30 +74,30 @@ typedef struct drm_sman_mm {
           "alloc" function */
 
        unsigned long (*offset) (void *private, void *ref);
-} drm_sman_mm_t;
+};
 
-typedef struct drm_memblock_item {
+struct drm_memblock_item {
        struct list_head owner_list;
-       drm_hash_item_t user_hash;
+       struct drm_hash_item user_hash;
        void *mm_info;
-       drm_sman_mm_t *mm;
+       struct drm_sman_mm *mm;
        struct drm_sman *sman;
-} drm_memblock_item_t;
+};
 
-typedef struct drm_sman {
-       drm_sman_mm_t *mm;
+struct drm_sman {
+       struct drm_sman_mm *mm;
        int num_managers;
-       drm_open_hash_t owner_hash_tab;
-       drm_open_hash_t user_hash_tab;
+       struct drm_open_hash owner_hash_tab;
+       struct drm_open_hash user_hash_tab;
        struct list_head owner_items;
-} drm_sman_t;
+};
 
 /*
  * Take down a memory manager. This function should only be called after a
  * successful init and after a call to drm_sman_cleanup.
  */
 
-extern void drm_sman_takedown(drm_sman_t * sman);
+extern void drm_sman_takedown(struct drm_sman * sman);
 
 /*
  * Allocate structures for a manager.
@@ -112,7 +112,7 @@ extern void drm_sman_takedown(drm_sman_t * sman);
  *
  */
 
-extern int drm_sman_init(drm_sman_t * sman, unsigned int num_managers,
+extern int drm_sman_init(struct drm_sman * sman, unsigned int num_managers,
                         unsigned int user_order, unsigned int owner_order);
 
 /*
@@ -120,7 +120,7 @@ extern int drm_sman_init(drm_sman_t * sman, unsigned int num_managers,
  * manager unless a customized allogator is used.
  */
 
-extern int drm_sman_set_range(drm_sman_t * sman, unsigned int manager,
+extern int drm_sman_set_range(struct drm_sman * sman, unsigned int manager,
                              unsigned long start, unsigned long size);
 
 /*
@@ -129,23 +129,23 @@ extern int drm_sman_set_range(drm_sman_t * sman, unsigned int manager,
  * so it can be destroyed after this call.
  */
 
-extern int drm_sman_set_manager(drm_sman_t * sman, unsigned int mananger,
-                               drm_sman_mm_t * allocator);
+extern int drm_sman_set_manager(struct drm_sman * sman, unsigned int mananger,
+                               struct drm_sman_mm * allocator);
 
 /*
  * Allocate a memory block. Aligment is not implemented yet.
  */
 
-extern drm_memblock_item_t *drm_sman_alloc(drm_sman_t * sman,
-                                          unsigned int manager,
-                                          unsigned long size,
-                                          unsigned alignment,
-                                          unsigned long owner);
+extern struct drm_memblock_item *drm_sman_alloc(struct drm_sman * sman,
+                                               unsigned int manager,
+                                               unsigned long size,
+                                               unsigned alignment,
+                                               unsigned long owner);
 /*
  * Free a memory block identified by its user hash key.
  */
 
-extern int drm_sman_free_key(drm_sman_t * sman, unsigned int key);
+extern int drm_sman_free_key(struct drm_sman * sman, unsigned int key);
 
 /*
  * returns 1 iff there are no stale memory blocks associated with this owner.
@@ -154,7 +154,7 @@ extern int drm_sman_free_key(drm_sman_t * sman, unsigned int key);
  * resources associated with owner.
  */
 
-extern int drm_sman_owner_clean(drm_sman_t * sman, unsigned long owner);
+extern int drm_sman_owner_clean(struct drm_sman * sman, unsigned long owner);
 
 /*
  * Frees all stale memory blocks associated with this owner. Note that this
@@ -164,13 +164,13 @@ extern int drm_sman_owner_clean(drm_sman_t * sman, unsigned long owner);
  * is not going to be referenced anymore.
  */
 
-extern void drm_sman_owner_cleanup(drm_sman_t * sman, unsigned long owner);
+extern void drm_sman_owner_cleanup(struct drm_sman * sman, unsigned long owner);
 
 /*
  * Frees all stale memory blocks associated with the memory manager.
  * See idling above.
  */
 
-extern void drm_sman_cleanup(drm_sman_t * sman);
+extern void drm_sman_cleanup(struct drm_sman * sman);
 
 #endif
index b96408a..eba6dee 100644 (file)
@@ -50,11 +50,11 @@ MODULE_PARM_DESC(debug, "Enable debug output");
 module_param_named(cards_limit, drm_cards_limit, int, 0444);
 module_param_named(debug, drm_debug, int, 0600);
 
-drm_head_t **drm_heads;
+struct drm_head **drm_heads;
 struct drm_sysfs_class *drm_class;
 struct proc_dir_entry *drm_proc_root;
 
-static int drm_fill_in_dev(drm_device_t * dev, struct pci_dev *pdev,
+static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
                       const struct pci_device_id *ent,
                       struct drm_driver *driver)
 {
@@ -160,9 +160,9 @@ error_out_unreg:
  * create the proc init entry via proc_init(). This routines assigns
  * minor numbers to secondary heads of multi-headed cards
  */
-static int drm_get_head(drm_device_t * dev, drm_head_t * head)
+static int drm_get_head(struct drm_device * dev, struct drm_head * head)
 {
-       drm_head_t **heads = drm_heads;
+       struct drm_head **heads = drm_heads;
        int ret;
        int minor;
 
@@ -171,7 +171,7 @@ static int drm_get_head(drm_device_t * dev, drm_head_t * head)
        for (minor = 0; minor < drm_cards_limit; minor++, heads++) {
                if (!*heads) {
 
-                       *head = (drm_head_t) {
+                       *head = (struct drm_head) {
                                .dev = dev,
                                .device = MKDEV(DRM_MAJOR, minor),
                                .minor = minor,
@@ -202,7 +202,7 @@ static int drm_get_head(drm_device_t * dev, drm_head_t * head)
 err_g2:
        drm_proc_cleanup(minor, drm_proc_root, head->dev_root);
 err_g1:
-       *head = (drm_head_t) {
+       *head = (struct drm_head) {
                .dev = NULL};
        return ret;
 }
@@ -221,7 +221,7 @@ err_g1:
 int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
              struct drm_driver *driver)
 {
-       drm_device_t *dev;
+       struct drm_device *dev;
        int ret;
 
        DRM_DEBUG("\n");
@@ -282,7 +282,7 @@ EXPORT_SYMBOL(drm_get_dev);
  * "drm" data, otherwise unregisters the "drm" data, frees the dev list and
  * unregisters the character device.
  */
-int drm_put_dev(drm_device_t * dev)
+int drm_put_dev(struct drm_device * dev)
 {
        DRM_DEBUG("release primary %s\n", dev->driver->pci_driver.name);
 
@@ -310,7 +310,7 @@ int drm_put_dev(drm_device_t * dev)
  * last minor released.
  *
  */
-int drm_put_head(drm_head_t * head)
+int drm_put_head(struct drm_head * head)
 {
        int minor = head->minor;
 
@@ -319,7 +319,7 @@ int drm_put_head(drm_head_t * head)
        drm_proc_cleanup(minor, drm_proc_root, head->dev_root);
        drm_sysfs_device_remove(head->dev_class);
 
-       *head = (drm_head_t){.dev = NULL};
+       *head = (struct drm_head){.dev = NULL};
 
        drm_heads[minor] = NULL;
        return 0;
index 9b2f5dc..1090e71 100644 (file)
@@ -123,7 +123,7 @@ void drm_sysfs_destroy(struct drm_sysfs_class *cs)
 
 static ssize_t show_dri(struct class_device *class_device, char *buf)
 {
-       drm_device_t * dev = ((drm_head_t *)class_get_devdata(class_device))->dev;
+       struct drm_device * dev = ((struct drm_head *)class_get_devdata(class_device))->dev;
        if (dev->driver->dri_library_name)
                return dev->driver->dri_library_name(dev, buf);
        return snprintf(buf, PAGE_SIZE, "%s\n", dev->driver->pci_driver.name);
@@ -148,7 +148,7 @@ static struct class_device_attribute class_device_attrs[] = {
  * created with a call to drm_sysfs_create().
  */
 struct class_device *drm_sysfs_device_add(struct drm_sysfs_class *cs,
-                                         drm_head_t * head)
+                                         struct drm_head * head)
 {
        struct simple_dev *s_dev = NULL;
        int i, retval;
index 31503c9..60c64cb 100644 (file)
@@ -45,7 +45,7 @@ static void drm_ttm_cache_flush(void)
  * Use kmalloc if possible. Otherwise fall back to vmalloc.
  */
 
-static void ttm_alloc_pages(drm_ttm_t * ttm)
+static void ttm_alloc_pages(struct drm_ttm * ttm)
 {
        unsigned long size = ttm->num_pages * sizeof(*ttm->pages);
        ttm->pages = NULL;
@@ -66,7 +66,7 @@ static void ttm_alloc_pages(drm_ttm_t * ttm)
        }
 }
 
-static void ttm_free_pages(drm_ttm_t * ttm)
+static void ttm_free_pages(struct drm_ttm * ttm)
 {
        unsigned long size = ttm->num_pages * sizeof(*ttm->pages);
 
@@ -105,7 +105,7 @@ static struct page *drm_ttm_alloc_page(void)
  * for range of pages in a ttm.
  */
 
-static int drm_set_caching(drm_ttm_t * ttm, int noncached)
+static int drm_set_caching(struct drm_ttm * ttm, int noncached)
 {
        int i;
        struct page **cur_page;
@@ -142,12 +142,12 @@ static int drm_set_caching(drm_ttm_t * ttm, int noncached)
  * Free all resources associated with a ttm.
  */
 
-int drm_destroy_ttm(drm_ttm_t * ttm)
+int drm_destroy_ttm(struct drm_ttm * ttm)
 {
 
        int i;
        struct page **cur_page;
-       drm_ttm_backend_t *be;
+       struct drm_ttm_backend *be;
 
        if (!ttm)
                return 0;
@@ -159,7 +159,7 @@ int drm_destroy_ttm(drm_ttm_t * ttm)
        }
 
        if (ttm->pages) {
-               drm_buffer_manager_t *bm = &ttm->dev->bm;
+               struct drm_buffer_manager *bm = &ttm->dev->bm;
                if (ttm->page_flags & DRM_TTM_PAGE_UNCACHED)
                        drm_set_caching(ttm, 0);
 
@@ -191,10 +191,10 @@ int drm_destroy_ttm(drm_ttm_t * ttm)
        return 0;
 }
 
-struct page *drm_ttm_get_page(drm_ttm_t * ttm, int index)
+struct page *drm_ttm_get_page(struct drm_ttm * ttm, int index)
 {
        struct page *p;
-       drm_buffer_manager_t *bm = &ttm->dev->bm;
+       struct drm_buffer_manager *bm = &ttm->dev->bm;
 
        p = ttm->pages[index];
        if (!p) {
@@ -207,11 +207,11 @@ struct page *drm_ttm_get_page(drm_ttm_t * ttm, int index)
        return p;
 }
 
-static int drm_ttm_populate(drm_ttm_t * ttm)
+static int drm_ttm_populate(struct drm_ttm * ttm)
 {
        struct page *page;
        unsigned long i;
-       drm_ttm_backend_t *be;
+       struct drm_ttm_backend *be;
 
        if (ttm->state != ttm_unpopulated)
                return 0;
@@ -231,10 +231,10 @@ static int drm_ttm_populate(drm_ttm_t * ttm)
  * Initialize a ttm.
  */
 
-drm_ttm_t *drm_ttm_init(struct drm_device * dev, unsigned long size)
+struct drm_ttm *drm_ttm_init(struct drm_device * dev, unsigned long size)
 {
-       drm_bo_driver_t *bo_driver = dev->driver->bo_driver;
-       drm_ttm_t *ttm;
+       struct drm_bo_driver *bo_driver = dev->driver->bo_driver;
+       struct drm_ttm *ttm;
 
        if (!bo_driver)
                return NULL;
@@ -275,9 +275,9 @@ drm_ttm_t *drm_ttm_init(struct drm_device * dev, unsigned long size)
  * Unbind a ttm region from the aperture.
  */
 
-void drm_ttm_evict(drm_ttm_t * ttm)
+void drm_ttm_evict(struct drm_ttm * ttm)
 {
-       drm_ttm_backend_t *be = ttm->be;
+       struct drm_ttm_backend *be = ttm->be;
        int ret;
 
        if (ttm->state == ttm_bound) {
@@ -288,11 +288,11 @@ void drm_ttm_evict(drm_ttm_t * ttm)
        ttm->state = ttm_evicted;
 }
 
-void drm_ttm_fixup_caching(drm_ttm_t * ttm)
+void drm_ttm_fixup_caching(struct drm_ttm * ttm)
 {
 
        if (ttm->state == ttm_evicted) {
-               drm_ttm_backend_t *be = ttm->be;
+               struct drm_ttm_backend *be = ttm->be;
                if (be->func->needs_ub_cache_adjust(be)) {
                        drm_set_caching(ttm, 0);
                }
@@ -300,7 +300,7 @@ void drm_ttm_fixup_caching(drm_ttm_t * ttm)
        }
 }
 
-void drm_ttm_unbind(drm_ttm_t * ttm)
+void drm_ttm_unbind(struct drm_ttm * ttm)
 {
        if (ttm->state == ttm_bound)
                drm_ttm_evict(ttm);
@@ -308,11 +308,11 @@ void drm_ttm_unbind(drm_ttm_t * ttm)
        drm_ttm_fixup_caching(ttm);
 }
 
-int drm_bind_ttm(drm_ttm_t * ttm, int cached, unsigned long aper_offset)
+int drm_bind_ttm(struct drm_ttm * ttm, int cached, unsigned long aper_offset)
 {
 
        int ret = 0;
-       drm_ttm_backend_t *be;
+       struct drm_ttm_backend *be;
 
        if (!ttm)
                return -EINVAL;
index 72d63c1..c4e790e 100644 (file)
@@ -85,11 +85,11 @@ pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
 static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
                                                unsigned long address)
 {
-       drm_file_t *priv = vma->vm_file->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_map_t *map = NULL;
-       drm_map_list_t *r_list;
-       drm_hash_item_t *hash;
+       struct drm_file *priv = vma->vm_file->private_data;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_map *map = NULL;
+       struct drm_map_list *r_list;
+       struct drm_hash_item *hash;
 
        /*
         * Find the right map
@@ -103,7 +103,7 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
        if (drm_ht_find_item(&dev->map_hash, vma->vm_pgoff, &hash))
                goto vm_nopage_error;
 
-       r_list = drm_hash_entry(hash, drm_map_list_t, hash);
+       r_list = drm_hash_entry(hash, struct drm_map_list, hash);
        map = r_list->map;
 
        if (map && map->type == _DRM_AGP) {
@@ -172,7 +172,7 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
 static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
                                                    unsigned long address)
 {
-       drm_map_t *map = (drm_map_t *) vma->vm_private_data;
+       struct drm_map *map = (struct drm_map *) vma->vm_private_data;
        unsigned long offset;
        unsigned long i;
        struct page *page;
@@ -203,11 +203,11 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
  */
 static void drm_vm_shm_close(struct vm_area_struct *vma)
 {
-       drm_file_t *priv = vma->vm_file->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_vma_entry_t *pt, *temp;
-       drm_map_t *map;
-       drm_map_list_t *r_list;
+       struct drm_file *priv = vma->vm_file->private_data;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_vma_entry *pt, *temp;
+       struct drm_map *map;
+       struct drm_map_list *r_list;
        int found_maps = 0;
 
        DRM_DEBUG("0x%08lx,0x%08lx\n",
@@ -285,9 +285,9 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
 static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
                                                    unsigned long address)
 {
-       drm_file_t *priv = vma->vm_file->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_file *priv = vma->vm_file->private_data;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_device_dma *dma = dev->dma;
        unsigned long offset;
        unsigned long page_nr;
        struct page *page;
@@ -321,10 +321,10 @@ static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
 static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma,
                                                   unsigned long address)
 {
-       drm_map_t *map = (drm_map_t *) vma->vm_private_data;
-       drm_file_t *priv = vma->vm_file->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_sg_mem_t *entry = dev->sg;
+       struct drm_map *map = (struct drm_map *) vma->vm_private_data;
+       struct drm_file *priv = vma->vm_file->private_data;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_sg_mem *entry = dev->sg;
        unsigned long offset;
        unsigned long map_offset;
        unsigned long page_offset;
@@ -418,9 +418,9 @@ static struct vm_operations_struct drm_vm_sg_ops = {
  */
 static void drm_vm_open_locked(struct vm_area_struct *vma)
 {
-       drm_file_t *priv = vma->vm_file->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_vma_entry_t *vma_entry;
+       struct drm_file *priv = vma->vm_file->private_data;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_vma_entry *vma_entry;
 
        DRM_DEBUG("0x%08lx,0x%08lx\n",
                  vma->vm_start, vma->vm_end - vma->vm_start);
@@ -436,8 +436,8 @@ static void drm_vm_open_locked(struct vm_area_struct *vma)
 
 static void drm_vm_open(struct vm_area_struct *vma)
 {
-       drm_file_t *priv = vma->vm_file->private_data;
-       drm_device_t *dev = priv->head->dev;
+       struct drm_file *priv = vma->vm_file->private_data;
+       struct drm_device *dev = priv->head->dev;
 
        mutex_lock(&dev->struct_mutex);
        drm_vm_open_locked(vma);
@@ -454,9 +454,9 @@ static void drm_vm_open(struct vm_area_struct *vma)
  */
 static void drm_vm_close(struct vm_area_struct *vma)
 {
-       drm_file_t *priv = vma->vm_file->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_vma_entry_t *pt, *temp;
+       struct drm_file *priv = vma->vm_file->private_data;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_vma_entry *pt, *temp;
 
        DRM_DEBUG("0x%08lx,0x%08lx\n",
                  vma->vm_start, vma->vm_end - vma->vm_start);
@@ -477,7 +477,7 @@ static void drm_vm_close(struct vm_area_struct *vma)
 /**
  * mmap DMA memory.
  *
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param vma virtual memory area.
  * \return zero on success or a negative number on failure.
  *
@@ -486,9 +486,9 @@ static void drm_vm_close(struct vm_area_struct *vma)
  */
 static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev;
-       drm_device_dma_t *dma;
+       struct drm_file *priv = filp->private_data;
+       struct drm_device *dev;
+       struct drm_device_dma *dma;
        unsigned long length = vma->vm_end - vma->vm_start;
 
        dev = priv->head->dev;
@@ -524,7 +524,7 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
        return 0;
 }
 
-unsigned long drm_core_get_map_ofs(drm_map_t * map)
+unsigned long drm_core_get_map_ofs(struct drm_map * map)
 {
        return map->offset;
 }
@@ -543,7 +543,7 @@ EXPORT_SYMBOL(drm_core_get_reg_ofs);
 /**
  * mmap DMA memory.
  *
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param vma virtual memory area.
  * \return zero on success or a negative number on failure.
  *
@@ -555,11 +555,11 @@ EXPORT_SYMBOL(drm_core_get_reg_ofs);
  */
 static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_map_t *map = NULL;
+       struct drm_file *priv = filp->private_data;
+       struct drm_device *dev = priv->head->dev;
+       struct drm_map *map = NULL;
        unsigned long offset = 0;
-       drm_hash_item_t *hash;
+       struct drm_hash_item *hash;
 
        DRM_DEBUG("start = 0x%lx, end = 0x%lx, page offset = 0x%lx\n",
                  vma->vm_start, vma->vm_end, vma->vm_pgoff);
@@ -585,7 +585,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
                return -EINVAL;
        }
 
-       map = drm_hash_entry(hash, drm_map_list_t, hash)->map;
+       map = drm_hash_entry(hash, struct drm_map_list, hash)->map;
        if (!map || ((map->flags & _DRM_RESTRICTED) && !capable(CAP_SYS_ADMIN)))
                return -EPERM;
 
@@ -676,8 +676,8 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
 
 int drm_mmap(struct file *filp, struct vm_area_struct *vma)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
+       struct drm_file *priv = filp->private_data;
+       struct drm_device *dev = priv->head->dev;
        int ret;
 
        mutex_lock(&dev->struct_mutex);
@@ -713,11 +713,11 @@ EXPORT_SYMBOL(drm_mmap);
 static unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
                                     unsigned long address)
 {
-       drm_buffer_object_t *bo = (drm_buffer_object_t *) vma->vm_private_data;
+       struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
        unsigned long page_offset;
        struct page *page = NULL;
-       drm_ttm_t *ttm;
-       drm_device_t *dev;
+       struct drm_ttm *ttm;
+       struct drm_device *dev;
        unsigned long pfn;
        int err;
        unsigned long bus_base;
@@ -766,7 +766,7 @@ static unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
        page_offset = (address - vma->vm_start) >> PAGE_SHIFT;
 
        if (bus_size) {
-               drm_mem_type_manager_t *man = &dev->bm.man[bo->mem.mem_type];
+               struct drm_mem_type_manager *man = &dev->bm.man[bo->mem.mem_type];
 
                pfn = ((bus_base + bus_offset) >> PAGE_SHIFT) + page_offset;
                vma->vm_page_prot = drm_io_prot(man->drm_bus_maptype, vma);
@@ -798,7 +798,7 @@ out_unlock:
 
 static void drm_bo_vm_open_locked(struct vm_area_struct *vma)
 {
-       drm_buffer_object_t *bo = (drm_buffer_object_t *) vma->vm_private_data;
+       struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
 
        drm_vm_open_locked(vma);
        atomic_inc(&bo->usage);
@@ -815,8 +815,8 @@ static void drm_bo_vm_open_locked(struct vm_area_struct *vma)
 
 static void drm_bo_vm_open(struct vm_area_struct *vma)
 {
-       drm_buffer_object_t *bo = (drm_buffer_object_t *) vma->vm_private_data;
-       drm_device_t *dev = bo->dev;
+       struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
+       struct drm_device *dev = bo->dev;
 
        mutex_lock(&dev->struct_mutex);
        drm_bo_vm_open_locked(vma);
@@ -831,8 +831,8 @@ static void drm_bo_vm_open(struct vm_area_struct *vma)
 
 static void drm_bo_vm_close(struct vm_area_struct *vma)
 {
-       drm_buffer_object_t *bo = (drm_buffer_object_t *) vma->vm_private_data;
-       drm_device_t *dev = bo->dev;
+       struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
+       struct drm_device *dev = bo->dev;
 
        drm_vm_close(vma);
        if (bo) {
@@ -865,7 +865,7 @@ static struct vm_operations_struct drm_bo_vm_ops = {
  * mmap buffer object memory.
  *
  * \param vma virtual memory area.
- * \param filp file pointer.
+ * \param file_priv DRM file private.
  * \param map The buffer object drm map.
  * \return zero on success or a negative number on failure.
  */
index e6ae60c..586c350 100644 (file)
@@ -13,7 +13,7 @@
 #include "drmP.h"
 #include "ffb_drv.h"
 
-static int ffb_alloc_queue(drm_device_t * dev, int is_2d_only) {
+static int ffb_alloc_queue(struct drm_device * dev, int is_2d_only) {
        ffb_dev_priv_t *fpriv = (ffb_dev_priv_t *) dev->dev_private;
        int i;
 
@@ -351,7 +351,7 @@ static void FFBWait(ffb_fbcPtr ffb)
        } while (--limit);
 }
 
-int ffb_context_switch(drm_device_t * dev, int old, int new) {
+int ffb_context_switch(struct drm_device * dev, int old, int new) {
        ffb_dev_priv_t *fpriv = (ffb_dev_priv_t *) dev->dev_private;
 
 #if DRM_DMA_HISTOGRAM
@@ -401,7 +401,7 @@ int ffb_resctx(struct inode * inode, struct file * filp, unsigned int cmd,
 int ffb_addctx(struct inode * inode, struct file * filp, unsigned int cmd,
                 unsigned long arg) {
        drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
+       struct drm_device *dev = priv->dev;
        drm_ctx_t ctx;
        int idx;
 
@@ -421,7 +421,7 @@ int ffb_addctx(struct inode * inode, struct file * filp, unsigned int cmd,
 int ffb_modctx(struct inode * inode, struct file * filp, unsigned int cmd,
                 unsigned long arg) {
        drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
+       struct drm_device *dev = priv->dev;
        ffb_dev_priv_t *fpriv = (ffb_dev_priv_t *) dev->dev_private;
        struct ffb_hw_context *hwctx;
        drm_ctx_t ctx;
@@ -449,7 +449,7 @@ int ffb_modctx(struct inode * inode, struct file * filp, unsigned int cmd,
 int ffb_getctx(struct inode * inode, struct file * filp, unsigned int cmd,
                 unsigned long arg) {
        drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
+       struct drm_device *dev = priv->dev;
        ffb_dev_priv_t *fpriv = (ffb_dev_priv_t *) dev->dev_private;
        struct ffb_hw_context *hwctx;
        drm_ctx_t ctx;
@@ -480,7 +480,7 @@ int ffb_getctx(struct inode * inode, struct file * filp, unsigned int cmd,
 int ffb_switchctx(struct inode * inode, struct file * filp, unsigned int cmd,
                    unsigned long arg) {
        drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
+       struct drm_device *dev = priv->dev;
        drm_ctx_t ctx;
 
        if (copy_from_user(&ctx, (drm_ctx_t __user *) arg, sizeof(ctx)))
@@ -504,7 +504,7 @@ int ffb_rmctx(struct inode * inode, struct file * filp, unsigned int cmd,
                unsigned long arg) {
        drm_ctx_t ctx;
        drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
+       struct drm_device *dev = priv->dev;
        ffb_dev_priv_t *fpriv = (ffb_dev_priv_t *) dev->dev_private;
        int idx;
 
@@ -523,7 +523,7 @@ int ffb_rmctx(struct inode * inode, struct file * filp, unsigned int cmd,
        return 0;
 }
 
-static void ffb_driver_reclaim_buffers_locked(drm_device_t * dev)
+static void ffb_driver_reclaim_buffers_locked(struct drm_device * dev)
 {
        ffb_dev_priv_t *fpriv = (ffb_dev_priv_t *) dev->dev_private;
        int context = _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock);
@@ -537,13 +537,13 @@ static void ffb_driver_reclaim_buffers_locked(drm_device_t * dev)
        }
 }
 
-static void ffb_driver_lastclose(drm_device_t * dev)
+static void ffb_driver_lastclose(struct drm_device * dev)
 {
        if (dev->dev_private)
                kfree(dev->dev_private);
 }
 
-static void ffb_driver_unload(drm_device_t * dev)
+static void ffb_driver_unload(struct drm_device * dev)
 {
        if (ffb_position != NULL)
                kfree(ffb_position);
@@ -571,7 +571,7 @@ unsigned long ffb_driver_get_map_ofs(drm_map_t * map)
        return (map->offset & 0xffffffff);
 }
 
-unsigned long ffb_driver_get_reg_ofs(drm_device_t * dev)
+unsigned long ffb_driver_get_reg_ofs(struct drm_device * dev)
 {
        ffb_dev_priv_t *ffb_priv = (ffb_dev_priv_t *) dev->dev_private;
 
index 9c88f06..f2b4cc7 100644 (file)
@@ -114,7 +114,7 @@ static void ffb_apply_upa_parent_ranges(int parent,
        return;
 }
 
-static int ffb_init_one(drm_device_t *dev, int prom_node, int parent_node,
+static int ffb_init_one(struct drm_device *dev, int prom_node, int parent_node,
                        int instance)
 {
        struct linux_prom64_registers regs[2*PROMREG_MAX];
@@ -167,7 +167,7 @@ static int __init ffb_scan_siblings(int root, int instance)
 static drm_map_t *ffb_find_map(struct file *filp, unsigned long off)
 {
        drm_file_t      *priv   = filp->private_data;
-       drm_device_t    *dev;
+       struct drm_device       *dev;
        drm_map_list_t  *r_list;
        struct list_head *list;
        drm_map_t       *map;
@@ -237,10 +237,10 @@ unsigned long ffb_get_unmapped_area(struct file *filp,
 /* This functions must be here since it references drm_numdevs)
  * which drm_drv.h declares.
  */
-static int ffb_driver_firstopen(drm_device_t *dev)
+static int ffb_driver_firstopen(struct drm_device *dev)
 {
        ffb_dev_priv_t  *ffb_priv;
-       drm_device_t *temp_dev;
+       struct drm_device *temp_dev;
        int ret = 0;
        int i;
 
index f76b0d9..bad3c94 100644 (file)
@@ -281,4 +281,4 @@ extern unsigned long ffb_get_unmapped_area(struct file *filp,
                                           unsigned long pgoff,
                                           unsigned long flags);
 extern unsigned long ffb_driver_get_map_ofs(drm_map_t *map)
-extern unsigned long ffb_driver_get_reg_ofs(drm_device_t *dev)
+extern unsigned long ffb_driver_get_reg_ofs(struct drm_device *dev)
index 4937943..7c37b4b 100644 (file)
@@ -46,9 +46,9 @@
 #define I810_BUF_UNMAPPED 0
 #define I810_BUF_MAPPED   1
 
-static inline void i810_print_status_page(drm_device_t * dev)
+static inline void i810_print_status_page(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_i810_private_t *dev_priv = dev->dev_private;
        u32 *temp = dev_priv->hw_status_page;
        int i;
@@ -64,16 +64,16 @@ static inline void i810_print_status_page(drm_device_t * dev)
        }
 }
 
-static drm_buf_t *i810_freelist_get(drm_device_t * dev)
+static struct drm_buf *i810_freelist_get(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int i;
        int used;
 
        /* Linear search might not be the best solution */
 
        for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[i];
+               struct drm_buf *buf = dma->buflist[i];
                drm_i810_buf_priv_t *buf_priv = buf->dev_private;
                /* In use is already a pointer */
                used = cmpxchg(buf_priv->in_use, I810_BUF_FREE,
@@ -89,7 +89,7 @@ static drm_buf_t *i810_freelist_get(drm_device_t * dev)
  * yet, the hardware updates in use for us once its on the ring buffer.
  */
 
-static int i810_freelist_put(drm_device_t * dev, drm_buf_t * buf)
+static int i810_freelist_put(struct drm_device * dev, struct drm_buf * buf)
 {
        drm_i810_buf_priv_t *buf_priv = buf->dev_private;
        int used;
@@ -106,10 +106,10 @@ static int i810_freelist_put(drm_device_t * dev, drm_buf_t * buf)
 
 static int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev;
+       struct drm_file *priv = filp->private_data;
+       struct drm_device *dev;
        drm_i810_private_t *dev_priv;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        drm_i810_buf_priv_t *buf_priv;
 
        lock_kernel();
@@ -139,10 +139,9 @@ static const struct file_operations i810_buffer_fops = {
        .fasync = drm_fasync,
 };
 
-static int i810_map_buffer(drm_buf_t * buf, struct file *filp)
+static int i810_map_buffer(struct drm_buf * buf, struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
+       struct drm_device *dev = file_priv->head->dev;
        drm_i810_buf_priv_t *buf_priv = buf->dev_private;
        drm_i810_private_t *dev_priv = dev->dev_private;
        const struct file_operations *old_fops;
@@ -152,14 +151,14 @@ static int i810_map_buffer(drm_buf_t * buf, struct file *filp)
                return -EINVAL;
 
        down_write(&current->mm->mmap_sem);
-       old_fops = filp->f_op;
-       filp->f_op = &i810_buffer_fops;
+       old_fops = file_priv->filp->f_op;
+       file_priv->filp->f_op = &i810_buffer_fops;
        dev_priv->mmap_buffer = buf;
-       buf_priv->virtual = (void *)do_mmap(filp, 0, buf->total,
+       buf_priv->virtual = (void *)do_mmap(file_priv->filp, 0, buf->total,
                                            PROT_READ | PROT_WRITE,
                                            MAP_SHARED, buf->bus_address);
        dev_priv->mmap_buffer = NULL;
-       filp->f_op = old_fops;
+       file_priv->filp->f_op = old_fops;
        if (IS_ERR(buf_priv->virtual)) {
                /* Real error */
                DRM_ERROR("mmap error\n");
@@ -171,7 +170,7 @@ static int i810_map_buffer(drm_buf_t * buf, struct file *filp)
        return retcode;
 }
 
-static int i810_unmap_buffer(drm_buf_t * buf)
+static int i810_unmap_buffer(struct drm_buf * buf)
 {
        drm_i810_buf_priv_t *buf_priv = buf->dev_private;
        int retcode = 0;
@@ -191,10 +190,10 @@ static int i810_unmap_buffer(drm_buf_t * buf)
        return retcode;
 }
 
-static int i810_dma_get_buffer(drm_device_t * dev, drm_i810_dma_t * d,
-                              struct file *filp)
+static int i810_dma_get_buffer(struct drm_device * dev, drm_i810_dma_t * d,
+                              struct drm_file *file_priv)
 {
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        drm_i810_buf_priv_t *buf_priv;
        int retcode = 0;
 
@@ -205,13 +204,13 @@ static int i810_dma_get_buffer(drm_device_t * dev, drm_i810_dma_t * d,
                return retcode;
        }
 
-       retcode = i810_map_buffer(buf, filp);
+       retcode = i810_map_buffer(buf, file_priv);
        if (retcode) {
                i810_freelist_put(dev, buf);
                DRM_ERROR("mapbuf failed, retcode %d\n", retcode);
                return retcode;
        }
-       buf->filp = filp;
+       buf->file_priv = file_priv;
        buf_priv = buf->dev_private;
        d->granted = 1;
        d->request_idx = buf->idx;
@@ -221,9 +220,9 @@ static int i810_dma_get_buffer(drm_device_t * dev, drm_i810_dma_t * d,
        return retcode;
 }
 
-static int i810_dma_cleanup(drm_device_t * dev)
+static int i810_dma_cleanup(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
 
        /* Make sure interrupts are disabled here because the uninstall ioctl
         * may not have been called from userspace and after dev_private
@@ -252,7 +251,7 @@ static int i810_dma_cleanup(drm_device_t * dev)
                dev->dev_private = NULL;
 
                for (i = 0; i < dma->buf_count; i++) {
-                       drm_buf_t *buf = dma->buflist[i];
+                       struct drm_buf *buf = dma->buflist[i];
                        drm_i810_buf_priv_t *buf_priv = buf->dev_private;
 
                        if (buf_priv->kernel_virtual && buf->total)
@@ -262,7 +261,7 @@ static int i810_dma_cleanup(drm_device_t * dev)
        return 0;
 }
 
-static int i810_wait_ring(drm_device_t * dev, int n)
+static int i810_wait_ring(struct drm_device * dev, int n)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        drm_i810_ring_buffer_t *ring = &(dev_priv->ring);
@@ -295,7 +294,7 @@ static int i810_wait_ring(drm_device_t * dev, int n)
        return iters;
 }
 
-static void i810_kernel_lost_context(drm_device_t * dev)
+static void i810_kernel_lost_context(struct drm_device * dev)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        drm_i810_ring_buffer_t *ring = &(dev_priv->ring);
@@ -307,9 +306,9 @@ static void i810_kernel_lost_context(drm_device_t * dev)
                ring->space += ring->Size;
 }
 
-static int i810_freelist_init(drm_device_t * dev, drm_i810_private_t * dev_priv)
+static int i810_freelist_init(struct drm_device * dev, drm_i810_private_t * dev_priv)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int my_idx = 24;
        u32 *hw_status = (u32 *) (dev_priv->hw_status_page + my_idx);
        int i;
@@ -320,7 +319,7 @@ static int i810_freelist_init(drm_device_t * dev, drm_i810_private_t * dev_priv)
        }
 
        for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[i];
+               struct drm_buf *buf = dma->buflist[i];
                drm_i810_buf_priv_t *buf_priv = buf->dev_private;
 
                buf_priv->in_use = hw_status++;
@@ -342,11 +341,11 @@ static int i810_freelist_init(drm_device_t * dev, drm_i810_private_t * dev_priv)
        return 0;
 }
 
-static int i810_dma_initialize(drm_device_t * dev,
+static int i810_dma_initialize(struct drm_device * dev,
                               drm_i810_private_t * dev_priv,
                               drm_i810_init_t * init)
 {
-       drm_map_list_t *r_list;
+       struct drm_map_list *r_list;
        memset(dev_priv, 0, sizeof(drm_i810_private_t));
 
        list_for_each_entry(r_list, &dev->maplist, head) {
@@ -399,7 +398,7 @@ static int i810_dma_initialize(drm_device_t * dev,
                i810_dma_cleanup(dev);
                DRM_ERROR("can not ioremap virtual address for"
                          " ring buffer\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        dev_priv->ring.virtual_start = dev_priv->ring.map.handle;
@@ -449,99 +448,29 @@ static int i810_dma_initialize(drm_device_t * dev,
        return 0;
 }
 
-/* i810 DRM version 1.1 used a smaller init structure with different
- * ordering of values than is currently used (drm >= 1.2). There is
- * no defined way to detect the XFree version to correct this problem,
- * however by checking using this procedure we can detect the correct
- * thing to do.
- *
- * #1 Read the Smaller init structure from user-space
- * #2 Verify the overlay_physical is a valid physical address, or NULL
- *    If it isn't then we have a v1.1 client. Fix up params.
- *    If it is, then we have a 1.2 client... get the rest of the data.
- */
-static int i810_dma_init_compat(drm_i810_init_t * init, unsigned long arg)
+static int i810_dma_init(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-
-       /* Get v1.1 init data */
-       if (copy_from_user(init, (drm_i810_pre12_init_t __user *) arg,
-                          sizeof(drm_i810_pre12_init_t))) {
-               return -EFAULT;
-       }
-
-       if ((!init->overlay_physical) || (init->overlay_physical > 4096)) {
-
-               /* This is a v1.2 client, just get the v1.2 init data */
-               DRM_INFO("Using POST v1.2 init.\n");
-               if (copy_from_user(init, (drm_i810_init_t __user *) arg,
-                                  sizeof(drm_i810_init_t))) {
-                       return -EFAULT;
-               }
-       } else {
-
-               /* This is a v1.1 client, fix the params */
-               DRM_INFO("Using PRE v1.2 init.\n");
-               init->pitch_bits = init->h;
-               init->pitch = init->w;
-               init->h = init->overlay_physical;
-               init->w = init->overlay_offset;
-               init->overlay_physical = 0;
-               init->overlay_offset = 0;
-       }
-
-       return 0;
-}
-
-static int i810_dma_init(struct inode *inode, struct file *filp,
-                 unsigned int cmd, unsigned long arg)
-{
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        drm_i810_private_t *dev_priv;
-       drm_i810_init_t init;
+       drm_i810_init_t *init = data;
        int retcode = 0;
 
-       /* Get only the init func */
-       if (copy_from_user
-           (&init, (void __user *)arg, sizeof(drm_i810_init_func_t)))
-               return -EFAULT;
-
-       switch (init.func) {
-       case I810_INIT_DMA:
-               /* This case is for backward compatibility. It
-                * handles XFree 4.1.0 and 4.2.0, and has to
-                * do some parameter checking as described below.
-                * It will someday go away.
-                */
-               retcode = i810_dma_init_compat(&init, arg);
-               if (retcode)
-                       return retcode;
-
-               dev_priv = drm_alloc(sizeof(drm_i810_private_t),
-                                    DRM_MEM_DRIVER);
-               if (dev_priv == NULL)
-                       return -ENOMEM;
-               retcode = i810_dma_initialize(dev, dev_priv, &init);
-               break;
-
-       default:
+       switch (init->func) {
        case I810_INIT_DMA_1_4:
                DRM_INFO("Using v1.4 init.\n");
-               if (copy_from_user(&init, (drm_i810_init_t __user *) arg,
-                                  sizeof(drm_i810_init_t))) {
-                       return -EFAULT;
-               }
                dev_priv = drm_alloc(sizeof(drm_i810_private_t),
                                     DRM_MEM_DRIVER);
                if (dev_priv == NULL)
                        return -ENOMEM;
-               retcode = i810_dma_initialize(dev, dev_priv, &init);
+               retcode = i810_dma_initialize(dev, dev_priv, init);
                break;
 
        case I810_CLEANUP_DMA:
                DRM_INFO("DMA Cleanup\n");
                retcode = i810_dma_cleanup(dev);
                break;
+       default:
+               return -EINVAL;
        }
 
        return retcode;
@@ -553,7 +482,7 @@ static int i810_dma_init(struct inode *inode, struct file *filp,
  * Use 'volatile' & local var tmp to force the emitted values to be
  * identical to the verified ones.
  */
-static void i810EmitContextVerified(drm_device_t * dev,
+static void i810EmitContextVerified(struct drm_device * dev,
                                    volatile unsigned int *code)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
@@ -586,7 +515,7 @@ static void i810EmitContextVerified(drm_device_t * dev,
        ADVANCE_LP_RING();
 }
 
-static void i810EmitTexVerified(drm_device_t * dev, volatile unsigned int *code)
+static void i810EmitTexVerified(struct drm_device * dev, volatile unsigned int *code)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        int i, j = 0;
@@ -619,7 +548,7 @@ static void i810EmitTexVerified(drm_device_t * dev, volatile unsigned int *code)
 
 /* Need to do some additional checking when setting the dest buffer.
  */
-static void i810EmitDestVerified(drm_device_t * dev,
+static void i810EmitDestVerified(struct drm_device * dev,
                                 volatile unsigned int *code)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
@@ -654,7 +583,7 @@ static void i810EmitDestVerified(drm_device_t * dev,
        ADVANCE_LP_RING();
 }
 
-static void i810EmitState(drm_device_t * dev)
+static void i810EmitState(struct drm_device * dev)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        drm_i810_sarea_t *sarea_priv = dev_priv->sarea_priv;
@@ -685,14 +614,14 @@ static void i810EmitState(drm_device_t * dev)
 
 /* need to verify
  */
-static void i810_dma_dispatch_clear(drm_device_t * dev, int flags,
+static void i810_dma_dispatch_clear(struct drm_device * dev, int flags,
                                    unsigned int clear_color,
                                    unsigned int clear_zval)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        drm_i810_sarea_t *sarea_priv = dev_priv->sarea_priv;
        int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        int pitch = dev_priv->pitch;
        int cpp = 2;
        int i;
@@ -760,12 +689,12 @@ static void i810_dma_dispatch_clear(drm_device_t * dev, int flags,
        }
 }
 
-static void i810_dma_dispatch_swap(drm_device_t * dev)
+static void i810_dma_dispatch_swap(struct drm_device * dev)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        drm_i810_sarea_t *sarea_priv = dev_priv->sarea_priv;
        int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        int pitch = dev_priv->pitch;
        int cpp = 2;
        int i;
@@ -806,13 +735,13 @@ static void i810_dma_dispatch_swap(drm_device_t * dev)
        }
 }
 
-static void i810_dma_dispatch_vertex(drm_device_t * dev,
-                                    drm_buf_t * buf, int discard, int used)
+static void i810_dma_dispatch_vertex(struct drm_device * dev,
+                                    struct drm_buf * buf, int discard, int used)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        drm_i810_buf_priv_t *buf_priv = buf->dev_private;
        drm_i810_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_clip_rect_t *box = sarea_priv->boxes;
+       struct drm_clip_rect *box = sarea_priv->boxes;
        int nbox = sarea_priv->nbox;
        unsigned long address = (unsigned long)buf->bus_address;
        unsigned long start = address - dev->agp->base;
@@ -886,7 +815,7 @@ static void i810_dma_dispatch_vertex(drm_device_t * dev,
        }
 }
 
-static void i810_dma_dispatch_flip(drm_device_t * dev)
+static void i810_dma_dispatch_flip(struct drm_device * dev)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        int pitch = dev_priv->pitch;
@@ -933,7 +862,7 @@ static void i810_dma_dispatch_flip(drm_device_t * dev)
 
 }
 
-static void i810_dma_quiescent(drm_device_t * dev)
+static void i810_dma_quiescent(struct drm_device * dev)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
        RING_LOCALS;
@@ -952,10 +881,10 @@ static void i810_dma_quiescent(drm_device_t * dev)
        i810_wait_ring(dev, dev_priv->ring.Size - 8);
 }
 
-static int i810_flush_queue(drm_device_t * dev)
+static int i810_flush_queue(struct drm_device * dev)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int i, ret = 0;
        RING_LOCALS;
 
@@ -971,7 +900,7 @@ static int i810_flush_queue(drm_device_t * dev)
        i810_wait_ring(dev, dev_priv->ring.Size - 8);
 
        for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[i];
+               struct drm_buf *buf = dma->buflist[i];
                drm_i810_buf_priv_t *buf_priv = buf->dev_private;
 
                int used = cmpxchg(buf_priv->in_use, I810_BUF_HARDWARE,
@@ -987,9 +916,10 @@ static int i810_flush_queue(drm_device_t * dev)
 }
 
 /* Must be called with the lock held */
-static void i810_reclaim_buffers(drm_device_t *dev, struct file *filp)
+static void i810_reclaim_buffers(struct drm_device *dev,
+                                struct drm_file *file_priv)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int i;
 
        if (!dma)
@@ -1002,10 +932,10 @@ static void i810_reclaim_buffers(drm_device_t *dev, struct file *filp)
        i810_flush_queue(dev);
 
        for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[i];
+               struct drm_buf *buf = dma->buflist[i];
                drm_i810_buf_priv_t *buf_priv = buf->dev_private;
 
-               if (buf->filp == filp && buf_priv) {
+               if (buf->file_priv == file_priv && buf_priv) {
                        int used = cmpxchg(buf_priv->in_use, I810_BUF_CLIENT,
                                           I810_BUF_FREE);
 
@@ -1017,47 +947,38 @@ static void i810_reclaim_buffers(drm_device_t *dev, struct file *filp)
        }
 }
 
-static int i810_flush_ioctl(struct inode *inode, struct file *filp,
-                           unsigned int cmd, unsigned long arg)
+static int i810_flush_ioctl(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        i810_flush_queue(dev);
        return 0;
 }
 
-static int i810_dma_vertex(struct inode *inode, struct file *filp,
-                          unsigned int cmd, unsigned long arg)
+static int i810_dma_vertex(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
        u32 *hw_status = dev_priv->hw_status_page;
        drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
            dev_priv->sarea_priv;
-       drm_i810_vertex_t vertex;
+       drm_i810_vertex_t *vertex = data;
 
-       if (copy_from_user
-           (&vertex, (drm_i810_vertex_t __user *) arg, sizeof(vertex)))
-               return -EFAULT;
-
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        DRM_DEBUG("i810 dma vertex, idx %d used %d discard %d\n",
-                 vertex.idx, vertex.used, vertex.discard);
+                 vertex->idx, vertex->used, vertex->discard);
 
-       if (vertex.idx < 0 || vertex.idx > dma->buf_count)
+       if (vertex->idx < 0 || vertex->idx > dma->buf_count)
                return -EINVAL;
 
        i810_dma_dispatch_vertex(dev,
-                                dma->buflist[vertex.idx],
-                                vertex.discard, vertex.used);
+                                dma->buflist[vertex->idx],
+                                vertex->discard, vertex->used);
 
-       atomic_add(vertex.used, &dev->counts[_DRM_STAT_SECONDARY]);
+       atomic_add(vertex->used, &dev->counts[_DRM_STAT_SECONDARY]);
        atomic_inc(&dev->counts[_DRM_STAT_DMA]);
        sarea_priv->last_enqueue = dev_priv->counter - 1;
        sarea_priv->last_dispatch = (int)hw_status[5];
@@ -1065,48 +986,37 @@ static int i810_dma_vertex(struct inode *inode, struct file *filp,
        return 0;
 }
 
-static int i810_clear_bufs(struct inode *inode, struct file *filp,
-                          unsigned int cmd, unsigned long arg)
+static int i810_clear_bufs(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_i810_clear_t clear;
-
-       if (copy_from_user
-           (&clear, (drm_i810_clear_t __user *) arg, sizeof(clear)))
-               return -EFAULT;
+       drm_i810_clear_t *clear = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        /* GH: Someone's doing nasty things... */
        if (!dev->dev_private) {
                return -EINVAL;
        }
 
-       i810_dma_dispatch_clear(dev, clear.flags,
-                               clear.clear_color, clear.clear_depth);
+       i810_dma_dispatch_clear(dev, clear->flags,
+                               clear->clear_color, clear->clear_depth);
        return 0;
 }
 
-static int i810_swap_bufs(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg)
+static int i810_swap_bufs(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-
        DRM_DEBUG("i810_swap_bufs\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        i810_dma_dispatch_swap(dev);
        return 0;
 }
 
-static int i810_getage(struct inode *inode, struct file *filp, unsigned int cmd,
-                      unsigned long arg)
+static int i810_getage(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
        u32 *hw_status = dev_priv->hw_status_page;
        drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
@@ -1116,52 +1026,45 @@ static int i810_getage(struct inode *inode, struct file *filp, unsigned int cmd,
        return 0;
 }
 
-static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
-                      unsigned long arg)
+static int i810_getbuf(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        int retcode = 0;
-       drm_i810_dma_t d;
+       drm_i810_dma_t *d = data;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
        u32 *hw_status = dev_priv->hw_status_page;
        drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
            dev_priv->sarea_priv;
 
-       if (copy_from_user(&d, (drm_i810_dma_t __user *) arg, sizeof(d)))
-               return -EFAULT;
-
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       d.granted = 0;
+       d->granted = 0;
 
-       retcode = i810_dma_get_buffer(dev, &d, filp);
+       retcode = i810_dma_get_buffer(dev, d, file_priv);
 
        DRM_DEBUG("i810_dma: %d returning %d, granted = %d\n",
-                 current->pid, retcode, d.granted);
+                 current->pid, retcode, d->granted);
 
-       if (copy_to_user((drm_dma_t __user *) arg, &d, sizeof(d)))
-               return -EFAULT;
        sarea_priv->last_dispatch = (int)hw_status[5];
 
        return retcode;
 }
 
-static int i810_copybuf(struct inode *inode,
-                       struct file *filp, unsigned int cmd, unsigned long arg)
+static int i810_copybuf(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv)
 {
        /* Never copy - 2.4.x doesn't need it */
        return 0;
 }
 
-static int i810_docopy(struct inode *inode, struct file *filp, unsigned int cmd,
-                      unsigned long arg)
+static int i810_docopy(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv)
 {
        /* Never copy - 2.4.x doesn't need it */
        return 0;
 }
 
-static void i810_dma_dispatch_mc(drm_device_t * dev, drm_buf_t * buf, int used,
+static void i810_dma_dispatch_mc(struct drm_device * dev, struct drm_buf * buf, int used,
                                 unsigned int last_render)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
@@ -1221,30 +1124,25 @@ static void i810_dma_dispatch_mc(drm_device_t * dev, drm_buf_t * buf, int used,
        ADVANCE_LP_RING();
 }
 
-static int i810_dma_mc(struct inode *inode, struct file *filp,
-                      unsigned int cmd, unsigned long arg)
+static int i810_dma_mc(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
        u32 *hw_status = dev_priv->hw_status_page;
        drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
            dev_priv->sarea_priv;
-       drm_i810_mc_t mc;
+       drm_i810_mc_t *mc = data;
 
-       if (copy_from_user(&mc, (drm_i810_mc_t __user *) arg, sizeof(mc)))
-               return -EFAULT;
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       if (mc.idx >= dma->buf_count || mc.idx < 0)
+       if (mc->idx >= dma->buf_count || mc->idx < 0)
                return -EINVAL;
 
-       i810_dma_dispatch_mc(dev, dma->buflist[mc.idx], mc.used,
-                            mc.last_render);
+       i810_dma_dispatch_mc(dev, dma->buflist[mc->idx], mc->used,
+                            mc->last_render);
 
-       atomic_add(mc.used, &dev->counts[_DRM_STAT_SECONDARY]);
+       atomic_add(mc->used, &dev->counts[_DRM_STAT_SECONDARY]);
        atomic_inc(&dev->counts[_DRM_STAT_DMA]);
        sarea_priv->last_enqueue = dev_priv->counter - 1;
        sarea_priv->last_dispatch = (int)hw_status[5];
@@ -1252,51 +1150,41 @@ static int i810_dma_mc(struct inode *inode, struct file *filp,
        return 0;
 }
 
-static int i810_rstatus(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg)
+static int i810_rstatus(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
 
        return (int)(((u32 *) (dev_priv->hw_status_page))[4]);
 }
 
-static int i810_ov0_info(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg)
+static int i810_ov0_info(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
-       drm_i810_overlay_t data;
+       drm_i810_overlay_t *ov = data;
+
+       ov->offset = dev_priv->overlay_offset;
+       ov->physical = dev_priv->overlay_physical;
 
-       data.offset = dev_priv->overlay_offset;
-       data.physical = dev_priv->overlay_physical;
-       if (copy_to_user
-           ((drm_i810_overlay_t __user *) arg, &data, sizeof(data)))
-               return -EFAULT;
        return 0;
 }
 
-static int i810_fstatus(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg)
+static int i810_fstatus(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
        return I810_READ(0x30008);
 }
 
-static int i810_ov0_flip(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg)
+static int i810_ov0_flip(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
        //Tell the overlay to update
        I810_WRITE(0x30000, dev_priv->overlay_physical | 0x80000000);
 
@@ -1305,7 +1193,7 @@ static int i810_ov0_flip(struct inode *inode, struct file *filp,
 
 /* Not sure why this isn't set all the time:
  */
-static void i810_do_init_pageflip(drm_device_t * dev)
+static void i810_do_init_pageflip(struct drm_device * dev)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
 
@@ -1315,7 +1203,7 @@ static void i810_do_init_pageflip(drm_device_t * dev)
        dev_priv->sarea_priv->pf_current_page = dev_priv->current_page;
 }
 
-static int i810_do_cleanup_pageflip(drm_device_t * dev)
+static int i810_do_cleanup_pageflip(struct drm_device * dev)
 {
        drm_i810_private_t *dev_priv = dev->dev_private;
 
@@ -1327,16 +1215,14 @@ static int i810_do_cleanup_pageflip(drm_device_t * dev)
        return 0;
 }
 
-static int i810_flip_bufs(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg)
+static int i810_flip_bufs(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv)
 {
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->head->dev;
        drm_i810_private_t *dev_priv = dev->dev_private;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv->page_flipping)
                i810_do_init_pageflip(dev);
@@ -1345,7 +1231,7 @@ static int i810_flip_bufs(struct inode *inode, struct file *filp,
        return 0;
 }
 
-int i810_driver_load(drm_device_t *dev, unsigned long flags)
+int i810_driver_load(struct drm_device *dev, unsigned long flags)
 {
        /* i810 has 4 more counters */
        dev->counters += 4;
@@ -1357,12 +1243,12 @@ int i810_driver_load(drm_device_t *dev, unsigned long flags)
        return 0;
 }
 
-void i810_driver_lastclose(drm_device_t * dev)
+void i810_driver_lastclose(struct drm_device * dev)
 {
        i810_dma_cleanup(dev);
 }
 
-void i810_driver_preclose(drm_device_t * dev, DRMFILE filp)
+void i810_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
 {
        if (dev->dev_private) {
                drm_i810_private_t *dev_priv = dev->dev_private;
@@ -1372,33 +1258,34 @@ void i810_driver_preclose(drm_device_t * dev, DRMFILE filp)
        }
 }
 
-void i810_driver_reclaim_buffers_locked(drm_device_t * dev, struct file *filp)
+void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
+                                       struct drm_file *file_priv)
 {
-       i810_reclaim_buffers(dev, filp);
+       i810_reclaim_buffers(dev, file_priv);
 }
 
-int i810_driver_dma_quiescent(drm_device_t * dev)
+int i810_driver_dma_quiescent(struct drm_device * dev)
 {
        i810_dma_quiescent(dev);
        return 0;
 }
 
-drm_ioctl_desc_t i810_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_I810_INIT)] = {i810_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_I810_VERTEX)] = {i810_dma_vertex, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_CLEAR)] = {i810_clear_bufs, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_FLUSH)] = {i810_flush_ioctl, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_GETAGE)] = {i810_getage, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_GETBUF)] = {i810_getbuf, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_SWAP)] = {i810_swap_bufs, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_COPY)] = {i810_copybuf, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_DOCOPY)] = {i810_docopy, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_OV0INFO)] = {i810_ov0_info, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_FSTATUS)] = {i810_fstatus, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_OV0FLIP)] = {i810_ov0_flip, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_MC)] = {i810_dma_mc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_I810_RSTATUS)] = {i810_rstatus, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I810_FLIP)] = {i810_flip_bufs, DRM_AUTH}
+struct drm_ioctl_desc i810_ioctls[] = {
+  DRM_IOCTL_DEF(DRM_I810_INIT, i810_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_I810_VERTEX, i810_dma_vertex, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_CLEAR, i810_clear_bufs, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_FLUSH, i810_flush_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_GETAGE, i810_getage, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_GETBUF, i810_getbuf, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_SWAP, i810_swap_bufs, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_COPY, i810_copybuf, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_DOCOPY, i810_docopy, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_OV0INFO, i810_ov0_info, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_FSTATUS, i810_fstatus, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_OV0FLIP, i810_ov0_flip, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_MC, i810_dma_mc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_I810_RSTATUS, i810_rstatus, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I810_FLIP, i810_flip_bufs, DRM_AUTH)
 };
 
 int i810_max_ioctl = DRM_ARRAY_SIZE(i810_ioctls);
@@ -1414,7 +1301,7 @@ int i810_max_ioctl = DRM_ARRAY_SIZE(i810_ioctls);
  * \returns
  * A value of 1 is always retured to indictate every i810 is AGP.
  */
-int i810_driver_device_is_agp(drm_device_t * dev)
+int i810_driver_device_is_agp(struct drm_device * dev)
 {
        return 1;
 }
index beec4a2..eff61b4 100644 (file)
@@ -124,29 +124,6 @@ typedef struct _drm_i810_init {
        unsigned int pitch_bits;
 } drm_i810_init_t;
 
-/* This is the init structure prior to v1.2 */
-typedef struct _drm_i810_pre12_init {
-       drm_i810_init_func_t func;
-#if CONFIG_XFREE86_VERSION < XFREE86_VERSION(4,1,0,0)
-       int ring_map_idx;
-       int buffer_map_idx;
-#else
-       unsigned int mmio_offset;
-       unsigned int buffers_offset;
-#endif
-       int sarea_priv_offset;
-       unsigned int ring_start;
-       unsigned int ring_end;
-       unsigned int ring_size;
-       unsigned int front_offset;
-       unsigned int back_offset;
-       unsigned int depth_offset;
-       unsigned int w;
-       unsigned int h;
-       unsigned int pitch;
-       unsigned int pitch_bits;
-} drm_i810_pre12_init_t;
-
 /* Warning: If you change the SAREA structure you must change the Xserver
  * structure as well */
 
@@ -163,7 +140,7 @@ typedef struct _drm_i810_sarea {
        unsigned int dirty;
 
        unsigned int nbox;
-       drm_clip_rect_t boxes[I810_NR_SAREA_CLIPRECTS];
+       struct drm_clip_rect boxes[I810_NR_SAREA_CLIPRECTS];
 
        /* Maintain an LRU of contiguous regions of texture space.  If
         * you think you own a region of texture memory, and it has an
index 69d7949..c525e16 100644 (file)
@@ -77,8 +77,8 @@ typedef struct _drm_i810_ring_buffer {
 } drm_i810_ring_buffer_t;
 
 typedef struct drm_i810_private {
-       drm_map_t *sarea_map;
-       drm_map_t *mmio_map;
+       struct drm_map *sarea_map;
+       struct drm_map *mmio_map;
 
        drm_i810_sarea_t *sarea_priv;
        drm_i810_ring_buffer_t ring;
@@ -88,7 +88,7 @@ typedef struct drm_i810_private {
 
        dma_addr_t dma_status_page;
 
-       drm_buf_t *mmap_buffer;
+       struct drm_buf *mmap_buffer;
 
        u32 front_di1, back_di1, zi1;
 
@@ -115,17 +115,18 @@ typedef struct drm_i810_private {
 } drm_i810_private_t;
 
                                /* i810_dma.c */
-extern int i810_driver_dma_quiescent(drm_device_t * dev);
-extern void i810_driver_reclaim_buffers_locked(drm_device_t * dev,
-                                              struct file *filp);
+extern int i810_driver_dma_quiescent(struct drm_device * dev);
+extern void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
+                                              struct drm_file *file_priv);
 extern int i810_driver_load(struct drm_device *, unsigned long flags);
-extern void i810_driver_lastclose(drm_device_t * dev);
-extern void i810_driver_preclose(drm_device_t * dev, DRMFILE filp);
-extern void i810_driver_reclaim_buffers_locked(drm_device_t * dev,
-                                              struct file *filp);
-extern int i810_driver_device_is_agp(drm_device_t * dev);
-
-extern drm_ioctl_desc_t i810_ioctls[];
+extern void i810_driver_lastclose(struct drm_device * dev);
+extern void i810_driver_preclose(struct drm_device * dev,
+                                struct drm_file *file_priv);
+extern void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
+                                              struct drm_file *file_priv);
+extern int i810_driver_device_is_agp(struct drm_device * dev);
+
+extern struct drm_ioctl_desc i810_ioctls[];
 extern int i810_max_ioctl;
 
 #define I810_BASE(reg)         ((unsigned long) \
index 8589f46..bf500cc 100644 (file)
 #include "i915_drm.h"
 #include "i915_drv.h"
 
-drm_ttm_backend_t *i915_create_ttm_backend_entry(drm_device_t * dev)
+struct drm_ttm_backend *i915_create_ttm_backend_entry(struct drm_device * dev)
 {
        return drm_agp_init_ttm(dev);
 }
 
-int i915_fence_types(drm_buffer_object_t *bo, uint32_t * class, uint32_t * type)
+int i915_fence_types(struct drm_buffer_object *bo, uint32_t * type)
 {
-       *class = 0;
        if (bo->mem.flags & (DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE))
                *type = 3;
        else
@@ -48,7 +47,7 @@ int i915_fence_types(drm_buffer_object_t *bo, uint32_t * class, uint32_t * type)
        return 0;
 }
 
-int i915_invalidate_caches(drm_device_t * dev, uint32_t flags)
+int i915_invalidate_caches(struct drm_device * dev, uint64_t flags)
 {
        /*
         * FIXME: Only emit once per batchbuffer submission.
@@ -64,8 +63,8 @@ int i915_invalidate_caches(drm_device_t * dev, uint32_t flags)
        return i915_emit_mi_flush(dev, flush_cmd);
 }
 
-int i915_init_mem_type(drm_device_t * dev, uint32_t type,
-                      drm_mem_type_manager_t * man)
+int i915_init_mem_type(struct drm_device * dev, uint32_t type,
+                      struct drm_mem_type_manager * man)
 {
        switch (type) {
        case DRM_BO_MEM_LOCAL:
@@ -106,7 +105,7 @@ int i915_init_mem_type(drm_device_t * dev, uint32_t type,
        return 0;
 }
 
-uint32_t i915_evict_mask(drm_buffer_object_t *bo)
+uint32_t i915_evict_mask(struct drm_buffer_object *bo)
 {
        switch (bo->mem.mem_type) {
        case DRM_BO_MEM_LOCAL:
@@ -117,7 +116,7 @@ uint32_t i915_evict_mask(drm_buffer_object_t *bo)
        }
 }
 
-static void i915_emit_copy_blit(drm_device_t * dev,
+static void i915_emit_copy_blit(struct drm_device * dev,
                                uint32_t src_offset,
                                uint32_t dst_offset,
                                uint32_t pages, int direction)
@@ -151,10 +150,10 @@ static void i915_emit_copy_blit(drm_device_t * dev,
        return;
 }
 
-static int i915_move_blit(drm_buffer_object_t * bo,
-                         int evict, int no_wait, drm_bo_mem_reg_t * new_mem)
+static int i915_move_blit(struct drm_buffer_object * bo,
+                         int evict, int no_wait, struct drm_bo_mem_reg * new_mem)
 {
-       drm_bo_mem_reg_t *old_mem = &bo->mem;
+       struct drm_bo_mem_reg *old_mem = &bo->mem;
        int dir = 0;
 
        if ((old_mem->mem_type == new_mem->mem_type) &&
@@ -181,11 +180,11 @@ static int i915_move_blit(drm_buffer_object_t * bo,
  * then blit and subsequently move out again.
  */
 
-static int i915_move_flip(drm_buffer_object_t * bo,
-                         int evict, int no_wait, drm_bo_mem_reg_t * new_mem)
+static int i915_move_flip(struct drm_buffer_object * bo,
+                         int evict, int no_wait, struct drm_bo_mem_reg * new_mem)
 {
-       drm_device_t *dev = bo->dev;
-       drm_bo_mem_reg_t tmp_mem;
+       struct drm_device *dev = bo->dev;
+       struct drm_bo_mem_reg tmp_mem;
        int ret;
 
        tmp_mem = *new_mem;
@@ -217,10 +216,10 @@ out_cleanup:
        return ret;
 }
 
-int i915_move(drm_buffer_object_t * bo,
-             int evict, int no_wait, drm_bo_mem_reg_t * new_mem)
+int i915_move(struct drm_buffer_object * bo,
+             int evict, int no_wait, struct drm_bo_mem_reg * new_mem)
 {
-       drm_bo_mem_reg_t *old_mem = &bo->mem;
+       struct drm_bo_mem_reg *old_mem = &bo->mem;
 
        if (old_mem->mem_type == DRM_BO_MEM_LOCAL) {
                return drm_bo_move_memcpy(bo, evict, no_wait, new_mem);
index 4943706..e337e1d 100644 (file)
@@ -39,7 +39,7 @@ static struct pci_device_id pciidlist[] = {
 };
 
 #ifdef I915_HAVE_FENCE
-static drm_fence_driver_t i915_fence_driver = {
+static struct drm_fence_driver i915_fence_driver = {
        .num_classes = 1,
        .wrap_diff = (1U << (BREADCRUMB_BITS - 1)),
        .flush_diff = (1U << (BREADCRUMB_BITS - 2)),
@@ -55,7 +55,7 @@ static drm_fence_driver_t i915_fence_driver = {
 static uint32_t i915_mem_prios[] = {DRM_BO_MEM_PRIV0, DRM_BO_MEM_TT, DRM_BO_MEM_LOCAL};
 static uint32_t i915_busy_prios[] = {DRM_BO_MEM_TT, DRM_BO_MEM_PRIV0, DRM_BO_MEM_LOCAL};
 
-static drm_bo_driver_t i915_bo_driver = {
+static struct drm_bo_driver i915_bo_driver = {
        .mem_type_prio = i915_mem_prios,
        .mem_busy_prio = i915_busy_prios,
        .num_mem_type_prio = sizeof(i915_mem_prios)/sizeof(uint32_t),
index 0087348..6f0de2c 100644 (file)
  * Implements an intel sync flush operation.
  */
 
-static void i915_perform_flush(drm_device_t * dev)
+static void i915_perform_flush(struct drm_device * dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-       drm_fence_manager_t *fm = &dev->fm;
-       drm_fence_class_manager_t *fc = &fm->class[0];
-       drm_fence_driver_t *driver = dev->driver->fence_driver;
+       struct drm_fence_manager *fm = &dev->fm;
+       struct drm_fence_class_manager *fc = &fm->class[0];
+       struct drm_fence_driver *driver = dev->driver->fence_driver;
        uint32_t flush_flags = 0;
        uint32_t flush_sequence = 0;
        uint32_t i_status;
@@ -109,9 +109,9 @@ static void i915_perform_flush(drm_device_t * dev)
 
 }
 
-void i915_poke_flush(drm_device_t * dev, uint32_t class)
+void i915_poke_flush(struct drm_device * dev, uint32_t class)
 {
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
        unsigned long flags;
 
        write_lock_irqsave(&fm->lock, flags);
@@ -119,7 +119,7 @@ void i915_poke_flush(drm_device_t * dev, uint32_t class)
        write_unlock_irqrestore(&fm->lock, flags);
 }
 
-int i915_fence_emit_sequence(drm_device_t * dev, uint32_t class, uint32_t flags,
+int i915_fence_emit_sequence(struct drm_device * dev, uint32_t class, uint32_t flags,
                             uint32_t * sequence, uint32_t * native_type)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -135,16 +135,16 @@ int i915_fence_emit_sequence(drm_device_t * dev, uint32_t class, uint32_t flags,
        return 0;
 }
 
-void i915_fence_handler(drm_device_t * dev)
+void i915_fence_handler(struct drm_device * dev)
 {
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
 
        write_lock(&fm->lock);
        i915_perform_flush(dev);
        write_unlock(&fm->lock);
 }
 
-int i915_fence_has_irq(drm_device_t *dev, uint32_t class, uint32_t flags)
+int i915_fence_has_irq(struct drm_device *dev, uint32_t class, uint32_t flags)
 {
        /*
         * We have an irq that tells us when we have a new breadcrumb.
index ef6f1e4..1eb6d9e 100644 (file)
@@ -36,7 +36,7 @@
 
 #include "drm_pciids.h"
 
-static int mga_driver_device_is_agp(drm_device_t * dev);
+static int mga_driver_device_is_agp(struct drm_device * dev);
 
 static struct pci_device_id pciidlist[] = {
        mga_PCI_IDS
@@ -127,7 +127,7 @@ MODULE_LICENSE("GPL and additional rights");
  * \returns
  * If the device is a PCI G450, zero is returned.  Otherwise 2 is returned.
  */
-static int mga_driver_device_is_agp(drm_device_t * dev)
+static int mga_driver_device_is_agp(struct drm_device * dev)
 {
        const struct pci_dev * const pdev = dev->pdev;
 
index ac030d8..6c73b0d 100644 (file)
@@ -32,7 +32,7 @@ static struct pci_device_id pciidlist[] = {
        nouveau_PCI_IDS
 };
 
-extern drm_ioctl_desc_t nouveau_ioctls[];
+extern struct drm_ioctl_desc nouveau_ioctls[];
 extern int nouveau_max_ioctl;
 
 static int probe(struct pci_dev *pdev, const struct pci_device_id *ent);
diff --git a/linux-core/nouveau_sgdma.c b/linux-core/nouveau_sgdma.c
new file mode 100644 (file)
index 0000000..0ddac95
--- /dev/null
@@ -0,0 +1,318 @@
+#include "drmP.h"
+#include "nouveau_drv.h"
+
+#define NV_CTXDMA_PAGE_SHIFT 12
+#define NV_CTXDMA_PAGE_SIZE  (1 << NV_CTXDMA_PAGE_SHIFT)
+#define NV_CTXDMA_PAGE_MASK  (NV_CTXDMA_PAGE_SIZE - 1)
+
+struct nouveau_sgdma_be {
+       struct drm_ttm_backend backend;
+       struct drm_device *dev;
+
+       int         pages;
+       int         pages_populated;
+       dma_addr_t *pagelist;
+       int         is_bound;
+
+       unsigned int pte_start;
+};
+
+static int
+nouveau_sgdma_needs_ub_cache_adjust(struct drm_ttm_backend *be)
+{
+       return ((be->flags & DRM_BE_FLAG_BOUND_CACHED) ? 0 : 1);
+}
+
+static int
+nouveau_sgdma_populate(struct drm_ttm_backend *be, unsigned long num_pages,
+                      struct page **pages)
+{
+       struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
+       int p, d, o;
+
+       DRM_DEBUG("num_pages = %ld\n", num_pages);
+
+       if (nvbe->pagelist)
+               return -EINVAL;
+       nvbe->pages    = (num_pages << PAGE_SHIFT) >> NV_CTXDMA_PAGE_SHIFT;
+       nvbe->pagelist = drm_alloc(nvbe->pages*sizeof(dma_addr_t),
+                                  DRM_MEM_PAGES);
+
+       nvbe->pages_populated = d = 0;
+       for (p = 0; p < num_pages; p++) {
+               for (o = 0; o < PAGE_SIZE; o += NV_CTXDMA_PAGE_SIZE) {
+                       nvbe->pagelist[d] = pci_map_page(nvbe->dev->pdev,
+                                                        pages[p], o,
+                                                        NV_CTXDMA_PAGE_SIZE,
+                                                        PCI_DMA_BIDIRECTIONAL);
+                       if (pci_dma_mapping_error(nvbe->pagelist[d])) {
+                               be->func->clear(be);
+                               DRM_ERROR("pci_map_page failed\n");
+                               return -EINVAL;
+                       }
+                       nvbe->pages_populated = ++d;
+               }
+       }
+
+       return 0;
+}
+
+static void
+nouveau_sgdma_clear(struct drm_ttm_backend *be)
+{
+       struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
+       int d;
+
+       DRM_DEBUG("\n");
+
+       if (nvbe && nvbe->pagelist) {
+               if (nvbe->is_bound)
+                       be->func->unbind(be);
+
+               for (d = 0; d < nvbe->pages_populated; d--) {
+                       pci_unmap_page(nvbe->dev->pdev, nvbe->pagelist[d],
+                                      NV_CTXDMA_PAGE_SIZE,
+                                      PCI_DMA_BIDIRECTIONAL);
+               }
+               drm_free(nvbe->pagelist, nvbe->pages*sizeof(dma_addr_t),
+                        DRM_MEM_PAGES);
+       }
+}
+
+static int
+nouveau_sgdma_bind(struct drm_ttm_backend *be, unsigned long pg_start,
+                  int cached)
+{
+       struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
+       struct drm_nouveau_private *dev_priv = nvbe->dev->dev_private;
+       struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma;
+       uint64_t offset = (pg_start << PAGE_SHIFT);
+       uint32_t i;
+
+       DRM_DEBUG("pg=0x%lx (0x%llx), cached=%d\n", pg_start, offset, cached);
+
+       if (offset & NV_CTXDMA_PAGE_MASK)
+               return -EINVAL;
+       nvbe->pte_start = (offset >> NV_CTXDMA_PAGE_SHIFT);
+       if (dev_priv->card_type < NV_50)
+               nvbe->pte_start += 2; /* skip ctxdma header */
+
+       for (i = nvbe->pte_start; i < nvbe->pte_start + nvbe->pages; i++) {
+               uint64_t pteval = nvbe->pagelist[i - nvbe->pte_start];
+
+               if (pteval & NV_CTXDMA_PAGE_MASK) {
+                       DRM_ERROR("Bad pteval 0x%llx\n", pteval);
+                       return -EINVAL;
+               }
+
+               if (dev_priv->card_type < NV_50) {
+                       INSTANCE_WR(gpuobj, i, pteval | 3);
+               } else {
+                       INSTANCE_WR(gpuobj, (i<<1)+0, pteval | 0x21);
+                       INSTANCE_WR(gpuobj, (i<<1)+1, 0x00000000);
+               }
+       }
+
+       nvbe->is_bound  = 1;
+       return 0;
+}
+
+static int
+nouveau_sgdma_unbind(struct drm_ttm_backend *be)
+{
+       struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
+       struct drm_nouveau_private *dev_priv = nvbe->dev->dev_private;
+
+       DRM_DEBUG("\n");
+
+       if (nvbe->is_bound) {
+               struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma;
+               unsigned int pte;
+               
+               pte = nvbe->pte_start;
+               while (pte < (nvbe->pte_start + nvbe->pages)) {
+                       uint64_t pteval = dev_priv->gart_info.sg_dummy_bus;
+
+                       if (dev_priv->card_type < NV_50) {
+                               INSTANCE_WR(gpuobj, pte, pteval | 3);
+                       } else {
+                               INSTANCE_WR(gpuobj, (pte<<1)+0, 0x00000010);
+                               INSTANCE_WR(gpuobj, (pte<<1)+1, 0x00000004);
+                       }
+
+                       pte++;
+               }
+
+               nvbe->is_bound = 0;
+       }
+
+       return 0;
+}
+
+static void
+nouveau_sgdma_destroy(struct drm_ttm_backend *be)
+{
+       DRM_DEBUG("\n");
+       if (be) {
+               struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
+               if (nvbe) {
+                       if (nvbe->pagelist)
+                               be->func->clear(be);
+                       drm_ctl_free(nvbe, sizeof(*nvbe), DRM_MEM_TTM);
+               }
+       }
+}
+
+static struct drm_ttm_backend_func nouveau_sgdma_backend = {
+       .needs_ub_cache_adjust  = nouveau_sgdma_needs_ub_cache_adjust,
+       .populate               = nouveau_sgdma_populate,
+       .clear                  = nouveau_sgdma_clear,
+       .bind                   = nouveau_sgdma_bind,
+       .unbind                 = nouveau_sgdma_unbind,
+       .destroy                = nouveau_sgdma_destroy
+};
+
+struct drm_ttm_backend *
+nouveau_sgdma_init_ttm(struct drm_device *dev)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_sgdma_be *nvbe;
+
+       if (!dev_priv->gart_info.sg_ctxdma)
+               return NULL;
+
+       nvbe = drm_ctl_calloc(1, sizeof(*nvbe), DRM_MEM_TTM);
+       if (!nvbe)
+               return NULL;
+
+       nvbe->dev = dev;
+
+       nvbe->backend.func      = &nouveau_sgdma_backend;
+       nvbe->backend.mem_type  = DRM_BO_MEM_TT;
+
+       return &nvbe->backend;
+}
+
+int
+nouveau_sgdma_init(struct drm_device *dev)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_gpuobj *gpuobj = NULL;
+       uint32_t aper_size, obj_size;
+       int i, ret;
+
+       if (dev_priv->card_type < NV_50) {
+               aper_size = (64 * 1024 * 1024);
+               obj_size  = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4;
+               obj_size += 8; /* ctxdma header */
+       } else {
+               /* 1 entire VM page table */
+               aper_size = (512 * 1024 * 1024);
+               obj_size  = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 8;
+       }
+
+       if ((ret = nouveau_gpuobj_new(dev, -1, obj_size, 16,
+                                     NVOBJ_FLAG_ALLOW_NO_REFS |
+                                     NVOBJ_FLAG_ZERO_ALLOC |
+                                     NVOBJ_FLAG_ZERO_FREE, &gpuobj)))  {
+               DRM_ERROR("Error creating sgdma object: %d\n", ret);
+               return ret;
+       }
+
+       if (dev_priv->card_type < NV_50) {
+               dev_priv->gart_info.sg_dummy_page =
+                       alloc_page(GFP_KERNEL|__GFP_DMA32);
+               SetPageLocked(dev_priv->gart_info.sg_dummy_page);
+               dev_priv->gart_info.sg_dummy_bus =
+                       pci_map_page(dev->pdev,
+                                    dev_priv->gart_info.sg_dummy_page, 0,
+                                    PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
+
+               /* Maybe use NV_DMA_TARGET_AGP for PCIE? NVIDIA do this, and
+                * confirmed to work on c51.  Perhaps means NV_DMA_TARGET_PCIE
+                * on those cards? */
+               INSTANCE_WR(gpuobj, 0, NV_CLASS_DMA_IN_MEMORY |
+                                      (1 << 12) /* PT present */ |
+                                      (0 << 13) /* PT *not* linear */ |
+                                      (NV_DMA_ACCESS_RW  << 14) |
+                                      (NV_DMA_TARGET_PCI << 16));
+               INSTANCE_WR(gpuobj, 1, aper_size - 1);
+               for (i=2; i<2+(aper_size>>12); i++) {
+                       INSTANCE_WR(gpuobj, i,
+                                   dev_priv->gart_info.sg_dummy_bus | 3);
+               }
+       } else {
+               for (i=0; i<obj_size; i+=8) {
+                       INSTANCE_WR(gpuobj, (i+0)/4, 0); //x00000010);
+                       INSTANCE_WR(gpuobj, (i+4)/4, 0); //0x00000004);
+               }
+       }
+
+       dev_priv->gart_info.type      = NOUVEAU_GART_SGDMA;
+       dev_priv->gart_info.aper_base = 0;
+       dev_priv->gart_info.aper_size = aper_size;
+       dev_priv->gart_info.sg_ctxdma = gpuobj;
+       return 0;
+}
+
+void
+nouveau_sgdma_takedown(struct drm_device *dev)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+
+       if (dev_priv->gart_info.sg_dummy_page) {
+               pci_unmap_page(dev->pdev, dev_priv->gart_info.sg_dummy_bus,
+                              NV_CTXDMA_PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
+               unlock_page(dev_priv->gart_info.sg_dummy_page);
+               __free_page(dev_priv->gart_info.sg_dummy_page);
+               dev_priv->gart_info.sg_dummy_page = NULL;
+               dev_priv->gart_info.sg_dummy_bus = 0;
+       }
+
+       nouveau_gpuobj_del(dev, &dev_priv->gart_info.sg_ctxdma);
+}
+
+int
+nouveau_sgdma_nottm_hack_init(struct drm_device *dev)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct drm_ttm_backend *be;
+       struct drm_scatter_gather sgreq;
+       int ret;
+
+       dev_priv->gart_info.sg_be = nouveau_sgdma_init_ttm(dev);
+       if (!dev_priv->gart_info.sg_be)
+               return -ENOMEM;
+       be = dev_priv->gart_info.sg_be;
+
+       /* Hack the aperture size down to the amount of system memory
+        * we're going to bind into it.
+        */
+       if (dev_priv->gart_info.aper_size > 32*1024*1024)
+               dev_priv->gart_info.aper_size = 32*1024*1024;
+
+       sgreq.size = dev_priv->gart_info.aper_size;
+       if ((ret = drm_sg_alloc(dev, &sgreq))) {
+               DRM_ERROR("drm_sg_alloc failed: %d\n", ret);
+               return ret;
+       }
+       dev_priv->gart_info.sg_handle = sgreq.handle;
+
+       if ((ret = be->func->populate(be, dev->sg->pages, dev->sg->pagelist))) {
+               DRM_ERROR("failed populate: %d\n", ret);
+               return ret;
+       }
+
+       if ((ret = be->func->bind(be, 0, 0))) {
+               DRM_ERROR("failed bind: %d\n", ret);
+               return ret;
+       }
+
+       return 0;
+}
+
+void
+nouveau_sgdma_nottm_hack_takedown(struct drm_device *dev)
+{
+}
+
index 114ec8f..c9112c6 100644 (file)
@@ -36,14 +36,14 @@ static struct pci_device_id pciidlist[] = {
 };
 
 
-static int sis_driver_load(drm_device_t *dev, unsigned long chipset)
+static int sis_driver_load(struct drm_device *dev, unsigned long chipset)
 {
        drm_sis_private_t *dev_priv;
        int ret;
 
        dev_priv = drm_calloc(1, sizeof(drm_sis_private_t), DRM_MEM_DRIVER);
        if (dev_priv == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        dev->dev_private = (void *)dev_priv;
        dev_priv->chipset = chipset;
@@ -55,7 +55,7 @@ static int sis_driver_load(drm_device_t *dev, unsigned long chipset)
        return ret;
 }
 
-static int sis_driver_unload(drm_device_t *dev)
+static int sis_driver_unload(struct drm_device *dev)
 {
        drm_sis_private_t *dev_priv = dev->dev_private;
 
index 21c1f2d..7e162a8 100644 (file)
@@ -81,19 +81,16 @@ unsigned long sis_sman_mm_offset(void *private, void *ref)
 
 #endif
 
-static int sis_fb_init(DRM_IOCTL_ARGS)
+static int sis_fb_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_fb_t fb;
+       drm_sis_fb_t *fb = data;
        int ret;
 
-       DRM_COPY_FROM_USER_IOCTL(fb, (drm_sis_fb_t __user *) data, sizeof(fb));
-
        mutex_lock(&dev->struct_mutex);
 #if defined(__linux__) && defined(CONFIG_FB_SIS)
        {
-               drm_sman_mm_t sman_mm;
+               struct drm_sman_mm sman_mm;
                sman_mm.private = (void *)0xFFFFFFFF;
                sman_mm.allocate = sis_sman_mm_allocate;
                sman_mm.free = sis_sman_mm_free;
@@ -104,7 +101,7 @@ static int sis_fb_init(DRM_IOCTL_ARGS)
        }
 #else
        ret = drm_sman_set_range(&dev_priv->sman, VIDEO_TYPE, 0,
-                                fb.size >> SIS_MM_ALIGN_SHIFT);
+                                fb->size >> SIS_MM_ALIGN_SHIFT);
 #endif
 
        if (ret) {
@@ -114,24 +111,21 @@ static int sis_fb_init(DRM_IOCTL_ARGS)
        }
 
        dev_priv->vram_initialized = 1;
-       dev_priv->vram_offset = fb.offset;
+       dev_priv->vram_offset = fb->offset;
 
        mutex_unlock(&dev->struct_mutex);
-       DRM_DEBUG("offset = %u, size = %u", fb.offset, fb.size);
+       DRM_DEBUG("offset = %u, size = %u", fb->offset, fb->size);
 
        return 0;
 }
 
-static int sis_drm_alloc(drm_device_t * dev, drm_file_t * priv,
-                        unsigned long data, int pool)
+static int sis_drm_alloc(struct drm_device * dev, struct drm_file *file_priv,
+                        void *data, int pool)
 {
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_mem_t __user *argp = (drm_sis_mem_t __user *) data;
-       drm_sis_mem_t mem;
+       drm_sis_mem_t *mem = data;
        int retval = 0;
-       drm_memblock_item_t *item;
-
-       DRM_COPY_FROM_USER_IOCTL(mem, argp, sizeof(mem));
+       struct drm_memblock_item *item;
 
        mutex_lock(&dev->struct_mutex);
 
@@ -139,73 +133,65 @@ static int sis_drm_alloc(drm_device_t * dev, drm_file_t * priv,
                      dev_priv->agp_initialized)) {
                DRM_ERROR
                    ("Attempt to allocate from uninitialized memory manager.\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       mem.size = (mem.size + SIS_MM_ALIGN_MASK) >> SIS_MM_ALIGN_SHIFT;
-       item = drm_sman_alloc(&dev_priv->sman, pool, mem.size, 0,
-                             (unsigned long)priv);
+       mem->size = (mem->size + SIS_MM_ALIGN_MASK) >> SIS_MM_ALIGN_SHIFT;
+       item = drm_sman_alloc(&dev_priv->sman, pool, mem->size, 0,
+                             (unsigned long)file_priv);
 
        mutex_unlock(&dev->struct_mutex);
        if (item) {
-               mem.offset = ((pool == 0) ?
+               mem->offset = ((pool == 0) ?
                              dev_priv->vram_offset : dev_priv->agp_offset) +
                    (item->mm->
                     offset(item->mm, item->mm_info) << SIS_MM_ALIGN_SHIFT);
-               mem.free = item->user_hash.key;
-               mem.size = mem.size << SIS_MM_ALIGN_SHIFT;
+               mem->free = item->user_hash.key;
+               mem->size = mem->size << SIS_MM_ALIGN_SHIFT;
        } else {
-               mem.offset = 0;
-               mem.size = 0;
-               mem.free = 0;
-               retval = DRM_ERR(ENOMEM);
+               mem->offset = 0;
+               mem->size = 0;
+               mem->free = 0;
+               retval = -ENOMEM;
        }
 
-       DRM_COPY_TO_USER_IOCTL(argp, mem, sizeof(mem));
-
-       DRM_DEBUG("alloc %d, size = %d, offset = %d\n", pool, mem.size,
-                 mem.offset);
+       DRM_DEBUG("alloc %d, size = %d, offset = %d\n", pool, mem->size,
+                 mem->offset);
 
        return retval;
 }
 
-static int sis_drm_free(DRM_IOCTL_ARGS)
+static int sis_drm_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_mem_t mem;
+       drm_sis_mem_t *mem = data;
        int ret;
 
-       DRM_COPY_FROM_USER_IOCTL(mem, (drm_sis_mem_t __user *) data,
-                                sizeof(mem));
-
        mutex_lock(&dev->struct_mutex);
-       ret = drm_sman_free_key(&dev_priv->sman, mem.free);
+       ret = drm_sman_free_key(&dev_priv->sman, mem->free);
        mutex_unlock(&dev->struct_mutex);
-       DRM_DEBUG("free = 0x%lx\n", mem.free);
+       DRM_DEBUG("free = 0x%lx\n", mem->free);
 
        return ret;
 }
 
-static int sis_fb_alloc(DRM_IOCTL_ARGS)
+static int sis_fb_alloc(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       return sis_drm_alloc(dev, priv, data, VIDEO_TYPE);
+       return sis_drm_alloc(dev, file_priv, data, VIDEO_TYPE);
 }
 
-static int sis_ioctl_agp_init(DRM_IOCTL_ARGS)
+static int sis_ioctl_agp_init(struct drm_device *dev, void *data,
+                             struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_agp_t agp;
+       drm_sis_agp_t *agp = data;
        int ret;
        dev_priv = dev->dev_private;
 
-       DRM_COPY_FROM_USER_IOCTL(agp, (drm_sis_agp_t __user *) data,
-                                sizeof(agp));
        mutex_lock(&dev->struct_mutex);
        ret = drm_sman_set_range(&dev_priv->sman, AGP_TYPE, 0,
-                                agp.size >> SIS_MM_ALIGN_SHIFT);
+                                agp->size >> SIS_MM_ALIGN_SHIFT);
 
        if (ret) {
                DRM_ERROR("AGP memory manager initialisation error\n");
@@ -214,23 +200,23 @@ static int sis_ioctl_agp_init(DRM_IOCTL_ARGS)
        }
 
        dev_priv->agp_initialized = 1;
-       dev_priv->agp_offset = agp.offset;
+       dev_priv->agp_offset = agp->offset;
        mutex_unlock(&dev->struct_mutex);
 
-       DRM_DEBUG("offset = %u, size = %u", agp.offset, agp.size);
+       DRM_DEBUG("offset = %u, size = %u", agp->offset, agp->size);
        return 0;
 }
 
-static int sis_ioctl_agp_alloc(DRM_IOCTL_ARGS)
+static int sis_ioctl_agp_alloc(struct drm_device *dev, void *data,
+                              struct drm_file *file_priv)
 {
-       DRM_DEVICE;
 
-       return sis_drm_alloc(dev, priv, data, AGP_TYPE);
+       return sis_drm_alloc(dev, file_priv, data, AGP_TYPE);
 }
 
-static drm_local_map_t *sis_reg_init(drm_device_t *dev)
+static drm_local_map_t *sis_reg_init(struct drm_device *dev)
 {
-       drm_map_list_t *entry;
+       struct drm_map_list *entry;
        drm_local_map_t *map;
 
        list_for_each_entry(entry, &dev->maplist, head) {
@@ -245,7 +231,7 @@ static drm_local_map_t *sis_reg_init(drm_device_t *dev)
 }
 
 int
-sis_idle(drm_device_t *dev)
+sis_idle(struct drm_device *dev)
 {
        drm_sis_private_t *dev_priv = dev->dev_private;
        uint32_t idle_reg;
@@ -314,13 +300,13 @@ void sis_lastclose(struct drm_device *dev)
        mutex_unlock(&dev->struct_mutex);
 }
 
-void sis_reclaim_buffers_locked(drm_device_t * dev, struct file *filp)
+void sis_reclaim_buffers_locked(struct drm_device * dev,
+                               struct drm_file *file_priv)
 {
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_file_t *priv = filp->private_data;
 
        mutex_lock(&dev->struct_mutex);
-       if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)priv)) {
+       if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)file_priv)) {
                mutex_unlock(&dev->struct_mutex);
                return;
        }
@@ -329,20 +315,18 @@ void sis_reclaim_buffers_locked(drm_device_t * dev, struct file *filp)
                dev->driver->dma_quiescent(dev);
        }
 
-       drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)priv);
+       drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)file_priv);
        mutex_unlock(&dev->struct_mutex);
        return;
 }
 
-drm_ioctl_desc_t sis_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_SIS_FB_ALLOC)] = {sis_fb_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SIS_FB_FREE)] = {sis_drm_free, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SIS_AGP_INIT)] =
-           {sis_ioctl_agp_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_SIS_AGP_ALLOC)] = {sis_ioctl_agp_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SIS_AGP_FREE)] = {sis_drm_free, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SIS_FB_INIT)] =
-           {sis_fb_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY}
+struct drm_ioctl_desc sis_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_SIS_FB_ALLOC, sis_fb_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SIS_FB_FREE, sis_drm_free, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SIS_AGP_INIT, sis_ioctl_agp_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_SIS_AGP_ALLOC, sis_ioctl_agp_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SIS_AGP_FREE, sis_drm_free, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SIS_FB_INIT, sis_fb_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY),
 };
 
 int sis_max_ioctl = DRM_ARRAY_SIZE(sis_ioctls);
index ebc8c37..eb5ea82 100644 (file)
 #include "via_drm.h"
 #include "via_drv.h"
 
-drm_ttm_backend_t *via_create_ttm_backend_entry(drm_device_t * dev)
+struct drm_ttm_backend *via_create_ttm_backend_entry(struct drm_device * dev)
 {
        return drm_agp_init_ttm(dev);
 }
 
-int via_fence_types(drm_buffer_object_t *bo, uint32_t * class, uint32_t * type)
+int via_fence_types(struct drm_buffer_object *bo, uint32_t * type)
 {
-       *class = 0;
        *type = 3;
        return 0;
 }
 
-int via_invalidate_caches(drm_device_t * dev, uint32_t flags)
+int via_invalidate_caches(struct drm_device * dev, uint64_t flags)
 {
        /*
         * FIXME: Invalidate texture caches here.
@@ -54,14 +53,14 @@ int via_invalidate_caches(drm_device_t * dev, uint32_t flags)
 }
 
 
-static int via_vram_info(drm_device_t *dev,
+static int via_vram_info(struct drm_device *dev,
                         unsigned long *offset,
                         unsigned long *size)
 {
        struct pci_dev *pdev = dev->pdev;
        unsigned long flags;
 
-       int ret = DRM_ERR(EINVAL);
+       int ret = -EINVAL;
        int i;
        for (i=0; i<6; ++i) {
                flags = pci_resource_flags(pdev, i);
@@ -82,8 +81,8 @@ static int via_vram_info(drm_device_t *dev,
        return 0;
 }
 
-int via_init_mem_type(drm_device_t * dev, uint32_t type,
-                      drm_mem_type_manager_t * man)
+int via_init_mem_type(struct drm_device * dev, uint32_t type,
+                      struct drm_mem_type_manager * man)
 {
        switch (type) {
        case DRM_BO_MEM_LOCAL:
@@ -144,7 +143,7 @@ int via_init_mem_type(drm_device_t * dev, uint32_t type,
        return 0;
 }
 
-uint32_t via_evict_mask(drm_buffer_object_t *bo)
+uint32_t via_evict_mask(struct drm_buffer_object *bo)
 {
        switch (bo->mem.mem_type) {
        case DRM_BO_MEM_LOCAL:
index 2f50837..d44c26f 100644 (file)
@@ -206,7 +206,7 @@ via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_t *vsg)
  */
 
 static void
-via_fire_dmablit(drm_device_t *dev, drm_via_sg_info_t *vsg, int engine)
+via_fire_dmablit(struct drm_device *dev, drm_via_sg_info_t *vsg, int engine)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;
 
@@ -236,7 +236,7 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg,  drm_via_dmablit_t *xfer)
                first_pfn + 1;
        
        if (NULL == (vsg->pages = vmalloc(sizeof(struct page *) * vsg->num_pages)))
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        memset(vsg->pages, 0, sizeof(struct page *) * vsg->num_pages);
        down_read(&current->mm->mmap_sem);
        ret = get_user_pages(current, current->mm, (unsigned long) xfer->mem_addr,
@@ -248,7 +248,7 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg,  drm_via_dmablit_t *xfer)
                if (ret < 0) 
                        return ret;
                vsg->state = dr_via_pages_locked;
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        vsg->state = dr_via_pages_locked;
        DRM_DEBUG("DMA pages locked\n");
@@ -271,14 +271,14 @@ via_alloc_desc_pages(drm_via_sg_info_t *vsg)
                vsg->descriptors_per_page;
 
        if (NULL ==  (vsg->desc_pages = kmalloc(sizeof(void *) * vsg->num_desc_pages, GFP_KERNEL))) 
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        
        memset(vsg->desc_pages, 0, sizeof(void *) * vsg->num_desc_pages);
        vsg->state = dr_via_desc_pages_alloc;
        for (i=0; i<vsg->num_desc_pages; ++i) {
                if (NULL == (vsg->desc_pages[i] = 
                             (drm_via_descriptor_t *) __get_free_page(GFP_KERNEL)))
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
        }
        DRM_DEBUG("Allocated %d pages for %d descriptors.\n", vsg->num_desc_pages,
                  vsg->num_desc);
@@ -286,7 +286,7 @@ via_alloc_desc_pages(drm_via_sg_info_t *vsg)
 }
                        
 static void
-via_abort_dmablit(drm_device_t *dev, int engine)
+via_abort_dmablit(struct drm_device *dev, int engine)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;
 
@@ -294,7 +294,7 @@ via_abort_dmablit(drm_device_t *dev, int engine)
 }
 
 static void
-via_dmablit_engine_off(drm_device_t *dev, int engine)
+via_dmablit_engine_off(struct drm_device *dev, int engine)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;
 
@@ -311,7 +311,7 @@ via_dmablit_engine_off(drm_device_t *dev, int engine)
  */
                
 void
-via_dmablit_handler(drm_device_t *dev, int engine, int from_irq)
+via_dmablit_handler(struct drm_device *dev, int engine, int from_irq)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;
        drm_via_blitq_t *blitq = dev_priv->blit_queues + engine;
@@ -432,7 +432,7 @@ via_dmablit_active(drm_via_blitq_t *blitq, int engine, uint32_t handle, wait_que
  */
 
 static int
-via_dmablit_sync(drm_device_t *dev, uint32_t handle, int engine) 
+via_dmablit_sync(struct drm_device *dev, uint32_t handle, int engine) 
 {
 
        drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;
@@ -465,7 +465,7 @@ static void
 via_dmablit_timer(unsigned long data)
 {
        drm_via_blitq_t *blitq = (drm_via_blitq_t *) data;
-       drm_device_t *dev = blitq->dev;
+       struct drm_device *dev = blitq->dev;
        int engine = (int)
                (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues);
                
@@ -509,7 +509,7 @@ via_dmablit_workqueue(struct work_struct *work)
 #else
        drm_via_blitq_t *blitq = container_of(work, drm_via_blitq_t, wq);
 #endif
-        drm_device_t *dev = blitq->dev;
+        struct drm_device *dev = blitq->dev;
        unsigned long irqsave;
        drm_via_sg_info_t *cur_sg;
        int cur_released;
@@ -552,7 +552,7 @@ via_dmablit_workqueue(struct work_struct *work)
 
 
 void
-via_init_dmablit(drm_device_t *dev)
+via_init_dmablit(struct drm_device *dev)
 {
        int i,j;
        drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;
@@ -568,7 +568,7 @@ via_init_dmablit(drm_device_t *dev)
                blitq->head = 0;
                blitq->cur = 0;
                blitq->serviced = 0;
-               blitq->num_free = VIA_NUM_BLIT_SLOTS;
+               blitq->num_free = VIA_NUM_BLIT_SLOTS - 1;
                blitq->num_outstanding = 0;
                blitq->is_active = 0;
                blitq->aborting = 0;
@@ -594,7 +594,7 @@ via_init_dmablit(drm_device_t *dev)
                
 
 static int
-via_build_sg_info(drm_device_t *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *xfer)
+via_build_sg_info(struct drm_device *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *xfer)
 {
        int draw = xfer->to_fb;
        int ret = 0;
@@ -606,7 +606,7 @@ via_build_sg_info(drm_device_t *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *
 
        if (xfer->num_lines <= 0 || xfer->line_length <= 0) {
                DRM_ERROR("Zero size bitblt.\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /*
@@ -619,7 +619,7 @@ via_build_sg_info(drm_device_t *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *
        if ((xfer->mem_stride - xfer->line_length) >= PAGE_SIZE) {
                DRM_ERROR("Too large system memory stride. Stride: %d, "
                          "Length: %d\n", xfer->mem_stride, xfer->line_length);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if ((xfer->mem_stride == xfer->line_length) &&
@@ -637,7 +637,7 @@ via_build_sg_info(drm_device_t *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *
 
        if (xfer->num_lines > 2048 || (xfer->num_lines*xfer->mem_stride > (2048*2048*4))) {
                DRM_ERROR("Too large PCI DMA bitblt.\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }               
 
        /* 
@@ -648,7 +648,7 @@ via_build_sg_info(drm_device_t *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *
        if (xfer->mem_stride < xfer->line_length ||
            abs(xfer->fb_stride) < xfer->line_length) {
                DRM_ERROR("Invalid frame-buffer / memory stride.\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /*
@@ -661,13 +661,13 @@ via_build_sg_info(drm_device_t *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *
        if ((((unsigned long)xfer->mem_addr & 3) != ((unsigned long)xfer->fb_addr & 3)) ||
            ((xfer->num_lines > 1) && ((xfer->mem_stride & 3) != (xfer->fb_stride & 3)))) {
                DRM_ERROR("Invalid DRM bitblt alignment.\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 #else
        if ((((unsigned long)xfer->mem_addr & 15) || ((unsigned long)xfer->fb_addr & 3)) ||
            ((xfer->num_lines > 1) && ((xfer->mem_stride & 15) || (xfer->fb_stride & 3)))) {
                DRM_ERROR("Invalid DRM bitblt alignment.\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }       
 #endif
 
@@ -707,7 +707,7 @@ via_dmablit_grab_slot(drm_via_blitq_t *blitq, int engine)
 
                DRM_WAIT_ON(ret, blitq->busy_queue, DRM_HZ, blitq->num_free > 0);
                if (ret) {
-                       return (DRM_ERR(EINTR) == ret) ? DRM_ERR(EAGAIN) : ret;
+                       return (-EINTR == ret) ? -EAGAIN : ret;
                }
                
                spin_lock_irqsave(&blitq->blit_lock, irqsave);
@@ -740,7 +740,7 @@ via_dmablit_release_slot(drm_via_blitq_t *blitq)
 
 
 static int 
-via_dmablit(drm_device_t *dev, drm_via_dmablit_t *xfer)         
+via_dmablit(struct drm_device *dev, drm_via_dmablit_t *xfer)    
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;
        drm_via_sg_info_t *vsg;
@@ -751,7 +751,7 @@ via_dmablit(drm_device_t *dev, drm_via_dmablit_t *xfer)
 
        if (dev_priv == NULL) {
                DRM_ERROR("Called without initialization.\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        engine = (xfer->to_fb) ? 0 : 1;
@@ -761,7 +761,7 @@ via_dmablit(drm_device_t *dev, drm_via_dmablit_t *xfer)
        }
        if (NULL == (vsg = kmalloc(sizeof(*vsg), GFP_KERNEL))) {
                via_dmablit_release_slot(blitq);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        if (0 != (ret = via_build_sg_info(dev, vsg, xfer))) {
                via_dmablit_release_slot(blitq);
@@ -792,21 +792,18 @@ via_dmablit(drm_device_t *dev, drm_via_dmablit_t *xfer)
  */
 
 int
-via_dma_blit_sync( DRM_IOCTL_ARGS )
+via_dma_blit_sync( struct drm_device *dev, void *data, struct drm_file *file_priv )
 {
-       drm_via_blitsync_t sync;
+       drm_via_blitsync_t *sync = data;
        int err;
-       DRM_DEVICE;
 
-       DRM_COPY_FROM_USER_IOCTL(sync, (drm_via_blitsync_t *)data, sizeof(sync));
-       
-       if (sync.engine >= VIA_NUM_BLIT_ENGINES) 
-               return DRM_ERR(EINVAL);
+       if (sync->engine >= VIA_NUM_BLIT_ENGINES) 
+               return -EINVAL;
 
-       err = via_dmablit_sync(dev, sync.sync_handle, sync.engine);
+       err = via_dmablit_sync(dev, sync->sync_handle, sync->engine);
 
-       if (DRM_ERR(EINTR) == err)
-               err = DRM_ERR(EAGAIN);
+       if (-EINTR == err)
+               err = -EAGAIN;
 
        return err;
 }
@@ -819,17 +816,12 @@ via_dma_blit_sync( DRM_IOCTL_ARGS )
  */
 
 int 
-via_dma_blit( DRM_IOCTL_ARGS )
+via_dma_blit( struct drm_device *dev, void *data, struct drm_file *file_priv )
 {
-       drm_via_dmablit_t xfer;
+       drm_via_dmablit_t *xfer = data;
        int err;
-       DRM_DEVICE;
-
-       DRM_COPY_FROM_USER_IOCTL(xfer, (drm_via_dmablit_t __user *)data, sizeof(xfer));
-
-       err = via_dmablit(dev, &xfer);
 
-       DRM_COPY_TO_USER_IOCTL((void __user *)data, xfer, sizeof(xfer));
+       err = via_dmablit(dev, xfer);
 
        return err;
 }
index f6ae03e..726ad25 100644 (file)
@@ -59,7 +59,7 @@ typedef struct _drm_via_sg_info {
 } drm_via_sg_info_t;
 
 typedef struct _drm_via_blitq {
-       drm_device_t *dev;
+       struct drm_device *dev;
        uint32_t cur_blit_handle;
        uint32_t done_blit_handle;
        unsigned serviced;
index 0224993..a6d4ece 100644 (file)
  */
 
 
-static uint32_t via_perform_flush(drm_device_t *dev, uint32_t class)
+static uint32_t via_perform_flush(struct drm_device *dev, uint32_t class)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
-       drm_fence_class_manager_t *fc = &dev->fm.class[class];
+       struct drm_fence_class_manager *fc = &dev->fm.class[class];
        uint32_t pending_flush_types = 0;
        uint32_t signaled_flush_types = 0;
        uint32_t status;
@@ -113,7 +113,7 @@ static uint32_t via_perform_flush(drm_device_t *dev, uint32_t class)
  * Emit a fence sequence.
  */
 
-int via_fence_emit_sequence(drm_device_t * dev, uint32_t class, uint32_t flags,
+int via_fence_emit_sequence(struct drm_device * dev, uint32_t class, uint32_t flags,
                             uint32_t * sequence, uint32_t * native_type)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
@@ -142,7 +142,7 @@ int via_fence_emit_sequence(drm_device_t * dev, uint32_t class, uint32_t flags,
                *native_type = DRM_FENCE_TYPE_EXE;
                break;
        default:
-               ret = DRM_ERR(EINVAL);
+               ret = -EINVAL;
                break;
        }
        return ret;
@@ -152,10 +152,10 @@ int via_fence_emit_sequence(drm_device_t * dev, uint32_t class, uint32_t flags,
  * Manual poll (from the fence manager).
  */
 
-void via_poke_flush(drm_device_t * dev, uint32_t class)
+void via_poke_flush(struct drm_device * dev, uint32_t class)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
        unsigned long flags;
        uint32_t pending_flush;
 
@@ -200,11 +200,11 @@ int via_fence_has_irq(struct drm_device * dev, uint32_t class,
 
 void via_fence_timer(unsigned long data)
 {
-       drm_device_t *dev = (drm_device_t *) data;
+       struct drm_device *dev = (struct drm_device *) data;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
-       drm_fence_manager_t *fm = &dev->fm;
+       struct drm_fence_manager *fm = &dev->fm;
        uint32_t pending_flush;
-       drm_fence_class_manager_t *fc = &dev->fm.class[0];
+       struct drm_fence_class_manager *fc = &dev->fm.class[0];
 
        if (!dev_priv)
                return;
index d97269f..35ca6bf 100644 (file)
 #define VIA_MM_ALIGN_SHIFT 4
 #define VIA_MM_ALIGN_MASK ( (1 << VIA_MM_ALIGN_SHIFT) - 1)
 
-int via_agp_init(DRM_IOCTL_ARGS)
+int via_agp_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_agp_t agp;
+       drm_via_agp_t *agp = data;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        int ret;
 
-       DRM_COPY_FROM_USER_IOCTL(agp, (drm_via_agp_t __user *) data,
-                                sizeof(agp));
        mutex_lock(&dev->struct_mutex);
        ret = drm_sman_set_range(&dev_priv->sman, VIA_MEM_AGP, 0,
-                                agp.size >> VIA_MM_ALIGN_SHIFT);
+                                agp->size >> VIA_MM_ALIGN_SHIFT);
 
        if (ret) {
                DRM_ERROR("AGP memory manager initialisation error\n");
@@ -53,25 +50,22 @@ int via_agp_init(DRM_IOCTL_ARGS)
        }
 
        dev_priv->agp_initialized = 1;
-       dev_priv->agp_offset = agp.offset;
+       dev_priv->agp_offset = agp->offset;
        mutex_unlock(&dev->struct_mutex);
 
-       DRM_DEBUG("offset = %u, size = %u", agp.offset, agp.size);
+       DRM_DEBUG("offset = %u, size = %u", agp->offset, agp->size);
        return 0;
 }
 
-int via_fb_init(DRM_IOCTL_ARGS)
+int via_fb_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_fb_t fb;
+       drm_via_fb_t *fb = data;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        int ret;
 
-       DRM_COPY_FROM_USER_IOCTL(fb, (drm_via_fb_t __user *) data, sizeof(fb));
-
        mutex_lock(&dev->struct_mutex);
        ret = drm_sman_set_range(&dev_priv->sman, VIA_MEM_VIDEO, 0,
-                                fb.size >> VIA_MM_ALIGN_SHIFT);
+                                fb->size >> VIA_MM_ALIGN_SHIFT);
 
        if (ret) {
                DRM_ERROR("VRAM memory manager initialisation error\n");
@@ -80,10 +74,10 @@ int via_fb_init(DRM_IOCTL_ARGS)
        }
 
        dev_priv->vram_initialized = 1;
-       dev_priv->vram_offset = fb.offset;
+       dev_priv->vram_offset = fb->offset;
 
        mutex_unlock(&dev->struct_mutex);
-       DRM_DEBUG("offset = %u, size = %u", fb.offset, fb.size);
+       DRM_DEBUG("offset = %u, size = %u", fb->offset, fb->size);
 
        return 0;
 
@@ -123,80 +117,71 @@ void via_lastclose(struct drm_device *dev)
        mutex_unlock(&dev->struct_mutex);
 }      
 
-int via_mem_alloc(DRM_IOCTL_ARGS)
+int via_mem_alloc(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-
-       drm_via_mem_t mem;
+       drm_via_mem_t *mem = data;
        int retval = 0;
-       drm_memblock_item_t *item;
+       struct drm_memblock_item *item;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        unsigned long tmpSize;
 
-       DRM_COPY_FROM_USER_IOCTL(mem, (drm_via_mem_t __user *) data,
-                                sizeof(mem));
-
-       if (mem.type > VIA_MEM_AGP) {
+       if (mem->type > VIA_MEM_AGP) {
                DRM_ERROR("Unknown memory type allocation\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        mutex_lock(&dev->struct_mutex);
-       if (0 == ((mem.type == VIA_MEM_VIDEO) ? dev_priv->vram_initialized :
+       if (0 == ((mem->type == VIA_MEM_VIDEO) ? dev_priv->vram_initialized :
                      dev_priv->agp_initialized)) {
                DRM_ERROR
                    ("Attempt to allocate from uninitialized memory manager.\n");
                mutex_unlock(&dev->struct_mutex);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       tmpSize = (mem.size + VIA_MM_ALIGN_MASK) >> VIA_MM_ALIGN_SHIFT;
-       item = drm_sman_alloc(&dev_priv->sman, mem.type, tmpSize, 0,
-                             (unsigned long)priv);
+       tmpSize = (mem->size + VIA_MM_ALIGN_MASK) >> VIA_MM_ALIGN_SHIFT;
+       item = drm_sman_alloc(&dev_priv->sman, mem->type, tmpSize, 0,
+                             (unsigned long)file_priv);
        mutex_unlock(&dev->struct_mutex);
        if (item) {
-               mem.offset = ((mem.type == VIA_MEM_VIDEO) ?
+               mem->offset = ((mem->type == VIA_MEM_VIDEO) ?
                              dev_priv->vram_offset : dev_priv->agp_offset) +
                    (item->mm->
                     offset(item->mm, item->mm_info) << VIA_MM_ALIGN_SHIFT);
-               mem.index = item->user_hash.key;
+               mem->index = item->user_hash.key;
        } else {
-               mem.offset = 0;
-               mem.size = 0;
-               mem.index = 0;
+               mem->offset = 0;
+               mem->size = 0;
+               mem->index = 0;
                DRM_DEBUG("Video memory allocation failed\n");
-               retval = DRM_ERR(ENOMEM);
+               retval = -ENOMEM;
        }
-       DRM_COPY_TO_USER_IOCTL((drm_via_mem_t __user *) data, mem, sizeof(mem));
 
        return retval;
 }
 
-int via_mem_free(DRM_IOCTL_ARGS)
+int via_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_via_private_t *dev_priv = dev->dev_private;
-       drm_via_mem_t mem;
+       drm_via_mem_t *mem = data;
        int ret;
 
-       DRM_COPY_FROM_USER_IOCTL(mem, (drm_via_mem_t __user *) data,
-                                sizeof(mem));
-
        mutex_lock(&dev->struct_mutex);
-       ret = drm_sman_free_key(&dev_priv->sman, mem.index);
+       ret = drm_sman_free_key(&dev_priv->sman, mem->index);
        mutex_unlock(&dev->struct_mutex);
-       DRM_DEBUG("free = 0x%lx\n", mem.index);
+       DRM_DEBUG("free = 0x%lx\n", mem->index);
 
        return ret;
 }
 
 
-void via_reclaim_buffers_locked(drm_device_t * dev, struct file *filp)
+void via_reclaim_buffers_locked(struct drm_device * dev,
+                               struct drm_file *file_priv)
 {
        drm_via_private_t *dev_priv = dev->dev_private;
-       drm_file_t *priv = filp->private_data;
 
        mutex_lock(&dev->struct_mutex);
-       if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)priv)) {
+       if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)file_priv)) {
                mutex_unlock(&dev->struct_mutex);
                return;
        }
@@ -205,7 +190,7 @@ void via_reclaim_buffers_locked(drm_device_t * dev, struct file *filp)
                dev->driver->dma_quiescent(dev);
        }
 
-       drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)priv);
+       drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)file_priv);
        mutex_unlock(&dev->struct_mutex);
        return;
 }
index b419541..db913b1 100644 (file)
 #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
 
 #if defined(__linux__)
-#if defined(__KERNEL__)
-typedef __u64 drm_u64_t;
-#else
-typedef unsigned long long drm_u64_t;
-#endif
-
 typedef unsigned int drm_handle_t;
 #else
 #include <sys/types.h>
-typedef u_int64_t drm_u64_t;
 typedef unsigned long drm_handle_t;    /**< To mapped regions */
 #endif
 typedef unsigned int drm_context_t;    /**< GLXContext handle */
@@ -152,31 +145,31 @@ typedef unsigned int drm_magic_t; /**< Magic for authentication */
  * \note KW: Actually it's illegal to change either for
  * backwards-compatibility reasons.
  */
-typedef struct drm_clip_rect {
+struct drm_clip_rect {
        unsigned short x1;
        unsigned short y1;
        unsigned short x2;
        unsigned short y2;
-} drm_clip_rect_t;
+};
 
 /**
  * Drawable information.
  */
-typedef struct drm_drawable_info {
+struct drm_drawable_info {
        unsigned int num_rects;
-       drm_clip_rect_t *rects;
-} drm_drawable_info_t;
+       struct drm_clip_rect *rects;
+};
 
 /**
  * Texture region,
  */
-typedef struct drm_tex_region {
+struct drm_tex_region {
        unsigned char next;
        unsigned char prev;
        unsigned char in_use;
        unsigned char padding;
        unsigned int age;
-} drm_tex_region_t;
+};
 
 /**
  * Hardware lock.
@@ -185,10 +178,10 @@ typedef struct drm_tex_region {
  * processor bus contention on a multiprocessor system, there should not be any
  * other data stored in the same cache line.
  */
-typedef struct drm_hw_lock {
+struct drm_hw_lock {
        __volatile__ unsigned int lock;         /**< lock variable */
        char padding[60];                       /**< Pad to cache line */
-} drm_hw_lock_t;
+};
 
 /* This is beyond ugly, and only works on GCC.  However, it allows me to use
  * drm.h in places (i.e., in the X-server) where I can't use size_t.  The real
@@ -211,7 +204,7 @@ typedef struct drm_hw_lock {
  *
  * \sa drmGetVersion().
  */
-typedef struct drm_version {
+struct drm_version {
        int version_major;        /**< Major version */
        int version_minor;        /**< Minor version */
        int version_patchlevel;   /**< Patch level */
@@ -221,35 +214,35 @@ typedef struct drm_version {
        char __user *date;                /**< User-space buffer to hold date */
        DRM_SIZE_T desc_len;      /**< Length of desc buffer */
        char __user *desc;                /**< User-space buffer to hold desc */
-} drm_version_t;
+};
 
 /**
  * DRM_IOCTL_GET_UNIQUE ioctl argument type.
  *
  * \sa drmGetBusid() and drmSetBusId().
  */
-typedef struct drm_unique {
+struct drm_unique {
        DRM_SIZE_T unique_len;    /**< Length of unique */
        char __user *unique;              /**< Unique name for driver instantiation */
-} drm_unique_t;
+};
 
 #undef DRM_SIZE_T
 
-typedef struct drm_list {
+struct drm_list {
        int count;                /**< Length of user-space structures */
-       drm_version_t __user *version;
-} drm_list_t;
+       struct drm_version __user *version;
+};
 
-typedef struct drm_block {
+struct drm_block {
        int unused;
-} drm_block_t;
+};
 
 /**
  * DRM_IOCTL_CONTROL ioctl argument type.
  *
  * \sa drmCtlInstHandler() and drmCtlUninstHandler().
  */
-typedef struct drm_control {
+struct drm_control {
        enum {
                DRM_ADD_COMMAND,
                DRM_RM_COMMAND,
@@ -257,12 +250,12 @@ typedef struct drm_control {
                DRM_UNINST_HANDLER
        } func;
        int irq;
-} drm_control_t;
+};
 
 /**
  * Type of memory to map.
  */
-typedef enum drm_map_type {
+enum drm_map_type {
        _DRM_FRAME_BUFFER = 0,    /**< WC (no caching), no core dump */
        _DRM_REGISTERS = 1,       /**< no caching, no core dump */
        _DRM_SHM = 2,             /**< shared, cached */
@@ -270,12 +263,12 @@ typedef enum drm_map_type {
        _DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
        _DRM_CONSISTENT = 5,      /**< Consistent memory for PCI DMA */
        _DRM_TTM = 6
-} drm_map_type_t;
+};
 
 /**
  * Memory mapping flags.
  */
-typedef enum drm_map_flags {
+enum drm_map_flags {
        _DRM_RESTRICTED = 0x01,      /**< Cannot be mapped to user-virtual */
        _DRM_READ_ONLY = 0x02,
        _DRM_LOCKED = 0x04,          /**< shared, cached, locked */
@@ -283,12 +276,12 @@ typedef enum drm_map_flags {
        _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
        _DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
        _DRM_REMOVABLE = 0x40        /**< Removable mapping */
-} drm_map_flags_t;
+};
 
-typedef struct drm_ctx_priv_map {
+struct drm_ctx_priv_map {
        unsigned int ctx_id;     /**< Context requesting private mapping */
        void *handle;            /**< Handle of map */
-} drm_ctx_priv_map_t;
+};
 
 /**
  * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
@@ -296,30 +289,30 @@ typedef struct drm_ctx_priv_map {
  *
  * \sa drmAddMap().
  */
-typedef struct drm_map {
+struct drm_map {
        unsigned long offset;    /**< Requested physical address (0 for SAREA)*/
        unsigned long size;      /**< Requested physical size (bytes) */
-       drm_map_type_t type;     /**< Type of memory to map */
-       drm_map_flags_t flags;   /**< Flags */
+       enum drm_map_type type;  /**< Type of memory to map */
+       enum drm_map_flags flags;        /**< Flags */
        void *handle;            /**< User-space: "Handle" to pass to mmap() */
                                 /**< Kernel-space: kernel-virtual address */
        int mtrr;                /**< MTRR slot used */
        /*   Private data */
-} drm_map_t;
+};
 
 /**
  * DRM_IOCTL_GET_CLIENT ioctl argument type.
  */
-typedef struct drm_client {
+struct drm_client {
        int idx;                /**< Which client desired? */
        int auth;               /**< Is client authenticated? */
        unsigned long pid;      /**< Process ID */
        unsigned long uid;      /**< User ID */
        unsigned long magic;    /**< Magic */
        unsigned long iocs;     /**< Ioctl count */
-} drm_client_t;
+};
 
-typedef enum {
+enum drm_stat_type {
        _DRM_STAT_LOCK,
        _DRM_STAT_OPENS,
        _DRM_STAT_CLOSES,
@@ -337,23 +330,23 @@ typedef enum {
        _DRM_STAT_SPECIAL,      /**< Special DMA (e.g., priority or polled) */
        _DRM_STAT_MISSED        /**< Missed DMA opportunity */
            /* Add to the *END* of the list */
-} drm_stat_type_t;
+};
 
 /**
  * DRM_IOCTL_GET_STATS ioctl argument type.
  */
-typedef struct drm_stats {
+struct drm_stats {
        unsigned long count;
        struct {
                unsigned long value;
-               drm_stat_type_t type;
+               enum drm_stat_type type;
        } data[15];
-} drm_stats_t;
+};
 
 /**
  * Hardware locking flags.
  */
-typedef enum drm_lock_flags {
+enum drm_lock_flags {
        _DRM_LOCK_READY = 0x01,      /**< Wait until hardware is ready for DMA */
        _DRM_LOCK_QUIESCENT = 0x02,  /**< Wait until hardware quiescent */
        _DRM_LOCK_FLUSH = 0x04,      /**< Flush this context's DMA queue first */
@@ -363,17 +356,17 @@ typedef enum drm_lock_flags {
           full-screen DGA-like mode. */
        _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
        _DRM_HALT_CUR_QUEUES = 0x20  /**< Halt all current queues */
-} drm_lock_flags_t;
+};
 
 /**
  * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type.
  *
  * \sa drmGetLock() and drmUnlock().
  */
-typedef struct drm_lock {
+struct drm_lock {
        int context;
-       drm_lock_flags_t flags;
-} drm_lock_t;
+       enum drm_lock_flags flags;
+};
 
 /**
  * DMA flags
@@ -383,7 +376,7 @@ typedef struct drm_lock {
  *
  * \sa drm_dma.
  */
-typedef enum drm_dma_flags {
+enum drm_dma_flags {
        /* Flags for DMA buffer dispatch */
        _DRM_DMA_BLOCK = 0x01,        /**<
                                       * Block until buffer dispatched.
@@ -402,14 +395,14 @@ typedef enum drm_dma_flags {
        _DRM_DMA_WAIT = 0x10,         /**< Wait for free buffers */
        _DRM_DMA_SMALLER_OK = 0x20,   /**< Smaller-than-requested buffers OK */
        _DRM_DMA_LARGER_OK = 0x40     /**< Larger-than-requested buffers OK */
-} drm_dma_flags_t;
+};
 
 /**
  * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.
  *
  * \sa drmAddBufs().
  */
-typedef struct drm_buf_desc {
+struct drm_buf_desc {
        int count;               /**< Number of buffers of this size */
        int size;                /**< Size in bytes */
        int low_mark;            /**< Low water mark */
@@ -425,48 +418,48 @@ typedef struct drm_buf_desc {
                                  * Start address of where the AGP buffers are
                                  * in the AGP aperture
                                  */
-} drm_buf_desc_t;
+};
 
 /**
  * DRM_IOCTL_INFO_BUFS ioctl argument type.
  */
-typedef struct drm_buf_info {
+struct drm_buf_info {
        int count;                /**< Number of buffers described in list */
-       drm_buf_desc_t __user *list;      /**< List of buffer descriptions */
-} drm_buf_info_t;
+       struct drm_buf_desc __user *list; /**< List of buffer descriptions */
+};
 
 /**
  * DRM_IOCTL_FREE_BUFS ioctl argument type.
  */
-typedef struct drm_buf_free {
+struct drm_buf_free {
        int count;
        int __user *list;
-} drm_buf_free_t;
+};
 
 /**
  * Buffer information
  *
  * \sa drm_buf_map.
  */
-typedef struct drm_buf_pub {
+struct drm_buf_pub {
        int idx;                       /**< Index into the master buffer list */
        int total;                     /**< Buffer size */
        int used;                      /**< Amount of buffer in use (for DMA) */
        void __user *address;          /**< Address of buffer */
-} drm_buf_pub_t;
+};
 
 /**
  * DRM_IOCTL_MAP_BUFS ioctl argument type.
  */
-typedef struct drm_buf_map {
+struct drm_buf_map {
        int count;              /**< Length of the buffer list */
 #if defined(__cplusplus)
        void __user *c_virtual;
 #else
        void __user *virtual;           /**< Mmap'd area in user-virtual */
 #endif
-       drm_buf_pub_t __user *list;     /**< Buffer information */
-} drm_buf_map_t;
+       struct drm_buf_pub __user *list;        /**< Buffer information */
+};
 
 /**
  * DRM_IOCTL_DMA ioctl argument type.
@@ -475,48 +468,48 @@ typedef struct drm_buf_map {
  *
  * \sa drmDMA().
  */
-typedef struct drm_dma {
+struct drm_dma {
        int context;                      /**< Context handle */
        int send_count;                   /**< Number of buffers to send */
        int __user *send_indices;         /**< List of handles to buffers */
        int __user *send_sizes;           /**< Lengths of data to send */
-       drm_dma_flags_t flags;            /**< Flags */
+       enum drm_dma_flags flags;         /**< Flags */
        int request_count;                /**< Number of buffers requested */
        int request_size;                 /**< Desired size for buffers */
        int __user *request_indices;     /**< Buffer information */
        int __user *request_sizes;
        int granted_count;                /**< Number of buffers granted */
-} drm_dma_t;
+};
 
-typedef enum {
+enum drm_ctx_flags {
        _DRM_CONTEXT_PRESERVED = 0x01,
        _DRM_CONTEXT_2DONLY = 0x02
-} drm_ctx_flags_t;
+};
 
 /**
  * DRM_IOCTL_ADD_CTX ioctl argument type.
  *
  * \sa drmCreateContext() and drmDestroyContext().
  */
-typedef struct drm_ctx {
+struct drm_ctx {
        drm_context_t handle;
-       drm_ctx_flags_t flags;
-} drm_ctx_t;
+       enum drm_ctx_flags flags;
+};
 
 /**
  * DRM_IOCTL_RES_CTX ioctl argument type.
  */
-typedef struct drm_ctx_res {
+struct drm_ctx_res {
        int count;
-       drm_ctx_t __user *contexts;
-} drm_ctx_res_t;
+       struct drm_ctx __user *contexts;
+};
 
 /**
  * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
  */
-typedef struct drm_draw {
+struct drm_draw {
        drm_drawable_t handle;
-} drm_draw_t;
+};
 
 /**
  * DRM_IOCTL_UPDATE_DRAW ioctl argument type.
@@ -525,53 +518,53 @@ typedef enum {
        DRM_DRAWABLE_CLIPRECTS,
 } drm_drawable_info_type_t;
 
-typedef struct drm_update_draw {
+struct drm_update_draw {
        drm_drawable_t handle;
        unsigned int type;
        unsigned int num;
        unsigned long long data;
-} drm_update_draw_t;
+};
 
 /**
  * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
  */
-typedef struct drm_auth {
+struct drm_auth {
        drm_magic_t magic;
-} drm_auth_t;
+};
 
 /**
  * DRM_IOCTL_IRQ_BUSID ioctl argument type.
  *
  * \sa drmGetInterruptFromBusID().
  */
-typedef struct drm_irq_busid {
+struct drm_irq_busid {
        int irq;        /**< IRQ number */
        int busnum;     /**< bus number */
        int devnum;     /**< device number */
        int funcnum;    /**< function number */
-} drm_irq_busid_t;
+};
 
-typedef enum {
+enum drm_vblank_seq_type {
        _DRM_VBLANK_ABSOLUTE = 0x0,     /**< Wait for specific vblank sequence number */
        _DRM_VBLANK_RELATIVE = 0x1,     /**< Wait for given number of vblanks */
        _DRM_VBLANK_FLIP = 0x8000000,   /**< Scheduled buffer swap should flip */
        _DRM_VBLANK_NEXTONMISS = 0x10000000,    /**< If missed, wait for next vblank */
        _DRM_VBLANK_SECONDARY = 0x20000000,     /**< Secondary display controller */
        _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking */
-} drm_vblank_seq_type_t;
+};
 
 #define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE)
 #define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_SIGNAL | _DRM_VBLANK_SECONDARY | \
                                _DRM_VBLANK_NEXTONMISS)
 
 struct drm_wait_vblank_request {
-       drm_vblank_seq_type_t type;
+       enum drm_vblank_seq_type type;
        unsigned int sequence;
        unsigned long signal;
 };
 
 struct drm_wait_vblank_reply {
-       drm_vblank_seq_type_t type;
+       enum drm_vblank_seq_type type;
        unsigned int sequence;
        long tval_sec;
        long tval_usec;
@@ -582,41 +575,41 @@ struct drm_wait_vblank_reply {
  *
  * \sa drmWaitVBlank().
  */
-typedef union drm_wait_vblank {
+union drm_wait_vblank {
        struct drm_wait_vblank_request request;
        struct drm_wait_vblank_reply reply;
-} drm_wait_vblank_t;
+};
 
 /**
  * DRM_IOCTL_AGP_ENABLE ioctl argument type.
  *
  * \sa drmAgpEnable().
  */
-typedef struct drm_agp_mode {
+struct drm_agp_mode {
        unsigned long mode;     /**< AGP mode */
-} drm_agp_mode_t;
+};
 
 /**
  * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type.
  *
  * \sa drmAgpAlloc() and drmAgpFree().
  */
-typedef struct drm_agp_buffer {
+struct drm_agp_buffer {
        unsigned long size;     /**< In bytes -- will round to page boundary */
        unsigned long handle;   /**< Used for binding / unbinding */
        unsigned long type;     /**< Type of memory to allocate */
        unsigned long physical; /**< Physical used by i810 */
-} drm_agp_buffer_t;
+};
 
 /**
  * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type.
  *
  * \sa drmAgpBind() and drmAgpUnbind().
  */
-typedef struct drm_agp_binding {
+struct drm_agp_binding {
        unsigned long handle;   /**< From drm_agp_buffer */
        unsigned long offset;   /**< In bytes -- will round to page boundary */
-} drm_agp_binding_t;
+};
 
 /**
  * DRM_IOCTL_AGP_INFO ioctl argument type.
@@ -625,7 +618,7 @@ typedef struct drm_agp_binding {
  * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(),
  * drmAgpVendorId() and drmAgpDeviceId().
  */
-typedef struct drm_agp_info {
+struct drm_agp_info {
        int agp_version_major;
        int agp_version_minor;
        unsigned long mode;
@@ -639,25 +632,25 @@ typedef struct drm_agp_info {
        unsigned short id_vendor;
        unsigned short id_device;
        /*@} */
-} drm_agp_info_t;
+};
 
 /**
  * DRM_IOCTL_SG_ALLOC ioctl argument type.
  */
-typedef struct drm_scatter_gather {
+struct drm_scatter_gather {
        unsigned long size;     /**< In bytes -- will round to page boundary */
        unsigned long handle;   /**< Used for mapping / unmapping */
-} drm_scatter_gather_t;
+};
 
 /**
  * DRM_IOCTL_SET_VERSION ioctl argument type.
  */
-typedef struct drm_set_version {
+struct drm_set_version {
        int drm_di_major;
        int drm_di_minor;
        int drm_dd_major;
        int drm_dd_minor;
-} drm_set_version_t;
+};
 
 
 #define DRM_FENCE_FLAG_EMIT                0x00000001
@@ -670,25 +663,15 @@ typedef struct drm_set_version {
 
 #define DRM_FENCE_TYPE_EXE                 0x00000001
 
-typedef struct drm_fence_arg {
-       unsigned handle;
-       int class;
-       unsigned type;
-       unsigned flags;
-       unsigned signaled;
-       unsigned expand_pad[4]; /*Future expansion */
-       enum {
-               drm_fence_create,
-               drm_fence_destroy,
-               drm_fence_reference,
-               drm_fence_unreference,
-               drm_fence_signaled,
-               drm_fence_flush,
-               drm_fence_wait,
-               drm_fence_emit,
-               drm_fence_buffers
-       } op;
-} drm_fence_arg_t;
+struct drm_fence_arg {
+       unsigned int handle;
+       unsigned int class;
+       unsigned int type;
+       unsigned int flags;
+       unsigned int signaled;
+       unsigned int pad64;
+       uint64_t expand_pad[3]; /*Future expansion */
+};
 
 /* Buffer permissions, referring to how the GPU uses the buffers.
  * these translate to fence types used for the buffers.
@@ -696,9 +679,9 @@ typedef struct drm_fence_arg {
  *  a command (batch-) buffer is exe. Can be or-ed together.
  */
 
-#define DRM_BO_FLAG_READ        0x00000001
-#define DRM_BO_FLAG_WRITE       0x00000002
-#define DRM_BO_FLAG_EXE         0x00000004
+#define DRM_BO_FLAG_READ        (1ULL << 0)
+#define DRM_BO_FLAG_WRITE       (1ULL << 1)
+#define DRM_BO_FLAG_EXE         (1ULL << 2)
 
 /*
  * Status flags. Can be read to determine the actual state of a buffer.
@@ -711,25 +694,25 @@ typedef struct drm_fence_arg {
  * or lock.
  * Flags: Acknowledge
  */
-#define DRM_BO_FLAG_NO_EVICT    0x00000010
+#define DRM_BO_FLAG_NO_EVICT    (1ULL << 4)
 
 /*
  * Mask: Require that the buffer is placed in mappable memory when validated.
  *       If not set the buffer may or may not be in mappable memory when validated.
  * Flags: If set, the buffer is in mappable memory.
  */
-#define DRM_BO_FLAG_MAPPABLE 0x00000020
+#define DRM_BO_FLAG_MAPPABLE    (1ULL << 5)
 
 /* Mask: The buffer should be shareable with other processes.
  * Flags: The buffer is shareable with other processes.
  */
-#define DRM_BO_FLAG_SHAREABLE   0x00000040
+#define DRM_BO_FLAG_SHAREABLE   (1ULL << 6)
 
 /* Mask: If set, place the buffer in cache-coherent memory if available.
  *       If clear, never place the buffer in cache coherent memory if validated.
  * Flags: The buffer is currently in cache-coherent memory.
  */
-#define DRM_BO_FLAG_CACHED      0x00000080
+#define DRM_BO_FLAG_CACHED      (1ULL << 7)
 
 /* Mask: Make sure that every time this buffer is validated,
  *       it ends up on the same location provided that the memory mask is the same.
@@ -738,23 +721,23 @@ typedef struct drm_fence_arg {
  *       part of buffer manager shutdown or locking.
  * Flags: Acknowledge.
  */
-#define DRM_BO_FLAG_NO_MOVE     0x00000100
+#define DRM_BO_FLAG_NO_MOVE     (1ULL << 8)
 
 /* Mask: Make sure the buffer is in cached memory when mapped for reading.
  * Flags: Acknowledge.
  */
-#define DRM_BO_FLAG_READ_CACHED    0x00080000
+#define DRM_BO_FLAG_READ_CACHED    (1ULL << 19)
 
 /* Mask: Force DRM_BO_FLAG_CACHED flag strictly also if it is set.
  * Flags: Acknowledge.
  */
-#define DRM_BO_FLAG_FORCE_CACHING  0x00002000
+#define DRM_BO_FLAG_FORCE_CACHING  (1ULL << 13)
 
 /*
  * Mask: Force DRM_BO_FLAG_MAPPABLE flag strictly also if it is clear.
  * Flags: Acknowledge.
  */
-#define DRM_BO_FLAG_FORCE_MAPPABLE 0x00004000
+#define DRM_BO_FLAG_FORCE_MAPPABLE (1ULL << 14)
 
 /*
  * Memory type flags that can be or'ed together in the mask, but only
@@ -762,21 +745,25 @@ typedef struct drm_fence_arg {
  */
 
 /* System memory */
-#define DRM_BO_FLAG_MEM_LOCAL  0x01000000
+#define DRM_BO_FLAG_MEM_LOCAL  (1ULL << 24)
 /* Translation table memory */
-#define DRM_BO_FLAG_MEM_TT     0x02000000
+#define DRM_BO_FLAG_MEM_TT     (1ULL << 25)
 /* Vram memory */
-#define DRM_BO_FLAG_MEM_VRAM   0x04000000
+#define DRM_BO_FLAG_MEM_VRAM   (1ULL << 26)
 /* Up to the driver to define. */
-#define DRM_BO_FLAG_MEM_PRIV0  0x08000000
-#define DRM_BO_FLAG_MEM_PRIV1  0x10000000
-#define DRM_BO_FLAG_MEM_PRIV2  0x20000000
-#define DRM_BO_FLAG_MEM_PRIV3  0x40000000
-#define DRM_BO_FLAG_MEM_PRIV4  0x80000000
+#define DRM_BO_FLAG_MEM_PRIV0  (1ULL << 27)
+#define DRM_BO_FLAG_MEM_PRIV1  (1ULL << 28)
+#define DRM_BO_FLAG_MEM_PRIV2  (1ULL << 29)
+#define DRM_BO_FLAG_MEM_PRIV3  (1ULL << 30)
+#define DRM_BO_FLAG_MEM_PRIV4  (1ULL << 31)
+/* We can add more of these now with a 64-bit flag type */
 
 /* Memory flag mask */
-#define DRM_BO_MASK_MEM         0xFF000000
-#define DRM_BO_MASK_MEMTYPE     0xFF0000A0
+#define DRM_BO_MASK_MEM         0x00000000FF000000ULL
+#define DRM_BO_MASK_MEMTYPE     0x00000000FF0000A0ULL
+
+/* Driver-private flags */
+#define DRM_BO_MASK_DRIVER      0xFFFF000000000000ULL
 
 /* Don't block on validate and map */
 #define DRM_BO_HINT_DONT_BLOCK  0x00000002
@@ -785,40 +772,46 @@ typedef struct drm_fence_arg {
 #define DRM_BO_HINT_WAIT_LAZY   0x00000008
 #define DRM_BO_HINT_ALLOW_UNFENCED_MAP 0x00000010
 
+#define DRM_BO_INIT_MAGIC 0xfe769812
+#define DRM_BO_INIT_MAJOR 0
+#define DRM_BO_INIT_MINOR 1
 
-typedef enum {
+
+enum drm_bo_type {
        drm_bo_type_dc,
        drm_bo_type_user,
        drm_bo_type_fake,
        drm_bo_type_kernel, /* for initial kernel allocations */
-}drm_bo_type_t;
-
-
-typedef struct drm_bo_arg_request {
-       unsigned handle; /* User space handle */
-       unsigned mask;
-       unsigned hint;
-       drm_u64_t size;
-       drm_bo_type_t type;
-       unsigned arg_handle;
-       drm_u64_t buffer_start;
-       unsigned page_alignment;
-       unsigned expand_pad[4]; /*Future expansion */
+};
+
+struct drm_bo_info_req {
+       uint64_t mask;
+       uint64_t flags;
+       unsigned int handle;
+       unsigned int hint;
+       unsigned int fence_class;
+       unsigned int pad64;
+};
+
+struct drm_bo_create_req {
+       uint64_t mask;
+       uint64_t size;
+       uint64_t buffer_start;
+       unsigned int hint;
+       unsigned int page_alignment;
+       enum drm_bo_type type;
+       unsigned int pad64;
+};
+
+struct drm_bo_op_req {
        enum {
-               drm_bo_create,
                drm_bo_validate,
-               drm_bo_map,
-               drm_bo_unmap,
                drm_bo_fence,
-               drm_bo_destroy,
-               drm_bo_reference,
-               drm_bo_unreference,
-               drm_bo_info,
-               drm_bo_wait_idle,
-               drm_bo_ref_fence
+               drm_bo_ref_fence,
        } op;
-} drm_bo_arg_request_t;
-
+       unsigned int arg_handle;
+       struct drm_bo_info_req bo_req;
+};
 
 /*
  * Reply flags
@@ -826,30 +819,64 @@ typedef struct drm_bo_arg_request {
 
 #define DRM_BO_REP_BUSY 0x00000001
 
-typedef struct drm_bo_arg_reply {
+struct drm_bo_info_rep {
+       uint64_t flags;
+       uint64_t mask;
+       uint64_t size;
+       uint64_t offset;
+       uint64_t arg_handle;
+       uint64_t buffer_start;
+       unsigned int handle;
+       unsigned int fence_flags;
+       unsigned int rep_flags;
+       unsigned int page_alignment;
+       unsigned int desired_tile_stride;
+       unsigned int hw_tile_stride;
+       unsigned int tile_info;
+       unsigned int pad64;
+       uint64_t expand_pad[4]; /*Future expansion */
+};
+
+struct drm_bo_arg_rep {
+       struct drm_bo_info_rep bo_info;
        int ret;
-       unsigned handle;
-       unsigned flags;
-       drm_u64_t size;
-       drm_u64_t offset;
-       drm_u64_t arg_handle;
-       unsigned mask;
-       drm_u64_t buffer_start;
-       unsigned fence_flags;
-       unsigned rep_flags;
-       unsigned page_alignment;
-       unsigned expand_pad[4]; /*Future expansion */
-}drm_bo_arg_reply_t;
-
-
-typedef struct drm_bo_arg{
-       int handled;
-       drm_u64_t next;
+       unsigned int pad64;
+};
+
+struct drm_bo_create_arg {
+       union {
+               struct drm_bo_create_req req;
+               struct drm_bo_info_rep rep;
+       } d;
+};
+
+struct drm_bo_handle_arg {
+       unsigned int handle;
+};
+
+struct drm_bo_reference_info_arg {
+       union {
+               struct drm_bo_handle_arg req;
+               struct drm_bo_info_rep rep;
+       } d;
+};
+
+struct drm_bo_map_wait_idle_arg {
        union {
-               drm_bo_arg_request_t req;
-               drm_bo_arg_reply_t rep;
+               struct drm_bo_info_req req;
+               struct drm_bo_info_rep rep;
        } d;
-} drm_bo_arg_t;
+};
+
+struct drm_bo_op_arg {
+       uint64_t next;
+       union {
+               struct drm_bo_op_req req;
+               struct drm_bo_arg_rep rep;
+       } d;
+       int handled;
+       unsigned int pad64;
+};
 
 #define DRM_BO_MEM_LOCAL 0
 #define DRM_BO_MEM_TT 1
@@ -862,25 +889,18 @@ typedef struct drm_bo_arg{
 
 #define DRM_BO_MEM_TYPES 8 /* For now. */
 
-typedef union drm_mm_init_arg{
-       struct {
-               enum {
-                       mm_init,
-                       mm_takedown,
-                       mm_query,
-                       mm_lock,
-                       mm_unlock
-               } op;
-               drm_u64_t p_offset;
-               drm_u64_t p_size;
-               unsigned mem_type;
-               unsigned expand_pad[8]; /*Future expansion */
-       } req;
-       struct {
-               drm_handle_t mm_sarea;
-               unsigned expand_pad[8]; /*Future expansion */
-       } rep;
-} drm_mm_init_arg_t;
+struct drm_mm_type_arg {
+       unsigned int mem_type;
+};
+
+struct drm_mm_init_arg {
+       unsigned int magic;
+       unsigned int major;
+       unsigned int minor;
+       unsigned int mem_type;
+       uint64_t p_offset;
+       uint64_t p_size;
+};
 
 /**
  * \name Ioctls Definitions
@@ -893,65 +913,87 @@ typedef union drm_mm_init_arg{
 #define DRM_IOW(nr,type)               _IOW(DRM_IOCTL_BASE,nr,type)
 #define DRM_IOWR(nr,type)              _IOWR(DRM_IOCTL_BASE,nr,type)
 
-#define DRM_IOCTL_VERSION              DRM_IOWR(0x00, drm_version_t)
-#define DRM_IOCTL_GET_UNIQUE           DRM_IOWR(0x01, drm_unique_t)
-#define DRM_IOCTL_GET_MAGIC            DRM_IOR( 0x02, drm_auth_t)
-#define DRM_IOCTL_IRQ_BUSID            DRM_IOWR(0x03, drm_irq_busid_t)
-#define DRM_IOCTL_GET_MAP               DRM_IOWR(0x04, drm_map_t)
-#define DRM_IOCTL_GET_CLIENT            DRM_IOWR(0x05, drm_client_t)
-#define DRM_IOCTL_GET_STATS             DRM_IOR( 0x06, drm_stats_t)
-#define DRM_IOCTL_SET_VERSION          DRM_IOWR(0x07, drm_set_version_t)
-
-#define DRM_IOCTL_SET_UNIQUE           DRM_IOW( 0x10, drm_unique_t)
-#define DRM_IOCTL_AUTH_MAGIC           DRM_IOW( 0x11, drm_auth_t)
-#define DRM_IOCTL_BLOCK                        DRM_IOWR(0x12, drm_block_t)
-#define DRM_IOCTL_UNBLOCK              DRM_IOWR(0x13, drm_block_t)
-#define DRM_IOCTL_CONTROL              DRM_IOW( 0x14, drm_control_t)
-#define DRM_IOCTL_ADD_MAP              DRM_IOWR(0x15, drm_map_t)
-#define DRM_IOCTL_ADD_BUFS             DRM_IOWR(0x16, drm_buf_desc_t)
-#define DRM_IOCTL_MARK_BUFS            DRM_IOW( 0x17, drm_buf_desc_t)
-#define DRM_IOCTL_INFO_BUFS            DRM_IOWR(0x18, drm_buf_info_t)
-#define DRM_IOCTL_MAP_BUFS             DRM_IOWR(0x19, drm_buf_map_t)
-#define DRM_IOCTL_FREE_BUFS            DRM_IOW( 0x1a, drm_buf_free_t)
-
-#define DRM_IOCTL_RM_MAP               DRM_IOW( 0x1b, drm_map_t)
-
-#define DRM_IOCTL_SET_SAREA_CTX                DRM_IOW( 0x1c, drm_ctx_priv_map_t)
-#define DRM_IOCTL_GET_SAREA_CTX        DRM_IOWR(0x1d, drm_ctx_priv_map_t)
-
-#define DRM_IOCTL_ADD_CTX              DRM_IOWR(0x20, drm_ctx_t)
-#define DRM_IOCTL_RM_CTX               DRM_IOWR(0x21, drm_ctx_t)
-#define DRM_IOCTL_MOD_CTX              DRM_IOW( 0x22, drm_ctx_t)
-#define DRM_IOCTL_GET_CTX              DRM_IOWR(0x23, drm_ctx_t)
-#define DRM_IOCTL_SWITCH_CTX           DRM_IOW( 0x24, drm_ctx_t)
-#define DRM_IOCTL_NEW_CTX              DRM_IOW( 0x25, drm_ctx_t)
-#define DRM_IOCTL_RES_CTX              DRM_IOWR(0x26, drm_ctx_res_t)
-#define DRM_IOCTL_ADD_DRAW             DRM_IOWR(0x27, drm_draw_t)
-#define DRM_IOCTL_RM_DRAW              DRM_IOWR(0x28, drm_draw_t)
-#define DRM_IOCTL_DMA                  DRM_IOWR(0x29, drm_dma_t)
-#define DRM_IOCTL_LOCK                 DRM_IOW( 0x2a, drm_lock_t)
-#define DRM_IOCTL_UNLOCK               DRM_IOW( 0x2b, drm_lock_t)
-#define DRM_IOCTL_FINISH               DRM_IOW( 0x2c, drm_lock_t)
+#define DRM_IOCTL_VERSION              DRM_IOWR(0x00, struct drm_version)
+#define DRM_IOCTL_GET_UNIQUE           DRM_IOWR(0x01, struct drm_unique)
+#define DRM_IOCTL_GET_MAGIC            DRM_IOR( 0x02, struct drm_auth)
+#define DRM_IOCTL_IRQ_BUSID            DRM_IOWR(0x03, struct drm_irq_busid)
+#define DRM_IOCTL_GET_MAP               DRM_IOWR(0x04, struct drm_map)
+#define DRM_IOCTL_GET_CLIENT            DRM_IOWR(0x05, struct drm_client)
+#define DRM_IOCTL_GET_STATS             DRM_IOR( 0x06, struct drm_stats)
+#define DRM_IOCTL_SET_VERSION          DRM_IOWR(0x07, struct drm_set_version)
+
+#define DRM_IOCTL_SET_UNIQUE           DRM_IOW( 0x10, struct drm_unique)
+#define DRM_IOCTL_AUTH_MAGIC           DRM_IOW( 0x11, struct drm_auth)
+#define DRM_IOCTL_BLOCK                        DRM_IOWR(0x12, struct drm_block)
+#define DRM_IOCTL_UNBLOCK              DRM_IOWR(0x13, struct drm_block)
+#define DRM_IOCTL_CONTROL              DRM_IOW( 0x14, struct drm_control)
+#define DRM_IOCTL_ADD_MAP              DRM_IOWR(0x15, struct drm_map)
+#define DRM_IOCTL_ADD_BUFS             DRM_IOWR(0x16, struct drm_buf_desc)
+#define DRM_IOCTL_MARK_BUFS            DRM_IOW( 0x17, struct drm_buf_desc)
+#define DRM_IOCTL_INFO_BUFS            DRM_IOWR(0x18, struct drm_buf_info)
+#define DRM_IOCTL_MAP_BUFS             DRM_IOWR(0x19, struct drm_buf_map)
+#define DRM_IOCTL_FREE_BUFS            DRM_IOW( 0x1a, struct drm_buf_free)
+
+#define DRM_IOCTL_RM_MAP               DRM_IOW( 0x1b, struct drm_map)
+
+#define DRM_IOCTL_SET_SAREA_CTX                DRM_IOW( 0x1c, struct drm_ctx_priv_map)
+#define DRM_IOCTL_GET_SAREA_CTX        DRM_IOWR(0x1d, struct drm_ctx_priv_map)
+
+#define DRM_IOCTL_ADD_CTX              DRM_IOWR(0x20, struct drm_ctx)
+#define DRM_IOCTL_RM_CTX               DRM_IOWR(0x21, struct drm_ctx)
+#define DRM_IOCTL_MOD_CTX              DRM_IOW( 0x22, struct drm_ctx)
+#define DRM_IOCTL_GET_CTX              DRM_IOWR(0x23, struct drm_ctx)
+#define DRM_IOCTL_SWITCH_CTX           DRM_IOW( 0x24, struct drm_ctx)
+#define DRM_IOCTL_NEW_CTX              DRM_IOW( 0x25, struct drm_ctx)
+#define DRM_IOCTL_RES_CTX              DRM_IOWR(0x26, struct drm_ctx_res)
+#define DRM_IOCTL_ADD_DRAW             DRM_IOWR(0x27, struct drm_draw)
+#define DRM_IOCTL_RM_DRAW              DRM_IOWR(0x28, struct drm_draw)
+#define DRM_IOCTL_DMA                  DRM_IOWR(0x29, struct drm_dma)
+#define DRM_IOCTL_LOCK                 DRM_IOW( 0x2a, struct drm_lock)
+#define DRM_IOCTL_UNLOCK               DRM_IOW( 0x2b, struct drm_lock)
+#define DRM_IOCTL_FINISH               DRM_IOW( 0x2c, struct drm_lock)
 
 #define DRM_IOCTL_AGP_ACQUIRE          DRM_IO(  0x30)
 #define DRM_IOCTL_AGP_RELEASE          DRM_IO(  0x31)
-#define DRM_IOCTL_AGP_ENABLE           DRM_IOW( 0x32, drm_agp_mode_t)
-#define DRM_IOCTL_AGP_INFO             DRM_IOR( 0x33, drm_agp_info_t)
-#define DRM_IOCTL_AGP_ALLOC            DRM_IOWR(0x34, drm_agp_buffer_t)
-#define DRM_IOCTL_AGP_FREE             DRM_IOW( 0x35, drm_agp_buffer_t)
-#define DRM_IOCTL_AGP_BIND             DRM_IOW( 0x36, drm_agp_binding_t)
-#define DRM_IOCTL_AGP_UNBIND           DRM_IOW( 0x37, drm_agp_binding_t)
+#define DRM_IOCTL_AGP_ENABLE           DRM_IOW( 0x32, struct drm_agp_mode)
+#define DRM_IOCTL_AGP_INFO             DRM_IOR( 0x33, struct drm_agp_info)
+#define DRM_IOCTL_AGP_ALLOC            DRM_IOWR(0x34, struct drm_agp_buffer)
+#define DRM_IOCTL_AGP_FREE             DRM_IOW( 0x35, struct drm_agp_buffer)
+#define DRM_IOCTL_AGP_BIND             DRM_IOW( 0x36, struct drm_agp_binding)
+#define DRM_IOCTL_AGP_UNBIND           DRM_IOW( 0x37, struct drm_agp_binding)
+
+#define DRM_IOCTL_SG_ALLOC             DRM_IOW( 0x38, struct drm_scatter_gather)
+#define DRM_IOCTL_SG_FREE              DRM_IOW( 0x39, struct drm_scatter_gather)
+
+#define DRM_IOCTL_WAIT_VBLANK          DRM_IOWR(0x3a, union drm_wait_vblank)
+
+#define DRM_IOCTL_UPDATE_DRAW           DRM_IOW(0x3f, struct drm_update_draw)
+
+#define DRM_IOCTL_MM_INIT               DRM_IOWR(0xc0, struct drm_mm_init_arg)
+#define DRM_IOCTL_MM_TAKEDOWN           DRM_IOWR(0xc1, struct drm_mm_type_arg)
+#define DRM_IOCTL_MM_LOCK               DRM_IOWR(0xc2, struct drm_mm_type_arg)
+#define DRM_IOCTL_MM_UNLOCK             DRM_IOWR(0xc3, struct drm_mm_type_arg)
+
+#define DRM_IOCTL_FENCE_CREATE          DRM_IOWR(0xc4, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_DESTROY         DRM_IOWR(0xc5, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_REFERENCE       DRM_IOWR(0xc6, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_UNREFERENCE     DRM_IOWR(0xc7, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_SIGNALED        DRM_IOWR(0xc8, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_FLUSH           DRM_IOWR(0xc9, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_WAIT            DRM_IOWR(0xca, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_EMIT            DRM_IOWR(0xcb, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_BUFFERS         DRM_IOWR(0xcc, struct drm_fence_arg)
+
+#define DRM_IOCTL_BO_CREATE             DRM_IOWR(0xcd, struct drm_bo_create_arg)
+#define DRM_IOCTL_BO_DESTROY            DRM_IOWR(0xce, struct drm_bo_handle_arg)
+#define DRM_IOCTL_BO_MAP                DRM_IOWR(0xcf, struct drm_bo_map_wait_idle_arg)
+#define DRM_IOCTL_BO_UNMAP              DRM_IOWR(0xd0, struct drm_bo_handle_arg)
+#define DRM_IOCTL_BO_REFERENCE          DRM_IOWR(0xd1, struct drm_bo_reference_info_arg)
+#define DRM_IOCTL_BO_UNREFERENCE        DRM_IOWR(0xd2, struct drm_bo_handle_arg)
+#define DRM_IOCTL_BO_OP                 DRM_IOWR(0xd3, struct drm_bo_op_arg)
+#define DRM_IOCTL_BO_INFO               DRM_IOWR(0xd4, struct drm_bo_reference_info_arg)
+#define DRM_IOCTL_BO_WAIT_IDLE          DRM_IOWR(0xd5, struct drm_bo_map_wait_idle_arg)
 
-#define DRM_IOCTL_SG_ALLOC             DRM_IOW( 0x38, drm_scatter_gather_t)
-#define DRM_IOCTL_SG_FREE              DRM_IOW( 0x39, drm_scatter_gather_t)
-
-#define DRM_IOCTL_WAIT_VBLANK          DRM_IOWR(0x3a, drm_wait_vblank_t)
-
-#define DRM_IOCTL_FENCE                 DRM_IOWR(0x3b, drm_fence_arg_t)
-#define DRM_IOCTL_BUFOBJ                DRM_IOWR(0x3d, drm_bo_arg_t)
-#define DRM_IOCTL_MM_INIT               DRM_IOWR(0x3e, drm_mm_init_arg_t)
-
-#define DRM_IOCTL_UPDATE_DRAW           DRM_IOW(0x3f, drm_update_draw_t)
 
 /*@}*/
 
@@ -966,4 +1008,53 @@ typedef union drm_mm_init_arg{
 #define DRM_COMMAND_BASE                0x40
 #define DRM_COMMAND_END                 0xA0
 
+/* typedef area */
+#if !defined(__KERNEL__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
+typedef struct drm_clip_rect drm_clip_rect_t;
+typedef struct drm_drawable_info drm_drawable_info_t;
+typedef struct drm_tex_region drm_tex_region_t;
+typedef struct drm_hw_lock drm_hw_lock_t;
+typedef struct drm_version drm_version_t;
+typedef struct drm_unique drm_unique_t;
+typedef struct drm_list drm_list_t;
+typedef struct drm_block drm_block_t;
+typedef struct drm_control drm_control_t;
+typedef enum drm_map_type drm_map_type_t;
+typedef enum drm_map_flags drm_map_flags_t;
+typedef struct drm_ctx_priv_map drm_ctx_priv_map_t;
+typedef struct drm_map drm_map_t;
+typedef struct drm_client drm_client_t;
+typedef enum drm_stat_type drm_stat_type_t;
+typedef struct drm_stats drm_stats_t;
+typedef enum drm_lock_flags drm_lock_flags_t;
+typedef struct drm_lock drm_lock_t;
+typedef enum drm_dma_flags drm_dma_flags_t;
+typedef struct drm_buf_desc drm_buf_desc_t;
+typedef struct drm_buf_info drm_buf_info_t;
+typedef struct drm_buf_free drm_buf_free_t;
+typedef struct drm_buf_pub drm_buf_pub_t;
+typedef struct drm_buf_map drm_buf_map_t;
+typedef struct drm_dma drm_dma_t;
+typedef union drm_wait_vblank drm_wait_vblank_t;
+typedef struct drm_agp_mode drm_agp_mode_t;
+typedef enum drm_ctx_flags drm_ctx_flags_t;
+typedef struct drm_ctx drm_ctx_t;
+typedef struct drm_ctx_res drm_ctx_res_t;
+typedef struct drm_draw drm_draw_t;
+typedef struct drm_update_draw drm_update_draw_t;
+typedef struct drm_auth drm_auth_t;
+typedef struct drm_irq_busid drm_irq_busid_t;
+typedef enum drm_vblank_seq_type drm_vblank_seq_type_t;
+typedef struct drm_agp_buffer drm_agp_buffer_t;
+typedef struct drm_agp_binding drm_agp_binding_t;
+typedef struct drm_agp_info drm_agp_info_t;
+typedef struct drm_scatter_gather drm_scatter_gather_t;
+typedef struct drm_set_version drm_set_version_t;
+
+typedef struct drm_fence_arg drm_fence_arg_t;
+typedef struct drm_mm_type_arg drm_mm_type_arg_t;
+typedef struct drm_mm_init_arg drm_mm_init_arg_t;
+typedef enum drm_bo_type drm_bo_type_t;
+#endif
+
 #endif
index 43d1114..34050a6 100644 (file)
 #define SAREA_DRAWABLE_CLAIMED_ENTRY    0x80000000
 
 /** SAREA drawable */
-typedef struct drm_sarea_drawable {
+struct drm_sarea_drawable {
        unsigned int stamp;
        unsigned int flags;
-} drm_sarea_drawable_t;
+};
 
 /** SAREA frame */
-typedef struct drm_sarea_frame {
+struct drm_sarea_frame {
        unsigned int x;
        unsigned int y;
        unsigned int width;
        unsigned int height;
        unsigned int fullscreen;
-} drm_sarea_frame_t;
+};
 
 /** SAREA */
-typedef struct drm_sarea {
+struct drm_sarea {
     /** first thing is always the DRM locking structure */
-       drm_hw_lock_t lock;
+       struct drm_hw_lock lock;
     /** \todo Use readers/writer lock for drm_sarea::drawable_lock */
-       drm_hw_lock_t drawable_lock;
-       drm_sarea_drawable_t drawableTable[SAREA_MAX_DRAWABLES];        /**< drawables */
-       drm_sarea_frame_t frame;        /**< frame */
+       struct drm_hw_lock drawable_lock;
+       struct drm_sarea_drawable drawableTable[SAREA_MAX_DRAWABLES];   /**< drawables */
+       struct drm_sarea_frame frame;   /**< frame */
        drm_context_t dummy_context;
-} drm_sarea_t;
+};
+
+#ifndef __KERNEL__
+typedef struct drm_sarea_drawable drm_sarea_drawable_t;
+typedef struct drm_sarea_frame drm_sarea_frame_t;
+typedef struct drm_sarea drm_sarea_t;
+#endif
 
 #endif                         /* _DRM_SAREA_H_ */
index dbc5f95..5d227d8 100644 (file)
@@ -47,7 +47,7 @@
  * the head pointer changes, so that EBUSY only happens if the ring
  * actually stalls for (eg) 3 seconds.
  */
-int i915_wait_ring(drm_device_t * dev, int n, const char *caller)
+int i915_wait_ring(struct drm_device * dev, int n, const char *caller)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        drm_i915_ring_buffer_t *ring = &(dev_priv->ring);
@@ -71,10 +71,10 @@ int i915_wait_ring(drm_device_t * dev, int n, const char *caller)
                DRM_UDELAY(1);
        }
 
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
-void i915_kernel_lost_context(drm_device_t * dev)
+void i915_kernel_lost_context(struct drm_device * dev)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        drm_i915_ring_buffer_t *ring = &(dev_priv->ring);
@@ -89,7 +89,7 @@ void i915_kernel_lost_context(drm_device_t * dev)
                dev_priv->sarea_priv->perf_boxes |= I915_BOX_RING_EMPTY;
 }
 
-static int i915_dma_cleanup(drm_device_t * dev)
+static int i915_dma_cleanup(struct drm_device * dev)
 {
        /* Make sure interrupts are disabled here because the uninstall ioctl
         * may not have been called from userspace and after dev_private
@@ -125,7 +125,7 @@ static int i915_dma_cleanup(drm_device_t * dev)
        return 0;
 }
 
-static int i915_initialize(drm_device_t * dev,
+static int i915_initialize(struct drm_device * dev,
                           drm_i915_private_t * dev_priv,
                           drm_i915_init_t * init)
 {
@@ -136,7 +136,7 @@ static int i915_initialize(drm_device_t * dev,
                DRM_ERROR("can not find sarea!\n");
                dev->dev_private = (void *)dev_priv;
                i915_dma_cleanup(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->mmio_map = drm_core_findmap(dev, init->mmio_offset);
@@ -144,7 +144,7 @@ static int i915_initialize(drm_device_t * dev,
                dev->dev_private = (void *)dev_priv;
                i915_dma_cleanup(dev);
                DRM_ERROR("can not find mmio map!\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->sarea_priv = (drm_i915_sarea_t *)
@@ -168,7 +168,7 @@ static int i915_initialize(drm_device_t * dev,
                i915_dma_cleanup(dev);
                DRM_ERROR("can not ioremap virtual address for"
                          " ring buffer\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        dev_priv->ring.virtual_start = dev_priv->ring.map.handle;
@@ -198,7 +198,7 @@ static int i915_initialize(drm_device_t * dev,
                        dev->dev_private = (void *)dev_priv;
                        i915_dma_cleanup(dev);
                        DRM_ERROR("Can not allocate hardware status page\n");
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
                dev_priv->hw_status_page = dev_priv->status_page_dmah->vaddr;
                dev_priv->dma_status_page = dev_priv->status_page_dmah->busaddr;
@@ -212,7 +212,7 @@ static int i915_initialize(drm_device_t * dev,
        return 0;
 }
 
-static int i915_dma_resume(drm_device_t * dev)
+static int i915_dma_resume(struct drm_device * dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
 
@@ -220,24 +220,24 @@ static int i915_dma_resume(drm_device_t * dev)
 
        if (!dev_priv->sarea) {
                DRM_ERROR("can not find sarea!\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (!dev_priv->mmio_map) {
                DRM_ERROR("can not find mmio map!\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (dev_priv->ring.map.handle == NULL) {
                DRM_ERROR("can not ioremap virtual address for"
                          " ring buffer\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        /* Program Hardware Status Page */
        if (!dev_priv->hw_status_page) {
                DRM_ERROR("Can not find hardware status page\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        DRM_DEBUG("hw status page @ %p\n", dev_priv->hw_status_page);
 
@@ -250,23 +250,20 @@ static int i915_dma_resume(drm_device_t * dev)
        return 0;
 }
 
-static int i915_dma_init(DRM_IOCTL_ARGS)
+static int i915_dma_init(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv;
-       drm_i915_init_t init;
+       drm_i915_init_t *init = data;
        int retcode = 0;
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_i915_init_t __user *) data,
-                                sizeof(init));
-
-       switch (init.func) {
+       switch (init->func) {
        case I915_INIT_DMA:
                dev_priv = drm_alloc(sizeof(drm_i915_private_t),
                                     DRM_MEM_DRIVER);
                if (dev_priv == NULL)
-                       return DRM_ERR(ENOMEM);
-               retcode = i915_initialize(dev, dev_priv, &init);
+                       return -ENOMEM;
+               retcode = i915_initialize(dev, dev_priv, init);
                break;
        case I915_CLEANUP_DMA:
                retcode = i915_dma_cleanup(dev);
@@ -275,7 +272,7 @@ static int i915_dma_init(DRM_IOCTL_ARGS)
                retcode = i915_dma_resume(dev);
                break;
        default:
-               retcode = DRM_ERR(EINVAL);
+               retcode = -EINVAL;
                break;
        }
 
@@ -358,14 +355,15 @@ static int validate_cmd(int cmd)
        return ret;
 }
 
-static int i915_emit_cmds(drm_device_t * dev, int __user * buffer, int dwords)
+static int i915_emit_cmds(struct drm_device * dev, int __user * buffer,
+                         int dwords)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        int i;
        RING_LOCALS;
 
        if ((dwords+1) * sizeof(int) >= dev_priv->ring.Size - 8)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        BEGIN_LP_RING((dwords+1)&~1);
 
@@ -373,17 +371,17 @@ static int i915_emit_cmds(drm_device_t * dev, int __user * buffer, int dwords)
                int cmd, sz;
 
                if (DRM_COPY_FROM_USER_UNCHECKED(&cmd, &buffer[i], sizeof(cmd)))
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
 
                if ((sz = validate_cmd(cmd)) == 0 || i + sz > dwords)
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
 
                OUT_RING(cmd);
 
                while (++i, --sz) {
                        if (DRM_COPY_FROM_USER_UNCHECKED(&cmd, &buffer[i],
                                                         sizeof(cmd))) {
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        OUT_RING(cmd);
                }
@@ -397,22 +395,22 @@ static int i915_emit_cmds(drm_device_t * dev, int __user * buffer, int dwords)
        return 0;
 }
 
-static int i915_emit_box(drm_device_t * dev,
-                        drm_clip_rect_t __user * boxes,
+static int i915_emit_box(struct drm_device * dev,
+                        struct drm_clip_rect __user * boxes,
                         int i, int DR1, int DR4)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_clip_rect_t box;
+       struct drm_clip_rect box;
        RING_LOCALS;
 
        if (DRM_COPY_FROM_USER_UNCHECKED(&box, &boxes[i], sizeof(box))) {
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        if (box.y2 <= box.y1 || box.x2 <= box.x1 || box.y2 <= 0 || box.x2 <= 0) {
                DRM_ERROR("Bad box %d,%d..%d,%d\n",
                          box.x1, box.y1, box.x2, box.y2);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (IS_I965G(dev)) {
@@ -440,7 +438,7 @@ static int i915_emit_box(drm_device_t * dev,
  * emit.  For now, do it in both places:
  */
 
-void i915_emit_breadcrumb(drm_device_t *dev)
+void i915_emit_breadcrumb(struct drm_device *dev)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        RING_LOCALS;
@@ -461,7 +459,7 @@ void i915_emit_breadcrumb(drm_device_t *dev)
 }
 
 
-int i915_emit_mi_flush(drm_device_t *dev, uint32_t flush)
+int i915_emit_mi_flush(struct drm_device *dev, uint32_t flush)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        uint32_t flush_cmd = CMD_MI_FLUSH;
@@ -482,7 +480,7 @@ int i915_emit_mi_flush(drm_device_t *dev, uint32_t flush)
 }
 
 
-static int i915_dispatch_cmdbuffer(drm_device_t * dev,
+static int i915_dispatch_cmdbuffer(struct drm_device * dev,
                                   drm_i915_cmdbuffer_t * cmd)
 {
 #ifdef I915_HAVE_FENCE
@@ -493,7 +491,7 @@ static int i915_dispatch_cmdbuffer(drm_device_t * dev,
 
        if (cmd->sz & 0x3) {
                DRM_ERROR("alignment");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        i915_kernel_lost_context(dev);
@@ -520,18 +518,18 @@ static int i915_dispatch_cmdbuffer(drm_device_t * dev,
        return 0;
 }
 
-static int i915_dispatch_batchbuffer(drm_device_t * dev,
+static int i915_dispatch_batchbuffer(struct drm_device * dev,
                                     drm_i915_batchbuffer_t * batch)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_clip_rect_t __user *boxes = batch->cliprects;
+       struct drm_clip_rect __user *boxes = batch->cliprects;
        int nbox = batch->num_cliprects;
        int i = 0, count;
        RING_LOCALS;
 
        if ((batch->start | batch->used) & 0x7) {
                DRM_ERROR("alignment");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        i915_kernel_lost_context(dev);
@@ -568,7 +566,7 @@ static int i915_dispatch_batchbuffer(drm_device_t * dev,
        return 0;
 }
 
-static void i915_do_dispatch_flip(drm_device_t * dev, int pipe, int sync)
+static void i915_do_dispatch_flip(struct drm_device * dev, int pipe, int sync)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        u32 num_pages, current_page, next_page, dspbase;
@@ -620,7 +618,7 @@ static void i915_do_dispatch_flip(drm_device_t * dev, int pipe, int sync)
        dev_priv->sarea_priv->pf_current_page |= next_page << shift;
 }
 
-void i915_dispatch_flip(drm_device_t * dev, int pipes, int sync)
+void i915_dispatch_flip(struct drm_device * dev, int pipes, int sync)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        int i;
@@ -642,7 +640,7 @@ void i915_dispatch_flip(drm_device_t * dev, int pipes, int sync)
 #endif
 }
 
-static int i915_quiescent(drm_device_t * dev)
+static int i915_quiescent(struct drm_device * dev)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
 
@@ -650,74 +648,68 @@ static int i915_quiescent(drm_device_t * dev)
        return i915_wait_ring(dev, dev_priv->ring.Size - 8, __FUNCTION__);
 }
 
-static int i915_flush_ioctl(DRM_IOCTL_ARGS)
+static int i915_flush_ioctl(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv)
 {
-       DRM_DEVICE;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return i915_quiescent(dev);
 }
 
-static int i915_batchbuffer(DRM_IOCTL_ARGS)
+static int i915_batchbuffer(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *)
            dev_priv->sarea_priv;
-       drm_i915_batchbuffer_t batch;
+       drm_i915_batchbuffer_t *batch = data;
        int ret;
 
        if (!dev_priv->allow_batchbuffer) {
                DRM_ERROR("Batchbuffer ioctl disabled\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(batch, (drm_i915_batchbuffer_t __user *) data,
-                                sizeof(batch));
-
        DRM_DEBUG("i915 batchbuffer, start %x used %d cliprects %d\n",
-                 batch.start, batch.used, batch.num_cliprects);
+                 batch->start, batch->used, batch->num_cliprects);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       if (batch.num_cliprects && DRM_VERIFYAREA_READ(batch.cliprects,
-                                                      batch.num_cliprects *
-                                                      sizeof(drm_clip_rect_t)))
-               return DRM_ERR(EFAULT);
+       if (batch->num_cliprects && DRM_VERIFYAREA_READ(batch->cliprects,
+                                                       batch->num_cliprects *
+                                                       sizeof(struct drm_clip_rect)))
+               return -EFAULT;
 
-       ret = i915_dispatch_batchbuffer(dev, &batch);
+       ret = i915_dispatch_batchbuffer(dev, batch);
 
        sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
        return ret;
 }
 
-static int i915_cmdbuffer(DRM_IOCTL_ARGS)
+static int i915_cmdbuffer(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *)
            dev_priv->sarea_priv;
-       drm_i915_cmdbuffer_t cmdbuf;
+       drm_i915_cmdbuffer_t *cmdbuf = data;
        int ret;
 
-       DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_i915_cmdbuffer_t __user *) data,
-                                sizeof(cmdbuf));
-
        DRM_DEBUG("i915 cmdbuffer, buf %p sz %d cliprects %d\n",
-                 cmdbuf.buf, cmdbuf.sz, cmdbuf.num_cliprects);
+                 cmdbuf->buf, cmdbuf->sz, cmdbuf->num_cliprects);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       if (cmdbuf.num_cliprects &&
-           DRM_VERIFYAREA_READ(cmdbuf.cliprects,
-                               cmdbuf.num_cliprects *
-                               sizeof(drm_clip_rect_t))) {
+       if (cmdbuf->num_cliprects &&
+           DRM_VERIFYAREA_READ(cmdbuf->cliprects,
+                               cmdbuf->num_cliprects *
+                               sizeof(struct drm_clip_rect))) {
                DRM_ERROR("Fault accessing cliprects\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
-       ret = i915_dispatch_cmdbuffer(dev, &cmdbuf);
+       ret = i915_dispatch_cmdbuffer(dev, cmdbuf);
        if (ret) {
                DRM_ERROR("i915_dispatch_cmdbuffer failed\n");
                return ret;
@@ -727,7 +719,7 @@ static int i915_cmdbuffer(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int i915_do_cleanup_pageflip(drm_device_t * dev)
+static int i915_do_cleanup_pageflip(struct drm_device * dev)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        int i, pipes, num_pages = dev_priv->sarea_priv->third_handle ? 3 : 2;
@@ -749,46 +741,39 @@ static int i915_do_cleanup_pageflip(drm_device_t * dev)
        return 0;
 }
 
-static int i915_flip_bufs(DRM_IOCTL_ARGS)
+static int i915_flip_bufs(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_i915_flip_t param;
+       drm_i915_flip_t *param = data;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(param, (drm_i915_flip_t __user *) data,
-                                sizeof(param));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       if (param.pipes & ~0x3) {
+       if (param->pipes & ~0x3) {
                DRM_ERROR("Invalid pipes 0x%x, only <= 0x3 is valid\n",
-                         param.pipes);
-               return DRM_ERR(EINVAL);
+                         param->pipes);
+               return -EINVAL;
        }
 
-       i915_dispatch_flip(dev, param.pipes, 0);
+       i915_dispatch_flip(dev, param->pipes, 0);
 
        return 0;
 }
 
 
-static int i915_getparam(DRM_IOCTL_ARGS)
+static int i915_getparam(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_getparam_t param;
+       drm_i915_getparam_t *param = data;
        int value;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(param, (drm_i915_getparam_t __user *) data,
-                                sizeof(param));
-
-       switch (param.param) {
+       switch (param->param) {
        case I915_PARAM_IRQ_ACTIVE:
                value = dev->irq ? 1 : 0;
                break;
@@ -799,45 +784,42 @@ static int i915_getparam(DRM_IOCTL_ARGS)
                value = READ_BREADCRUMB(dev_priv);
                break;
        default:
-               DRM_ERROR("Unknown parameter %d\n", param.param);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("Unknown parameter %d\n", param->param);
+               return -EINVAL;
        }
 
-       if (DRM_COPY_TO_USER(param.value, &value, sizeof(int))) {
+       if (DRM_COPY_TO_USER(param->value, &value, sizeof(int))) {
                DRM_ERROR("DRM_COPY_TO_USER failed\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
 }
 
-static int i915_setparam(DRM_IOCTL_ARGS)
+static int i915_setparam(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_setparam_t param;
+       drm_i915_setparam_t *param = data;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(param, (drm_i915_setparam_t __user *) data,
-                                sizeof(param));
-
-       switch (param.param) {
+       switch (param->param) {
        case I915_SETPARAM_USE_MI_BATCHBUFFER_START:
-               dev_priv->use_mi_batchbuffer_start = param.value;
+               dev_priv->use_mi_batchbuffer_start = param->value;
                break;
        case I915_SETPARAM_TEX_LRU_LOG_GRANULARITY:
-               dev_priv->tex_lru_log_granularity = param.value;
+               dev_priv->tex_lru_log_granularity = param->value;
                break;
        case I915_SETPARAM_ALLOW_BATCHBUFFER:
-               dev_priv->allow_batchbuffer = param.value;
+               dev_priv->allow_batchbuffer = param->value;
                break;
        default:
-               DRM_ERROR("unknown parameter %d\n", param.param);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("unknown parameter %d\n", param->param);
+               return -EINVAL;
        }
 
        return 0;
@@ -853,68 +835,68 @@ drm_i915_mmio_entry_t mmio_table[] = {
 
 static int mmio_table_size = sizeof(mmio_table)/sizeof(drm_i915_mmio_entry_t);
 
-static int i915_mmio(DRM_IOCTL_ARGS)
+static int i915_mmio(struct drm_device *dev, void *data,
+                    struct drm_file *file_priv)
 {
-       char buf[32];
-       DRM_DEVICE;
+       uint32_t buf[8];
        drm_i915_private_t *dev_priv = dev->dev_private;
        drm_i915_mmio_entry_t *e;        
-       drm_i915_mmio_t mmio;
+       drm_i915_mmio_t *mmio = data;
        void __iomem *base;
+       int i;
+
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
-       DRM_COPY_FROM_USER_IOCTL(mmio, (drm_i915_mmio_t __user *) data,
-                                sizeof(mmio));
 
-       if (mmio.reg >= mmio_table_size)
-               return DRM_ERR(EINVAL);
+       if (mmio->reg >= mmio_table_size)
+               return -EINVAL;
 
-       e = &mmio_table[mmio.reg];
+       e = &mmio_table[mmio->reg];
        base = (u8 *) dev_priv->mmio_map->handle + e->offset;
 
-        switch (mmio.read_write) {
+       switch (mmio->read_write) {
                case I915_MMIO_READ:
                        if (!(e->flag & I915_MMIO_MAY_READ))
-                               return DRM_ERR(EINVAL);
-                       memcpy_fromio(buf, base, e->size);
-                       if (DRM_COPY_TO_USER(mmio.data, buf, e->size)) {
+                               return -EINVAL;
+                       for (i = 0; i < e->size / 4; i++)
+                               buf[i] = I915_READ(e->offset + i * 4);
+                       if (DRM_COPY_TO_USER(mmio->data, buf, e->size)) {
                                DRM_ERROR("DRM_COPY_TO_USER failed\n");
-                               return DRM_ERR(EFAULT);
+                               return -EFAULT;
                        }
                        break;
 
                case I915_MMIO_WRITE:
                        if (!(e->flag & I915_MMIO_MAY_WRITE))
-                               return DRM_ERR(EINVAL);
-                       if(DRM_COPY_FROM_USER(buf, mmio.data, e->size)) {
+                               return -EINVAL;
+                       if(DRM_COPY_FROM_USER(buf, mmio->data, e->size)) {
                                DRM_ERROR("DRM_COPY_TO_USER failed\n");
-                               return DRM_ERR(EFAULT);
+                               return -EFAULT;
                        }
-                       memcpy_toio(base, buf, e->size);
+                       for (i = 0; i < e->size / 4; i++)
+                               I915_WRITE(e->offset + i * 4, buf[i]);
                        break;
        }
        return 0;
 }
 
-static int i915_set_status_page(DRM_IOCTL_ARGS)
+static int i915_set_status_page(struct drm_device *dev, void *data,
+                               struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_hws_addr_t hws;
+       drm_i915_hws_addr_t *hws = data;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
-       DRM_COPY_FROM_USER_IOCTL(hws, (drm_i915_hws_addr_t __user *) data,
-                       sizeof(hws));
-       printk(KERN_DEBUG "set status page addr 0x%08x\n", (u32)hws.addr);
+       DRM_DEBUG("set status page addr 0x%08x\n", (u32)hws->addr);
 
-       dev_priv->status_gfx_addr = hws.addr & (0x1ffff<<12);
+       dev_priv->status_gfx_addr = hws->addr & (0x1ffff<<12);
 
-       dev_priv->hws_map.offset = dev->agp->agp_info.aper_base + hws.addr;
+       dev_priv->hws_map.offset = dev->agp->base + hws->addr;
        dev_priv->hws_map.size = 4*1024;
        dev_priv->hws_map.type = 0;
        dev_priv->hws_map.flags = 0;
@@ -927,7 +909,7 @@ static int i915_set_status_page(DRM_IOCTL_ARGS)
                dev_priv->status_gfx_addr = 0;
                DRM_ERROR("can not ioremap virtual address for"
                                " G33 hw status page\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        dev_priv->hw_status_page = dev_priv->hws_map.handle;
 
@@ -939,7 +921,7 @@ static int i915_set_status_page(DRM_IOCTL_ARGS)
        return 0;
 }
 
-int i915_driver_load(drm_device_t *dev, unsigned long flags)
+int i915_driver_load(struct drm_device *dev, unsigned long flags)
 {
        /* i915 has 4 more counters */
        dev->counters += 4;
@@ -951,7 +933,7 @@ int i915_driver_load(drm_device_t *dev, unsigned long flags)
        return 0;
 }
 
-void i915_driver_lastclose(drm_device_t * dev)
+void i915_driver_lastclose(struct drm_device * dev)
 {
        if (dev->dev_private) {
                drm_i915_private_t *dev_priv = dev->dev_private;
@@ -961,33 +943,33 @@ void i915_driver_lastclose(drm_device_t * dev)
        i915_dma_cleanup(dev);
 }
 
-void i915_driver_preclose(drm_device_t * dev, DRMFILE filp)
+void i915_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
 {
        if (dev->dev_private) {
                drm_i915_private_t *dev_priv = dev->dev_private;
-               i915_mem_release(dev, filp, dev_priv->agp_heap);
+               i915_mem_release(dev, file_priv, dev_priv->agp_heap);
        }
 }
 
-drm_ioctl_desc_t i915_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_I915_INIT)] = {i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_I915_FLUSH)] = {i915_flush_ioctl, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_FLIP)] = {i915_flip_bufs, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_BATCHBUFFER)] = {i915_batchbuffer, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_IRQ_EMIT)] = {i915_irq_emit, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_IRQ_WAIT)] = {i915_irq_wait, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_GETPARAM)] = {i915_getparam, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_SETPARAM)] = {i915_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_I915_ALLOC)] = {i915_mem_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_FREE)] = {i915_mem_free, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_INIT_HEAP)] = {i915_mem_init_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_I915_CMDBUFFER)] = {i915_cmdbuffer, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_DESTROY_HEAP)] = { i915_mem_destroy_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_I915_SET_VBLANK_PIPE)] = { i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY },
-       [DRM_IOCTL_NR(DRM_I915_GET_VBLANK_PIPE)] = { i915_vblank_pipe_get, DRM_AUTH },
-       [DRM_IOCTL_NR(DRM_I915_VBLANK_SWAP)] = {i915_vblank_swap, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_MMIO)] = {i915_mmio, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_I915_HWS_ADDR)] = {i915_set_status_page, DRM_AUTH},
+struct drm_ioctl_desc i915_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_I915_FLUSH, i915_flush_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_FLIP, i915_flip_bufs, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_BATCHBUFFER, i915_batchbuffer, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_IRQ_EMIT, i915_irq_emit, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_IRQ_WAIT, i915_irq_wait, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_GETPARAM, i915_getparam, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_SETPARAM, i915_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_I915_ALLOC, i915_mem_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_FREE, i915_mem_free, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_INIT_HEAP, i915_mem_init_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_I915_CMDBUFFER, i915_cmdbuffer, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_DESTROY_HEAP,  i915_mem_destroy_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
+       DRM_IOCTL_DEF(DRM_I915_SET_VBLANK_PIPE,  i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
+       DRM_IOCTL_DEF(DRM_I915_GET_VBLANK_PIPE,  i915_vblank_pipe_get, DRM_AUTH ),
+       DRM_IOCTL_DEF(DRM_I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_MMIO, i915_mmio, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH),
 };
 
 int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
@@ -1003,7 +985,7 @@ int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
  * \returns
  * A value of 1 is always retured to indictate every i9x5 is AGP.
  */
-int i915_driver_device_is_agp(drm_device_t * dev)
+int i915_driver_device_is_agp(struct drm_device * dev)
 {
        return 1;
 }
index 1c6ff4d..3a90df6 100644 (file)
@@ -64,7 +64,7 @@ typedef struct _drm_i915_init {
 } drm_i915_init_t;
 
 typedef struct _drm_i915_sarea {
-       drm_tex_region_t texList[I915_NR_TEX_REGIONS + 1];
+       struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1];
        int last_upload;        /* last time texture was uploaded */
        int last_enqueue;       /* last time a buffer was enqueued */
        int last_dispatch;      /* age of the most recently dispatched buffer */
@@ -194,7 +194,7 @@ typedef struct _drm_i915_batchbuffer {
        int DR1;                /* hw flags for GFX_OP_DRAWRECT_INFO */
        int DR4;                /* window origin for GFX_OP_DRAWRECT_INFO */
        int num_cliprects;      /* mulitpass with multiple cliprects? */
-       drm_clip_rect_t __user *cliprects;      /* pointer to userspace cliprects */
+       struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */
 } drm_i915_batchbuffer_t;
 
 /* As above, but pass a pointer to userspace buffer which can be
@@ -206,7 +206,7 @@ typedef struct _drm_i915_cmdbuffer {
        int DR1;                /* hw flags for GFX_OP_DRAWRECT_INFO */
        int DR4;                /* window origin for GFX_OP_DRAWRECT_INFO */
        int num_cliprects;      /* mulitpass with multiple cliprects? */
-       drm_clip_rect_t __user *cliprects;      /* pointer to userspace cliprects */
+       struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */
 } drm_i915_cmdbuffer_t;
 
 /* Userspace can request & wait on irq's:
@@ -283,7 +283,7 @@ typedef struct drm_i915_vblank_pipe {
  */
 typedef struct drm_i915_vblank_swap {
        drm_drawable_t drawable;
-       drm_vblank_seq_type_t seqtype;
+       enum drm_vblank_seq_type seqtype;
        unsigned int sequence;
 } drm_i915_vblank_swap_t;
 
index e043299..e641fdc 100644 (file)
 #define DRIVER_DESC            "Intel Graphics"
 #define DRIVER_DATE            "20070209"
 
+#if defined(__linux__)
+#define I915_HAVE_FENCE
+#define I915_HAVE_BUFFER
+#endif
+
 /* Interface history:
  *
  * 1.1: Original.
  * 1.9: Usable page flipping and triple buffering
  */
 #define DRIVER_MAJOR           1
+#if defined(I915_HAVE_FENCE) && defined(I915_HAVE_BUFFER)
 #define DRIVER_MINOR           9
-#define DRIVER_PATCHLEVEL      0
-
-#if defined(__linux__)
-#define I915_HAVE_FENCE
-#define I915_HAVE_BUFFER
+#else
+#define DRIVER_MINOR           6
 #endif
+#define DRIVER_PATCHLEVEL      0
 
 typedef struct _drm_i915_ring_buffer {
        int tail_mask;
@@ -77,7 +81,7 @@ struct mem_block {
        struct mem_block *prev;
        int start;
        int size;
-       DRMFILE filp;           /* 0: free, -1: heap, other: real files */
+       struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
 };
 
 typedef struct _drm_i915_vbl_swap {
@@ -114,7 +118,7 @@ typedef struct drm_i915_private {
        struct mem_block *agp_heap;
        unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds;
        int vblank_pipe;
-       spinlock_t user_irq_lock;
+       DRM_SPINTYPE user_irq_lock;
        int user_irq_refcount;
        int fence_irq_on;
        uint32_t irq_enable_reg;
@@ -129,7 +133,7 @@ typedef struct drm_i915_private {
 #ifdef I915_HAVE_BUFFER
        void *agp_iomap;
 #endif
-       spinlock_t swaps_lock;
+       DRM_SPINTYPE swaps_lock;
        drm_i915_vbl_swap_t vbl_swaps;
        unsigned int swaps_pending;
 } drm_i915_private_t;
@@ -141,70 +145,81 @@ enum intel_chip_family {
        CHIP_I965 = 0x08,
 };
 
-extern drm_ioctl_desc_t i915_ioctls[];
+extern struct drm_ioctl_desc i915_ioctls[];
 extern int i915_max_ioctl;
 
                                /* i915_dma.c */
-extern void i915_kernel_lost_context(drm_device_t * dev);
+extern void i915_kernel_lost_context(struct drm_device * dev);
 extern int i915_driver_load(struct drm_device *, unsigned long flags);
-extern void i915_driver_lastclose(drm_device_t * dev);
-extern void i915_driver_preclose(drm_device_t * dev, DRMFILE filp);
-extern int i915_driver_device_is_agp(drm_device_t * dev);
+extern void i915_driver_lastclose(struct drm_device * dev);
+extern void i915_driver_preclose(struct drm_device *dev,
+                                struct drm_file *file_priv);
+extern int i915_driver_device_is_agp(struct drm_device * dev);
 extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
                              unsigned long arg);
-extern void i915_emit_breadcrumb(drm_device_t *dev);
-extern void i915_dispatch_flip(drm_device_t * dev, int pipes, int sync);
-extern int i915_emit_mi_flush(drm_device_t *dev, uint32_t flush);
+extern void i915_emit_breadcrumb(struct drm_device *dev);
+extern void i915_dispatch_flip(struct drm_device * dev, int pipes, int sync);
+extern int i915_emit_mi_flush(struct drm_device *dev, uint32_t flush);
 extern int i915_driver_firstopen(struct drm_device *dev);
 
 /* i915_irq.c */
-extern int i915_irq_emit(DRM_IOCTL_ARGS);
-extern int i915_irq_wait(DRM_IOCTL_ARGS);
+extern int i915_irq_emit(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int i915_irq_wait(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
 
-extern int i915_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence);
-extern int i915_driver_vblank_wait2(drm_device_t *dev, unsigned int *sequence);
+extern int i915_driver_vblank_wait(struct drm_device *dev, unsigned int *sequence);
+extern int i915_driver_vblank_wait2(struct drm_device *dev, unsigned int *sequence);
 extern irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS);
-extern void i915_driver_irq_preinstall(drm_device_t * dev);
-extern void i915_driver_irq_postinstall(drm_device_t * dev);
-extern void i915_driver_irq_uninstall(drm_device_t * dev);
-extern int i915_vblank_pipe_set(DRM_IOCTL_ARGS);
-extern int i915_vblank_pipe_get(DRM_IOCTL_ARGS);
-extern int i915_emit_irq(drm_device_t * dev);
+extern void i915_driver_irq_preinstall(struct drm_device * dev);
+extern void i915_driver_irq_postinstall(struct drm_device * dev);
+extern void i915_driver_irq_uninstall(struct drm_device * dev);
+extern int i915_vblank_pipe_set(struct drm_device *dev, void *data,
+                               struct drm_file *file_priv);
+extern int i915_vblank_pipe_get(struct drm_device *dev, void *data,
+                               struct drm_file *file_priv);
+extern int i915_emit_irq(struct drm_device * dev);
 extern void i915_user_irq_on(drm_i915_private_t *dev_priv);
 extern void i915_user_irq_off(drm_i915_private_t *dev_priv);
-extern int i915_vblank_swap(DRM_IOCTL_ARGS);
+extern int i915_vblank_swap(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv);
 
 /* i915_mem.c */
-extern int i915_mem_alloc(DRM_IOCTL_ARGS);
-extern int i915_mem_free(DRM_IOCTL_ARGS);
-extern int i915_mem_init_heap(DRM_IOCTL_ARGS);
-extern int i915_mem_destroy_heap(DRM_IOCTL_ARGS);
+extern int i915_mem_alloc(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv);
+extern int i915_mem_free(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int i915_mem_init_heap(struct drm_device *dev, void *data,
+                             struct drm_file *file_priv);
+extern int i915_mem_destroy_heap(struct drm_device *dev, void *data,
+                                struct drm_file *file_priv);
 extern void i915_mem_takedown(struct mem_block **heap);
-extern void i915_mem_release(drm_device_t * dev,
-                            DRMFILE filp, struct mem_block *heap);
+extern void i915_mem_release(struct drm_device * dev,
+                            struct drm_file *file_priv,
+                            struct mem_block *heap);
 #ifdef I915_HAVE_FENCE
 /* i915_fence.c */
 
 
-extern void i915_fence_handler(drm_device_t *dev);
-extern int i915_fence_emit_sequence(drm_device_t *dev, uint32_t class,
+extern void i915_fence_handler(struct drm_device *dev);
+extern int i915_fence_emit_sequence(struct drm_device *dev, uint32_t class,
                                    uint32_t flags,
                                    uint32_t *sequence, 
                                    uint32_t *native_type);
-extern void i915_poke_flush(drm_device_t *dev, uint32_t class);
-extern int i915_fence_has_irq(drm_device_t *dev, uint32_t class, uint32_t flags);
+extern void i915_poke_flush(struct drm_device *dev, uint32_t class);
+extern int i915_fence_has_irq(struct drm_device *dev, uint32_t class, uint32_t flags);
 #endif
 
 #ifdef I915_HAVE_BUFFER
 /* i915_buffer.c */
-extern drm_ttm_backend_t *i915_create_ttm_backend_entry(drm_device_t *dev);
-extern int i915_fence_types(drm_buffer_object_t *bo, uint32_t *class, uint32_t *type);
-extern int i915_invalidate_caches(drm_device_t *dev, uint32_t buffer_flags);
-extern int i915_init_mem_type(drm_device_t *dev, uint32_t type,
-                              drm_mem_type_manager_t *man);
-extern uint32_t i915_evict_mask(drm_buffer_object_t *bo);
-extern int i915_move(drm_buffer_object_t *bo, int evict,
-               int no_wait, drm_bo_mem_reg_t *new_mem);
+extern struct drm_ttm_backend *i915_create_ttm_backend_entry(struct drm_device *dev);
+extern int i915_fence_types(struct drm_buffer_object *bo, uint32_t *type);
+extern int i915_invalidate_caches(struct drm_device *dev, uint64_t buffer_flags);
+extern int i915_init_mem_type(struct drm_device *dev, uint32_t type,
+                              struct drm_mem_type_manager *man);
+extern uint32_t i915_evict_mask(struct drm_buffer_object *bo);
+extern int i915_move(struct drm_buffer_object *bo, int evict,
+               int no_wait, struct drm_bo_mem_reg *new_mem);
 
 #endif
 
@@ -245,7 +260,7 @@ extern int i915_move(drm_buffer_object_t *bo, int evict,
        I915_WRITE(LP_RING + RING_TAIL, outring);                       \
 } while(0)
 
-extern int i915_wait_ring(drm_device_t * dev, int n, const char *caller);
+extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
 
 #define GFX_OP_USER_INTERRUPT          ((0<<29)|(2<<23))
 #define GFX_OP_BREAKPOINT_INTERRUPT    ((0<<29)|(1<<23))
index 2f6a6b9..1056b3e 100644 (file)
  * This function must be called with the drawable spinlock held.
  */
 static void
-i915_dispatch_vsync_flip(drm_device_t *dev, drm_drawable_info_t *drw, int pipe)
+i915_dispatch_vsync_flip(struct drm_device *dev, struct drm_drawable_info *drw,
+                        int pipe)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        drm_i915_sarea_t *sarea_priv = dev_priv->sarea_priv;
        u16 x1, y1, x2, y2;
        int pf_pipes = 1 << pipe;
 
+       DRM_SPINLOCK_ASSERT(&dev->drw_lock);
+
        /* If the window is visible on the other pipe, we have to flip on that
         * pipe as well.
         */
@@ -67,7 +70,7 @@ i915_dispatch_vsync_flip(drm_device_t *dev, drm_drawable_info_t *drw, int pipe)
 
        if (x2 > 0 && y2 > 0) {
                int i, num_rects = drw->num_rects;
-               drm_clip_rect_t *rect = drw->rects;
+               struct drm_clip_rect *rect = drw->rects;
 
                for (i = 0; i < num_rects; i++)
                        if (!(rect[i].x1 >= x2 || rect[i].y1 >= y2 ||
@@ -86,15 +89,14 @@ i915_dispatch_vsync_flip(drm_device_t *dev, drm_drawable_info_t *drw, int pipe)
  *
  * This function will be called with the HW lock held.
  */
-static void i915_vblank_tasklet(drm_device_t *dev)
+static void i915_vblank_tasklet(struct drm_device *dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-       unsigned long irqflags;
        struct list_head *list, *tmp, hits, *hit;
        int nhits, nrects, slice[2], upper[2], lower[2], i, num_pages;
        unsigned counter[2] = { atomic_read(&dev->vbl_received),
                                atomic_read(&dev->vbl_received2) };
-       drm_drawable_info_t *drw;
+       struct drm_drawable_info *drw;
        drm_i915_sarea_t *sarea_priv = dev_priv->sarea_priv;
        u32 cpp = dev_priv->cpp,  offsets[3];
        u32 cmd = (cpp == 4) ? (XY_SRC_COPY_BLT_CMD |
@@ -111,7 +113,12 @@ static void i915_vblank_tasklet(drm_device_t *dev)
 
        nhits = nrects = 0;
 
-       spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
+       /* No irqsave/restore necessary.  This tasklet may be run in an
+        * interrupt context or normal context, but we don't have to worry
+        * about getting interrupted by something acquiring the lock, because
+        * we are the interrupt context thing that acquires the lock.
+        */
+       DRM_SPINLOCK(&dev_priv->swaps_lock);
 
        /* Find buffer swaps scheduled for this vertical blank */
        list_for_each_safe(list, tmp, &dev_priv->vbl_swaps.head) {
@@ -124,22 +131,22 @@ static void i915_vblank_tasklet(drm_device_t *dev)
                list_del(list);
                dev_priv->swaps_pending--;
 
-               spin_unlock(&dev_priv->swaps_lock);
-               spin_lock(&dev->drw_lock);
+               DRM_SPINUNLOCK(&dev_priv->swaps_lock);
+               DRM_SPINLOCK(&dev->drw_lock);
 
                drw = drm_get_drawable_info(dev, vbl_swap->drw_id);
 
                if (!drw) {
-                       spin_unlock(&dev->drw_lock);
+                       DRM_SPINUNLOCK(&dev->drw_lock);
                        drm_free(vbl_swap, sizeof(*vbl_swap), DRM_MEM_DRIVER);
-                       spin_lock(&dev_priv->swaps_lock);
+                       DRM_SPINLOCK(&dev_priv->swaps_lock);
                        continue;
                }
 
                list_for_each(hit, &hits) {
                        drm_i915_vbl_swap_t *swap_cmp =
                                list_entry(hit, drm_i915_vbl_swap_t, head);
-                       drm_drawable_info_t *drw_cmp =
+                       struct drm_drawable_info *drw_cmp =
                                drm_get_drawable_info(dev, swap_cmp->drw_id);
 
                        if (drw_cmp &&
@@ -149,7 +156,7 @@ static void i915_vblank_tasklet(drm_device_t *dev)
                        }
                }
 
-               spin_unlock(&dev->drw_lock);
+               DRM_SPINUNLOCK(&dev->drw_lock);
 
                /* List of hits was empty, or we reached the end of it */
                if (hit == &hits)
@@ -157,16 +164,15 @@ static void i915_vblank_tasklet(drm_device_t *dev)
 
                nhits++;
 
-               spin_lock(&dev_priv->swaps_lock);
+               DRM_SPINLOCK(&dev_priv->swaps_lock);
        }
 
+       DRM_SPINUNLOCK(&dev->drw_lock);
+
        if (nhits == 0) {
-               spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
                return;
        }
 
-       spin_unlock(&dev_priv->swaps_lock);
-
        i915_kernel_lost_context(dev);
 
        upper[0] = upper[1] = 0;
@@ -180,7 +186,7 @@ static void i915_vblank_tasklet(drm_device_t *dev)
        offsets[2] = sarea_priv->third_offset;
        num_pages = sarea_priv->third_handle ? 3 : 2;
 
-       spin_lock(&dev->drw_lock);
+       DRM_SPINLOCK(&dev->drw_lock);
 
        /* Emit blits for buffer swaps, partitioning both outputs into as many
         * slices as there are buffer swaps scheduled in order to avoid tearing
@@ -198,7 +204,7 @@ static void i915_vblank_tasklet(drm_device_t *dev)
                list_for_each(hit, &hits) {
                        drm_i915_vbl_swap_t *swap_hit =
                                list_entry(hit, drm_i915_vbl_swap_t, head);
-                       drm_clip_rect_t *rect;
+                       struct drm_clip_rect *rect;
                        int num_rects, pipe, front, back;
                        unsigned short top, bottom;
 
@@ -262,7 +268,7 @@ static void i915_vblank_tasklet(drm_device_t *dev)
                }
        }
 
-       spin_unlock_irqrestore(&dev->drw_lock, irqflags);
+       DRM_SPINUNLOCK(&dev->drw_lock);
 
        list_for_each_safe(hit, tmp, &hits) {
                drm_i915_vbl_swap_t *swap_hit =
@@ -276,7 +282,7 @@ static void i915_vblank_tasklet(drm_device_t *dev)
 
 irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
 {
-       drm_device_t *dev = (drm_device_t *) arg;
+       struct drm_device *dev = (struct drm_device *) arg;
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        u16 temp;
        u32 pipea_stats, pipeb_stats;
@@ -338,7 +344,7 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
        return IRQ_HANDLED;
 }
 
-int i915_emit_irq(drm_device_t * dev)
+int i915_emit_irq(struct drm_device * dev)
 {
        
        drm_i915_private_t *dev_priv = dev->dev_private;
@@ -362,27 +368,27 @@ int i915_emit_irq(drm_device_t * dev)
 
 void i915_user_irq_on(drm_i915_private_t *dev_priv)
 {
-       spin_lock(&dev_priv->user_irq_lock);
+       DRM_SPINLOCK(&dev_priv->user_irq_lock);
        if (dev_priv->irq_enabled && (++dev_priv->user_irq_refcount == 1)){
                dev_priv->irq_enable_reg |= USER_INT_FLAG;
                I915_WRITE16(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
        }
-       spin_unlock(&dev_priv->user_irq_lock);
+       DRM_SPINUNLOCK(&dev_priv->user_irq_lock);
 
 }
                
 void i915_user_irq_off(drm_i915_private_t *dev_priv)
 {
-       spin_lock(&dev_priv->user_irq_lock);
+       DRM_SPINLOCK(&dev_priv->user_irq_lock);
        if (dev_priv->irq_enabled && (--dev_priv->user_irq_refcount == 0)) {
                //              dev_priv->irq_enable_reg &= ~USER_INT_FLAG;
                //              I915_WRITE16(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
        }
-       spin_unlock(&dev_priv->user_irq_lock);
+       DRM_SPINUNLOCK(&dev_priv->user_irq_lock);
 }
                
 
-static int i915_wait_irq(drm_device_t * dev, int irq_nr)
+static int i915_wait_irq(struct drm_device * dev, int irq_nr)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        int ret = 0;
@@ -400,7 +406,7 @@ static int i915_wait_irq(drm_device_t * dev, int irq_nr)
                    READ_BREADCRUMB(dev_priv) >= irq_nr);
        i915_user_irq_off(dev_priv);
 
-       if (ret == DRM_ERR(EBUSY)) {
+       if (ret == -EBUSY) {
                DRM_ERROR("%s: EBUSY -- rec: %d emitted: %d\n",
                          __FUNCTION__,
                          READ_BREADCRUMB(dev_priv), (int)dev_priv->counter);
@@ -410,7 +416,8 @@ static int i915_wait_irq(drm_device_t * dev, int irq_nr)
        return ret;
 }
 
-static int i915_driver_vblank_do_wait(drm_device_t *dev, unsigned int *sequence,
+static int i915_driver_vblank_do_wait(struct drm_device *dev,
+                                     unsigned int *sequence,
                                      atomic_t *counter)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
@@ -419,7 +426,7 @@ static int i915_driver_vblank_do_wait(drm_device_t *dev, unsigned int *sequence,
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        DRM_WAIT_ON(ret, dev->vbl_queue, 3 * DRM_HZ,
@@ -431,40 +438,36 @@ static int i915_driver_vblank_do_wait(drm_device_t *dev, unsigned int *sequence,
        return ret;
 }
 
-int i915_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence)
+int i915_driver_vblank_wait(struct drm_device *dev, unsigned int *sequence)
 {
        return i915_driver_vblank_do_wait(dev, sequence, &dev->vbl_received);
 }
 
-int i915_driver_vblank_wait2(drm_device_t *dev, unsigned int *sequence)
+int i915_driver_vblank_wait2(struct drm_device *dev, unsigned int *sequence)
 {
        return i915_driver_vblank_do_wait(dev, sequence, &dev->vbl_received2);
 }
 
 /* Needs the lock as it touches the ring.
  */
-int i915_irq_emit(DRM_IOCTL_ARGS)
+int i915_irq_emit(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_irq_emit_t emit;
+       drm_i915_irq_emit_t *emit = data;
        int result;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(emit, (drm_i915_irq_emit_t __user *) data,
-                                sizeof(emit));
-
        result = i915_emit_irq(dev);
 
-       if (DRM_COPY_TO_USER(emit.irq_seq, &result, sizeof(int))) {
+       if (DRM_COPY_TO_USER(emit->irq_seq, &result, sizeof(int))) {
                DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
@@ -472,24 +475,21 @@ int i915_irq_emit(DRM_IOCTL_ARGS)
 
 /* Doesn't need the hardware lock.
  */
-int i915_irq_wait(DRM_IOCTL_ARGS)
+int i915_irq_wait(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_irq_wait_t irqwait;
+       drm_i915_irq_wait_t *irqwait = data;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(irqwait, (drm_i915_irq_wait_t __user *) data,
-                                sizeof(irqwait));
-
-       return i915_wait_irq(dev, irqwait.irq_seq);
+       return i915_wait_irq(dev, irqwait->irq_seq);
 }
 
-static void i915_enable_interrupt (drm_device_t *dev)
+static void i915_enable_interrupt (struct drm_device *dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        
@@ -505,64 +505,60 @@ static void i915_enable_interrupt (drm_device_t *dev)
 
 /* Set the vblank monitor pipe
  */
-int i915_vblank_pipe_set(DRM_IOCTL_ARGS)
+int i915_vblank_pipe_set(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_vblank_pipe_t pipe;
+       drm_i915_vblank_pipe_t *pipe = data;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(pipe, (drm_i915_vblank_pipe_t __user *) data,
-                                sizeof(pipe));
-
-       if (pipe.pipe & ~(DRM_I915_VBLANK_PIPE_A|DRM_I915_VBLANK_PIPE_B)) {
+       if (pipe->pipe & ~(DRM_I915_VBLANK_PIPE_A|DRM_I915_VBLANK_PIPE_B)) {
                DRM_ERROR("%s called with invalid pipe 0x%x\n", 
-                         __FUNCTION__, pipe.pipe);
-               return DRM_ERR(EINVAL);
+                         __FUNCTION__, pipe->pipe);
+               return -EINVAL;
        }
 
-       dev_priv->vblank_pipe = pipe.pipe;
+       dev_priv->vblank_pipe = pipe->pipe;
 
        i915_enable_interrupt (dev);
 
        return 0;
 }
 
-int i915_vblank_pipe_get(DRM_IOCTL_ARGS)
+int i915_vblank_pipe_get(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_vblank_pipe_t pipe;
+       drm_i915_vblank_pipe_t *pipe = data;
        u16 flag;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        flag = I915_READ(I915REG_INT_ENABLE_R);
-       pipe.pipe = 0;
+       pipe->pipe = 0;
        if (flag & VSYNC_PIPEA_FLAG)
-               pipe.pipe |= DRM_I915_VBLANK_PIPE_A;
+               pipe->pipe |= DRM_I915_VBLANK_PIPE_A;
        if (flag & VSYNC_PIPEB_FLAG)
-               pipe.pipe |= DRM_I915_VBLANK_PIPE_B;
-       DRM_COPY_TO_USER_IOCTL((drm_i915_vblank_pipe_t __user *) data, pipe,
-                                sizeof(pipe));
+               pipe->pipe |= DRM_I915_VBLANK_PIPE_B;
+
        return 0;
 }
 
 /**
  * Schedule buffer swap at given vertical blank.
  */
-int i915_vblank_swap(DRM_IOCTL_ARGS)
+int i915_vblank_swap(struct drm_device *dev, void *data,
+                    struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_vblank_swap_t swap;
+       drm_i915_vblank_swap_t *swap = data;
        drm_i915_vbl_swap_t *vbl_swap;
        unsigned int pipe, seqtype, curseq;
        unsigned long irqflags;
@@ -570,139 +566,124 @@ int i915_vblank_swap(DRM_IOCTL_ARGS)
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __func__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (dev_priv->sarea_priv->rotation) {
                DRM_DEBUG("Rotation not supported\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(swap, (drm_i915_vblank_swap_t __user *) data,
-                                sizeof(swap));
-
-       if (swap.seqtype & ~(_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE |
+       if (swap->seqtype & ~(_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE |
                             _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS |
                             _DRM_VBLANK_FLIP)) {
-               DRM_ERROR("Invalid sequence type 0x%x\n", swap.seqtype);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("Invalid sequence type 0x%x\n", swap->seqtype);
+               return -EINVAL;
        }
 
-       pipe = (swap.seqtype & _DRM_VBLANK_SECONDARY) ? 1 : 0;
+       pipe = (swap->seqtype & _DRM_VBLANK_SECONDARY) ? 1 : 0;
 
-       seqtype = swap.seqtype & (_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE);
+       seqtype = swap->seqtype & (_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE);
 
        if (!(dev_priv->vblank_pipe & (1 << pipe))) {
                DRM_ERROR("Invalid pipe %d\n", pipe);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       spin_lock_irqsave(&dev->drw_lock, irqflags);
-
-       if (!drm_get_drawable_info(dev, swap.drawable)) {
-               spin_unlock_irqrestore(&dev->drw_lock, irqflags);
-               DRM_DEBUG("Invalid drawable ID %d\n", swap.drawable);
-               return DRM_ERR(EINVAL);
-       }
-
-       spin_unlock_irqrestore(&dev->drw_lock, irqflags);
-
        curseq = atomic_read(pipe ? &dev->vbl_received2 : &dev->vbl_received);
 
        if (seqtype == _DRM_VBLANK_RELATIVE)
-               swap.sequence += curseq;
+               swap->sequence += curseq;
 
-       if ((curseq - swap.sequence) <= (1<<23)) {
-               if (swap.seqtype & _DRM_VBLANK_NEXTONMISS) {
-                       swap.sequence = curseq + 1;
+       if ((curseq - swap->sequence) <= (1<<23)) {
+               if (swap->seqtype & _DRM_VBLANK_NEXTONMISS) {
+                       swap->sequence = curseq + 1;
                } else {
                        DRM_DEBUG("Missed target sequence\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
 
-       if (swap.seqtype & _DRM_VBLANK_FLIP) {
-               swap.sequence--;
+       if (swap->seqtype & _DRM_VBLANK_FLIP) {
+               swap->sequence--;
 
-               if ((curseq - swap.sequence) <= (1<<23)) {
-                       drm_drawable_info_t *drw;
+               if ((curseq - swap->sequence) <= (1<<23)) {
+                       struct drm_drawable_info *drw;
 
-                       LOCK_TEST_WITH_RETURN(dev, filp);
+                       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-                       spin_lock_irqsave(&dev->drw_lock, irqflags);
+                       DRM_SPINLOCK_IRQSAVE(&dev->drw_lock, irqflags);
 
-                       drw = drm_get_drawable_info(dev, swap.drawable);
+                       drw = drm_get_drawable_info(dev, swap->drawable);
 
                        if (!drw) {
-                               spin_unlock_irqrestore(&dev->drw_lock, irqflags);
+                               DRM_SPINUNLOCK_IRQRESTORE(&dev->drw_lock,
+                                   irqflags);
                                DRM_DEBUG("Invalid drawable ID %d\n",
-                                         swap.drawable);
-                               return DRM_ERR(EINVAL);
+                                         swap->drawable);
+                               return -EINVAL;
                        }
 
                        i915_dispatch_vsync_flip(dev, drw, pipe);
 
-                       spin_unlock_irqrestore(&dev->drw_lock, irqflags);
+                       DRM_SPINUNLOCK_IRQRESTORE(&dev->drw_lock, irqflags);
 
                        return 0;
                }
        }
 
-       spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
+       DRM_SPINLOCK_IRQSAVE(&dev_priv->swaps_lock, irqflags);
 
        list_for_each(list, &dev_priv->vbl_swaps.head) {
                vbl_swap = list_entry(list, drm_i915_vbl_swap_t, head);
 
-               if (vbl_swap->drw_id == swap.drawable &&
+               if (vbl_swap->drw_id == swap->drawable &&
                    vbl_swap->pipe == pipe &&
-                   vbl_swap->sequence == swap.sequence) {
-                       vbl_swap->flip = (swap.seqtype & _DRM_VBLANK_FLIP);
-                       spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
+                   vbl_swap->sequence == swap->sequence) {
+                       vbl_swap->flip = (swap->seqtype & _DRM_VBLANK_FLIP);
+                       DRM_SPINUNLOCK_IRQRESTORE(&dev_priv->swaps_lock, irqflags);
                        DRM_DEBUG("Already scheduled\n");
                        return 0;
                }
        }
 
-       spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
+       DRM_SPINUNLOCK_IRQRESTORE(&dev_priv->swaps_lock, irqflags);
 
        if (dev_priv->swaps_pending >= 100) {
                DRM_DEBUG("Too many swaps queued\n");
-               return DRM_ERR(EBUSY);
+               return -EBUSY;
        }
 
        vbl_swap = drm_calloc(1, sizeof(vbl_swap), DRM_MEM_DRIVER);
 
        if (!vbl_swap) {
                DRM_ERROR("Failed to allocate memory to queue swap\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        DRM_DEBUG("\n");
 
-       vbl_swap->drw_id = swap.drawable;
+       vbl_swap->drw_id = swap->drawable;
        vbl_swap->pipe = pipe;
-       vbl_swap->sequence = swap.sequence;
-       vbl_swap->flip = (swap.seqtype & _DRM_VBLANK_FLIP);
+       vbl_swap->sequence = swap->sequence;
+       vbl_swap->flip = (swap->seqtype & _DRM_VBLANK_FLIP);
 
        if (vbl_swap->flip)
-               swap.sequence++;
+               swap->sequence++;
 
-       spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
+       DRM_SPINLOCK_IRQSAVE(&dev_priv->swaps_lock, irqflags);
 
        list_add_tail((struct list_head *)vbl_swap, &dev_priv->vbl_swaps.head);
        dev_priv->swaps_pending++;
 
-       spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
-
-       DRM_COPY_TO_USER_IOCTL((drm_i915_vblank_swap_t __user *) data, swap,
-                              sizeof(swap));
+       DRM_SPINUNLOCK_IRQRESTORE(&dev_priv->swaps_lock, irqflags);
 
        return 0;
 }
 
 /* drm_dma.h hooks
 */
-void i915_driver_irq_preinstall(drm_device_t * dev)
+void i915_driver_irq_preinstall(struct drm_device * dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
 
@@ -711,15 +692,15 @@ void i915_driver_irq_preinstall(drm_device_t * dev)
        I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);
 }
 
-void i915_driver_irq_postinstall(drm_device_t * dev)
+void i915_driver_irq_postinstall(struct drm_device * dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
 
-       spin_lock_init(&dev_priv->swaps_lock);
+       DRM_SPININIT(&dev_priv->swaps_lock, "swap");
        INIT_LIST_HEAD(&dev_priv->vbl_swaps.head);
        dev_priv->swaps_pending = 0;
 
-       spin_lock_init(&dev_priv->user_irq_lock);
+       DRM_SPININIT(&dev_priv->user_irq_lock, "userirq");
        dev_priv->user_irq_refcount = 0;
 
        i915_enable_interrupt(dev);
@@ -732,7 +713,7 @@ void i915_driver_irq_postinstall(drm_device_t * dev)
        I915_WRITE(I915REG_INSTPM, ( 1 << 5) | ( 1 << 21));
 }
 
-void i915_driver_irq_uninstall(drm_device_t * dev)
+void i915_driver_irq_uninstall(struct drm_device * dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        u16 temp;
index 13f19f3..5bf29a1 100644 (file)
  * block to allocate, and the ring is drained prior to allocations --
  * in other words allocation is expensive.
  */
-static void mark_block(drm_device_t * dev, struct mem_block *p, int in_use)
+static void mark_block(struct drm_device * dev, struct mem_block *p, int in_use)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        drm_i915_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_tex_region_t *list;
+       struct drm_tex_region *list;
        unsigned shift, nr;
        unsigned start;
        unsigned end;
@@ -89,7 +89,7 @@ static void mark_block(drm_device_t * dev, struct mem_block *p, int in_use)
  */
 
 static struct mem_block *split_block(struct mem_block *p, int start, int size,
-                                    DRMFILE filp)
+                                    struct drm_file *file_priv)
 {
        /* Maybe cut off the start of an existing block */
        if (start > p->start) {
@@ -99,7 +99,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
                        goto out;
                newblock->start = start;
                newblock->size = p->size - (start - p->start);
-               newblock->filp = NULL;
+               newblock->file_priv = NULL;
                newblock->next = p->next;
                newblock->prev = p;
                p->next->prev = newblock;
@@ -116,7 +116,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
                        goto out;
                newblock->start = start + size;
                newblock->size = p->size - size;
-               newblock->filp = NULL;
+               newblock->file_priv = NULL;
                newblock->next = p->next;
                newblock->prev = p;
                p->next->prev = newblock;
@@ -126,20 +126,20 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
 
       out:
        /* Our block is in the middle */
-       p->filp = filp;
+       p->file_priv = file_priv;
        return p;
 }
 
 static struct mem_block *alloc_block(struct mem_block *heap, int size,
-                                    int align2, DRMFILE filp)
+                                    int align2, struct drm_file *file_priv)
 {
        struct mem_block *p;
        int mask = (1 << align2) - 1;
 
        for (p = heap->next; p != heap; p = p->next) {
                int start = (p->start + mask) & ~mask;
-               if (p->filp == NULL && start + size <= p->start + p->size)
-                       return split_block(p, start, size, filp);
+               if (p->file_priv == NULL && start + size <= p->start + p->size)
+                       return split_block(p, start, size, file_priv);
        }
 
        return NULL;
@@ -158,12 +158,12 @@ static struct mem_block *find_block(struct mem_block *heap, int start)
 
 static void free_block(struct mem_block *p)
 {
-       p->filp = NULL;
+       p->file_priv = NULL;
 
-       /* Assumes a single contiguous range.  Needs a special filp in
+       /* Assumes a single contiguous range.  Needs a special file_priv in
         * 'heap' to stop it being subsumed.
         */
-       if (p->next->filp == NULL) {
+       if (p->next->file_priv == NULL) {
                struct mem_block *q = p->next;
                p->size += q->size;
                p->next = q->next;
@@ -171,7 +171,7 @@ static void free_block(struct mem_block *p)
                drm_free(q, sizeof(*q), DRM_MEM_BUFLISTS);
        }
 
-       if (p->prev->filp == NULL) {
+       if (p->prev->file_priv == NULL) {
                struct mem_block *q = p->prev;
                q->size += p->size;
                q->next = p->next;
@@ -197,18 +197,19 @@ static int init_heap(struct mem_block **heap, int start, int size)
 
        blocks->start = start;
        blocks->size = size;
-       blocks->filp = NULL;
+       blocks->file_priv = NULL;
        blocks->next = blocks->prev = *heap;
 
        memset(*heap, 0, sizeof(**heap));
-       (*heap)->filp = (DRMFILE) - 1;
+       (*heap)->file_priv = (struct drm_file *) - 1;
        (*heap)->next = (*heap)->prev = blocks;
        return 0;
 }
 
 /* Free all blocks associated with the releasing file.
  */
-void i915_mem_release(drm_device_t * dev, DRMFILE filp, struct mem_block *heap)
+void i915_mem_release(struct drm_device * dev, struct drm_file *file_priv,
+                     struct mem_block *heap)
 {
        struct mem_block *p;
 
@@ -216,17 +217,17 @@ void i915_mem_release(drm_device_t * dev, DRMFILE filp, struct mem_block *heap)
                return;
 
        for (p = heap->next; p != heap; p = p->next) {
-               if (p->filp == filp) {
-                       p->filp = NULL;
+               if (p->file_priv == file_priv) {
+                       p->file_priv = NULL;
                        mark_block(dev, p, 0);
                }
        }
 
-       /* Assumes a single contiguous range.  Needs a special filp in
+       /* Assumes a single contiguous range.  Needs a special file_priv in
         * 'heap' to stop it being subsumed.
         */
        for (p = heap->next; p != heap; p = p->next) {
-               while (p->filp == NULL && p->next->filp == NULL) {
+               while (p->file_priv == NULL && p->next->file_priv == NULL) {
                        struct mem_block *q = p->next;
                        p->size += q->size;
                        p->next = q->next;
@@ -267,129 +268,117 @@ static struct mem_block **get_heap(drm_i915_private_t * dev_priv, int region)
 
 /* IOCTL HANDLERS */
 
-int i915_mem_alloc(DRM_IOCTL_ARGS)
+int i915_mem_alloc(struct drm_device *dev, void *data,
+                  struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_mem_alloc_t alloc;
+       drm_i915_mem_alloc_t *alloc = data;
        struct mem_block *block, **heap;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(alloc, (drm_i915_mem_alloc_t __user *) data,
-                                sizeof(alloc));
-
-       heap = get_heap(dev_priv, alloc.region);
+       heap = get_heap(dev_priv, alloc->region);
        if (!heap || !*heap)
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
        /* Make things easier on ourselves: all allocations at least
         * 4k aligned.
         */
-       if (alloc.alignment < 12)
-               alloc.alignment = 12;
+       if (alloc->alignment < 12)
+               alloc->alignment = 12;
 
-       block = alloc_block(*heap, alloc.size, alloc.alignment, filp);
+       block = alloc_block(*heap, alloc->size, alloc->alignment, file_priv);
 
        if (!block)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        mark_block(dev, block, 1);
 
-       if (DRM_COPY_TO_USER(alloc.region_offset, &block->start, sizeof(int))) {
+       if (DRM_COPY_TO_USER(alloc->region_offset, &block->start,
+                            sizeof(int))) {
                DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
 }
 
-int i915_mem_free(DRM_IOCTL_ARGS)
+int i915_mem_free(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_mem_free_t memfree;
+       drm_i915_mem_free_t *memfree = data;
        struct mem_block *block, **heap;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(memfree, (drm_i915_mem_free_t __user *) data,
-                                sizeof(memfree));
-
-       heap = get_heap(dev_priv, memfree.region);
+       heap = get_heap(dev_priv, memfree->region);
        if (!heap || !*heap)
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
-       block = find_block(*heap, memfree.region_offset);
+       block = find_block(*heap, memfree->region_offset);
        if (!block)
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
-       if (block->filp != filp)
-               return DRM_ERR(EPERM);
+       if (block->file_priv != file_priv)
+               return -EPERM;
 
        mark_block(dev, block, 0);
        free_block(block);
        return 0;
 }
 
-int i915_mem_init_heap(DRM_IOCTL_ARGS)
+int i915_mem_init_heap(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_mem_init_heap_t initheap;
+       drm_i915_mem_init_heap_t *initheap = data;
        struct mem_block **heap;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(initheap,
-                                (drm_i915_mem_init_heap_t __user *) data,
-                                sizeof(initheap));
-
-       heap = get_heap(dev_priv, initheap.region);
+       heap = get_heap(dev_priv, initheap->region);
        if (!heap)
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
        if (*heap) {
                DRM_ERROR("heap already initialized?");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
-       return init_heap(heap, initheap.start, initheap.size);
+       return init_heap(heap, initheap->start, initheap->size);
 }
 
-int i915_mem_destroy_heap( DRM_IOCTL_ARGS )
+int i915_mem_destroy_heap( struct drm_device *dev, void *data,
+                          struct drm_file *file_priv )
 {
-       DRM_DEVICE;
        drm_i915_private_t *dev_priv = dev->dev_private;
-       drm_i915_mem_destroy_heap_t destroyheap;
+       drm_i915_mem_destroy_heap_t *destroyheap = data;
        struct mem_block **heap;
 
        if ( !dev_priv ) {
                DRM_ERROR( "%s called with no initialization\n", __FUNCTION__ );
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL( destroyheap, (drm_i915_mem_destroy_heap_t *)data,
-                                 sizeof(destroyheap) );
-
-       heap = get_heap( dev_priv, destroyheap.region );
+       heap = get_heap( dev_priv, destroyheap->region );
        if (!heap) {
                DRM_ERROR("get_heap failed");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
        
        if (!*heap) {
                DRM_ERROR("heap not initialized?");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        i915_mem_takedown( heap );
index 60f5590..e0a6745 100644 (file)
@@ -70,7 +70,7 @@ int mach64_do_wait_for_fifo(drm_mach64_private_t * dev_priv, int entries)
 
        DRM_INFO("%s failed! slots=%d entries=%d\n", __FUNCTION__, slots,
                 entries);
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 /**
@@ -94,7 +94,7 @@ int mach64_do_wait_for_idle(drm_mach64_private_t * dev_priv)
        DRM_INFO("%s failed! GUI_STAT=0x%08x\n", __FUNCTION__,
                 MACH64_READ(MACH64_GUI_STAT));
        mach64_dump_ring_info(dev_priv);
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 /**
@@ -135,7 +135,7 @@ int mach64_wait_ring(drm_mach64_private_t * dev_priv, int n)
        /* FIXME: This is being ignored... */
        DRM_ERROR("failed!\n");
        mach64_dump_ring_info(dev_priv);
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 /**
@@ -172,7 +172,7 @@ static int mach64_ring_idle(drm_mach64_private_t * dev_priv)
        DRM_INFO("%s failed! GUI_STAT=0x%08x\n", __FUNCTION__,
                 MACH64_READ(MACH64_GUI_STAT));
        mach64_dump_ring_info(dev_priv);
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 /**
@@ -418,7 +418,7 @@ void mach64_dump_engine_info(drm_mach64_private_t * dev_priv)
  * pointed by the ring head.
  */
 static void mach64_dump_buf_info(drm_mach64_private_t * dev_priv,
-                                drm_buf_t * buf)
+                                struct drm_buf * buf)
 {
        u32 addr = GETBUFADDR(buf);
        u32 used = buf->used >> 2;
@@ -522,7 +522,7 @@ void mach64_dump_ring_info(drm_mach64_private_t * dev_priv)
                list_for_each(ptr, &dev_priv->pending) {
                        drm_mach64_freelist_t *entry =
                            list_entry(ptr, drm_mach64_freelist_t, list);
-                       drm_buf_t *buf = entry->buf;
+                       struct drm_buf *buf = entry->buf;
 
                        u32 buf_addr = GETBUFADDR(buf);
 
@@ -572,7 +572,7 @@ void mach64_dump_ring_info(drm_mach64_private_t * dev_priv)
  * DMA operation. It is left here since it so tricky to get DMA operating
  * properly in some architectures and hardware.
  */
-static int mach64_bm_dma_test(drm_device_t * dev)
+static int mach64_bm_dma_test(struct drm_device * dev)
 {
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_dma_handle_t *cpu_addr_dmah;
@@ -592,7 +592,7 @@ static int mach64_bm_dma_test(drm_device_t * dev)
            drm_pci_alloc(dev, 0x1000, 0x1000, 0xfffffffful);
        if (!cpu_addr_dmah) {
                DRM_INFO("data-memory allocation failed!\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        } else {
                data = (u32 *) cpu_addr_dmah->vaddr;
                data_addr = (u32) cpu_addr_dmah->busaddr;
@@ -624,7 +624,7 @@ static int mach64_bm_dma_test(drm_device_t * dev)
                        mach64_do_engine_reset(dev_priv);
                        DRM_INFO("freeing data buffer memory.\n");
                        drm_pci_free(dev, cpu_addr_dmah);
-                       return DRM_ERR(EIO);
+                       return -EIO;
                }
        }
 
@@ -752,7 +752,7 @@ static int mach64_bm_dma_test(drm_device_t * dev)
  * Called during the DMA initialization ioctl to initialize all the necessary
  * software and hardware state for DMA operation.
  */
-static int mach64_do_dma_init(drm_device_t * dev, drm_mach64_init_t * init)
+static int mach64_do_dma_init(struct drm_device * dev, drm_mach64_init_t * init)
 {
        drm_mach64_private_t *dev_priv;
        u32 tmp;
@@ -762,7 +762,7 @@ static int mach64_do_dma_init(drm_device_t * dev, drm_mach64_init_t * init)
 
        dev_priv = drm_alloc(sizeof(drm_mach64_private_t), DRM_MEM_DRIVER);
        if (dev_priv == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        memset(dev_priv, 0, sizeof(drm_mach64_private_t));
 
@@ -797,21 +797,21 @@ static int mach64_do_dma_init(drm_device_t * dev, drm_mach64_init_t * init)
                DRM_ERROR("can not find sarea!\n");
                dev->dev_private = (void *)dev_priv;
                mach64_do_cleanup_dma(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        dev_priv->fb = drm_core_findmap(dev, init->fb_offset);
        if (!dev_priv->fb) {
                DRM_ERROR("can not find frame buffer map!\n");
                dev->dev_private = (void *)dev_priv;
                mach64_do_cleanup_dma(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        dev_priv->mmio = drm_core_findmap(dev, init->mmio_offset);
        if (!dev_priv->mmio) {
                DRM_ERROR("can not find mmio map!\n");
                dev->dev_private = (void *)dev_priv;
                mach64_do_cleanup_dma(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->ring_map = drm_core_findmap(dev, init->ring_offset);
@@ -819,7 +819,7 @@ static int mach64_do_dma_init(drm_device_t * dev, drm_mach64_init_t * init)
                DRM_ERROR("can not find ring map!\n");
                dev->dev_private = (void *)dev_priv;
                mach64_do_cleanup_dma(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->sarea_priv = (drm_mach64_sarea_t *)
@@ -832,7 +832,7 @@ static int mach64_do_dma_init(drm_device_t * dev, drm_mach64_init_t * init)
                                  " descriptor ring\n");
                        dev->dev_private = (void *)dev_priv;
                        mach64_do_cleanup_dma(dev);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
                dev->agp_buffer_token = init->buffers_offset;
                dev->agp_buffer_map =
@@ -841,7 +841,7 @@ static int mach64_do_dma_init(drm_device_t * dev, drm_mach64_init_t * init)
                        DRM_ERROR("can not find dma buffer map!\n");
                        dev->dev_private = (void *)dev_priv;
                        mach64_do_cleanup_dma(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                /* there might be a nicer way to do this -
                   dev isn't passed all the way though the mach64 - DA */
@@ -853,7 +853,7 @@ static int mach64_do_dma_init(drm_device_t * dev, drm_mach64_init_t * init)
                                  " dma buffer\n");
                        dev->dev_private = (void *)dev_priv;
                        mach64_do_cleanup_dma(dev);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
                dev_priv->agp_textures =
                    drm_core_findmap(dev, init->agp_textures_offset);
@@ -861,7 +861,7 @@ static int mach64_do_dma_init(drm_device_t * dev, drm_mach64_init_t * init)
                        DRM_ERROR("can not find agp texture region!\n");
                        dev->dev_private = (void *)dev_priv;
                        mach64_do_cleanup_dma(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
 
@@ -974,7 +974,7 @@ int mach64_do_dispatch_pseudo_dma(drm_mach64_private_t * dev_priv)
        volatile u32 *ring_read;
        struct list_head *ptr;
        drm_mach64_freelist_t *entry;
-       drm_buf_t *buf = NULL;
+       struct drm_buf *buf = NULL;
        u32 *buf_ptr;
        u32 used, reg, target;
        int fifo, count, found, ret, no_idle_wait;
@@ -1035,7 +1035,7 @@ int mach64_do_dispatch_pseudo_dma(drm_mach64_private_t * dev_priv)
                             head, ring->tail, buf_addr, (eol ? "eol" : ""));
                        mach64_dump_ring_info(dev_priv);
                        mach64_do_engine_reset(dev_priv);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                /* Hand feed the buffer to the card via MMIO, waiting for the fifo
@@ -1117,7 +1117,7 @@ int mach64_do_dispatch_pseudo_dma(drm_mach64_private_t * dev_priv)
 /** \name DMA cleanup */
 /*@{*/
 
-int mach64_do_cleanup_dma(drm_device_t * dev)
+int mach64_do_cleanup_dma(struct drm_device * dev)
 {
        DRM_DEBUG("%s\n", __FUNCTION__);
 
@@ -1158,60 +1158,57 @@ int mach64_do_cleanup_dma(drm_device_t * dev)
 /** \name IOCTL handlers */
 /*@{*/
 
-int mach64_dma_init(DRM_IOCTL_ARGS)
+int mach64_dma_init(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_mach64_init_t init;
+       drm_mach64_init_t *init = data;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_mach64_init_t *) data,
-                                sizeof(init));
-
-       switch (init.func) {
+       switch (init->func) {
        case DRM_MACH64_INIT_DMA:
-               return mach64_do_dma_init(dev, &init);
+               return mach64_do_dma_init(dev, init);
        case DRM_MACH64_CLEANUP_DMA:
                return mach64_do_cleanup_dma(dev);
        }
 
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
-int mach64_dma_idle(DRM_IOCTL_ARGS)
+int mach64_dma_idle(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mach64_private_t *dev_priv = dev->dev_private;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return mach64_do_dma_idle(dev_priv);
 }
 
-int mach64_dma_flush(DRM_IOCTL_ARGS)
+int mach64_dma_flush(struct drm_device *dev, void *data,
+                    struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mach64_private_t *dev_priv = dev->dev_private;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return mach64_do_dma_flush(dev_priv);
 }
 
-int mach64_engine_reset(DRM_IOCTL_ARGS)
+int mach64_engine_reset(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mach64_private_t *dev_priv = dev->dev_private;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return mach64_do_engine_reset(dev_priv);
 }
@@ -1223,9 +1220,9 @@ int mach64_engine_reset(DRM_IOCTL_ARGS)
 /** \name Freelist management */
 /*@{*/
 
-int mach64_init_freelist(drm_device_t * dev)
+int mach64_init_freelist(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_mach64_freelist_t *entry;
        struct list_head *ptr;
@@ -1239,7 +1236,7 @@ int mach64_init_freelist(drm_device_t * dev)
                     (drm_mach64_freelist_t *)
                     drm_alloc(sizeof(drm_mach64_freelist_t),
                               DRM_MEM_BUFLISTS)) == NULL)
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                memset(entry, 0, sizeof(drm_mach64_freelist_t));
                entry->buf = dma->buflist[i];
                ptr = &entry->list;
@@ -1249,7 +1246,7 @@ int mach64_init_freelist(drm_device_t * dev)
        return 0;
 }
 
-void mach64_destroy_freelist(drm_device_t * dev)
+void mach64_destroy_freelist(struct drm_device * dev)
 {
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_mach64_freelist_t *entry;
@@ -1381,7 +1378,7 @@ static int mach64_do_reclaim_completed(drm_mach64_private_t * dev_priv)
        return 1;
 }
 
-drm_buf_t *mach64_freelist_get(drm_mach64_private_t * dev_priv)
+struct drm_buf *mach64_freelist_get(drm_mach64_private_t * dev_priv)
 {
        drm_mach64_descriptor_ring_t *ring = &dev_priv->ring;
        drm_mach64_freelist_t *entry;
@@ -1427,7 +1424,7 @@ drm_buf_t *mach64_freelist_get(drm_mach64_private_t * dev_priv)
        return entry->buf;
 }
 
-int mach64_freelist_put(drm_mach64_private_t * dev_priv, drm_buf_t * copy_buf)
+int mach64_freelist_put(drm_mach64_private_t * dev_priv, struct drm_buf * copy_buf)
 {
        struct list_head *ptr;
        drm_mach64_freelist_t *entry;
@@ -1438,7 +1435,7 @@ int mach64_freelist_put(drm_mach64_private_t * dev_priv, drm_buf_t * copy_buf)
                if (copy_buf == entry->buf) {
                        DRM_ERROR("%s: Trying to release a pending buf\n",
                             __FUNCTION__);
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                }
        }
 #endif
@@ -1461,76 +1458,73 @@ int mach64_freelist_put(drm_mach64_private_t * dev_priv, drm_buf_t * copy_buf)
 /** \name DMA buffer request and submission IOCTL handler */
 /*@{*/
 
-static int mach64_dma_get_buffers(DRMFILE filp, drm_device_t * dev,
-                                 drm_dma_t * d)
+static int mach64_dma_get_buffers(struct drm_device *dev,
+                                 struct drm_file *file_priv,
+                                 struct drm_dma * d)
 {
        int i;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        drm_mach64_private_t *dev_priv = dev->dev_private;
 
        for (i = d->granted_count; i < d->request_count; i++) {
                buf = mach64_freelist_get(dev_priv);
 #if MACH64_EXTRA_CHECKING
                if (!buf)
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
 #else
                if (!buf)
-                       return DRM_ERR(EAGAIN);
+                       return -EAGAIN;
 #endif
 
-               buf->filp = filp;
+               buf->file_priv = file_priv;
 
                if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx,
                                     sizeof(buf->idx)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                if (DRM_COPY_TO_USER(&d->request_sizes[i], &buf->total,
                                     sizeof(buf->total)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
 
                d->granted_count++;
        }
        return 0;
 }
 
-int mach64_dma_buffers(DRM_IOCTL_ARGS)
+int mach64_dma_buffers(struct drm_device *dev, void *data,
+                      struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_device_dma_t *dma = dev->dma;
-       drm_dma_t d;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_dma *d = data;
        int ret = 0;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(d, (drm_dma_t *) data, sizeof(d));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        /* Please don't send us buffers.
         */
-       if (d.send_count != 0) {
+       if (d->send_count != 0) {
                DRM_ERROR("Process %d trying to send %d buffers via drmDMA\n",
-                         DRM_CURRENTPID, d.send_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->send_count);
+               return -EINVAL;
        }
 
        /* We'll send you buffers.
         */
-       if (d.request_count < 0 || d.request_count > dma->buf_count) {
+       if (d->request_count < 0 || d->request_count > dma->buf_count) {
                DRM_ERROR("Process %d trying to get %d buffers (of %d max)\n",
-                         DRM_CURRENTPID, d.request_count, dma->buf_count);
-               ret = DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->request_count, dma->buf_count);
+               ret = -EINVAL;
        }
 
-       d.granted_count = 0;
+       d->granted_count = 0;
 
-       if (d.request_count) {
-               ret = mach64_dma_get_buffers(filp, dev, &d);
+       if (d->request_count) {
+               ret = mach64_dma_get_buffers(dev, file_priv, d);
        }
 
-       DRM_COPY_TO_USER_IOCTL((drm_dma_t *) data, d, sizeof(d));
-
        return ret;
 }
 
-void mach64_driver_lastclose(drm_device_t * dev)
+void mach64_driver_lastclose(struct drm_device * dev)
 {
        mach64_do_cleanup_dma(dev);
 }
index 083f959..1f5fd84 100644 (file)
@@ -130,7 +130,7 @@ typedef struct drm_mach64_sarea {
 
        /* The current cliprects, or a subset thereof.
         */
-       drm_clip_rect_t boxes[MACH64_NR_SAREA_CLIPRECTS];
+       struct drm_clip_rect boxes[MACH64_NR_SAREA_CLIPRECTS];
        unsigned int nbox;
 
        /* Counters for client-side throttling of rendering clients.
@@ -139,7 +139,7 @@ typedef struct drm_mach64_sarea {
 
        /* Texture memory LRU.
         */
-       drm_tex_region_t tex_list[MACH64_NR_TEX_HEAPS][MACH64_NR_TEX_REGIONS +
+       struct drm_tex_region tex_list[MACH64_NR_TEX_HEAPS][MACH64_NR_TEX_REGIONS +
                                                       1];
        unsigned int tex_age[MACH64_NR_TEX_HEAPS];
        int ctx_owner;
index bb8b309..cebd4c6 100644 (file)
@@ -55,7 +55,7 @@
 
 typedef struct drm_mach64_freelist {
        struct list_head list;  /* List pointers for free_list, placeholders, or pending list */
-       drm_buf_t *buf;         /* Pointer to the buffer */
+       struct drm_buf *buf;            /* Pointer to the buffer */
        int discard;            /* This flag is set when we're done (re)using a buffer */
        u32 ring_ofs;           /* dword offset in ring of last descriptor for this buffer */
 } drm_mach64_freelist_t;
@@ -108,22 +108,27 @@ typedef struct drm_mach64_private {
        drm_local_map_t *agp_textures;
 } drm_mach64_private_t;
 
-extern drm_ioctl_desc_t mach64_ioctls[];
+extern struct drm_ioctl_desc mach64_ioctls[];
 extern int mach64_max_ioctl;
 
                                /* mach64_dma.c */
-extern int mach64_dma_init(DRM_IOCTL_ARGS);
-extern int mach64_dma_idle(DRM_IOCTL_ARGS);
-extern int mach64_dma_flush(DRM_IOCTL_ARGS);
-extern int mach64_engine_reset(DRM_IOCTL_ARGS);
-extern int mach64_dma_buffers(DRM_IOCTL_ARGS);
-extern void mach64_driver_lastclose(drm_device_t * dev);
-
-extern int mach64_init_freelist(drm_device_t * dev);
-extern void mach64_destroy_freelist(drm_device_t * dev);
-extern drm_buf_t *mach64_freelist_get(drm_mach64_private_t * dev_priv);
+extern int mach64_dma_init(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
+extern int mach64_dma_idle(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
+extern int mach64_dma_flush(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv);
+extern int mach64_engine_reset(struct drm_device *dev, void *data,
+                              struct drm_file *file_priv);
+extern int mach64_dma_buffers(struct drm_device *dev, void *data,
+                             struct drm_file *file_priv);
+extern void mach64_driver_lastclose(struct drm_device * dev);
+
+extern int mach64_init_freelist(struct drm_device * dev);
+extern void mach64_destroy_freelist(struct drm_device * dev);
+extern struct drm_buf *mach64_freelist_get(drm_mach64_private_t * dev_priv);
 extern int mach64_freelist_put(drm_mach64_private_t * dev_priv,
-                              drm_buf_t * copy_buf);
+                              struct drm_buf * copy_buf);
 
 extern int mach64_do_wait_for_fifo(drm_mach64_private_t * dev_priv,
                                   int entries);
@@ -137,21 +142,26 @@ extern int mach64_do_engine_reset(drm_mach64_private_t * dev_priv);
 
 extern int mach64_do_dma_idle(drm_mach64_private_t * dev_priv);
 extern int mach64_do_dma_flush(drm_mach64_private_t * dev_priv);
-extern int mach64_do_cleanup_dma(drm_device_t * dev);
+extern int mach64_do_cleanup_dma(struct drm_device * dev);
 
                                /* mach64_state.c */
-extern int mach64_dma_clear(DRM_IOCTL_ARGS);
-extern int mach64_dma_swap(DRM_IOCTL_ARGS);
-extern int mach64_dma_vertex(DRM_IOCTL_ARGS);
-extern int mach64_dma_blit(DRM_IOCTL_ARGS);
-extern int mach64_get_param(DRM_IOCTL_ARGS);
-extern int mach64_driver_vblank_wait(drm_device_t * dev,
+extern int mach64_dma_clear(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv);
+extern int mach64_dma_swap(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
+extern int mach64_dma_vertex(struct drm_device *dev, void *data,
+                            struct drm_file *file_priv);
+extern int mach64_dma_blit(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
+extern int mach64_get_param(struct drm_device *dev, void *data,
+                           struct drm_file *file_priv);
+extern int mach64_driver_vblank_wait(struct drm_device * dev,
                                     unsigned int *sequence);
 
 extern irqreturn_t mach64_driver_irq_handler(DRM_IRQ_ARGS);
-extern void mach64_driver_irq_preinstall(drm_device_t * dev);
-extern void mach64_driver_irq_postinstall(drm_device_t * dev);
-extern void mach64_driver_irq_uninstall(drm_device_t * dev);
+extern void mach64_driver_irq_preinstall(struct drm_device * dev);
+extern void mach64_driver_irq_postinstall(struct drm_device * dev);
+extern void mach64_driver_irq_uninstall(struct drm_device * dev);
 
 /* ================================================================
  * Registers
@@ -798,7 +808,7 @@ do {                                                                        \
 
 #define DMALOCALS                              \
        drm_mach64_freelist_t *_entry = NULL;   \
-       drm_buf_t *_buf = NULL;                 \
+       struct drm_buf *_buf = NULL;            \
        u32 *_buf_wptr; int _outcount
 
 #define GETBUFPTR( __buf )                                             \
@@ -813,20 +823,20 @@ do {                                                                      \
 static __inline__ int mach64_find_pending_buf_entry(drm_mach64_private_t *
                                                    dev_priv,
                                                    drm_mach64_freelist_t **
-                                                   entry, drm_buf_t * buf)
+                                                   entry, struct drm_buf * buf)
 {
        struct list_head *ptr;
 #if MACH64_EXTRA_CHECKING
        if (list_empty(&dev_priv->pending)) {
                DRM_ERROR("Empty pending list in %s\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 #endif
        ptr = dev_priv->pending.prev;
        *entry = list_entry(ptr, drm_mach64_freelist_t, list);
        while ((*entry)->buf != buf) {
                if (ptr == &dev_priv->pending) {
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                }
                ptr = ptr->prev;
                *entry = list_entry(ptr, drm_mach64_freelist_t, list);
@@ -842,7 +852,7 @@ do {                                                \
 } while(0)
 
 /* FIXME: use a private set of smaller buffers for state emits, clears, and swaps? */
-#define DMAGETPTR( filp, dev_priv, n )                                 \
+#define DMAGETPTR( file_priv, dev_priv, n )                            \
 do {                                                                   \
        if ( MACH64_VERBOSE ) {                                         \
                DRM_INFO( "DMAGETPTR( %d ) in %s\n",                    \
@@ -852,14 +862,14 @@ do {                                                                      \
        if (_buf == NULL) {                                             \
                DRM_ERROR("%s: couldn't get buffer in DMAGETPTR\n",     \
                           __FUNCTION__ );                              \
-               return DRM_ERR(EAGAIN);                                 \
+               return -EAGAIN;                                 \
        }                                                               \
        if (_buf->pending) {                                            \
                DRM_ERROR("%s: pending buf in DMAGETPTR\n",             \
                           __FUNCTION__ );                              \
-               return DRM_ERR(EFAULT);                                 \
+               return -EFAULT;                                 \
        }                                                               \
-       _buf->filp = filp;                                              \
+       _buf->file_priv = file_priv;                                    \
        _outcount = 0;                                                  \
                                                                        \
         _buf_wptr = GETBUFPTR( _buf );                                 \
@@ -888,7 +898,7 @@ do {                                                                                             \
        if (_buf->used <= 0) {                                                               \
                DRM_ERROR( "DMAADVANCE() in %s: sending empty buf %d\n",                     \
                                   __FUNCTION__, _buf->idx );                                \
-               return DRM_ERR(EFAULT);                                                      \
+               return -EFAULT;                                                      \
        }                                                                                    \
        if (_buf->pending) {                                                                 \
                 /* This is a resued buffer, so we need to find it in the pending list */     \
@@ -901,13 +911,13 @@ do {                                                                                           \
                if (_entry->discard) {                                                       \
                        DRM_ERROR( "DMAADVANCE() in %s: sending discarded pending buf %d\n", \
                                   __FUNCTION__, _buf->idx );                                \
-                       return DRM_ERR(EFAULT);                                              \
+                       return -EFAULT;                                              \
                }                                                                            \
        } else {                                                                             \
                if (list_empty(&dev_priv->placeholders)) {                                   \
                        DRM_ERROR( "DMAADVANCE() in %s: empty placeholder list\n",           \
                                __FUNCTION__ );                                              \
-                       return DRM_ERR(EFAULT);                                              \
+                       return -EFAULT;                                              \
                }                                                                            \
                ptr = dev_priv->placeholders.next;                                           \
                list_del(ptr);                                                               \
@@ -983,12 +993,12 @@ do {                                                                                      \
        if (_buf->used <= 0) {                                                          \
                DRM_ERROR( "DMAADVANCEHOSTDATA() in %s: sending empty buf %d\n",        \
                                   __FUNCTION__, _buf->idx );                           \
-               return DRM_ERR(EFAULT);                                                 \
+               return -EFAULT;                                                 \
        }                                                                               \
        if (list_empty(&dev_priv->placeholders)) {                                      \
                DRM_ERROR( "%s: empty placeholder list in DMAADVANCEHOSTDATA()\n",      \
                           __FUNCTION__ );                                              \
-               return DRM_ERR(EFAULT);                                                 \
+               return -EFAULT;                                                 \
        }                                                                               \
                                                                                        \
         ptr = dev_priv->placeholders.next;                                             \
index 663642d..4122dd9 100644 (file)
@@ -42,7 +42,7 @@
 
 irqreturn_t mach64_driver_irq_handler(DRM_IRQ_ARGS)
 {
-       drm_device_t *dev = (drm_device_t *) arg;
+       struct drm_device *dev = (struct drm_device *) arg;
        drm_mach64_private_t *dev_priv =
            (drm_mach64_private_t *) dev->dev_private;
        int status;
@@ -70,7 +70,7 @@ irqreturn_t mach64_driver_irq_handler(DRM_IRQ_ARGS)
        return IRQ_NONE;
 }
 
-int mach64_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
+int mach64_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence)
 {
        unsigned int cur_vblank;
        int ret = 0;
@@ -90,7 +90,7 @@ int mach64_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
 
 /* drm_dma.h hooks
 */
-void mach64_driver_irq_preinstall(drm_device_t * dev)
+void mach64_driver_irq_preinstall(struct drm_device * dev)
 {
        drm_mach64_private_t *dev_priv =
            (drm_mach64_private_t *) dev->dev_private;
@@ -104,7 +104,7 @@ void mach64_driver_irq_preinstall(drm_device_t * dev)
                     | MACH64_CRTC_VBLANK_INT);
 }
 
-void mach64_driver_irq_postinstall(drm_device_t * dev)
+void mach64_driver_irq_postinstall(struct drm_device * dev)
 {
        drm_mach64_private_t *dev_priv =
            (drm_mach64_private_t *) dev->dev_private;
@@ -118,7 +118,7 @@ void mach64_driver_irq_postinstall(drm_device_t * dev)
 
 }
 
-void mach64_driver_irq_uninstall(drm_device_t * dev)
+void mach64_driver_irq_uninstall(struct drm_device * dev)
 {
        drm_mach64_private_t *dev_priv =
            (drm_mach64_private_t *) dev->dev_private;
index 38cefca..89b6c6c 100644 (file)
  * 1.0 - Initial mach64 DRM
  *
  */
-drm_ioctl_desc_t mach64_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_MACH64_INIT)] = {mach64_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_MACH64_CLEAR)] = {mach64_dma_clear, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MACH64_SWAP)] = {mach64_dma_swap, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MACH64_IDLE)] = {mach64_dma_idle, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MACH64_RESET)] = {mach64_engine_reset, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MACH64_VERTEX)] = {mach64_dma_vertex, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MACH64_BLIT)] = {mach64_dma_blit, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MACH64_FLUSH)] = {mach64_dma_flush, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MACH64_GETPARAM)] = {mach64_get_param, DRM_AUTH},
+struct drm_ioctl_desc mach64_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_MACH64_INIT, mach64_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_MACH64_CLEAR, mach64_dma_clear, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MACH64_SWAP, mach64_dma_swap, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MACH64_IDLE, mach64_dma_idle, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MACH64_RESET, mach64_engine_reset, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MACH64_VERTEX, mach64_dma_vertex, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MACH64_BLIT, mach64_dma_blit, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MACH64_FLUSH, mach64_dma_flush, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MACH64_GETPARAM, mach64_get_param, DRM_AUTH),
 };
 
 int mach64_max_ioctl = DRM_ARRAY_SIZE(mach64_ioctls);
@@ -85,11 +85,12 @@ static void mach64_print_dirty(const char *msg, unsigned int flags)
 /* This function returns 0 on success, 1 for no intersection, and
  * negative for an error
  */
-static int mach64_emit_cliprect(DRMFILE filp, drm_mach64_private_t * dev_priv,
-                               drm_clip_rect_t * box)
+static int mach64_emit_cliprect(struct drm_file *file_priv,
+                               drm_mach64_private_t * dev_priv,
+                               struct drm_clip_rect * box)
 {
        u32 sc_left_right, sc_top_bottom;
-       drm_clip_rect_t scissor;
+       struct drm_clip_rect scissor;
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
        drm_mach64_context_regs_t *regs = &sarea_priv->context_state;
        DMALOCALS;
@@ -120,7 +121,7 @@ static int mach64_emit_cliprect(DRMFILE filp, drm_mach64_private_t * dev_priv,
        if (scissor.y1 >= scissor.y2)
                return 1;
 
-       DMAGETPTR(filp, dev_priv, 2);   /* returns on failure to get buffer */
+       DMAGETPTR(file_priv, dev_priv, 2);      /* returns on failure to get buffer */
 
        sc_left_right = ((scissor.x1 << 0) | (scissor.x2 << 16));
        sc_top_bottom = ((scissor.y1 << 0) | (scissor.y2 << 16));
@@ -133,7 +134,7 @@ static int mach64_emit_cliprect(DRMFILE filp, drm_mach64_private_t * dev_priv,
        return 0;
 }
 
-static __inline__ int mach64_emit_state(DRMFILE filp,
+static __inline__ int mach64_emit_state(struct drm_file *file_priv,
                                        drm_mach64_private_t * dev_priv)
 {
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
@@ -148,7 +149,7 @@ static __inline__ int mach64_emit_state(DRMFILE filp,
                DRM_DEBUG("%s: dirty=0x%08x\n", __FUNCTION__, dirty);
        }
 
-       DMAGETPTR(filp, dev_priv, 17);  /* returns on failure to get buffer */
+       DMAGETPTR(file_priv, dev_priv, 17);     /* returns on failure to get buffer */
 
        if (dirty & MACH64_UPLOAD_MISC) {
                DMAOUTREG(MACH64_DP_MIX, regs->dp_mix);
@@ -212,7 +213,8 @@ static __inline__ int mach64_emit_state(DRMFILE filp,
  * DMA command dispatch functions
  */
 
-static int mach64_dma_dispatch_clear(DRMFILE filp, drm_device_t * dev,
+static int mach64_dma_dispatch_clear(struct drm_device * dev,
+                                    struct drm_file *file_priv,
                                     unsigned int flags,
                                     int cx, int cy, int cw, int ch,
                                     unsigned int clear_color,
@@ -222,7 +224,7 @@ static int mach64_dma_dispatch_clear(DRMFILE filp, drm_device_t * dev,
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
        drm_mach64_context_regs_t *ctx = &sarea_priv->context_state;
        int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        u32 fb_bpp, depth_bpp;
        int i;
        DMALOCALS;
@@ -237,7 +239,7 @@ static int mach64_dma_dispatch_clear(DRMFILE filp, drm_device_t * dev,
                fb_bpp = MACH64_DATATYPE_ARGB8888;
                break;
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        switch (dev_priv->depth_bpp) {
        case 16:
@@ -248,13 +250,13 @@ static int mach64_dma_dispatch_clear(DRMFILE filp, drm_device_t * dev,
                depth_bpp = MACH64_DATATYPE_ARGB8888;
                break;
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (!nbox)
                return 0;
 
-       DMAGETPTR(filp, dev_priv, nbox * 31);   /* returns on failure to get buffer */
+       DMAGETPTR(file_priv, dev_priv, nbox * 31);      /* returns on failure to get buffer */
 
        for (i = 0; i < nbox; i++) {
                int x = pbox[i].x1;
@@ -355,12 +357,13 @@ static int mach64_dma_dispatch_clear(DRMFILE filp, drm_device_t * dev,
        return 0;
 }
 
-static int mach64_dma_dispatch_swap(DRMFILE filp, drm_device_t * dev)
+static int mach64_dma_dispatch_swap(struct drm_device * dev,
+                                   struct drm_file *file_priv)
 {
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
        int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        u32 fb_bpp;
        int i;
        DMALOCALS;
@@ -380,7 +383,7 @@ static int mach64_dma_dispatch_swap(DRMFILE filp, drm_device_t * dev)
        if (!nbox)
                return 0;
 
-       DMAGETPTR(filp, dev_priv, 13 + nbox * 4);       /* returns on failure to get buffer */
+       DMAGETPTR(file_priv, dev_priv, 13 + nbox * 4);  /* returns on failure to get buffer */
 
        DMAOUTREG(MACH64_Z_CNTL, 0);
        DMAOUTREG(MACH64_SCALE_3D_CNTL, 0);
@@ -489,11 +492,11 @@ static __inline__ int copy_from_user_vertex(u32 *to,
 
        from = drm_alloc(bytes, DRM_MEM_DRIVER);
        if (from == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        if (DRM_COPY_FROM_USER(from, ufrom, bytes)) {
                drm_free(from, bytes, DRM_MEM_DRIVER);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
        orig_from = from; /* we'll be modifying the "from" ptr, so save it */
 
@@ -525,14 +528,14 @@ static __inline__ int copy_from_user_vertex(u32 *to,
                                DRM_ERROR("%s: Got bad command: 0x%04x\n",
                                          __FUNCTION__, reg);
                                drm_free(orig_from, bytes, DRM_MEM_DRIVER);
-                               return DRM_ERR(EACCES);
+                               return -EACCES;
                        }
                } else {
                        DRM_ERROR
                            ("%s: Got bad command count(=%u) dwords remaining=%lu\n",
                             __FUNCTION__, count, n);
                        drm_free(orig_from, bytes, DRM_MEM_DRIVER);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
 
@@ -541,16 +544,17 @@ static __inline__ int copy_from_user_vertex(u32 *to,
                return 0;
        else {
                DRM_ERROR("%s: Bad buf->used(=%lu)\n", __FUNCTION__, bytes);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 }
 
-static int mach64_dma_dispatch_vertex(DRMFILE filp, drm_device_t * dev,
+static int mach64_dma_dispatch_vertex(struct drm_device * dev,
+                                     struct drm_file *file_priv,
                                      drm_mach64_vertex_t * vertex)
 {
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_buf_t *copy_buf;
+       struct drm_buf *copy_buf;
        void *buf = vertex->buf;
        unsigned long used = vertex->used;
        int ret = 0;
@@ -568,7 +572,7 @@ static int mach64_dma_dispatch_vertex(DRMFILE filp, drm_device_t * dev,
        copy_buf = mach64_freelist_get(dev_priv);
        if (copy_buf == NULL) {
                DRM_ERROR("%s: couldn't get buffer\n", __FUNCTION__);
-               return DRM_ERR(EAGAIN);
+               return -EAGAIN;
        }
 
        verify_ret = copy_from_user_vertex(GETBUFPTR(copy_buf), buf, used);
@@ -583,7 +587,7 @@ static int mach64_dma_dispatch_vertex(DRMFILE filp, drm_device_t * dev,
        DMASETPTR(copy_buf);
 
        if (sarea_priv->dirty & ~MACH64_UPLOAD_CLIPRECTS) {
-               ret = mach64_emit_state(filp, dev_priv);
+               ret = mach64_emit_state(file_priv, dev_priv);
                if (ret < 0)
                        return ret;
        }
@@ -591,7 +595,7 @@ static int mach64_dma_dispatch_vertex(DRMFILE filp, drm_device_t * dev,
        do {
                /* Emit the next cliprect */
                if (i < sarea_priv->nbox) {
-                       ret = mach64_emit_cliprect(filp, dev_priv,
+                       ret = mach64_emit_cliprect(file_priv, dev_priv,
                                                   &sarea_priv->boxes[i]);
                        if (ret < 0) {
                                /* failed to get buffer */
@@ -634,19 +638,20 @@ static __inline__ int copy_from_user_blit(u32 *to,
        to = (u32 *)((char *)to + MACH64_HOSTDATA_BLIT_OFFSET);
 
        if (DRM_COPY_FROM_USER(to, ufrom, bytes)) {
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
 }
 
-static int mach64_dma_dispatch_blit(DRMFILE filp, drm_device_t * dev,
+static int mach64_dma_dispatch_blit(struct drm_device * dev,
+                                   struct drm_file *file_priv,
                                    drm_mach64_blit_t * blit)
 {
        drm_mach64_private_t *dev_priv = dev->dev_private;
        int dword_shift, dwords;
        unsigned long used;
-       drm_buf_t *copy_buf;
+       struct drm_buf *copy_buf;
        int verify_ret = 0;
        DMALOCALS;
 
@@ -671,7 +676,7 @@ static int mach64_dma_dispatch_blit(DRMFILE filp, drm_device_t * dev,
                break;
        default:
                DRM_ERROR("invalid blit format %d\n", blit->format);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /* Set buf->used to the bytes of blit data based on the blit dimensions
@@ -684,13 +689,13 @@ static int mach64_dma_dispatch_blit(DRMFILE filp, drm_device_t * dev,
        if (used <= 0 ||
            used > MACH64_BUFFER_SIZE - MACH64_HOSTDATA_BLIT_OFFSET) {
                DRM_ERROR("Invalid blit size: %lu bytes\n", used);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        copy_buf = mach64_freelist_get(dev_priv);
        if (copy_buf == NULL) {
                DRM_ERROR("%s: couldn't get buffer\n", __FUNCTION__);
-               return DRM_ERR(EAGAIN);
+               return -EAGAIN;
        }
 
        verify_ret = copy_from_user_blit(GETBUFPTR(copy_buf), blit->buf, used);
@@ -753,27 +758,25 @@ _blit_done:
  * IOCTL functions
  */
 
-int mach64_dma_clear(DRM_IOCTL_ARGS)
+int mach64_dma_clear(struct drm_device *dev, void *data,
+                    struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_mach64_clear_t clear;
+       drm_mach64_clear_t *clear = data;
        int ret;
 
        DRM_DEBUG("%s: pid=%d\n", __FUNCTION__, DRM_CURRENTPID);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(clear, (drm_mach64_clear_t *) data,
-                                sizeof(clear));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (sarea_priv->nbox > MACH64_NR_SAREA_CLIPRECTS)
                sarea_priv->nbox = MACH64_NR_SAREA_CLIPRECTS;
 
-       ret = mach64_dma_dispatch_clear(filp, dev, clear.flags,
-                                       clear.x, clear.y, clear.w, clear.h,
-                                       clear.clear_color, clear.clear_depth);
+       ret = mach64_dma_dispatch_clear(dev, file_priv, clear->flags,
+                                       clear->x, clear->y, clear->w, clear->h,
+                                       clear->clear_color,
+                                       clear->clear_depth);
 
        /* Make sure we restore the 3D state next time.
         */
@@ -781,21 +784,21 @@ int mach64_dma_clear(DRM_IOCTL_ARGS)
        return ret;
 }
 
-int mach64_dma_swap(DRM_IOCTL_ARGS)
+int mach64_dma_swap(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
        int ret;
 
        DRM_DEBUG("%s: pid=%d\n", __FUNCTION__, DRM_CURRENTPID);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (sarea_priv->nbox > MACH64_NR_SAREA_CLIPRECTS)
                sarea_priv->nbox = MACH64_NR_SAREA_CLIPRECTS;
 
-       ret = mach64_dma_dispatch_swap(filp, dev);
+       ret = mach64_dma_dispatch_swap(dev, file_priv);
 
        /* Make sure we restore the 3D state next time.
         */
@@ -803,58 +806,52 @@ int mach64_dma_swap(DRM_IOCTL_ARGS)
        return ret;
 }
 
-int mach64_dma_vertex(DRM_IOCTL_ARGS)
+int mach64_dma_vertex(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_mach64_vertex_t vertex;
+       drm_mach64_vertex_t *vertex = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(vertex, (drm_mach64_vertex_t *) data,
-                                sizeof(vertex));
-
        DRM_DEBUG("%s: pid=%d buf=%p used=%lu discard=%d\n",
                  __FUNCTION__, DRM_CURRENTPID,
-                 vertex.buf, vertex.used, vertex.discard);
+                 vertex->buf, vertex->used, vertex->discard);
 
-       if (vertex.prim < 0 || vertex.prim > MACH64_PRIM_POLYGON) {
-               DRM_ERROR("buffer prim %d\n", vertex.prim);
-               return DRM_ERR(EINVAL);
+       if (vertex->prim < 0 || vertex->prim > MACH64_PRIM_POLYGON) {
+               DRM_ERROR("buffer prim %d\n", vertex->prim);
+               return -EINVAL;
        }
 
-       if (vertex.used > MACH64_BUFFER_SIZE || (vertex.used & 3) != 0) {
+       if (vertex->used > MACH64_BUFFER_SIZE || (vertex->used & 3) != 0) {
                DRM_ERROR("Invalid vertex buffer size: %lu bytes\n",
-                         vertex.used);
-               return DRM_ERR(EINVAL);
+                         vertex->used);
+               return -EINVAL;
        }
 
        if (sarea_priv->nbox > MACH64_NR_SAREA_CLIPRECTS)
                sarea_priv->nbox = MACH64_NR_SAREA_CLIPRECTS;
 
-       return mach64_dma_dispatch_vertex(filp, dev, &vertex);
+       return mach64_dma_dispatch_vertex(dev, file_priv, vertex);
 }
 
-int mach64_dma_blit(DRM_IOCTL_ARGS)
+int mach64_dma_blit(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mach64_private_t *dev_priv = dev->dev_private;
        drm_mach64_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_mach64_blit_t blit;
+       drm_mach64_blit_t *blit = data;
        int ret;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(blit, (drm_mach64_blit_t *) data,
-                                sizeof(blit));
-
-       ret = mach64_dma_dispatch_blit(filp, dev, &blit);
+       ret = mach64_dma_dispatch_blit(dev, file_priv, blit);
 
        /* Make sure we restore the 3D state next time.
         */
@@ -864,39 +861,36 @@ int mach64_dma_blit(DRM_IOCTL_ARGS)
        return ret;
 }
 
-int mach64_get_param(DRM_IOCTL_ARGS)
+int mach64_get_param(struct drm_device *dev, void *data,
+                    struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mach64_private_t *dev_priv = dev->dev_private;
-       drm_mach64_getparam_t param;
+       drm_mach64_getparam_t *param = data;
        int value;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(param, (drm_mach64_getparam_t *) data,
-                                sizeof(param));
-
-       switch (param.param) {
+       switch (param->param) {
        case MACH64_PARAM_FRAMES_QUEUED:
                /* Needs lock since it calls mach64_ring_tick() */
-               LOCK_TEST_WITH_RETURN(dev, filp);
+               LOCK_TEST_WITH_RETURN(dev, file_priv);
                value = mach64_do_get_frames_queued(dev_priv);
                break;
        case MACH64_PARAM_IRQ_NR:
                value = dev->irq;
                break;
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       if (DRM_COPY_TO_USER(param.value, &value, sizeof(int))) {
+       if (DRM_COPY_TO_USER(param->value, &value, sizeof(int))) {
                DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
index d48313c..a86dd31 100644 (file)
@@ -46,7 +46,7 @@
 
 #define MINIMAL_CLEANUP    0
 #define FULL_CLEANUP       1
-static int mga_do_cleanup_dma(drm_device_t * dev, int full_cleanup);
+static int mga_do_cleanup_dma(struct drm_device * dev, int full_cleanup);
 
 /* ================================================================
  * Engine control
@@ -71,7 +71,7 @@ int mga_do_wait_for_idle(drm_mga_private_t * dev_priv)
        DRM_ERROR("failed!\n");
        DRM_INFO("   status=0x%08x\n", status);
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 static int mga_do_dma_reset(drm_mga_private_t * dev_priv)
@@ -224,7 +224,7 @@ void mga_do_dma_wrap_end(drm_mga_private_t * dev_priv)
 #define MGA_BUFFER_FREE                0
 
 #if MGA_FREELIST_DEBUG
-static void mga_freelist_print(drm_device_t * dev)
+static void mga_freelist_print(struct drm_device * dev)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_freelist_t *entry;
@@ -245,10 +245,10 @@ static void mga_freelist_print(drm_device_t * dev)
 }
 #endif
 
-static int mga_freelist_init(drm_device_t * dev, drm_mga_private_t * dev_priv)
+static int mga_freelist_init(struct drm_device * dev, drm_mga_private_t * dev_priv)
 {
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
        drm_mga_buf_priv_t *buf_priv;
        drm_mga_freelist_t *entry;
        int i;
@@ -256,7 +256,7 @@ static int mga_freelist_init(drm_device_t * dev, drm_mga_private_t * dev_priv)
 
        dev_priv->head = drm_alloc(sizeof(drm_mga_freelist_t), DRM_MEM_DRIVER);
        if (dev_priv->head == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        memset(dev_priv->head, 0, sizeof(drm_mga_freelist_t));
        SET_AGE(&dev_priv->head->age, MGA_BUFFER_USED, 0);
@@ -267,7 +267,7 @@ static int mga_freelist_init(drm_device_t * dev, drm_mga_private_t * dev_priv)
 
                entry = drm_alloc(sizeof(drm_mga_freelist_t), DRM_MEM_DRIVER);
                if (entry == NULL)
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
 
                memset(entry, 0, sizeof(drm_mga_freelist_t));
 
@@ -291,7 +291,7 @@ static int mga_freelist_init(drm_device_t * dev, drm_mga_private_t * dev_priv)
        return 0;
 }
 
-static void mga_freelist_cleanup(drm_device_t * dev)
+static void mga_freelist_cleanup(struct drm_device * dev)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_freelist_t *entry;
@@ -311,10 +311,10 @@ static void mga_freelist_cleanup(drm_device_t * dev)
 #if 0
 /* FIXME: Still needed?
  */
-static void mga_freelist_reset(drm_device_t * dev)
+static void mga_freelist_reset(struct drm_device * dev)
 {
        drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        drm_mga_buf_priv_t *buf_priv;
        int i;
 
@@ -326,7 +326,7 @@ static void mga_freelist_reset(drm_device_t * dev)
 }
 #endif
 
-static drm_buf_t *mga_freelist_get(drm_device_t * dev)
+static struct drm_buf *mga_freelist_get(struct drm_device * dev)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_freelist_t *next;
@@ -359,7 +359,7 @@ static drm_buf_t *mga_freelist_get(drm_device_t * dev)
        return NULL;
 }
 
-int mga_freelist_put(drm_device_t * dev, drm_buf_t * buf)
+int mga_freelist_put(struct drm_device * dev, struct drm_buf * buf)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_buf_priv_t *buf_priv = buf->dev_private;
@@ -393,13 +393,13 @@ int mga_freelist_put(drm_device_t * dev, drm_buf_t * buf)
  * DMA initialization, cleanup
  */
 
-int mga_driver_load(drm_device_t *dev, unsigned long flags)
+int mga_driver_load(struct drm_device *dev, unsigned long flags)
 {
        drm_mga_private_t * dev_priv;
 
        dev_priv = drm_alloc(sizeof(drm_mga_private_t), DRM_MEM_DRIVER);
        if (!dev_priv)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        dev->dev_private = (void *)dev_priv;
        memset(dev_priv, 0, sizeof(drm_mga_private_t));
@@ -433,7 +433,7 @@ int mga_driver_load(drm_device_t *dev, unsigned long flags)
  *
  * \sa mga_do_dma_bootstrap, mga_do_pci_dma_bootstrap
  */
-static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
+static int mga_do_agp_dma_bootstrap(struct drm_device *dev,
                                    drm_mga_dma_bootstrap_t * dma_bs)
 {
        drm_mga_private_t * const dev_priv = (drm_mga_private_t *) dev->dev_private;
@@ -443,11 +443,11 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
        const unsigned secondary_size = dma_bs->secondary_bin_count
                * dma_bs->secondary_bin_size;
        const unsigned agp_size = (dma_bs->agp_size << 20);
-       drm_buf_desc_t req;
-       drm_agp_mode_t mode;
-       drm_agp_info_t info;
-       drm_agp_buffer_t agp_req;
-       drm_agp_binding_t bind_req;
+       struct drm_buf_desc req;
+       struct drm_agp_mode mode;
+       struct drm_agp_info info;
+       struct drm_agp_buffer agp_req;
+       struct drm_agp_binding bind_req;
 
        /* Acquire AGP. */
        err = drm_agp_acquire(dev);
@@ -548,7 +548,7 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
 
 #ifdef __linux__
        {
-               drm_map_list_t *_entry;
+               struct drm_map_list *_entry;
                unsigned long agp_token = 0;
 
                list_for_each_entry(_entry, &dev->maplist, head) {
@@ -579,7 +579,7 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
                DRM_ERROR("failed to ioremap agp regions! (%p, %p, %p)\n",
                          dev_priv->warp->handle, dev_priv->primary->handle,
                          dev->agp_buffer_map->handle);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        dev_priv->dma_access = MGA_PAGPXFER;
@@ -603,7 +603,7 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
  * 
  * \sa mga_do_dma_bootstrap, mga_do_agp_dma_bootstrap
  */
-static int mga_do_pci_dma_bootstrap(drm_device_t * dev,
+static int mga_do_pci_dma_bootstrap(struct drm_device * dev,
                                    drm_mga_dma_bootstrap_t * dma_bs)
 {
        drm_mga_private_t * const dev_priv = (drm_mga_private_t *) dev->dev_private;
@@ -611,12 +611,12 @@ static int mga_do_pci_dma_bootstrap(drm_device_t * dev,
        unsigned int primary_size;
        unsigned int bin_count;
        int err;
-       drm_buf_desc_t req;
+       struct drm_buf_desc req;
 
        
        if (dev->dma == NULL) {
                DRM_ERROR("dev->dma is NULL\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        /* Make drm_addbufs happy by not trying to create a mapping for less
@@ -651,7 +651,7 @@ static int mga_do_pci_dma_bootstrap(drm_device_t * dev,
 
        if (err != 0) {
                DRM_ERROR("Unable to allocate primary DMA region: %d\n", err);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        if (dev_priv->primary->size != dma_bs->primary_size) {
@@ -696,7 +696,7 @@ static int mga_do_pci_dma_bootstrap(drm_device_t * dev,
 }
 
 
-static int mga_do_dma_bootstrap(drm_device_t * dev,
+static int mga_do_dma_bootstrap(struct drm_device * dev,
                                drm_mga_dma_bootstrap_t * dma_bs)
 {
        const int is_agp = (dma_bs->agp_mode != 0) && drm_device_is_agp(dev);
@@ -762,44 +762,37 @@ static int mga_do_dma_bootstrap(drm_device_t * dev,
        return err;
 }
 
-int mga_dma_bootstrap(DRM_IOCTL_ARGS)
+int mga_dma_bootstrap(struct drm_device *dev, void *data,
+                     struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_mga_dma_bootstrap_t bootstrap;
+       drm_mga_dma_bootstrap_t *bootstrap = data;
        int err;
        static const int modes[] = { 0, 1, 2, 2, 4, 4, 4, 4 };
        const drm_mga_private_t * const dev_priv = 
                (drm_mga_private_t *) dev->dev_private;
 
 
-       DRM_COPY_FROM_USER_IOCTL(bootstrap,
-                                (drm_mga_dma_bootstrap_t __user *) data,
-                                sizeof(bootstrap));
-
-       err = mga_do_dma_bootstrap(dev, & bootstrap);
+       err = mga_do_dma_bootstrap(dev, bootstrap);
        if (err) {
                mga_do_cleanup_dma(dev, FULL_CLEANUP);
                return err;
        }
 
        if (dev_priv->agp_textures != NULL) {
-               bootstrap.texture_handle = dev_priv->agp_textures->offset;
-               bootstrap.texture_size = dev_priv->agp_textures->size;
+               bootstrap->texture_handle = dev_priv->agp_textures->offset;
+               bootstrap->texture_size = dev_priv->agp_textures->size;
        } else {
-               bootstrap.texture_handle = 0;
-               bootstrap.texture_size = 0;
+               bootstrap->texture_handle = 0;
+               bootstrap->texture_size = 0;
        }
 
-       bootstrap.agp_mode = modes[bootstrap.agp_mode & 0x07];
-
-       DRM_COPY_TO_USER_IOCTL((drm_mga_dma_bootstrap_t __user *)data,
-                              bootstrap, sizeof(bootstrap));
+       bootstrap->agp_mode = modes[bootstrap->agp_mode & 0x07];
 
        return 0;
 }
 
 
-static int mga_do_init_dma(drm_device_t * dev, drm_mga_init_t * init)
+static int mga_do_init_dma(struct drm_device * dev, drm_mga_init_t * init)
 {
        drm_mga_private_t *dev_priv;
        int ret;
@@ -833,7 +826,7 @@ static int mga_do_init_dma(drm_device_t * dev, drm_mga_init_t * init)
        dev_priv->sarea = drm_getsarea(dev);
        if (!dev_priv->sarea) {
                DRM_ERROR("failed to find sarea!\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (! dev_priv->used_new_dma_init) {
@@ -844,28 +837,28 @@ static int mga_do_init_dma(drm_device_t * dev, drm_mga_init_t * init)
                dev_priv->status = drm_core_findmap(dev, init->status_offset);
                if (!dev_priv->status) {
                        DRM_ERROR("failed to find status page!\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                dev_priv->mmio = drm_core_findmap(dev, init->mmio_offset);
                if (!dev_priv->mmio) {
                        DRM_ERROR("failed to find mmio region!\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                dev_priv->warp = drm_core_findmap(dev, init->warp_offset);
                if (!dev_priv->warp) {
                        DRM_ERROR("failed to find warp microcode region!\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                dev_priv->primary = drm_core_findmap(dev, init->primary_offset);
                if (!dev_priv->primary) {
                        DRM_ERROR("failed to find primary dma region!\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                dev->agp_buffer_token = init->buffers_offset;
                dev->agp_buffer_map = drm_core_findmap(dev, init->buffers_offset);
                if (!dev->agp_buffer_map) {
                        DRM_ERROR("failed to find dma buffer region!\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                drm_core_ioremap(dev_priv->warp, dev);
@@ -883,7 +876,7 @@ static int mga_do_init_dma(drm_device_t * dev, drm_mga_init_t * init)
             ((dev->agp_buffer_map == NULL) ||
              (dev->agp_buffer_map->handle == NULL)))) {
                DRM_ERROR("failed to ioremap agp regions!\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        ret = mga_warp_install_microcode(dev_priv);
@@ -933,13 +926,13 @@ static int mga_do_init_dma(drm_device_t * dev, drm_mga_init_t * init)
 
        if (mga_freelist_init(dev, dev_priv) < 0) {
                DRM_ERROR("could not initialize freelist\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        return 0;
 }
 
-static int mga_do_cleanup_dma(drm_device_t * dev, int full_cleanup)
+static int mga_do_cleanup_dma(struct drm_device * dev, int full_cleanup)
 {
        int err = 0;
        DRM_DEBUG("\n");
@@ -967,8 +960,8 @@ static int mga_do_cleanup_dma(drm_device_t * dev, int full_cleanup)
 
                if (dev_priv->used_new_dma_init) {
                        if (dev_priv->agp_handle != 0) {
-                               drm_agp_binding_t unbind_req;
-                               drm_agp_buffer_t free_req;
+                               struct drm_agp_binding unbind_req;
+                               struct drm_agp_buffer free_req;
 
                                unbind_req.handle = dev_priv->agp_handle;
                                drm_agp_unbind(dev, &unbind_req);
@@ -1010,20 +1003,17 @@ static int mga_do_cleanup_dma(drm_device_t * dev, int full_cleanup)
        return 0;
 }
 
-int mga_dma_init(DRM_IOCTL_ARGS)
+int mga_dma_init(struct drm_device *dev, void *data,
+                struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_mga_init_t init;
+       drm_mga_init_t *init = data;
        int err;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_mga_init_t __user *) data,
-                                sizeof(init));
-
-       switch (init.func) {
+       switch (init->func) {
        case MGA_INIT_DMA:
-               err = mga_do_init_dma(dev, &init);
+               err = mga_do_init_dma(dev, init);
                if (err) {
                        (void) mga_do_cleanup_dma(dev, FULL_CLEANUP);
                }
@@ -1032,36 +1022,33 @@ int mga_dma_init(DRM_IOCTL_ARGS)
                return mga_do_cleanup_dma(dev, FULL_CLEANUP);
        }
 
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
 /* ================================================================
  * Primary DMA stream management
  */
 
-int mga_dma_flush(DRM_IOCTL_ARGS)
+int mga_dma_flush(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
-       drm_lock_t lock;
-
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       struct drm_lock *lock = data;
 
-       DRM_COPY_FROM_USER_IOCTL(lock, (drm_lock_t __user *) data,
-                                sizeof(lock));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        DRM_DEBUG("%s%s%s\n",
-                 (lock.flags & _DRM_LOCK_FLUSH) ? "flush, " : "",
-                 (lock.flags & _DRM_LOCK_FLUSH_ALL) ? "flush all, " : "",
-                 (lock.flags & _DRM_LOCK_QUIESCENT) ? "idle, " : "");
+                 (lock->flags & _DRM_LOCK_FLUSH) ? "flush, " : "",
+                 (lock->flags & _DRM_LOCK_FLUSH_ALL) ? "flush all, " : "",
+                 (lock->flags & _DRM_LOCK_QUIESCENT) ? "idle, " : "");
 
        WRAP_WAIT_WITH_RETURN(dev_priv);
 
-       if (lock.flags & (_DRM_LOCK_FLUSH | _DRM_LOCK_FLUSH_ALL)) {
+       if (lock->flags & (_DRM_LOCK_FLUSH | _DRM_LOCK_FLUSH_ALL)) {
                mga_do_dma_flush(dev_priv);
        }
 
-       if (lock.flags & _DRM_LOCK_QUIESCENT) {
+       if (lock->flags & _DRM_LOCK_QUIESCENT) {
 #if MGA_DMA_DEBUG
                int ret = mga_do_wait_for_idle(dev_priv);
                if (ret < 0)
@@ -1075,12 +1062,12 @@ int mga_dma_flush(DRM_IOCTL_ARGS)
        }
 }
 
-int mga_dma_reset(DRM_IOCTL_ARGS)
+int mga_dma_reset(struct drm_device *dev, void *data,
+                 struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return mga_do_dma_reset(dev_priv);
 }
@@ -1089,76 +1076,72 @@ int mga_dma_reset(DRM_IOCTL_ARGS)
  * DMA buffer management
  */
 
-static int mga_dma_get_buffers(DRMFILE filp, drm_device_t * dev, drm_dma_t * d)
+static int mga_dma_get_buffers(struct drm_device * dev,
+                              struct drm_file *file_priv, struct drm_dma * d)
 {
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        int i;
 
        for (i = d->granted_count; i < d->request_count; i++) {
                buf = mga_freelist_get(dev);
                if (!buf)
-                       return DRM_ERR(EAGAIN);
+                       return -EAGAIN;
 
-               buf->filp = filp;
+               buf->file_priv = file_priv;
 
                if (DRM_COPY_TO_USER(&d->request_indices[i],
                                     &buf->idx, sizeof(buf->idx)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                if (DRM_COPY_TO_USER(&d->request_sizes[i],
                                     &buf->total, sizeof(buf->total)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
 
                d->granted_count++;
        }
        return 0;
 }
 
-int mga_dma_buffers(DRM_IOCTL_ARGS)
+int mga_dma_buffers(struct drm_device *dev, void *data,
+                   struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
-       drm_dma_t __user *argp = (void __user *)data;
-       drm_dma_t d;
+       struct drm_dma *d = data;
        int ret = 0;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        /* Please don't send us buffers.
         */
-       if (d.send_count != 0) {
+       if (d->send_count != 0) {
                DRM_ERROR("Process %d trying to send %d buffers via drmDMA\n",
-                         DRM_CURRENTPID, d.send_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->send_count);
+               return -EINVAL;
        }
 
        /* We'll send you buffers.
         */
-       if (d.request_count < 0 || d.request_count > dma->buf_count) {
+       if (d->request_count < 0 || d->request_count > dma->buf_count) {
                DRM_ERROR("Process %d trying to get %d buffers (of %d max)\n",
-                         DRM_CURRENTPID, d.request_count, dma->buf_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->request_count, dma->buf_count);
+               return -EINVAL;
        }
 
        WRAP_TEST_WITH_RETURN(dev_priv);
 
-       d.granted_count = 0;
+       d->granted_count = 0;
 
-       if (d.request_count) {
-               ret = mga_dma_get_buffers(filp, dev, &d);
+       if (d->request_count) {
+               ret = mga_dma_get_buffers(dev, file_priv, d);
        }
 
-       DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
-
        return ret;
 }
 
 /**
  * Called just before the module is unloaded.
  */
-int mga_driver_unload(drm_device_t * dev)
+int mga_driver_unload(struct drm_device * dev)
 {
        drm_free(dev->dev_private, sizeof(drm_mga_private_t), DRM_MEM_DRIVER);
        dev->dev_private = NULL;
@@ -1169,12 +1152,12 @@ int mga_driver_unload(drm_device_t * dev)
 /**
  * Called when the last opener of the device is closed.
  */
-void mga_driver_lastclose(drm_device_t * dev)
+void mga_driver_lastclose(struct drm_device * dev)
 {
        mga_do_cleanup_dma(dev, FULL_CLEANUP);
 }
 
-int mga_driver_dma_quiescent(drm_device_t * dev)
+int mga_driver_dma_quiescent(struct drm_device * dev)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        return mga_do_wait_for_idle(dev_priv);
index 5bcdbfa..15c2dea 100644 (file)
@@ -181,7 +181,7 @@ typedef struct _drm_mga_sarea {
 
        /* The current cliprects, or a subset thereof.
         */
-       drm_clip_rect_t boxes[MGA_NR_SAREA_CLIPRECTS];
+       struct drm_clip_rect boxes[MGA_NR_SAREA_CLIPRECTS];
        unsigned int nbox;
 
        /* Information about the most recently used 3d drawable.  The
@@ -202,7 +202,7 @@ typedef struct _drm_mga_sarea {
        unsigned int exported_nback;
        int exported_back_x, exported_front_x, exported_w;
        int exported_back_y, exported_front_y, exported_h;
-       drm_clip_rect_t exported_boxes[MGA_NR_SAREA_CLIPRECTS];
+       struct drm_clip_rect exported_boxes[MGA_NR_SAREA_CLIPRECTS];
 
        /* Counters for aging textures and for client-side throttling.
         */
@@ -216,7 +216,7 @@ typedef struct _drm_mga_sarea {
 
        /* LRU lists for texture memory in agp space and on the card.
         */
-       drm_tex_region_t texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS + 1];
+       struct drm_tex_region texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS + 1];
        unsigned int texAge[MGA_NR_TEX_HEAPS];
 
        /* Mechanism to validate card state.
index bce8213..8254c3f 100644 (file)
@@ -65,7 +65,7 @@ typedef struct drm_mga_freelist {
        struct drm_mga_freelist *next;
        struct drm_mga_freelist *prev;
        drm_mga_age_t age;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
 } drm_mga_freelist_t;
 
 typedef struct {
@@ -148,19 +148,24 @@ typedef struct drm_mga_private {
        unsigned int agp_size;
 } drm_mga_private_t;
 
-extern drm_ioctl_desc_t mga_ioctls[];
+extern struct drm_ioctl_desc mga_ioctls[];
 extern int mga_max_ioctl;
 
                                /* mga_dma.c */
-extern int mga_dma_bootstrap(DRM_IOCTL_ARGS);
-extern int mga_dma_init(DRM_IOCTL_ARGS);
-extern int mga_dma_flush(DRM_IOCTL_ARGS);
-extern int mga_dma_reset(DRM_IOCTL_ARGS);
-extern int mga_dma_buffers(DRM_IOCTL_ARGS);
-extern int mga_driver_load(drm_device_t *dev, unsigned long flags);
-extern int mga_driver_unload(drm_device_t * dev);
-extern void mga_driver_lastclose(drm_device_t * dev);
-extern int mga_driver_dma_quiescent(drm_device_t * dev);
+extern int mga_dma_bootstrap(struct drm_device *dev, void *data,
+                            struct drm_file *file_priv);
+extern int mga_dma_init(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int mga_dma_flush(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int mga_dma_reset(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int mga_dma_buffers(struct drm_device *dev, void *data,
+                          struct drm_file *file_priv);
+extern int mga_driver_load(struct drm_device *dev, unsigned long flags);
+extern int mga_driver_unload(struct drm_device * dev);
+extern void mga_driver_lastclose(struct drm_device * dev);
+extern int mga_driver_dma_quiescent(struct drm_device * dev);
 
 extern int mga_do_wait_for_idle(drm_mga_private_t * dev_priv);
 
@@ -168,7 +173,7 @@ extern void mga_do_dma_flush(drm_mga_private_t * dev_priv);
 extern void mga_do_dma_wrap_start(drm_mga_private_t * dev_priv);
 extern void mga_do_dma_wrap_end(drm_mga_private_t * dev_priv);
 
-extern int mga_freelist_put(drm_device_t * dev, drm_buf_t * buf);
+extern int mga_freelist_put(struct drm_device * dev, struct drm_buf * buf);
 
                                /* mga_warp.c */
 extern unsigned int mga_warp_microcode_size(const drm_mga_private_t * dev_priv);
@@ -176,12 +181,12 @@ extern int mga_warp_install_microcode(drm_mga_private_t * dev_priv);
 extern int mga_warp_init(drm_mga_private_t * dev_priv);
 
                                /* mga_irq.c */
-extern int mga_driver_fence_wait(drm_device_t * dev, unsigned int *sequence);
-extern int mga_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence);
+extern int mga_driver_fence_wait(struct drm_device * dev, unsigned int *sequence);
+extern int mga_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence);
 extern irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS);
-extern void mga_driver_irq_preinstall(drm_device_t * dev);
-extern void mga_driver_irq_postinstall(drm_device_t * dev);
-extern void mga_driver_irq_uninstall(drm_device_t * dev);
+extern void mga_driver_irq_preinstall(struct drm_device * dev);
+extern void mga_driver_irq_postinstall(struct drm_device * dev);
+extern void mga_driver_irq_uninstall(struct drm_device * dev);
 extern long mga_compat_ioctl(struct file *filp, unsigned int cmd,
                             unsigned long arg);
 
@@ -245,7 +250,7 @@ do {                                                                        \
                            dev_priv->prim.high_mark ) {                \
                        if ( MGA_DMA_DEBUG )                            \
                                DRM_INFO( "%s: wrap...\n", __FUNCTION__ );      \
-                       return DRM_ERR(EBUSY);                  \
+                       return -EBUSY;                  \
                }                                                       \
        }                                                               \
 } while (0)
@@ -256,7 +261,7 @@ do {                                                                        \
                if ( mga_do_wait_for_idle( dev_priv ) < 0 ) {           \
                        if ( MGA_DMA_DEBUG )                            \
                                DRM_INFO( "%s: wrap...\n", __FUNCTION__ );      \
-                       return DRM_ERR(EBUSY);                  \
+                       return -EBUSY;                  \
                }                                                       \
                mga_do_dma_wrap_end( dev_priv );                        \
        }                                                               \
index 490d1fb..8b555e2 100644 (file)
@@ -38,7 +38,7 @@
 
 irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS)
 {
-       drm_device_t *dev = (drm_device_t *) arg;
+       struct drm_device *dev = (struct drm_device *) arg;
        drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
        int status;
        int handled = 0;
@@ -80,7 +80,7 @@ irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS)
        return IRQ_NONE;
 }
 
-int mga_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
+int mga_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence)
 {
        unsigned int cur_vblank;
        int ret = 0;
@@ -98,7 +98,7 @@ int mga_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
        return ret;
 }
 
-int mga_driver_fence_wait(drm_device_t * dev, unsigned int *sequence)
+int mga_driver_fence_wait(struct drm_device * dev, unsigned int *sequence)
 {
        drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
        unsigned int cur_fence;
@@ -117,7 +117,7 @@ int mga_driver_fence_wait(drm_device_t * dev, unsigned int *sequence)
        return ret;
 }
 
-void mga_driver_irq_preinstall(drm_device_t * dev)
+void mga_driver_irq_preinstall(struct drm_device * dev)
 {
        drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
 
@@ -127,7 +127,7 @@ void mga_driver_irq_preinstall(drm_device_t * dev)
        MGA_WRITE(MGA_ICLEAR, ~0);
 }
 
-void mga_driver_irq_postinstall(drm_device_t * dev)
+void mga_driver_irq_postinstall(struct drm_device * dev)
 {
        drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
 
@@ -137,7 +137,7 @@ void mga_driver_irq_postinstall(drm_device_t * dev)
        MGA_WRITE(MGA_IEN, MGA_VLINEIEN | MGA_SOFTRAPEN);
 }
 
-void mga_driver_irq_uninstall(drm_device_t * dev)
+void mga_driver_irq_uninstall(struct drm_device * dev)
 {
        drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
        if (!dev_priv)
index 8e5cb33..70b7caa 100644 (file)
@@ -43,7 +43,7 @@
  */
 
 static void mga_emit_clip_rect(drm_mga_private_t * dev_priv,
-                              drm_clip_rect_t * box)
+                              struct drm_clip_rect * box)
 {
        drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
        drm_mga_context_regs_t *ctx = &sarea_priv->context_state;
@@ -416,7 +416,7 @@ static int mga_verify_context(drm_mga_private_t * dev_priv)
                          ctx->dstorg, dev_priv->front_offset,
                          dev_priv->back_offset);
                ctx->dstorg = 0;
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        return 0;
@@ -435,7 +435,7 @@ static int mga_verify_tex(drm_mga_private_t * dev_priv, int unit)
        if (org == (MGA_TEXORGMAP_SYSMEM | MGA_TEXORGACC_PCI)) {
                DRM_ERROR("*** bad TEXORG: 0x%x, unit %d\n", tex->texorg, unit);
                tex->texorg = 0;
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        return 0;
@@ -477,13 +477,13 @@ static int mga_verify_iload(drm_mga_private_t * dev_priv,
            dstorg + length > (dev_priv->texture_offset +
                               dev_priv->texture_size)) {
                DRM_ERROR("*** bad iload DSTORG: 0x%x\n", dstorg);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (length & MGA_ILOAD_MASK) {
                DRM_ERROR("*** bad iload length: 0x%x\n",
                          length & MGA_ILOAD_MASK);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        return 0;
@@ -495,7 +495,7 @@ static int mga_verify_blit(drm_mga_private_t * dev_priv,
        if ((srcorg & 0x3) == (MGA_SRCACC_PCI | MGA_SRCMAP_SYSMEM) ||
            (dstorg & 0x3) == (MGA_SRCACC_PCI | MGA_SRCMAP_SYSMEM)) {
                DRM_ERROR("*** bad blit: src=0x%x dst=0x%x\n", srcorg, dstorg);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        return 0;
 }
@@ -504,12 +504,12 @@ static int mga_verify_blit(drm_mga_private_t * dev_priv,
  *
  */
 
-static void mga_dma_dispatch_clear(drm_device_t * dev, drm_mga_clear_t * clear)
+static void mga_dma_dispatch_clear(struct drm_device * dev, drm_mga_clear_t * clear)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
        drm_mga_context_regs_t *ctx = &sarea_priv->context_state;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        int nbox = sarea_priv->nbox;
        int i;
        DMA_LOCALS;
@@ -525,7 +525,7 @@ static void mga_dma_dispatch_clear(drm_device_t * dev, drm_mga_clear_t * clear)
        ADVANCE_DMA();
 
        for (i = 0; i < nbox; i++) {
-               drm_clip_rect_t *box = &pbox[i];
+               struct drm_clip_rect *box = &pbox[i];
                u32 height = box->y2 - box->y1;
 
                DRM_DEBUG("   from=%d,%d to=%d,%d\n",
@@ -594,12 +594,12 @@ static void mga_dma_dispatch_clear(drm_device_t * dev, drm_mga_clear_t * clear)
        FLUSH_DMA();
 }
 
-static void mga_dma_dispatch_swap(drm_device_t * dev)
+static void mga_dma_dispatch_swap(struct drm_device * dev)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
        drm_mga_context_regs_t *ctx = &sarea_priv->context_state;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        int nbox = sarea_priv->nbox;
        int i;
        DMA_LOCALS;
@@ -626,7 +626,7 @@ static void mga_dma_dispatch_swap(drm_device_t * dev)
                  MGA_DWGCTL, MGA_DWGCTL_COPY);
 
        for (i = 0; i < nbox; i++) {
-               drm_clip_rect_t *box = &pbox[i];
+               struct drm_clip_rect *box = &pbox[i];
                u32 height = box->y2 - box->y1;
                u32 start = box->y1 * dev_priv->front_pitch;
 
@@ -651,7 +651,7 @@ static void mga_dma_dispatch_swap(drm_device_t * dev)
        DRM_DEBUG("%s... done.\n", __FUNCTION__);
 }
 
-static void mga_dma_dispatch_vertex(drm_device_t * dev, drm_buf_t * buf)
+static void mga_dma_dispatch_vertex(struct drm_device * dev, struct drm_buf * buf)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_buf_priv_t *buf_priv = buf->dev_private;
@@ -698,7 +698,7 @@ static void mga_dma_dispatch_vertex(drm_device_t * dev, drm_buf_t * buf)
        FLUSH_DMA();
 }
 
-static void mga_dma_dispatch_indices(drm_device_t * dev, drm_buf_t * buf,
+static void mga_dma_dispatch_indices(struct drm_device * dev, struct drm_buf * buf,
                                     unsigned int start, unsigned int end)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
@@ -747,7 +747,7 @@ static void mga_dma_dispatch_indices(drm_device_t * dev, drm_buf_t * buf,
 /* This copies a 64 byte aligned agp region to the frambuffer with a
  * standard blit, the ioctl needs to do checking.
  */
-static void mga_dma_dispatch_iload(drm_device_t * dev, drm_buf_t * buf,
+static void mga_dma_dispatch_iload(struct drm_device * dev, struct drm_buf * buf,
                                   unsigned int dstorg, unsigned int length)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
@@ -800,12 +800,12 @@ static void mga_dma_dispatch_iload(drm_device_t * dev, drm_buf_t * buf,
        FLUSH_DMA();
 }
 
-static void mga_dma_dispatch_blit(drm_device_t * dev, drm_mga_blit_t * blit)
+static void mga_dma_dispatch_blit(struct drm_device * dev, drm_mga_blit_t * blit)
 {
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
        drm_mga_context_regs_t *ctx = &sarea_priv->context_state;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        int nbox = sarea_priv->nbox;
        u32 scandir = 0, i;
        DMA_LOCALS;
@@ -865,24 +865,20 @@ static void mga_dma_dispatch_blit(drm_device_t * dev, drm_mga_blit_t * blit)
  *
  */
 
-static int mga_dma_clear(DRM_IOCTL_ARGS)
+static int mga_dma_clear(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_mga_clear_t clear;
+       drm_mga_clear_t *clear = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(clear, (drm_mga_clear_t __user *) data,
-                                sizeof(clear));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (sarea_priv->nbox > MGA_NR_SAREA_CLIPRECTS)
                sarea_priv->nbox = MGA_NR_SAREA_CLIPRECTS;
 
        WRAP_TEST_WITH_RETURN(dev_priv);
 
-       mga_dma_dispatch_clear(dev, &clear);
+       mga_dma_dispatch_clear(dev, clear);
 
        /* Make sure we restore the 3D state next time.
         */
@@ -891,13 +887,12 @@ static int mga_dma_clear(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int mga_dma_swap(DRM_IOCTL_ARGS)
+static int mga_dma_swap(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (sarea_priv->nbox > MGA_NR_SAREA_CLIPRECTS)
                sarea_priv->nbox = MGA_NR_SAREA_CLIPRECTS;
@@ -913,37 +908,32 @@ static int mga_dma_swap(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int mga_dma_vertex(DRM_IOCTL_ARGS)
+static int mga_dma_vertex(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
        drm_mga_buf_priv_t *buf_priv;
-       drm_mga_vertex_t vertex;
-
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       drm_mga_vertex_t *vertex = data;
 
-       DRM_COPY_FROM_USER_IOCTL(vertex,
-                                (drm_mga_vertex_t __user *) data,
-                                sizeof(vertex));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       if (vertex.idx < 0 || vertex.idx > dma->buf_count)
-               return DRM_ERR(EINVAL);
-       buf = dma->buflist[vertex.idx];
+       if (vertex->idx < 0 || vertex->idx > dma->buf_count)
+               return -EINVAL;
+       buf = dma->buflist[vertex->idx];
        buf_priv = buf->dev_private;
 
-       buf->used = vertex.used;
-       buf_priv->discard = vertex.discard;
+       buf->used = vertex->used;
+       buf_priv->discard = vertex->discard;
 
        if (!mga_verify_state(dev_priv)) {
-               if (vertex.discard) {
+               if (vertex->discard) {
                        if (buf_priv->dispatched == 1)
                                AGE_BUFFER(buf_priv);
                        buf_priv->dispatched = 0;
                        mga_freelist_put(dev, buf);
                }
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        WRAP_TEST_WITH_RETURN(dev_priv);
@@ -953,82 +943,73 @@ static int mga_dma_vertex(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int mga_dma_indices(DRM_IOCTL_ARGS)
+static int mga_dma_indices(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
        drm_mga_buf_priv_t *buf_priv;
-       drm_mga_indices_t indices;
-
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       drm_mga_indices_t *indices = data;
 
-       DRM_COPY_FROM_USER_IOCTL(indices,
-                                (drm_mga_indices_t __user *) data,
-                                sizeof(indices));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       if (indices.idx < 0 || indices.idx > dma->buf_count)
-               return DRM_ERR(EINVAL);
+       if (indices->idx < 0 || indices->idx > dma->buf_count)
+               return -EINVAL;
 
-       buf = dma->buflist[indices.idx];
+       buf = dma->buflist[indices->idx];
        buf_priv = buf->dev_private;
 
-       buf_priv->discard = indices.discard;
+       buf_priv->discard = indices->discard;
 
        if (!mga_verify_state(dev_priv)) {
-               if (indices.discard) {
+               if (indices->discard) {
                        if (buf_priv->dispatched == 1)
                                AGE_BUFFER(buf_priv);
                        buf_priv->dispatched = 0;
                        mga_freelist_put(dev, buf);
                }
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        WRAP_TEST_WITH_RETURN(dev_priv);
 
-       mga_dma_dispatch_indices(dev, buf, indices.start, indices.end);
+       mga_dma_dispatch_indices(dev, buf, indices->start, indices->end);
 
        return 0;
 }
 
-static int mga_dma_iload(DRM_IOCTL_ARGS)
+static int mga_dma_iload(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_mga_private_t *dev_priv = dev->dev_private;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        drm_mga_buf_priv_t *buf_priv;
-       drm_mga_iload_t iload;
+       drm_mga_iload_t *iload = data;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(iload, (drm_mga_iload_t __user *) data,
-                                sizeof(iload));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
 #if 0
        if (mga_do_wait_for_idle(dev_priv) < 0) {
                if (MGA_DMA_DEBUG)
                        DRM_INFO("%s: -EBUSY\n", __FUNCTION__);
-               return DRM_ERR(EBUSY);
+               return -EBUSY;
        }
 #endif
-       if (iload.idx < 0 || iload.idx > dma->buf_count)
-               return DRM_ERR(EINVAL);
+       if (iload->idx < 0 || iload->idx > dma->buf_count)
+               return -EINVAL;
 
-       buf = dma->buflist[iload.idx];
+       buf = dma->buflist[iload->idx];
        buf_priv = buf->dev_private;
 
-       if (mga_verify_iload(dev_priv, iload.dstorg, iload.length)) {
+       if (mga_verify_iload(dev_priv, iload->dstorg, iload->length)) {
                mga_freelist_put(dev, buf);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        WRAP_TEST_WITH_RETURN(dev_priv);
 
-       mga_dma_dispatch_iload(dev, buf, iload.dstorg, iload.length);
+       mga_dma_dispatch_iload(dev, buf, iload->dstorg, iload->length);
 
        /* Make sure we restore the 3D state next time.
         */
@@ -1037,28 +1018,24 @@ static int mga_dma_iload(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int mga_dma_blit(DRM_IOCTL_ARGS)
+static int mga_dma_blit(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = dev->dev_private;
        drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_mga_blit_t blit;
+       drm_mga_blit_t *blit = data;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(blit, (drm_mga_blit_t __user *) data,
-                                sizeof(blit));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (sarea_priv->nbox > MGA_NR_SAREA_CLIPRECTS)
                sarea_priv->nbox = MGA_NR_SAREA_CLIPRECTS;
 
-       if (mga_verify_blit(dev_priv, blit.srcorg, blit.dstorg))
-               return DRM_ERR(EINVAL);
+       if (mga_verify_blit(dev_priv, blit->srcorg, blit->dstorg))
+               return -EINVAL;
 
        WRAP_TEST_WITH_RETURN(dev_priv);
 
-       mga_dma_dispatch_blit(dev, &blit);
+       mga_dma_dispatch_blit(dev, blit);
 
        /* Make sure we restore the 3D state next time.
         */
@@ -1067,24 +1044,20 @@ static int mga_dma_blit(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int mga_getparam(DRM_IOCTL_ARGS)
+static int mga_getparam(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = dev->dev_private;
-       drm_mga_getparam_t param;
+       drm_mga_getparam_t *param = data;
        int value;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(param, (drm_mga_getparam_t __user *) data,
-                                sizeof(param));
-
        DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
 
-       switch (param.param) {
+       switch (param->param) {
        case MGA_PARAM_IRQ_NR:
                value = dev->irq;
                break;
@@ -1092,36 +1065,35 @@ static int mga_getparam(DRM_IOCTL_ARGS)
                value = dev_priv->chipset;
                break;
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       if (DRM_COPY_TO_USER(param.value, &value, sizeof(int))) {
+       if (DRM_COPY_TO_USER(param->value, &value, sizeof(int))) {
                DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
 }
 
-static int mga_set_fence(DRM_IOCTL_ARGS)
+static int mga_set_fence(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = dev->dev_private;
-       u32 temp;
+       u32 *fence = data;
        DMA_LOCALS;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
 
-       /* I would normal do this assignment in the declaration of temp,
+       /* I would normal do this assignment in the declaration of fence,
         * but dev_priv may be NULL.
         */
 
-       temp = dev_priv->next_fence_to_post;
+       *fence = dev_priv->next_fence_to_post;
        dev_priv->next_fence_to_post++;
 
        BEGIN_DMA(1);
@@ -1131,47 +1103,40 @@ static int mga_set_fence(DRM_IOCTL_ARGS)
                  MGA_SOFTRAP, 0x00000000);
        ADVANCE_DMA();
 
-       DRM_COPY_TO_USER_IOCTL((u32 __user *)data, temp, sizeof(u32));
-
        return 0;
 }
 
-static int mga_wait_fence(DRM_IOCTL_ARGS)
+static int mga_wait_fence(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_mga_private_t *dev_priv = dev->dev_private;
-       u32 fence;
+       u32 *fence = data;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(fence, (u32 __user *) data, sizeof(u32));
-
        DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
 
-       mga_driver_fence_wait(dev, & fence);
-
-       DRM_COPY_TO_USER_IOCTL((u32 __user *)data, fence, sizeof(u32));
+       mga_driver_fence_wait(dev, fence);
 
        return 0;
 }
 
-drm_ioctl_desc_t mga_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_MGA_INIT)] = {mga_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_MGA_FLUSH)] = {mga_dma_flush, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_RESET)] = {mga_dma_reset, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_SWAP)] = {mga_dma_swap, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_CLEAR)] = {mga_dma_clear, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_VERTEX)] = {mga_dma_vertex, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_INDICES)] = {mga_dma_indices, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_ILOAD)] = {mga_dma_iload, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_BLIT)] = {mga_dma_blit, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_GETPARAM)] = {mga_getparam, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_SET_FENCE)] = {mga_set_fence, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_WAIT_FENCE)] = {mga_wait_fence, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_MGA_DMA_BOOTSTRAP)] = {mga_dma_bootstrap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
+struct drm_ioctl_desc mga_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_MGA_INIT, mga_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_MGA_FLUSH, mga_dma_flush, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_RESET, mga_dma_reset, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_SWAP, mga_dma_swap, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_CLEAR, mga_dma_clear, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_VERTEX, mga_dma_vertex, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_INDICES, mga_dma_indices, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_ILOAD, mga_dma_iload, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_BLIT, mga_dma_blit, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_GETPARAM, mga_getparam, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_SET_FENCE, mga_set_fence, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_WAIT_FENCE, mga_wait_fence, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_MGA_DMA_BOOTSTRAP, mga_dma_bootstrap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
 
 };
 
index 05ed805..9a44bdd 100644 (file)
@@ -146,7 +146,7 @@ int mga_warp_install_microcode(drm_mga_private_t * dev_priv)
        if (size > dev_priv->warp->size) {
                DRM_ERROR("microcode too large! (%u > %lu)\n",
                          size, dev_priv->warp->size);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        switch (dev_priv->chipset) {
@@ -156,7 +156,7 @@ int mga_warp_install_microcode(drm_mga_private_t * dev_priv)
        case MGA_CARD_TYPE_G200:
                return mga_warp_install_g200_microcode(dev_priv);
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 }
 
@@ -182,7 +182,7 @@ int mga_warp_init(drm_mga_private_t * dev_priv)
                MGA_WRITE(MGA_WVRTXSZ, 7);
                break;
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        MGA_WRITE(MGA_WMISC, (MGA_WUCODECACHE_ENABLE |
@@ -191,7 +191,7 @@ int mga_warp_init(drm_mga_private_t * dev_priv)
        if (wmisc != WMISC_EXPECTED) {
                DRM_ERROR("WARP engine config failed! 0x%x != 0x%x\n",
                          wmisc, WMISC_EXPECTED);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        return 0;
index 78ab950..4016f00 100644 (file)
@@ -27,7 +27,7 @@
 
 #define NOUVEAU_DRM_HEADER_PATCHLEVEL 9
 
-typedef struct drm_nouveau_fifo_alloc {
+struct drm_nouveau_fifo_alloc {
        uint32_t     fb_ctxdma_handle;
        uint32_t     tt_ctxdma_handle;
 
@@ -42,27 +42,24 @@ typedef struct drm_nouveau_fifo_alloc {
        /* Notifier memory */
        drm_handle_t notifier;
        int          notifier_size;
-}
-drm_nouveau_fifo_alloc_t;
+};
 
-typedef struct drm_nouveau_grobj_alloc {
+struct drm_nouveau_grobj_alloc {
        int      channel;
        uint32_t handle;
        int      class;
-}
-drm_nouveau_grobj_alloc_t;
+};
 
 #define NOUVEAU_MEM_ACCESS_RO  1
 #define NOUVEAU_MEM_ACCESS_WO  2
 #define NOUVEAU_MEM_ACCESS_RW  3
-typedef struct drm_nouveau_notifier_alloc {
+struct drm_nouveau_notifier_alloc {
        int      channel;
        uint32_t handle;
        int      count;
 
        uint32_t offset;
-}
-drm_nouveau_notifier_alloc_t;
+};
 
 #define NOUVEAU_MEM_FB                 0x00000001
 #define NOUVEAU_MEM_AGP                        0x00000002
@@ -76,20 +73,18 @@ drm_nouveau_notifier_alloc_t;
 #define NOUVEAU_MEM_INSTANCE           0x00000200 /* internal */
 #define NOUVEAU_MEM_NOTIFIER            0x00000400 /* internal */
 
-typedef struct drm_nouveau_mem_alloc {
+struct drm_nouveau_mem_alloc {
        int flags;
        int alignment;
        uint64_t size;  // in bytes
        uint64_t offset;
        drm_handle_t map_handle;
-}
-drm_nouveau_mem_alloc_t;
+};
 
-typedef struct drm_nouveau_mem_free {
+struct drm_nouveau_mem_free {
        uint64_t offset;
        int flags;
-}
-drm_nouveau_mem_free_t;
+};
 
 /* FIXME : maybe unify {GET,SET}PARAMs */
 #define NOUVEAU_GETPARAM_PCI_VENDOR      3
@@ -100,19 +95,17 @@ drm_nouveau_mem_free_t;
 #define NOUVEAU_GETPARAM_FB_SIZE         8
 #define NOUVEAU_GETPARAM_AGP_SIZE        9
 #define NOUVEAU_GETPARAM_PCI_PHYSICAL    10
-typedef struct drm_nouveau_getparam {
+struct drm_nouveau_getparam {
        uint64_t param;
        uint64_t value;
-}
-drm_nouveau_getparam_t;
+};
 
 #define NOUVEAU_SETPARAM_CMDBUF_LOCATION 1
 #define NOUVEAU_SETPARAM_CMDBUF_SIZE     2
-typedef struct drm_nouveau_setparam {
+struct drm_nouveau_setparam {
        uint64_t param;
        uint64_t value;
-}
-drm_nouveau_setparam_t;
+};
 
 enum nouveau_card_type {
        NV_UNKNOWN =0,
@@ -121,8 +114,8 @@ enum nouveau_card_type {
        NV_04      =4,
        NV_05      =5,
        NV_10      =10,
-       NV_11      =10,
-       NV_15      =10,
+       NV_11      =11,
+       NV_15      =11,
        NV_17      =17,
        NV_20      =20,
        NV_25      =20,
@@ -142,12 +135,11 @@ enum nouveau_bus_type {
 
 #define NOUVEAU_MAX_SAREA_CLIPRECTS 16
 
-typedef struct drm_nouveau_sarea {
+struct drm_nouveau_sarea {
        /* the cliprects */
-       drm_clip_rect_t boxes[NOUVEAU_MAX_SAREA_CLIPRECTS];
+       struct drm_clip_rect boxes[NOUVEAU_MAX_SAREA_CLIPRECTS];
        unsigned int nbox;
-}
-drm_nouveau_sarea_t;
+};
 
 #define DRM_NOUVEAU_FIFO_ALLOC      0x00
 #define DRM_NOUVEAU_GROBJ_ALLOC     0x01
index 99ddb58..dd323a0 100644 (file)
@@ -47,7 +47,7 @@ struct mem_block {
        struct mem_block *prev;
        uint64_t start;
        uint64_t size;
-       DRMFILE filp;           /* 0: free, -1: heap, other: real files */
+       struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
        int flags;
        drm_local_map_t *map;
        drm_handle_t map_handle;
@@ -66,7 +66,7 @@ enum nouveau_flags {
 #define NVOBJ_FLAG_ZERO_ALLOC          (1 << 1)
 #define NVOBJ_FLAG_ZERO_FREE           (1 << 2)
 #define NVOBJ_FLAG_FAKE                        (1 << 3)
-typedef struct nouveau_gpuobj {
+struct nouveau_gpuobj {
        struct nouveau_gpuobj *next;
        struct nouveau_gpuobj *prev;
 
@@ -80,31 +80,31 @@ typedef struct nouveau_gpuobj {
 
        uint32_t engine;
        uint32_t class;
-} nouveau_gpuobj_t;
+};
 
-typedef struct nouveau_gpuobj_ref {
+struct nouveau_gpuobj_ref {
        struct nouveau_gpuobj_ref *next;
 
-       nouveau_gpuobj_t *gpuobj;
+       struct nouveau_gpuobj *gpuobj;
        uint32_t instance;
 
        int channel;
        int handle;
-} nouveau_gpuobj_ref_t;
+};
 
 struct nouveau_fifo
 {
        /* owner of this fifo */
-       DRMFILE filp;
+       struct drm_file *file_priv;
        /* mapping of the fifo itself */
        drm_local_map_t *map;
        /* mapping of the regs controling the fifo */
        drm_local_map_t *regs;
 
        /* DMA push buffer */
-       nouveau_gpuobj_ref_t *pushbuf;
-       struct mem_block     *pushbuf_mem;
-       uint32_t              pushbuf_base;
+       struct nouveau_gpuobj_ref *pushbuf;
+       struct mem_block          *pushbuf_mem;
+       uint32_t                   pushbuf_base;
 
        /* Notifier memory */
        struct mem_block *notifier_block;
@@ -112,17 +112,21 @@ struct nouveau_fifo
        drm_local_map_t  *notifier_map;
 
        /* PFIFO context */
-       nouveau_gpuobj_ref_t *ramfc;
+       struct nouveau_gpuobj_ref *ramfc;
 
        /* PGRAPH context */
-       nouveau_gpuobj_ref_t *ramin_grctx;
+       struct nouveau_gpuobj_ref *ramin_grctx;
        uint32_t pgraph_ctx [340]; /* XXX dynamic alloc ? */
 
+       /* NV50 VM */
+       struct nouveau_gpuobj     *vm_pd;
+       struct nouveau_gpuobj_ref *vm_gart_pt;
+
        /* Objects */
-       nouveau_gpuobj_ref_t *ramin; /* Private instmem */
-       struct mem_block     *ramin_heap; /* Private PRAMIN heap */
-       nouveau_gpuobj_ref_t *ramht; /* Hash table */
-       nouveau_gpuobj_ref_t *ramht_refs; /* Objects referenced by RAMHT */
+       struct nouveau_gpuobj_ref *ramin; /* Private instmem */
+       struct mem_block          *ramin_heap; /* Private PRAMIN heap */
+       struct nouveau_gpuobj_ref *ramht; /* Hash table */
+       struct nouveau_gpuobj_ref *ramht_refs; /* Objects referenced by RAMHT */
 };
 
 struct nouveau_config {
@@ -132,59 +136,60 @@ struct nouveau_config {
        } cmdbuf;
 };
 
-typedef struct nouveau_engine_func {
+struct nouveau_engine_func {
        struct {
                void    *priv;
 
-               int     (*init)(drm_device_t *dev);
-               void    (*takedown)(drm_device_t *dev);
+               int     (*init)(struct drm_device *dev);
+               void    (*takedown)(struct drm_device *dev);
 
-               int     (*populate)(drm_device_t *, nouveau_gpuobj_t *,
+               int     (*populate)(struct drm_device *, struct nouveau_gpuobj *,
                                    uint32_t *size);
-               void    (*clear)(drm_device_t *, nouveau_gpuobj_t *);
-               int     (*bind)(drm_device_t *, nouveau_gpuobj_t *);
-               int     (*unbind)(drm_device_t *, nouveau_gpuobj_t *);
+               void    (*clear)(struct drm_device *, struct nouveau_gpuobj *);
+               int     (*bind)(struct drm_device *, struct nouveau_gpuobj *);
+               int     (*unbind)(struct drm_device *, struct nouveau_gpuobj *);
        } instmem;
 
        struct {
-               int     (*init)(drm_device_t *dev);
-               void    (*takedown)(drm_device_t *dev);
+               int     (*init)(struct drm_device *dev);
+               void    (*takedown)(struct drm_device *dev);
        } mc;
 
        struct {
-               int     (*init)(drm_device_t *dev);
-               void    (*takedown)(drm_device_t *dev);
+               int     (*init)(struct drm_device *dev);
+               uint64_t (*read)(struct drm_device *dev);
+               void    (*takedown)(struct drm_device *dev);
        } timer;
 
        struct {
-               int     (*init)(drm_device_t *dev);
-               void    (*takedown)(drm_device_t *dev);
+               int     (*init)(struct drm_device *dev);
+               void    (*takedown)(struct drm_device *dev);
        } fb;
 
        struct {
-               int     (*init)(drm_device_t *);
-               void    (*takedown)(drm_device_t *);
+               int     (*init)(struct drm_device *);
+               void    (*takedown)(struct drm_device *);
 
-               int     (*create_context)(drm_device_t *, int channel);
-               void    (*destroy_context)(drm_device_t *, int channel);
-               int     (*load_context)(drm_device_t *, int channel);
-               int     (*save_context)(drm_device_t *, int channel);
+               int     (*create_context)(struct drm_device *, int channel);
+               void    (*destroy_context)(struct drm_device *, int channel);
+               int     (*load_context)(struct drm_device *, int channel);
+               int     (*save_context)(struct drm_device *, int channel);
        } graph;
 
        struct {
                void    *priv;
 
-               int     (*init)(drm_device_t *);
-               void    (*takedown)(drm_device_t *);
+               int     (*init)(struct drm_device *);
+               void    (*takedown)(struct drm_device *);
 
-               int     (*create_context)(drm_device_t *, int channel);
-               void    (*destroy_context)(drm_device_t *, int channel);
-               int     (*load_context)(drm_device_t *, int channel);
-               int     (*save_context)(drm_device_t *, int channel);
+               int     (*create_context)(struct drm_device *, int channel);
+               void    (*destroy_context)(struct drm_device *, int channel);
+               int     (*load_context)(struct drm_device *, int channel);
+               int     (*save_context)(struct drm_device *, int channel);
        } fifo;
-} nouveau_engine_func_t;
+};
 
-typedef struct drm_nouveau_private {
+struct drm_nouveau_private {
        enum {
                NOUVEAU_CARD_INIT_DOWN,
                NOUVEAU_CARD_INIT_DONE,
@@ -207,7 +212,7 @@ typedef struct drm_nouveau_private {
        struct nouveau_engine_func Engine;
 
        /* RAMIN configuration, RAMFC, RAMHT and RAMRO offsets */
-       nouveau_gpuobj_t *ramht;
+       struct nouveau_gpuobj *ramht;
        uint32_t ramin_rsvd_vram;
        uint32_t ramht_offset;
        uint32_t ramht_size;
@@ -220,8 +225,24 @@ typedef struct drm_nouveau_private {
        /* base physical adresses */
        uint64_t fb_phys;
        uint64_t fb_available_size;
-       uint64_t agp_phys;
-       uint64_t agp_available_size;
+
+       struct {
+               enum {
+                       NOUVEAU_GART_NONE = 0,
+                       NOUVEAU_GART_AGP,
+                       NOUVEAU_GART_SGDMA
+               } type;
+               uint64_t aper_base;
+               uint64_t aper_size;
+
+               struct nouveau_gpuobj *sg_ctxdma;
+               struct page *sg_dummy_page;
+               dma_addr_t sg_dummy_bus;
+
+               /* nottm hack */
+               struct drm_ttm_backend *sg_be;
+               unsigned long sg_handle;
+       } gart_info;
 
        /* the mtrr covering the FB */
        int fb_mtrr;
@@ -234,211 +255,233 @@ typedef struct drm_nouveau_private {
 
         /* context table pointed to be NV_PGRAPH_CHANNEL_CTX_TABLE (0x400780) */
         uint32_t ctx_table_size;
-       nouveau_gpuobj_ref_t *ctx_table;
+       struct nouveau_gpuobj_ref *ctx_table;
 
        struct nouveau_config config;
 
-       nouveau_gpuobj_t *gpuobj_all;
-}
-drm_nouveau_private_t;
+       struct nouveau_gpuobj *gpuobj_all;
+};
 
 /* nouveau_state.c */
-extern void nouveau_preclose(drm_device_t * dev, DRMFILE filp);
+extern void nouveau_preclose(struct drm_device * dev,
+                            struct drm_file *file_priv);
 extern int nouveau_load(struct drm_device *dev, unsigned long flags);
 extern int nouveau_firstopen(struct drm_device *dev);
 extern void nouveau_lastclose(struct drm_device *dev);
 extern int nouveau_unload(struct drm_device *dev);
-extern int nouveau_ioctl_getparam(DRM_IOCTL_ARGS);
-extern int nouveau_ioctl_setparam(DRM_IOCTL_ARGS);
+extern int nouveau_ioctl_getparam(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int nouveau_ioctl_setparam(struct drm_device *dev, void *data, struct drm_file *file_priv);
 extern void nouveau_wait_for_idle(struct drm_device *dev);
-extern int nouveau_ioctl_card_init(DRM_IOCTL_ARGS);
+extern int nouveau_ioctl_card_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
 
 /* nouveau_mem.c */
 extern int               nouveau_mem_init_heap(struct mem_block **,
                                               uint64_t start, uint64_t size);
 extern struct mem_block *nouveau_mem_alloc_block(struct mem_block *,
                                                 uint64_t size, int align2,
-                                                DRMFILE);
+                                                struct drm_file *file_priv);
 extern void              nouveau_mem_takedown(struct mem_block **heap);
 extern void              nouveau_mem_free_block(struct mem_block *);
 extern uint64_t          nouveau_mem_fb_amount(struct drm_device *dev);
-extern void              nouveau_mem_release(DRMFILE filp, struct mem_block *heap);
-extern int               nouveau_ioctl_mem_alloc(DRM_IOCTL_ARGS);
-extern int               nouveau_ioctl_mem_free(DRM_IOCTL_ARGS);
-extern struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment, uint64_t size, int flags, DRMFILE filp);
+extern void              nouveau_mem_release(struct drm_file *file_priv,
+                                            struct mem_block *heap);
+extern int               nouveau_ioctl_mem_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int               nouveau_ioctl_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern struct mem_block* nouveau_mem_alloc(struct drm_device *dev,
+                                          int alignment, uint64_t size,
+                                          int flags,
+                                          struct drm_file *file_priv);
 extern void              nouveau_mem_free(struct drm_device* dev, struct mem_block*);
 extern int               nouveau_mem_init(struct drm_device *dev);
 extern void              nouveau_mem_close(struct drm_device *dev);
 
 /* nouveau_notifier.c */
-extern int  nouveau_notifier_init_channel(drm_device_t *, int channel, DRMFILE);
-extern void nouveau_notifier_takedown_channel(drm_device_t *, int channel);
-extern int  nouveau_notifier_alloc(drm_device_t *, int channel,
+extern int  nouveau_notifier_init_channel(struct drm_device *, int channel,
+                                         struct drm_file *file_priv);
+extern void nouveau_notifier_takedown_channel(struct drm_device *, int channel);
+extern int  nouveau_notifier_alloc(struct drm_device *, int channel,
                                   uint32_t handle, int cout, uint32_t *offset);
-extern int  nouveau_ioctl_notifier_alloc(DRM_IOCTL_ARGS);
+extern int  nouveau_ioctl_notifier_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv);
 
 /* nouveau_fifo.c */
-extern int  nouveau_fifo_init(drm_device_t *dev);
-extern int  nouveau_fifo_number(drm_device_t *dev);
-extern int  nouveau_fifo_ctx_size(drm_device_t *dev);
-extern void nouveau_fifo_cleanup(drm_device_t *dev, DRMFILE filp);
-extern int  nouveau_fifo_owner(drm_device_t *dev, DRMFILE filp, int channel);
-extern void nouveau_fifo_free(drm_device_t *dev, int channel);
+extern int  nouveau_fifo_init(struct drm_device *dev);
+extern int  nouveau_fifo_number(struct drm_device *dev);
+extern int  nouveau_fifo_ctx_size(struct drm_device *dev);
+extern void nouveau_fifo_cleanup(struct drm_device *dev,
+                                struct drm_file *file_priv);
+extern int  nouveau_fifo_owner(struct drm_device *dev,
+                              struct drm_file *file_priv, int channel);
+extern void nouveau_fifo_free(struct drm_device *dev, int channel);
 
 /* nouveau_object.c */
-extern void nouveau_gpuobj_takedown(drm_device_t *dev);
-extern int nouveau_gpuobj_channel_init(drm_device_t *, int channel,
+extern void nouveau_gpuobj_takedown(struct drm_device *dev);
+extern int nouveau_gpuobj_channel_init(struct drm_device *, int channel,
                                       uint32_t vram_h, uint32_t tt_h);
-extern void nouveau_gpuobj_channel_takedown(drm_device_t *, int channel);
-extern int nouveau_gpuobj_new(drm_device_t *, int channel, int size, int align,
-                             uint32_t flags, nouveau_gpuobj_t **);
-extern int nouveau_gpuobj_del(drm_device_t *, nouveau_gpuobj_t **);
-extern int nouveau_gpuobj_ref_add(drm_device_t *, int channel, uint32_t handle,
-                                 nouveau_gpuobj_t *, nouveau_gpuobj_ref_t **);
-extern int nouveau_gpuobj_ref_del(drm_device_t *, nouveau_gpuobj_ref_t **);
-extern int nouveau_gpuobj_new_ref(drm_device_t *, int chan_obj, int chan_ref,
+extern void nouveau_gpuobj_channel_takedown(struct drm_device *, int channel);
+extern int nouveau_gpuobj_new(struct drm_device *, int channel, int size, int align,
+                             uint32_t flags, struct nouveau_gpuobj **);
+extern int nouveau_gpuobj_del(struct drm_device *, struct nouveau_gpuobj **);
+extern int nouveau_gpuobj_ref_add(struct drm_device *, int channel, uint32_t handle,
+                                 struct nouveau_gpuobj *,
+                                 struct nouveau_gpuobj_ref **);
+extern int nouveau_gpuobj_ref_del(struct drm_device *, struct nouveau_gpuobj_ref **);
+extern int nouveau_gpuobj_new_ref(struct drm_device *, int chan_obj, int chan_ref,
                                  uint32_t handle, int size, int align,
-                                 uint32_t flags, nouveau_gpuobj_ref_t **);
-extern int nouveau_gpuobj_new_fake(drm_device_t *, uint32_t offset,
+                                 uint32_t flags, struct nouveau_gpuobj_ref **);
+extern int nouveau_gpuobj_new_fake(struct drm_device *, uint32_t offset,
                                   uint32_t size, uint32_t flags,
-                                  nouveau_gpuobj_t**, nouveau_gpuobj_ref_t**);
-extern int nouveau_gpuobj_dma_new(drm_device_t *, int channel, int class,
+                                  struct nouveau_gpuobj**,
+                                  struct nouveau_gpuobj_ref**);
+extern int nouveau_gpuobj_dma_new(struct drm_device *, int channel, int class,
                                  uint64_t offset, uint64_t size,
-                                 int access, int target, nouveau_gpuobj_t **);
-extern int nouveau_gpuobj_gr_new(drm_device_t *, int channel, int class,
-                                nouveau_gpuobj_t **);
-extern int nouveau_ioctl_grobj_alloc(DRM_IOCTL_ARGS);
+                                 int access, int target,
+                                 struct nouveau_gpuobj **);
+extern int nouveau_gpuobj_gart_dma_new(struct drm_device *, int channel,
+                                      uint64_t offset, uint64_t size,
+                                      int access, struct nouveau_gpuobj **,
+                                      uint32_t *o_ret);
+extern int nouveau_gpuobj_gr_new(struct drm_device *, int channel, int class,
+                                struct nouveau_gpuobj **);
+extern int nouveau_ioctl_grobj_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv);
 
 /* nouveau_irq.c */
 extern irqreturn_t nouveau_irq_handler(DRM_IRQ_ARGS);
-extern void        nouveau_irq_preinstall(drm_device_t*);
-extern void        nouveau_irq_postinstall(drm_device_t*);
-extern void        nouveau_irq_uninstall(drm_device_t*);
+extern void        nouveau_irq_preinstall(struct drm_device*);
+extern void        nouveau_irq_postinstall(struct drm_device*);
+extern void        nouveau_irq_uninstall(struct drm_device*);
+
+/* nouveau_sgdma.c */
+extern int nouveau_sgdma_init(struct drm_device *);
+extern void nouveau_sgdma_takedown(struct drm_device *);
+extern struct drm_ttm_backend *nouveau_sgdma_init_ttm(struct drm_device *);
+extern int nouveau_sgdma_nottm_hack_init(struct drm_device *);
+extern void nouveau_sgdma_nottm_hack_takedown(struct drm_device *);
 
 /* nv04_fb.c */
-extern int  nv04_fb_init(drm_device_t *dev);
-extern void nv04_fb_takedown(drm_device_t *dev);
+extern int  nv04_fb_init(struct drm_device *dev);
+extern void nv04_fb_takedown(struct drm_device *dev);
 
 /* nv10_fb.c */
-extern int  nv10_fb_init(drm_device_t *dev);
-extern void nv10_fb_takedown(drm_device_t *dev);
+extern int  nv10_fb_init(struct drm_device *dev);
+extern void nv10_fb_takedown(struct drm_device *dev);
 
 /* nv40_fb.c */
-extern int  nv40_fb_init(drm_device_t *dev);
-extern void nv40_fb_takedown(drm_device_t *dev);
+extern int  nv40_fb_init(struct drm_device *dev);
+extern void nv40_fb_takedown(struct drm_device *dev);
 
 /* nv04_fifo.c */
-extern int  nv04_fifo_create_context(drm_device_t *dev, int channel);
-extern void nv04_fifo_destroy_context(drm_device_t *dev, int channel);
-extern int  nv04_fifo_load_context(drm_device_t *dev, int channel);
-extern int  nv04_fifo_save_context(drm_device_t *dev, int channel);
+extern int  nv04_fifo_create_context(struct drm_device *dev, int channel);
+extern void nv04_fifo_destroy_context(struct drm_device *dev, int channel);
+extern int  nv04_fifo_load_context(struct drm_device *dev, int channel);
+extern int  nv04_fifo_save_context(struct drm_device *dev, int channel);
 
 /* nv10_fifo.c */
-extern int  nv10_fifo_create_context(drm_device_t *dev, int channel);
-extern void nv10_fifo_destroy_context(drm_device_t *dev, int channel);
-extern int  nv10_fifo_load_context(drm_device_t *dev, int channel);
-extern int  nv10_fifo_save_context(drm_device_t *dev, int channel);
+extern int  nv10_fifo_create_context(struct drm_device *dev, int channel);
+extern void nv10_fifo_destroy_context(struct drm_device *dev, int channel);
+extern int  nv10_fifo_load_context(struct drm_device *dev, int channel);
+extern int  nv10_fifo_save_context(struct drm_device *dev, int channel);
 
 /* nv40_fifo.c */
-extern int  nv40_fifo_create_context(drm_device_t *, int channel);
-extern void nv40_fifo_destroy_context(drm_device_t *, int channel);
-extern int  nv40_fifo_load_context(drm_device_t *, int channel);
-extern int  nv40_fifo_save_context(drm_device_t *, int channel);
+extern int  nv40_fifo_create_context(struct drm_device *, int channel);
+extern void nv40_fifo_destroy_context(struct drm_device *, int channel);
+extern int  nv40_fifo_load_context(struct drm_device *, int channel);
+extern int  nv40_fifo_save_context(struct drm_device *, int channel);
 
 /* nv50_fifo.c */
-extern int  nv50_fifo_init(drm_device_t *);
-extern void nv50_fifo_takedown(drm_device_t *);
-extern int  nv50_fifo_create_context(drm_device_t *, int channel);
-extern void nv50_fifo_destroy_context(drm_device_t *, int channel);
-extern int  nv50_fifo_load_context(drm_device_t *, int channel);
-extern int  nv50_fifo_save_context(drm_device_t *, int channel);
+extern int  nv50_fifo_init(struct drm_device *);
+extern void nv50_fifo_takedown(struct drm_device *);
+extern int  nv50_fifo_create_context(struct drm_device *, int channel);
+extern void nv50_fifo_destroy_context(struct drm_device *, int channel);
+extern int  nv50_fifo_load_context(struct drm_device *, int channel);
+extern int  nv50_fifo_save_context(struct drm_device *, int channel);
 
 /* nv04_graph.c */
-extern void nouveau_nv04_context_switch(drm_device_t *dev);
-extern int  nv04_graph_init(drm_device_t *dev);
-extern void nv04_graph_takedown(drm_device_t *dev);
-extern int  nv04_graph_create_context(drm_device_t *dev, int channel);
-extern void nv04_graph_destroy_context(drm_device_t *dev, int channel);
-extern int  nv04_graph_load_context(drm_device_t *dev, int channel);
-extern int  nv04_graph_save_context(drm_device_t *dev, int channel);
+extern void nouveau_nv04_context_switch(struct drm_device *dev);
+extern int  nv04_graph_init(struct drm_device *dev);
+extern void nv04_graph_takedown(struct drm_device *dev);
+extern int  nv04_graph_create_context(struct drm_device *dev, int channel);
+extern void nv04_graph_destroy_context(struct drm_device *dev, int channel);
+extern int  nv04_graph_load_context(struct drm_device *dev, int channel);
+extern int  nv04_graph_save_context(struct drm_device *dev, int channel);
 
 /* nv10_graph.c */
-extern void nouveau_nv10_context_switch(drm_device_t *dev);
-extern int  nv10_graph_init(drm_device_t *dev);
-extern void nv10_graph_takedown(drm_device_t *dev);
-extern int  nv10_graph_create_context(drm_device_t *dev, int channel);
-extern void nv10_graph_destroy_context(drm_device_t *dev, int channel);
-extern int  nv10_graph_load_context(drm_device_t *dev, int channel);
-extern int  nv10_graph_save_context(drm_device_t *dev, int channel);
+extern void nouveau_nv10_context_switch(struct drm_device *dev);
+extern int  nv10_graph_init(struct drm_device *dev);
+extern void nv10_graph_takedown(struct drm_device *dev);
+extern int  nv10_graph_create_context(struct drm_device *dev, int channel);
+extern void nv10_graph_destroy_context(struct drm_device *dev, int channel);
+extern int  nv10_graph_load_context(struct drm_device *dev, int channel);
+extern int  nv10_graph_save_context(struct drm_device *dev, int channel);
 
 /* nv20_graph.c */
-extern void nouveau_nv20_context_switch(drm_device_t *dev);
-extern int  nv20_graph_init(drm_device_t *dev);
-extern void nv20_graph_takedown(drm_device_t *dev);
-extern int  nv20_graph_create_context(drm_device_t *dev, int channel);
-extern void nv20_graph_destroy_context(drm_device_t *dev, int channel);
-extern int  nv20_graph_load_context(drm_device_t *dev, int channel);
-extern int  nv20_graph_save_context(drm_device_t *dev, int channel);
+extern void nouveau_nv20_context_switch(struct drm_device *dev);
+extern int  nv20_graph_init(struct drm_device *dev);
+extern void nv20_graph_takedown(struct drm_device *dev);
+extern int  nv20_graph_create_context(struct drm_device *dev, int channel);
+extern void nv20_graph_destroy_context(struct drm_device *dev, int channel);
+extern int  nv20_graph_load_context(struct drm_device *dev, int channel);
+extern int  nv20_graph_save_context(struct drm_device *dev, int channel);
 
 /* nv30_graph.c */
-extern int  nv30_graph_init(drm_device_t *dev);
-extern void nv30_graph_takedown(drm_device_t *dev);
-extern int  nv30_graph_create_context(drm_device_t *, int channel);
-extern void nv30_graph_destroy_context(drm_device_t *, int channel);
-extern int  nv30_graph_load_context(drm_device_t *, int channel);
-extern int  nv30_graph_save_context(drm_device_t *, int channel);
+extern int  nv30_graph_init(struct drm_device *dev);
+extern void nv30_graph_takedown(struct drm_device *dev);
+extern int  nv30_graph_create_context(struct drm_device *, int channel);
+extern void nv30_graph_destroy_context(struct drm_device *, int channel);
+extern int  nv30_graph_load_context(struct drm_device *, int channel);
+extern int  nv30_graph_save_context(struct drm_device *, int channel);
 
 /* nv40_graph.c */
-extern int  nv40_graph_init(drm_device_t *);
-extern void nv40_graph_takedown(drm_device_t *);
-extern int  nv40_graph_create_context(drm_device_t *, int channel);
-extern void nv40_graph_destroy_context(drm_device_t *, int channel);
-extern int  nv40_graph_load_context(drm_device_t *, int channel);
-extern int  nv40_graph_save_context(drm_device_t *, int channel);
+extern int  nv40_graph_init(struct drm_device *);
+extern void nv40_graph_takedown(struct drm_device *);
+extern int  nv40_graph_create_context(struct drm_device *, int channel);
+extern void nv40_graph_destroy_context(struct drm_device *, int channel);
+extern int  nv40_graph_load_context(struct drm_device *, int channel);
+extern int  nv40_graph_save_context(struct drm_device *, int channel);
 
 /* nv50_graph.c */
-extern int  nv50_graph_init(drm_device_t *);
-extern void nv50_graph_takedown(drm_device_t *);
-extern int  nv50_graph_create_context(drm_device_t *, int channel);
-extern void nv50_graph_destroy_context(drm_device_t *, int channel);
-extern int  nv50_graph_load_context(drm_device_t *, int channel);
-extern int  nv50_graph_save_context(drm_device_t *, int channel);
+extern int  nv50_graph_init(struct drm_device *);
+extern void nv50_graph_takedown(struct drm_device *);
+extern int  nv50_graph_create_context(struct drm_device *, int channel);
+extern void nv50_graph_destroy_context(struct drm_device *, int channel);
+extern int  nv50_graph_load_context(struct drm_device *, int channel);
+extern int  nv50_graph_save_context(struct drm_device *, int channel);
 
 /* nv04_instmem.c */
-extern int  nv04_instmem_init(drm_device_t *dev);
-extern void nv04_instmem_takedown(drm_device_t *dev);
-extern int  nv04_instmem_populate(drm_device_t*, nouveau_gpuobj_t*,
+extern int  nv04_instmem_init(struct drm_device *dev);
+extern void nv04_instmem_takedown(struct drm_device *dev);
+extern int  nv04_instmem_populate(struct drm_device*, struct nouveau_gpuobj*,
                                  uint32_t *size);
-extern void nv04_instmem_clear(drm_device_t*, nouveau_gpuobj_t*);
-extern int  nv04_instmem_bind(drm_device_t*, nouveau_gpuobj_t*);
-extern int  nv04_instmem_unbind(drm_device_t*, nouveau_gpuobj_t*);
+extern void nv04_instmem_clear(struct drm_device*, struct nouveau_gpuobj*);
+extern int  nv04_instmem_bind(struct drm_device*, struct nouveau_gpuobj*);
+extern int  nv04_instmem_unbind(struct drm_device*, struct nouveau_gpuobj*);
 
 /* nv50_instmem.c */
-extern int  nv50_instmem_init(drm_device_t *dev);
-extern void nv50_instmem_takedown(drm_device_t *dev);
-extern int  nv50_instmem_populate(drm_device_t*, nouveau_gpuobj_t*,
+extern int  nv50_instmem_init(struct drm_device *dev);
+extern void nv50_instmem_takedown(struct drm_device *dev);
+extern int  nv50_instmem_populate(struct drm_device*, struct nouveau_gpuobj*,
                                  uint32_t *size);
-extern void nv50_instmem_clear(drm_device_t*, nouveau_gpuobj_t*);
-extern int  nv50_instmem_bind(drm_device_t*, nouveau_gpuobj_t*);
-extern int  nv50_instmem_unbind(drm_device_t*, nouveau_gpuobj_t*);
+extern void nv50_instmem_clear(struct drm_device*, struct nouveau_gpuobj*);
+extern int  nv50_instmem_bind(struct drm_device*, struct nouveau_gpuobj*);
+extern int  nv50_instmem_unbind(struct drm_device*, struct nouveau_gpuobj*);
 
 /* nv04_mc.c */
-extern int  nv04_mc_init(drm_device_t *dev);
-extern void nv04_mc_takedown(drm_device_t *dev);
+extern int  nv04_mc_init(struct drm_device *dev);
+extern void nv04_mc_takedown(struct drm_device *dev);
 
 /* nv40_mc.c */
-extern int  nv40_mc_init(drm_device_t *dev);
-extern void nv40_mc_takedown(drm_device_t *dev);
+extern int  nv40_mc_init(struct drm_device *dev);
+extern void nv40_mc_takedown(struct drm_device *dev);
 
 /* nv50_mc.c */
-extern int  nv50_mc_init(drm_device_t *dev);
-extern void nv50_mc_takedown(drm_device_t *dev);
+extern int  nv50_mc_init(struct drm_device *dev);
+extern void nv50_mc_takedown(struct drm_device *dev);
 
 /* nv04_timer.c */
-extern int  nv04_timer_init(drm_device_t *dev);
-extern void nv04_timer_takedown(drm_device_t *dev);
+extern int  nv04_timer_init(struct drm_device *dev);
+extern uint64_t nv04_timer_read(struct drm_device *dev);
+extern void nv04_timer_takedown(struct drm_device *dev);
 
-extern long nouveau_compat_ioctl(struct file *filp, unsigned int cmd,
+extern long nouveau_compat_ioctl(struct file *file, unsigned int cmd,
                                unsigned long arg);
 
 #if defined(__powerpc__)
index 7114a93..e5d3ab3 100644 (file)
@@ -29,9 +29,9 @@
 
 
 /* returns the number of hw fifos */
-int nouveau_fifo_number(drm_device_t* dev)
+int nouveau_fifo_number(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv=dev->dev_private;
+       struct drm_nouveau_private *dev_priv=dev->dev_private;
        switch(dev_priv->card_type)
        {
                case NV_03:
@@ -47,9 +47,9 @@ int nouveau_fifo_number(drm_device_t* dev)
 }
 
 /* returns the size of fifo context */
-int nouveau_fifo_ctx_size(drm_device_t* dev)
+int nouveau_fifo_ctx_size(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv=dev->dev_private;
+       struct drm_nouveau_private *dev_priv=dev->dev_private;
 
        if (dev_priv->card_type >= NV_40)
                return 128;
@@ -68,9 +68,9 @@ int nouveau_fifo_ctx_size(drm_device_t* dev)
  * voir nv_driver.c : NVPreInit 
  */
 
-static int nouveau_fifo_instmem_configure(drm_device_t *dev)
+static int nouveau_fifo_instmem_configure(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        NV_WRITE(NV03_PFIFO_RAMHT,
                        (0x03 << 24) /* search 128 */ | 
@@ -99,6 +99,7 @@ static int nouveau_fifo_instmem_configure(drm_device_t *dev)
                                        (1 << 16) /* 64 Bytes entry*/);
                        /* XXX nvidia blob set bit 18, 21,23 for nv20 & nv30 */
                        break;
+               case NV_11:
                case NV_10:
                case NV_04:
                case NV_03:
@@ -109,9 +110,9 @@ static int nouveau_fifo_instmem_configure(drm_device_t *dev)
        return 0;
 }
 
-int nouveau_fifo_init(drm_device_t *dev)
+int nouveau_fifo_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int ret;
 
        NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) &
@@ -187,12 +188,12 @@ int nouveau_fifo_init(drm_device_t *dev)
 static int
 nouveau_fifo_cmdbuf_alloc(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        struct nouveau_config *config = &dev_priv->config;
        struct mem_block *cb;
        int cb_min_size = max(NV03_FIFO_SIZE,PAGE_SIZE);
-       nouveau_gpuobj_t *pushbuf = NULL;
+       struct nouveau_gpuobj *pushbuf = NULL;
        int ret;
 
        /* Defaults for unconfigured values */
@@ -203,31 +204,34 @@ nouveau_fifo_cmdbuf_alloc(struct drm_device *dev, int channel)
 
        cb = nouveau_mem_alloc(dev, 0, config->cmdbuf.size,
                        config->cmdbuf.location | NOUVEAU_MEM_MAPPED,
-                       (DRMFILE)-2);
+                       (struct drm_file *)-2);
        if (!cb) {
                DRM_ERROR("Couldn't allocate DMA command buffer.\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        if (cb->flags & NOUVEAU_MEM_AGP) {
-               DRM_DEBUG("Creating CB in AGP memory\n");
+               ret = nouveau_gpuobj_gart_dma_new(dev, channel,
+                                                 cb->start, cb->size,
+                                                 NV_DMA_ACCESS_RO,
+                                                 &pushbuf,
+                                                 &chan->pushbuf_base);
+       } else
+       if (cb->flags & NOUVEAU_MEM_PCI) {
                ret = nouveau_gpuobj_dma_new(dev, channel,
-                               NV_CLASS_DMA_IN_MEMORY,
-                               cb->start, cb->size,
-                               NV_DMA_ACCESS_RO, NV_DMA_TARGET_AGP, &pushbuf);
-       } else if ( cb->flags & NOUVEAU_MEM_PCI) {
-               DRM_DEBUG("Creating CB in PCI memory\n");
-               ret = nouveau_gpuobj_dma_new(dev, channel,
-                               NV_CLASS_DMA_IN_MEMORY,
-                               cb->start,
-                               cb->size,
-                               NV_DMA_ACCESS_RO, NV_DMA_TARGET_PCI_NONLINEAR, &pushbuf);
+                                            NV_CLASS_DMA_IN_MEMORY,
+                                            cb->start, cb->size,
+                                            NV_DMA_ACCESS_RO,
+                                            NV_DMA_TARGET_PCI_NONLINEAR,
+                                            &pushbuf);
+               chan->pushbuf_base = 0;
        } else if (dev_priv->card_type != NV_04) {
                ret = nouveau_gpuobj_dma_new
                        (dev, channel, NV_CLASS_DMA_IN_MEMORY,
                         cb->start,
                         cb->size, NV_DMA_ACCESS_RO, NV_DMA_TARGET_VIDMEM,
                         &pushbuf);
+               chan->pushbuf_base = 0;
        } else {
                /* NV04 cmdbuf hack, from original ddx.. not sure of it's
                 * exact reason for existing :)  PCI access to cmdbuf in
@@ -238,6 +242,7 @@ nouveau_fifo_cmdbuf_alloc(struct drm_device *dev, int channel)
                         cb->start + drm_get_resource_start(dev, 1),
                         cb->size, NV_DMA_ACCESS_RO,
                         NV_DMA_TARGET_PCI, &pushbuf);
+               chan->pushbuf_base = 0;
        }
 
        if (ret) {
@@ -249,21 +254,23 @@ nouveau_fifo_cmdbuf_alloc(struct drm_device *dev, int channel)
        if ((ret = nouveau_gpuobj_ref_add(dev, channel, 0, pushbuf,
                                          &chan->pushbuf))) {
                DRM_ERROR("Error referencing push buffer ctxdma: %d\n", ret);
+               if (pushbuf != dev_priv->gart_info.sg_ctxdma)
+                       nouveau_gpuobj_del(dev, &pushbuf);
                return ret;
        }
 
-       dev_priv->fifos[channel]->pushbuf_base = 0;
-       dev_priv->fifos[channel]->pushbuf_mem = cb;
+       chan->pushbuf_mem = cb;
        return 0;
 }
 
 /* allocates and initializes a fifo for user space consumption */
-int nouveau_fifo_alloc(drm_device_t* dev, int *chan_ret, DRMFILE filp,
+int nouveau_fifo_alloc(struct drm_device *dev, int *chan_ret,
+                      struct drm_file *file_priv,
                       uint32_t vram_handle, uint32_t tt_handle)
 {
        int ret;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       nouveau_engine_func_t *engine = &dev_priv->Engine;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_engine_func *engine = &dev_priv->Engine;
        struct nouveau_fifo *chan;
        int channel;
 
@@ -283,16 +290,16 @@ int nouveau_fifo_alloc(drm_device_t* dev, int *chan_ret, DRMFILE filp,
        }
        /* no more fifos. you lost. */
        if (channel==nouveau_fifo_number(dev))
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        (*chan_ret) = channel;
 
        dev_priv->fifos[channel] = drm_calloc(1, sizeof(struct nouveau_fifo),
                                              DRM_MEM_DRIVER);
        if (!dev_priv->fifos[channel])
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        dev_priv->fifo_alloc_count++;
        chan = dev_priv->fifos[channel];
-       chan->filp = filp;
+       chan->file_priv = file_priv;
 
        DRM_INFO("Allocating FIFO number %d\n", channel);
 
@@ -311,7 +318,7 @@ int nouveau_fifo_alloc(drm_device_t* dev, int *chan_ret, DRMFILE filp,
        }
 
        /* Allocate space for per-channel fixed notifier memory */
-       ret = nouveau_notifier_init_channel(dev, channel, filp);
+       ret = nouveau_notifier_init_channel(dev, channel, file_priv);
        if (ret) {
                nouveau_fifo_free(dev, channel);
                return ret;
@@ -392,10 +399,10 @@ int nouveau_fifo_alloc(drm_device_t* dev, int *chan_ret, DRMFILE filp,
 }
 
 /* stops a fifo */
-void nouveau_fifo_free(drm_device_t* dev, int channel)
+void nouveau_fifo_free(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       nouveau_engine_func_t *engine = &dev_priv->Engine;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_engine_func *engine = &dev_priv->Engine;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        if (!chan) {
@@ -435,88 +442,84 @@ void nouveau_fifo_free(drm_device_t* dev, int channel)
        drm_free(chan, sizeof(*chan), DRM_MEM_DRIVER);
 }
 
-/* cleanups all the fifos from filp */
-void nouveau_fifo_cleanup(drm_device_t* dev, DRMFILE filp)
+/* cleanups all the fifos from file_priv */
+void nouveau_fifo_cleanup(struct drm_device *dev, struct drm_file *file_priv)
 {
        int i;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
-       DRM_DEBUG("clearing FIFO enables from filp\n");
+       DRM_DEBUG("clearing FIFO enables from file_priv\n");
        for(i=0;i<nouveau_fifo_number(dev);i++)
-               if (dev_priv->fifos[i] && dev_priv->fifos[i]->filp==filp)
+               if (dev_priv->fifos[i] &&
+                   dev_priv->fifos[i]->file_priv==file_priv)
                        nouveau_fifo_free(dev,i);
 }
 
 int
-nouveau_fifo_owner(drm_device_t *dev, DRMFILE filp, int channel)
+nouveau_fifo_owner(struct drm_device *dev, struct drm_file *file_priv,
+                  int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        if (channel >= nouveau_fifo_number(dev))
                return 0;
        if (dev_priv->fifos[channel] == NULL)
                return 0;
-       return (dev_priv->fifos[channel]->filp == filp);
+       return (dev_priv->fifos[channel]->file_priv == file_priv);
 }
 
 /***********************************
  * ioctls wrapping the functions
  ***********************************/
 
-static int nouveau_ioctl_fifo_alloc(DRM_IOCTL_ARGS)
+static int nouveau_ioctl_fifo_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       drm_nouveau_fifo_alloc_t init;
-       drm_map_list_t *entry;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct drm_nouveau_fifo_alloc *init = data;
+       struct drm_map_list *entry;
        struct nouveau_fifo *chan;
        int res;
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_nouveau_fifo_alloc_t __user *) data,
-                                sizeof(init));
-
-       if (init.fb_ctxdma_handle == ~0 || init.tt_ctxdma_handle == ~0)
-               return DRM_ERR(EINVAL);
+       if (init->fb_ctxdma_handle == ~0 || init->tt_ctxdma_handle == ~0)
+               return -EINVAL;
 
-       res = nouveau_fifo_alloc(dev, &init.channel, filp,
-                                init.fb_ctxdma_handle,
-                                init.tt_ctxdma_handle);
+       res = nouveau_fifo_alloc(dev, &init->channel, file_priv,
+                                init->fb_ctxdma_handle,
+                                init->tt_ctxdma_handle);
        if (res)
                return res;
-       chan = dev_priv->fifos[init.channel];
+       chan = dev_priv->fifos[init->channel];
 
-       init.put_base = chan->pushbuf_base;
+       init->put_base = chan->pushbuf_base;
 
        /* make the fifo available to user space */
        /* first, the fifo control regs */
-       init.ctrl = dev_priv->mmio->offset;
+       init->ctrl = dev_priv->mmio->offset;
        if (dev_priv->card_type < NV_50) {
-               init.ctrl      += NV03_FIFO_REGS(init.channel);
-               init.ctrl_size  = NV03_FIFO_REGS_SIZE;
+               init->ctrl      += NV03_FIFO_REGS(init->channel);
+               init->ctrl_size  = NV03_FIFO_REGS_SIZE;
        } else {
-               init.ctrl      += NV50_FIFO_REGS(init.channel);
-               init.ctrl_size  = NV50_FIFO_REGS_SIZE;
+               init->ctrl      += NV50_FIFO_REGS(init->channel);
+               init->ctrl_size  = NV50_FIFO_REGS_SIZE;
        }
-       res = drm_addmap(dev, init.ctrl, init.ctrl_size, _DRM_REGISTERS,
+       res = drm_addmap(dev, init->ctrl, init->ctrl_size, _DRM_REGISTERS,
                         0, &chan->regs);
        if (res != 0)
                return res;
 
        entry = drm_find_matching_map(dev, chan->regs);
        if (!entry)
-               return DRM_ERR(EINVAL);
-       init.ctrl = entry->user_token;
+               return -EINVAL;
+       init->ctrl = entry->user_token;
 
        /* pass back FIFO map info to the caller */
-       init.cmdbuf      = chan->pushbuf_mem->map_handle;
-       init.cmdbuf_size = chan->pushbuf_mem->size;
+       init->cmdbuf      = chan->pushbuf_mem->map_handle;
+       init->cmdbuf_size = chan->pushbuf_mem->size;
 
        /* and the notifier block */
-       init.notifier      = chan->notifier_block->map_handle;
-       init.notifier_size = chan->notifier_block->size;
+       init->notifier      = chan->notifier_block->map_handle;
+       init->notifier_size = chan->notifier_block->size;
 
-       DRM_COPY_TO_USER_IOCTL((drm_nouveau_fifo_alloc_t __user *)data,
-                              init, sizeof(init));
        return 0;
 }
 
@@ -524,14 +527,14 @@ static int nouveau_ioctl_fifo_alloc(DRM_IOCTL_ARGS)
  * finally, the ioctl table
  ***********************************/
 
-drm_ioctl_desc_t nouveau_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_NOUVEAU_FIFO_ALLOC)] = {nouveau_ioctl_fifo_alloc, DRM_AUTH},  
-       [DRM_IOCTL_NR(DRM_NOUVEAU_GROBJ_ALLOC)] = {nouveau_ioctl_grobj_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_NOUVEAU_NOTIFIER_ALLOC)] = {nouveau_ioctl_notifier_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_NOUVEAU_MEM_ALLOC)] = {nouveau_ioctl_mem_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_NOUVEAU_MEM_FREE)] = {nouveau_ioctl_mem_free, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_NOUVEAU_GETPARAM)] = {nouveau_ioctl_getparam, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_NOUVEAU_SETPARAM)] = {nouveau_ioctl_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},     
+struct drm_ioctl_desc nouveau_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_NOUVEAU_FIFO_ALLOC, nouveau_ioctl_fifo_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_NOUVEAU_GROBJ_ALLOC, nouveau_ioctl_grobj_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_NOUVEAU_NOTIFIER_ALLOC, nouveau_ioctl_notifier_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_NOUVEAU_MEM_ALLOC, nouveau_ioctl_mem_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_NOUVEAU_MEM_FREE, nouveau_ioctl_mem_free, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_NOUVEAU_GETPARAM, nouveau_ioctl_getparam, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_NOUVEAU_SETPARAM, nouveau_ioctl_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
 };
 
 int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls);
index b4102dd..f7baf89 100644 (file)
@@ -36,9 +36,9 @@
 #include "nouveau_drv.h"
 #include "nouveau_reg.h"
 
-void nouveau_irq_preinstall(drm_device_t *dev)
+void nouveau_irq_preinstall(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        DRM_DEBUG("IRQ: preinst\n");
 
@@ -71,9 +71,9 @@ void nouveau_irq_preinstall(drm_device_t *dev)
        NV_WRITE(NV03_PMC_INTR_EN_0, 0);
 }
 
-void nouveau_irq_postinstall(drm_device_t *dev)
+void nouveau_irq_postinstall(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        if (!dev_priv) {
                DRM_ERROR("AIII, no dev_priv\n");
@@ -107,9 +107,9 @@ void nouveau_irq_postinstall(drm_device_t *dev)
        NV_WRITE(NV03_PMC_INTR_EN_0, NV_PMC_INTR_EN_0_MASTER_ENABLE);
 }
 
-void nouveau_irq_uninstall(drm_device_t *dev)
+void nouveau_irq_uninstall(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        if (!dev_priv) {
                DRM_ERROR("AIII, no dev_priv\n");
@@ -138,10 +138,10 @@ void nouveau_irq_uninstall(drm_device_t *dev)
        NV_WRITE(NV03_PMC_INTR_EN_0, 0);
 }
 
-static void nouveau_fifo_irq_handler(drm_device_t *dev)
+static void nouveau_fifo_irq_handler(struct drm_device *dev)
 {
        uint32_t status, chmode, chstat, channel;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        status = NV_READ(NV03_PFIFO_INTR_0);
        if (!status)
@@ -200,9 +200,9 @@ static void nouveau_fifo_irq_handler(drm_device_t *dev)
 }
 
 #if 0
-static void nouveau_nv04_context_switch(drm_device_t *dev)
+static void nouveau_nv04_context_switch(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t channel,i;
        uint32_t max=0;
        NV_WRITE(NV04_PGRAPH_FIFO,0x0);
@@ -246,37 +246,101 @@ static void nouveau_nv04_context_switch(drm_device_t *dev)
 }
 #endif
 
+
+struct nouveau_bitfield_names
+{
+       uint32_t mask;
+       const char * name;
+};
+
+static struct nouveau_bitfield_names nouveau_nstatus_names[] =
+{
+       { NV03_PGRAPH_NSTATUS_STATE_IN_USE,       "STATE_IN_USE" },
+       { NV03_PGRAPH_NSTATUS_INVALID_STATE,      "INVALID_STATE" },
+       { NV03_PGRAPH_NSTATUS_BAD_ARGUMENT,       "BAD_ARGUMENT" },
+       { NV03_PGRAPH_NSTATUS_PROTECTION_FAULT,   "PROTECTION_FAULT" }
+};
+
+static struct nouveau_bitfield_names nouveau_nsource_names[] =
+{
+       { NV03_PGRAPH_NSOURCE_NOTIFICATION,       "NOTIFICATION" },
+       { NV03_PGRAPH_NSOURCE_DATA_ERROR,         "DATA_ERROR" },
+       { NV03_PGRAPH_NSOURCE_PROTECTION_ERROR,   "PROTECTION_ERROR" },
+       { NV03_PGRAPH_NSOURCE_RANGE_EXCEPTION,    "RANGE_EXCEPTION" },
+       { NV03_PGRAPH_NSOURCE_LIMIT_COLOR,        "LIMIT_COLOR" },
+       { NV03_PGRAPH_NSOURCE_LIMIT_ZETA,         "LIMIT_ZETA" },
+       { NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD,       "ILLEGAL_MTHD" },
+       { NV03_PGRAPH_NSOURCE_DMA_R_PROTECTION,   "DMA_R_PROTECTION" },
+       { NV03_PGRAPH_NSOURCE_DMA_W_PROTECTION,   "DMA_W_PROTECTION" },
+       { NV03_PGRAPH_NSOURCE_FORMAT_EXCEPTION,   "FORMAT_EXCEPTION" },
+       { NV03_PGRAPH_NSOURCE_PATCH_EXCEPTION,    "PATCH_EXCEPTION" },
+       { NV03_PGRAPH_NSOURCE_STATE_INVALID,      "STATE_INVALID" },
+       { NV03_PGRAPH_NSOURCE_DOUBLE_NOTIFY,      "DOUBLE_NOTIFY" },
+       { NV03_PGRAPH_NSOURCE_NOTIFY_IN_USE,      "NOTIFY_IN_USE" },
+       { NV03_PGRAPH_NSOURCE_METHOD_CNT,         "METHOD_CNT" },
+       { NV03_PGRAPH_NSOURCE_BFR_NOTIFICATION,   "BFR_NOTIFICATION" },
+       { NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION, "DMA_VTX_PROTECTION" },
+       { NV03_PGRAPH_NSOURCE_DMA_WIDTH_A,        "DMA_WIDTH_A" },
+       { NV03_PGRAPH_NSOURCE_DMA_WIDTH_B,        "DMA_WIDTH_B" },
+};
+
 static void
-nouveau_graph_dump_trap_info(drm_device_t *dev)
+nouveau_print_bitfield_names(uint32_t value,
+                             const struct nouveau_bitfield_names *namelist,
+                             const int namelist_len)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       int i;
+       for(i=0; i<namelist_len; ++i) {
+               uint32_t mask = namelist[i].mask;
+               if(value & mask) {
+                       printk(" %s", namelist[i].name);
+                       value &= ~mask;
+               }
+       }
+       if(value)
+               printk(" (unknown bits 0x%08x)", value);
+}
+
+static void
+nouveau_graph_dump_trap_info(struct drm_device *dev)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t address;
        uint32_t channel, class;
        uint32_t method, subc, data;
+       uint32_t nsource, nstatus;
 
        address = NV_READ(0x400704);
        channel = (address >> 20) & 0x1F;
        subc    = (address >> 16) & 0x7;
        method  = address & 0x1FFC;
        data    = NV_READ(0x400708);
+       nsource = NV_READ(NV03_PGRAPH_NSOURCE);
+       nstatus = NV_READ(NV03_PGRAPH_NSTATUS);
        if (dev_priv->card_type < NV_50) {
                class = NV_READ(0x400160 + subc*4) & 0xFFFF;
        } else {
                class = NV_READ(0x400814);
        }
 
-       DRM_ERROR("NV: nSource: 0x%08x, nStatus: 0x%08x\n",
-                       NV_READ(0x400108), NV_READ(0x400104));
-       DRM_ERROR("NV: Channel %d/%d (class 0x%04x) -"
+       DRM_ERROR("nSource:");
+       nouveau_print_bitfield_names(nsource, nouveau_nsource_names,
+                                    ARRAY_SIZE(nouveau_nsource_names));
+       printk(", nStatus:");
+       nouveau_print_bitfield_names(nstatus, nouveau_nstatus_names,
+                                    ARRAY_SIZE(nouveau_nstatus_names));
+       printk("\n");
+
+       DRM_ERROR("NV: Channel %d/%d (class 0x%04x) - "
                        "Method 0x%04x, Data 0x%08x\n",
                        channel, subc, class, method, data
                 );
 }
 
-static void nouveau_pgraph_irq_handler(drm_device_t *dev)
+static void nouveau_pgraph_irq_handler(struct drm_device *dev)
 {
        uint32_t status;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        status = NV_READ(NV03_PGRAPH_INTR);
        if (!status)
@@ -286,8 +350,8 @@ static void nouveau_pgraph_irq_handler(drm_device_t *dev)
                uint32_t nsource, nstatus, instance, notify;
                DRM_DEBUG("NV: PGRAPH notify interrupt\n");
 
-               nstatus = NV_READ(0x00400104);
-               nsource = NV_READ(0x00400108);
+               nstatus = NV_READ(NV03_PGRAPH_NSTATUS);
+               nsource = NV_READ(NV03_PGRAPH_NSOURCE);
                DRM_DEBUG("nsource:0x%08x\tnstatus:0x%08x\n", nsource, nstatus);
 
                /* if this wasn't NOTIFICATION_PENDING, dump extra trap info */
@@ -308,8 +372,8 @@ static void nouveau_pgraph_irq_handler(drm_device_t *dev)
                uint32_t nsource, nstatus, instance, notify;
                DRM_DEBUG("NV: PGRAPH buffer notify interrupt\n");
 
-               nstatus = NV_READ(0x00400104);
-               nsource = NV_READ(0x00400108);
+               nstatus = NV_READ(NV03_PGRAPH_NSTATUS);
+               nsource = NV_READ(NV03_PGRAPH_NSOURCE);
                DRM_DEBUG("nsource:0x%08x\tnstatus:0x%08x\n", nsource, nstatus);
 
                instance = NV_READ(0x00400158);
@@ -332,8 +396,8 @@ static void nouveau_pgraph_irq_handler(drm_device_t *dev)
 
                DRM_ERROR("NV: PGRAPH error interrupt\n");
 
-               nstatus = NV_READ(0x00400104);
-               nsource = NV_READ(0x00400108);
+               nstatus = NV_READ(NV03_PGRAPH_NSTATUS);
+               nsource = NV_READ(NV03_PGRAPH_NSOURCE);
                DRM_ERROR("nsource:0x%08x\tnstatus:0x%08x\n", nsource, nstatus);
 
                instance = NV_READ(0x00400158);
@@ -355,6 +419,7 @@ static void nouveau_pgraph_irq_handler(drm_device_t *dev)
                                nouveau_nv04_context_switch(dev);
                                break;
                        case NV_10:
+                       case NV_11:
                        case NV_17:
                                nouveau_nv10_context_switch(dev);
                                break;
@@ -379,9 +444,9 @@ static void nouveau_pgraph_irq_handler(drm_device_t *dev)
        NV_WRITE(NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING);
 }
 
-static void nouveau_crtc_irq_handler(drm_device_t *dev, int crtc)
+static void nouveau_crtc_irq_handler(struct drm_device *dev, int crtc)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        if (crtc&1) {
                NV_WRITE(NV_CRTC0_INTSTAT, NV_CRTC_INTR_VBLANK);
        }
@@ -393,8 +458,8 @@ static void nouveau_crtc_irq_handler(drm_device_t *dev, int crtc)
 
 irqreturn_t nouveau_irq_handler(DRM_IRQ_ARGS)
 {
-       drm_device_t          *dev = (drm_device_t*)arg;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_device *dev = (struct drm_device*)arg;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t status;
 
        status = NV_READ(NV03_PMC_INTR_0);
index 79d1bb8..a7044c9 100644 (file)
@@ -36,7 +36,7 @@
 #include "nouveau_drv.h"
 
 static struct mem_block *split_block(struct mem_block *p, uint64_t start, uint64_t size,
-               DRMFILE filp)
+               struct drm_file *file_priv)
 {
        /* Maybe cut off the start of an existing block */
        if (start > p->start) {
@@ -46,7 +46,7 @@ static struct mem_block *split_block(struct mem_block *p, uint64_t start, uint64
                        goto out;
                newblock->start = start;
                newblock->size = p->size - (start - p->start);
-               newblock->filp = NULL;
+               newblock->file_priv = NULL;
                newblock->next = p->next;
                newblock->prev = p;
                p->next->prev = newblock;
@@ -63,7 +63,7 @@ static struct mem_block *split_block(struct mem_block *p, uint64_t start, uint64
                        goto out;
                newblock->start = start + size;
                newblock->size = p->size - size;
-               newblock->filp = NULL;
+               newblock->file_priv = NULL;
                newblock->next = p->next;
                newblock->prev = p;
                p->next->prev = newblock;
@@ -73,12 +73,14 @@ static struct mem_block *split_block(struct mem_block *p, uint64_t start, uint64
 
 out:
        /* Our block is in the middle */
-       p->filp = filp;
+       p->file_priv = file_priv;
        return p;
 }
 
-struct mem_block *nouveau_mem_alloc_block(struct mem_block *heap, uint64_t size,
-                                         int align2, DRMFILE filp)
+struct mem_block *nouveau_mem_alloc_block(struct mem_block *heap,
+                                         uint64_t size,
+                                         int align2,
+                                         struct drm_file *file_priv)
 {
        struct mem_block *p;
        uint64_t mask = (1 << align2) - 1;
@@ -88,8 +90,8 @@ struct mem_block *nouveau_mem_alloc_block(struct mem_block *heap, uint64_t size,
 
        list_for_each(p, heap) {
                uint64_t start = (p->start + mask) & ~mask;
-               if (p->filp == 0 && start + size <= p->start + p->size)
-                       return split_block(p, start, size, filp);
+               if (p->file_priv == 0 && start + size <= p->start + p->size)
+                       return split_block(p, start, size, file_priv);
        }
 
        return NULL;
@@ -108,12 +110,12 @@ static struct mem_block *find_block(struct mem_block *heap, uint64_t start)
 
 void nouveau_mem_free_block(struct mem_block *p)
 {
-       p->filp = NULL;
+       p->file_priv = NULL;
 
-       /* Assumes a single contiguous range.  Needs a special filp in
+       /* Assumes a single contiguous range.  Needs a special file_priv in
         * 'heap' to stop it being subsumed.
         */
-       if (p->next->filp == 0) {
+       if (p->next->file_priv == 0) {
                struct mem_block *q = p->next;
                p->size += q->size;
                p->next = q->next;
@@ -121,7 +123,7 @@ void nouveau_mem_free_block(struct mem_block *p)
                drm_free(q, sizeof(*q), DRM_MEM_BUFS);
        }
 
-       if (p->prev->filp == 0) {
+       if (p->prev->file_priv == 0) {
                struct mem_block *q = p->prev;
                q->size += p->size;
                q->next = p->next;
@@ -138,29 +140,29 @@ int nouveau_mem_init_heap(struct mem_block **heap, uint64_t start,
        struct mem_block *blocks = drm_alloc(sizeof(*blocks), DRM_MEM_BUFS);
 
        if (!blocks)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        *heap = drm_alloc(sizeof(**heap), DRM_MEM_BUFS);
        if (!*heap) {
                drm_free(blocks, sizeof(*blocks), DRM_MEM_BUFS);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        blocks->start = start;
        blocks->size = size;
-       blocks->filp = NULL;
+       blocks->file_priv = NULL;
        blocks->next = blocks->prev = *heap;
 
        memset(*heap, 0, sizeof(**heap));
-       (*heap)->filp = (DRMFILE) - 1;
+       (*heap)->file_priv = (struct drm_file *) - 1;
        (*heap)->next = (*heap)->prev = blocks;
        return 0;
 }
 
 /* 
- * Free all blocks associated with the releasing filp
+ * Free all blocks associated with the releasing file_priv
  */
-void nouveau_mem_release(DRMFILE filp, struct mem_block *heap)
+void nouveau_mem_release(struct drm_file *file_priv, struct mem_block *heap)
 {
        struct mem_block *p;
 
@@ -168,15 +170,16 @@ void nouveau_mem_release(DRMFILE filp, struct mem_block *heap)
                return;
 
        list_for_each(p, heap) {
-               if (p->filp == filp)
-                       p->filp = NULL;
+               if (p->file_priv == file_priv)
+                       p->file_priv = NULL;
        }
 
-       /* Assumes a single contiguous range.  Needs a special filp in
+       /* Assumes a single contiguous range.  Needs a special file_priv in
         * 'heap' to stop it being subsumed.
         */
        list_for_each(p, heap) {
-               while ((p->filp == 0) && (p->next->filp == 0) && (p->next!=heap)) {
+               while ((p->file_priv == 0) && (p->next->file_priv == 0) &&
+                      (p->next!=heap)) {
                        struct mem_block *q = p->next;
                        p->size += q->size;
                        p->next = q->next;
@@ -208,19 +211,18 @@ void nouveau_mem_takedown(struct mem_block **heap)
 
 void nouveau_mem_close(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+
        nouveau_mem_takedown(&dev_priv->agp_heap);
        nouveau_mem_takedown(&dev_priv->fb_heap);
-       if ( dev_priv->pci_heap ) 
-               {
+       if (dev_priv->pci_heap)
                nouveau_mem_takedown(&dev_priv->pci_heap);
-               }
 }
 
 /* returns the amount of FB ram in bytes */
 uint64_t nouveau_mem_fb_amount(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv=dev->dev_private;
+       struct drm_nouveau_private *dev_priv=dev->dev_private;
        switch(dev_priv->card_type)
        {
                case NV_03:
@@ -253,6 +255,7 @@ uint64_t nouveau_mem_fb_amount(struct drm_device *dev)
                        }
                        break;
                case NV_10:
+               case NV_11:
                case NV_17:
                case NV_20:
                case NV_30:
@@ -281,93 +284,68 @@ uint64_t nouveau_mem_fb_amount(struct drm_device *dev)
        return 0;
 }
 
-
-
-int nouveau_mem_init(struct drm_device *dev)
+static int
+nouveau_mem_init_agp(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       uint32_t fb_size;
-       drm_scatter_gather_t sgreq;
-       dev_priv->agp_phys=0;
-       dev_priv->fb_phys=0;
-       sgreq . size = 4 << 20; //4MB of PCI scatter-gather zone
-
-       /* init AGP */
-       dev_priv->agp_heap=NULL;
-       if (drm_device_is_agp(dev))
-       {
-               int err;
-               drm_agp_info_t info;
-               drm_agp_mode_t mode;
-               drm_agp_buffer_t agp_req;
-               drm_agp_binding_t bind_req;
-
-               err = drm_agp_acquire(dev);
-               if (err) {
-                       DRM_ERROR("Unable to acquire AGP: %d\n", err);
-                       goto no_agp;
-               }
-
-               err = drm_agp_info(dev, &info);
-               if (err) {
-                       DRM_ERROR("Unable to get AGP info: %d\n", err);
-                       goto no_agp;
-               }
-
-               /* see agp.h for the AGPSTAT_* modes available */
-               mode.mode = info.mode;
-               err = drm_agp_enable(dev, mode);
-               if (err) {
-                       DRM_ERROR("Unable to enable AGP: %d\n", err);
-                       goto no_agp;
-               }
-
-               agp_req.size = info.aperture_size;
-               agp_req.type = 0;
-               err = drm_agp_alloc(dev, &agp_req);
-               if (err) {
-                       DRM_ERROR("Unable to alloc AGP: %d\n", err);
-                       goto no_agp;
-               }
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct drm_agp_info info;
+       struct drm_agp_mode mode;
+       struct drm_agp_buffer agp_req;
+       struct drm_agp_binding bind_req;
+       int ret;
+
+       ret = drm_agp_acquire(dev);
+       if (ret) {
+               DRM_ERROR("Unable to acquire AGP: %d\n", ret);
+               return ret;
+       }
 
-               bind_req.handle = agp_req.handle;
-               bind_req.offset = 0;
-               err = drm_agp_bind(dev, &bind_req);
-               if (err) {
-                       DRM_ERROR("Unable to bind AGP: %d\n", err);
-                       goto no_agp;
-               }
+       ret = drm_agp_info(dev, &info);
+       if (ret) {
+               DRM_ERROR("Unable to get AGP info: %d\n", ret);
+               return ret;
+       }
 
-               if (nouveau_mem_init_heap(&dev_priv->agp_heap,
-                                         0, info.aperture_size))
-                       goto no_agp;
+       /* see agp.h for the AGPSTAT_* modes available */
+       mode.mode = info.mode;
+       ret = drm_agp_enable(dev, mode);
+       if (ret) {
+               DRM_ERROR("Unable to enable AGP: %d\n", ret);
+               return ret;
+       }
 
-               dev_priv->agp_phys              = info.aperture_base;
-               dev_priv->agp_available_size    = info.aperture_size;
-               goto have_agp;
+       agp_req.size = info.aperture_size;
+       agp_req.type = 0;
+       ret = drm_agp_alloc(dev, &agp_req);
+       if (ret) {
+               DRM_ERROR("Unable to alloc AGP: %d\n", ret);
+               return ret;
        }
 
-no_agp:
+       bind_req.handle = agp_req.handle;
+       bind_req.offset = 0;
+       ret = drm_agp_bind(dev, &bind_req);
+       if (ret) {
+               DRM_ERROR("Unable to bind AGP: %d\n", ret);
+               return ret;
+       }
 
-       if ( dev_priv->card_type >= NV_50 ) goto no_pci;
+       dev_priv->gart_info.type        = NOUVEAU_GART_AGP;
+       dev_priv->gart_info.aper_base   = info.aperture_base;
+       dev_priv->gart_info.aper_size   = info.aperture_size;
+       return 0;
+}
 
-       dev_priv->pci_heap = NULL;
-       DRM_DEBUG("Allocating sg memory for PCI DMA\n");
-       if ( drm_sg_alloc(dev, &sgreq) )
-               {
-               DRM_ERROR("Unable to allocate 4MB of scatter-gather pages for PCI DMA!");
-               goto no_pci;
-               }
+int nouveau_mem_init(struct drm_device *dev)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       uint32_t fb_size;
+       int ret = 0;
 
-       if ( nouveau_mem_init_heap(&dev_priv->pci_heap, 0,
-                                  dev->sg->pages * PAGE_SIZE))
-               {
-               DRM_ERROR("Unable to initialize pci_heap!");    
-               goto no_pci;
-               }
+       dev_priv->agp_heap = dev_priv->pci_heap = dev_priv->fb_heap = NULL;
+       dev_priv->fb_phys = 0;
+       dev_priv->gart_info.type = NOUVEAU_GART_NONE;
 
-no_pci:
-have_agp:
        /* setup a mtrr over the FB */
        dev_priv->fb_mtrr = drm_mtrr_add(drm_get_resource_start(dev, 1),
                                         nouveau_mem_fb_amount(dev),
@@ -388,24 +366,74 @@ have_agp:
                 * So we create a second FB heap for that type of memory */
                if (nouveau_mem_init_heap(&dev_priv->fb_heap,
                                          0, 256*1024*1024))
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                if (nouveau_mem_init_heap(&dev_priv->fb_nomap_heap,
                                          256*1024*1024, fb_size-256*1024*1024))
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
        } else {
                if (nouveau_mem_init_heap(&dev_priv->fb_heap, 0, fb_size))
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                dev_priv->fb_nomap_heap=NULL;
        }
 
+       /* Init AGP / NV50 PCIEGART */
+       if (drm_device_is_agp(dev) && dev->agp) {
+               if ((ret = nouveau_mem_init_agp(dev)))
+                       DRM_ERROR("Error initialising AGP: %d\n", ret);
+       }
+
+       /*Note: this is *not* just NV50 code, but only used on NV50 for now */
+       if (dev_priv->gart_info.type == NOUVEAU_GART_NONE &&
+           dev_priv->card_type >= NV_50) {
+               ret = nouveau_sgdma_init(dev);
+               if (!ret) {
+                       ret = nouveau_sgdma_nottm_hack_init(dev);
+                       if (ret)
+                               nouveau_sgdma_takedown(dev); 
+               }
+
+               if (ret)
+                       DRM_ERROR("Error initialising SG DMA: %d\n", ret);
+       }
+
+       if (dev_priv->gart_info.type != NOUVEAU_GART_NONE) {
+               if (nouveau_mem_init_heap(&dev_priv->agp_heap,
+                                         0, dev_priv->gart_info.aper_size)) {
+                       if (dev_priv->gart_info.type == NOUVEAU_GART_SGDMA) {
+                               nouveau_sgdma_nottm_hack_takedown(dev);
+                               nouveau_sgdma_takedown(dev); 
+                       }
+               }
+       }
+
+       /* NV04-NV40 PCIEGART */
+       if (!dev_priv->agp_heap && dev_priv->card_type < NV_50) {
+               struct drm_scatter_gather sgreq;
+
+               DRM_DEBUG("Allocating sg memory for PCI DMA\n");
+               sgreq.size = 4 << 20; //4MB of PCI scatter-gather zone
+
+               if (drm_sg_alloc(dev, &sgreq)) {
+                       DRM_ERROR("Unable to allocate 4MB of scatter-gather"
+                                 " pages for PCI DMA!");
+               } else {
+                       if (nouveau_mem_init_heap(&dev_priv->pci_heap, 0,
+                                                 dev->sg->pages * PAGE_SIZE)) {
+                               DRM_ERROR("Unable to initialize pci_heap!");    
+                       }
+               }
+       }
+
        return 0;
 }
 
-struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment, uint64_t size, int flags, DRMFILE filp)
+struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment,
+                                   uint64_t size, int flags,
+                                   struct drm_file *file_priv)
 {
        struct mem_block *block;
        int type;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        /* 
         * Make things easier on ourselves: all allocations are page-aligned. 
@@ -430,13 +458,14 @@ struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment, uint6
 #define NOUVEAU_MEM_ALLOC_AGP {\
                type=NOUVEAU_MEM_AGP;\
                 block = nouveau_mem_alloc_block(dev_priv->agp_heap, size,\
-                                                alignment, filp);\
+                                                alignment, file_priv); \
                 if (block) goto alloc_ok;\
                }
 
 #define NOUVEAU_MEM_ALLOC_PCI {\
                 type = NOUVEAU_MEM_PCI;\
-                block = nouveau_mem_alloc_block(dev_priv->pci_heap, size, alignment, filp);\
+                block = nouveau_mem_alloc_block(dev_priv->pci_heap, size, \
+                                               alignment, file_priv); \
                 if ( block ) goto alloc_ok;\
                }
 
@@ -444,11 +473,12 @@ struct mem_block* nouveau_mem_alloc(struct drm_device *dev, int alignment, uint6
                 type=NOUVEAU_MEM_FB;\
                 if (!(flags&NOUVEAU_MEM_MAPPED)) {\
                         block = nouveau_mem_alloc_block(dev_priv->fb_nomap_heap,\
-                                                        size, alignment, filp); \
+                                                        size, alignment, \
+                                                       file_priv); \
                         if (block) goto alloc_ok;\
                 }\
                 block = nouveau_mem_alloc_block(dev_priv->fb_heap, size,\
-                                                alignment, filp);\
+                                                alignment, file_priv);\
                 if (block) goto alloc_ok;\
                }
 
@@ -468,13 +498,18 @@ alloc_ok:
 
        if (flags&NOUVEAU_MEM_MAPPED)
        {
-               drm_map_list_t *entry;
+               struct drm_map_list *entry;
                int ret = 0;
                block->flags|=NOUVEAU_MEM_MAPPED;
 
-               if (type == NOUVEAU_MEM_AGP)
+               if (type == NOUVEAU_MEM_AGP) {
+                       if (dev_priv->gart_info.type != NOUVEAU_GART_SGDMA)
                        ret = drm_addmap(dev, block->start, block->size,
                                         _DRM_AGP, 0, &block->map);
+                       else
+                       ret = drm_addmap(dev, block->start, block->size,
+                                        _DRM_SCATTER_GATHER, 0, &block->map);
+               }
                else if (type == NOUVEAU_MEM_FB)
                        ret = drm_addmap(dev, block->start + dev_priv->fb_phys,
                                         block->size, _DRM_FRAME_BUFFER,
@@ -512,54 +547,45 @@ void nouveau_mem_free(struct drm_device* dev, struct mem_block* block)
  * Ioctls
  */
 
-int nouveau_ioctl_mem_alloc(DRM_IOCTL_ARGS)
+int nouveau_ioctl_mem_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       drm_nouveau_mem_alloc_t alloc;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct drm_nouveau_mem_alloc *alloc = data;
        struct mem_block *block;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(alloc, (drm_nouveau_mem_alloc_t __user *) data,
-                                sizeof(alloc));
-
-       block=nouveau_mem_alloc(dev, alloc.alignment, alloc.size, alloc.flags, filp);
+       block=nouveau_mem_alloc(dev, alloc->alignment, alloc->size,
+                               alloc->flags, file_priv);
        if (!block)
-               return DRM_ERR(ENOMEM);
-       alloc.map_handle=block->map_handle;
-       alloc.offset=block->start;
-       alloc.flags=block->flags;
-
-       DRM_COPY_TO_USER_IOCTL((drm_nouveau_mem_alloc_t __user *) data, alloc, sizeof(alloc));
+               return -ENOMEM;
+       alloc->map_handle=block->map_handle;
+       alloc->offset=block->start;
+       alloc->flags=block->flags;
 
        return 0;
 }
 
-int nouveau_ioctl_mem_free(DRM_IOCTL_ARGS)
+int nouveau_ioctl_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       drm_nouveau_mem_free_t memfree;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct drm_nouveau_mem_free *memfree = data;
        struct mem_block *block;
 
-       DRM_COPY_FROM_USER_IOCTL(memfree, (drm_nouveau_mem_free_t __user *) data,
-                                sizeof(memfree));
-
        block=NULL;
-       if (memfree.flags&NOUVEAU_MEM_FB)
-               block = find_block(dev_priv->fb_heap, memfree.offset);
-       else if (memfree.flags&NOUVEAU_MEM_AGP)
-               block = find_block(dev_priv->agp_heap, memfree.offset);
-       else if (memfree.flags&NOUVEAU_MEM_PCI)
-               block = find_block(dev_priv->pci_heap, memfree.offset);
+       if (memfree->flags & NOUVEAU_MEM_FB)
+               block = find_block(dev_priv->fb_heap, memfree->offset);
+       else if (memfree->flags & NOUVEAU_MEM_AGP)
+               block = find_block(dev_priv->agp_heap, memfree->offset);
+       else if (memfree->flags & NOUVEAU_MEM_PCI)
+               block = find_block(dev_priv->pci_heap, memfree->offset);
        if (!block)
-               return DRM_ERR(EFAULT);
-       if (block->filp != filp)
-               return DRM_ERR(EPERM);
+               return -EFAULT;
+       if (block->file_priv != file_priv)
+               return -EPERM;
 
        nouveau_mem_free(dev, block);
        return 0;
index 7d89206..24a306e 100644 (file)
 #include "nouveau_drv.h"
 
 int
-nouveau_notifier_init_channel(drm_device_t *dev, int channel, DRMFILE filp)
+nouveau_notifier_init_channel(struct drm_device *dev, int channel,
+                             struct drm_file *file_priv)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        int flags, ret;
 
        /*TODO: PCI notifier blocks */
-       if (dev_priv->agp_heap)
+       if (dev_priv->agp_heap &&
+           dev_priv->gart_info.type != NOUVEAU_GART_SGDMA)
                flags = NOUVEAU_MEM_AGP | NOUVEAU_MEM_FB_ACCEPTABLE;
        else
                flags = NOUVEAU_MEM_FB;
        flags |= NOUVEAU_MEM_MAPPED;
 
-       chan->notifier_block = nouveau_mem_alloc(dev, 0, PAGE_SIZE, flags,filp);
+       chan->notifier_block = nouveau_mem_alloc(dev, 0, PAGE_SIZE, flags,
+                                                file_priv);
        if (!chan->notifier_block)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        ret = nouveau_mem_init_heap(&chan->notifier_heap,
                                    0, chan->notifier_block->size);
@@ -56,9 +59,9 @@ nouveau_notifier_init_channel(drm_device_t *dev, int channel, DRMFILE filp)
 }
 
 void
-nouveau_notifier_takedown_channel(drm_device_t *dev, int channel)
+nouveau_notifier_takedown_channel(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        if (chan->notifier_block) {
@@ -70,12 +73,12 @@ nouveau_notifier_takedown_channel(drm_device_t *dev, int channel)
 }
 
 int
-nouveau_notifier_alloc(drm_device_t *dev, int channel, uint32_t handle,
+nouveau_notifier_alloc(struct drm_device *dev, int channel, uint32_t handle,
                       int count, uint32_t *b_offset)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       nouveau_gpuobj_t *nobj = NULL;
+       struct nouveau_gpuobj *nobj = NULL;
        struct mem_block *mem;
        uint32_t offset;
        int target, ret;
@@ -83,13 +86,14 @@ nouveau_notifier_alloc(drm_device_t *dev, int channel, uint32_t handle,
        if (!chan->notifier_heap) {
                DRM_ERROR("Channel %d doesn't have a notifier heap!\n",
                          channel);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       mem = nouveau_mem_alloc_block(chan->notifier_heap, 32, 0, chan->filp);
+       mem = nouveau_mem_alloc_block(chan->notifier_heap, 32, 0,
+                                     chan->file_priv);
        if (!mem) {
                DRM_ERROR("Channel %d notifier block full\n", channel);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        mem->flags = NOUVEAU_MEM_NOTIFIER;
 
@@ -101,7 +105,7 @@ nouveau_notifier_alloc(drm_device_t *dev, int channel, uint32_t handle,
        } else {
                DRM_ERROR("Bad DMA target, flags 0x%08x!\n",
                          chan->notifier_block->flags);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if ((ret = nouveau_gpuobj_dma_new(dev, channel, NV_CLASS_DMA_IN_MEMORY,
@@ -124,28 +128,22 @@ nouveau_notifier_alloc(drm_device_t *dev, int channel, uint32_t handle,
 }
 
 int
-nouveau_ioctl_notifier_alloc(DRM_IOCTL_ARGS)
+nouveau_ioctl_notifier_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_nouveau_notifier_alloc_t na;
+       struct drm_nouveau_notifier_alloc *na = data;
        int ret;
 
-       DRM_COPY_FROM_USER_IOCTL(na, (drm_nouveau_notifier_alloc_t __user*)data,
-                                sizeof(na));
-
-       if (!nouveau_fifo_owner(dev, filp, na.channel)) {
+       if (!nouveau_fifo_owner(dev, file_priv, na->channel)) {
                DRM_ERROR("pid %d doesn't own channel %d\n",
-                         DRM_CURRENTPID, na.channel);
-               return DRM_ERR(EPERM);
+                         DRM_CURRENTPID, na->channel);
+               return -EPERM;
        }
 
-       ret = nouveau_notifier_alloc(dev, na.channel, na.handle,
-                                    na.count, &na.offset);
+       ret = nouveau_notifier_alloc(dev, na->channel, na->handle,
+                                    na->count, &na->offset);
        if (ret)
                return ret;
 
-       DRM_COPY_TO_USER_IOCTL((drm_nouveau_notifier_alloc_t __user*)data,
-                              na, sizeof(na));
        return 0;
 }
 
index 16b38e9..e8b12bb 100644 (file)
@@ -66,9 +66,9 @@
    is given as:
 */
 static uint32_t
-nouveau_ramht_hash_handle(drm_device_t *dev, int channel, uint32_t handle)
+nouveau_ramht_hash_handle(struct drm_device *dev, int channel, uint32_t handle)
 {
-       drm_nouveau_private_t *dev_priv=dev->dev_private;
+       struct drm_nouveau_private *dev_priv=dev->dev_private;
        uint32_t hash = 0;
        int i;
 
@@ -85,10 +85,10 @@ nouveau_ramht_hash_handle(drm_device_t *dev, int channel, uint32_t handle)
 }
 
 static int
-nouveau_ramht_entry_valid(drm_device_t *dev, nouveau_gpuobj_t *ramht,
+nouveau_ramht_entry_valid(struct drm_device *dev, struct nouveau_gpuobj *ramht,
                          uint32_t offset)
 {
-       drm_nouveau_private_t *dev_priv=dev->dev_private;
+       struct drm_nouveau_private *dev_priv=dev->dev_private;
        uint32_t ctx = INSTANCE_RD(ramht, (offset + 4)/4);
 
        if (dev_priv->card_type < NV_40)
@@ -97,17 +97,17 @@ nouveau_ramht_entry_valid(drm_device_t *dev, nouveau_gpuobj_t *ramht,
 }
 
 static int
-nouveau_ramht_insert(drm_device_t* dev, nouveau_gpuobj_ref_t *ref)
+nouveau_ramht_insert(struct drm_device *dev, struct nouveau_gpuobj_ref *ref)
 {
-       drm_nouveau_private_t *dev_priv=dev->dev_private;
+       struct drm_nouveau_private *dev_priv=dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[ref->channel];
-       nouveau_gpuobj_t *ramht = chan->ramht ? chan->ramht->gpuobj : NULL;
-       nouveau_gpuobj_t *gpuobj = ref->gpuobj;
+       struct nouveau_gpuobj *ramht = chan->ramht ? chan->ramht->gpuobj : NULL;
+       struct nouveau_gpuobj *gpuobj = ref->gpuobj;
        uint32_t ctx, co, ho;
 
        if (!ramht) {
                DRM_ERROR("No hash table!\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (dev_priv->card_type < NV_40) {
@@ -142,15 +142,15 @@ nouveau_ramht_insert(drm_device_t* dev, nouveau_gpuobj_ref_t *ref)
        } while (co != ho);
 
        DRM_ERROR("RAMHT space exhausted. ch=%d\n", ref->channel);
-       return DRM_ERR(ENOMEM);
+       return -ENOMEM;
 }
 
 static void
-nouveau_ramht_remove(drm_device_t* dev, nouveau_gpuobj_ref_t *ref)
+nouveau_ramht_remove(struct drm_device *dev, struct nouveau_gpuobj_ref *ref)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[ref->channel];
-       nouveau_gpuobj_t *ramht = chan->ramht ? chan->ramht->gpuobj : NULL;
+       struct nouveau_gpuobj *ramht = chan->ramht ? chan->ramht->gpuobj : NULL;
        uint32_t co, ho;
 
        if (!ramht) {
@@ -180,13 +180,13 @@ nouveau_ramht_remove(drm_device_t* dev, nouveau_gpuobj_ref_t *ref)
 }
 
 int
-nouveau_gpuobj_new(drm_device_t *dev, int channel, int size, int align,
-                  uint32_t flags, nouveau_gpuobj_t **gpuobj_ret)
+nouveau_gpuobj_new(struct drm_device *dev, int channel, int size, int align,
+                  uint32_t flags, struct nouveau_gpuobj **gpuobj_ret)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       nouveau_engine_func_t *engine = &dev_priv->Engine;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_engine_func *engine = &dev_priv->Engine;
        struct nouveau_fifo *chan = NULL;
-       nouveau_gpuobj_t *gpuobj;
+       struct nouveau_gpuobj *gpuobj;
        struct mem_block *pramin = NULL;
        int ret;
 
@@ -194,17 +194,17 @@ nouveau_gpuobj_new(drm_device_t *dev, int channel, int size, int align,
                  channel, size, align, flags);
 
        if (!dev_priv || !gpuobj_ret || *gpuobj_ret != NULL)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        if (channel >= 0) {
                if (channel > nouveau_fifo_number(dev))
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                chan = dev_priv->fifos[channel];
        }
 
        gpuobj = drm_calloc(1, sizeof(*gpuobj), DRM_MEM_DRIVER);
        if (!gpuobj)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        DRM_DEBUG("gpuobj %p\n", gpuobj);
        gpuobj->flags = flags;
        gpuobj->im_channel = channel;
@@ -230,7 +230,7 @@ nouveau_gpuobj_new(drm_device_t *dev, int channel, int size, int align,
 
        if (!pramin) {
                DRM_ERROR("No PRAMIN heap!\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (!chan && (ret = engine->instmem.populate(dev, gpuobj, &size))) {
@@ -241,10 +241,10 @@ nouveau_gpuobj_new(drm_device_t *dev, int channel, int size, int align,
        /* Allocate a chunk of the PRAMIN aperture */
        gpuobj->im_pramin = nouveau_mem_alloc_block(pramin, size,
                                                    drm_order(align),
-                                                   (DRMFILE)-2);
+                                                   (struct drm_file *)-2);
        if (!gpuobj->im_pramin) {
                nouveau_gpuobj_del(dev, &gpuobj);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        gpuobj->im_pramin->flags = NOUVEAU_MEM_INSTANCE;
 
@@ -270,10 +270,10 @@ nouveau_gpuobj_new(drm_device_t *dev, int channel, int size, int align,
        return 0;
 }
 
-void nouveau_gpuobj_takedown(drm_device_t *dev)
+void nouveau_gpuobj_takedown(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       nouveau_gpuobj_t *gpuobj = NULL;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_gpuobj *gpuobj = NULL;
 
        DRM_DEBUG("\n");
 
@@ -285,21 +285,21 @@ void nouveau_gpuobj_takedown(drm_device_t *dev)
        }
 }
 
-int nouveau_gpuobj_del(drm_device_t *dev, nouveau_gpuobj_t **pgpuobj)
+int nouveau_gpuobj_del(struct drm_device *dev, struct nouveau_gpuobj **pgpuobj)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       nouveau_engine_func_t *engine = &dev_priv->Engine;
-       nouveau_gpuobj_t *gpuobj;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_engine_func *engine = &dev_priv->Engine;
+       struct nouveau_gpuobj *gpuobj;
 
        DRM_DEBUG("gpuobj %p\n", pgpuobj ? *pgpuobj : NULL);
 
        if (!dev_priv || !pgpuobj || !(*pgpuobj))
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        gpuobj = *pgpuobj;
 
        if (gpuobj->refcount != 0) {
                DRM_ERROR("gpuobj refcount is %d\n", gpuobj->refcount);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        engine->instmem.clear(dev, gpuobj);
@@ -325,11 +325,11 @@ int nouveau_gpuobj_del(drm_device_t *dev, nouveau_gpuobj_t **pgpuobj)
 }
 
 static int
-nouveau_gpuobj_instance_get(drm_device_t *dev, int channel,
-                           nouveau_gpuobj_t *gpuobj, uint32_t *inst)
+nouveau_gpuobj_instance_get(struct drm_device *dev, int channel,
+                           struct nouveau_gpuobj *gpuobj, uint32_t *inst)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       nouveau_gpuobj_t *cpramin;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_gpuobj *cpramin;
 
        /* <NV50 use PRAMIN address everywhere */
        if (dev_priv->card_type < NV_50) {
@@ -340,7 +340,7 @@ nouveau_gpuobj_instance_get(drm_device_t *dev, int channel,
        if ((channel > 0) && gpuobj->im_channel != channel) {
                DRM_ERROR("Channel mismatch: obj %d, ref %d\n",
                          gpuobj->im_channel, channel);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /* NV50 channel-local instance */
@@ -355,7 +355,7 @@ nouveau_gpuobj_instance_get(drm_device_t *dev, int channel,
                /* ...from global heap */
                if (!gpuobj->im_backing) {
                        DRM_ERROR("AII, no VRAM backing gpuobj\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                *inst = gpuobj->im_backing->start;
                return 0;
@@ -367,31 +367,31 @@ nouveau_gpuobj_instance_get(drm_device_t *dev, int channel,
                return 0;
        }
 
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
 int
-nouveau_gpuobj_ref_add(drm_device_t *dev, int channel, uint32_t handle,
-                      nouveau_gpuobj_t *gpuobj, nouveau_gpuobj_ref_t **ref_ret)
+nouveau_gpuobj_ref_add(struct drm_device *dev, int channel, uint32_t handle,
+                      struct nouveau_gpuobj *gpuobj, struct nouveau_gpuobj_ref **ref_ret)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = NULL;
-       nouveau_gpuobj_ref_t *ref;
+       struct nouveau_gpuobj_ref *ref;
        uint32_t instance;
        int ret;
 
        DRM_DEBUG("ch%d h=0x%08x gpuobj=%p\n", channel, handle, gpuobj);
 
        if (!dev_priv || !gpuobj || (ref_ret && *ref_ret != NULL))
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        if (channel >= 0) {
                if (channel > nouveau_fifo_number(dev))
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                chan = dev_priv->fifos[channel];
        } else
        if (!ref_ret)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        ret = nouveau_gpuobj_instance_get(dev, channel, gpuobj, &instance);
        if (ret)
@@ -399,7 +399,7 @@ nouveau_gpuobj_ref_add(drm_device_t *dev, int channel, uint32_t handle,
 
        ref = drm_calloc(1, sizeof(*ref), DRM_MEM_DRIVER);
        if (!ref)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        ref->gpuobj   = gpuobj;
        ref->channel  = channel;
        ref->instance = instance;
@@ -424,14 +424,14 @@ nouveau_gpuobj_ref_add(drm_device_t *dev, int channel, uint32_t handle,
        return 0;
 }
 
-int nouveau_gpuobj_ref_del(drm_device_t *dev, nouveau_gpuobj_ref_t **pref)
+int nouveau_gpuobj_ref_del(struct drm_device *dev, struct nouveau_gpuobj_ref **pref)
 {
-       nouveau_gpuobj_ref_t *ref;
+       struct nouveau_gpuobj_ref *ref;
 
        DRM_DEBUG("ref %p\n", pref ? *pref : NULL);
 
        if (!dev || !pref || *pref == NULL)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        ref = *pref;
 
        if (ref->handle != ~0)
@@ -452,11 +452,11 @@ int nouveau_gpuobj_ref_del(drm_device_t *dev, nouveau_gpuobj_ref_t **pref)
 }
 
 int
-nouveau_gpuobj_new_ref(drm_device_t *dev, int oc, int rc, uint32_t handle,
+nouveau_gpuobj_new_ref(struct drm_device *dev, int oc, int rc, uint32_t handle,
                       int size, int align, uint32_t flags,
-                      nouveau_gpuobj_ref_t **ref)
+                      struct nouveau_gpuobj_ref **ref)
 {
-       nouveau_gpuobj_t *gpuobj = NULL;
+       struct nouveau_gpuobj *gpuobj = NULL;
        int ret;
 
        if ((ret = nouveau_gpuobj_new(dev, oc, size, align, flags, &gpuobj)))
@@ -471,12 +471,12 @@ nouveau_gpuobj_new_ref(drm_device_t *dev, int oc, int rc, uint32_t handle,
 }
 
 static int
-nouveau_gpuobj_ref_find(drm_device_t *dev, int channel, uint32_t handle,
-                       nouveau_gpuobj_ref_t **ref_ret)
+nouveau_gpuobj_ref_find(struct drm_device *dev, int channel, uint32_t handle,
+                       struct nouveau_gpuobj_ref **ref_ret)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       nouveau_gpuobj_ref_t *ref = chan->ramht_refs;
+       struct nouveau_gpuobj_ref *ref = chan->ramht_refs;
 
        while (ref) {
                if (ref->handle == handle) {
@@ -487,16 +487,16 @@ nouveau_gpuobj_ref_find(drm_device_t *dev, int channel, uint32_t handle,
                ref = ref->next;
        }
 
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
 int
-nouveau_gpuobj_new_fake(drm_device_t *dev, uint32_t offset, uint32_t size,
-                       uint32_t flags, nouveau_gpuobj_t **pgpuobj,
-                       nouveau_gpuobj_ref_t **pref)
+nouveau_gpuobj_new_fake(struct drm_device *dev, uint32_t offset, uint32_t size,
+                       uint32_t flags, struct nouveau_gpuobj **pgpuobj,
+                       struct nouveau_gpuobj_ref **pref)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       nouveau_gpuobj_t *gpuobj = NULL;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_gpuobj *gpuobj = NULL;
        int i;
 
        DRM_DEBUG("offset=0x%08x size=0x%08x flags=0x%08x\n",
@@ -504,7 +504,7 @@ nouveau_gpuobj_new_fake(drm_device_t *dev, uint32_t offset, uint32_t size,
 
        gpuobj = drm_calloc(1, sizeof(*gpuobj), DRM_MEM_DRIVER);
        if (!gpuobj)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        DRM_DEBUG("gpuobj %p\n", gpuobj);
        gpuobj->im_channel = -1;
        gpuobj->flags      = flags | NVOBJ_FLAG_FAKE;
@@ -513,7 +513,7 @@ nouveau_gpuobj_new_fake(drm_device_t *dev, uint32_t offset, uint32_t size,
                                       DRM_MEM_DRIVER);
        if (!gpuobj->im_pramin) {
                nouveau_gpuobj_del(dev, &gpuobj);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        gpuobj->im_pramin->start = offset;
        gpuobj->im_pramin->size  = size;
@@ -537,9 +537,9 @@ nouveau_gpuobj_new_fake(drm_device_t *dev, uint32_t offset, uint32_t size,
 
 
 static int
-nouveau_gpuobj_class_instmem_size(drm_device_t *dev, int class)
+nouveau_gpuobj_class_instmem_size(struct drm_device *dev, int class)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        /*XXX: dodgy hack for now */
        if (dev_priv->card_type >= NV_50)
@@ -577,21 +577,26 @@ nouveau_gpuobj_class_instmem_size(drm_device_t *dev, int class)
    to it that can be used to set up context objects.
 */
 int
-nouveau_gpuobj_dma_new(drm_device_t *dev, int channel, int class,
+nouveau_gpuobj_dma_new(struct drm_device *dev, int channel, int class,
                       uint64_t offset, uint64_t size, int access, int target,
-                      nouveau_gpuobj_t **gpuobj)
+                      struct nouveau_gpuobj **gpuobj)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int ret;
        uint32_t is_scatter_gather = 0;
        
+       /* Total number of pages covered by the request.
+        */
+       const unsigned int page_count = (size + PAGE_SIZE - 1) / PAGE_SIZE;
+
+
        DRM_DEBUG("ch%d class=0x%04x offset=0x%llx size=0x%llx\n",
                  channel, class, offset, size);
        DRM_DEBUG("access=%d target=%d\n", access, target);
 
        switch (target) {
         case NV_DMA_TARGET_AGP:
-                 offset += dev_priv->agp_phys;
+                 offset += dev_priv->gart_info.aper_base;
                  break;
         case NV_DMA_TARGET_PCI_NONLINEAR:
                 /*assume the "offset" is a virtual memory address*/
@@ -604,7 +609,7 @@ nouveau_gpuobj_dma_new(drm_device_t *dev, int channel, int class,
         }
        
        ret = nouveau_gpuobj_new(dev, channel,
-                                is_scatter_gather ? ((((size + PAGE_SIZE - 1) / PAGE_SIZE) << 2) + 12) : nouveau_gpuobj_class_instmem_size(dev, class),
+                                is_scatter_gather ? ((page_count << 2) + 12) : nouveau_gpuobj_class_instmem_size(dev, class),
                                 16,
                                 NVOBJ_FLAG_ZERO_ALLOC | NVOBJ_FLAG_ZERO_FREE,
                                 gpuobj);
@@ -634,9 +639,19 @@ nouveau_gpuobj_dma_new(drm_device_t *dev, int channel, int class,
                        }
                else 
                        {
+                       /* Intial page entry in the scatter-gather area that
+                        * corresponds to the base offset
+                        */
+                       unsigned int idx = offset / PAGE_SIZE;
+
                        uint32_t instance_offset;
-                       uint64_t bus_addr;
-                       size = (uint32_t) size;
+                       unsigned int i;
+
+                       if ((idx + page_count) > dev->sg->pages) {
+                               DRM_ERROR("Requested page range exceedes "
+                                         "allocated scatter-gather range!");
+                               return -E2BIG;
+                       }
 
                        DRM_DEBUG("Creating PCI DMA object using virtual zone starting at %#llx, size %d\n", offset, (uint32_t)size);
                        INSTANCE_WR(*gpuobj, 0, ((1<<12) | (0<<13) |
@@ -644,58 +659,50 @@ nouveau_gpuobj_dma_new(drm_device_t *dev, int channel, int class,
                                 (access << 14) |
                                 (target << 16) |
                                 class));
-                       INSTANCE_WR(*gpuobj, 1, size-1);
+                       INSTANCE_WR(*gpuobj, 1, (uint32_t) size-1);
 
-                       offset += dev->sg->virtual;
 
                        /*write starting at the third dword*/
                        instance_offset = 2;
  
                        /*for each PAGE, get its bus address, fill in the page table entry, and advance*/
-                       while ( size > 0 ) {
-                               bus_addr = vmalloc_to_page(offset);
-                               if ( ! bus_addr ) 
-                                       {
-                                       DRM_ERROR("Couldn't map virtual address %#llx to a page number\n", offset);
-                                       nouveau_gpuobj_del(dev, gpuobj);
-                                       return DRM_ERR(ENOMEM);
-                                       }
-                               bus_addr = (uint64_t) page_address(bus_addr);
-                               if ( ! bus_addr ) 
-                                       {
-                                       DRM_ERROR("Couldn't find page address for address %#llx\n", offset);
-                                       nouveau_gpuobj_del(dev, gpuobj);
-                                       return DRM_ERR(ENOMEM);
-                                       }
-                               bus_addr |= (offset & ~PAGE_MASK);
-                               bus_addr = virt_to_bus((void *)bus_addr);
-                               if ( ! bus_addr ) 
-                                       {
-                                       DRM_ERROR("Couldn't get bus address for %#llx\n", offset);
-                                       nouveau_gpuobj_del(dev, gpuobj);
-                                       return DRM_ERR(ENOMEM);
+                       for (i = 0; i < page_count; i++) {
+                               if (dev->sg->busaddr[idx] == 0) {
+                                       dev->sg->busaddr[idx] =
+                                               pci_map_page(dev->pdev,
+                                                            dev->sg->pagelist[idx],
+                                                            0,
+                                                            PAGE_SIZE,
+                                                            DMA_BIDIRECTIONAL);
+
+                                       if (dma_mapping_error(dev->sg->busaddr[idx])) {
+                                               return -ENOMEM;
                                        }
-
-                               /*if ( bus_addr >= 1 << 32 )
-                                       {
-                                       DRM_ERROR("Bus address %#llx is over 32 bits, Nvidia cards cannot address it !\n", bus_addr);
-                                       nouveau_gpuobj_del(dev, gpuobj);
-                                       return DRM_ERR(EINVAL);
-                                       }*/
-                               
-                               frame = (uint32_t) bus_addr & ~0x00000FFF;
-                               INSTANCE_WR(*gpuobj, instance_offset, frame | pte_flags);
-                               offset += PAGE_SIZE;
-                               instance_offset ++;
-                               size -= PAGE_SIZE;
                                }
 
+                               frame = (uint32_t) dev->sg->busaddr[idx];
+                               INSTANCE_WR(*gpuobj, instance_offset, 
+                                           frame | pte_flags);
+                               idx++;
+                               instance_offset ++;
+                       }
                        }
        } else {
-               INSTANCE_WR(*gpuobj, 0, 0x00190000 | class);
+               uint32_t flags0, flags5;
+
+               if (target == NV_DMA_TARGET_VIDMEM) {
+                       flags0 = 0x00190000;
+                       flags5 = 0x00010000;
+               } else {
+                       flags0 = 0x7fc00000;
+                       flags5 = 0x00080000;
+               }
+
+               INSTANCE_WR(*gpuobj, 0, flags0 | class);
                INSTANCE_WR(*gpuobj, 1, offset + size - 1);
                INSTANCE_WR(*gpuobj, 2, offset);
-               INSTANCE_WR(*gpuobj, 5, 0x00010000);
+               INSTANCE_WR(*gpuobj, 5, flags5);
        }
 
        (*gpuobj)->engine = NVOBJ_ENGINE_SW;
@@ -703,6 +710,42 @@ nouveau_gpuobj_dma_new(drm_device_t *dev, int channel, int class,
        return 0;
 }
 
+int
+nouveau_gpuobj_gart_dma_new(struct drm_device *dev, int channel,
+                           uint64_t offset, uint64_t size, int access,
+                           struct nouveau_gpuobj **gpuobj,
+                           uint32_t *o_ret)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       int ret;
+
+       if (dev_priv->gart_info.type == NOUVEAU_GART_AGP ||
+           (dev_priv->card_type >= NV_50 &&
+            dev_priv->gart_info.type == NOUVEAU_GART_SGDMA)) {
+               ret = nouveau_gpuobj_dma_new(dev, channel,
+                                            NV_CLASS_DMA_IN_MEMORY,
+                                            offset, size, access,
+                                            NV_DMA_TARGET_AGP, gpuobj);
+               if (o_ret)
+                       *o_ret = 0;
+       } else
+       if (dev_priv->gart_info.type == NOUVEAU_GART_SGDMA) {
+               *gpuobj = dev_priv->gart_info.sg_ctxdma;
+               if (offset & ~0xffffffffULL) {
+                       DRM_ERROR("obj offset exceeds 32-bits\n");
+                       return -EINVAL;
+               }
+               if (o_ret)
+                       *o_ret = (uint32_t)offset;
+               ret = (*gpuobj != NULL) ? 0 : -EINVAL;
+       } else {
+               DRM_ERROR("Invalid GART type %d\n", dev_priv->gart_info.type);
+               return -EINVAL;
+       }
+
+       return ret;
+}
+
 /* Context objects in the instance RAM have the following structure.
  * On NV40 they are 32 byte long, on NV30 and smaller 16 bytes.
 
@@ -755,10 +798,10 @@ nouveau_gpuobj_dma_new(drm_device_t *dev, int channel, int class,
    set to 0?
 */
 int
-nouveau_gpuobj_gr_new(drm_device_t *dev, int channel, int class,
-                     nouveau_gpuobj_t **gpuobj)
+nouveau_gpuobj_gr_new(struct drm_device *dev, int channel, int class,
+                     struct nouveau_gpuobj **gpuobj)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int ret;
 
        DRM_DEBUG("ch%d class=0x%04x\n", channel, class);
@@ -804,11 +847,11 @@ nouveau_gpuobj_gr_new(drm_device_t *dev, int channel, int class,
 }
 
 static int
-nouveau_gpuobj_channel_init_pramin(drm_device_t *dev, int channel)
+nouveau_gpuobj_channel_init_pramin(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       nouveau_gpuobj_t *pramin = NULL;
+       struct nouveau_gpuobj *pramin = NULL;
        int size, base, ret;
 
        DRM_DEBUG("ch%d\n", channel);
@@ -854,13 +897,13 @@ nouveau_gpuobj_channel_init_pramin(drm_device_t *dev, int channel)
 }
 
 int
-nouveau_gpuobj_channel_init(drm_device_t *dev, int channel,
+nouveau_gpuobj_channel_init(struct drm_device *dev, int channel,
                            uint32_t vram_h, uint32_t tt_h)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       nouveau_gpuobj_t *vram = NULL, *tt = NULL;
-       int ret;
+       struct nouveau_gpuobj *vram = NULL, *tt = NULL;
+       int ret, i;
 
        DRM_DEBUG("ch%d vram=0x%08x tt=0x%08x\n", channel, vram_h, tt_h);
 
@@ -873,6 +916,29 @@ nouveau_gpuobj_channel_init(drm_device_t *dev, int channel,
                        return ret;
        }
 
+       /* NV50 VM, point offset 0-512MiB at shared PCIEGART table  */
+       if (dev_priv->card_type >= NV_50) {
+               uint32_t vm_offset;
+               
+               vm_offset = (dev_priv->chipset & 0xf0) == 0x50 ? 0x1400 : 0x200;
+               vm_offset += chan->ramin->gpuobj->im_pramin->start;
+               if ((ret = nouveau_gpuobj_new_fake(dev, vm_offset, 0x4000,
+                                                  0, &chan->vm_pd, NULL)))
+                       return ret;
+               for (i=0; i<0x4000; i+=8) {
+                       INSTANCE_WR(chan->vm_pd, (i+0)/4, 0x00000000);
+                       INSTANCE_WR(chan->vm_pd, (i+4)/4, 0xdeadcafe);
+               }
+
+               if ((ret = nouveau_gpuobj_ref_add(dev, -1, 0,
+                                                 dev_priv->gart_info.sg_ctxdma,
+                                                 &chan->vm_gart_pt)))
+                       return ret;
+               INSTANCE_WR(chan->vm_pd, (0+0)/4,
+                           chan->vm_gart_pt->instance | 0x03);
+               INSTANCE_WR(chan->vm_pd, (0+4)/4, 0x00000000);
+       }
+
        /* RAMHT */
        if (dev_priv->card_type < NV_50) {
                ret = nouveau_gpuobj_ref_add(dev, -1, 0, dev_priv->ramht,
@@ -902,49 +968,43 @@ nouveau_gpuobj_channel_init(drm_device_t *dev, int channel,
                return ret;
        }
 
-       if (dev_priv->agp_heap) {
-               /* AGPGART ctxdma */
-               if ((ret = nouveau_gpuobj_dma_new(dev, channel, NV_CLASS_DMA_IN_MEMORY,
-                                                  0, dev_priv->agp_available_size,
-                                                  NV_DMA_ACCESS_RW,
-                                                  NV_DMA_TARGET_AGP, &tt))) {
-                       DRM_ERROR("Error creating AGP TT ctxdma: %d\n", DRM_ERR(ENOMEM));
-                       return DRM_ERR(ENOMEM);
-               }
-       
-               ret = nouveau_gpuobj_ref_add(dev, channel, tt_h, tt, NULL);
-               if (ret) {
-                       DRM_ERROR("Error referencing AGP TT ctxdma: %d\n", ret);
-                       return ret;
-               }
+       /* TT memory ctxdma */
+       if (dev_priv->gart_info.type != NOUVEAU_GART_NONE) {
+               ret = nouveau_gpuobj_gart_dma_new(dev, channel, 0,
+                                                 dev_priv->gart_info.aper_size,
+                                                 NV_DMA_ACCESS_RW, &tt, NULL);
+       } else
+       if (dev_priv->pci_heap) {
+               ret = nouveau_gpuobj_dma_new(dev, channel,
+                                            NV_CLASS_DMA_IN_MEMORY,
+                                            0, dev->sg->pages * PAGE_SIZE,
+                                            NV_DMA_ACCESS_RW,
+                                            NV_DMA_TARGET_PCI_NONLINEAR, &tt);
+       } else {
+               DRM_ERROR("Invalid GART type %d\n", dev_priv->gart_info.type);
+               ret = -EINVAL;
        }
-       else {
-               if (dev_priv -> card_type >= NV_50 ) return 0; /*no PCIGART for NV50*/
 
-               /*PCI*/
-               if((ret = nouveau_gpuobj_dma_new(dev, channel, NV_CLASS_DMA_IN_MEMORY,
-                                                  0, dev->sg->pages * PAGE_SIZE,
-                                                  NV_DMA_ACCESS_RW,
-                                                  NV_DMA_TARGET_PCI_NONLINEAR, &tt))) {
-                       DRM_ERROR("Error creating PCI TT ctxdma: %d\n", DRM_ERR(ENOMEM));
-                       return 0; //this is noncritical
-               }
-       
-               ret = nouveau_gpuobj_ref_add(dev, channel, tt_h, tt, NULL);
-               if (ret) {
-                       DRM_ERROR("Error referencing PCI TT ctxdma: %d\n", ret);
-                       return ret;
-               }
+       if (ret) {
+               DRM_ERROR("Error creating TT ctxdma: %d\n", ret);
+               return ret;
+       }
+
+       ret = nouveau_gpuobj_ref_add(dev, channel, tt_h, tt, NULL);
+       if (ret) {
+               DRM_ERROR("Error referencing TT ctxdma: %d\n", ret);
+               return ret;
        }
+
        return 0;
 }
 
 void
-nouveau_gpuobj_channel_takedown(drm_device_t *dev, int channel)
+nouveau_gpuobj_channel_takedown(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       nouveau_gpuobj_ref_t *ref;
+       struct nouveau_gpuobj_ref *ref;
 
        DRM_DEBUG("ch%d\n", channel);
 
@@ -954,6 +1014,9 @@ nouveau_gpuobj_channel_takedown(drm_device_t *dev, int channel)
        }
        nouveau_gpuobj_ref_del(dev, &chan->ramht);
 
+       nouveau_gpuobj_del(dev, &chan->vm_pd);
+       nouveau_gpuobj_ref_del(dev, &chan->vm_gart_pt);
+
        if (chan->ramin_heap)
                nouveau_mem_takedown(&chan->ramin_heap);
        if (chan->ramin)
@@ -961,39 +1024,37 @@ nouveau_gpuobj_channel_takedown(drm_device_t *dev, int channel)
 
 }
 
-int nouveau_ioctl_grobj_alloc(DRM_IOCTL_ARGS)
+int nouveau_ioctl_grobj_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_nouveau_grobj_alloc_t init;
-       nouveau_gpuobj_t *gr = NULL;
+       struct drm_nouveau_grobj_alloc *init = data;
+       struct nouveau_gpuobj *gr = NULL;
        int ret;
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_nouveau_grobj_alloc_t __user *)
-               data, sizeof(init));
-
-       if (!nouveau_fifo_owner(dev, filp, init.channel)) {
+       if (!nouveau_fifo_owner(dev, file_priv, init->channel)) {
                DRM_ERROR("pid %d doesn't own channel %d\n",
-                               DRM_CURRENTPID, init.channel);
-               return DRM_ERR(EINVAL);
+                               DRM_CURRENTPID, init->channel);
+               return -EINVAL;
        }
 
        //FIXME: check args, only allow trusted objects to be created
        
-       if (init.handle == ~0)
-               return DRM_ERR(EINVAL);
-       if (nouveau_gpuobj_ref_find(dev, init.channel, init.handle, NULL) == 0)
-               return DRM_ERR(EEXIST);
+       if (init->handle == ~0)
+               return -EINVAL;
+       if (nouveau_gpuobj_ref_find(dev, init->channel, init->handle, NULL) ==
+           0)
+               return -EEXIST;
 
-       if ((ret = nouveau_gpuobj_gr_new(dev, init.channel, init.class, &gr))) {
+       ret = nouveau_gpuobj_gr_new(dev, init->channel, init->class, &gr);
+       if (ret) {
                DRM_ERROR("Error creating gr object: %d (%d/0x%08x)\n",
-                         ret, init.channel, init.handle);
+                         ret, init->channel, init->handle);
                return ret;
        }
 
-       if ((ret = nouveau_gpuobj_ref_add(dev, init.channel, init.handle,
+       if ((ret = nouveau_gpuobj_ref_add(dev, init->channel, init->handle,
                                          gr, NULL))) {
                DRM_ERROR("Error referencing gr object: %d (%d/0x%08x\n)",
-                         ret, init.channel, init.handle);
+                         ret, init->channel, init->handle);
                nouveau_gpuobj_del(dev, &gr);
                return ret;
        }
index a66d2d3..47d54b2 100644 (file)
 #define NV04_PGRAPH_DEBUG_3                                0x0040008c
 #define NV10_PGRAPH_DEBUG_4                                0x00400090
 #define NV03_PGRAPH_INTR                                   0x00400100
+#define NV03_PGRAPH_NSTATUS                                0x00400104
+#    define NV03_PGRAPH_NSTATUS_STATE_IN_USE                  (1<<23)
+#    define NV03_PGRAPH_NSTATUS_INVALID_STATE                 (1<<24)
+#    define NV03_PGRAPH_NSTATUS_BAD_ARGUMENT                  (1<<25)
+#    define NV03_PGRAPH_NSTATUS_PROTECTION_FAULT              (1<<26)
+#define NV03_PGRAPH_NSOURCE                                0x00400108
+#    define NV03_PGRAPH_NSOURCE_NOTIFICATION                  (1<< 0)
+#    define NV03_PGRAPH_NSOURCE_DATA_ERROR                    (1<< 1)
+#    define NV03_PGRAPH_NSOURCE_PROTECTION_ERROR              (1<< 2)
+#    define NV03_PGRAPH_NSOURCE_RANGE_EXCEPTION               (1<< 3)
+#    define NV03_PGRAPH_NSOURCE_LIMIT_COLOR                   (1<< 4)
+#    define NV03_PGRAPH_NSOURCE_LIMIT_ZETA                    (1<< 5)
+#    define NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD                  (1<< 6)
+#    define NV03_PGRAPH_NSOURCE_DMA_R_PROTECTION              (1<< 7)
+#    define NV03_PGRAPH_NSOURCE_DMA_W_PROTECTION              (1<< 8)
+#    define NV03_PGRAPH_NSOURCE_FORMAT_EXCEPTION              (1<< 9)
+#    define NV03_PGRAPH_NSOURCE_PATCH_EXCEPTION               (1<<10)
+#    define NV03_PGRAPH_NSOURCE_STATE_INVALID                 (1<<11)
+#    define NV03_PGRAPH_NSOURCE_DOUBLE_NOTIFY                 (1<<12)
+#    define NV03_PGRAPH_NSOURCE_NOTIFY_IN_USE                 (1<<13)
+#    define NV03_PGRAPH_NSOURCE_METHOD_CNT                    (1<<14)
+#    define NV03_PGRAPH_NSOURCE_BFR_NOTIFICATION              (1<<15)
+#    define NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION            (1<<16)
+#    define NV03_PGRAPH_NSOURCE_DMA_WIDTH_A                   (1<<17)
+#    define NV03_PGRAPH_NSOURCE_DMA_WIDTH_B                   (1<<18)
 #define NV03_PGRAPH_INTR_EN                                0x00400140
 #define NV40_PGRAPH_INTR_EN                                0x0040013C
 #    define NV_PGRAPH_INTR_NOTIFY                             (1<< 0)
index fe3db16..f45f278 100644 (file)
@@ -28,9 +28,9 @@
 #include "nouveau_drv.h"
 #include "nouveau_drm.h"
 
-static int nouveau_init_card_mappings(drm_device_t *dev)
+static int nouveau_init_card_mappings(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int ret;
 
        /* resource 0 is mmio regs */
@@ -86,11 +86,13 @@ static int nouveau_init_card_mappings(drm_device_t *dev)
        return 0;
 }
 
-static int nouveau_stub_init(drm_device_t *dev) { return 0; }
-static void nouveau_stub_takedown(drm_device_t *dev) {}
-static int nouveau_init_engine_ptrs(drm_device_t *dev)
+static int nouveau_stub_init(struct drm_device *dev) { return 0; }
+static void nouveau_stub_takedown(struct drm_device *dev) {}
+static uint64_t nouveau_stub_timer_read(struct drm_device *dev) { return 0; }
+
+static int nouveau_init_engine_ptrs(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_engine_func *engine = &dev_priv->Engine;
 
        switch (dev_priv->chipset & 0xf0) {
@@ -104,6 +106,7 @@ static int nouveau_init_engine_ptrs(drm_device_t *dev)
                engine->mc.init         = nv04_mc_init;
                engine->mc.takedown     = nv04_mc_takedown;
                engine->timer.init      = nv04_timer_init;
+               engine->timer.read      = nv04_timer_read;
                engine->timer.takedown  = nv04_timer_takedown;
                engine->fb.init         = nv04_fb_init;
                engine->fb.takedown     = nv04_fb_takedown;
@@ -130,6 +133,7 @@ static int nouveau_init_engine_ptrs(drm_device_t *dev)
                engine->mc.init         = nv04_mc_init;
                engine->mc.takedown     = nv04_mc_takedown;
                engine->timer.init      = nv04_timer_init;
+               engine->timer.read      = nv04_timer_read;
                engine->timer.takedown  = nv04_timer_takedown;
                engine->fb.init         = nv10_fb_init;
                engine->fb.takedown     = nv10_fb_takedown;
@@ -156,6 +160,7 @@ static int nouveau_init_engine_ptrs(drm_device_t *dev)
                engine->mc.init         = nv04_mc_init;
                engine->mc.takedown     = nv04_mc_takedown;
                engine->timer.init      = nv04_timer_init;
+               engine->timer.read      = nv04_timer_read;
                engine->timer.takedown  = nv04_timer_takedown;
                engine->fb.init         = nv10_fb_init;
                engine->fb.takedown     = nv10_fb_takedown;
@@ -182,6 +187,7 @@ static int nouveau_init_engine_ptrs(drm_device_t *dev)
                engine->mc.init         = nv04_mc_init;
                engine->mc.takedown     = nv04_mc_takedown;
                engine->timer.init      = nv04_timer_init;
+               engine->timer.read      = nv04_timer_read;
                engine->timer.takedown  = nv04_timer_takedown;
                engine->fb.init         = nv10_fb_init;
                engine->fb.takedown     = nv10_fb_takedown;
@@ -208,6 +214,7 @@ static int nouveau_init_engine_ptrs(drm_device_t *dev)
                engine->mc.init         = nv40_mc_init;
                engine->mc.takedown     = nv40_mc_takedown;
                engine->timer.init      = nv04_timer_init;
+               engine->timer.read      = nv04_timer_read;
                engine->timer.takedown  = nv04_timer_takedown;
                engine->fb.init         = nv40_fb_init;
                engine->fb.takedown     = nv40_fb_takedown;
@@ -235,6 +242,7 @@ static int nouveau_init_engine_ptrs(drm_device_t *dev)
                engine->mc.init         = nv50_mc_init;
                engine->mc.takedown     = nv50_mc_takedown;
                engine->timer.init      = nouveau_stub_init;
+               engine->timer.read      = nouveau_stub_timer_read;
                engine->timer.takedown  = nouveau_stub_takedown;
                engine->fb.init         = nouveau_stub_init;
                engine->fb.takedown     = nouveau_stub_takedown;
@@ -259,9 +267,9 @@ static int nouveau_init_engine_ptrs(drm_device_t *dev)
        return 0;
 }
 
-static int nouveau_card_init(drm_device_t *dev)
+static int nouveau_card_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_engine_func *engine;
        int ret;
 
@@ -321,10 +329,10 @@ static int nouveau_card_init(drm_device_t *dev)
        return 0;
 }
 
-static void nouveau_card_takedown(drm_device_t *dev)
+static void nouveau_card_takedown(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       nouveau_engine_func_t *engine = &dev_priv->Engine;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct nouveau_engine_func *engine = &dev_priv->Engine;
 
        if (dev_priv->init_state != NOUVEAU_CARD_INIT_DOWN) {
                engine->fifo.takedown(dev);
@@ -332,7 +340,12 @@ static void nouveau_card_takedown(drm_device_t *dev)
                engine->fb.takedown(dev);
                engine->timer.takedown(dev);
                engine->mc.takedown(dev);
+
+               nouveau_sgdma_nottm_hack_takedown(dev);
+               nouveau_sgdma_takedown(dev);
+
                nouveau_gpuobj_takedown(dev);
+
                nouveau_mem_close(dev);
                engine->instmem.takedown(dev);
 
@@ -340,15 +353,16 @@ static void nouveau_card_takedown(drm_device_t *dev)
        }
 }
 
-/* here a client dies, release the stuff that was allocated for its filp */
-void nouveau_preclose(drm_device_t * dev, DRMFILE filp)
+/* here a client dies, release the stuff that was allocated for its
+ * file_priv */
+void nouveau_preclose(struct drm_device *dev, struct drm_file *file_priv)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
-       nouveau_fifo_cleanup(dev, filp);
-       nouveau_mem_release(filp,dev_priv->fb_heap);
-       nouveau_mem_release(filp,dev_priv->agp_heap);
-       nouveau_mem_release(filp,dev_priv->pci_heap);
+       nouveau_fifo_cleanup(dev, file_priv);
+       nouveau_mem_release(file_priv,dev_priv->fb_heap);
+       nouveau_mem_release(file_priv,dev_priv->agp_heap);
+       nouveau_mem_release(file_priv,dev_priv->pci_heap);
 }
 
 /* first module load, setup the mmio/fb mapping */
@@ -367,14 +381,14 @@ int nouveau_firstopen(struct drm_device *dev)
 
 int nouveau_load(struct drm_device *dev, unsigned long flags)
 {
-       drm_nouveau_private_t *dev_priv;
+       struct drm_nouveau_private *dev_priv;
 
        if (flags==NV_UNKNOWN)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        dev_priv = drm_calloc(1, sizeof(*dev_priv), DRM_MEM_DRIVER);
        if (!dev_priv)                   
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        dev_priv->card_type=flags&NOUVEAU_FAMILY;
        dev_priv->flags=flags&NOUVEAU_FLAGS;
@@ -395,7 +409,7 @@ int nouveau_load(struct drm_device *dev, unsigned long flags)
 
 void nouveau_lastclose(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        nouveau_card_takedown(dev);
 
@@ -413,73 +427,63 @@ int nouveau_unload(struct drm_device *dev)
        return 0;
 }
 
-int nouveau_ioctl_getparam(DRM_IOCTL_ARGS)
+int nouveau_ioctl_getparam(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       drm_nouveau_getparam_t getparam;
-
-       DRM_COPY_FROM_USER_IOCTL(getparam, (drm_nouveau_getparam_t __user *)data,
-                       sizeof(getparam));
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct drm_nouveau_getparam *getparam = data;
 
-       switch (getparam.param) {
+       switch (getparam->param) {
        case NOUVEAU_GETPARAM_PCI_VENDOR:
-               getparam.value=dev->pci_vendor;
+               getparam->value=dev->pci_vendor;
                break;
        case NOUVEAU_GETPARAM_PCI_DEVICE:
-               getparam.value=dev->pci_device;
+               getparam->value=dev->pci_device;
                break;
        case NOUVEAU_GETPARAM_BUS_TYPE:
                if (drm_device_is_agp(dev))
-                       getparam.value=NV_AGP;
+                       getparam->value=NV_AGP;
                else if (drm_device_is_pcie(dev))
-                       getparam.value=NV_PCIE;
+                       getparam->value=NV_PCIE;
                else
-                       getparam.value=NV_PCI;
+                       getparam->value=NV_PCI;
                break;
        case NOUVEAU_GETPARAM_FB_PHYSICAL:
-               getparam.value=dev_priv->fb_phys;
+               getparam->value=dev_priv->fb_phys;
                break;
        case NOUVEAU_GETPARAM_AGP_PHYSICAL:
-               getparam.value=dev_priv->agp_phys;
+               getparam->value=dev_priv->gart_info.aper_base;
                break;
        case NOUVEAU_GETPARAM_PCI_PHYSICAL:
                if ( dev -> sg )
-                       getparam.value=(uint64_t) dev->sg->virtual;
+                       getparam->value=(uint64_t) dev->sg->virtual;
                else 
                     {
                     DRM_ERROR("Requested PCIGART address, while no PCIGART was created\n");
-                    return DRM_ERR(EINVAL);
+                    return -EINVAL;
                     }
                break;
        case NOUVEAU_GETPARAM_FB_SIZE:
-               getparam.value=dev_priv->fb_available_size;
+               getparam->value=dev_priv->fb_available_size;
                break;
        case NOUVEAU_GETPARAM_AGP_SIZE:
-               getparam.value=dev_priv->agp_available_size;
+               getparam->value=dev_priv->gart_info.aper_size;
                break;
        default:
-               DRM_ERROR("unknown parameter %lld\n", getparam.param);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("unknown parameter %lld\n", getparam->param);
+               return -EINVAL;
        }
 
-       DRM_COPY_TO_USER_IOCTL((drm_nouveau_getparam_t __user *)data, getparam,
-                       sizeof(getparam));
        return 0;
 }
 
-int nouveau_ioctl_setparam(DRM_IOCTL_ARGS)
+int nouveau_ioctl_setparam(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
-       drm_nouveau_setparam_t setparam;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       struct drm_nouveau_setparam *setparam = data;
 
-       DRM_COPY_FROM_USER_IOCTL(setparam, (drm_nouveau_setparam_t __user *)data,
-                       sizeof(setparam));
-
-       switch (setparam.param) {
+       switch (setparam->param) {
        case NOUVEAU_SETPARAM_CMDBUF_LOCATION:
-               switch (setparam.value) {
+               switch (setparam->value) {
                case NOUVEAU_MEM_AGP:
                case NOUVEAU_MEM_FB:
                case NOUVEAU_MEM_PCI:
@@ -487,17 +491,17 @@ int nouveau_ioctl_setparam(DRM_IOCTL_ARGS)
                        break;
                default:
                        DRM_ERROR("invalid CMDBUF_LOCATION value=%lld\n",
-                                       setparam.value);
-                       return DRM_ERR(EINVAL);
+                                       setparam->value);
+                       return -EINVAL;
                }
-               dev_priv->config.cmdbuf.location = setparam.value;
+               dev_priv->config.cmdbuf.location = setparam->value;
                break;
        case NOUVEAU_SETPARAM_CMDBUF_SIZE:
-               dev_priv->config.cmdbuf.size = setparam.value;
+               dev_priv->config.cmdbuf.size = setparam->value;
                break;
        default:
-               DRM_ERROR("unknown parameter %lld\n", setparam.param);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("unknown parameter %lld\n", setparam->param);
+               return -EINVAL;
        }
 
        return 0;
@@ -506,17 +510,32 @@ int nouveau_ioctl_setparam(DRM_IOCTL_ARGS)
 /* waits for idle */
 void nouveau_wait_for_idle(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv=dev->dev_private;
-       switch(dev_priv->card_type)
-       {
-               case NV_03:
-                       while(NV_READ(NV03_PGRAPH_STATUS));
-                       break;
-               case NV_50:
-                       break;
-               default:
-                       while(NV_READ(NV04_PGRAPH_STATUS));
-                       break;
+       struct drm_nouveau_private *dev_priv=dev->dev_private;
+       switch(dev_priv->card_type) {
+       case NV_03:
+               while (NV_READ(NV03_PGRAPH_STATUS));
+               break;
+       case NV_50:
+               break;
+       default: {
+               /* This stuff is more or less a copy of what is seen
+                * in nv28 kmmio dump.
+                */
+               uint64_t started = dev_priv->Engine.timer.read(dev);
+               uint64_t stopped = started;
+               uint32_t status;
+               do {
+                       uint32_t pmc_e = NV_READ(NV03_PMC_ENABLE);
+                       status = NV_READ(NV04_PGRAPH_STATUS);
+                       if (!status)
+                               break;
+                       stopped = dev_priv->Engine.timer.read(dev);
+               /* It'll never wrap anyway... */
+               } while (stopped - started < 1000000000ULL);
+               if (status)
+                       DRM_ERROR("timed out with status 0x%08x\n",
+                                 status);
+       }
        }
 }
 
index 06b1c99..534fb50 100644 (file)
@@ -4,9 +4,9 @@
 #include "nouveau_drm.h"
 
 int
-nv04_fb_init(drm_device_t *dev)
+nv04_fb_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        /* This is what the DDX did for NV_ARCH_04, but a mmio-trace shows
         * nvidia reading PFB_CFG_0, then writing back its original value.
@@ -18,7 +18,7 @@ nv04_fb_init(drm_device_t *dev)
 }
 
 void
-nv04_fb_takedown(drm_device_t *dev)
+nv04_fb_takedown(struct drm_device *dev)
 {
 }
 
index e2e934d..564efd0 100644 (file)
@@ -36,9 +36,9 @@
 #define NV04_RAMFC__SIZE 32
 
 int
-nv04_fifo_create_context(drm_device_t *dev, int channel)
+nv04_fifo_create_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        int ret;
 
@@ -67,9 +67,9 @@ nv04_fifo_create_context(drm_device_t *dev, int channel)
 }
 
 void
-nv04_fifo_destroy_context(drm_device_t *dev, int channel)
+nv04_fifo_destroy_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        NV_WRITE(NV04_PFIFO_MODE, NV_READ(NV04_PFIFO_MODE)&~(1<<channel));
@@ -79,9 +79,9 @@ nv04_fifo_destroy_context(drm_device_t *dev, int channel)
 }
 
 int
-nv04_fifo_load_context(drm_device_t *dev, int channel)
+nv04_fifo_load_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t tmp;
 
@@ -107,9 +107,9 @@ nv04_fifo_load_context(drm_device_t *dev, int channel)
 }
 
 int
-nv04_fifo_save_context(drm_device_t *dev, int channel)
+nv04_fifo_save_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t tmp;
 
index df23d27..e35e307 100644 (file)
@@ -287,9 +287,9 @@ struct reg_interval
 
 };
 
-void nouveau_nv04_context_switch(drm_device_t *dev)
+void nouveau_nv04_context_switch(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int channel, channel_old, i, j, index;
 
        channel=NV_READ(NV03_PFIFO_CACHE1_PUSH1)&(nouveau_fifo_number(dev)-1);
@@ -336,8 +336,8 @@ void nouveau_nv04_context_switch(drm_device_t *dev)
        NV_WRITE(NV04_PGRAPH_FIFO,0x1);
 }
 
-int nv04_graph_create_context(drm_device_t *dev, int channel) {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+int nv04_graph_create_context(struct drm_device *dev, int channel) {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        DRM_DEBUG("nv04_graph_context_create %d\n", channel);
 
        memset(dev_priv->fifos[channel]->pgraph_ctx, 0, sizeof(dev_priv->fifos[channel]->pgraph_ctx));
@@ -351,24 +351,24 @@ int nv04_graph_create_context(drm_device_t *dev, int channel) {
        return 0;
 }
 
-void nv04_graph_destroy_context(drm_device_t *dev, int channel)
+void nv04_graph_destroy_context(struct drm_device *dev, int channel)
 {
 }
 
-int nv04_graph_load_context(drm_device_t *dev, int channel)
+int nv04_graph_load_context(struct drm_device *dev, int channel)
 {
        DRM_ERROR("stub!\n");
        return 0;
 }
 
-int nv04_graph_save_context(drm_device_t *dev, int channel)
+int nv04_graph_save_context(struct drm_device *dev, int channel)
 {
        DRM_ERROR("stub!\n");
        return 0;
 }
 
-int nv04_graph_init(drm_device_t *dev) {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+int nv04_graph_init(struct drm_device *dev) {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i,sum=0;
 
        NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) &
@@ -406,7 +406,7 @@ int nv04_graph_init(drm_device_t *dev) {
        return 0;
 }
 
-void nv04_graph_takedown(drm_device_t *dev)
+void nv04_graph_takedown(struct drm_device *dev)
 {
 }
 
index ac7d434..35b20ab 100644 (file)
@@ -5,7 +5,7 @@
 static void
 nv04_instmem_determine_amount(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        /* Figure out how much instance memory we need */
@@ -35,7 +35,7 @@ nv04_instmem_determine_amount(struct drm_device *dev)
 static void
 nv04_instmem_configure_fixed_tables(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        /* FIFO hash table (RAMHT)
         *   use 4k hash table at RAMIN+0x10000
@@ -70,6 +70,7 @@ nv04_instmem_configure_fixed_tables(struct drm_device *dev)
                case NV_30:
                case NV_20:
                case NV_17:
+               case NV_11:
                case NV_10:
                case NV_04:
                case NV_03:
@@ -85,7 +86,7 @@ nv04_instmem_configure_fixed_tables(struct drm_device *dev)
 
 int nv04_instmem_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t offset;
        int ret = 0;
 
@@ -114,26 +115,26 @@ int nv04_instmem_init(struct drm_device *dev)
 }
 
 void
-nv04_instmem_takedown(drm_device_t *dev)
+nv04_instmem_takedown(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        nouveau_gpuobj_del(dev, &dev_priv->ramht);
 }
 
 int
-nv04_instmem_populate(drm_device_t *dev, nouveau_gpuobj_t *gpuobj, uint32_t *sz)
+nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, uint32_t *sz)
 {
        if (gpuobj->im_backing)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        return 0;
 }
 
 void
-nv04_instmem_clear(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
+nv04_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        if (gpuobj && gpuobj->im_backing) {
                if (gpuobj->im_bound)
@@ -144,20 +145,20 @@ nv04_instmem_clear(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
 }
 
 int
-nv04_instmem_bind(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
+nv04_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
 {
        if (!gpuobj->im_pramin || gpuobj->im_bound)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        gpuobj->im_bound = 1;
        return 0;
 }
 
 int
-nv04_instmem_unbind(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
+nv04_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
 {
        if (gpuobj->im_bound == 0)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        gpuobj->im_bound = 0;
        return 0;
index 0e23efb..1d99885 100644 (file)
@@ -4,9 +4,9 @@
 #include "nouveau_drm.h"
 
 int
-nv04_mc_init(drm_device_t *dev)
+nv04_mc_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        /* Power up everything, resetting each individual unit will
         * be done later if needed.
@@ -19,7 +19,7 @@ nv04_mc_init(drm_device_t *dev)
 }
 
 void
-nv04_mc_takedown(drm_device_t *dev)
+nv04_mc_takedown(struct drm_device *dev)
 {
 }
 
index a4b4e82..08a27f4 100644 (file)
@@ -4,9 +4,9 @@
 #include "nouveau_drm.h"
 
 int
-nv04_timer_init(drm_device_t *dev)
+nv04_timer_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        NV_WRITE(NV04_PTIMER_INTR_EN_0, 0x00000000);
        NV_WRITE(NV04_PTIMER_INTR_0, 0xFFFFFFFF);
@@ -17,8 +17,29 @@ nv04_timer_init(drm_device_t *dev)
        return 0;
 }
 
+uint64_t
+nv04_timer_read(struct drm_device *dev)
+{
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+       uint32_t low;
+       /* From kmmio dumps on nv28 this looks like how the blob does this.
+        * It reads the high dword twice, before and after.
+        * The only explanation seems to be that the 64-bit timer counter
+        * advances between high and low dword reads and may corrupt the
+        * result. Not confirmed.
+        */
+       uint32_t high2 = NV_READ(NV04_PTIMER_TIME_1);
+       uint32_t high1;
+       do {
+               high1 = high2;
+               low = NV_READ(NV04_PTIMER_TIME_0);
+               high2 = NV_READ(NV04_PTIMER_TIME_1);
+       } while(high1 != high2);
+       return (((uint64_t)high2) << 32) | (uint64_t)low;
+}
+
 void
-nv04_timer_takedown(drm_device_t *dev)
+nv04_timer_takedown(struct drm_device *dev)
 {
 }
 
index e8336a2..7fff5b3 100644 (file)
@@ -4,9 +4,9 @@
 #include "nouveau_drm.h"
 
 int
-nv10_fb_init(drm_device_t *dev)
+nv10_fb_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t fb_bar_size;
        int i;
 
@@ -20,7 +20,7 @@ nv10_fb_init(drm_device_t *dev)
 }
 
 void
-nv10_fb_takedown(drm_device_t *dev)
+nv10_fb_takedown(struct drm_device *dev)
 {
 }
 
index 2d8d5a0..7b9c665 100644 (file)
@@ -37,9 +37,9 @@
 #define NV10_RAMFC__SIZE ((dev_priv->chipset) >= 0x17 ? 64 : 32)
 
 int
-nv10_fifo_create_context(drm_device_t *dev, int channel)
+nv10_fifo_create_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        int ret;
 
@@ -70,9 +70,9 @@ nv10_fifo_create_context(drm_device_t *dev, int channel)
 }
 
 void
-nv10_fifo_destroy_context(drm_device_t *dev, int channel)
+nv10_fifo_destroy_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        NV_WRITE(NV04_PFIFO_MODE, NV_READ(NV04_PFIFO_MODE)&~(1<<channel));
@@ -82,9 +82,9 @@ nv10_fifo_destroy_context(drm_device_t *dev, int channel)
 }
 
 int
-nv10_fifo_load_context(drm_device_t *dev, int channel)
+nv10_fifo_load_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t tmp;
 
@@ -124,9 +124,9 @@ nv10_fifo_load_context(drm_device_t *dev, int channel)
 }
 
 int
-nv10_fifo_save_context(drm_device_t *dev, int channel)
+nv10_fifo_save_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t tmp;
 
index c544afa..930fcbd 100644 (file)
@@ -28,8 +28,8 @@
 #include "nouveau_drv.h"
 
 
-static void nv10_praph_pipe(drm_device_t *dev) {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+static void nv10_praph_pipe(struct drm_device *dev) {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        nouveau_wait_for_idle(dev);
@@ -527,9 +527,9 @@ NV10_PGRAPH_DEBUG_4,
 0x00400a04,
 };
 
-static int nv10_graph_ctx_regs_find_offset(drm_device_t *dev, int reg)
+static int nv10_graph_ctx_regs_find_offset(struct drm_device *dev, int reg)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i, j;
        for (i = 0; i < sizeof(nv10_graph_ctx_regs)/sizeof(nv10_graph_ctx_regs[0]); i++) {
                if (nv10_graph_ctx_regs[i] == reg)
@@ -544,9 +544,9 @@ static int nv10_graph_ctx_regs_find_offset(drm_device_t *dev, int reg)
        return -1;
 }
 
-static void restore_ctx_regs(drm_device_t *dev, int channel)
+static void restore_ctx_regs(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *fifo = dev_priv->fifos[channel];
        int i, j;
        for (i = 0; i < sizeof(nv10_graph_ctx_regs)/sizeof(nv10_graph_ctx_regs[0]); i++)
@@ -558,9 +558,9 @@ static void restore_ctx_regs(drm_device_t *dev, int channel)
        nouveau_wait_for_idle(dev);
 }
 
-void nouveau_nv10_context_switch(drm_device_t *dev)
+void nouveau_nv10_context_switch(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int channel, channel_old, i, j;
 
        channel=NV_READ(NV03_PFIFO_CACHE1_PUSH1)&(nouveau_fifo_number(dev)-1);
@@ -611,8 +611,8 @@ void nouveau_nv10_context_switch(drm_device_t *dev)
        if (offset > 0) \
                fifo->pgraph_ctx[offset] = val; \
        } while (0)
-int nv10_graph_create_context(drm_device_t *dev, int channel) {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+int nv10_graph_create_context(struct drm_device *dev, int channel) {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *fifo = dev_priv->fifos[channel];
        uint32_t tmp, vramsz;
 
@@ -663,24 +663,24 @@ int nv10_graph_create_context(drm_device_t *dev, int channel) {
        return 0;
 }
 
-void nv10_graph_destroy_context(drm_device_t *dev, int channel)
+void nv10_graph_destroy_context(struct drm_device *dev, int channel)
 {
 }
 
-int nv10_graph_load_context(drm_device_t *dev, int channel)
+int nv10_graph_load_context(struct drm_device *dev, int channel)
 {
        DRM_ERROR("stub!\n");
        return 0;
 }
 
-int nv10_graph_save_context(drm_device_t *dev, int channel)
+int nv10_graph_save_context(struct drm_device *dev, int channel)
 {
        DRM_ERROR("stub!\n");
        return 0;
 }
 
-int nv10_graph_init(drm_device_t *dev) {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+int nv10_graph_init(struct drm_device *dev) {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) &
@@ -714,7 +714,7 @@ int nv10_graph_init(drm_device_t *dev) {
        return 0;
 }
 
-void nv10_graph_takedown(drm_device_t *dev)
+void nv10_graph_takedown(struct drm_device *dev)
 {
 }
 
index 06d7e44..1670c52 100644 (file)
@@ -29,9 +29,9 @@
 
 #define NV20_GRCTX_SIZE (3529*4)
 
-int nv20_graph_create_context(drm_device_t *dev, int channel) {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+int nv20_graph_create_context(struct drm_device *dev, int channel) {
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        unsigned int ctx_size = NV20_GRCTX_SIZE;
        int ret;
@@ -49,8 +49,8 @@ int nv20_graph_create_context(drm_device_t *dev, int channel) {
        return 0;
 }
 
-void nv20_graph_destroy_context(drm_device_t *dev, int channel) {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+void nv20_graph_destroy_context(struct drm_device *dev, int channel) {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        if (chan->ramin_grctx)
@@ -59,9 +59,9 @@ void nv20_graph_destroy_context(drm_device_t *dev, int channel) {
        INSTANCE_WR(dev_priv->ctx_table->gpuobj, channel, 0);
 }
 
-static void nv20_graph_rdi(drm_device_t *dev) {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+static void nv20_graph_rdi(struct drm_device *dev) {
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        int i;
 
        NV_WRITE(NV10_PGRAPH_RDI_INDEX, 0x2c80000);
@@ -73,15 +73,15 @@ static void nv20_graph_rdi(drm_device_t *dev) {
 
 /* Save current context (from PGRAPH) into the channel's context
  */
-int nv20_graph_save_context(drm_device_t *dev, int channel) {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+int nv20_graph_save_context(struct drm_device *dev, int channel) {
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t instance;
 
        instance = INSTANCE_RD(dev_priv->ctx_table->gpuobj, channel);
        if (!instance) {
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        if (instance != (chan->ramin_grctx->instance >> 4))
                DRM_ERROR("nv20_graph_save_context : bad instance\n");
@@ -94,15 +94,15 @@ int nv20_graph_save_context(drm_device_t *dev, int channel) {
 
 /* Restore the context for a specific channel into PGRAPH
  */
-int nv20_graph_load_context(drm_device_t *dev, int channel) {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+int nv20_graph_load_context(struct drm_device *dev, int channel) {
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t instance;
 
        instance = INSTANCE_RD(dev_priv->ctx_table->gpuobj, channel);
        if (!instance) {
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        if (instance != (chan->ramin_grctx->instance >> 4))
                DRM_ERROR("nv20_graph_load_context_current : bad instance\n");
@@ -113,9 +113,9 @@ int nv20_graph_load_context(drm_device_t *dev, int channel) {
        return 0;
 }
 
-void nouveau_nv20_context_switch(drm_device_t *dev)
+void nouveau_nv20_context_switch(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int channel, channel_old;
 
        channel=NV_READ(NV03_PFIFO_CACHE1_PUSH1)&(nouveau_fifo_number(dev)-1);
@@ -144,9 +144,9 @@ void nouveau_nv20_context_switch(drm_device_t *dev)
        NV_WRITE(NV04_PGRAPH_FIFO,0x1);
 }
 
-int nv20_graph_init(drm_device_t *dev) {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+int nv20_graph_init(struct drm_device *dev) {
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        uint32_t tmp, vramsz;
        int ret, i;
 
@@ -240,7 +240,10 @@ int nv20_graph_init(drm_device_t *dev) {
        return 0;
 }
 
-void nv20_graph_takedown(drm_device_t *dev)
+void nv20_graph_takedown(struct drm_device *dev)
 {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+
+       nouveau_gpuobj_ref_del(dev, &dev_priv->ctx_table);
 }
 
index a83ad71..4ed2e2b 100644 (file)
@@ -16,9 +16,9 @@
  *      contexts are taken from dumps just after the 3D object is
  *      created.
  */
-static void nv30_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+static void nv30_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
         
         INSTANCE_WR(ctx, 0x28/4,  0x10000000);
@@ -100,12 +100,12 @@ static void nv30_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 }
 
 
-int nv30_graph_create_context(drm_device_t *dev, int channel)
+int nv30_graph_create_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       void (*ctx_init)(drm_device_t *, nouveau_gpuobj_t *);
+       void (*ctx_init)(struct drm_device *, struct nouveau_gpuobj *);
        unsigned int ctx_size;
        int ret;
 
@@ -131,10 +131,10 @@ int nv30_graph_create_context(drm_device_t *dev, int channel)
        return 0;
 }
 
-void nv30_graph_destroy_context(drm_device_t *dev, int channel)
+void nv30_graph_destroy_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        if (chan->ramin_grctx)
@@ -144,9 +144,9 @@ void nv30_graph_destroy_context(drm_device_t *dev, int channel)
 }
 
 static int
-nouveau_graph_wait_idle(drm_device_t *dev)
+nouveau_graph_wait_idle(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int tv = 1000;
 
        while (tv--) {
@@ -156,19 +156,19 @@ nouveau_graph_wait_idle(drm_device_t *dev)
 
        if (NV_READ(0x400700)) {
                DRM_ERROR("timeout!\n");
-               return DRM_ERR(EBUSY);
+               return -EBUSY;
        }
        return 0;
 }
 
-int nv30_graph_load_context(drm_device_t *dev, int channel)
+int nv30_graph_load_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t inst;
 
        if (!chan->ramin_grctx)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        inst = chan->ramin_grctx->instance >> 4;
 
        NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst);
@@ -178,14 +178,14 @@ int nv30_graph_load_context(drm_device_t *dev, int channel)
        return nouveau_graph_wait_idle(dev);
 }
 
-int nv30_graph_save_context(drm_device_t *dev, int channel)
+int nv30_graph_save_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t inst;
 
        if (!chan->ramin_grctx)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        inst = chan->ramin_grctx->instance >> 4;
 
        NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst);
@@ -195,10 +195,10 @@ int nv30_graph_save_context(drm_device_t *dev, int channel)
        return nouveau_graph_wait_idle(dev);
 }
 
-int nv30_graph_init(drm_device_t *dev)
+int nv30_graph_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        uint32_t vramsz, tmp;
        int ret, i;
 
@@ -279,7 +279,10 @@ int nv30_graph_init(drm_device_t *dev)
        return 0;
 }
 
-void nv30_graph_takedown(drm_device_t *dev)
+void nv30_graph_takedown(struct drm_device *dev)
 {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
+
+       nouveau_gpuobj_ref_del(dev, &dev_priv->ctx_table);
 }
 
index 83a7580..2cbb40e 100644 (file)
@@ -4,9 +4,9 @@
 #include "nouveau_drm.h"
 
 int
-nv40_fb_init(drm_device_t *dev)
+nv40_fb_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t fb_bar_size, tmp;
        int num_tiles;
        int i;
@@ -50,7 +50,7 @@ nv40_fb_init(drm_device_t *dev)
 }
 
 void
-nv40_fb_takedown(drm_device_t *dev)
+nv40_fb_takedown(struct drm_device *dev)
 {
 }
 
index 818a902..ecb1d21 100644 (file)
@@ -37,9 +37,9 @@
 #define NV40_RAMFC__SIZE 128
 
 int
-nv40_fifo_create_context(drm_device_t *dev, int channel)
+nv40_fifo_create_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        int ret;
 
@@ -73,9 +73,9 @@ nv40_fifo_create_context(drm_device_t *dev, int channel)
 }
 
 void
-nv40_fifo_destroy_context(drm_device_t *dev, int channel)
+nv40_fifo_destroy_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        NV_WRITE(NV04_PFIFO_MODE, NV_READ(NV04_PFIFO_MODE)&~(1<<channel));
@@ -85,9 +85,9 @@ nv40_fifo_destroy_context(drm_device_t *dev, int channel)
 }
 
 int
-nv40_fifo_load_context(drm_device_t *dev, int channel)
+nv40_fifo_load_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t tmp, tmp2;
 
@@ -144,9 +144,9 @@ nv40_fifo_load_context(drm_device_t *dev, int channel)
 }
 
 int
-nv40_fifo_save_context(drm_device_t *dev, int channel)
+nv40_fifo_save_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t tmp;
 
index 94d7650..441dbae 100644 (file)
@@ -47,9 +47,9 @@
  *      created.
  */
 static void
-nv40_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+nv40_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        /* Always has the "instance address" of itself at offset 0 */
@@ -188,9 +188,9 @@ nv40_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 }
 
 static void
-nv43_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+nv43_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
        
        INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
@@ -304,9 +304,9 @@ nv43_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 };
 
 static void
-nv46_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+nv46_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
@@ -455,9 +455,9 @@ nv46_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 }
 
 static void
-nv49_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+nv49_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
@@ -678,9 +678,9 @@ nv49_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 }
 
 static void
-nv4a_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+nv4a_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
@@ -795,9 +795,9 @@ nv4a_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 }
 
 static void
-nv4b_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+nv4b_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
@@ -1010,9 +1010,9 @@ nv4b_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 }
 
 static void
-nv4c_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+nv4c_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
@@ -1117,9 +1117,9 @@ nv4c_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 }
 
 static void
-nv4e_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
+nv4e_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        int i;
 
        INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
@@ -1224,12 +1224,12 @@ nv4e_graph_context_init(drm_device_t *dev, nouveau_gpuobj_t *ctx)
 }
 
 int
-nv40_graph_create_context(drm_device_t *dev, int channel)
+nv40_graph_create_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       void (*ctx_init)(drm_device_t *, nouveau_gpuobj_t *);
+       void (*ctx_init)(struct drm_device *, struct nouveau_gpuobj *);
        unsigned int ctx_size;
        int ret;
 
@@ -1284,9 +1284,9 @@ nv40_graph_create_context(drm_device_t *dev, int channel)
 }
 
 void
-nv40_graph_destroy_context(drm_device_t *dev, int channel)
+nv40_graph_destroy_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        if (chan->ramin_grctx)
@@ -1294,9 +1294,9 @@ nv40_graph_destroy_context(drm_device_t *dev, int channel)
 }
 
 static int
-nv40_graph_transfer_context(drm_device_t *dev, uint32_t inst, int save)
+nv40_graph_transfer_context(struct drm_device *dev, uint32_t inst, int save)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t old_cp, tv = 1000;
        int i;
 
@@ -1317,7 +1317,7 @@ nv40_graph_transfer_context(drm_device_t *dev, uint32_t inst, int save)
                DRM_ERROR("failed: inst=0x%08x save=%d\n", inst, save);
                DRM_ERROR("0x40030C = 0x%08x\n",
                          NV_READ(NV40_PGRAPH_CTXCTL_030C));
-               return DRM_ERR(EBUSY);
+               return -EBUSY;
        }
 
        return 0;
@@ -1327,14 +1327,14 @@ nv40_graph_transfer_context(drm_device_t *dev, uint32_t inst, int save)
  *XXX: fails sometimes, not sure why..
  */
 int
-nv40_graph_save_context(drm_device_t *dev, int channel)
+nv40_graph_save_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t inst;
 
        if (!chan->ramin_grctx)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        inst = chan->ramin_grctx->instance >> 4;
 
        return nv40_graph_transfer_context(dev, inst, 1);
@@ -1344,15 +1344,15 @@ nv40_graph_save_context(drm_device_t *dev, int channel)
  * XXX: fails sometimes.. not sure why
  */
 int
-nv40_graph_load_context(drm_device_t *dev, int channel)
+nv40_graph_load_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t inst;
        int ret;
 
        if (!chan->ramin_grctx)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        inst = chan->ramin_grctx->instance >> 4;
 
        ret = nv40_graph_transfer_context(dev, inst, 0);
@@ -1599,10 +1599,10 @@ static uint32_t nv4e_ctx_voodoo[] = {
  * C51         0x4e
  */
 int
-nv40_graph_init(drm_device_t *dev)
+nv40_graph_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv =
-               (drm_nouveau_private_t *)dev->dev_private;
+       struct drm_nouveau_private *dev_priv =
+               (struct drm_nouveau_private *)dev->dev_private;
        uint32_t *ctx_voodoo;
        uint32_t vramsz, tmp;
        int i, j;
@@ -1829,7 +1829,7 @@ nv40_graph_init(drm_device_t *dev)
        return 0;
 }
 
-void nv40_graph_takedown(drm_device_t *dev)
+void nv40_graph_takedown(struct drm_device *dev)
 {
 }
 
index 8dbd96f..8bb6b08 100644 (file)
@@ -4,9 +4,9 @@
 #include "nouveau_drm.h"
 
 int
-nv40_mc_init(drm_device_t *dev)
+nv40_mc_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t tmp;
 
        /* Power up everything, resetting each individual unit will
@@ -35,7 +35,7 @@ nv40_mc_init(drm_device_t *dev)
 }
 
 void
-nv40_mc_takedown(drm_device_t *dev)
+nv40_mc_takedown(struct drm_device *dev)
 {
 }
 
index ee1fb88..f7b9822 100644 (file)
 #include "nouveau_drv.h"
 
 typedef struct {
-       nouveau_gpuobj_ref_t *thingo;
-       nouveau_gpuobj_ref_t *dummyctx;
+       struct nouveau_gpuobj_ref *thingo;
+       struct nouveau_gpuobj_ref *dummyctx;
 } nv50_fifo_priv;
 
 #define IS_G80 ((dev_priv->chipset & 0xf0) == 0x50)
 
 static void
-nv50_fifo_init_thingo(drm_device_t *dev)
+nv50_fifo_init_thingo(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        nv50_fifo_priv *priv = dev_priv->Engine.fifo.priv;
-       nouveau_gpuobj_ref_t *thingo = priv->thingo;
+       struct nouveau_gpuobj_ref *thingo = priv->thingo;
        int i, fi=2;
 
        DRM_DEBUG("\n");
@@ -60,23 +60,23 @@ nv50_fifo_init_thingo(drm_device_t *dev)
 }
 
 static int
-nv50_fifo_channel_enable(drm_device_t *dev, int channel)
+nv50_fifo_channel_enable(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        DRM_DEBUG("ch%d\n", channel);
 
        if (IS_G80) {
                if (!chan->ramin)
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
 
                NV_WRITE(NV50_PFIFO_CTX_TABLE(channel),
                         (chan->ramin->instance >> 12) |
                         NV50_PFIFO_CTX_TABLE_CHANNEL_ENABLED);
        } else {
                if (!chan->ramfc)
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
 
                NV_WRITE(NV50_PFIFO_CTX_TABLE(channel),
                         (chan->ramfc->instance >> 8) |
@@ -88,9 +88,9 @@ nv50_fifo_channel_enable(drm_device_t *dev, int channel)
 }
 
 static void
-nv50_fifo_channel_disable(drm_device_t *dev, int channel, int nt)
+nv50_fifo_channel_disable(struct drm_device *dev, int channel, int nt)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        DRM_DEBUG("ch%d, nt=%d\n", channel, nt);
 
@@ -106,9 +106,9 @@ nv50_fifo_channel_disable(drm_device_t *dev, int channel, int nt)
 }
 
 static void
-nv50_fifo_init_reset(drm_device_t *dev)
+nv50_fifo_init_reset(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t pmc_e;
 
        DRM_DEBUG("\n");
@@ -120,7 +120,7 @@ nv50_fifo_init_reset(drm_device_t *dev)
 }
 
 static void
-nv50_fifo_init_context_table(drm_device_t *dev)
+nv50_fifo_init_context_table(struct drm_device *dev)
 {
        int i;
 
@@ -132,9 +132,9 @@ nv50_fifo_init_context_table(drm_device_t *dev)
 }
 
 static void
-nv50_fifo_init_regs__nv(drm_device_t *dev)
+nv50_fifo_init_regs__nv(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        DRM_DEBUG("\n");
 
@@ -142,9 +142,9 @@ nv50_fifo_init_regs__nv(drm_device_t *dev)
 }
 
 static int
-nv50_fifo_init_regs(drm_device_t *dev)
+nv50_fifo_init_regs(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        nv50_fifo_priv *priv = dev_priv->Engine.fifo.priv;
        int ret;
 
@@ -176,9 +176,9 @@ nv50_fifo_init_regs(drm_device_t *dev)
 }
 
 int
-nv50_fifo_init(drm_device_t *dev)
+nv50_fifo_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        nv50_fifo_priv *priv;
        int ret;
 
@@ -186,7 +186,7 @@ nv50_fifo_init(drm_device_t *dev)
 
        priv = drm_calloc(1, sizeof(*priv), DRM_MEM_DRIVER);
        if (!priv)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        dev_priv->Engine.fifo.priv = priv;
 
        nv50_fifo_init_reset(dev);
@@ -207,9 +207,9 @@ nv50_fifo_init(drm_device_t *dev)
 }
 
 void
-nv50_fifo_takedown(drm_device_t *dev)
+nv50_fifo_takedown(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        nv50_fifo_priv *priv = dev_priv->Engine.fifo.priv;
 
        DRM_DEBUG("\n");
@@ -225,11 +225,11 @@ nv50_fifo_takedown(drm_device_t *dev)
 }
 
 int
-nv50_fifo_create_context(drm_device_t *dev, int channel)
+nv50_fifo_create_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       nouveau_gpuobj_t *ramfc = NULL;
+       struct nouveau_gpuobj *ramfc = NULL;
        int ret;
 
        DRM_DEBUG("ch%d\n", channel);
@@ -263,7 +263,7 @@ nv50_fifo_create_context(drm_device_t *dev, int channel)
        INSTANCE_WR(ramfc, 0x54/4, 0x000f0000);
        INSTANCE_WR(ramfc, 0x7c/4, 0x30000001);
        INSTANCE_WR(ramfc, 0x78/4, 0x00000000);
-       INSTANCE_WR(ramfc, 0x4c/4, 0x00007fff);
+       INSTANCE_WR(ramfc, 0x4c/4, chan->pushbuf_mem->size - 1);
 
        if (!IS_G80) {
                INSTANCE_WR(chan->ramin->gpuobj, 0, channel);
@@ -283,9 +283,9 @@ nv50_fifo_create_context(drm_device_t *dev, int channel)
 }
 
 void
-nv50_fifo_destroy_context(drm_device_t *dev, int channel)
+nv50_fifo_destroy_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
 
        DRM_DEBUG("ch%d\n", channel);
@@ -295,11 +295,11 @@ nv50_fifo_destroy_context(drm_device_t *dev, int channel)
 }
 
 int
-nv50_fifo_load_context(drm_device_t *dev, int channel)
+nv50_fifo_load_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       nouveau_gpuobj_t *ramfc = chan->ramfc->gpuobj;
+       struct nouveau_gpuobj *ramfc = chan->ramfc->gpuobj;
 
        DRM_DEBUG("ch%d\n", channel);
 
@@ -324,7 +324,7 @@ nv50_fifo_load_context(drm_device_t *dev, int channel)
 }
 
 int
-nv50_fifo_save_context(drm_device_t *dev, int channel)
+nv50_fifo_save_context(struct drm_device *dev, int channel)
 {
        DRM_DEBUG("ch%d\n", channel);
        DRM_ERROR("stub!\n");
index 271ed73..8df5df2 100644 (file)
@@ -31,9 +31,9 @@
 #define IS_G80 ((dev_priv->chipset & 0xf0) == 0x50)
 
 static void
-nv50_graph_init_reset(drm_device_t *dev)
+nv50_graph_init_reset(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t pmc_e;
 
        DRM_DEBUG("\n");
@@ -45,9 +45,9 @@ nv50_graph_init_reset(drm_device_t *dev)
 }
 
 static void
-nv50_graph_init_regs__nv(drm_device_t *dev)
+nv50_graph_init_regs__nv(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        DRM_DEBUG("\n");
 
@@ -66,9 +66,9 @@ nv50_graph_init_regs__nv(drm_device_t *dev)
 }
 
 static void
-nv50_graph_init_regs(drm_device_t *dev)
+nv50_graph_init_regs(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        DRM_DEBUG("\n");
 
@@ -139,9 +139,9 @@ static uint32_t nv84_ctx_voodoo[] = {
 };
 
 static void
-nv50_graph_init_ctxctl(drm_device_t *dev)
+nv50_graph_init_ctxctl(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t *voodoo;
 
        DRM_DEBUG("\n");
@@ -169,7 +169,7 @@ nv50_graph_init_ctxctl(drm_device_t *dev)
 }
 
 int 
-nv50_graph_init(drm_device_t *dev)
+nv50_graph_init(struct drm_device *dev)
 {
        DRM_DEBUG("\n");
 
@@ -182,17 +182,17 @@ nv50_graph_init(drm_device_t *dev)
 }
 
 void
-nv50_graph_takedown(drm_device_t *dev)
+nv50_graph_takedown(struct drm_device *dev)
 {
        DRM_DEBUG("\n");
 }
 
 int
-nv50_graph_create_context(drm_device_t *dev, int channel)
+nv50_graph_create_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
-       nouveau_gpuobj_t *ramin = chan->ramin->gpuobj;
+       struct nouveau_gpuobj *ramin = chan->ramin->gpuobj;
        int grctx_size = 0x60000, hdr;
        int ret;
 
@@ -218,9 +218,9 @@ nv50_graph_create_context(drm_device_t *dev, int channel)
 }
 
 void
-nv50_graph_destroy_context(drm_device_t *dev, int channel)
+nv50_graph_destroy_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        int i, hdr;
 
@@ -234,9 +234,9 @@ nv50_graph_destroy_context(drm_device_t *dev, int channel)
 }
 
 static int
-nv50_graph_transfer_context(drm_device_t *dev, uint32_t inst, int save)
+nv50_graph_transfer_context(struct drm_device *dev, uint32_t inst, int save)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t old_cp, tv = 20000;
        int i;
 
@@ -259,19 +259,19 @@ nv50_graph_transfer_context(drm_device_t *dev, uint32_t inst, int save)
                DRM_ERROR("failed: inst=0x%08x save=%d\n", inst, save);
                DRM_ERROR("0x40030C = 0x%08x\n",
                          NV_READ(NV40_PGRAPH_CTXCTL_030C));
-               return DRM_ERR(EBUSY);
+               return -EBUSY;
        }
 
        return 0;
 }
 
 int
-nv50_graph_load_context(drm_device_t *dev, int channel)
+nv50_graph_load_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t inst = ((chan->ramin->instance >> 12) | (1<<31));
-       int ret;
+       int ret; (void)ret;
 
        DRM_DEBUG("ch%d\n", channel);
 
@@ -288,9 +288,9 @@ nv50_graph_load_context(drm_device_t *dev, int channel)
 }
 
 int
-nv50_graph_save_context(drm_device_t *dev, int channel)
+nv50_graph_save_context(struct drm_device *dev, int channel)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        struct nouveau_fifo *chan = dev_priv->fifos[channel];
        uint32_t inst = ((chan->ramin->instance >> 12) | (1<<31));
 
index 81c6082..c26b1db 100644 (file)
@@ -39,9 +39,9 @@ typedef struct {
 #define NV50_INSTMEM_PT_SIZE(a)        (((a) >> 12) << 3)
 
 int
-nv50_instmem_init(drm_device_t *dev)
+nv50_instmem_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        nv50_instmem_priv *priv;
        uint32_t rv, pt, pts, cb, cb0, cb1, unk, as;
        uint32_t i, v;
@@ -49,7 +49,7 @@ nv50_instmem_init(drm_device_t *dev)
 
        priv = drm_calloc(1, sizeof(*priv), DRM_MEM_DRIVER);
        if (!priv)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        dev_priv->Engine.instmem.priv = priv;
 
        /* Save current state */
@@ -126,14 +126,14 @@ nv50_instmem_init(drm_device_t *dev)
        NV_WRITE(0x1700, pt >> 16);
        if (NV_READ(0x700000) != NV_RI32(0)) {
                DRM_ERROR("Failed to init PRAMIN page table\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /* Create a heap to manage PRAMIN aperture allocations */
        ret = nouveau_mem_init_heap(&dev_priv->ramin_heap, pts, as-pts);
        if (ret) {
                DRM_ERROR("Failed to init PRAMIN heap\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        DRM_DEBUG("NV50: PRAMIN setup ok\n");
 
@@ -150,9 +150,9 @@ nv50_instmem_init(drm_device_t *dev)
 }
 
 void
-nv50_instmem_takedown(drm_device_t *dev)
+nv50_instmem_takedown(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        nv50_instmem_priv *priv = dev_priv->Engine.instmem.priv;
        int i;
 
@@ -168,30 +168,30 @@ nv50_instmem_takedown(drm_device_t *dev)
 }
 
 int
-nv50_instmem_populate(drm_device_t *dev, nouveau_gpuobj_t *gpuobj, uint32_t *sz)
+nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, uint32_t *sz)
 {
        if (gpuobj->im_backing)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        *sz = (*sz + (NV50_INSTMEM_PAGE_SIZE-1)) & ~(NV50_INSTMEM_PAGE_SIZE-1);
        if (*sz == 0)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        gpuobj->im_backing = nouveau_mem_alloc(dev, NV50_INSTMEM_PAGE_SIZE,
                                               *sz, NOUVEAU_MEM_FB,
-                                              (DRMFILE)-2);
+                                              (struct drm_file *)-2);
        if (!gpuobj->im_backing) {
                DRM_ERROR("Couldn't allocate vram to back PRAMIN pages\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        return 0;
 }
 
 void
-nv50_instmem_clear(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
+nv50_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        if (gpuobj && gpuobj->im_backing) {
                if (gpuobj->im_bound)
@@ -202,13 +202,13 @@ nv50_instmem_clear(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
 }
 
 int
-nv50_instmem_bind(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
+nv50_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t pte, pte_end, vram;
 
        if (!gpuobj->im_backing || !gpuobj->im_pramin || gpuobj->im_bound)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        DRM_DEBUG("st=0x%0llx sz=0x%0llx\n",
                  gpuobj->im_pramin->start, gpuobj->im_pramin->size);
@@ -240,13 +240,13 @@ nv50_instmem_bind(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
 }
 
 int
-nv50_instmem_unbind(drm_device_t *dev, nouveau_gpuobj_t *gpuobj)
+nv50_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        uint32_t pte, pte_end;
 
        if (gpuobj->im_bound == 0)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        pte     = (gpuobj->im_pramin->start >> 12) << 3;
        pte_end = ((gpuobj->im_pramin->size >> 12) << 3) + pte;
index 7f7537f..952dea9 100644 (file)
 #include "nouveau_drv.h"
 
 int
-nv50_mc_init(drm_device_t *dev)
+nv50_mc_init(struct drm_device *dev)
 {
-       drm_nouveau_private_t *dev_priv = dev->dev_private;
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        NV_WRITE(NV03_PMC_ENABLE, 0xFFFFFFFF);
        return 0;
 }
 
-void nv50_mc_takedown(drm_device_t *dev)
+void nv50_mc_takedown(struct drm_device *dev)
 {
 }
index a2ee18b..5bed45b 100644 (file)
@@ -81,7 +81,7 @@ static u32 r128_cce_microcode[] = {
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 };
 
-static int R128_READ_PLL(drm_device_t * dev, int addr)
+static int R128_READ_PLL(struct drm_device * dev, int addr)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
 
@@ -129,7 +129,7 @@ static int r128_do_pixcache_flush(drm_r128_private_t * dev_priv)
 #if R128_FIFO_DEBUG
        DRM_ERROR("failed!\n");
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 static int r128_do_wait_for_fifo(drm_r128_private_t * dev_priv, int entries)
@@ -146,7 +146,7 @@ static int r128_do_wait_for_fifo(drm_r128_private_t * dev_priv, int entries)
 #if R128_FIFO_DEBUG
        DRM_ERROR("failed!\n");
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 static int r128_do_wait_for_idle(drm_r128_private_t * dev_priv)
@@ -168,7 +168,7 @@ static int r128_do_wait_for_idle(drm_r128_private_t * dev_priv)
 #if R128_FIFO_DEBUG
        DRM_ERROR("failed!\n");
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 /* ================================================================
@@ -227,7 +227,7 @@ int r128_do_cce_idle(drm_r128_private_t * dev_priv)
        DRM_ERROR("failed!\n");
        r128_status(dev_priv);
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 /* Start the Concurrent Command Engine.
@@ -271,7 +271,7 @@ static void r128_do_cce_stop(drm_r128_private_t * dev_priv)
 
 /* Reset the engine.  This will stop the CCE if it is running.
  */
-static int r128_do_engine_reset(drm_device_t * dev)
+static int r128_do_engine_reset(struct drm_device * dev)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        u32 clock_cntl_index, mclk_cntl, gen_reset_cntl;
@@ -308,7 +308,7 @@ static int r128_do_engine_reset(drm_device_t * dev)
        return 0;
 }
 
-static void r128_cce_init_ring_buffer(drm_device_t * dev,
+static void r128_cce_init_ring_buffer(struct drm_device * dev,
                                      drm_r128_private_t * dev_priv)
 {
        u32 ring_start;
@@ -347,7 +347,7 @@ static void r128_cce_init_ring_buffer(drm_device_t * dev,
        R128_WRITE(R128_BUS_CNTL, tmp);
 }
 
-static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
+static int r128_do_init_cce(struct drm_device * dev, drm_r128_init_t * init)
 {
        drm_r128_private_t *dev_priv;
 
@@ -355,7 +355,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
 
        dev_priv = drm_alloc(sizeof(drm_r128_private_t), DRM_MEM_DRIVER);
        if (dev_priv == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        memset(dev_priv, 0, sizeof(drm_r128_private_t));
 
@@ -365,7 +365,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                DRM_ERROR("PCI GART memory not allocated!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->usec_timeout = init->usec_timeout;
@@ -374,7 +374,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                DRM_DEBUG("TIMEOUT problem!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->cce_mode = init->cce_mode;
@@ -394,7 +394,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                DRM_DEBUG("Bad cce_mode!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        switch (init->cce_mode) {
@@ -461,7 +461,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                DRM_ERROR("could not find sarea!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->mmio = drm_core_findmap(dev, init->mmio_offset);
@@ -469,21 +469,21 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                DRM_ERROR("could not find mmio region!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        dev_priv->cce_ring = drm_core_findmap(dev, init->ring_offset);
        if (!dev_priv->cce_ring) {
                DRM_ERROR("could not find cce ring region!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        dev_priv->ring_rptr = drm_core_findmap(dev, init->ring_rptr_offset);
        if (!dev_priv->ring_rptr) {
                DRM_ERROR("could not find ring read pointer!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        dev->agp_buffer_token = init->buffers_offset;
        dev->agp_buffer_map = drm_core_findmap(dev, init->buffers_offset);
@@ -491,7 +491,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                DRM_ERROR("could not find dma buffer region!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (!dev_priv->is_pci) {
@@ -501,7 +501,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                        DRM_ERROR("could not find agp texture region!\n");
                        dev->dev_private = (void *)dev_priv;
                        r128_do_cleanup_cce(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
 
@@ -520,7 +520,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                        DRM_ERROR("Could not ioremap agp regions!\n");
                        dev->dev_private = (void *)dev_priv;
                        r128_do_cleanup_cce(dev);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
        } else
 #endif
@@ -567,7 +567,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
                        DRM_ERROR("failed to init PCI GART!\n");
                        dev->dev_private = (void *)dev_priv;
                        r128_do_cleanup_cce(dev);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
                R128_WRITE(R128_PCI_GART_PAGE, dev_priv->gart_info.bus_addr);
 #if __OS_HAS_AGP
@@ -584,7 +584,7 @@ static int r128_do_init_cce(drm_device_t * dev, drm_r128_init_t * init)
        return 0;
 }
 
-int r128_do_cleanup_cce(drm_device_t * dev)
+int r128_do_cleanup_cce(struct drm_device * dev)
 {
 
        /* Make sure interrupts are disabled here because the uninstall ioctl
@@ -623,35 +623,30 @@ int r128_do_cleanup_cce(drm_device_t * dev)
        return 0;
 }
 
-int r128_cce_init(DRM_IOCTL_ARGS)
+int r128_cce_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_r128_init_t init;
+       drm_r128_init_t *init = data;
 
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_r128_init_t __user *) data,
-                                sizeof(init));
-
-       switch (init.func) {
+       switch (init->func) {
        case R128_INIT_CCE:
-               return r128_do_init_cce(dev, &init);
+               return r128_do_init_cce(dev, init);
        case R128_CLEANUP_CCE:
                return r128_do_cleanup_cce(dev);
        }
 
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
-int r128_cce_start(DRM_IOCTL_ARGS)
+int r128_cce_start(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (dev_priv->cce_running || dev_priv->cce_mode == R128_PM4_NONPM4) {
                DRM_DEBUG("%s while CCE running\n", __FUNCTION__);
@@ -666,30 +661,26 @@ int r128_cce_start(DRM_IOCTL_ARGS)
 /* Stop the CCE.  The engine must have been idled before calling this
  * routine.
  */
-int r128_cce_stop(DRM_IOCTL_ARGS)
+int r128_cce_stop(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_r128_cce_stop_t stop;
+       drm_r128_cce_stop_t *stop = data;
        int ret;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(stop, (drm_r128_cce_stop_t __user *) data,
-                                sizeof(stop));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        /* Flush any pending CCE commands.  This ensures any outstanding
         * commands are exectuted by the engine before we turn it off.
         */
-       if (stop.flush) {
+       if (stop->flush) {
                r128_do_cce_flush(dev_priv);
        }
 
        /* If we fail to make the engine go idle, we return an error
         * code so that the DRM ioctl wrapper can try again.
         */
-       if (stop.idle) {
+       if (stop->idle) {
                ret = r128_do_cce_idle(dev_priv);
                if (ret)
                        return ret;
@@ -709,17 +700,16 @@ int r128_cce_stop(DRM_IOCTL_ARGS)
 
 /* Just reset the CCE ring.  Called as part of an X Server engine reset.
  */
-int r128_cce_reset(DRM_IOCTL_ARGS)
+int r128_cce_reset(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_DEBUG("%s called before init done\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        r128_do_cce_reset(dev_priv);
@@ -730,13 +720,12 @@ int r128_cce_reset(DRM_IOCTL_ARGS)
        return 0;
 }
 
-int r128_cce_idle(DRM_IOCTL_ARGS)
+int r128_cce_idle(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (dev_priv->cce_running) {
                r128_do_cce_flush(dev_priv);
@@ -745,19 +734,18 @@ int r128_cce_idle(DRM_IOCTL_ARGS)
        return r128_do_cce_idle(dev_priv);
 }
 
-int r128_engine_reset(DRM_IOCTL_ARGS)
+int r128_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return r128_do_engine_reset(dev);
 }
 
-int r128_fullscreen(DRM_IOCTL_ARGS)
+int r128_fullscreen(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
 /* ================================================================
@@ -767,18 +755,18 @@ int r128_fullscreen(DRM_IOCTL_ARGS)
 #define R128_BUFFER_FREE       0
 
 #if 0
-static int r128_freelist_init(drm_device_t * dev)
+static int r128_freelist_init(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        drm_r128_buf_priv_t *buf_priv;
        drm_r128_freelist_t *entry;
        int i;
 
        dev_priv->head = drm_alloc(sizeof(drm_r128_freelist_t), DRM_MEM_DRIVER);
        if (dev_priv->head == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        memset(dev_priv->head, 0, sizeof(drm_r128_freelist_t));
        dev_priv->head->age = R128_BUFFER_USED;
@@ -789,7 +777,7 @@ static int r128_freelist_init(drm_device_t * dev)
 
                entry = drm_alloc(sizeof(drm_r128_freelist_t), DRM_MEM_DRIVER);
                if (!entry)
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
 
                entry->age = R128_BUFFER_FREE;
                entry->buf = buf;
@@ -813,12 +801,12 @@ static int r128_freelist_init(drm_device_t * dev)
 }
 #endif
 
-static drm_buf_t *r128_freelist_get(drm_device_t * dev)
+static struct drm_buf *r128_freelist_get(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_r128_private_t *dev_priv = dev->dev_private;
        drm_r128_buf_priv_t *buf_priv;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        int i, t;
 
        /* FIXME: Optimize -- use freelist code */
@@ -826,7 +814,7 @@ static drm_buf_t *r128_freelist_get(drm_device_t * dev)
        for (i = 0; i < dma->buf_count; i++) {
                buf = dma->buflist[i];
                buf_priv = buf->dev_private;
-               if (buf->filp == 0)
+               if (buf->file_priv == 0)
                        return buf;
        }
 
@@ -851,13 +839,13 @@ static drm_buf_t *r128_freelist_get(drm_device_t * dev)
        return NULL;
 }
 
-void r128_freelist_reset(drm_device_t * dev)
+void r128_freelist_reset(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int i;
 
        for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[i];
+               struct drm_buf *buf = dma->buflist[i];
                drm_r128_buf_priv_t *buf_priv = buf->dev_private;
                buf_priv->age = 0;
        }
@@ -881,68 +869,64 @@ int r128_wait_ring(drm_r128_private_t * dev_priv, int n)
 
        /* FIXME: This is being ignored... */
        DRM_ERROR("failed!\n");
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
-static int r128_cce_get_buffers(DRMFILE filp, drm_device_t * dev, drm_dma_t * d)
+static int r128_cce_get_buffers(struct drm_device * dev,
+                               struct drm_file *file_priv,
+                               struct drm_dma * d)
 {
        int i;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
 
        for (i = d->granted_count; i < d->request_count; i++) {
                buf = r128_freelist_get(dev);
                if (!buf)
-                       return DRM_ERR(EAGAIN);
+                       return -EAGAIN;
 
-               buf->filp = filp;
+               buf->file_priv = file_priv;
 
                if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx,
                                     sizeof(buf->idx)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                if (DRM_COPY_TO_USER(&d->request_sizes[i], &buf->total,
                                     sizeof(buf->total)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
 
                d->granted_count++;
        }
        return 0;
 }
 
-int r128_cce_buffers(DRM_IOCTL_ARGS)
+int r128_cce_buffers(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int ret = 0;
-       drm_dma_t __user *argp = (void __user *)data;
-       drm_dma_t d;
+       struct drm_dma *d = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        /* Please don't send us buffers.
         */
-       if (d.send_count != 0) {
+       if (d->send_count != 0) {
                DRM_ERROR("Process %d trying to send %d buffers via drmDMA\n",
-                         DRM_CURRENTPID, d.send_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->send_count);
+               return -EINVAL;
        }
 
        /* We'll send you buffers.
         */
-       if (d.request_count < 0 || d.request_count > dma->buf_count) {
+       if (d->request_count < 0 || d->request_count > dma->buf_count) {
                DRM_ERROR("Process %d trying to get %d buffers (of %d max)\n",
-                         DRM_CURRENTPID, d.request_count, dma->buf_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->request_count, dma->buf_count);
+               return -EINVAL;
        }
 
-       d.granted_count = 0;
+       d->granted_count = 0;
 
-       if (d.request_count) {
-               ret = r128_cce_get_buffers(filp, dev, &d);
+       if (d->request_count) {
+               ret = r128_cce_get_buffers(dev, file_priv, d);
        }
 
-       DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
-
        return ret;
 }
index 6e8af31..e94a39c 100644 (file)
@@ -153,7 +153,7 @@ typedef struct drm_r128_sarea {
 
        /* The current cliprects, or a subset thereof.
         */
-       drm_clip_rect_t boxes[R128_NR_SAREA_CLIPRECTS];
+       struct drm_clip_rect boxes[R128_NR_SAREA_CLIPRECTS];
        unsigned int nbox;
 
        /* Counters for client-side throttling of rendering clients.
@@ -161,7 +161,7 @@ typedef struct drm_r128_sarea {
        unsigned int last_frame;
        unsigned int last_dispatch;
 
-       drm_tex_region_t tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS + 1];
+       struct drm_tex_region tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS + 1];
        unsigned int tex_age[R128_NR_TEX_HEAPS];
        int ctx_owner;
        int pfAllowPageFlip;    /* number of 3d windows (0,1,2 or more) */
index 9086835..abb9989 100644 (file)
@@ -57,7 +57,7 @@
 
 typedef struct drm_r128_freelist {
        unsigned int age;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        struct drm_r128_freelist *next;
        struct drm_r128_freelist *prev;
 } drm_r128_freelist_t;
@@ -118,7 +118,7 @@ typedef struct drm_r128_private {
        drm_local_map_t *cce_ring;
        drm_local_map_t *ring_rptr;
        drm_local_map_t *agp_textures;
-       drm_ati_pcigart_info gart_info;
+       struct ati_pcigart_info gart_info;
 } drm_r128_private_t;
 
 typedef struct drm_r128_buf_priv {
@@ -129,34 +129,35 @@ typedef struct drm_r128_buf_priv {
        drm_r128_freelist_t *list_entry;
 } drm_r128_buf_priv_t;
 
-extern drm_ioctl_desc_t r128_ioctls[];
+extern struct drm_ioctl_desc r128_ioctls[];
 extern int r128_max_ioctl;
 
                                /* r128_cce.c */
-extern int r128_cce_init(DRM_IOCTL_ARGS);
-extern int r128_cce_start(DRM_IOCTL_ARGS);
-extern int r128_cce_stop(DRM_IOCTL_ARGS);
-extern int r128_cce_reset(DRM_IOCTL_ARGS);
-extern int r128_cce_idle(DRM_IOCTL_ARGS);
-extern int r128_engine_reset(DRM_IOCTL_ARGS);
-extern int r128_fullscreen(DRM_IOCTL_ARGS);
-extern int r128_cce_buffers(DRM_IOCTL_ARGS);
+extern int r128_cce_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int r128_cce_start(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int r128_cce_stop(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int r128_cce_reset(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int r128_cce_idle(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int r128_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int r128_fullscreen(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int r128_cce_buffers(struct drm_device *dev, void *data, struct drm_file *file_priv);
 
-extern void r128_freelist_reset(drm_device_t * dev);
+extern void r128_freelist_reset(struct drm_device * dev);
 
 extern int r128_wait_ring(drm_r128_private_t * dev_priv, int n);
 
 extern int r128_do_cce_idle(drm_r128_private_t * dev_priv);
-extern int r128_do_cleanup_cce(drm_device_t * dev);
+extern int r128_do_cleanup_cce(struct drm_device * dev);
 
-extern int r128_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence);
+extern int r128_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence);
 
 extern irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS);
-extern void r128_driver_irq_preinstall(drm_device_t * dev);
-extern void r128_driver_irq_postinstall(drm_device_t * dev);
-extern void r128_driver_irq_uninstall(drm_device_t * dev);
-extern void r128_driver_lastclose(drm_device_t * dev);
-extern void r128_driver_preclose(drm_device_t * dev, DRMFILE filp);
+extern void r128_driver_irq_preinstall(struct drm_device * dev);
+extern void r128_driver_irq_postinstall(struct drm_device * dev);
+extern void r128_driver_irq_uninstall(struct drm_device * dev);
+extern void r128_driver_lastclose(struct drm_device * dev);
+extern void r128_driver_preclose(struct drm_device * dev,
+                                struct drm_file *file_priv);
 
 extern long r128_compat_ioctl(struct file *filp, unsigned int cmd,
                              unsigned long arg);
@@ -428,7 +429,7 @@ do {                                                                        \
                        DRM_UDELAY(1);                          \
                }                                                       \
                DRM_ERROR( "ring space check failed!\n" );              \
-               return DRM_ERR(EBUSY);                          \
+               return -EBUSY;                          \
        }                                                               \
  __ring_space_done:                                                    \
        ;                                                               \
index 87f8ca2..c76fdca 100644 (file)
@@ -37,7 +37,7 @@
 
 irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS)
 {
-       drm_device_t *dev = (drm_device_t *) arg;
+       struct drm_device *dev = (struct drm_device *) arg;
        drm_r128_private_t *dev_priv = (drm_r128_private_t *) dev->dev_private;
        int status;
 
@@ -54,7 +54,7 @@ irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS)
        return IRQ_NONE;
 }
 
-int r128_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
+int r128_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence)
 {
        unsigned int cur_vblank;
        int ret = 0;
@@ -72,7 +72,7 @@ int r128_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
        return ret;
 }
 
-void r128_driver_irq_preinstall(drm_device_t * dev)
+void r128_driver_irq_preinstall(struct drm_device * dev)
 {
        drm_r128_private_t *dev_priv = (drm_r128_private_t *) dev->dev_private;
 
@@ -82,7 +82,7 @@ void r128_driver_irq_preinstall(drm_device_t * dev)
        R128_WRITE(R128_GEN_INT_STATUS, R128_CRTC_VBLANK_INT_AK);
 }
 
-void r128_driver_irq_postinstall(drm_device_t * dev)
+void r128_driver_irq_postinstall(struct drm_device * dev)
 {
        drm_r128_private_t *dev_priv = (drm_r128_private_t *) dev->dev_private;
 
@@ -90,7 +90,7 @@ void r128_driver_irq_postinstall(drm_device_t * dev)
        R128_WRITE(R128_GEN_INT_CNTL, R128_CRTC_VBLANK_INT_EN);
 }
 
-void r128_driver_irq_uninstall(drm_device_t * dev)
+void r128_driver_irq_uninstall(struct drm_device * dev)
 {
        drm_r128_private_t *dev_priv = (drm_r128_private_t *) dev->dev_private;
        if (!dev_priv)
index 17b11e7..b7f483c 100644 (file)
@@ -38,7 +38,7 @@
  */
 
 static void r128_emit_clip_rects(drm_r128_private_t * dev_priv,
-                                drm_clip_rect_t * boxes, int count)
+                                struct drm_clip_rect * boxes, int count)
 {
        u32 aux_sc_cntl = 0x00000000;
        RING_LOCALS;
@@ -352,13 +352,13 @@ static void r128_print_dirty(const char *msg, unsigned int flags)
                 (flags & R128_REQUIRE_QUIESCENCE) ? "quiescence, " : "");
 }
 
-static void r128_cce_dispatch_clear(drm_device_t * dev,
+static void r128_cce_dispatch_clear(struct drm_device * dev,
                                    drm_r128_clear_t * clear)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
        int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        unsigned int flags = clear->flags;
        int i;
        RING_LOCALS;
@@ -458,12 +458,12 @@ static void r128_cce_dispatch_clear(drm_device_t * dev,
        }
 }
 
-static void r128_cce_dispatch_swap(drm_device_t * dev)
+static void r128_cce_dispatch_swap(struct drm_device * dev)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
        int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        int i;
        RING_LOCALS;
        DRM_DEBUG("%s\n", __FUNCTION__);
@@ -524,7 +524,7 @@ static void r128_cce_dispatch_swap(drm_device_t * dev)
        ADVANCE_RING();
 }
 
-static void r128_cce_dispatch_flip(drm_device_t * dev)
+static void r128_cce_dispatch_flip(struct drm_device * dev)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        RING_LOCALS;
@@ -567,7 +567,7 @@ static void r128_cce_dispatch_flip(drm_device_t * dev)
        ADVANCE_RING();
 }
 
-static void r128_cce_dispatch_vertex(drm_device_t * dev, drm_buf_t * buf)
+static void r128_cce_dispatch_vertex(struct drm_device * dev, struct drm_buf * buf)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        drm_r128_buf_priv_t *buf_priv = buf->dev_private;
@@ -637,8 +637,8 @@ static void r128_cce_dispatch_vertex(drm_device_t * dev, drm_buf_t * buf)
        sarea_priv->nbox = 0;
 }
 
-static void r128_cce_dispatch_indirect(drm_device_t * dev,
-                                      drm_buf_t * buf, int start, int end)
+static void r128_cce_dispatch_indirect(struct drm_device * dev,
+                                      struct drm_buf * buf, int start, int end)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        drm_r128_buf_priv_t *buf_priv = buf->dev_private;
@@ -692,8 +692,8 @@ static void r128_cce_dispatch_indirect(drm_device_t * dev,
        dev_priv->sarea_priv->last_dispatch++;
 }
 
-static void r128_cce_dispatch_indices(drm_device_t * dev,
-                                     drm_buf_t * buf,
+static void r128_cce_dispatch_indices(struct drm_device * dev,
+                                     struct drm_buf * buf,
                                      int start, int end, int count)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
@@ -776,12 +776,13 @@ static void r128_cce_dispatch_indices(drm_device_t * dev,
        sarea_priv->nbox = 0;
 }
 
-static int r128_cce_dispatch_blit(DRMFILE filp,
-                                 drm_device_t * dev, drm_r128_blit_t * blit)
+static int r128_cce_dispatch_blit(struct drm_device * dev,
+                                 struct drm_file *file_priv,
+                                 drm_r128_blit_t * blit)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
        drm_r128_buf_priv_t *buf_priv;
        u32 *data;
        int dword_shift, dwords;
@@ -809,7 +810,7 @@ static int r128_cce_dispatch_blit(DRMFILE filp,
                break;
        default:
                DRM_ERROR("invalid blit format %d\n", blit->format);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /* Flush the pixel cache, and mark the contents as Read Invalid.
@@ -829,14 +830,14 @@ static int r128_cce_dispatch_blit(DRMFILE filp,
        buf = dma->buflist[blit->idx];
        buf_priv = buf->dev_private;
 
-       if (buf->filp != filp) {
+       if (buf->file_priv != file_priv) {
                DRM_ERROR("process %d using buffer owned by %p\n",
-                         DRM_CURRENTPID, buf->filp);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, buf->file_priv);
+               return -EINVAL;
        }
        if (buf->pending) {
                DRM_ERROR("sending pending buffer %d\n", blit->idx);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        buf_priv->discard = 1;
@@ -887,7 +888,7 @@ static int r128_cce_dispatch_blit(DRMFILE filp,
  * have hardware stencil support.
  */
 
-static int r128_cce_dispatch_write_span(drm_device_t * dev,
+static int r128_cce_dispatch_write_span(struct drm_device * dev,
                                        drm_r128_depth_t * depth)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
@@ -900,22 +901,22 @@ static int r128_cce_dispatch_write_span(drm_device_t * dev,
 
        count = depth->n;
        if (count > 4096 || count <= 0)
-               return DRM_ERR(EMSGSIZE);
+               return -EMSGSIZE;
 
        if (DRM_COPY_FROM_USER(&x, depth->x, sizeof(x))) {
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
        if (DRM_COPY_FROM_USER(&y, depth->y, sizeof(y))) {
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        buffer_size = depth->n * sizeof(u32);
        buffer = drm_alloc(buffer_size, DRM_MEM_BUFS);
        if (buffer == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        if (DRM_COPY_FROM_USER(buffer, depth->buffer, buffer_size)) {
                drm_free(buffer, buffer_size, DRM_MEM_BUFS);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        mask_size = depth->n * sizeof(u8);
@@ -923,12 +924,12 @@ static int r128_cce_dispatch_write_span(drm_device_t * dev,
                mask = drm_alloc(mask_size, DRM_MEM_BUFS);
                if (mask == NULL) {
                        drm_free(buffer, buffer_size, DRM_MEM_BUFS);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
                if (DRM_COPY_FROM_USER(mask, depth->mask, mask_size)) {
                        drm_free(buffer, buffer_size, DRM_MEM_BUFS);
                        drm_free(mask, mask_size, DRM_MEM_BUFS);
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                }
 
                for (i = 0; i < count; i++, x++) {
@@ -983,7 +984,7 @@ static int r128_cce_dispatch_write_span(drm_device_t * dev,
        return 0;
 }
 
-static int r128_cce_dispatch_write_pixels(drm_device_t * dev,
+static int r128_cce_dispatch_write_pixels(struct drm_device * dev,
                                          drm_r128_depth_t * depth)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
@@ -996,28 +997,28 @@ static int r128_cce_dispatch_write_pixels(drm_device_t * dev,
 
        count = depth->n;
        if (count > 4096 || count <= 0)
-               return DRM_ERR(EMSGSIZE);
+               return -EMSGSIZE;
 
        xbuf_size = count * sizeof(*x);
        ybuf_size = count * sizeof(*y);
        x = drm_alloc(xbuf_size, DRM_MEM_BUFS);
        if (x == NULL) {
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        y = drm_alloc(ybuf_size, DRM_MEM_BUFS);
        if (y == NULL) {
                drm_free(x, xbuf_size, DRM_MEM_BUFS);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        if (DRM_COPY_FROM_USER(x, depth->x, xbuf_size)) {
                drm_free(x, xbuf_size, DRM_MEM_BUFS);
                drm_free(y, ybuf_size, DRM_MEM_BUFS);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
        if (DRM_COPY_FROM_USER(y, depth->y, xbuf_size)) {
                drm_free(x, xbuf_size, DRM_MEM_BUFS);
                drm_free(y, ybuf_size, DRM_MEM_BUFS);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        buffer_size = depth->n * sizeof(u32);
@@ -1025,13 +1026,13 @@ static int r128_cce_dispatch_write_pixels(drm_device_t * dev,
        if (buffer == NULL) {
                drm_free(x, xbuf_size, DRM_MEM_BUFS);
                drm_free(y, ybuf_size, DRM_MEM_BUFS);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        if (DRM_COPY_FROM_USER(buffer, depth->buffer, buffer_size)) {
                drm_free(x, xbuf_size, DRM_MEM_BUFS);
                drm_free(y, ybuf_size, DRM_MEM_BUFS);
                drm_free(buffer, buffer_size, DRM_MEM_BUFS);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        if (depth->mask) {
@@ -1041,14 +1042,14 @@ static int r128_cce_dispatch_write_pixels(drm_device_t * dev,
                        drm_free(x, xbuf_size, DRM_MEM_BUFS);
                        drm_free(y, ybuf_size, DRM_MEM_BUFS);
                        drm_free(buffer, buffer_size, DRM_MEM_BUFS);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
                if (DRM_COPY_FROM_USER(mask, depth->mask, mask_size)) {
                        drm_free(x, xbuf_size, DRM_MEM_BUFS);
                        drm_free(y, ybuf_size, DRM_MEM_BUFS);
                        drm_free(buffer, buffer_size, DRM_MEM_BUFS);
                        drm_free(mask, mask_size, DRM_MEM_BUFS);
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                }
 
                for (i = 0; i < count; i++) {
@@ -1105,7 +1106,7 @@ static int r128_cce_dispatch_write_pixels(drm_device_t * dev,
        return 0;
 }
 
-static int r128_cce_dispatch_read_span(drm_device_t * dev,
+static int r128_cce_dispatch_read_span(struct drm_device * dev,
                                       drm_r128_depth_t * depth)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
@@ -1115,13 +1116,13 @@ static int r128_cce_dispatch_read_span(drm_device_t * dev,
 
        count = depth->n;
        if (count > 4096 || count <= 0)
-               return DRM_ERR(EMSGSIZE);
+               return -EMSGSIZE;
 
        if (DRM_COPY_FROM_USER(&x, depth->x, sizeof(x))) {
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
        if (DRM_COPY_FROM_USER(&y, depth->y, sizeof(y))) {
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        BEGIN_RING(7);
@@ -1148,7 +1149,7 @@ static int r128_cce_dispatch_read_span(drm_device_t * dev,
        return 0;
 }
 
-static int r128_cce_dispatch_read_pixels(drm_device_t * dev,
+static int r128_cce_dispatch_read_pixels(struct drm_device * dev,
                                         drm_r128_depth_t * depth)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
@@ -1159,7 +1160,7 @@ static int r128_cce_dispatch_read_pixels(drm_device_t * dev,
 
        count = depth->n;
        if (count > 4096 || count <= 0)
-               return DRM_ERR(EMSGSIZE);
+               return -EMSGSIZE;
 
        if (count > dev_priv->depth_pitch) {
                count = dev_priv->depth_pitch;
@@ -1169,22 +1170,22 @@ static int r128_cce_dispatch_read_pixels(drm_device_t * dev,
        ybuf_size = count * sizeof(*y);
        x = drm_alloc(xbuf_size, DRM_MEM_BUFS);
        if (x == NULL) {
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        y = drm_alloc(ybuf_size, DRM_MEM_BUFS);
        if (y == NULL) {
                drm_free(x, xbuf_size, DRM_MEM_BUFS);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        if (DRM_COPY_FROM_USER(x, depth->x, xbuf_size)) {
                drm_free(x, xbuf_size, DRM_MEM_BUFS);
                drm_free(y, ybuf_size, DRM_MEM_BUFS);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
        if (DRM_COPY_FROM_USER(y, depth->y, ybuf_size)) {
                drm_free(x, xbuf_size, DRM_MEM_BUFS);
                drm_free(y, ybuf_size, DRM_MEM_BUFS);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        for (i = 0; i < count; i++) {
@@ -1220,7 +1221,7 @@ static int r128_cce_dispatch_read_pixels(drm_device_t * dev,
  * Polygon stipple
  */
 
-static void r128_cce_dispatch_stipple(drm_device_t * dev, u32 * stipple)
+static void r128_cce_dispatch_stipple(struct drm_device * dev, u32 * stipple)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        int i;
@@ -1241,25 +1242,21 @@ static void r128_cce_dispatch_stipple(drm_device_t * dev, u32 * stipple)
  * IOCTL functions
  */
 
-static int r128_cce_clear(DRM_IOCTL_ARGS)
+static int r128_cce_clear(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
        drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_r128_clear_t clear;
+       drm_r128_clear_t *clear = data;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(clear, (drm_r128_clear_t __user *) data,
-                                sizeof(clear));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
        if (sarea_priv->nbox > R128_NR_SAREA_CLIPRECTS)
                sarea_priv->nbox = R128_NR_SAREA_CLIPRECTS;
 
-       r128_cce_dispatch_clear(dev, &clear);
+       r128_cce_dispatch_clear(dev, clear);
        COMMIT_RING();
 
        /* Make sure we restore the 3D state next time.
@@ -1269,7 +1266,7 @@ static int r128_cce_clear(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int r128_do_init_pageflip(drm_device_t * dev)
+static int r128_do_init_pageflip(struct drm_device * dev)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
@@ -1288,7 +1285,7 @@ static int r128_do_init_pageflip(drm_device_t * dev)
        return 0;
 }
 
-static int r128_do_cleanup_pageflip(drm_device_t * dev)
+static int r128_do_cleanup_pageflip(struct drm_device * dev)
 {
        drm_r128_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
@@ -1309,13 +1306,12 @@ static int r128_do_cleanup_pageflip(drm_device_t * dev)
  * They can & should be intermixed to support multiple 3d windows.
  */
 
-static int r128_cce_flip(DRM_IOCTL_ARGS)
+static int r128_cce_flip(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
@@ -1328,14 +1324,13 @@ static int r128_cce_flip(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int r128_cce_swap(DRM_IOCTL_ARGS)
+static int r128_cce_swap(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
        drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
@@ -1350,58 +1345,54 @@ static int r128_cce_swap(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int r128_cce_vertex(DRM_IOCTL_ARGS)
+static int r128_cce_vertex(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
        drm_r128_buf_priv_t *buf_priv;
-       drm_r128_vertex_t vertex;
+       drm_r128_vertex_t *vertex = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(vertex, (drm_r128_vertex_t __user *) data,
-                                sizeof(vertex));
-
        DRM_DEBUG("pid=%d index=%d count=%d discard=%d\n",
-                 DRM_CURRENTPID, vertex.idx, vertex.count, vertex.discard);
+                 DRM_CURRENTPID, vertex->idx, vertex->count, vertex->discard);
 
-       if (vertex.idx < 0 || vertex.idx >= dma->buf_count) {
+       if (vertex->idx < 0 || vertex->idx >= dma->buf_count) {
                DRM_ERROR("buffer index %d (of %d max)\n",
-                         vertex.idx, dma->buf_count - 1);
-               return DRM_ERR(EINVAL);
+                         vertex->idx, dma->buf_count - 1);
+               return -EINVAL;
        }
-       if (vertex.prim < 0 ||
-           vertex.prim > R128_CCE_VC_CNTL_PRIM_TYPE_TRI_TYPE2) {
-               DRM_ERROR("buffer prim %d\n", vertex.prim);
-               return DRM_ERR(EINVAL);
+       if (vertex->prim < 0 ||
+           vertex->prim > R128_CCE_VC_CNTL_PRIM_TYPE_TRI_TYPE2) {
+               DRM_ERROR("buffer prim %d\n", vertex->prim);
+               return -EINVAL;
        }
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       buf = dma->buflist[vertex.idx];
+       buf = dma->buflist[vertex->idx];
        buf_priv = buf->dev_private;
 
-       if (buf->filp != filp) {
+       if (buf->file_priv != file_priv) {
                DRM_ERROR("process %d using buffer owned by %p\n",
-                         DRM_CURRENTPID, buf->filp);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, buf->file_priv);
+               return -EINVAL;
        }
        if (buf->pending) {
-               DRM_ERROR("sending pending buffer %d\n", vertex.idx);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("sending pending buffer %d\n", vertex->idx);
+               return -EINVAL;
        }
 
-       buf->used = vertex.count;
-       buf_priv->prim = vertex.prim;
-       buf_priv->discard = vertex.discard;
+       buf->used = vertex->count;
+       buf_priv->prim = vertex->prim;
+       buf_priv->discard = vertex->discard;
 
        r128_cce_dispatch_vertex(dev, buf);
 
@@ -1409,134 +1400,123 @@ static int r128_cce_vertex(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int r128_cce_indices(DRM_IOCTL_ARGS)
+static int r128_cce_indices(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
        drm_r128_buf_priv_t *buf_priv;
-       drm_r128_indices_t elts;
+       drm_r128_indices_t *elts = data;
        int count;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(elts, (drm_r128_indices_t __user *) data,
-                                sizeof(elts));
-
        DRM_DEBUG("pid=%d buf=%d s=%d e=%d d=%d\n", DRM_CURRENTPID,
-                 elts.idx, elts.start, elts.end, elts.discard);
+                 elts->idx, elts->start, elts->end, elts->discard);
 
-       if (elts.idx < 0 || elts.idx >= dma->buf_count) {
+       if (elts->idx < 0 || elts->idx >= dma->buf_count) {
                DRM_ERROR("buffer index %d (of %d max)\n",
-                         elts.idx, dma->buf_count - 1);
-               return DRM_ERR(EINVAL);
+                         elts->idx, dma->buf_count - 1);
+               return -EINVAL;
        }
-       if (elts.prim < 0 || elts.prim > R128_CCE_VC_CNTL_PRIM_TYPE_TRI_TYPE2) {
-               DRM_ERROR("buffer prim %d\n", elts.prim);
-               return DRM_ERR(EINVAL);
+       if (elts->prim < 0 ||
+           elts->prim > R128_CCE_VC_CNTL_PRIM_TYPE_TRI_TYPE2) {
+               DRM_ERROR("buffer prim %d\n", elts->prim);
+               return -EINVAL;
        }
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       buf = dma->buflist[elts.idx];
+       buf = dma->buflist[elts->idx];
        buf_priv = buf->dev_private;
 
-       if (buf->filp != filp) {
+       if (buf->file_priv != file_priv) {
                DRM_ERROR("process %d using buffer owned by %p\n",
-                         DRM_CURRENTPID, buf->filp);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, buf->file_priv);
+               return -EINVAL;
        }
        if (buf->pending) {
-               DRM_ERROR("sending pending buffer %d\n", elts.idx);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("sending pending buffer %d\n", elts->idx);
+               return -EINVAL;
        }
 
-       count = (elts.end - elts.start) / sizeof(u16);
-       elts.start -= R128_INDEX_PRIM_OFFSET;
+       count = (elts->end - elts->start) / sizeof(u16);
+       elts->start -= R128_INDEX_PRIM_OFFSET;
 
-       if (elts.start & 0x7) {
-               DRM_ERROR("misaligned buffer 0x%x\n", elts.start);
-               return DRM_ERR(EINVAL);
+       if (elts->start & 0x7) {
+               DRM_ERROR("misaligned buffer 0x%x\n", elts->start);
+               return -EINVAL;
        }
-       if (elts.start < buf->used) {
-               DRM_ERROR("no header 0x%x - 0x%x\n", elts.start, buf->used);
-               return DRM_ERR(EINVAL);
+       if (elts->start < buf->used) {
+               DRM_ERROR("no header 0x%x - 0x%x\n", elts->start, buf->used);
+               return -EINVAL;
        }
 
-       buf->used = elts.end;
-       buf_priv->prim = elts.prim;
-       buf_priv->discard = elts.discard;
+       buf->used = elts->end;
+       buf_priv->prim = elts->prim;
+       buf_priv->discard = elts->discard;
 
-       r128_cce_dispatch_indices(dev, buf, elts.start, elts.end, count);
+       r128_cce_dispatch_indices(dev, buf, elts->start, elts->end, count);
 
        COMMIT_RING();
        return 0;
 }
 
-static int r128_cce_blit(DRM_IOCTL_ARGS)
+static int r128_cce_blit(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_r128_blit_t blit;
+       drm_r128_blit_t *blit = data;
        int ret;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(blit, (drm_r128_blit_t __user *) data,
-                                sizeof(blit));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_DEBUG("pid=%d index=%d\n", DRM_CURRENTPID, blit.idx);
+       DRM_DEBUG("pid=%d index=%d\n", DRM_CURRENTPID, blit->idx);
 
-       if (blit.idx < 0 || blit.idx >= dma->buf_count) {
+       if (blit->idx < 0 || blit->idx >= dma->buf_count) {
                DRM_ERROR("buffer index %d (of %d max)\n",
-                         blit.idx, dma->buf_count - 1);
-               return DRM_ERR(EINVAL);
+                         blit->idx, dma->buf_count - 1);
+               return -EINVAL;
        }
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       ret = r128_cce_dispatch_blit(filp, dev, &blit);
+       ret = r128_cce_dispatch_blit(dev, file_priv, blit);
 
        COMMIT_RING();
        return ret;
 }
 
-static int r128_cce_depth(DRM_IOCTL_ARGS)
+static int r128_cce_depth(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_r128_depth_t depth;
+       drm_r128_depth_t *depth = data;
        int ret;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(depth, (drm_r128_depth_t __user *) data,
-                                sizeof(depth));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
-       ret = DRM_ERR(EINVAL);
-       switch (depth.func) {
+       ret = -EINVAL;
+       switch (depth->func) {
        case R128_WRITE_SPAN:
-               ret = r128_cce_dispatch_write_span(dev, &depth);
+               ret = r128_cce_dispatch_write_span(dev, depth);
                break;
        case R128_WRITE_PIXELS:
-               ret = r128_cce_dispatch_write_pixels(dev, &depth);
+               ret = r128_cce_dispatch_write_pixels(dev, depth);
                break;
        case R128_READ_SPAN:
-               ret = r128_cce_dispatch_read_span(dev, &depth);
+               ret = r128_cce_dispatch_read_span(dev, depth);
                break;
        case R128_READ_PIXELS:
-               ret = r128_cce_dispatch_read_pixels(dev, &depth);
+               ret = r128_cce_dispatch_read_pixels(dev, depth);
                break;
        }
 
@@ -1544,20 +1524,16 @@ static int r128_cce_depth(DRM_IOCTL_ARGS)
        return ret;
 }
 
-static int r128_cce_stipple(DRM_IOCTL_ARGS)
+static int r128_cce_stipple(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_r128_stipple_t stipple;
+       drm_r128_stipple_t *stipple = data;
        u32 mask[32];
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(stipple, (drm_r128_stipple_t __user *) data,
-                                sizeof(stipple));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       if (DRM_COPY_FROM_USER(&mask, stipple.mask, 32 * sizeof(u32)))
-               return DRM_ERR(EFAULT);
+       if (DRM_COPY_FROM_USER(&mask, stipple->mask, 32 * sizeof(u32)))
+               return -EFAULT;
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
@@ -1567,61 +1543,58 @@ static int r128_cce_stipple(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int r128_cce_indirect(DRM_IOCTL_ARGS)
+static int r128_cce_indirect(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
        drm_r128_buf_priv_t *buf_priv;
-       drm_r128_indirect_t indirect;
+       drm_r128_indirect_t *indirect = data;
 #if 0
        RING_LOCALS;
 #endif
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(indirect, (drm_r128_indirect_t __user *) data,
-                                sizeof(indirect));
-
        DRM_DEBUG("indirect: idx=%d s=%d e=%d d=%d\n",
-                 indirect.idx, indirect.start, indirect.end, indirect.discard);
+                 indirect->idx, indirect->start, indirect->end,
+                 indirect->discard);
 
-       if (indirect.idx < 0 || indirect.idx >= dma->buf_count) {
+       if (indirect->idx < 0 || indirect->idx >= dma->buf_count) {
                DRM_ERROR("buffer index %d (of %d max)\n",
-                         indirect.idx, dma->buf_count - 1);
-               return DRM_ERR(EINVAL);
+                         indirect->idx, dma->buf_count - 1);
+               return -EINVAL;
        }
 
-       buf = dma->buflist[indirect.idx];
+       buf = dma->buflist[indirect->idx];
        buf_priv = buf->dev_private;
 
-       if (buf->filp != filp) {
+       if (buf->file_priv != file_priv) {
                DRM_ERROR("process %d using buffer owned by %p\n",
-                         DRM_CURRENTPID, buf->filp);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, buf->file_priv);
+               return -EINVAL;
        }
        if (buf->pending) {
-               DRM_ERROR("sending pending buffer %d\n", indirect.idx);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("sending pending buffer %d\n", indirect->idx);
+               return -EINVAL;
        }
 
-       if (indirect.start < buf->used) {
+       if (indirect->start < buf->used) {
                DRM_ERROR("reusing indirect: start=0x%x actual=0x%x\n",
-                         indirect.start, buf->used);
-               return DRM_ERR(EINVAL);
+                         indirect->start, buf->used);
+               return -EINVAL;
        }
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       buf->used = indirect.end;
-       buf_priv->discard = indirect.discard;
+       buf->used = indirect->end;
+       buf_priv->discard = indirect->discard;
 
 #if 0
        /* Wait for the 3D stream to idle before the indirect buffer
@@ -1636,46 +1609,42 @@ static int r128_cce_indirect(DRM_IOCTL_ARGS)
         * X server.  This is insecure and is thus only available to
         * privileged clients.
         */
-       r128_cce_dispatch_indirect(dev, buf, indirect.start, indirect.end);
+       r128_cce_dispatch_indirect(dev, buf, indirect->start, indirect->end);
 
        COMMIT_RING();
        return 0;
 }
 
-static int r128_getparam(DRM_IOCTL_ARGS)
+static int r128_getparam(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_r128_private_t *dev_priv = dev->dev_private;
-       drm_r128_getparam_t param;
+       drm_r128_getparam_t *param = data;
        int value;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(param, (drm_r128_getparam_t __user *) data,
-                                sizeof(param));
-
        DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
 
-       switch (param.param) {
+       switch (param->param) {
        case R128_PARAM_IRQ_NR:
                value = dev->irq;
                break;
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       if (DRM_COPY_TO_USER(param.value, &value, sizeof(int))) {
+       if (DRM_COPY_TO_USER(param->value, &value, sizeof(int))) {
                DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
 }
 
-void r128_driver_preclose(drm_device_t * dev, DRMFILE filp)
+void r128_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
 {
        if (dev->dev_private) {
                drm_r128_private_t *dev_priv = dev->dev_private;
@@ -1685,29 +1654,29 @@ void r128_driver_preclose(drm_device_t * dev, DRMFILE filp)
        }
 }
 
-void r128_driver_lastclose(drm_device_t * dev)
+void r128_driver_lastclose(struct drm_device * dev)
 {
        r128_do_cleanup_cce(dev);
 }
 
-drm_ioctl_desc_t r128_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_R128_INIT)] = {r128_cce_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_R128_CCE_START)] = {r128_cce_start, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_R128_CCE_STOP)] = {r128_cce_stop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_R128_CCE_RESET)] = {r128_cce_reset, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_R128_CCE_IDLE)] = {r128_cce_idle, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_RESET)] = {r128_engine_reset, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_FULLSCREEN)] = {r128_fullscreen, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_SWAP)] = {r128_cce_swap, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_FLIP)] = {r128_cce_flip, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_CLEAR)] = {r128_cce_clear, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_VERTEX)] = {r128_cce_vertex, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_INDICES)] = {r128_cce_indices, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_BLIT)] = {r128_cce_blit, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_DEPTH)] = {r128_cce_depth, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_STIPPLE)] = {r128_cce_stipple, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_R128_INDIRECT)] = {r128_cce_indirect, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_R128_GETPARAM)] = {r128_getparam, DRM_AUTH},
+struct drm_ioctl_desc r128_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_R128_INIT, r128_cce_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_R128_CCE_START, r128_cce_start, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_R128_CCE_STOP, r128_cce_stop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_R128_CCE_RESET, r128_cce_reset, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_R128_CCE_IDLE, r128_cce_idle, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_RESET, r128_engine_reset, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_FULLSCREEN, r128_fullscreen, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_SWAP, r128_cce_swap, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_FLIP, r128_cce_flip, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_CLEAR, r128_cce_clear, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_VERTEX, r128_cce_vertex, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_INDICES, r128_cce_indices, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_BLIT, r128_cce_blit, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_DEPTH, r128_cce_depth, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_STIPPLE, r128_cce_stipple, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_R128_INDIRECT, r128_cce_indirect, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_R128_GETPARAM, r128_getparam, DRM_AUTH),
 };
 
 int r128_max_ioctl = DRM_ARRAY_SIZE(r128_ioctls);
index 0cd5d7e..fe46c2d 100644 (file)
@@ -55,7 +55,7 @@ static const int r300_cliprect_cntl[4] = {
 static int r300_emit_cliprects(drm_radeon_private_t *dev_priv,
                               drm_radeon_kcmd_buffer_t *cmdbuf, int n)
 {
-       drm_clip_rect_t box;
+       struct drm_clip_rect box;
        int nr;
        int i;
        RING_LOCALS;
@@ -74,7 +74,7 @@ static int r300_emit_cliprects(drm_radeon_private_t *dev_priv,
                        if (DRM_COPY_FROM_USER_UNCHECKED
                            (&box, &cmdbuf->boxes[n + i], sizeof(box))) {
                                DRM_ERROR("copy cliprect faulted\n");
-                               return DRM_ERR(EFAULT);
+                               return -EFAULT;
                        }
 
                        box.x1 =
@@ -263,7 +263,7 @@ static __inline__ int r300_emit_carefully_checked_packet0(drm_radeon_private_t *
                DRM_ERROR
                    ("Cannot emit more than 64 values at a time (reg=%04x sz=%d)\n",
                     reg, sz);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        for (i = 0; i < sz; i++) {
                values[i] = ((int *)cmdbuf->buf)[i];
@@ -275,13 +275,13 @@ static __inline__ int r300_emit_carefully_checked_packet0(drm_radeon_private_t *
                                DRM_ERROR
                                    ("Offset failed range check (reg=%04x sz=%d)\n",
                                     reg, sz);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        break;
                default:
                        DRM_ERROR("Register %04x failed check as flag=%02x\n",
                                  reg + i * 4, r300_reg_flags[(reg >> 2) + i]);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
 
@@ -317,12 +317,12 @@ static __inline__ int r300_emit_packet0(drm_radeon_private_t *dev_priv,
                return 0;
 
        if (sz * 4 > cmdbuf->bufsz)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        if (reg + sz * 4 >= 0x10000) {
                DRM_ERROR("No such registers in hardware reg=%04x sz=%d\n", reg,
                          sz);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (r300_check_range(reg, sz)) {
@@ -362,7 +362,7 @@ static __inline__ int r300_emit_vpu(drm_radeon_private_t *dev_priv,
        if (!sz)
                return 0;
        if (sz * 16 > cmdbuf->bufsz)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        BEGIN_RING(5 + sz * 4);
        /* Wait for VAP to come to senses.. */
@@ -391,7 +391,7 @@ static __inline__ int r300_emit_clear(drm_radeon_private_t *dev_priv,
        RING_LOCALS;
 
        if (8 * 4 > cmdbuf->bufsz)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        BEGIN_RING(10);
        OUT_RING(CP_PACKET3(R200_3D_DRAW_IMMD_2, 8));
@@ -421,7 +421,7 @@ static __inline__ int r300_emit_3d_load_vbpntr(drm_radeon_private_t *dev_priv,
        if ((count + 1) > MAX_ARRAY_PACKET) {
                DRM_ERROR("Too large payload in 3D_LOAD_VBPNTR (count=%d)\n",
                          count);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        memset(payload, 0, MAX_ARRAY_PACKET * 4);
        memcpy(payload, cmdbuf->buf + 4, (count + 1) * 4);
@@ -437,7 +437,7 @@ static __inline__ int r300_emit_3d_load_vbpntr(drm_radeon_private_t *dev_priv,
                        DRM_ERROR
                            ("Offset failed range check (k=%d i=%d) while processing 3D_LOAD_VBPNTR packet.\n",
                             k, i);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                k++;
                i++;
@@ -448,7 +448,7 @@ static __inline__ int r300_emit_3d_load_vbpntr(drm_radeon_private_t *dev_priv,
                        DRM_ERROR
                            ("Offset failed range check (k=%d i=%d) while processing 3D_LOAD_VBPNTR packet.\n",
                             k, i);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                k++;
                i++;
@@ -458,7 +458,7 @@ static __inline__ int r300_emit_3d_load_vbpntr(drm_radeon_private_t *dev_priv,
                DRM_ERROR
                    ("Malformed 3D_LOAD_VBPNTR packet (k=%d i=%d narrays=%d count+1=%d).\n",
                     k, i, narrays, count + 1);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /* all clear, output packet */
@@ -492,7 +492,7 @@ static __inline__ int r300_emit_bitblt_multi(drm_radeon_private_t *dev_priv,
                        ret = !radeon_check_offset(dev_priv, offset);
                        if (ret) {
                                DRM_ERROR("Invalid bitblt first offset is %08X\n", offset);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                }
 
@@ -502,7 +502,7 @@ static __inline__ int r300_emit_bitblt_multi(drm_radeon_private_t *dev_priv,
                        ret = !radeon_check_offset(dev_priv, offset);
                        if (ret) {
                                DRM_ERROR("Invalid bitblt second offset is %08X\n", offset);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        
                }
@@ -530,12 +530,12 @@ static __inline__ int r300_emit_indx_buffer(drm_radeon_private_t *dev_priv,
 
        if ((cmd[1] & 0x8000ffff) != 0x80000810) {
                DRM_ERROR("Invalid indx_buffer reg address %08X\n", cmd[1]);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        ret = !radeon_check_offset(dev_priv, cmd[2]);
        if (ret) {
                DRM_ERROR("Invalid indx_buffer offset is %08X\n", cmd[2]);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        BEGIN_RING(count+2);
@@ -557,7 +557,7 @@ static __inline__ int r300_emit_raw_packet3(drm_radeon_private_t *dev_priv,
        RING_LOCALS;
 
        if (4 > cmdbuf->bufsz)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        /* Fixme !! This simply emits a packet without much checking.
           We need to be smarter. */
@@ -568,7 +568,7 @@ static __inline__ int r300_emit_raw_packet3(drm_radeon_private_t *dev_priv,
        /* Is it packet 3 ? */
        if ((header >> 30) != 0x3) {
                DRM_ERROR("Not a packet3 header (0x%08x)\n", header);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        count = (header >> 16) & 0x3fff;
@@ -578,7 +578,7 @@ static __inline__ int r300_emit_raw_packet3(drm_radeon_private_t *dev_priv,
                DRM_ERROR
                    ("Expected packet3 of length %d but have only %d bytes left\n",
                     (count + 2) * 4, cmdbuf->bufsz);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /* Is it a packet type we know about ? */
@@ -600,7 +600,7 @@ static __inline__ int r300_emit_raw_packet3(drm_radeon_private_t *dev_priv,
                break;
        default:
                DRM_ERROR("Unknown packet3 header (0x%08x)\n", header);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        BEGIN_RING(count + 2);
@@ -664,7 +664,7 @@ static __inline__ int r300_emit_packet3(drm_radeon_private_t *dev_priv,
                        DRM_ERROR("bad packet3 type %i at %p\n",
                                  header.packet3.packet,
                                  cmdbuf->buf - sizeof(header));
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                n += R300_SIMULTANEOUS_CLIPRECTS;
@@ -706,7 +706,7 @@ static __inline__ void r300_pacify(drm_radeon_private_t *dev_priv)
  * The actual age emit is done by r300_do_cp_cmdbuf, which is why you must
  * be careful about how this function is called.
  */
-static void r300_discard_buffer(drm_device_t * dev, drm_buf_t * buf)
+static void r300_discard_buffer(struct drm_device * dev, struct drm_buf * buf)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        drm_radeon_buf_priv_t *buf_priv = buf->dev_private;
@@ -725,11 +725,11 @@ static int r300_scratch(drm_radeon_private_t *dev_priv,
        RING_LOCALS;
        
        if (cmdbuf->bufsz < sizeof(uint64_t) + header.scratch.n_bufs * sizeof(buf_idx) ) {
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        
        if (header.scratch.reg >= 5) {
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        
        dev_priv->scratch_ages[header.scratch.reg] ++;
@@ -744,21 +744,21 @@ static int r300_scratch(drm_radeon_private_t *dev_priv,
                buf_idx *= 2; /* 8 bytes per buf */
                
                if (DRM_COPY_TO_USER(ref_age_base + buf_idx, &dev_priv->scratch_ages[header.scratch.reg], sizeof(u32))) {
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                                        
                if (DRM_COPY_FROM_USER(&h_pending, ref_age_base + buf_idx + 1, sizeof(u32))) {
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                                        
                if (h_pending == 0) {
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                                        
                h_pending--;
                                                
                if (DRM_COPY_TO_USER(ref_age_base + buf_idx + 1, &h_pending, sizeof(u32))) {
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                                        
                cmdbuf->buf += sizeof(buf_idx);
@@ -778,14 +778,13 @@ static int r300_scratch(drm_radeon_private_t *dev_priv,
  * commands on the DMA ring buffer.
  * Called by the ioctl handler function radeon_cp_cmdbuf.
  */
-int r300_do_cp_cmdbuf(drm_device_t *dev,
-                     DRMFILE filp,
-                     drm_file_t *filp_priv,
+int r300_do_cp_cmdbuf(struct drm_device *dev,
+                     struct drm_file *file_priv,
                      drm_radeon_kcmd_buffer_t *cmdbuf)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf = NULL;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf = NULL;
        int emit_dispatch_age = 0;
        int ret = 0;
 
@@ -878,15 +877,16 @@ int r300_do_cp_cmdbuf(drm_device_t *dev,
                        if (idx < 0 || idx >= dma->buf_count) {
                                DRM_ERROR("buffer index %d (of %d max)\n",
                                          idx, dma->buf_count - 1);
-                               ret = DRM_ERR(EINVAL);
+                               ret = -EINVAL;
                                goto cleanup;
                        }
 
                        buf = dma->buflist[idx];
-                       if (buf->filp != filp || buf->pending) {
+                       if (buf->file_priv != file_priv || buf->pending) {
                                DRM_ERROR("bad buffer %p %p %d\n",
-                                         buf->filp, filp, buf->pending);
-                               ret = DRM_ERR(EINVAL);
+                                         buf->file_priv, file_priv,
+                                         buf->pending);
+                               ret = -EINVAL;
                                goto cleanup;
                        }
 
@@ -923,7 +923,7 @@ int r300_do_cp_cmdbuf(drm_device_t *dev,
                        DRM_ERROR("bad cmd_type %i at %p\n",
                                  header.header.cmd_type,
                                  cmdbuf->buf - sizeof(header));
-                       ret = DRM_ERR(EINVAL);
+                       ret = -EINVAL;
                        goto cleanup;
                }
        }
index ec2e688..0686138 100644 (file)
@@ -36,7 +36,7 @@
 
 #define RADEON_FIFO_DEBUG      0
 
-static int radeon_do_cleanup_cp(drm_device_t * dev);
+static int radeon_do_cleanup_cp(struct drm_device * dev);
 
 /* CP microcode (from ATI) */
 static const u32 R200_cp_microcode[][2] = {
@@ -816,7 +816,7 @@ static const u32 R300_cp_microcode[][2] = {
        { 0000000000, 0000000000 },
 };
 
-static int RADEON_READ_PLL(drm_device_t * dev, int addr)
+static int RADEON_READ_PLL(struct drm_device * dev, int addr)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
 
@@ -889,7 +889,7 @@ static int radeon_do_pixcache_flush(drm_radeon_private_t * dev_priv)
        DRM_ERROR("failed!\n");
        radeon_status(dev_priv);
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 static int radeon_do_wait_for_fifo(drm_radeon_private_t * dev_priv, int entries)
@@ -910,7 +910,7 @@ static int radeon_do_wait_for_fifo(drm_radeon_private_t * dev_priv, int entries)
        DRM_ERROR("failed!\n");
        radeon_status(dev_priv);
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv)
@@ -936,7 +936,7 @@ static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv)
        DRM_ERROR("failed!\n");
        radeon_status(dev_priv);
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 /* ================================================================
@@ -1066,7 +1066,7 @@ static void radeon_do_cp_stop(drm_radeon_private_t * dev_priv)
 
 /* Reset the engine.  This will stop the CP if it is running.
  */
-static int radeon_do_engine_reset(drm_device_t * dev)
+static int radeon_do_engine_reset(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        u32 clock_cntl_index, mclk_cntl, rbbm_soft_reset;
@@ -1122,7 +1122,7 @@ static int radeon_do_engine_reset(drm_device_t * dev)
        return 0;
 }
 
-static void radeon_cp_init_ring_buffer(drm_device_t * dev,
+static void radeon_cp_init_ring_buffer(struct drm_device * dev,
                                       drm_radeon_private_t * dev_priv)
 {
        u32 ring_start, cur_read_ptr;
@@ -1174,7 +1174,7 @@ static void radeon_cp_init_ring_buffer(drm_device_t * dev,
        } else
 #endif
        {
-               drm_sg_mem_t *entry = dev->sg;
+               struct drm_sg_mem *entry = dev->sg;
                unsigned long tmp_ofs, page_ofs;
 
                tmp_ofs = dev_priv->ring_rptr->offset -
@@ -1390,7 +1390,7 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on)
        }
 }
 
-static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
+static int radeon_do_init_cp(struct drm_device * dev, drm_radeon_init_t * init)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
 
@@ -1400,7 +1400,7 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
        if ((dev_priv->flags & RADEON_NEW_MEMMAP) && !dev_priv->new_memmap) {
                DRM_ERROR("Cannot initialise DRM on this card\nThis card requires a new X.org DDX for 3D\n");
                radeon_do_cleanup_cp(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (init->is_pci && (dev_priv->flags & RADEON_IS_AGP))
@@ -1418,7 +1418,7 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
        if ((!(dev_priv->flags & RADEON_IS_AGP)) && !dev->sg) {
                DRM_ERROR("PCI GART memory not allocated!\n");
                radeon_do_cleanup_cp(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->usec_timeout = init->usec_timeout;
@@ -1426,7 +1426,7 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
            dev_priv->usec_timeout > RADEON_MAX_USEC_TIMEOUT) {
                DRM_DEBUG("TIMEOUT problem!\n");
                radeon_do_cleanup_cp(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /* Enable vblank on CRTC1 for older X servers
@@ -1455,7 +1455,7 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
            (init->cp_mode != RADEON_CSQ_PRIBM_INDBM)) {
                DRM_DEBUG("BAD cp_mode (%x)!\n", init->cp_mode);
                radeon_do_cleanup_cp(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        switch (init->fb_bpp) {
@@ -1524,27 +1524,27 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
        if (!dev_priv->sarea) {
                DRM_ERROR("could not find sarea!\n");
                radeon_do_cleanup_cp(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->cp_ring = drm_core_findmap(dev, init->ring_offset);
        if (!dev_priv->cp_ring) {
                DRM_ERROR("could not find cp ring region!\n");
                radeon_do_cleanup_cp(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        dev_priv->ring_rptr = drm_core_findmap(dev, init->ring_rptr_offset);
        if (!dev_priv->ring_rptr) {
                DRM_ERROR("could not find ring read pointer!\n");
                radeon_do_cleanup_cp(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        dev->agp_buffer_token = init->buffers_offset;
        dev->agp_buffer_map = drm_core_findmap(dev, init->buffers_offset);
        if (!dev->agp_buffer_map) {
                DRM_ERROR("could not find dma buffer region!\n");
                radeon_do_cleanup_cp(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (init->gart_textures_offset) {
@@ -1553,7 +1553,7 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
                if (!dev_priv->gart_textures) {
                        DRM_ERROR("could not find GART texture region!\n");
                        radeon_do_cleanup_cp(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
 
@@ -1571,7 +1571,7 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
                    !dev->agp_buffer_map->handle) {
                        DRM_ERROR("could not find ioremap agp regions!\n");
                        radeon_do_cleanup_cp(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        } else
 #endif
@@ -1725,14 +1725,14 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
                                DRM_ERROR
                                    ("Cannot use PCI Express without GART in FB memory\n");
                                radeon_do_cleanup_cp(dev);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                }
 
                if (!drm_ati_pcigart_init(dev, &dev_priv->gart_info)) {
                        DRM_ERROR("failed to init PCI GART!\n");
                        radeon_do_cleanup_cp(dev);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
 
                /* Turn on PCI GART */
@@ -1750,7 +1750,7 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
        return 0;
 }
 
-static int radeon_do_cleanup_cp(drm_device_t * dev)
+static int radeon_do_cleanup_cp(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
@@ -1806,13 +1806,13 @@ static int radeon_do_cleanup_cp(drm_device_t * dev)
  *
  * Charl P. Botha <http://cpbotha.net>
  */
-static int radeon_do_resume_cp(drm_device_t * dev)
+static int radeon_do_resume_cp(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
 
        if (!dev_priv) {
                DRM_ERROR("Called with no initialization\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        DRM_DEBUG("Starting radeon_do_resume_cp()\n");
@@ -1838,38 +1838,33 @@ static int radeon_do_resume_cp(drm_device_t * dev)
        return 0;
 }
 
-int radeon_cp_init(DRM_IOCTL_ARGS)
+int radeon_cp_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_radeon_init_t init;
+       drm_radeon_init_t *init = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_radeon_init_t __user *) data,
-                                sizeof(init));
-
-       if (init.func == RADEON_INIT_R300_CP)
+       if (init->func == RADEON_INIT_R300_CP)
                r300_init_reg_flags();
 
-       switch (init.func) {
+       switch (init->func) {
        case RADEON_INIT_CP:
        case RADEON_INIT_R200_CP:
        case RADEON_INIT_R300_CP:
-               return radeon_do_init_cp(dev, &init);
+               return radeon_do_init_cp(dev, init);
        case RADEON_CLEANUP_CP:
                return radeon_do_cleanup_cp(dev);
        }
 
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
-int radeon_cp_start(DRM_IOCTL_ARGS)
+int radeon_cp_start(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (dev_priv->cp_running) {
                DRM_DEBUG("%s while CP running\n", __FUNCTION__);
@@ -1889,18 +1884,14 @@ int radeon_cp_start(DRM_IOCTL_ARGS)
 /* Stop the CP.  The engine must have been idled before calling this
  * routine.
  */
-int radeon_cp_stop(DRM_IOCTL_ARGS)
+int radeon_cp_stop(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_cp_stop_t stop;
+       drm_radeon_cp_stop_t *stop = data;
        int ret;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(stop, (drm_radeon_cp_stop_t __user *) data,
-                                sizeof(stop));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv->cp_running)
                return 0;
@@ -1908,14 +1899,14 @@ int radeon_cp_stop(DRM_IOCTL_ARGS)
        /* Flush any pending CP commands.  This ensures any outstanding
         * commands are exectuted by the engine before we turn it off.
         */
-       if (stop.flush) {
+       if (stop->flush) {
                radeon_do_cp_flush(dev_priv);
        }
 
        /* If we fail to make the engine go idle, we return an error
         * code so that the DRM ioctl wrapper can try again.
         */
-       if (stop.idle) {
+       if (stop->idle) {
                ret = radeon_do_cp_idle(dev_priv);
                if (ret)
                        return ret;
@@ -1933,7 +1924,7 @@ int radeon_cp_stop(DRM_IOCTL_ARGS)
        return 0;
 }
 
-void radeon_do_release(drm_device_t * dev)
+void radeon_do_release(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        int i, ret;
@@ -1983,17 +1974,16 @@ void radeon_do_release(drm_device_t * dev)
 
 /* Just reset the CP ring.  Called as part of an X Server engine reset.
  */
-int radeon_cp_reset(DRM_IOCTL_ARGS)
+int radeon_cp_reset(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_DEBUG("%s called before init done\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        radeon_do_cp_reset(dev_priv);
@@ -2004,32 +1994,29 @@ int radeon_cp_reset(DRM_IOCTL_ARGS)
        return 0;
 }
 
-int radeon_cp_idle(DRM_IOCTL_ARGS)
+int radeon_cp_idle(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return radeon_do_cp_idle(dev_priv);
 }
 
 /* Added by Charl P. Botha to call radeon_do_resume_cp().
  */
-int radeon_cp_resume(DRM_IOCTL_ARGS)
+int radeon_cp_resume(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
 
        return radeon_do_resume_cp(dev);
 }
 
-int radeon_engine_reset(DRM_IOCTL_ARGS)
+int radeon_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return radeon_do_engine_reset(dev);
 }
@@ -2040,7 +2027,7 @@ int radeon_engine_reset(DRM_IOCTL_ARGS)
 
 /* KW: Deprecated to say the least:
  */
-int radeon_fullscreen(DRM_IOCTL_ARGS)
+int radeon_fullscreen(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
        return 0;
 }
@@ -2066,12 +2053,12 @@ int radeon_fullscreen(DRM_IOCTL_ARGS)
  * they can't get the lock.
  */
 
-drm_buf_t *radeon_freelist_get(drm_device_t * dev)
+struct drm_buf *radeon_freelist_get(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        drm_radeon_buf_priv_t *buf_priv;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        int i, t;
        int start;
 
@@ -2086,8 +2073,9 @@ drm_buf_t *radeon_freelist_get(drm_device_t * dev)
                for (i = start; i < dma->buf_count; i++) {
                        buf = dma->buflist[i];
                        buf_priv = buf->dev_private;
-                       if (buf->filp == 0 || (buf->pending &&
-                                              buf_priv->age <= done_age)) {
+                       if (buf->file_priv == NULL || (buf->pending &&
+                                                      buf_priv->age <=
+                                                      done_age)) {
                                dev_priv->stats.requested_bufs++;
                                buf->pending = 0;
                                return buf;
@@ -2106,12 +2094,12 @@ drm_buf_t *radeon_freelist_get(drm_device_t * dev)
 }
 
 #if 0
-drm_buf_t *radeon_freelist_get(drm_device_t * dev)
+struct drm_buf *radeon_freelist_get(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        drm_radeon_buf_priv_t *buf_priv;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        int i, t;
        int start;
        u32 done_age = DRM_READ32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1));
@@ -2126,8 +2114,9 @@ drm_buf_t *radeon_freelist_get(drm_device_t * dev)
                for (i = start; i < dma->buf_count; i++) {
                        buf = dma->buflist[i];
                        buf_priv = buf->dev_private;
-                       if (buf->filp == 0 || (buf->pending &&
-                                              buf_priv->age <= done_age)) {
+                       if (buf->file_priv == 0 || (buf->pending &&
+                                                   buf_priv->age <=
+                                                   done_age)) {
                                dev_priv->stats.requested_bufs++;
                                buf->pending = 0;
                                return buf;
@@ -2140,15 +2129,15 @@ drm_buf_t *radeon_freelist_get(drm_device_t * dev)
 }
 #endif
 
-void radeon_freelist_reset(drm_device_t * dev)
+void radeon_freelist_reset(struct drm_device * dev)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        int i;
 
        dev_priv->last_buf = 0;
        for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[i];
+               struct drm_buf *buf = dma->buflist[i];
                drm_radeon_buf_priv_t *buf_priv = buf->dev_private;
                buf_priv->age = 0;
        }
@@ -2187,70 +2176,65 @@ int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n)
        radeon_status(dev_priv);
        DRM_ERROR("failed!\n");
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
-static int radeon_cp_get_buffers(DRMFILE filp, drm_device_t * dev,
-                                drm_dma_t * d)
+static int radeon_cp_get_buffers(struct drm_device *dev,
+                                struct drm_file *file_priv,
+                                struct drm_dma * d)
 {
        int i;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
 
        for (i = d->granted_count; i < d->request_count; i++) {
                buf = radeon_freelist_get(dev);
                if (!buf)
-                       return DRM_ERR(EBUSY);  /* NOTE: broken client */
+                       return -EBUSY;  /* NOTE: broken client */
 
-               buf->filp = filp;
+               buf->file_priv = file_priv;
 
                if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx,
                                     sizeof(buf->idx)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                if (DRM_COPY_TO_USER(&d->request_sizes[i], &buf->total,
                                     sizeof(buf->total)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
 
                d->granted_count++;
        }
        return 0;
 }
 
-int radeon_cp_buffers(DRM_IOCTL_ARGS)
+int radeon_cp_buffers(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        int ret = 0;
-       drm_dma_t __user *argp = (void __user *)data;
-       drm_dma_t d;
+       struct drm_dma *d = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        /* Please don't send us buffers.
         */
-       if (d.send_count != 0) {
+       if (d->send_count != 0) {
                DRM_ERROR("Process %d trying to send %d buffers via drmDMA\n",
-                         DRM_CURRENTPID, d.send_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->send_count);
+               return -EINVAL;
        }
 
        /* We'll send you buffers.
         */
-       if (d.request_count < 0 || d.request_count > dma->buf_count) {
+       if (d->request_count < 0 || d->request_count > dma->buf_count) {
                DRM_ERROR("Process %d trying to get %d buffers (of %d max)\n",
-                         DRM_CURRENTPID, d.request_count, dma->buf_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->request_count, dma->buf_count);
+               return -EINVAL;
        }
 
-       d.granted_count = 0;
+       d->granted_count = 0;
 
-       if (d.request_count) {
-               ret = radeon_cp_get_buffers(filp, dev, &d);
+       if (d->request_count) {
+               ret = radeon_cp_get_buffers(dev, file_priv, d);
        }
 
-       DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
-
        return ret;
 }
 
@@ -2261,7 +2245,7 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
 
        dev_priv = drm_alloc(sizeof(drm_radeon_private_t), DRM_MEM_DRIVER);
        if (dev_priv == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        memset(dev_priv, 0, sizeof(drm_radeon_private_t));
        dev->dev_private = (void *)dev_priv;
index 6a57b80..b0ef702 100644 (file)
@@ -417,7 +417,7 @@ typedef struct {
 
        /* The current cliprects, or a subset thereof.
         */
-       drm_clip_rect_t boxes[RADEON_NR_SAREA_CLIPRECTS];
+       struct drm_clip_rect boxes[RADEON_NR_SAREA_CLIPRECTS];
        unsigned int nbox;
 
        /* Counters for client-side throttling of rendering clients.
@@ -426,7 +426,7 @@ typedef struct {
        unsigned int last_dispatch;
        unsigned int last_clear;
 
-       drm_tex_region_t tex_list[RADEON_NR_TEX_HEAPS][RADEON_NR_TEX_REGIONS +
+       struct drm_tex_region tex_list[RADEON_NR_TEX_HEAPS][RADEON_NR_TEX_REGIONS +
                                                       1];
        unsigned int tex_age[RADEON_NR_TEX_HEAPS];
        int ctx_owner;
@@ -604,7 +604,7 @@ typedef struct drm_radeon_cmd_buffer {
        int bufsz;
        char __user *buf;
        int nbox;
-       drm_clip_rect_t __user *boxes;
+       struct drm_clip_rect __user *boxes;
 } drm_radeon_cmd_buffer_t;
 
 typedef struct drm_radeon_tex_image {
index 92a9b65..006559d 100644 (file)
@@ -156,7 +156,7 @@ enum radeon_chip_flags {
 
 typedef struct drm_radeon_freelist {
        unsigned int age;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        struct drm_radeon_freelist *next;
        struct drm_radeon_freelist *prev;
 } drm_radeon_freelist_t;
@@ -195,7 +195,7 @@ struct mem_block {
        struct mem_block *prev;
        int start;
        int size;
-       DRMFILE filp;           /* 0: free, -1: heap, other: real files */
+       struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
 };
 
 struct radeon_surface {
@@ -210,7 +210,7 @@ struct radeon_virt_surface {
        u32 lower;
        u32 upper;
        u32 flags;
-       DRMFILE filp;
+       struct drm_file *file_priv;
 };
 
 typedef struct drm_radeon_private {
@@ -295,7 +295,7 @@ typedef struct drm_radeon_private {
 
        unsigned long pcigart_offset;
        unsigned int pcigart_offset_set;
-       drm_ati_pcigart_info gart_info;
+       struct ati_pcigart_info gart_info;
 
        u32 scratch_ages[5];
 
@@ -312,11 +312,11 @@ typedef struct drm_radeon_kcmd_buffer {
        int bufsz;
        char *buf;
        int nbox;
-       drm_clip_rect_t __user *boxes;
+       struct drm_clip_rect __user *boxes;
 } drm_radeon_kcmd_buffer_t;
 
 extern int radeon_no_wb;
-extern drm_ioctl_desc_t radeon_ioctls[];
+extern struct drm_ioctl_desc radeon_ioctls[];
 extern int radeon_max_ioctl;
 
 /* Check whether the given hardware address is inside the framebuffer or the
@@ -335,60 +335,64 @@ static __inline__ int radeon_check_offset(drm_radeon_private_t *dev_priv,
 }
 
                                /* radeon_cp.c */
-extern int radeon_cp_init(DRM_IOCTL_ARGS);
-extern int radeon_cp_start(DRM_IOCTL_ARGS);
-extern int radeon_cp_stop(DRM_IOCTL_ARGS);
-extern int radeon_cp_reset(DRM_IOCTL_ARGS);
-extern int radeon_cp_idle(DRM_IOCTL_ARGS);
-extern int radeon_cp_resume(DRM_IOCTL_ARGS);
-extern int radeon_engine_reset(DRM_IOCTL_ARGS);
-extern int radeon_fullscreen(DRM_IOCTL_ARGS);
-extern int radeon_cp_buffers(DRM_IOCTL_ARGS);
-
-extern void radeon_freelist_reset(drm_device_t * dev);
-extern drm_buf_t *radeon_freelist_get(drm_device_t * dev);
+extern int radeon_cp_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_cp_start(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_cp_stop(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_cp_reset(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_cp_idle(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_cp_resume(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_fullscreen(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_cp_buffers(struct drm_device *dev, void *data, struct drm_file *file_priv);
+
+extern void radeon_freelist_reset(struct drm_device * dev);
+extern struct drm_buf *radeon_freelist_get(struct drm_device * dev);
 
 extern int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n);
 
 extern int radeon_do_cp_idle(drm_radeon_private_t * dev_priv);
 
-extern int radeon_mem_alloc(DRM_IOCTL_ARGS);
-extern int radeon_mem_free(DRM_IOCTL_ARGS);
-extern int radeon_mem_init_heap(DRM_IOCTL_ARGS);
+extern int radeon_mem_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_mem_init_heap(struct drm_device *dev, void *data, struct drm_file *file_priv);
 extern void radeon_mem_takedown(struct mem_block **heap);
-extern void radeon_mem_release(DRMFILE filp, struct mem_block *heap);
+extern void radeon_mem_release(struct drm_file *file_priv,
+                              struct mem_block *heap);
 
                                /* radeon_irq.c */
-extern int radeon_irq_emit(DRM_IOCTL_ARGS);
-extern int radeon_irq_wait(DRM_IOCTL_ARGS);
+extern int radeon_irq_emit(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int radeon_irq_wait(struct drm_device *dev, void *data, struct drm_file *file_priv);
 
-extern void radeon_do_release(drm_device_t * dev);
-extern int radeon_driver_vblank_wait(drm_device_t * dev,
+extern void radeon_do_release(struct drm_device * dev);
+extern int radeon_driver_vblank_wait(struct drm_device * dev,
                                     unsigned int *sequence);
-extern int radeon_driver_vblank_wait2(drm_device_t * dev,
+extern int radeon_driver_vblank_wait2(struct drm_device * dev,
                                      unsigned int *sequence);
 extern irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS);
-extern void radeon_driver_irq_preinstall(drm_device_t * dev);
-extern void radeon_driver_irq_postinstall(drm_device_t * dev);
-extern void radeon_driver_irq_uninstall(drm_device_t * dev);
-extern int radeon_vblank_crtc_get(drm_device_t *dev);
-extern int radeon_vblank_crtc_set(drm_device_t *dev, int64_t value);
+extern void radeon_driver_irq_preinstall(struct drm_device * dev);
+extern void radeon_driver_irq_postinstall(struct drm_device * dev);
+extern void radeon_driver_irq_uninstall(struct drm_device * dev);
+extern int radeon_vblank_crtc_get(struct drm_device *dev);
+extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value);
 
 extern int radeon_driver_load(struct drm_device *dev, unsigned long flags);
 extern int radeon_driver_unload(struct drm_device *dev);
 extern int radeon_driver_firstopen(struct drm_device *dev);
-extern void radeon_driver_preclose(drm_device_t * dev, DRMFILE filp);
-extern void radeon_driver_postclose(drm_device_t * dev, drm_file_t * filp);
-extern void radeon_driver_lastclose(drm_device_t * dev);
-extern int radeon_driver_open(drm_device_t * dev, drm_file_t * filp_priv);
+extern void radeon_driver_preclose(struct drm_device * dev,
+                                  struct drm_file *file_priv);
+extern void radeon_driver_postclose(struct drm_device * dev,
+                                   struct drm_file *file_priv);
+extern void radeon_driver_lastclose(struct drm_device * dev);
+extern int radeon_driver_open(struct drm_device * dev,
+                             struct drm_file * file_priv);
 extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd,
                                         unsigned long arg);
 
 /* r300_cmdbuf.c */
 extern void r300_init_reg_flags(void);
 
-extern int r300_do_cp_cmdbuf(drm_device_t *dev, DRMFILE filp,
-                            drm_file_t* filp_priv,
+extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+                            struct drm_file *file_priv,
                             drm_radeon_kcmd_buffer_t* cmdbuf);
 
 /* Flags for stats.boxes
index a4be86e..1ece639 100644 (file)
@@ -64,7 +64,7 @@ static __inline__ u32 radeon_acknowledge_irqs(drm_radeon_private_t * dev_priv,
 
 irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS)
 {
-       drm_device_t *dev = (drm_device_t *) arg;
+       struct drm_device *dev = (struct drm_device *) arg;
        drm_radeon_private_t *dev_priv =
            (drm_radeon_private_t *) dev->dev_private;
        u32 stat;
@@ -109,7 +109,7 @@ irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS)
        return IRQ_HANDLED;
 }
 
-static int radeon_emit_irq(drm_device_t * dev)
+static int radeon_emit_irq(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        unsigned int ret;
@@ -127,7 +127,7 @@ static int radeon_emit_irq(drm_device_t * dev)
        return ret;
 }
 
-static int radeon_wait_irq(drm_device_t * dev, int swi_nr)
+static int radeon_wait_irq(struct drm_device * dev, int swi_nr)
 {
        drm_radeon_private_t *dev_priv =
            (drm_radeon_private_t *) dev->dev_private;
@@ -144,8 +144,9 @@ static int radeon_wait_irq(drm_device_t * dev, int swi_nr)
        return ret;
 }
 
-int radeon_driver_vblank_do_wait(drm_device_t * dev, unsigned int *sequence,
-                                int crtc)
+static int radeon_driver_vblank_do_wait(struct drm_device * dev,
+                                       unsigned int *sequence,
+                                       int crtc)
 {
        drm_radeon_private_t *dev_priv =
            (drm_radeon_private_t *) dev->dev_private;
@@ -155,7 +156,7 @@ int radeon_driver_vblank_do_wait(drm_device_t * dev, unsigned int *sequence,
        atomic_t *counter;
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (crtc == DRM_RADEON_VBLANK_CRTC1) {
@@ -165,7 +166,7 @@ int radeon_driver_vblank_do_wait(drm_device_t * dev, unsigned int *sequence,
                counter = &dev->vbl_received2;
                ack |= RADEON_CRTC2_VBLANK_STAT;
        } else
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        radeon_acknowledge_irqs(dev_priv, ack);
 
@@ -184,40 +185,36 @@ int radeon_driver_vblank_do_wait(drm_device_t * dev, unsigned int *sequence,
        return ret;
 }
 
-int radeon_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence)
+int radeon_driver_vblank_wait(struct drm_device *dev, unsigned int *sequence)
 {
        return radeon_driver_vblank_do_wait(dev, sequence, DRM_RADEON_VBLANK_CRTC1);
 }
 
-int radeon_driver_vblank_wait2(drm_device_t *dev, unsigned int *sequence)
+int radeon_driver_vblank_wait2(struct drm_device *dev, unsigned int *sequence)
 {
        return radeon_driver_vblank_do_wait(dev, sequence, DRM_RADEON_VBLANK_CRTC2);
 }
 
 /* Needs the lock as it touches the ring.
  */
-int radeon_irq_emit(DRM_IOCTL_ARGS)
+int radeon_irq_emit(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_irq_emit_t emit;
+       drm_radeon_irq_emit_t *emit = data;
        int result;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(emit, (drm_radeon_irq_emit_t __user *) data,
-                                sizeof(emit));
-
        result = radeon_emit_irq(dev);
 
-       if (DRM_COPY_TO_USER(emit.irq_seq, &result, sizeof(int))) {
+       if (DRM_COPY_TO_USER(emit->irq_seq, &result, sizeof(int))) {
                DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
@@ -225,24 +222,20 @@ int radeon_irq_emit(DRM_IOCTL_ARGS)
 
 /* Doesn't need the hardware lock.
  */
-int radeon_irq_wait(DRM_IOCTL_ARGS)
+int radeon_irq_wait(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_irq_wait_t irqwait;
+       drm_radeon_irq_wait_t *irqwait = data;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(irqwait, (drm_radeon_irq_wait_t __user *) data,
-                                sizeof(irqwait));
-
-       return radeon_wait_irq(dev, irqwait.irq_seq);
+       return radeon_wait_irq(dev, irqwait->irq_seq);
 }
 
-static void radeon_enable_interrupt(drm_device_t *dev)
+static void radeon_enable_interrupt(struct drm_device *dev)
 {
        drm_radeon_private_t *dev_priv = (drm_radeon_private_t *) dev->dev_private;
 
@@ -259,7 +252,7 @@ static void radeon_enable_interrupt(drm_device_t *dev)
 
 /* drm_dma.h hooks
 */
-void radeon_driver_irq_preinstall(drm_device_t * dev)
+void radeon_driver_irq_preinstall(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv =
            (drm_radeon_private_t *) dev->dev_private;
@@ -273,7 +266,7 @@ void radeon_driver_irq_preinstall(drm_device_t * dev)
                                           RADEON_CRTC2_VBLANK_STAT));
 }
 
-void radeon_driver_irq_postinstall(drm_device_t * dev)
+void radeon_driver_irq_postinstall(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv =
            (drm_radeon_private_t *) dev->dev_private;
@@ -284,7 +277,7 @@ void radeon_driver_irq_postinstall(drm_device_t * dev)
        radeon_enable_interrupt(dev);
 }
 
-void radeon_driver_irq_uninstall(drm_device_t * dev)
+void radeon_driver_irq_uninstall(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv =
            (drm_radeon_private_t *) dev->dev_private;
@@ -298,7 +291,7 @@ void radeon_driver_irq_uninstall(drm_device_t * dev)
 }
 
 
-int radeon_vblank_crtc_get(drm_device_t *dev)
+int radeon_vblank_crtc_get(struct drm_device *dev)
 {
        drm_radeon_private_t *dev_priv = (drm_radeon_private_t *) dev->dev_private;
        u32 flag;
@@ -315,12 +308,12 @@ int radeon_vblank_crtc_get(drm_device_t *dev)
        return value;
 }
 
-int radeon_vblank_crtc_set(drm_device_t *dev, int64_t value)
+int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value)
 {
        drm_radeon_private_t *dev_priv = (drm_radeon_private_t *) dev->dev_private;
        if (value & ~(DRM_RADEON_VBLANK_CRTC1 | DRM_RADEON_VBLANK_CRTC2)) {
                DRM_ERROR("called with invalid crtc 0x%x\n", (unsigned int)value);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        dev_priv->vblank_crtc = (unsigned int)value;
        radeon_enable_interrupt(dev);
index dbc91c9..9947e94 100644 (file)
@@ -39,7 +39,7 @@
  */
 
 static struct mem_block *split_block(struct mem_block *p, int start, int size,
-                                    DRMFILE filp)
+                                    struct drm_file *file_priv)
 {
        /* Maybe cut off the start of an existing block */
        if (start > p->start) {
@@ -49,7 +49,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
                        goto out;
                newblock->start = start;
                newblock->size = p->size - (start - p->start);
-               newblock->filp = NULL;
+               newblock->file_priv = NULL;
                newblock->next = p->next;
                newblock->prev = p;
                p->next->prev = newblock;
@@ -66,7 +66,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
                        goto out;
                newblock->start = start + size;
                newblock->size = p->size - size;
-               newblock->filp = NULL;
+               newblock->file_priv = NULL;
                newblock->next = p->next;
                newblock->prev = p;
                p->next->prev = newblock;
@@ -76,20 +76,20 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
 
       out:
        /* Our block is in the middle */
-       p->filp = filp;
+       p->file_priv = file_priv;
        return p;
 }
 
 static struct mem_block *alloc_block(struct mem_block *heap, int size,
-                                    int align2, DRMFILE filp)
+                                    int align2, struct drm_file *file_priv)
 {
        struct mem_block *p;
        int mask = (1 << align2) - 1;
 
        list_for_each(p, heap) {
                int start = (p->start + mask) & ~mask;
-               if (p->filp == 0 && start + size <= p->start + p->size)
-                       return split_block(p, start, size, filp);
+               if (p->file_priv == 0 && start + size <= p->start + p->size)
+                       return split_block(p, start, size, file_priv);
        }
 
        return NULL;
@@ -108,12 +108,12 @@ static struct mem_block *find_block(struct mem_block *heap, int start)
 
 static void free_block(struct mem_block *p)
 {
-       p->filp = NULL;
+       p->file_priv = NULL;
 
-       /* Assumes a single contiguous range.  Needs a special filp in
+       /* Assumes a single contiguous range.  Needs a special file_priv in
         * 'heap' to stop it being subsumed.
         */
-       if (p->next->filp == 0) {
+       if (p->next->file_priv == 0) {
                struct mem_block *q = p->next;
                p->size += q->size;
                p->next = q->next;
@@ -121,7 +121,7 @@ static void free_block(struct mem_block *p)
                drm_free(q, sizeof(*q), DRM_MEM_BUFS);
        }
 
-       if (p->prev->filp == 0) {
+       if (p->prev->file_priv == 0) {
                struct mem_block *q = p->prev;
                q->size += p->size;
                q->next = p->next;
@@ -137,28 +137,28 @@ static int init_heap(struct mem_block **heap, int start, int size)
        struct mem_block *blocks = drm_alloc(sizeof(*blocks), DRM_MEM_BUFS);
 
        if (!blocks)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        *heap = drm_alloc(sizeof(**heap), DRM_MEM_BUFS);
        if (!*heap) {
                drm_free(blocks, sizeof(*blocks), DRM_MEM_BUFS);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        blocks->start = start;
        blocks->size = size;
-       blocks->filp = NULL;
+       blocks->file_priv = NULL;
        blocks->next = blocks->prev = *heap;
 
        memset(*heap, 0, sizeof(**heap));
-       (*heap)->filp = (DRMFILE) - 1;
+       (*heap)->file_priv = (struct drm_file *) - 1;
        (*heap)->next = (*heap)->prev = blocks;
        return 0;
 }
 
 /* Free all blocks associated with the releasing file.
  */
-void radeon_mem_release(DRMFILE filp, struct mem_block *heap)
+void radeon_mem_release(struct drm_file *file_priv, struct mem_block *heap)
 {
        struct mem_block *p;
 
@@ -166,15 +166,15 @@ void radeon_mem_release(DRMFILE filp, struct mem_block *heap)
                return;
 
        list_for_each(p, heap) {
-               if (p->filp == filp)
-                       p->filp = NULL;
+               if (p->file_priv == file_priv)
+                       p->file_priv = NULL;
        }
 
-       /* Assumes a single contiguous range.  Needs a special filp in
+       /* Assumes a single contiguous range.  Needs a special file_priv in
         * 'heap' to stop it being subsumed.
         */
        list_for_each(p, heap) {
-               while (p->filp == 0 && p->next->filp == 0) {
+               while (p->file_priv == 0 && p->next->file_priv == 0) {
                        struct mem_block *q = p->next;
                        p->size += q->size;
                        p->next = q->next;
@@ -217,98 +217,86 @@ static struct mem_block **get_heap(drm_radeon_private_t * dev_priv, int region)
        }
 }
 
-int radeon_mem_alloc(DRM_IOCTL_ARGS)
+int radeon_mem_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_mem_alloc_t alloc;
+       drm_radeon_mem_alloc_t *alloc = data;
        struct mem_block *block, **heap;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(alloc, (drm_radeon_mem_alloc_t __user *) data,
-                                sizeof(alloc));
-
-       heap = get_heap(dev_priv, alloc.region);
+       heap = get_heap(dev_priv, alloc->region);
        if (!heap || !*heap)
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
        /* Make things easier on ourselves: all allocations at least
         * 4k aligned.
         */
-       if (alloc.alignment < 12)
-               alloc.alignment = 12;
+       if (alloc->alignment < 12)
+               alloc->alignment = 12;
 
-       block = alloc_block(*heap, alloc.size, alloc.alignment, filp);
+       block = alloc_block(*heap, alloc->size, alloc->alignment, file_priv);
 
        if (!block)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
-       if (DRM_COPY_TO_USER(alloc.region_offset, &block->start, sizeof(int))) {
+       if (DRM_COPY_TO_USER(alloc->region_offset, &block->start,
+                            sizeof(int))) {
                DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
 }
 
-int radeon_mem_free(DRM_IOCTL_ARGS)
+int radeon_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_mem_free_t memfree;
+       drm_radeon_mem_free_t *memfree = data;
        struct mem_block *block, **heap;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(memfree, (drm_radeon_mem_free_t __user *) data,
-                                sizeof(memfree));
-
-       heap = get_heap(dev_priv, memfree.region);
+       heap = get_heap(dev_priv, memfree->region);
        if (!heap || !*heap)
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
-       block = find_block(*heap, memfree.region_offset);
+       block = find_block(*heap, memfree->region_offset);
        if (!block)
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
-       if (block->filp != filp)
-               return DRM_ERR(EPERM);
+       if (block->file_priv != file_priv)
+               return -EPERM;
 
        free_block(block);
        return 0;
 }
 
-int radeon_mem_init_heap(DRM_IOCTL_ARGS)
+int radeon_mem_init_heap(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_mem_init_heap_t initheap;
+       drm_radeon_mem_init_heap_t *initheap = data;
        struct mem_block **heap;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(initheap,
-                                (drm_radeon_mem_init_heap_t __user *) data,
-                                sizeof(initheap));
-
-       heap = get_heap(dev_priv, initheap.region);
+       heap = get_heap(dev_priv, initheap->region);
        if (!heap)
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
        if (*heap) {
                DRM_ERROR("heap already initialized?");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
-       return init_heap(heap, initheap.start, initheap.size);
+       return init_heap(heap, initheap->start, initheap->size);
 }
index 8ccd098..ac7f601 100644 (file)
@@ -39,7 +39,7 @@
 
 static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
                                                    dev_priv,
-                                                   drm_file_t * filp_priv,
+                                                   struct drm_file *file_priv,
                                                    u32 * offset)
 {
        u64 off = *offset;
@@ -71,7 +71,7 @@ static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
         * magic offset we get from SETPARAM or calculated from fb_location
         */
        if (off < (dev_priv->fb_size + dev_priv->gart_size)) {
-               radeon_priv = filp_priv->driver_priv;
+               radeon_priv = file_priv->driver_priv;
                off += radeon_priv->radeon_fb_delta;
        }
 
@@ -85,29 +85,29 @@ static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
                *offset = off;
                return 0;
        }
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
 static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
                                                     dev_priv,
-                                                    drm_file_t * filp_priv,
+                                                    struct drm_file *file_priv,
                                                     int id, u32 *data)
 {
        switch (id) {
 
        case RADEON_EMIT_PP_MISC:
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                    &data[(RADEON_RB3D_DEPTHOFFSET - RADEON_PP_MISC) / 4])) {
                        DRM_ERROR("Invalid depth buffer offset\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
 
        case RADEON_EMIT_PP_CNTL:
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                    &data[(RADEON_RB3D_COLOROFFSET - RADEON_PP_CNTL) / 4])) {
                        DRM_ERROR("Invalid colour buffer offset\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
 
@@ -117,20 +117,20 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
        case R200_EMIT_PP_TXOFFSET_3:
        case R200_EMIT_PP_TXOFFSET_4:
        case R200_EMIT_PP_TXOFFSET_5:
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                                                  &data[0])) {
                        DRM_ERROR("Invalid R200 texture offset\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
 
        case RADEON_EMIT_PP_TXFILTER_0:
        case RADEON_EMIT_PP_TXFILTER_1:
        case RADEON_EMIT_PP_TXFILTER_2:
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                    &data[(RADEON_PP_TXOFFSET_0 - RADEON_PP_TXFILTER_0) / 4])) {
                        DRM_ERROR("Invalid R100 texture offset\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
 
@@ -143,11 +143,11 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
                        int i;
                        for (i = 0; i < 5; i++) {
                                if (radeon_check_and_fixup_offset(dev_priv,
-                                                                 filp_priv,
+                                                                 file_priv,
                                                                  &data[i])) {
                                        DRM_ERROR
                                            ("Invalid R200 cubic texture offset\n");
-                                       return DRM_ERR(EINVAL);
+                                       return -EINVAL;
                                }
                        }
                        break;
@@ -159,11 +159,11 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
                        int i;
                        for (i = 0; i < 5; i++) {
                                if (radeon_check_and_fixup_offset(dev_priv,
-                                                                 filp_priv,
+                                                                 file_priv,
                                                                  &data[i])) {
                                        DRM_ERROR
                                            ("Invalid R100 cubic texture offset\n");
-                                       return DRM_ERR(EINVAL);
+                                       return -EINVAL;
                                }
                        }
                }
@@ -256,7 +256,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
 
        default:
                DRM_ERROR("Unknown state packet ID %d\n", id);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        return 0;
@@ -264,7 +264,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
 
 static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
                                                     dev_priv,
-                                                    drm_file_t *filp_priv,
+                                                    struct drm_file *file_priv,
                                                     drm_radeon_kcmd_buffer_t *
                                                     cmdbuf,
                                                     unsigned int *cmdsz)
@@ -277,12 +277,12 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
 
        if ((cmd[0] & 0xc0000000) != RADEON_CP_PACKET3) {
                DRM_ERROR("Not a type 3 packet\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (4 * *cmdsz > cmdbuf->bufsz) {
                DRM_ERROR("Packet size larger than size of data provided\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        switch(cmd[0] & 0xff00) {
@@ -307,7 +307,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
                /* safe but r200 only */
                if (dev_priv->microcode_version != UCODE_R200) {
                        DRM_ERROR("Invalid 3d packet for r100-class chip\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
 
@@ -317,7 +317,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
                if (count > 18) { /* 12 arrays max */
                        DRM_ERROR("Too large payload in 3D_LOAD_VBPNTR (count=%d)\n",
                                  count);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                /* carefully check packet contents */
@@ -326,22 +326,25 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
                i = 2;
                while ((k < narrays) && (i < (count + 2))) {
                        i++;            /* skip attribute field */
-                       if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[i])) {
+                       if (radeon_check_and_fixup_offset(dev_priv, file_priv,
+                                                         &cmd[i])) {
                                DRM_ERROR
                                    ("Invalid offset (k=%d i=%d) in 3D_LOAD_VBPNTR packet.\n",
                                     k, i);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        k++;
                        i++;
                        if (k == narrays)
                                break;
                        /* have one more to process, they come in pairs */
-                       if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[i])) {
+                       if (radeon_check_and_fixup_offset(dev_priv,
+                                                         file_priv, &cmd[i]))
+                       {
                                DRM_ERROR
                                    ("Invalid offset (k=%d i=%d) in 3D_LOAD_VBPNTR packet.\n",
                                     k, i);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        k++;
                        i++;
@@ -351,33 +354,33 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
                        DRM_ERROR
                            ("Malformed 3D_LOAD_VBPNTR packet (k=%d i=%d narrays=%d count+1=%d).\n",
                              k, i, narrays, count + 1);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
 
        case RADEON_3D_RNDR_GEN_INDX_PRIM:
                if (dev_priv->microcode_version != UCODE_R100) {
                        DRM_ERROR("Invalid 3d packet for r200-class chip\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[1])) {
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv, &cmd[1])) {
                                DRM_ERROR("Invalid rndr_gen_indx offset\n");
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                }
                break;
 
        case RADEON_CP_INDX_BUFFER:
                if (dev_priv->microcode_version != UCODE_R200) {
                        DRM_ERROR("Invalid 3d packet for r100-class chip\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                if ((cmd[1] & 0x8000ffff) != 0x80000810) {
                        DRM_ERROR("Invalid indx_buffer reg address %08X\n", cmd[1]);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[2])) {
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv, &cmd[2])) {
                        DRM_ERROR("Invalid indx_buffer offset is %08X\n", cmd[2]);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
 
@@ -389,9 +392,9 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
                              | RADEON_GMC_DST_PITCH_OFFSET_CNTL)) {
                        offset = cmd[2] << 10;
                        if (radeon_check_and_fixup_offset
-                           (dev_priv, filp_priv, &offset)) {
+                           (dev_priv, file_priv, &offset)) {
                                DRM_ERROR("Invalid first packet offset\n");
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        cmd[2] = (cmd[2] & 0xffc00000) | offset >> 10;
                }
@@ -400,9 +403,9 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
                    (cmd[1] & RADEON_GMC_DST_PITCH_OFFSET_CNTL)) {
                        offset = cmd[3] << 10;
                        if (radeon_check_and_fixup_offset
-                           (dev_priv, filp_priv, &offset)) {
+                           (dev_priv, file_priv, &offset)) {
                                DRM_ERROR("Invalid second packet offset\n");
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        cmd[3] = (cmd[3] & 0xffc00000) | offset >> 10;
                }
@@ -410,7 +413,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
 
        default:
                DRM_ERROR("Invalid packet type %x\n", cmd[0] & 0xff00);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        return 0;
@@ -421,7 +424,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
  */
 
 static __inline__ void radeon_emit_clip_rect(drm_radeon_private_t * dev_priv,
-                                            drm_clip_rect_t * box)
+                                            struct drm_clip_rect * box)
 {
        RING_LOCALS;
 
@@ -439,7 +442,7 @@ static __inline__ void radeon_emit_clip_rect(drm_radeon_private_t * dev_priv,
 /* Emit 1.1 state
  */
 static int radeon_emit_state(drm_radeon_private_t * dev_priv,
-                            drm_file_t * filp_priv,
+                            struct drm_file *file_priv,
                             drm_radeon_context_regs_t * ctx,
                             drm_radeon_texture_regs_t * tex,
                             unsigned int dirty)
@@ -448,16 +451,16 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
        DRM_DEBUG("dirty=0x%08x\n", dirty);
 
        if (dirty & RADEON_UPLOAD_CONTEXT) {
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                                                  &ctx->rb3d_depthoffset)) {
                        DRM_ERROR("Invalid depth buffer offset\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                                                  &ctx->rb3d_coloroffset)) {
                        DRM_ERROR("Invalid depth buffer offset\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                BEGIN_RING(14);
@@ -543,10 +546,10 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
        }
 
        if (dirty & RADEON_UPLOAD_TEX0) {
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                                                  &tex[0].pp_txoffset)) {
                        DRM_ERROR("Invalid texture offset for unit 0\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                BEGIN_RING(9);
@@ -563,10 +566,10 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
        }
 
        if (dirty & RADEON_UPLOAD_TEX1) {
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                                                  &tex[1].pp_txoffset)) {
                        DRM_ERROR("Invalid texture offset for unit 1\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                BEGIN_RING(9);
@@ -583,10 +586,10 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
        }
 
        if (dirty & RADEON_UPLOAD_TEX2) {
-               if (radeon_check_and_fixup_offset(dev_priv, filp_priv,
+               if (radeon_check_and_fixup_offset(dev_priv, file_priv,
                                                  &tex[2].pp_txoffset)) {
                        DRM_ERROR("Invalid texture offset for unit 2\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                BEGIN_RING(9);
@@ -608,7 +611,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
 /* Emit 1.2 state
  */
 static int radeon_emit_state2(drm_radeon_private_t * dev_priv,
-                             drm_file_t * filp_priv,
+                             struct drm_file *file_priv,
                              drm_radeon_state_t * state)
 {
        RING_LOCALS;
@@ -621,7 +624,7 @@ static int radeon_emit_state2(drm_radeon_private_t * dev_priv,
                ADVANCE_RING();
        }
 
-       return radeon_emit_state(dev_priv, filp_priv, &state->context,
+       return radeon_emit_state(dev_priv, file_priv, &state->context,
                                 state->tex, state->dirty);
 }
 
@@ -844,7 +847,7 @@ static void radeon_cp_performance_boxes(drm_radeon_private_t * dev_priv)
  * CP command dispatch functions
  */
 
-static void radeon_cp_dispatch_clear(drm_device_t * dev,
+static void radeon_cp_dispatch_clear(struct drm_device * dev,
                                     drm_radeon_clear_t * clear,
                                     drm_radeon_clear_rect_t * depth_boxes)
 {
@@ -852,7 +855,7 @@ static void radeon_cp_dispatch_clear(drm_device_t * dev,
        drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
        drm_radeon_depth_clear_t *depth_clear = &dev_priv->depth_clear;
        int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        unsigned int flags = clear->flags;
        u32 rb3d_cntl = 0, rb3d_stencilrefmask = 0;
        int i;
@@ -1335,12 +1338,12 @@ static void radeon_cp_dispatch_clear(drm_device_t * dev,
        ADVANCE_RING();
 }
 
-static void radeon_cp_dispatch_swap(drm_device_t * dev)
+static void radeon_cp_dispatch_swap(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
        int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
+       struct drm_clip_rect *pbox = sarea_priv->boxes;
        int i;
        RING_LOCALS;
        DRM_DEBUG("\n");
@@ -1412,10 +1415,10 @@ static void radeon_cp_dispatch_swap(drm_device_t * dev)
        ADVANCE_RING();
 }
 
-static void radeon_cp_dispatch_flip(drm_device_t * dev)
+static void radeon_cp_dispatch_flip(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_sarea_t *sarea = (drm_sarea_t *) dev_priv->sarea->handle;
+       struct drm_sarea *sarea = (struct drm_sarea *) dev_priv->sarea->handle;
        int offset = (dev_priv->sarea_priv->pfCurrentPage == 1)
            ? dev_priv->front_offset : dev_priv->back_offset;
        RING_LOCALS;
@@ -1491,8 +1494,8 @@ typedef struct {
        unsigned int vc_format;
 } drm_radeon_tcl_prim_t;
 
-static void radeon_cp_dispatch_vertex(drm_device_t * dev,
-                                     drm_buf_t * buf,
+static void radeon_cp_dispatch_vertex(struct drm_device * dev,
+                                     struct drm_buf * buf,
                                      drm_radeon_tcl_prim_t * prim)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -1537,7 +1540,7 @@ static void radeon_cp_dispatch_vertex(drm_device_t * dev,
        } while (i < nbox);
 }
 
-static void radeon_cp_discard_buffer(drm_device_t * dev, drm_buf_t * buf)
+static void radeon_cp_discard_buffer(struct drm_device * dev, struct drm_buf * buf)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        drm_radeon_buf_priv_t *buf_priv = buf->dev_private;
@@ -1554,8 +1557,8 @@ static void radeon_cp_discard_buffer(drm_device_t * dev, drm_buf_t * buf)
        buf->used = 0;
 }
 
-static void radeon_cp_dispatch_indirect(drm_device_t * dev,
-                                       drm_buf_t * buf, int start, int end)
+static void radeon_cp_dispatch_indirect(struct drm_device * dev,
+                                       struct drm_buf * buf, int start, int end)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        RING_LOCALS;
@@ -1588,8 +1591,8 @@ static void radeon_cp_dispatch_indirect(drm_device_t * dev,
        }
 }
 
-static void radeon_cp_dispatch_indices(drm_device_t * dev,
-                                      drm_buf_t * elt_buf,
+static void radeon_cp_dispatch_indices(struct drm_device * dev,
+                                      struct drm_buf * elt_buf,
                                       drm_radeon_tcl_prim_t * prim)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -1646,14 +1649,13 @@ static void radeon_cp_dispatch_indices(drm_device_t * dev,
 
 #define RADEON_MAX_TEXTURE_SIZE RADEON_BUFFER_SIZE
 
-static int radeon_cp_dispatch_texture(DRMFILE filp,
-                                     drm_device_t * dev,
+static int radeon_cp_dispatch_texture(struct drm_device * dev,
+                                     struct drm_file *file_priv,
                                      drm_radeon_texture_t * tex,
                                      drm_radeon_tex_image_t * image)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_file_t *filp_priv;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        u32 format;
        u32 *buffer;
        const u8 __user *data;
@@ -1664,11 +1666,9 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
        u32 offset;
        RING_LOCALS;
 
-       DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
-
-       if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &tex->offset)) {
+       if (radeon_check_and_fixup_offset(dev_priv, file_priv, &tex->offset)) {
                DRM_ERROR("Invalid destination offset\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->stats.boxes |= RADEON_BOX_TEXTURE_LOAD;
@@ -1711,11 +1711,11 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
                break;
        default:
                DRM_ERROR("invalid texture format %d\n", tex->format);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        spitch = blit_width >> 6;
        if (spitch == 0 && image->height > 1)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        texpitch = tex->pitch;
        if ((texpitch << 22) & RADEON_DST_TILE_MICRO) {
@@ -1760,8 +1760,8 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
                if (!buf) {
                        DRM_DEBUG("radeon_cp_dispatch_texture: EAGAIN\n");
                        if (DRM_COPY_TO_USER(tex->image, image, sizeof(*image)))
-                               return DRM_ERR(EFAULT);
-                       return DRM_ERR(EAGAIN);
+                               return -EFAULT;
+                       return -EAGAIN;
                }
 
                /* Dispatch the indirect buffer.
@@ -1774,7 +1774,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
        do { \
                if (DRM_COPY_FROM_USER(_buf, _data, (_width))) {\
                        DRM_ERROR("EFAULT on pad, %d bytes\n", (_width)); \
-                       return DRM_ERR(EFAULT); \
+                       return -EFAULT; \
                } \
        } while(0)
 
@@ -1841,7 +1841,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
                }
 
 #undef RADEON_COPY_MT
-               buf->filp = filp;
+               buf->file_priv = file_priv;
                buf->used = size;
                offset = dev_priv->gart_buffers_offset + buf->offset;
                BEGIN_RING(9);
@@ -1881,7 +1881,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
        return 0;
 }
 
-static void radeon_cp_dispatch_stipple(drm_device_t * dev, u32 * stipple)
+static void radeon_cp_dispatch_stipple(struct drm_device * dev, u32 * stipple)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        int i;
@@ -1929,7 +1929,8 @@ static void radeon_apply_surface_regs(int surf_index,
  * not always be available.
  */
 static int alloc_surface(drm_radeon_surface_alloc_t *new,
-                        drm_radeon_private_t *dev_priv, DRMFILE filp)
+                        drm_radeon_private_t *dev_priv,
+                        struct drm_file *file_priv)
 {
        struct radeon_virt_surface *s;
        int i;
@@ -1959,7 +1960,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
 
        /* find a virtual surface */
        for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++)
-               if (dev_priv->virt_surfaces[i].filp == 0)
+               if (dev_priv->virt_surfaces[i].file_priv == 0)
                        break;
        if (i == 2 * RADEON_MAX_SURFACES) {
                return -1;
@@ -1977,7 +1978,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
                        s->lower = new_lower;
                        s->upper = new_upper;
                        s->flags = new->flags;
-                       s->filp = filp;
+                       s->file_priv = file_priv;
                        dev_priv->surfaces[i].refcount++;
                        dev_priv->surfaces[i].lower = s->lower;
                        radeon_apply_surface_regs(s->surface_index, dev_priv);
@@ -1993,7 +1994,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
                        s->lower = new_lower;
                        s->upper = new_upper;
                        s->flags = new->flags;
-                       s->filp = filp;
+                       s->file_priv = file_priv;
                        dev_priv->surfaces[i].refcount++;
                        dev_priv->surfaces[i].upper = s->upper;
                        radeon_apply_surface_regs(s->surface_index, dev_priv);
@@ -2009,7 +2010,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
                        s->lower = new_lower;
                        s->upper = new_upper;
                        s->flags = new->flags;
-                       s->filp = filp;
+                       s->file_priv = file_priv;
                        dev_priv->surfaces[i].refcount = 1;
                        dev_priv->surfaces[i].lower = s->lower;
                        dev_priv->surfaces[i].upper = s->upper;
@@ -2023,7 +2024,8 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
        return -1;
 }
 
-static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
+static int free_surface(struct drm_file *file_priv,
+                       drm_radeon_private_t * dev_priv,
                        int lower)
 {
        struct radeon_virt_surface *s;
@@ -2031,8 +2033,9 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
        /* find the virtual surface */
        for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) {
                s = &(dev_priv->virt_surfaces[i]);
-               if (s->filp) {
-                       if ((lower == s->lower) && (filp == s->filp)) {
+               if (s->file_priv) {
+                       if ((lower == s->lower) && (file_priv == s->file_priv))
+                       {
                                if (dev_priv->surfaces[s->surface_index].
                                    lower == s->lower)
                                        dev_priv->surfaces[s->surface_index].
@@ -2048,7 +2051,7 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
                                    refcount == 0)
                                        dev_priv->surfaces[s->surface_index].
                                            flags = 0;
-                               s->filp = NULL;
+                               s->file_priv = NULL;
                                radeon_apply_surface_regs(s->surface_index,
                                                          dev_priv);
                                return 0;
@@ -2058,13 +2061,13 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
        return 1;
 }
 
-static void radeon_surfaces_release(DRMFILE filp,
+static void radeon_surfaces_release(struct drm_file *file_priv,
                                    drm_radeon_private_t * dev_priv)
 {
        int i;
        for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) {
-               if (dev_priv->virt_surfaces[i].filp == filp)
-                       free_surface(filp, dev_priv,
+               if (dev_priv->virt_surfaces[i].file_priv == file_priv)
+                       free_surface(file_priv, dev_priv,
                                     dev_priv->virt_surfaces[i].lower);
        }
 }
@@ -2072,71 +2075,58 @@ static void radeon_surfaces_release(DRMFILE filp,
 /* ================================================================
  * IOCTL functions
  */
-static int radeon_surface_alloc(DRM_IOCTL_ARGS)
+static int radeon_surface_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_surface_alloc_t alloc;
+       drm_radeon_surface_alloc_t *alloc = data;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(alloc,
-                                (drm_radeon_surface_alloc_t __user *) data,
-                                sizeof(alloc));
-
-       if (alloc_surface(&alloc, dev_priv, filp) == -1)
-               return DRM_ERR(EINVAL);
+       if (alloc_surface(alloc, dev_priv, file_priv) == -1)
+               return -EINVAL;
        else
                return 0;
 }
 
-static int radeon_surface_free(DRM_IOCTL_ARGS)
+static int radeon_surface_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_surface_free_t memfree;
+       drm_radeon_surface_free_t *memfree = data;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(memfree, (drm_radeon_surface_free_t __user *) data,
-                                sizeof(memfree));
-
-       if (free_surface(filp, dev_priv, memfree.address))
-               return DRM_ERR(EINVAL);
+       if (free_surface(file_priv, dev_priv, memfree->address))
+               return -EINVAL;
        else
                return 0;
 }
 
-static int radeon_cp_clear(DRM_IOCTL_ARGS)
+static int radeon_cp_clear(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_radeon_clear_t clear;
+       drm_radeon_clear_t *clear = data;
        drm_radeon_clear_rect_t depth_boxes[RADEON_NR_SAREA_CLIPRECTS];
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(clear, (drm_radeon_clear_t __user *) data,
-                                sizeof(clear));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
        if (sarea_priv->nbox > RADEON_NR_SAREA_CLIPRECTS)
                sarea_priv->nbox = RADEON_NR_SAREA_CLIPRECTS;
 
-       if (DRM_COPY_FROM_USER(&depth_boxes, clear.depth_boxes,
+       if (DRM_COPY_FROM_USER(&depth_boxes, clear->depth_boxes,
                               sarea_priv->nbox * sizeof(depth_boxes[0])))
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
-       radeon_cp_dispatch_clear(dev, &clear, depth_boxes);
+       radeon_cp_dispatch_clear(dev, clear, depth_boxes);
 
        COMMIT_RING();
        return 0;
@@ -2144,7 +2134,7 @@ static int radeon_cp_clear(DRM_IOCTL_ARGS)
 
 /* Not sure why this isn't set all the time:
  */
-static int radeon_do_init_pageflip(drm_device_t * dev)
+static int radeon_do_init_pageflip(struct drm_device * dev)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        RING_LOCALS;
@@ -2172,13 +2162,12 @@ static int radeon_do_init_pageflip(drm_device_t * dev)
 /* Swapping and flipping are different operations, need different ioctls.
  * They can & should be intermixed to support multiple 3d windows.
  */
-static int radeon_cp_flip(DRM_IOCTL_ARGS)
+static int radeon_cp_flip(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
@@ -2191,14 +2180,13 @@ static int radeon_cp_flip(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int radeon_cp_swap(DRM_IOCTL_ARGS)
+static int radeon_cp_swap(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
        drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
@@ -2212,71 +2200,64 @@ static int radeon_cp_swap(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int radeon_cp_vertex(DRM_IOCTL_ARGS)
+static int radeon_cp_vertex(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_file_t *filp_priv;
        drm_radeon_sarea_t *sarea_priv;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
-       drm_radeon_vertex_t vertex;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
+       drm_radeon_vertex_t *vertex = data;
        drm_radeon_tcl_prim_t prim;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        sarea_priv = dev_priv->sarea_priv;
 
-       DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(vertex, (drm_radeon_vertex_t __user *) data,
-                                sizeof(vertex));
-
        DRM_DEBUG("pid=%d index=%d count=%d discard=%d\n",
-                 DRM_CURRENTPID, vertex.idx, vertex.count, vertex.discard);
+                 DRM_CURRENTPID, vertex->idx, vertex->count, vertex->discard);
 
-       if (vertex.idx < 0 || vertex.idx >= dma->buf_count) {
+       if (vertex->idx < 0 || vertex->idx >= dma->buf_count) {
                DRM_ERROR("buffer index %d (of %d max)\n",
-                         vertex.idx, dma->buf_count - 1);
-               return DRM_ERR(EINVAL);
+                         vertex->idx, dma->buf_count - 1);
+               return -EINVAL;
        }
-       if (vertex.prim < 0 || vertex.prim > RADEON_PRIM_TYPE_3VRT_LINE_LIST) {
-               DRM_ERROR("buffer prim %d\n", vertex.prim);
-               return DRM_ERR(EINVAL);
+       if (vertex->prim < 0 || vertex->prim > RADEON_PRIM_TYPE_3VRT_LINE_LIST) {
+               DRM_ERROR("buffer prim %d\n", vertex->prim);
+               return -EINVAL;
        }
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       buf = dma->buflist[vertex.idx];
+       buf = dma->buflist[vertex->idx];
 
-       if (buf->filp != filp) {
+       if (buf->file_priv != file_priv) {
                DRM_ERROR("process %d using buffer owned by %p\n",
-                         DRM_CURRENTPID, buf->filp);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, buf->file_priv);
+               return -EINVAL;
        }
        if (buf->pending) {
-               DRM_ERROR("sending pending buffer %d\n", vertex.idx);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("sending pending buffer %d\n", vertex->idx);
+               return -EINVAL;
        }
 
        /* Build up a prim_t record:
         */
-       if (vertex.count) {
-               buf->used = vertex.count;       /* not used? */
+       if (vertex->count) {
+               buf->used = vertex->count;      /* not used? */
 
                if (sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS) {
-                       if (radeon_emit_state(dev_priv, filp_priv,
+                       if (radeon_emit_state(dev_priv, file_priv,
                                              &sarea_priv->context_state,
                                              sarea_priv->tex_state,
                                              sarea_priv->dirty)) {
                                DRM_ERROR("radeon_emit_state failed\n");
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
 
                        sarea_priv->dirty &= ~(RADEON_UPLOAD_TEX0IMAGES |
@@ -2286,15 +2267,15 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
                }
 
                prim.start = 0;
-               prim.finish = vertex.count;     /* unused */
-               prim.prim = vertex.prim;
-               prim.numverts = vertex.count;
+               prim.finish = vertex->count;    /* unused */
+               prim.prim = vertex->prim;
+               prim.numverts = vertex->count;
                prim.vc_format = dev_priv->sarea_priv->vc_format;
 
                radeon_cp_dispatch_vertex(dev, buf, &prim);
        }
 
-       if (vertex.discard) {
+       if (vertex->discard) {
                radeon_cp_discard_buffer(dev, buf);
        }
 
@@ -2302,80 +2283,74 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int radeon_cp_indices(DRM_IOCTL_ARGS)
+static int radeon_cp_indices(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_file_t *filp_priv;
        drm_radeon_sarea_t *sarea_priv;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
-       drm_radeon_indices_t elts;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
+       drm_radeon_indices_t *elts = data;
        drm_radeon_tcl_prim_t prim;
        int count;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        sarea_priv = dev_priv->sarea_priv;
 
-       DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(elts, (drm_radeon_indices_t __user *) data,
-                                sizeof(elts));
-
        DRM_DEBUG("pid=%d index=%d start=%d end=%d discard=%d\n",
-                 DRM_CURRENTPID, elts.idx, elts.start, elts.end, elts.discard);
+                 DRM_CURRENTPID, elts->idx, elts->start, elts->end,
+                 elts->discard);
 
-       if (elts.idx < 0 || elts.idx >= dma->buf_count) {
+       if (elts->idx < 0 || elts->idx >= dma->buf_count) {
                DRM_ERROR("buffer index %d (of %d max)\n",
-                         elts.idx, dma->buf_count - 1);
-               return DRM_ERR(EINVAL);
+                         elts->idx, dma->buf_count - 1);
+               return -EINVAL;
        }
-       if (elts.prim < 0 || elts.prim > RADEON_PRIM_TYPE_3VRT_LINE_LIST) {
-               DRM_ERROR("buffer prim %d\n", elts.prim);
-               return DRM_ERR(EINVAL);
+       if (elts->prim < 0 || elts->prim > RADEON_PRIM_TYPE_3VRT_LINE_LIST) {
+               DRM_ERROR("buffer prim %d\n", elts->prim);
+               return -EINVAL;
        }
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       buf = dma->buflist[elts.idx];
+       buf = dma->buflist[elts->idx];
 
-       if (buf->filp != filp) {
+       if (buf->file_priv != file_priv) {
                DRM_ERROR("process %d using buffer owned by %p\n",
-                         DRM_CURRENTPID, buf->filp);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, buf->file_priv);
+               return -EINVAL;
        }
        if (buf->pending) {
-               DRM_ERROR("sending pending buffer %d\n", elts.idx);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("sending pending buffer %d\n", elts->idx);
+               return -EINVAL;
        }
 
-       count = (elts.end - elts.start) / sizeof(u16);
-       elts.start -= RADEON_INDEX_PRIM_OFFSET;
+       count = (elts->end - elts->start) / sizeof(u16);
+       elts->start -= RADEON_INDEX_PRIM_OFFSET;
 
-       if (elts.start & 0x7) {
-               DRM_ERROR("misaligned buffer 0x%x\n", elts.start);
-               return DRM_ERR(EINVAL);
+       if (elts->start & 0x7) {
+               DRM_ERROR("misaligned buffer 0x%x\n", elts->start);
+               return -EINVAL;
        }
-       if (elts.start < buf->used) {
-               DRM_ERROR("no header 0x%x - 0x%x\n", elts.start, buf->used);
-               return DRM_ERR(EINVAL);
+       if (elts->start < buf->used) {
+               DRM_ERROR("no header 0x%x - 0x%x\n", elts->start, buf->used);
+               return -EINVAL;
        }
 
-       buf->used = elts.end;
+       buf->used = elts->end;
 
        if (sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS) {
-               if (radeon_emit_state(dev_priv, filp_priv,
+               if (radeon_emit_state(dev_priv, file_priv,
                                      &sarea_priv->context_state,
                                      sarea_priv->tex_state,
                                      sarea_priv->dirty)) {
                        DRM_ERROR("radeon_emit_state failed\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
 
                sarea_priv->dirty &= ~(RADEON_UPLOAD_TEX0IMAGES |
@@ -2386,15 +2361,15 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
 
        /* Build up a prim_t record:
         */
-       prim.start = elts.start;
-       prim.finish = elts.end;
-       prim.prim = elts.prim;
+       prim.start = elts->start;
+       prim.finish = elts->end;
+       prim.prim = elts->prim;
        prim.offset = 0;        /* offset from start of dma buffers */
        prim.numverts = RADEON_MAX_VB_VERTS;    /* duh */
        prim.vc_format = dev_priv->sarea_priv->vc_format;
 
        radeon_cp_dispatch_indices(dev, buf, &prim);
-       if (elts.discard) {
+       if (elts->discard) {
                radeon_cp_discard_buffer(dev, buf);
        }
 
@@ -2402,52 +2377,44 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int radeon_cp_texture(DRM_IOCTL_ARGS)
+static int radeon_cp_texture(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_texture_t tex;
+       drm_radeon_texture_t *tex = data;
        drm_radeon_tex_image_t image;
        int ret;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(tex, (drm_radeon_texture_t __user *) data,
-                                sizeof(tex));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       if (tex.image == NULL) {
+       if (tex->image == NULL) {
                DRM_ERROR("null texture image!\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (DRM_COPY_FROM_USER(&image,
-                              (drm_radeon_tex_image_t __user *) tex.image,
+                              (drm_radeon_tex_image_t __user *) tex->image,
                               sizeof(image)))
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       ret = radeon_cp_dispatch_texture(filp, dev, &tex, &image);
+       ret = radeon_cp_dispatch_texture(dev, file_priv, tex, &image);
 
        COMMIT_RING();
        return ret;
 }
 
-static int radeon_cp_stipple(DRM_IOCTL_ARGS)
+static int radeon_cp_stipple(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_stipple_t stipple;
+       drm_radeon_stipple_t *stipple = data;
        u32 mask[32];
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(stipple, (drm_radeon_stipple_t __user *) data,
-                                sizeof(stipple));
-
-       if (DRM_COPY_FROM_USER(&mask, stipple.mask, 32 * sizeof(u32)))
-               return DRM_ERR(EFAULT);
+       if (DRM_COPY_FROM_USER(&mask, stipple->mask, 32 * sizeof(u32)))
+               return -EFAULT;
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
 
@@ -2457,57 +2424,53 @@ static int radeon_cp_stipple(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int radeon_cp_indirect(DRM_IOCTL_ARGS)
+static int radeon_cp_indirect(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
-       drm_radeon_indirect_t indirect;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
+       drm_radeon_indirect_t *indirect = data;
        RING_LOCALS;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(indirect,
-                                (drm_radeon_indirect_t __user *) data,
-                                sizeof(indirect));
-
        DRM_DEBUG("indirect: idx=%d s=%d e=%d d=%d\n",
-                 indirect.idx, indirect.start, indirect.end, indirect.discard);
+                 indirect->idx, indirect->start, indirect->end,
+                 indirect->discard);
 
-       if (indirect.idx < 0 || indirect.idx >= dma->buf_count) {
+       if (indirect->idx < 0 || indirect->idx >= dma->buf_count) {
                DRM_ERROR("buffer index %d (of %d max)\n",
-                         indirect.idx, dma->buf_count - 1);
-               return DRM_ERR(EINVAL);
+                         indirect->idx, dma->buf_count - 1);
+               return -EINVAL;
        }
 
-       buf = dma->buflist[indirect.idx];
+       buf = dma->buflist[indirect->idx];
 
-       if (buf->filp != filp) {
+       if (buf->file_priv != file_priv) {
                DRM_ERROR("process %d using buffer owned by %p\n",
-                         DRM_CURRENTPID, buf->filp);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, buf->file_priv);
+               return -EINVAL;
        }
        if (buf->pending) {
-               DRM_ERROR("sending pending buffer %d\n", indirect.idx);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("sending pending buffer %d\n", indirect->idx);
+               return -EINVAL;
        }
 
-       if (indirect.start < buf->used) {
+       if (indirect->start < buf->used) {
                DRM_ERROR("reusing indirect: start=0x%x actual=0x%x\n",
-                         indirect.start, buf->used);
-               return DRM_ERR(EINVAL);
+                         indirect->start, buf->used);
+               return -EINVAL;
        }
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       buf->used = indirect.end;
+       buf->used = indirect->end;
 
        /* Wait for the 3D stream to idle before the indirect buffer
         * containing 2D acceleration commands is processed.
@@ -2522,8 +2485,8 @@ static int radeon_cp_indirect(DRM_IOCTL_ARGS)
         * X server.  This is insecure and is thus only available to
         * privileged clients.
         */
-       radeon_cp_dispatch_indirect(dev, buf, indirect.start, indirect.end);
-       if (indirect.discard) {
+       radeon_cp_dispatch_indirect(dev, buf, indirect->start, indirect->end);
+       if (indirect->discard) {
                radeon_cp_discard_buffer(dev, buf);
        }
 
@@ -2531,78 +2494,71 @@ static int radeon_cp_indirect(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
+static int radeon_cp_vertex2(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_file_t *filp_priv;
        drm_radeon_sarea_t *sarea_priv;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
-       drm_radeon_vertex2_t vertex;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
+       drm_radeon_vertex2_t *vertex = data;
        int i;
        unsigned char laststate;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        sarea_priv = dev_priv->sarea_priv;
 
-       DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(vertex, (drm_radeon_vertex2_t __user *) data,
-                                sizeof(vertex));
-
        DRM_DEBUG("pid=%d index=%d discard=%d\n",
-                 DRM_CURRENTPID, vertex.idx, vertex.discard);
+                 DRM_CURRENTPID, vertex->idx, vertex->discard);
 
-       if (vertex.idx < 0 || vertex.idx >= dma->buf_count) {
+       if (vertex->idx < 0 || vertex->idx >= dma->buf_count) {
                DRM_ERROR("buffer index %d (of %d max)\n",
-                         vertex.idx, dma->buf_count - 1);
-               return DRM_ERR(EINVAL);
+                         vertex->idx, dma->buf_count - 1);
+               return -EINVAL;
        }
 
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       buf = dma->buflist[vertex.idx];
+       buf = dma->buflist[vertex->idx];
 
-       if (buf->filp != filp) {
+       if (buf->file_priv != file_priv) {
                DRM_ERROR("process %d using buffer owned by %p\n",
-                         DRM_CURRENTPID, buf->filp);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, buf->file_priv);
+               return -EINVAL;
        }
 
        if (buf->pending) {
-               DRM_ERROR("sending pending buffer %d\n", vertex.idx);
-               return DRM_ERR(EINVAL);
+               DRM_ERROR("sending pending buffer %d\n", vertex->idx);
+               return -EINVAL;
        }
 
        if (sarea_priv->nbox > RADEON_NR_SAREA_CLIPRECTS)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
-       for (laststate = 0xff, i = 0; i < vertex.nr_prims; i++) {
+       for (laststate = 0xff, i = 0; i < vertex->nr_prims; i++) {
                drm_radeon_prim_t prim;
                drm_radeon_tcl_prim_t tclprim;
 
-               if (DRM_COPY_FROM_USER(&prim, &vertex.prim[i], sizeof(prim)))
-                       return DRM_ERR(EFAULT);
+               if (DRM_COPY_FROM_USER(&prim, &vertex->prim[i], sizeof(prim)))
+                       return -EFAULT;
 
                if (prim.stateidx != laststate) {
                        drm_radeon_state_t state;
 
                        if (DRM_COPY_FROM_USER(&state,
-                                              &vertex.state[prim.stateidx],
+                                              &vertex->state[prim.stateidx],
                                               sizeof(state)))
-                               return DRM_ERR(EFAULT);
+                               return -EFAULT;
 
-                       if (radeon_emit_state2(dev_priv, filp_priv, &state)) {
+                       if (radeon_emit_state2(dev_priv, file_priv, &state)) {
                                DRM_ERROR("radeon_emit_state2 failed\n");
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
 
                        laststate = prim.stateidx;
@@ -2629,7 +2585,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
                        sarea_priv->nbox = 0;
        }
 
-       if (vertex.discard) {
+       if (vertex->discard) {
                radeon_cp_discard_buffer(dev, buf);
        }
 
@@ -2638,7 +2594,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
 }
 
 static int radeon_emit_packets(drm_radeon_private_t * dev_priv,
-                              drm_file_t * filp_priv,
+                              struct drm_file *file_priv,
                               drm_radeon_cmd_header_t header,
                               drm_radeon_kcmd_buffer_t *cmdbuf)
 {
@@ -2648,19 +2604,19 @@ static int radeon_emit_packets(drm_radeon_private_t * dev_priv,
        RING_LOCALS;
 
        if (id >= RADEON_MAX_STATE_PACKETS)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        sz = packet[id].len;
        reg = packet[id].start;
 
        if (sz * sizeof(int) > cmdbuf->bufsz) {
                DRM_ERROR("Packet size provided larger than data provided\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       if (radeon_check_and_fixup_packets(dev_priv, filp_priv, id, data)) {
+       if (radeon_check_and_fixup_packets(dev_priv, file_priv, id, data)) {
                DRM_ERROR("Packet verification failed\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        BEGIN_RING(sz + 1);
@@ -2748,7 +2704,7 @@ static __inline__ int radeon_emit_veclinear(drm_radeon_private_t *dev_priv,
        if (!sz)
                return 0;
        if (sz * 4 > cmdbuf->bufsz)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
        BEGIN_RING(5 + sz);
        OUT_RING_REG(RADEON_SE_TCL_STATE_FLUSH, 0);
@@ -2763,8 +2719,8 @@ static __inline__ int radeon_emit_veclinear(drm_radeon_private_t *dev_priv,
        return 0;
 }
 
-static int radeon_emit_packet3(drm_device_t * dev,
-                              drm_file_t * filp_priv,
+static int radeon_emit_packet3(struct drm_device * dev,
+                              struct drm_file *file_priv,
                               drm_radeon_kcmd_buffer_t *cmdbuf)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -2774,7 +2730,7 @@ static int radeon_emit_packet3(drm_device_t * dev,
 
        DRM_DEBUG("\n");
 
-       if ((ret = radeon_check_and_fixup_packet3(dev_priv, filp_priv,
+       if ((ret = radeon_check_and_fixup_packet3(dev_priv, file_priv,
                                                  cmdbuf, &cmdsz))) {
                DRM_ERROR("Packet verification failed\n");
                return ret;
@@ -2789,22 +2745,22 @@ static int radeon_emit_packet3(drm_device_t * dev,
        return 0;
 }
 
-static int radeon_emit_packet3_cliprect(drm_device_t *dev,
-                                       drm_file_t *filp_priv,
+static int radeon_emit_packet3_cliprect(struct drm_device *dev,
+                                       struct drm_file *file_priv,
                                        drm_radeon_kcmd_buffer_t *cmdbuf,
                                        int orig_nbox)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_clip_rect_t box;
+       struct drm_clip_rect box;
        unsigned int cmdsz;
        int ret;
-       drm_clip_rect_t __user *boxes = cmdbuf->boxes;
+       struct drm_clip_rect __user *boxes = cmdbuf->boxes;
        int i = 0;
        RING_LOCALS;
 
        DRM_DEBUG("\n");
 
-       if ((ret = radeon_check_and_fixup_packet3(dev_priv, filp_priv,
+       if ((ret = radeon_check_and_fixup_packet3(dev_priv, file_priv,
                                                  cmdbuf, &cmdsz))) {
                DRM_ERROR("Packet verification failed\n");
                return ret;
@@ -2816,7 +2772,7 @@ static int radeon_emit_packet3_cliprect(drm_device_t *dev,
        do {
                if (i < cmdbuf->nbox) {
                        if (DRM_COPY_FROM_USER(&box, &boxes[i], sizeof(box)))
-                               return DRM_ERR(EFAULT);
+                               return -EFAULT;
                        /* FIXME The second and subsequent times round
                         * this loop, send a WAIT_UNTIL_3D_IDLE before
                         * calling emit_clip_rect(). This fixes a
@@ -2851,7 +2807,7 @@ static int radeon_emit_packet3_cliprect(drm_device_t *dev,
        return 0;
 }
 
-static int radeon_emit_wait(drm_device_t * dev, int flags)
+static int radeon_emit_wait(struct drm_device * dev, int flags)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        RING_LOCALS;
@@ -2874,67 +2830,59 @@ static int radeon_emit_wait(drm_device_t * dev, int flags)
                ADVANCE_RING();
                break;
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        return 0;
 }
 
-static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
+static int radeon_cp_cmdbuf(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_file_t *filp_priv;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf = NULL;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf = NULL;
        int idx;
-       drm_radeon_kcmd_buffer_t cmdbuf;
+       drm_radeon_kcmd_buffer_t *cmdbuf = data;
        drm_radeon_cmd_header_t header;
        int orig_nbox, orig_bufsz;
        char *kbuf = NULL;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(cmdbuf,
-                                (drm_radeon_kcmd_buffer_t __user *) data,
-                                sizeof(cmdbuf));
-
        RING_SPACE_TEST_WITH_RETURN(dev_priv);
        VB_AGE_TEST_WITH_RETURN(dev_priv);
 
-       if (cmdbuf.bufsz > 64 * 1024 || cmdbuf.bufsz < 0) {
-               return DRM_ERR(EINVAL);
+       if (cmdbuf->bufsz > 64 * 1024 || cmdbuf->bufsz < 0) {
+               return -EINVAL;
        }
 
        /* Allocate an in-kernel area and copy in the cmdbuf.  Do this to avoid
         * races between checking values and using those values in other code,
         * and simply to avoid a lot of function calls to copy in data.
         */
-       orig_bufsz = cmdbuf.bufsz;
+       orig_bufsz = cmdbuf->bufsz;
        if (orig_bufsz != 0) {
-               kbuf = drm_alloc(cmdbuf.bufsz, DRM_MEM_DRIVER);
+               kbuf = drm_alloc(cmdbuf->bufsz, DRM_MEM_DRIVER);
                if (kbuf == NULL)
-                       return DRM_ERR(ENOMEM);
-               if (DRM_COPY_FROM_USER(kbuf, (void __user *)cmdbuf.buf,
-                                      cmdbuf.bufsz)) {
+                       return -ENOMEM;
+               if (DRM_COPY_FROM_USER(kbuf, (void __user *)cmdbuf->buf,
+                                      cmdbuf->bufsz)) {
                        drm_free(kbuf, orig_bufsz, DRM_MEM_DRIVER);
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                }
-               cmdbuf.buf = kbuf;
+               cmdbuf->buf = kbuf;
        }
 
-       orig_nbox = cmdbuf.nbox;
+       orig_nbox = cmdbuf->nbox;
 
        if (dev_priv->microcode_version == UCODE_R300) {
                int temp;
-               temp = r300_do_cp_cmdbuf(dev, filp, filp_priv, &cmdbuf);
+               temp = r300_do_cp_cmdbuf(dev, file_priv, cmdbuf);
 
                if (orig_bufsz != 0)
                        drm_free(kbuf, orig_bufsz, DRM_MEM_DRIVER);
@@ -2943,17 +2891,17 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
        }
 
        /* microcode_version != r300 */
-       while (cmdbuf.bufsz >= sizeof(header)) {
+       while (cmdbuf->bufsz >= sizeof(header)) {
 
-               header.i = *(int *)cmdbuf.buf;
-               cmdbuf.buf += sizeof(header);
-               cmdbuf.bufsz -= sizeof(header);
+               header.i = *(int *)cmdbuf->buf;
+               cmdbuf->buf += sizeof(header);
+               cmdbuf->bufsz -= sizeof(header);
 
                switch (header.header.cmd_type) {
                case RADEON_CMD_PACKET:
                        DRM_DEBUG("RADEON_CMD_PACKET\n");
                        if (radeon_emit_packets
-                           (dev_priv, filp_priv, header, &cmdbuf)) {
+                           (dev_priv, file_priv, header, cmdbuf)) {
                                DRM_ERROR("radeon_emit_packets failed\n");
                                goto err;
                        }
@@ -2961,7 +2909,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
 
                case RADEON_CMD_SCALARS:
                        DRM_DEBUG("RADEON_CMD_SCALARS\n");
-                       if (radeon_emit_scalars(dev_priv, header, &cmdbuf)) {
+                       if (radeon_emit_scalars(dev_priv, header, cmdbuf)) {
                                DRM_ERROR("radeon_emit_scalars failed\n");
                                goto err;
                        }
@@ -2969,7 +2917,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
 
                case RADEON_CMD_VECTORS:
                        DRM_DEBUG("RADEON_CMD_VECTORS\n");
-                       if (radeon_emit_vectors(dev_priv, header, &cmdbuf)) {
+                       if (radeon_emit_vectors(dev_priv, header, cmdbuf)) {
                                DRM_ERROR("radeon_emit_vectors failed\n");
                                goto err;
                        }
@@ -2985,9 +2933,10 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
                        }
 
                        buf = dma->buflist[idx];
-                       if (buf->filp != filp || buf->pending) {
+                       if (buf->file_priv != file_priv || buf->pending) {
                                DRM_ERROR("bad buffer %p %p %d\n",
-                                         buf->filp, filp, buf->pending);
+                                         buf->file_priv, file_priv,
+                                         buf->pending);
                                goto err;
                        }
 
@@ -2996,7 +2945,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
 
                case RADEON_CMD_PACKET3:
                        DRM_DEBUG("RADEON_CMD_PACKET3\n");
-                       if (radeon_emit_packet3(dev, filp_priv, &cmdbuf)) {
+                       if (radeon_emit_packet3(dev, file_priv, cmdbuf)) {
                                DRM_ERROR("radeon_emit_packet3 failed\n");
                                goto err;
                        }
@@ -3005,7 +2954,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
                case RADEON_CMD_PACKET3_CLIP:
                        DRM_DEBUG("RADEON_CMD_PACKET3_CLIP\n");
                        if (radeon_emit_packet3_cliprect
-                           (dev, filp_priv, &cmdbuf, orig_nbox)) {
+                           (dev, file_priv, cmdbuf, orig_nbox)) {
                                DRM_ERROR("radeon_emit_packet3_clip failed\n");
                                goto err;
                        }
@@ -3013,7 +2962,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
 
                case RADEON_CMD_SCALARS2:
                        DRM_DEBUG("RADEON_CMD_SCALARS2\n");
-                       if (radeon_emit_scalars2(dev_priv, header, &cmdbuf)) {
+                       if (radeon_emit_scalars2(dev_priv, header, cmdbuf)) {
                                DRM_ERROR("radeon_emit_scalars2 failed\n");
                                goto err;
                        }
@@ -3028,7 +2977,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
                        break;
                case RADEON_CMD_VECLINEAR:
                        DRM_DEBUG("RADEON_CMD_VECLINEAR\n");
-                       if (radeon_emit_veclinear(dev_priv, header, &cmdbuf)) {
+                       if (radeon_emit_veclinear(dev_priv, header, cmdbuf)) {
                                DRM_ERROR("radeon_emit_veclinear failed\n");
                                goto err;
                        }
@@ -3037,7 +2986,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
                default:
                        DRM_ERROR("bad cmd_type %d at %p\n",
                                  header.header.cmd_type,
-                                 cmdbuf.buf - sizeof(header));
+                                 cmdbuf->buf - sizeof(header));
                        goto err;
                }
        }
@@ -3052,27 +3001,23 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
       err:
        if (orig_bufsz != 0)
                drm_free(kbuf, orig_bufsz, DRM_MEM_DRIVER);
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
-static int radeon_cp_getparam(DRM_IOCTL_ARGS)
+static int radeon_cp_getparam(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_radeon_getparam_t param;
+       drm_radeon_getparam_t *param = data;
        int value;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(param, (drm_radeon_getparam_t __user *) data,
-                                sizeof(param));
-
        DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
 
-       switch (param.param) {
+       switch (param->param) {
        case RADEON_PARAM_GART_BUFFER_OFFSET:
                value = dev_priv->gart_buffers_offset;
                break;
@@ -3119,7 +3064,7 @@ static int radeon_cp_getparam(DRM_IOCTL_ARGS)
                break;
        case RADEON_PARAM_SCRATCH_OFFSET:
                if (!dev_priv->writeback_works)
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                value = RADEON_SCRATCH_REG_OFFSET;
                break;
        
@@ -3135,48 +3080,42 @@ static int radeon_cp_getparam(DRM_IOCTL_ARGS)
                value = radeon_vblank_crtc_get(dev);
                break;
        default:
-               DRM_DEBUG( "Invalid parameter %d\n", param.param );
-               return DRM_ERR(EINVAL);
+               DRM_DEBUG( "Invalid parameter %d\n", param->param );
+               return -EINVAL;
        }
 
-       if (DRM_COPY_TO_USER(param.value, &value, sizeof(int))) {
+       if (DRM_COPY_TO_USER(param->value, &value, sizeof(int))) {
                DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        return 0;
 }
 
-static int radeon_cp_setparam(DRM_IOCTL_ARGS)
+static int radeon_cp_setparam(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_radeon_private_t *dev_priv = dev->dev_private;
-       drm_file_t *filp_priv;
-       drm_radeon_setparam_t sp;
+       drm_radeon_setparam_t *sp = data;
        struct drm_radeon_driver_file_fields *radeon_priv;
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(sp, (drm_radeon_setparam_t __user *) data,
-                                sizeof(sp));
-
-       switch (sp.param) {
+       switch (sp->param) {
        case RADEON_SETPARAM_FB_LOCATION:
-               radeon_priv = filp_priv->driver_priv;
-               radeon_priv->radeon_fb_delta = dev_priv->fb_location - sp.value;
+               radeon_priv = file_priv->driver_priv;
+               radeon_priv->radeon_fb_delta = dev_priv->fb_location -
+                   sp->value;
                break;
        case RADEON_SETPARAM_SWITCH_TILING:
-               if (sp.value == 0) {
+               if (sp->value == 0) {
                        DRM_DEBUG("color tiling disabled\n");
                        dev_priv->front_pitch_offset &= ~RADEON_DST_TILE_MACRO;
                        dev_priv->back_pitch_offset &= ~RADEON_DST_TILE_MACRO;
                        dev_priv->sarea_priv->tiling_enabled = 0;
-               } else if (sp.value == 1) {
+               } else if (sp->value == 1) {
                        DRM_DEBUG("color tiling enabled\n");
                        dev_priv->front_pitch_offset |= RADEON_DST_TILE_MACRO;
                        dev_priv->back_pitch_offset |= RADEON_DST_TILE_MACRO;
@@ -3184,23 +3123,23 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS)
                }
                break;
        case RADEON_SETPARAM_PCIGART_LOCATION:
-               dev_priv->pcigart_offset = sp.value;
+               dev_priv->pcigart_offset = sp->value;
                dev_priv->pcigart_offset_set = 1;
                break;
        case RADEON_SETPARAM_NEW_MEMMAP:
-               dev_priv->new_memmap = sp.value;
+               dev_priv->new_memmap = sp->value;
                break;
        case RADEON_SETPARAM_PCIGART_TABLE_SIZE:
-               dev_priv->gart_info.table_size = sp.value;
+               dev_priv->gart_info.table_size = sp->value;
                if (dev_priv->gart_info.table_size < RADEON_PCIGART_TABLE_SIZE)
                        dev_priv->gart_info.table_size = RADEON_PCIGART_TABLE_SIZE;
                break;
        case RADEON_SETPARAM_VBLANK_CRTC:
-               return radeon_vblank_crtc_set(dev, sp.value);
+               return radeon_vblank_crtc_set(dev, sp->value);
                break;
        default:
-               DRM_DEBUG("Invalid parameter %d\n", sp.param);
-               return DRM_ERR(EINVAL);
+               DRM_DEBUG("Invalid parameter %d\n", sp->param);
+               return -EINVAL;
        }
 
        return 0;
@@ -3213,18 +3152,19 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS)
  *
  * DRM infrastructure takes care of reclaiming dma buffers.
  */
-void radeon_driver_preclose(drm_device_t * dev, DRMFILE filp)
+void radeon_driver_preclose(struct drm_device * dev,
+                           struct drm_file *file_priv)
 {
        if (dev->dev_private) {
                drm_radeon_private_t *dev_priv = dev->dev_private;
                dev_priv->page_flipping = 0;
-               radeon_mem_release(filp, dev_priv->gart_heap);
-               radeon_mem_release(filp, dev_priv->fb_heap);
-               radeon_surfaces_release(filp, dev_priv);
+               radeon_mem_release(file_priv, dev_priv->gart_heap);
+               radeon_mem_release(file_priv, dev_priv->fb_heap);
+               radeon_surfaces_release(file_priv, dev_priv);
        }
 }
 
-void radeon_driver_lastclose(drm_device_t * dev)
+void radeon_driver_lastclose(struct drm_device * dev)
 {
        if (dev->dev_private) {
                drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -3237,7 +3177,7 @@ void radeon_driver_lastclose(drm_device_t * dev)
        radeon_do_release(dev);
 }
 
-int radeon_driver_open(drm_device_t * dev, drm_file_t * filp_priv)
+int radeon_driver_open(struct drm_device * dev, struct drm_file *file_priv)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
        struct drm_radeon_driver_file_fields *radeon_priv;
@@ -3250,7 +3190,7 @@ int radeon_driver_open(drm_device_t * dev, drm_file_t * filp_priv)
        if (!radeon_priv)
                return -ENOMEM;
 
-       filp_priv->driver_priv = radeon_priv;
+       file_priv->driver_priv = radeon_priv;
 
        if (dev_priv)
                radeon_priv->radeon_fb_delta = dev_priv->fb_location;
@@ -3259,42 +3199,42 @@ int radeon_driver_open(drm_device_t * dev, drm_file_t * filp_priv)
        return 0;
 }
 
-void radeon_driver_postclose(drm_device_t * dev, drm_file_t * filp_priv)
+void radeon_driver_postclose(struct drm_device * dev, struct drm_file *file_priv)
 {
        struct drm_radeon_driver_file_fields *radeon_priv =
-           filp_priv->driver_priv;
+           file_priv->driver_priv;
 
        drm_free(radeon_priv, sizeof(*radeon_priv), DRM_MEM_FILES);
 }
 
-drm_ioctl_desc_t radeon_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_RADEON_CP_INIT)] = {radeon_cp_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_RADEON_CP_START)] = {radeon_cp_start, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_RADEON_CP_STOP)] = {radeon_cp_stop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_RADEON_CP_RESET)] = {radeon_cp_reset, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_RADEON_CP_IDLE)] = {radeon_cp_idle, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_CP_RESUME)] = {radeon_cp_resume, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_RESET)] = {radeon_engine_reset, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_FULLSCREEN)] = {radeon_fullscreen, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_SWAP)] = {radeon_cp_swap, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_CLEAR)] = {radeon_cp_clear, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_VERTEX)] = {radeon_cp_vertex, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_INDICES)] = {radeon_cp_indices, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_TEXTURE)] = {radeon_cp_texture, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_STIPPLE)] = {radeon_cp_stipple, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_INDIRECT)] = {radeon_cp_indirect, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_RADEON_VERTEX2)] = {radeon_cp_vertex2, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_CMDBUF)] = {radeon_cp_cmdbuf, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_GETPARAM)] = {radeon_cp_getparam, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_FLIP)] = {radeon_cp_flip, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_ALLOC)] = {radeon_mem_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_FREE)] = {radeon_mem_free, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_INIT_HEAP)] = {radeon_mem_init_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_RADEON_IRQ_EMIT)] = {radeon_irq_emit, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_IRQ_WAIT)] = {radeon_irq_wait, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_SETPARAM)] = {radeon_cp_setparam, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_SURF_ALLOC)] = {radeon_surface_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_RADEON_SURF_FREE)] = {radeon_surface_free, DRM_AUTH}
+struct drm_ioctl_desc radeon_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_RADEON_CP_INIT, radeon_cp_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_RADEON_CP_START, radeon_cp_start, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_RADEON_CP_STOP, radeon_cp_stop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_RADEON_CP_RESET, radeon_cp_reset, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_RADEON_CP_IDLE, radeon_cp_idle, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_CP_RESUME, radeon_cp_resume, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_RESET, radeon_engine_reset, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_FULLSCREEN, radeon_fullscreen, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_SWAP, radeon_cp_swap, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_CLEAR, radeon_cp_clear, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_VERTEX, radeon_cp_vertex, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_INDICES, radeon_cp_indices, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_TEXTURE, radeon_cp_texture, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_STIPPLE, radeon_cp_stipple, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_INDIRECT, radeon_cp_indirect, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_RADEON_VERTEX2, radeon_cp_vertex2, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_CMDBUF, radeon_cp_cmdbuf, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_GETPARAM, radeon_cp_getparam, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_FLIP, radeon_cp_flip, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_ALLOC, radeon_mem_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_FREE, radeon_mem_free, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_INIT_HEAP, radeon_mem_init_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_RADEON_IRQ_EMIT, radeon_irq_emit, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_IRQ_WAIT, radeon_irq_wait, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_SETPARAM, radeon_cp_setparam, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_SURF_ALLOC, radeon_surface_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_RADEON_SURF_FREE, radeon_surface_free, DRM_AUTH)
 };
 
 int radeon_max_ioctl = DRM_ARRAY_SIZE(radeon_ioctls);
index 9a3ae1f..32ac5ac 100644 (file)
@@ -32,7 +32,7 @@
 #define SAVAGE_EVENT_USEC_TIMEOUT      5000000 /* 5s */
 #define SAVAGE_FREELIST_DEBUG          0
 
-static int savage_do_cleanup_bci(drm_device_t *dev);
+static int savage_do_cleanup_bci(struct drm_device *dev);
 
 static int
 savage_bci_wait_fifo_shadow(drm_savage_private_t *dev_priv, unsigned int n)
@@ -60,7 +60,7 @@ savage_bci_wait_fifo_shadow(drm_savage_private_t *dev_priv, unsigned int n)
        DRM_ERROR("failed!\n");
        DRM_INFO("   status=0x%08x, threshold=0x%08x\n", status, threshold);
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 static int
@@ -81,7 +81,7 @@ savage_bci_wait_fifo_s3d(drm_savage_private_t *dev_priv, unsigned int n)
        DRM_ERROR("failed!\n");
        DRM_INFO("   status=0x%08x\n", status);
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 static int
@@ -102,7 +102,7 @@ savage_bci_wait_fifo_s4(drm_savage_private_t *dev_priv, unsigned int n)
        DRM_ERROR("failed!\n");
        DRM_INFO("   status=0x%08x\n", status);
 #endif
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 /*
@@ -136,7 +136,7 @@ savage_bci_wait_event_shadow(drm_savage_private_t *dev_priv, uint16_t e)
        DRM_INFO("   status=0x%08x, e=0x%04x\n", status, e);
 #endif
 
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 static int
@@ -158,7 +158,7 @@ savage_bci_wait_event_reg(drm_savage_private_t *dev_priv, uint16_t e)
        DRM_INFO("   status=0x%08x, e=0x%04x\n", status, e);
 #endif
 
-       return DRM_ERR(EBUSY);
+       return -EBUSY;
 }
 
 uint16_t savage_bci_emit_event(drm_savage_private_t *dev_priv,
@@ -203,11 +203,11 @@ uint16_t savage_bci_emit_event(drm_savage_private_t *dev_priv,
 /*
  * Freelist management
  */
-static int savage_freelist_init(drm_device_t *dev)
+static int savage_freelist_init(struct drm_device *dev)
 {
        drm_savage_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *buf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *buf;
        drm_savage_buf_priv_t *entry;
        int i;
        DRM_DEBUG("count=%d\n", dma->buf_count);
@@ -236,7 +236,7 @@ static int savage_freelist_init(drm_device_t *dev)
        return 0;
 }
 
-static drm_buf_t *savage_freelist_get(drm_device_t *dev)
+static struct drm_buf *savage_freelist_get(struct drm_device *dev)
 {
        drm_savage_private_t *dev_priv = dev->dev_private;
        drm_savage_buf_priv_t *tail = dev_priv->tail.prev;
@@ -269,7 +269,7 @@ static drm_buf_t *savage_freelist_get(drm_device_t *dev)
        return NULL;
 }
 
-void savage_freelist_put(drm_device_t *dev, drm_buf_t *buf)
+void savage_freelist_put(struct drm_device *dev, struct drm_buf *buf)
 {
        drm_savage_private_t *dev_priv = dev->dev_private;
        drm_savage_buf_priv_t *entry = buf->dev_private, *prev, *next;
@@ -301,7 +301,7 @@ static int savage_dma_init(drm_savage_private_t *dev_priv)
        dev_priv->dma_pages = drm_alloc(sizeof(drm_savage_dma_page_t) *
                                        dev_priv->nr_dma_pages, DRM_MEM_DRIVER);
        if (dev_priv->dma_pages == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        for (i = 0; i < dev_priv->nr_dma_pages; ++i) {
                SET_AGE(&dev_priv->dma_pages[i].age, 0, 0);
@@ -535,13 +535,13 @@ static void savage_fake_dma_flush(drm_savage_private_t *dev_priv)
        dev_priv->first_dma_page = dev_priv->current_dma_page = 0;
 }
 
-int savage_driver_load(drm_device_t *dev, unsigned long chipset)
+int savage_driver_load(struct drm_device *dev, unsigned long chipset)
 {
        drm_savage_private_t *dev_priv;
 
        dev_priv = drm_alloc(sizeof(drm_savage_private_t), DRM_MEM_DRIVER);
        if (dev_priv == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        memset(dev_priv, 0, sizeof(drm_savage_private_t));
        dev->dev_private = (void *)dev_priv;
@@ -557,7 +557,7 @@ int savage_driver_load(drm_device_t *dev, unsigned long chipset)
  * in drm_addmap. Therefore we add them manually before the maps are
  * initialized, and tear them down on last close.
  */
-int savage_driver_firstopen(drm_device_t *dev)
+int savage_driver_firstopen(struct drm_device *dev)
 {
        drm_savage_private_t *dev_priv = dev->dev_private;
        unsigned long mmio_base, fb_base, fb_size, aperture_base;
@@ -654,7 +654,7 @@ int savage_driver_firstopen(drm_device_t *dev)
 /*
  * Delete MTRRs and free device-private data.
  */
-void savage_driver_lastclose(drm_device_t *dev)
+void savage_driver_lastclose(struct drm_device *dev)
 {
        drm_savage_private_t *dev_priv = dev->dev_private;
        int i;
@@ -666,7 +666,7 @@ void savage_driver_lastclose(drm_device_t *dev)
                                     dev_priv->mtrr[i].size, DRM_MTRR_WC);
 }
 
-int savage_driver_unload(drm_device_t *dev)
+int savage_driver_unload(struct drm_device *dev)
 {
        drm_savage_private_t *dev_priv = dev->dev_private;
 
@@ -675,22 +675,22 @@ int savage_driver_unload(drm_device_t *dev)
        return 0;
 }
 
-static int savage_do_init_bci(drm_device_t *dev, drm_savage_init_t *init)
+static int savage_do_init_bci(struct drm_device *dev, drm_savage_init_t *init)
 {
        drm_savage_private_t *dev_priv = dev->dev_private;
 
        if (init->fb_bpp != 16 && init->fb_bpp != 32) {
                DRM_ERROR("invalid frame buffer bpp %d!\n", init->fb_bpp);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        if (init->depth_bpp != 16 && init->depth_bpp != 32) {
                DRM_ERROR("invalid depth buffer bpp %d!\n", init->fb_bpp);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        if (init->dma_type != SAVAGE_DMA_AGP &&
            init->dma_type != SAVAGE_DMA_PCI) {
                DRM_ERROR("invalid dma memory type %d!\n", init->dma_type);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->cob_size = init->cob_size;
@@ -714,14 +714,14 @@ static int savage_do_init_bci(drm_device_t *dev, drm_savage_init_t *init)
        if (!dev_priv->sarea) {
                DRM_ERROR("could not find sarea!\n");
                savage_do_cleanup_bci(dev);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        if (init->status_offset != 0) {
                dev_priv->status = drm_core_findmap(dev, init->status_offset);
                if (!dev_priv->status) {
                        DRM_ERROR("could not find shadow status region!\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        } else {
                dev_priv->status = NULL;
@@ -733,13 +733,13 @@ static int savage_do_init_bci(drm_device_t *dev, drm_savage_init_t *init)
                if (!dev->agp_buffer_map) {
                        DRM_ERROR("could not find DMA buffer region!\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                drm_core_ioremap(dev->agp_buffer_map, dev);
                if (!dev->agp_buffer_map) {
                        DRM_ERROR("failed to ioremap DMA buffer region!\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
        }
        if (init->agp_textures_offset) {
@@ -748,7 +748,7 @@ static int savage_do_init_bci(drm_device_t *dev, drm_savage_init_t *init)
                if (!dev_priv->agp_textures) {
                        DRM_ERROR("could not find agp texture region!\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        } else {
                dev_priv->agp_textures = NULL;
@@ -759,39 +759,39 @@ static int savage_do_init_bci(drm_device_t *dev, drm_savage_init_t *init)
                        DRM_ERROR("command DMA not supported on "
                                  "Savage3D/MX/IX.\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                if (dev->dma && dev->dma->buflist) {
                        DRM_ERROR("command and vertex DMA not supported "
                                  "at the same time.\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                dev_priv->cmd_dma = drm_core_findmap(dev, init->cmd_dma_offset);
                if (!dev_priv->cmd_dma) {
                        DRM_ERROR("could not find command DMA region!\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                if (dev_priv->dma_type == SAVAGE_DMA_AGP) {
                        if (dev_priv->cmd_dma->type != _DRM_AGP) {
                                DRM_ERROR("AGP command DMA region is not a "
                                          "_DRM_AGP map!\n");
                                savage_do_cleanup_bci(dev);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        drm_core_ioremap(dev_priv->cmd_dma, dev);
                        if (!dev_priv->cmd_dma->handle) {
                                DRM_ERROR("failed to ioremap command "
                                          "DMA region!\n");
                                savage_do_cleanup_bci(dev);
-                               return DRM_ERR(ENOMEM);
+                               return -ENOMEM;
                        }
                } else if (dev_priv->cmd_dma->type != _DRM_CONSISTENT) {
                        DRM_ERROR("PCI command DMA region is not a "
                                  "_DRM_CONSISTENT map!\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        } else {
                dev_priv->cmd_dma = NULL;
@@ -808,7 +808,7 @@ static int savage_do_init_bci(drm_device_t *dev, drm_savage_init_t *init)
                if (!dev_priv->fake_dma.handle) {
                        DRM_ERROR("could not allocate faked DMA buffer!\n");
                        savage_do_cleanup_bci(dev);
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
                }
                dev_priv->cmd_dma = &dev_priv->fake_dma;
                dev_priv->dma_flush = savage_fake_dma_flush;
@@ -885,19 +885,19 @@ static int savage_do_init_bci(drm_device_t *dev, drm_savage_init_t *init)
        if (savage_freelist_init(dev) < 0) {
                DRM_ERROR("could not initialize freelist\n");
                savage_do_cleanup_bci(dev);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        if (savage_dma_init(dev_priv) <  0) {
                DRM_ERROR("could not initialize command DMA\n");
                savage_do_cleanup_bci(dev);
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        return 0;
 }
 
-static int savage_do_cleanup_bci(drm_device_t *dev)
+static int savage_do_cleanup_bci(struct drm_device *dev)
 {
        drm_savage_private_t *dev_priv = dev->dev_private;
 
@@ -927,59 +927,46 @@ static int savage_do_cleanup_bci(drm_device_t *dev)
        return 0;
 }
 
-static int savage_bci_init(DRM_IOCTL_ARGS)
+static int savage_bci_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_savage_init_t init;
+       drm_savage_init_t *init = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_savage_init_t __user *)data,
-                                sizeof(init));
-
-       switch (init.func) {
+       switch (init->func) {
        case SAVAGE_INIT_BCI:
-               return savage_do_init_bci(dev, &init);
+               return savage_do_init_bci(dev, init);
        case SAVAGE_CLEANUP_BCI:
                return savage_do_cleanup_bci(dev);
        }
 
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 
-static int savage_bci_event_emit(DRM_IOCTL_ARGS)
+static int savage_bci_event_emit(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_savage_private_t *dev_priv = dev->dev_private;
-       drm_savage_event_emit_t event;
+       drm_savage_event_emit_t *event = data;
 
        DRM_DEBUG("\n");
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(event, (drm_savage_event_emit_t __user *)data,
-                                sizeof(event));
+       event->count = savage_bci_emit_event(dev_priv, event->flags);
+       event->count |= dev_priv->event_wrap << 16;
 
-       event.count = savage_bci_emit_event(dev_priv, event.flags);
-       event.count |= dev_priv->event_wrap << 16;
-       DRM_COPY_TO_USER_IOCTL((drm_savage_event_emit_t __user *)data,
-                              event, sizeof(event));
        return 0;
 }
 
-static int savage_bci_event_wait(DRM_IOCTL_ARGS)
+static int savage_bci_event_wait(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_savage_private_t *dev_priv = dev->dev_private;
-       drm_savage_event_wait_t event;
+       drm_savage_event_wait_t *event = data;
        unsigned int event_e, hw_e;
        unsigned int event_w, hw_w;
 
        DRM_DEBUG("\n");
 
-       DRM_COPY_FROM_USER_IOCTL(event, (drm_savage_event_wait_t __user *)data,
-                                sizeof(event));
-
        UPDATE_EVENT_COUNTER();
        if (dev_priv->status_ptr)
                hw_e = dev_priv->status_ptr[1] & 0xffff;
@@ -989,8 +976,8 @@ static int savage_bci_event_wait(DRM_IOCTL_ARGS)
        if (hw_e > dev_priv->event_counter)
                hw_w--; /* hardware hasn't passed the last wrap yet */
 
-       event_e = event.count & 0xffff;
-       event_w = event.count >> 16;
+       event_e = event->count & 0xffff;
+       event_w = event->count >> 16;
 
        /* Don't need to wait if
         * - event counter wrapped since the event was emitted or
@@ -1006,71 +993,68 @@ static int savage_bci_event_wait(DRM_IOCTL_ARGS)
  * DMA buffer management
  */
 
-static int savage_bci_get_buffers(DRMFILE filp, drm_device_t *dev, drm_dma_t *d)
+static int savage_bci_get_buffers(struct drm_device *dev,
+                                 struct drm_file *file_priv,
+                                 struct drm_dma *d)
 {
-       drm_buf_t *buf;
+       struct drm_buf *buf;
        int i;
 
        for (i = d->granted_count; i < d->request_count; i++) {
                buf = savage_freelist_get(dev);
                if (!buf)
-                       return DRM_ERR(EAGAIN);
+                       return -EAGAIN;
 
-               buf->filp = filp;
+               buf->file_priv = file_priv;
 
                if (DRM_COPY_TO_USER(&d->request_indices[i],
                                     &buf->idx, sizeof(buf->idx)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
                if (DRM_COPY_TO_USER(&d->request_sizes[i],
                                     &buf->total, sizeof(buf->total)))
-                       return DRM_ERR(EFAULT);
+                       return -EFAULT;
 
                d->granted_count++;
        }
        return 0;
 }
 
-int savage_bci_buffers(DRM_IOCTL_ARGS)
+int savage_bci_buffers(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_device_dma_t *dma = dev->dma;
-       drm_dma_t d;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_dma *d = data;
        int ret = 0;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(d, (drm_dma_t __user *)data, sizeof(d));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        /* Please don't send us buffers.
         */
-       if (d.send_count != 0) {
+       if (d->send_count != 0) {
                DRM_ERROR("Process %d trying to send %d buffers via drmDMA\n",
-                         DRM_CURRENTPID, d.send_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->send_count);
+               return -EINVAL;
        }
 
        /* We'll send you buffers.
         */
-       if (d.request_count < 0 || d.request_count > dma->buf_count) {
+       if (d->request_count < 0 || d->request_count > dma->buf_count) {
                DRM_ERROR("Process %d trying to get %d buffers (of %d max)\n",
-                         DRM_CURRENTPID, d.request_count, dma->buf_count);
-               return DRM_ERR(EINVAL);
+                         DRM_CURRENTPID, d->request_count, dma->buf_count);
+               return -EINVAL;
        }
 
-       d.granted_count = 0;
+       d->granted_count = 0;
 
-       if (d.request_count) {
-               ret = savage_bci_get_buffers(filp, dev, &d);
+       if (d->request_count) {
+               ret = savage_bci_get_buffers(dev, file_priv, d);
        }
 
-       DRM_COPY_TO_USER_IOCTL((drm_dma_t __user *)data, d, sizeof(d));
-
        return ret;
 }
 
-void savage_reclaim_buffers(drm_device_t *dev, DRMFILE filp)
+void savage_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv)
 {
-       drm_device_dma_t *dma = dev->dma;
+       struct drm_device_dma *dma = dev->dma;
        drm_savage_private_t *dev_priv = dev->dev_private;
        int i;
 
@@ -1084,10 +1068,10 @@ void savage_reclaim_buffers(drm_device_t *dev, DRMFILE filp)
        /*i830_flush_queue(dev);*/
 
        for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[i];
+               struct drm_buf *buf = dma->buflist[i];
                drm_savage_buf_priv_t *buf_priv = buf->dev_private;
 
-               if (buf->filp == filp && buf_priv &&
+               if (buf->file_priv == file_priv && buf_priv &&
                    buf_priv->next == NULL && buf_priv->prev == NULL) {
                        uint16_t event;
                        DRM_DEBUG("reclaimed from client\n");
@@ -1097,14 +1081,14 @@ void savage_reclaim_buffers(drm_device_t *dev, DRMFILE filp)
                }
        }
 
-       drm_core_reclaim_buffers(dev, filp);
+       drm_core_reclaim_buffers(dev, file_priv);
 }
 
-drm_ioctl_desc_t savage_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_SAVAGE_BCI_INIT)] = {savage_bci_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_SAVAGE_BCI_CMDBUF)] = {savage_bci_cmdbuf, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SAVAGE_BCI_EVENT_EMIT)] = {savage_bci_event_emit, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SAVAGE_BCI_EVENT_WAIT)] = {savage_bci_event_wait, DRM_AUTH},
+struct drm_ioctl_desc savage_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_SAVAGE_BCI_INIT, savage_bci_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_SAVAGE_BCI_CMDBUF, savage_bci_cmdbuf, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SAVAGE_BCI_EVENT_EMIT, savage_bci_event_emit, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SAVAGE_BCI_EVENT_WAIT, savage_bci_event_wait, DRM_AUTH),
 };
 
 int savage_max_ioctl = DRM_ARRAY_SIZE(savage_ioctls);
index 6526c9a..b960d55 100644 (file)
@@ -47,7 +47,7 @@
 typedef struct _drm_savage_sarea {
        /* LRU lists for texture memory in agp space and on the card.
         */
-       drm_tex_region_t texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS+1];
+       struct drm_tex_region texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS+1];
        unsigned int texAge[SAVAGE_NR_TEX_HEAPS];
 
        /* Mechanism to validate card state.
@@ -112,7 +112,7 @@ typedef struct drm_savage_cmdbuf {
        unsigned int vb_size;   /* size of client vertex buffer in bytes */
        unsigned int vb_stride; /* stride of vertices in 32bit words */
                                /* boxes in client's address space */
-       drm_clip_rect_t __user *box_addr;
+       struct drm_clip_rect __user *box_addr;
        unsigned int nbox;      /* number of clipping boxes */
 } drm_savage_cmdbuf_t;
 
index 88c571e..d86bac0 100644 (file)
@@ -58,7 +58,7 @@ typedef struct drm_savage_buf_priv {
        struct drm_savage_buf_priv *next;
        struct drm_savage_buf_priv *prev;
        drm_savage_age_t age;
-       drm_buf_t *buf;
+       struct drm_buf *buf;
 } drm_savage_buf_priv_t;
 
 typedef struct drm_savage_dma_page {
@@ -104,7 +104,7 @@ enum savage_family {
        S3_LAST
 };
 
-extern drm_ioctl_desc_t savage_ioctls[];
+extern struct drm_ioctl_desc savage_ioctls[];
 extern int savage_max_ioctl;
 
 #define S3_SAVAGE3D_SERIES(chip)  ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE_MX))
@@ -192,33 +192,34 @@ typedef struct drm_savage_private {
        /* Err, there is a macro wait_event in include/linux/wait.h.
         * Avoid unwanted macro expansion. */
        void (*emit_clip_rect)(struct drm_savage_private *dev_priv,
-                              const drm_clip_rect_t *pbox);
+                              const struct drm_clip_rect *pbox);
        void (*dma_flush)(struct drm_savage_private *dev_priv);
 } drm_savage_private_t;
 
 /* ioctls */
-extern int savage_bci_cmdbuf(DRM_IOCTL_ARGS);
-extern int savage_bci_buffers(DRM_IOCTL_ARGS);
+extern int savage_bci_cmdbuf(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int savage_bci_buffers(struct drm_device *dev, void *data, struct drm_file *file_priv);
 
 /* BCI functions */
 extern uint16_t savage_bci_emit_event(drm_savage_private_t *dev_priv,
                                      unsigned int flags);
-extern void savage_freelist_put(drm_device_t *dev, drm_buf_t *buf);
+extern void savage_freelist_put(struct drm_device *dev, struct drm_buf *buf);
 extern void savage_dma_reset(drm_savage_private_t *dev_priv);
 extern void savage_dma_wait(drm_savage_private_t *dev_priv, unsigned int page);
 extern uint32_t *savage_dma_alloc(drm_savage_private_t *dev_priv,
                                  unsigned int n);
-extern int savage_driver_load(drm_device_t *dev, unsigned long chipset);
-extern int savage_driver_firstopen(drm_device_t *dev);
-extern void savage_driver_lastclose(drm_device_t *dev);
-extern int savage_driver_unload(drm_device_t *dev);
-extern void savage_reclaim_buffers(drm_device_t *dev, DRMFILE filp);
+extern int savage_driver_load(struct drm_device *dev, unsigned long chipset);
+extern int savage_driver_firstopen(struct drm_device *dev);
+extern void savage_driver_lastclose(struct drm_device *dev);
+extern int savage_driver_unload(struct drm_device *dev);
+extern void savage_reclaim_buffers(struct drm_device *dev,
+                                  struct drm_file *file_priv);
 
 /* state functions */
 extern void savage_emit_clip_rect_s3d(drm_savage_private_t *dev_priv,
-                                     const drm_clip_rect_t *pbox);
+                                     const struct drm_clip_rect *pbox);
 extern void savage_emit_clip_rect_s4(drm_savage_private_t *dev_priv,
-                                    const drm_clip_rect_t *pbox);
+                                    const struct drm_clip_rect *pbox);
 
 #define SAVAGE_FB_SIZE_S3      0x01000000      /*  16MB */
 #define SAVAGE_FB_SIZE_S4      0x02000000      /*  32MB */
index acc98f8..dd59334 100644 (file)
@@ -27,7 +27,7 @@
 #include "savage_drv.h"
 
 void savage_emit_clip_rect_s3d(drm_savage_private_t *dev_priv,
-                              const drm_clip_rect_t *pbox)
+                              const struct drm_clip_rect *pbox)
 {
        uint32_t scstart = dev_priv->state.s3d.new_scstart;
        uint32_t scend   = dev_priv->state.s3d.new_scend;
@@ -53,7 +53,7 @@ void savage_emit_clip_rect_s3d(drm_savage_private_t *dev_priv,
 }
 
 void savage_emit_clip_rect_s4(drm_savage_private_t *dev_priv,
-                             const drm_clip_rect_t *pbox)
+                             const struct drm_clip_rect *pbox)
 {
        uint32_t drawctrl0 = dev_priv->state.s4.new_drawctrl0;
        uint32_t drawctrl1 = dev_priv->state.s4.new_drawctrl1;
@@ -83,7 +83,7 @@ static int savage_verify_texaddr(drm_savage_private_t *dev_priv, int unit,
 {
        if ((addr & 6) != 2) { /* reserved bits */
                DRM_ERROR("bad texAddr%d %08x (reserved bits)\n", unit, addr);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        if (!(addr & 1)) { /* local */
                addr &= ~7;
@@ -92,13 +92,13 @@ static int savage_verify_texaddr(drm_savage_private_t *dev_priv, int unit,
                        DRM_ERROR
                            ("bad texAddr%d %08x (local addr out of range)\n",
                             unit, addr);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        } else { /* AGP */
                if (!dev_priv->agp_textures) {
                        DRM_ERROR("bad texAddr%d %08x (AGP not available)\n",
                                  unit, addr);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                addr &= ~7;
                if (addr < dev_priv->agp_textures->offset ||
@@ -107,7 +107,7 @@ static int savage_verify_texaddr(drm_savage_private_t *dev_priv, int unit,
                        DRM_ERROR
                            ("bad texAddr%d %08x (AGP addr out of range)\n",
                             unit, addr);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
        return 0;
@@ -132,7 +132,7 @@ static int savage_verify_state_s3d(drm_savage_private_t *dev_priv,
            start+count-1 > SAVAGE_DESTTEXRWWATERMARK_S3D) {
                DRM_ERROR("invalid register range (0x%04x-0x%04x)\n",
                          start, start+count-1);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        SAVE_STATE_MASK(SAVAGE_SCSTART_S3D, s3d.new_scstart,
@@ -164,7 +164,7 @@ static int savage_verify_state_s4(drm_savage_private_t *dev_priv,
            start+count-1 > SAVAGE_TEXBLENDCOLOR_S4) {
                DRM_ERROR("invalid register range (0x%04x-0x%04x)\n",
                          start, start+count-1);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        SAVE_STATE_MASK(SAVAGE_DRAWCTRL0_S4, s4.new_drawctrl0,
@@ -275,7 +275,7 @@ static int savage_dispatch_state(drm_savage_private_t *dev_priv,
 
 static int savage_dispatch_dma_prim(drm_savage_private_t *dev_priv,
                                    const drm_savage_cmd_header_t *cmd_header,
-                                   const drm_buf_t *dmabuf)
+                                   const struct drm_buf *dmabuf)
 {
        unsigned char reorder = 0;
        unsigned int prim = cmd_header->prim.prim;
@@ -287,7 +287,7 @@ static int savage_dispatch_dma_prim(drm_savage_private_t *dev_priv,
 
        if (!dmabuf) {
            DRM_ERROR("called without dma buffers!\n");
-           return DRM_ERR(EINVAL);
+           return -EINVAL;
        }
 
        if (!n)
@@ -301,7 +301,7 @@ static int savage_dispatch_dma_prim(drm_savage_private_t *dev_priv,
                if (n % 3 != 0) {
                        DRM_ERROR("wrong number of vertices %u in TRILIST\n",
                                  n);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
        case SAVAGE_PRIM_TRISTRIP:
@@ -310,18 +310,18 @@ static int savage_dispatch_dma_prim(drm_savage_private_t *dev_priv,
                        DRM_ERROR
                           ("wrong number of vertices %u in TRIFAN/STRIP\n",
                            n);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
        default:
                DRM_ERROR("invalid primitive type %u\n", prim);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (S3_SAVAGE3D_SERIES(dev_priv->chipset)) {
                if (skip != 0) {
                        DRM_ERROR("invalid skip flags 0x%04x for DMA\n", skip);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        } else {
                unsigned int size = 10 - (skip & 1) - (skip >> 1 & 1) -
@@ -329,18 +329,18 @@ static int savage_dispatch_dma_prim(drm_savage_private_t *dev_priv,
                        (skip >> 5 & 1) - (skip >> 6 & 1) - (skip >> 7 & 1);
                if (skip > SAVAGE_SKIP_ALL_S4 || size != 8) {
                        DRM_ERROR("invalid skip flags 0x%04x for DMA\n", skip);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                if (reorder) {
                        DRM_ERROR("TRILIST_201 used on Savage4 hardware\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
 
        if (start + n > dmabuf->total/32) {
                DRM_ERROR("vertex indices (%u-%u) out of range (0-%u)\n",
                          start, start + n - 1, dmabuf->total/32);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        /* Vertex DMA doesn't work with command DMA at the same time,
@@ -438,7 +438,7 @@ static int savage_dispatch_vb_prim(drm_savage_private_t *dev_priv,
                if (n % 3 != 0) {
                        DRM_ERROR("wrong number of vertices %u in TRILIST\n",
                                  n);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
        case SAVAGE_PRIM_TRISTRIP:
@@ -447,24 +447,24 @@ static int savage_dispatch_vb_prim(drm_savage_private_t *dev_priv,
                        DRM_ERROR
                            ("wrong number of vertices %u in TRIFAN/STRIP\n",
                             n);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
        default:
                DRM_ERROR("invalid primitive type %u\n", prim);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (S3_SAVAGE3D_SERIES(dev_priv->chipset)) {
                if (skip > SAVAGE_SKIP_ALL_S3D) {
                        DRM_ERROR("invalid skip flags 0x%04x\n", skip);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                vtx_size = 8; /* full vertex */
        } else {
                if (skip > SAVAGE_SKIP_ALL_S4) {
                        DRM_ERROR("invalid skip flags 0x%04x\n", skip);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                vtx_size = 10; /* full vertex */
        }
@@ -476,13 +476,13 @@ static int savage_dispatch_vb_prim(drm_savage_private_t *dev_priv,
        if (vtx_size > vb_stride) {
                DRM_ERROR("vertex size greater than vb stride (%u > %u)\n",
                          vtx_size, vb_stride);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (start + n > vb_size / (vb_stride*4)) {
                DRM_ERROR("vertex indices (%u-%u) out of range (0-%u)\n",
                          start, start + n - 1, vb_size / (vb_stride*4));
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        prim <<= 25;
@@ -534,7 +534,7 @@ static int savage_dispatch_vb_prim(drm_savage_private_t *dev_priv,
 static int savage_dispatch_dma_idx(drm_savage_private_t *dev_priv,
                                   const drm_savage_cmd_header_t *cmd_header,
                                   const uint16_t *idx,
-                                  const drm_buf_t *dmabuf)
+                                  const struct drm_buf *dmabuf)
 {
        unsigned char reorder = 0;
        unsigned int prim = cmd_header->idx.prim;
@@ -545,7 +545,7 @@ static int savage_dispatch_dma_idx(drm_savage_private_t *dev_priv,
 
        if (!dmabuf) {
            DRM_ERROR("called without dma buffers!\n");
-           return DRM_ERR(EINVAL);
+           return -EINVAL;
        }
 
        if (!n)
@@ -558,7 +558,7 @@ static int savage_dispatch_dma_idx(drm_savage_private_t *dev_priv,
        case SAVAGE_PRIM_TRILIST:
                if (n % 3 != 0) {
                        DRM_ERROR("wrong number of indices %u in TRILIST\n", n);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
        case SAVAGE_PRIM_TRISTRIP:
@@ -566,18 +566,18 @@ static int savage_dispatch_dma_idx(drm_savage_private_t *dev_priv,
                if (n < 3) {
                        DRM_ERROR
                            ("wrong number of indices %u in TRIFAN/STRIP\n", n);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
        default:
                DRM_ERROR("invalid primitive type %u\n", prim);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (S3_SAVAGE3D_SERIES(dev_priv->chipset)) {
                if (skip != 0) {
                        DRM_ERROR("invalid skip flags 0x%04x for DMA\n", skip);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        } else {
                unsigned int size = 10 - (skip & 1) - (skip >> 1 & 1) -
@@ -585,11 +585,11 @@ static int savage_dispatch_dma_idx(drm_savage_private_t *dev_priv,
                        (skip >> 5 & 1) - (skip >> 6 & 1) - (skip >> 7 & 1);
                if (skip > SAVAGE_SKIP_ALL_S4 || size != 8) {
                        DRM_ERROR("invalid skip flags 0x%04x for DMA\n", skip);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                if (reorder) {
                        DRM_ERROR("TRILIST_201 used on Savage4 hardware\n");
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
 
@@ -626,7 +626,7 @@ static int savage_dispatch_dma_idx(drm_savage_private_t *dev_priv,
                        if (idx[i] > dmabuf->total/32) {
                                DRM_ERROR("idx[%u]=%u out of range (0-%u)\n",
                                          i, idx[i], dmabuf->total/32);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                }
 
@@ -696,7 +696,7 @@ static int savage_dispatch_vb_idx(drm_savage_private_t *dev_priv,
        case SAVAGE_PRIM_TRILIST:
                if (n % 3 != 0) {
                        DRM_ERROR("wrong number of indices %u in TRILIST\n", n);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
        case SAVAGE_PRIM_TRISTRIP:
@@ -704,24 +704,24 @@ static int savage_dispatch_vb_idx(drm_savage_private_t *dev_priv,
                if (n < 3) {
                        DRM_ERROR
                            ("wrong number of indices %u in TRIFAN/STRIP\n", n);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                break;
        default:
                DRM_ERROR("invalid primitive type %u\n", prim);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (S3_SAVAGE3D_SERIES(dev_priv->chipset)) {
                if (skip > SAVAGE_SKIP_ALL_S3D) {
                        DRM_ERROR("invalid skip flags 0x%04x\n", skip);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                vtx_size = 8; /* full vertex */
        } else {
                if (skip > SAVAGE_SKIP_ALL_S4) {
                        DRM_ERROR("invalid skip flags 0x%04x\n", skip);
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
                vtx_size = 10; /* full vertex */
        }
@@ -733,7 +733,7 @@ static int savage_dispatch_vb_idx(drm_savage_private_t *dev_priv,
        if (vtx_size > vb_stride) {
                DRM_ERROR("vertex size greater than vb stride (%u > %u)\n",
                          vtx_size, vb_stride);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        prim <<= 25;
@@ -746,7 +746,7 @@ static int savage_dispatch_vb_idx(drm_savage_private_t *dev_priv,
                        if (idx[i] > vb_size / (vb_stride*4)) {
                                DRM_ERROR("idx[%u]=%u out of range (0-%u)\n",
                                          i, idx[i],  vb_size / (vb_stride*4));
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                }
 
@@ -790,7 +790,7 @@ static int savage_dispatch_clear(drm_savage_private_t *dev_priv,
                                 const drm_savage_cmd_header_t *cmd_header,
                                 const drm_savage_cmd_header_t *data,
                                 unsigned int nbox,
-                                const drm_clip_rect_t *boxes)
+                                const struct drm_clip_rect *boxes)
 {
        unsigned int flags = cmd_header->clear0.flags;
        unsigned int clear_cmd;
@@ -860,7 +860,7 @@ static int savage_dispatch_clear(drm_savage_private_t *dev_priv,
 }
 
 static int savage_dispatch_swap(drm_savage_private_t *dev_priv,
-                               unsigned int nbox, const drm_clip_rect_t *boxes)
+                               unsigned int nbox, const struct drm_clip_rect *boxes)
 {
        unsigned int swap_cmd;
        unsigned int i;
@@ -891,11 +891,11 @@ static int savage_dispatch_swap(drm_savage_private_t *dev_priv,
 static int savage_dispatch_draw(drm_savage_private_t *dev_priv,
                                const drm_savage_cmd_header_t *start,
                                const drm_savage_cmd_header_t *end,
-                               const drm_buf_t *dmabuf,
+                               const struct drm_buf *dmabuf,
                                const unsigned int *vtxbuf,
                                unsigned int vb_size, unsigned int vb_stride,
                                unsigned int nbox,
-                               const drm_clip_rect_t *boxes)
+                               const struct drm_clip_rect *boxes)
 {
        unsigned int i, j;
        int ret;
@@ -941,7 +941,7 @@ static int savage_dispatch_draw(drm_savage_private_t *dev_priv,
                                DRM_ERROR("IMPLEMENTATION ERROR: "
                                          "non-drawing-command %d\n",
                                          cmd_header.cmd.cmd);
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
 
                        if (ret != 0)
@@ -952,35 +952,31 @@ static int savage_dispatch_draw(drm_savage_private_t *dev_priv,
        return 0;
 }
 
-int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
+int savage_bci_cmdbuf(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_savage_private_t *dev_priv = dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       drm_buf_t *dmabuf;
-       drm_savage_cmdbuf_t cmdbuf;
+       struct drm_device_dma *dma = dev->dma;
+       struct drm_buf *dmabuf;
+       drm_savage_cmdbuf_t *cmdbuf = data;
        drm_savage_cmd_header_t *kcmd_addr = NULL;
        drm_savage_cmd_header_t *first_draw_cmd;
        unsigned int *kvb_addr = NULL;
-       drm_clip_rect_t *kbox_addr = NULL;
+       struct drm_clip_rect *kbox_addr = NULL;
        unsigned int i, j;
        int ret = 0;
 
        DRM_DEBUG("\n");
        
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_savage_cmdbuf_t __user *)data,
-                                sizeof(cmdbuf));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        if (dma && dma->buflist) {
-               if (cmdbuf.dma_idx > dma->buf_count) {
+               if (cmdbuf->dma_idx > dma->buf_count) {
                        DRM_ERROR
                            ("vertex buffer index %u out of range (0-%u)\n",
-                            cmdbuf.dma_idx, dma->buf_count-1);
-                       return DRM_ERR(EINVAL);
+                            cmdbuf->dma_idx, dma->buf_count-1);
+                       return -EINVAL;
                }
-               dmabuf = dma->buflist[cmdbuf.dma_idx];
+               dmabuf = dma->buflist[cmdbuf->dma_idx];
        } else {
                dmabuf = NULL;
        }
@@ -990,47 +986,49 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
         * COPY_FROM_USER_UNCHECKED when done in other drivers, and is correct
         * for locking on FreeBSD.
         */
-       if (cmdbuf.size) {
-               kcmd_addr = drm_alloc(cmdbuf.size * 8, DRM_MEM_DRIVER);
+       if (cmdbuf->size) {
+               kcmd_addr = drm_alloc(cmdbuf->size * 8, DRM_MEM_DRIVER);
                if (kcmd_addr == NULL)
-                       return DRM_ERR(ENOMEM);
+                       return -ENOMEM;
 
-               if (DRM_COPY_FROM_USER(kcmd_addr, cmdbuf.cmd_addr,
-                                      cmdbuf.size * 8))
+               if (DRM_COPY_FROM_USER(kcmd_addr, cmdbuf->cmd_addr,
+                                      cmdbuf->size * 8))
                {
-                       drm_free(kcmd_addr, cmdbuf.size * 8, DRM_MEM_DRIVER);
-                       return DRM_ERR(EFAULT);
+                       drm_free(kcmd_addr, cmdbuf->size * 8, DRM_MEM_DRIVER);
+                       return -EFAULT;
                }
-               cmdbuf.cmd_addr = kcmd_addr;
+               cmdbuf->cmd_addr = kcmd_addr;
        }
-       if (cmdbuf.vb_size) {
-               kvb_addr = drm_alloc(cmdbuf.vb_size, DRM_MEM_DRIVER);
+       if (cmdbuf->vb_size) {
+               kvb_addr = drm_alloc(cmdbuf->vb_size, DRM_MEM_DRIVER);
                if (kvb_addr == NULL) {
-                       ret = DRM_ERR(ENOMEM);
+                       ret = -ENOMEM;
                        goto done;
                }
 
-               if (DRM_COPY_FROM_USER(kvb_addr, cmdbuf.vb_addr,
-                                      cmdbuf.vb_size)) {
-                       ret = DRM_ERR(EFAULT);
+               if (DRM_COPY_FROM_USER(kvb_addr, cmdbuf->vb_addr,
+                                      cmdbuf->vb_size)) {
+                       ret = -EFAULT;
                        goto done;
                }
-               cmdbuf.vb_addr = kvb_addr;
+               cmdbuf->vb_addr = kvb_addr;
        }
-       if (cmdbuf.nbox) {
-               kbox_addr = drm_alloc(cmdbuf.nbox * sizeof(drm_clip_rect_t),
-                                      DRM_MEM_DRIVER);
+       if (cmdbuf->nbox) {
+               kbox_addr = drm_alloc(cmdbuf->nbox *
+                                     sizeof(struct drm_clip_rect),
+                                     DRM_MEM_DRIVER);
                if (kbox_addr == NULL) {
-                       ret = DRM_ERR(ENOMEM);
+                       ret = -ENOMEM;
                        goto done;
                }
 
-               if (DRM_COPY_FROM_USER(kbox_addr, cmdbuf.box_addr,
-                                      cmdbuf.nbox * sizeof(drm_clip_rect_t))) {
-                       ret = DRM_ERR(EFAULT);
+               if (DRM_COPY_FROM_USER(kbox_addr, cmdbuf->box_addr,
+                                      cmdbuf->nbox *
+                                      sizeof(struct drm_clip_rect))) {
+                       ret = -EFAULT;
                        goto done;
                }
-               cmdbuf.box_addr = kbox_addr;
+               cmdbuf->box_addr = kbox_addr;
        }
 
        /* Make sure writes to DMA buffers are finished before sending
@@ -1043,10 +1041,10 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
 
        i = 0;
        first_draw_cmd = NULL;
-       while (i < cmdbuf.size) {
+       while (i < cmdbuf->size) {
                drm_savage_cmd_header_t cmd_header;
-               cmd_header = *(drm_savage_cmd_header_t *)cmdbuf.cmd_addr;
-               cmdbuf.cmd_addr++;
+               cmd_header = *(drm_savage_cmd_header_t *)cmdbuf->cmd_addr;
+               cmdbuf->cmd_addr++;
                i++;
 
                /* Group drawing commands with same state to minimize
@@ -1056,28 +1054,29 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
                case SAVAGE_CMD_DMA_IDX:
                case SAVAGE_CMD_VB_IDX:
                        j = (cmd_header.idx.count + 3) / 4;
-                       if (i + j > cmdbuf.size) {
+                       if (i + j > cmdbuf->size) {
                                DRM_ERROR("indexed drawing command extends "
                                          "beyond end of command buffer\n");
                                DMA_FLUSH();
-                               return DRM_ERR(EINVAL);
+                               return -EINVAL;
                        }
                        /* fall through */
                case SAVAGE_CMD_DMA_PRIM:
                case SAVAGE_CMD_VB_PRIM:
                        if (!first_draw_cmd)
-                               first_draw_cmd = cmdbuf.cmd_addr-1;
-                       cmdbuf.cmd_addr += j;
+                               first_draw_cmd = cmdbuf->cmd_addr-1;
+                       cmdbuf->cmd_addr += j;
                        i += j;
                        break;
                default:
                        if (first_draw_cmd) {
                                ret = savage_dispatch_draw (
                                        dev_priv, first_draw_cmd,
-                                       cmdbuf.cmd_addr-1,
-                                       dmabuf, cmdbuf.vb_addr, cmdbuf.vb_size,
-                                       cmdbuf.vb_stride,
-                                       cmdbuf.nbox, cmdbuf.box_addr);
+                                       cmdbuf->cmd_addr-1,
+                                       dmabuf, cmdbuf->vb_addr,
+                                       cmdbuf->vb_size,
+                                       cmdbuf->vb_stride,
+                                       cmdbuf->nbox, cmdbuf->box_addr);
                                if (ret != 0)
                                        return ret;
                                first_draw_cmd = NULL;
@@ -1089,40 +1088,42 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
                switch (cmd_header.cmd.cmd) {
                case SAVAGE_CMD_STATE:
                        j = (cmd_header.state.count + 1) / 2;
-                       if (i + j > cmdbuf.size) {
+                       if (i + j > cmdbuf->size) {
                                DRM_ERROR("command SAVAGE_CMD_STATE extends "
                                          "beyond end of command buffer\n");
                                DMA_FLUSH();
-                               ret = DRM_ERR(EINVAL);
+                               ret = -EINVAL;
                                goto done;
                        }
                        ret = savage_dispatch_state(dev_priv, &cmd_header,
-                               (const uint32_t *)cmdbuf.cmd_addr);
-                       cmdbuf.cmd_addr += j;
+                               (const uint32_t *)cmdbuf->cmd_addr);
+                       cmdbuf->cmd_addr += j;
                        i += j;
                        break;
                case SAVAGE_CMD_CLEAR:
-                       if (i + 1 > cmdbuf.size) {
+                       if (i + 1 > cmdbuf->size) {
                                DRM_ERROR("command SAVAGE_CMD_CLEAR extends "
                                          "beyond end of command buffer\n");
                                DMA_FLUSH();
-                               ret = DRM_ERR(EINVAL);
+                               ret = -EINVAL;
                                goto done;
                        }
                        ret = savage_dispatch_clear(dev_priv, &cmd_header,
-                                                   cmdbuf.cmd_addr,
-                                                   cmdbuf.nbox, cmdbuf.box_addr);
-                       cmdbuf.cmd_addr++;
+                                                   cmdbuf->cmd_addr,
+                                                   cmdbuf->nbox,
+                                                   cmdbuf->box_addr);
+                       cmdbuf->cmd_addr++;
                        i++;
                        break;
                case SAVAGE_CMD_SWAP:
-                       ret = savage_dispatch_swap(dev_priv, cmdbuf.nbox,
-                                                  cmdbuf.box_addr);
+                       ret = savage_dispatch_swap(dev_priv, cmdbuf->nbox,
+                                                  cmdbuf->box_addr);
                        break;
                default:
-                       DRM_ERROR("invalid command 0x%x\n", cmd_header.cmd.cmd);
+                       DRM_ERROR("invalid command 0x%x\n",
+                                 cmd_header.cmd.cmd);
                        DMA_FLUSH();
-                       ret = DRM_ERR(EINVAL);
+                       ret = -EINVAL;
                        goto done;
                }
 
@@ -1134,9 +1135,9 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
 
        if (first_draw_cmd) {
                ret = savage_dispatch_draw (
-                       dev_priv, first_draw_cmd, cmdbuf.cmd_addr, dmabuf,
-                       cmdbuf.vb_addr, cmdbuf.vb_size, cmdbuf.vb_stride,
-                       cmdbuf.nbox, cmdbuf.box_addr);
+                       dev_priv, first_draw_cmd, cmdbuf->cmd_addr, dmabuf,
+                       cmdbuf->vb_addr, cmdbuf->vb_size, cmdbuf->vb_stride,
+                       cmdbuf->nbox, cmdbuf->box_addr);
                if (ret != 0) {
                        DMA_FLUSH();
                        goto done;
@@ -1145,7 +1146,7 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
 
        DMA_FLUSH();
 
-       if (dmabuf && cmdbuf.discard) {
+       if (dmabuf && cmdbuf->discard) {
                drm_savage_buf_priv_t *buf_priv = dmabuf->dev_private;
                uint16_t event;
                event = savage_bci_emit_event(dev_priv, SAVAGE_WAIT_3D);
@@ -1155,9 +1156,9 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
 
 done:
        /* If we didn't need to allocate them, these'll be NULL */
-       drm_free(kcmd_addr, cmdbuf.size * 8, DRM_MEM_DRIVER);
-       drm_free(kvb_addr, cmdbuf.vb_size, DRM_MEM_DRIVER);
-       drm_free(kbox_addr, cmdbuf.nbox * sizeof(drm_clip_rect_t),
+       drm_free(kcmd_addr, cmdbuf->size * 8, DRM_MEM_DRIVER);
+       drm_free(kvb_addr, cmdbuf->vb_size, DRM_MEM_DRIVER);
+       drm_free(kbox_addr, cmdbuf->nbox * sizeof(struct drm_clip_rect),
                 DRM_MEM_DRIVER);
 
        return ret;
index ec572ad..a4a88fe 100644 (file)
@@ -58,7 +58,7 @@ enum sis_family {
 typedef struct drm_sis_private {
        drm_local_map_t *mmio;
        unsigned int idle_fault;
-       drm_sman_t sman;
+       struct drm_sman sman;
        unsigned int chipset;
        int vram_initialized;
        int agp_initialized;
@@ -66,9 +66,10 @@ typedef struct drm_sis_private {
        unsigned long agp_offset;
 } drm_sis_private_t;
 
-extern int sis_idle(drm_device_t *dev);
-extern void sis_reclaim_buffers_locked(drm_device_t *dev, struct file *filp);
-extern void sis_lastclose(drm_device_t *dev);
+extern int sis_idle(struct drm_device *dev);
+extern void sis_reclaim_buffers_locked(struct drm_device *dev,
+                                      struct drm_file *file_priv);
+extern void sis_lastclose(struct drm_device *dev);
 
 #else
 #include "sis_ds.h"
@@ -78,14 +79,14 @@ typedef struct drm_sis_private {
        memHeap_t *FBHeap;
 } drm_sis_private_t;
 
-extern int sis_init_context(drm_device_t * dev, int context);
-extern int sis_final_context(drm_device_t * dev, int context);
+extern int sis_init_context(struct drm_device * dev, int context);
+extern int sis_final_context(struct drm_device * dev, int context);
 
 #endif
 
 
 
-extern drm_ioctl_desc_t sis_ioctls[];
+extern struct drm_ioctl_desc sis_ioctls[];
 extern int sis_max_ioctl;
 
 #endif
index 6d074d6..e11939f 100644 (file)
@@ -81,59 +81,52 @@ static int del_alloc_set(int context, int type, unsigned int val)
 /* fb management via fb device */
 #if defined(__linux__) && defined(CONFIG_FB_SIS)
 
-static int sis_fb_init(DRM_IOCTL_ARGS)
+static int sis_fb_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
        return 0;
 }
 
-static int sis_fb_alloc(DRM_IOCTL_ARGS)
+static int sis_fb_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_sis_mem_t fb;
+       drm_sis_mem_t *fb = data;
        struct sis_memreq req;
-       drm_sis_mem_t __user *argp = (drm_sis_mem_t __user *)data;
        int retval = 0;
 
-       DRM_COPY_FROM_USER_IOCTL(fb, argp, sizeof(fb));
-
-       req.size = fb.size;
+       req.size = fb->size;
        sis_malloc(&req);
        if (req.offset) {
                /* TODO */
-               fb.offset = req.offset;
-               fb.free = req.offset;
-               if (!add_alloc_set(fb.context, VIDEO_TYPE, fb.free)) {
+               fb->offset = req.offset;
+               fb->free = req.offset;
+               if (!add_alloc_set(fb->context, VIDEO_TYPE, fb->free)) {
                        DRM_DEBUG("adding to allocation set fails\n");
                        sis_free(req.offset);
-                       retval = DRM_ERR(EINVAL);
+                       retval = -EINVAL;
                }
        } else {
-               fb.offset = 0;
-               fb.size = 0;
-               fb.free = 0;
+               fb->offset = 0;
+               fb->size = 0;
+               fb->free = 0;
        }
 
-       DRM_COPY_TO_USER_IOCTL(argp, fb, sizeof(fb));
-
-       DRM_DEBUG("alloc fb, size = %d, offset = %ld\n", fb.size, req.offset);
+       DRM_DEBUG("alloc fb, size = %d, offset = %ld\n", fb->size, req.offset);
 
        return retval;
 }
 
-static int sis_fb_free(DRM_IOCTL_ARGS)
+static int sis_fb_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
        drm_sis_mem_t fb;
        int retval = 0;
 
-       DRM_COPY_FROM_USER_IOCTL(fb, (drm_sis_mem_t __user *) data, sizeof(fb));
-
-       if (!fb.free)
-               return DRM_ERR(EINVAL);
+       if (!fb->free)
+               return -EINVAL;
 
-       if (!del_alloc_set(fb.context, VIDEO_TYPE, fb.free))
-               retval = DRM_ERR(EINVAL);
-       sis_free(fb.free);
+       if (!del_alloc_set(fb->context, VIDEO_TYPE, fb->free))
+               retval = -EINVAL;
+       sis_free(fb->free);
 
-       DRM_DEBUG("free fb, offset = 0x%lx\n", fb.free);
+       DRM_DEBUG("free fb, offset = 0x%lx\n", fb->free);
 
        return retval;
 }
@@ -150,13 +143,10 @@ static int sis_fb_free(DRM_IOCTL_ARGS)
  *    X driver/sisfb                                  HW-   Command-
  *  framebuffer memory           DRI heap           Cursor   queue
  */
-static int sis_fb_init(DRM_IOCTL_ARGS)
+static int sis_fb_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_fb_t fb;
-
-       DRM_COPY_FROM_USER_IOCTL(fb, (drm_sis_fb_t __user *) data, sizeof(fb));
+       drm_sis_fb_t *fb = data;
 
        if (dev_priv == NULL) {
                dev->dev_private = drm_calloc(1, sizeof(drm_sis_private_t),
@@ -167,71 +157,62 @@ static int sis_fb_init(DRM_IOCTL_ARGS)
        }
 
        if (dev_priv->FBHeap != NULL)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
-       dev_priv->FBHeap = mmInit(fb.offset, fb.size);
+       dev_priv->FBHeap = mmInit(fb->offset, fb->size);
 
-       DRM_DEBUG("offset = %u, size = %u", fb.offset, fb.size);
+       DRM_DEBUG("offset = %u, size = %u", fb->offset, fb->size);
 
        return 0;
 }
 
-static int sis_fb_alloc(DRM_IOCTL_ARGS)
+static int sis_fb_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_mem_t __user *argp = (drm_sis_mem_t __user *)data;
-       drm_sis_mem_t fb;
+       drm_sis_mem_t *fb = data;
        PMemBlock block;
        int retval = 0;
 
        if (dev_priv == NULL || dev_priv->FBHeap == NULL)
-               return DRM_ERR(EINVAL);
-
-       DRM_COPY_FROM_USER_IOCTL(fb, argp, sizeof(fb));
+               return -EINVAL;
 
-       block = mmAllocMem(dev_priv->FBHeap, fb.size, 0, 0);
+       block = mmAllocMem(dev_priv->FBHeap, fb->size, 0, 0);
        if (block) {
                /* TODO */
-               fb.offset = block->ofs;
-               fb.free = (unsigned long)block;
-               if (!add_alloc_set(fb.context, VIDEO_TYPE, fb.free)) {
+               fb->offset = block->ofs;
+               fb->free = (unsigned long)block;
+               if (!add_alloc_set(fb->context, VIDEO_TYPE, fb->free)) {
                        DRM_DEBUG("adding to allocation set fails\n");
-                       mmFreeMem((PMemBlock) fb.free);
-                       retval = DRM_ERR(EINVAL);
+                       mmFreeMem((PMemBlock) fb->free);
+                       retval = -EINVAL;
                }
        } else {
-               fb.offset = 0;
-               fb.size = 0;
-               fb.free = 0;
+               fb->offset = 0;
+               fb->size = 0;
+               fb->free = 0;
        }
 
-       DRM_COPY_TO_USER_IOCTL(argp, fb, sizeof(fb));
-
-       DRM_DEBUG("alloc fb, size = %d, offset = %d\n", fb.size, fb.offset);
+       DRM_DEBUG("alloc fb, size = %d, offset = %d\n", fb->size, fb->offset);
 
        return retval;
 }
 
-static int sis_fb_free(DRM_IOCTL_ARGS)
+static int sis_fb_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_mem_t fb;
+       drm_sis_mem_t *fb = data;
 
        if (dev_priv == NULL || dev_priv->FBHeap == NULL)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
-       DRM_COPY_FROM_USER_IOCTL(fb, (drm_sis_mem_t __user *) data, sizeof(fb));
+       if (!mmBlockInHeap(dev_priv->FBHeap, (PMemBlock) fb->free))
+               return -EINVAL;
 
-       if (!mmBlockInHeap(dev_priv->FBHeap, (PMemBlock) fb.free))
-               return DRM_ERR(EINVAL);
+       if (!del_alloc_set(fb->context, VIDEO_TYPE, fb->free))
+               return -EINVAL;
+       mmFreeMem((PMemBlock) fb->free);
 
-       if (!del_alloc_set(fb.context, VIDEO_TYPE, fb.free))
-               return DRM_ERR(EINVAL);
-       mmFreeMem((PMemBlock) fb.free);
-
-       DRM_DEBUG("free fb, free = 0x%lx\n", fb.free);
+       DRM_DEBUG("free fb, free = 0x%lx\n", fb->free);
 
        return 0;
 }
@@ -240,11 +221,10 @@ static int sis_fb_free(DRM_IOCTL_ARGS)
 
 /* agp memory management */
 
-static int sis_ioctl_agp_init(DRM_IOCTL_ARGS)
+static int sis_ioctl_agp_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_agp_t agp;
+       drm_sis_agp_t *agp = data;
 
        if (dev_priv == NULL) {
                dev->dev_private = drm_calloc(1, sizeof(drm_sis_private_t),
@@ -255,75 +235,63 @@ static int sis_ioctl_agp_init(DRM_IOCTL_ARGS)
        }
 
        if (dev_priv->AGPHeap != NULL)
-               return DRM_ERR(EINVAL);
-
-       DRM_COPY_FROM_USER_IOCTL(agp, (drm_sis_agp_t __user *) data,
-                                sizeof(agp));
+               return -EINVAL;
 
-       dev_priv->AGPHeap = mmInit(agp.offset, agp.size);
+       dev_priv->AGPHeap = mmInit(agp->offset, agp->size);
 
-       DRM_DEBUG("offset = %u, size = %u", agp.offset, agp.size);
+       DRM_DEBUG("offset = %u, size = %u", agp->offset, agp->size);
 
        return 0;
 }
 
-static int sis_ioctl_agp_alloc(DRM_IOCTL_ARGS)
+static int sis_ioctl_agp_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_mem_t __user *argp = (drm_sis_mem_t __user *)data;
-       drm_sis_mem_t agp;
+       drm_sis_mem_t *agp = data;
        PMemBlock block;
        int retval = 0;
 
        if (dev_priv == NULL || dev_priv->AGPHeap == NULL)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
-       DRM_COPY_FROM_USER_IOCTL(agp, argp, sizeof(agp));
-
-       block = mmAllocMem(dev_priv->AGPHeap, agp.size, 0, 0);
+       block = mmAllocMem(dev_priv->AGPHeap, agp->size, 0, 0);
        if (block) {
                /* TODO */
-               agp.offset = block->ofs;
-               agp.free = (unsigned long)block;
-               if (!add_alloc_set(agp.context, AGP_TYPE, agp.free)) {
+               agp->offset = block->ofs;
+               agp->free = (unsigned long)block;
+               if (!add_alloc_set(agp->context, AGP_TYPE, agp->free)) {
                        DRM_DEBUG("adding to allocation set fails\n");
-                       mmFreeMem((PMemBlock) agp.free);
+                       mmFreeMem((PMemBlock) agp->free);
                        retval = -1;
                }
        } else {
-               agp.offset = 0;
-               agp.size = 0;
-               agp.free = 0;
+               agp->offset = 0;
+               agp->size = 0;
+               agp->free = 0;
        }
 
-       DRM_COPY_TO_USER_IOCTL(argp, agp, sizeof(agp));
-
-       DRM_DEBUG("alloc agp, size = %d, offset = %d\n", agp.size, agp.offset);
+       DRM_DEBUG("alloc agp, size = %d, offset = %d\n", agp->size,
+           agp->offset);
 
        return retval;
 }
 
-static int sis_ioctl_agp_free(DRM_IOCTL_ARGS)
+static int sis_ioctl_agp_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_sis_private_t *dev_priv = dev->dev_private;
-       drm_sis_mem_t agp;
+       drm_sis_mem_t *agp = data;
 
        if (dev_priv == NULL || dev_priv->AGPHeap == NULL)
-               return DRM_ERR(EINVAL);
-
-       DRM_COPY_FROM_USER_IOCTL(agp, (drm_sis_mem_t __user *) data,
-                                sizeof(agp));
+               return -EINVAL;
 
-       if (!mmBlockInHeap(dev_priv->AGPHeap, (PMemBlock) agp.free))
-               return DRM_ERR(EINVAL);
+       if (!mmBlockInHeap(dev_priv->AGPHeap, (PMemBlock) agp->free))
+               return -EINVAL;
 
-       mmFreeMem((PMemBlock) agp.free);
-       if (!del_alloc_set(agp.context, AGP_TYPE, agp.free))
-               return DRM_ERR(EINVAL);
+       mmFreeMem((PMemBlock) agp->free);
+       if (!del_alloc_set(agp->context, AGP_TYPE, agp->free))
+               return -EINVAL;
 
-       DRM_DEBUG("free agp, free = 0x%lx\n", agp.free);
+       DRM_DEBUG("free agp, free = 0x%lx\n", agp->free);
 
        return 0;
 }
@@ -407,12 +375,12 @@ int sis_final_context(struct drm_device *dev, int context)
 }
 
 drm_ioctl_desc_t sis_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_SIS_FB_ALLOC)] = {sis_fb_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SIS_FB_FREE)] = {sis_fb_free, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SIS_AGP_INIT)] = {sis_ioctl_agp_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY},
-       [DRM_IOCTL_NR(DRM_SIS_AGP_ALLOC)] = {sis_ioctl_agp_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SIS_AGP_FREE)] = {sis_ioctl_agp_free, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_SIS_FB_INIT)] = {sis_fb_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}
+       DRM_IOCTL_DEF(DRM_SIS_FB_ALLOC, sis_fb_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SIS_FB_FREE, sis_fb_free, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SIS_AGP_INIT, sis_ioctl_agp_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+       DRM_IOCTL_DEF(DRM_SIS_AGP_ALLOC, sis_ioctl_agp_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SIS_AGP_FREE, sis_ioctl_agp_free, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_SIS_FB_INIT, sis_fb_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY)
 };
 
 int sis_max_ioctl = DRM_ARRAY_SIZE(sis_ioctls);
index 333c4bc..bd737a7 100644 (file)
@@ -139,7 +139,7 @@ static inline uint32_t *via_check_dma(drm_via_private_t * dev_priv,
        return (uint32_t *) (dev_priv->dma_ptr + dev_priv->dma_low);
 }
 
-int via_dma_cleanup(drm_device_t * dev)
+int via_dma_cleanup(struct drm_device * dev)
 {
        if (dev->dev_private) {
                drm_via_private_t *dev_priv =
@@ -157,30 +157,30 @@ int via_dma_cleanup(drm_device_t * dev)
        return 0;
 }
 
-static int via_initialize(drm_device_t * dev,
+static int via_initialize(struct drm_device * dev,
                          drm_via_private_t * dev_priv,
                          drm_via_dma_init_t * init)
 {
        if (!dev_priv || !dev_priv->mmio) {
                DRM_ERROR("via_dma_init called before via_map_init\n");
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        if (dev_priv->ring.virtual_start != NULL) {
                DRM_ERROR("%s called again without calling cleanup\n",
                          __FUNCTION__);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        if (!dev->agp || !dev->agp->base) {
                DRM_ERROR("%s called with no agp memory available\n", 
                          __FUNCTION__);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        if (dev_priv->chipset == VIA_DX9_0) {
                DRM_ERROR("AGP DMA is not supported on this chip\n");
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        dev_priv->ring.map.offset = dev->agp->base + init->offset;
@@ -195,7 +195,7 @@ static int via_initialize(drm_device_t * dev,
                via_dma_cleanup(dev);
                DRM_ERROR("can not ioremap virtual address for"
                          " ring buffer\n");
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        dev_priv->ring.virtual_start = dev_priv->ring.map.handle;
@@ -215,35 +215,31 @@ static int via_initialize(drm_device_t * dev,
        return 0;
 }
 
-static int via_dma_init(DRM_IOCTL_ARGS)
+static int via_dma_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
-       drm_via_dma_init_t init;
+       drm_via_dma_init_t *init = data;
        int retcode = 0;
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_via_dma_init_t __user *) data,
-                                sizeof(init));
-
-       switch (init.func) {
+       switch (init->func) {
        case VIA_INIT_DMA:
                if (!DRM_SUSER(DRM_CURPROC))
-                       retcode = DRM_ERR(EPERM);
+                       retcode = -EPERM;
                else
-                       retcode = via_initialize(dev, dev_priv, &init);
+                       retcode = via_initialize(dev, dev_priv, init);
                break;
        case VIA_CLEANUP_DMA:
                if (!DRM_SUSER(DRM_CURPROC))
-                       retcode = DRM_ERR(EPERM);
+                       retcode = -EPERM;
                else
                        retcode = via_dma_cleanup(dev);
                break;
        case VIA_DMA_INITIALIZED:
                retcode = (dev_priv->ring.virtual_start != NULL) ?
-                       0 : DRM_ERR(EFAULT);
+                       0 : -EFAULT;
                break;
        default:
-               retcode = DRM_ERR(EINVAL);
+               retcode = -EINVAL;
                break;
        }
 
@@ -252,7 +248,7 @@ static int via_dma_init(DRM_IOCTL_ARGS)
 
 
 
-static int via_dispatch_cmdbuffer(drm_device_t * dev, drm_via_cmdbuffer_t * cmd)
+static int via_dispatch_cmdbuffer(struct drm_device * dev, drm_via_cmdbuffer_t * cmd)
 {
        drm_via_private_t *dev_priv;
        uint32_t *vb;
@@ -263,15 +259,15 @@ static int via_dispatch_cmdbuffer(drm_device_t * dev, drm_via_cmdbuffer_t * cmd)
        if (dev_priv->ring.virtual_start == NULL) {
                DRM_ERROR("%s called without initializing AGP ring buffer.\n",
                          __FUNCTION__);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
        if (cmd->size > VIA_PCI_BUF_SIZE) {
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
 
        if (DRM_COPY_FROM_USER(dev_priv->pci_buf, cmd->buf, cmd->size))
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
        /*
         * Running this function on AGP memory is dead slow. Therefore
@@ -287,7 +283,7 @@ static int via_dispatch_cmdbuffer(drm_device_t * dev, drm_via_cmdbuffer_t * cmd)
 
        vb = via_check_dma(dev_priv, (cmd->size < 0x100) ? 0x102 : cmd->size);
        if (vb == NULL) {
-               return DRM_ERR(EAGAIN);
+               return -EAGAIN;
        }
 
        memcpy(vb, dev_priv->pci_buf, cmd->size);
@@ -306,39 +302,35 @@ static int via_dispatch_cmdbuffer(drm_device_t * dev, drm_via_cmdbuffer_t * cmd)
        return 0;
 }
 
-int via_driver_dma_quiescent(drm_device_t * dev)
+int via_driver_dma_quiescent(struct drm_device * dev)
 {
        drm_via_private_t *dev_priv = dev->dev_private;
 
        if (!via_wait_idle(dev_priv)) {
-               return DRM_ERR(EBUSY);
+               return -EBUSY;
        }
        return 0;
 }
 
-static int via_flush_ioctl(DRM_IOCTL_ARGS)
+static int via_flush_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        return via_driver_dma_quiescent(dev);
 }
 
-static int via_cmdbuffer(DRM_IOCTL_ARGS)
+static int via_cmdbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_cmdbuffer_t cmdbuf;
+       drm_via_cmdbuffer_t *cmdbuf = data;
        int ret;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_via_cmdbuffer_t __user *) data,
-                                sizeof(cmdbuf));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_DEBUG("via cmdbuffer, buf %p size %lu\n", cmdbuf.buf, cmdbuf.size);
+       DRM_DEBUG("via cmdbuffer, buf %p size %lu\n", cmdbuf->buf,
+                 cmdbuf->size);
 
-       ret = via_dispatch_cmdbuffer(dev, &cmdbuf);
+       ret = via_dispatch_cmdbuffer(dev, cmdbuf);
        if (ret) {
                return ret;
        }
@@ -346,17 +338,17 @@ static int via_cmdbuffer(DRM_IOCTL_ARGS)
        return 0;
 }
 
-static int via_dispatch_pci_cmdbuffer(drm_device_t * dev,
+static int via_dispatch_pci_cmdbuffer(struct drm_device * dev,
                                      drm_via_cmdbuffer_t * cmd)
 {
        drm_via_private_t *dev_priv = dev->dev_private;
        int ret;
 
        if (cmd->size > VIA_PCI_BUF_SIZE) {
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
        }
        if (DRM_COPY_FROM_USER(dev_priv->pci_buf, cmd->buf, cmd->size))
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
 
        if ((ret =
             via_verify_command_stream((uint32_t *) dev_priv->pci_buf,
@@ -370,21 +362,17 @@ static int via_dispatch_pci_cmdbuffer(drm_device_t * dev,
        return ret;
 }
 
-static int via_pci_cmdbuffer(DRM_IOCTL_ARGS)
+static int via_pci_cmdbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_cmdbuffer_t cmdbuf;
+       drm_via_cmdbuffer_t *cmdbuf = data;
        int ret;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
-
-       DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_via_cmdbuffer_t __user *) data,
-                                sizeof(cmdbuf));
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_DEBUG("via_pci_cmdbuffer, buf %p size %lu\n", cmdbuf.buf,
-                 cmdbuf.size);
+       DRM_DEBUG("via_pci_cmdbuffer, buf %p size %lu\n", cmdbuf->buf,
+                 cmdbuf->size);
 
-       ret = via_dispatch_pci_cmdbuffer(dev, &cmdbuf);
+       ret = via_dispatch_pci_cmdbuffer(dev, cmdbuf);
        if (ret) {
                return ret;
        }
@@ -645,94 +633,87 @@ static void via_cmdbuf_reset(drm_via_private_t * dev_priv)
  * User interface to the space and lag functions.
  */
 
-static int via_cmdbuf_size(DRM_IOCTL_ARGS)
+static int via_cmdbuf_size(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_cmdbuf_size_t d_siz;
+       drm_via_cmdbuf_size_t *d_siz = data;
        int ret = 0;
        uint32_t tmp_size, count;
        drm_via_private_t *dev_priv;
 
        DRM_DEBUG("via cmdbuf_size\n");
-       LOCK_TEST_WITH_RETURN( dev, filp );
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
        dev_priv = (drm_via_private_t *) dev->dev_private;
 
        if (dev_priv->ring.virtual_start == NULL) {
                DRM_ERROR("%s called without initializing AGP ring buffer.\n",
                          __FUNCTION__);
-               return DRM_ERR(EFAULT);
+               return -EFAULT;
        }
 
-       DRM_COPY_FROM_USER_IOCTL(d_siz, (drm_via_cmdbuf_size_t __user *) data,
-                                sizeof(d_siz));
-
-
        count = 1000000;
-       tmp_size = d_siz.size;
-       switch(d_siz.func) {
+       tmp_size = d_siz->size;
+       switch(d_siz->func) {
        case VIA_CMDBUF_SPACE:
-               while (((tmp_size = via_cmdbuf_space(dev_priv)) < d_siz.size)
+               while (((tmp_size = via_cmdbuf_space(dev_priv)) < d_siz->size)
                       && count--) {
-                       if (!d_siz.wait) {
+                       if (!d_siz->wait) {
                                break;
                        }
                }
                if (!count) {
                        DRM_ERROR("VIA_CMDBUF_SPACE timed out.\n");
-                       ret = DRM_ERR(EAGAIN);
+                       ret = -EAGAIN;
                }
                break;
        case VIA_CMDBUF_LAG:
-               while (((tmp_size = via_cmdbuf_lag(dev_priv)) > d_siz.size)
+               while (((tmp_size = via_cmdbuf_lag(dev_priv)) > d_siz->size)
                       && count--) {
-                       if (!d_siz.wait) {
+                       if (!d_siz->wait) {
                                break;
                        }
                }
                if (!count) {
                        DRM_ERROR("VIA_CMDBUF_LAG timed out.\n");
-                       ret = DRM_ERR(EAGAIN);
+                       ret = -EAGAIN;
                }
                break;
        default:
-               ret = DRM_ERR(EFAULT);
+               ret = -EFAULT;
        }
-       d_siz.size = tmp_size;
+       d_siz->size = tmp_size;
 
-       DRM_COPY_TO_USER_IOCTL((drm_via_cmdbuf_size_t __user *) data, d_siz,
-                              sizeof(d_siz));
        return ret;
 }
 
 #ifndef VIA_HAVE_DMABLIT
 int 
-via_dma_blit_sync( DRM_IOCTL_ARGS ) {
+via_dma_blit_sync( struct drm_device *dev, void *data, struct drm_file *file_priv ) {
        DRM_ERROR("PCI DMA BitBlt is not implemented for this system.\n");
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 int 
-via_dma_blit( DRM_IOCTL_ARGS ) {
+via_dma_blit( struct drm_device *dev, void *data, struct drm_file *file_priv ) {
        DRM_ERROR("PCI DMA BitBlt is not implemented for this system.\n");
-       return DRM_ERR(EINVAL);
+       return -EINVAL;
 }
 #endif
 
-drm_ioctl_desc_t via_ioctls[] = {
-       [DRM_IOCTL_NR(DRM_VIA_ALLOCMEM)] = {via_mem_alloc, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_FREEMEM)] = {via_mem_free, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_AGP_INIT)] = {via_agp_init, DRM_AUTH|DRM_MASTER},
-       [DRM_IOCTL_NR(DRM_VIA_FB_INIT)] = {via_fb_init, DRM_AUTH|DRM_MASTER},
-       [DRM_IOCTL_NR(DRM_VIA_MAP_INIT)] = {via_map_init, DRM_AUTH|DRM_MASTER},
-       [DRM_IOCTL_NR(DRM_VIA_DEC_FUTEX)] = {via_decoder_futex, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_DMA_INIT)] = {via_dma_init, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_CMDBUFFER)] = {via_cmdbuffer, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_FLUSH)] = {via_flush_ioctl, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_PCICMD)] = {via_pci_cmdbuffer, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_CMDBUF_SIZE)] = {via_cmdbuf_size, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_WAIT_IRQ)] = {via_wait_irq, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_DMA_BLIT)] = {via_dma_blit, DRM_AUTH},
-       [DRM_IOCTL_NR(DRM_VIA_BLIT_SYNC)] = {via_dma_blit_sync, DRM_AUTH}
+struct drm_ioctl_desc via_ioctls[] = {
+       DRM_IOCTL_DEF(DRM_VIA_ALLOCMEM, via_mem_alloc, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_FREEMEM, via_mem_free, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_AGP_INIT, via_agp_init, DRM_AUTH|DRM_MASTER),
+       DRM_IOCTL_DEF(DRM_VIA_FB_INIT, via_fb_init, DRM_AUTH|DRM_MASTER),
+       DRM_IOCTL_DEF(DRM_VIA_MAP_INIT, via_map_init, DRM_AUTH|DRM_MASTER),
+       DRM_IOCTL_DEF(DRM_VIA_DEC_FUTEX, via_decoder_futex, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_DMA_INIT, via_dma_init, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_CMDBUFFER, via_cmdbuffer, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_FLUSH, via_flush_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_PCICMD, via_pci_cmdbuffer, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_CMDBUF_SIZE, via_cmdbuf_size, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_WAIT_IRQ, via_wait_irq, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_DMA_BLIT, via_dma_blit, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_VIA_BLIT_SYNC, via_dma_blit_sync, DRM_AUTH)
 };
 
 int via_max_ioctl = DRM_ARRAY_SIZE(via_ioctls);
index 635e463..b15785b 100644 (file)
@@ -54,7 +54,7 @@
 #define VIA_NR_XVMC_LOCKS             5
 #define VIA_MAX_CACHELINE_SIZE   64
 #define XVMCLOCKPTR(saPriv,lockNo)                                     \
-       ((volatile drm_hw_lock_t *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
+       ((volatile struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
                                      (VIA_MAX_CACHELINE_SIZE - 1)) &   \
                                     ~(VIA_MAX_CACHELINE_SIZE - 1)) +   \
                                    VIA_MAX_CACHELINE_SIZE*(lockNo)))
@@ -187,7 +187,7 @@ typedef struct _drm_via_tex_region {
 typedef struct _drm_via_sarea {
        unsigned int dirty;
        unsigned int nbox;
-       drm_clip_rect_t boxes[VIA_NR_SAREA_CLIPRECTS];
+       struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS];
        drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1];
        int texAge;             /* last time texture was uploaded */
        int ctxOwner;           /* last context to upload state */
index 0a478fe..9f09955 100644 (file)
@@ -40,7 +40,7 @@ static struct pci_device_id pciidlist[] = {
 
 
 #ifdef VIA_HAVE_FENCE
-static drm_fence_driver_t via_fence_driver = {
+static struct drm_fence_driver via_fence_driver = {
        .num_classes = 1,
        .wrap_diff = (1 << 30),
        .flush_diff = (1 << 20),
@@ -65,7 +65,7 @@ static uint32_t via_mem_prios[] = {DRM_BO_MEM_PRIV0, DRM_BO_MEM_VRAM, DRM_BO_MEM
 static uint32_t via_busy_prios[] = {DRM_BO_MEM_TT, DRM_BO_MEM_PRIV0, DRM_BO_MEM_VRAM, DRM_BO_MEM_LOCAL};
 
 
-static drm_bo_driver_t via_bo_driver = {
+static struct drm_bo_driver via_bo_driver = {
        .mem_type_prio = via_mem_prios,
        .mem_busy_prio = via_busy_prios,
        .num_mem_type_prio = ARRAY_SIZE(via_mem_prios),
index baafbbf..15e6595 100644 (file)
@@ -116,7 +116,7 @@ typedef struct drm_via_private {
        /* Memory manager stuff */
 #ifdef VIA_HAVE_CORE_MM
        unsigned int idle_fault;
-       drm_sman_t sman;
+       struct drm_sman sman;
        int vram_initialized;
        int agp_initialized;
        unsigned long vram_offset;
@@ -148,54 +148,55 @@ enum via_family {
 #define VIA_READ8(reg)         DRM_READ8(VIA_BASE, reg)
 #define VIA_WRITE8(reg,val)    DRM_WRITE8(VIA_BASE, reg, val)
 
-extern drm_ioctl_desc_t via_ioctls[];
+extern struct drm_ioctl_desc via_ioctls[];
 extern int via_max_ioctl;
 
-extern int via_fb_init(DRM_IOCTL_ARGS);
-extern int via_mem_alloc(DRM_IOCTL_ARGS);
-extern int via_mem_free(DRM_IOCTL_ARGS);
-extern int via_agp_init(DRM_IOCTL_ARGS);
-extern int via_map_init(DRM_IOCTL_ARGS);
-extern int via_decoder_futex(DRM_IOCTL_ARGS);
-extern int via_wait_irq(DRM_IOCTL_ARGS);
-extern int via_dma_blit_sync( DRM_IOCTL_ARGS );
-extern int via_dma_blit( DRM_IOCTL_ARGS );
+extern int via_fb_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int via_mem_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int via_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int via_agp_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int via_map_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int via_decoder_futex(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int via_wait_irq(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int via_dma_blit_sync( struct drm_device *dev, void *data, struct drm_file *file_priv );
+extern int via_dma_blit( struct drm_device *dev, void *data, struct drm_file *file_priv );
 
-extern int via_driver_load(drm_device_t *dev, unsigned long chipset);
-extern int via_driver_unload(drm_device_t *dev);
-extern int via_final_context(drm_device_t * dev, int context);
+extern int via_driver_load(struct drm_device *dev, unsigned long chipset);
+extern int via_driver_unload(struct drm_device *dev);
+extern int via_final_context(struct drm_device * dev, int context);
 
-extern int via_do_cleanup_map(drm_device_t * dev);
-extern int via_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence);
+extern int via_do_cleanup_map(struct drm_device * dev);
+extern int via_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence);
 
 extern irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS);
-extern void via_driver_irq_preinstall(drm_device_t * dev);
-extern void via_driver_irq_postinstall(drm_device_t * dev);
-extern void via_driver_irq_uninstall(drm_device_t * dev);
+extern void via_driver_irq_preinstall(struct drm_device * dev);
+extern void via_driver_irq_postinstall(struct drm_device * dev);
+extern void via_driver_irq_uninstall(struct drm_device * dev);
 
-extern int via_dma_cleanup(drm_device_t * dev);
+extern int via_dma_cleanup(struct drm_device * dev);
 extern void via_init_command_verifier(void);
-extern int via_driver_dma_quiescent(drm_device_t * dev);
+extern int via_driver_dma_quiescent(struct drm_device * dev);
 extern void via_init_futex(drm_via_private_t *dev_priv);
 extern void via_cleanup_futex(drm_via_private_t *dev_priv);
 extern void via_release_futex(drm_via_private_t *dev_priv, int context);
 
 #ifdef VIA_HAVE_CORE_MM
-extern void via_reclaim_buffers_locked(drm_device_t *dev, struct file *filp);
-extern void via_lastclose(drm_device_t *dev);
+extern void via_reclaim_buffers_locked(struct drm_device *dev,
+                                      struct drm_file *file_priv);
+extern void via_lastclose(struct drm_device *dev);
 #else
-extern int via_init_context(drm_device_t * dev, int context);
+extern int via_init_context(struct drm_device * dev, int context);
 #endif
 
 #ifdef VIA_HAVE_DMABLIT
-extern void via_dmablit_handler(drm_device_t *dev, int engine, int from_irq);
-extern void via_init_dmablit(drm_device_t *dev);
+extern void via_dmablit_handler(struct drm_device *dev, int engine, int from_irq);
+extern void via_init_dmablit(struct drm_device *dev);
 #endif
 
 #ifdef VIA_HAVE_FENCE
 extern void via_fence_timer(unsigned long data);
-extern void via_poke_flush(drm_device_t * dev, uint32_t class);
-extern int via_fence_emit_sequence(drm_device_t * dev, uint32_t class,
+extern void via_poke_flush(struct drm_device * dev, uint32_t class);
+extern int via_fence_emit_sequence(struct drm_device * dev, uint32_t class,
                                   uint32_t flags,
                                   uint32_t * sequence,
                                   uint32_t * native_type);
@@ -204,14 +205,14 @@ extern int via_fence_has_irq(struct drm_device * dev, uint32_t class,
 #endif
 
 #ifdef VIA_HAVE_BUFFER
-extern drm_ttm_backend_t *via_create_ttm_backend_entry(drm_device_t *dev);
-extern int via_fence_types(drm_buffer_object_t *bo, uint32_t *class, uint32_t *type);
-extern int via_invalidate_caches(drm_device_t *dev, uint32_t buffer_flags);
-extern int via_init_mem_type(drm_device_t *dev, uint32_t type,
-                              drm_mem_type_manager_t *man);
-extern uint32_t via_evict_mask(drm_buffer_object_t *bo);
-extern int via_move(drm_buffer_object_t *bo, int evict,
-               int no_wait, drm_bo_mem_reg_t *new_mem);
+extern struct drm_ttm_backend *via_create_ttm_backend_entry(struct drm_device *dev);
+extern int via_fence_types(struct drm_buffer_object *bo, uint32_t *type);
+extern int via_invalidate_caches(struct drm_device *dev, uint64_t buffer_flags);
+extern int via_init_mem_type(struct drm_device *dev, uint32_t type,
+                              struct drm_mem_type_manager *man);
+extern uint32_t via_evict_mask(struct drm_buffer_object *bo);
+extern int via_move(struct drm_buffer_object *bo, int evict,
+               int no_wait, struct drm_bo_mem_reg *new_mem);
 #endif
 
 #endif
index 2ac8697..475b646 100644 (file)
@@ -99,7 +99,7 @@ static unsigned time_diff(struct timeval *now,struct timeval *then)
 
 irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS)
 {
-       drm_device_t *dev = (drm_device_t *) arg;
+       struct drm_device *dev = (struct drm_device *) arg;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        u32 status;
        int handled = 0;
@@ -171,7 +171,7 @@ static __inline__ void viadrv_acknowledge_irqs(drm_via_private_t * dev_priv)
        }
 }
 
-int via_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
+int via_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        unsigned int cur_vblank;
@@ -199,7 +199,7 @@ int via_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence)
 }
 
 static int
-via_driver_irq_wait(drm_device_t * dev, unsigned int irq, int force_sequence,
+via_driver_irq_wait(struct drm_device * dev, unsigned int irq, int force_sequence,
                    unsigned int *sequence)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
@@ -213,13 +213,13 @@ via_driver_irq_wait(drm_device_t * dev, unsigned int irq, int force_sequence,
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        if (irq >= drm_via_irq_num ) {
                DRM_ERROR("%s Trying to wait on unknown irq %d\n", __FUNCTION__,
                          irq);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
                
        real_irq = dev_priv->irq_map[irq];
@@ -227,7 +227,7 @@ via_driver_irq_wait(drm_device_t * dev, unsigned int irq, int force_sequence,
        if (real_irq < 0) {
                DRM_ERROR("%s Video IRQ %d not available on this hardware.\n",
                          __FUNCTION__, irq);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
        masks = dev_priv->irq_masks;
@@ -253,7 +253,7 @@ via_driver_irq_wait(drm_device_t * dev, unsigned int irq, int force_sequence,
  * drm_dma.h hooks
  */
 
-void via_driver_irq_preinstall(drm_device_t * dev)
+void via_driver_irq_preinstall(struct drm_device * dev)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        u32 status;
@@ -302,7 +302,7 @@ void via_driver_irq_preinstall(drm_device_t * dev)
        }
 }
 
-void via_driver_irq_postinstall(drm_device_t * dev)
+void via_driver_irq_postinstall(struct drm_device * dev)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        u32 status;
@@ -321,7 +321,7 @@ void via_driver_irq_postinstall(drm_device_t * dev)
        }
 }
 
-void via_driver_irq_uninstall(drm_device_t * dev)
+void via_driver_irq_uninstall(struct drm_device * dev)
 {
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        u32 status;
@@ -340,11 +340,9 @@ void via_driver_irq_uninstall(drm_device_t * dev)
        }
 }
 
-int via_wait_irq(DRM_IOCTL_ARGS)
+int via_wait_irq(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_irqwait_t __user *argp = (void __user *)data;
-       drm_via_irqwait_t irqwait;
+       drm_via_irqwait_t *irqwait = data;
        struct timeval now;
        int ret = 0;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
@@ -352,46 +350,44 @@ int via_wait_irq(DRM_IOCTL_ARGS)
        int force_sequence;
 
        if (!dev->irq)
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
 
-       DRM_COPY_FROM_USER_IOCTL(irqwait, argp, sizeof(irqwait));
-       if (irqwait.request.irq >= dev_priv->num_irqs) {
+       if (irqwait->request.irq >= dev_priv->num_irqs) {
                DRM_ERROR("%s Trying to wait on unknown irq %d\n", __FUNCTION__, 
-                         irqwait.request.irq);
-               return DRM_ERR(EINVAL);
+                         irqwait->request.irq);
+               return -EINVAL;
        }
 
-       cur_irq += irqwait.request.irq;
+       cur_irq += irqwait->request.irq;
 
-       switch (irqwait.request.type & ~VIA_IRQ_FLAGS_MASK) {
+       switch (irqwait->request.type & ~VIA_IRQ_FLAGS_MASK) {
        case VIA_IRQ_RELATIVE:
-               irqwait.request.sequence += atomic_read(&cur_irq->irq_received);
-               irqwait.request.type &= ~_DRM_VBLANK_RELATIVE;
+               irqwait->request.sequence +=
+                       atomic_read(&cur_irq->irq_received);
+               irqwait->request.type &= ~_DRM_VBLANK_RELATIVE;
        case VIA_IRQ_ABSOLUTE:
                break;
        default:
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       if (irqwait.request.type & VIA_IRQ_SIGNAL) {
+       if (irqwait->request.type & VIA_IRQ_SIGNAL) {
                DRM_ERROR("%s Signals on Via IRQs not implemented yet.\n", 
                          __FUNCTION__);
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
 
-       force_sequence = (irqwait.request.type & VIA_IRQ_FORCE_SEQUENCE);
+       force_sequence = (irqwait->request.type & VIA_IRQ_FORCE_SEQUENCE);
 
-       ret = via_driver_irq_wait(dev, irqwait.request.irq, force_sequence,
-                                 &irqwait.request.sequence);
+       ret = via_driver_irq_wait(dev, irqwait->request.irq, force_sequence,
+                                 &irqwait->request.sequence);
 #ifdef __linux__
        do_gettimeofday(&now);
 #else
        microtime(&now);
 #endif
-       irqwait.reply.tval_sec = now.tv_sec;
-       irqwait.reply.tval_usec = now.tv_usec;
-
-       DRM_COPY_TO_USER_IOCTL(argp, irqwait, sizeof(irqwait));
+       irqwait->reply.tval_sec = now.tv_sec;
+       irqwait->reply.tval_usec = now.tv_usec;
 
        return ret;
 }
index 037a1c2..1623df6 100644 (file)
@@ -25,7 +25,7 @@
 #include "via_drm.h"
 #include "via_drv.h"
 
-static int via_do_init_map(drm_device_t * dev, drm_via_init_t * init)
+static int via_do_init_map(struct drm_device * dev, drm_via_init_t * init)
 {
        drm_via_private_t *dev_priv = dev->dev_private;
        int ret = 0;
@@ -83,7 +83,7 @@ static int via_do_init_map(drm_device_t * dev, drm_via_init_t * init)
 
 }
 
-int via_do_cleanup_map(drm_device_t * dev)
+int via_do_cleanup_map(struct drm_device * dev)
 {
        via_dma_cleanup(dev);
 
@@ -91,19 +91,15 @@ int via_do_cleanup_map(drm_device_t * dev)
 }
 
 
-int via_map_init(DRM_IOCTL_ARGS)
+int via_map_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_init_t init;
+       drm_via_init_t *init = data;
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       DRM_COPY_FROM_USER_IOCTL(init, (drm_via_init_t __user *) data,
-                                sizeof(init));
-
-       switch (init.func) {
+       switch (init->func) {
        case VIA_INIT_MAP:
-               return via_do_init_map(dev, &init);
+               return via_do_init_map(dev, init);
        case VIA_CLEANUP_MAP:
                return via_do_cleanup_map(dev);
        }
@@ -111,14 +107,14 @@ int via_map_init(DRM_IOCTL_ARGS)
        return -EINVAL;
 }
 
-int via_driver_load(drm_device_t *dev, unsigned long chipset)
+int via_driver_load(struct drm_device *dev, unsigned long chipset)
 {
        drm_via_private_t *dev_priv;
        int ret = 0;
 
        dev_priv = drm_calloc(1, sizeof(drm_via_private_t), DRM_MEM_DRIVER);
        if (dev_priv == NULL)
-               return DRM_ERR(ENOMEM);
+               return -ENOMEM;
 
        dev->dev_private = (void *)dev_priv;
 
@@ -133,7 +129,7 @@ int via_driver_load(drm_device_t *dev, unsigned long chipset)
        return ret;
 }
 
-int via_driver_unload(drm_device_t *dev)
+int via_driver_unload(struct drm_device *dev)
 {
        drm_via_private_t *dev_priv = dev->dev_private;
 
index 8f175a7..45790dc 100644 (file)
@@ -72,17 +72,14 @@ static int del_alloc_set(int context, int type, unsigned long val)
 /* agp memory management */
 static memHeap_t *AgpHeap = NULL;
 
-int via_agp_init(DRM_IOCTL_ARGS)
+int via_agp_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_via_agp_t agp;
+       drm_via_agp_t *agp = data;
 
-       DRM_COPY_FROM_USER_IOCTL(agp, (drm_via_agp_t __user *) data,
-                                sizeof(agp));
+       AgpHeap = via_mmInit(agp->offset, agp->size);
 
-       AgpHeap = via_mmInit(agp.offset, agp.size);
-
-       DRM_DEBUG("offset = %lu, size = %lu", (unsigned long)agp.offset,
-                 (unsigned long)agp.size);
+       DRM_DEBUG("offset = %lu, size = %lu", (unsigned long)agp->offset,
+                 (unsigned long)agp->size);
 
        return 0;
 }
@@ -90,11 +87,9 @@ int via_agp_init(DRM_IOCTL_ARGS)
 /* fb memory management */
 static memHeap_t *FBHeap = NULL;
 
-int via_fb_init(DRM_IOCTL_ARGS)
+int via_fb_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_via_fb_t fb;
-
-       DRM_COPY_FROM_USER_IOCTL(fb, (drm_via_fb_t __user *) data, sizeof(fb));
+       drm_via_fb_t *fb = data;
 
        FBHeap = via_mmInit(fb.offset, fb.size);
 
@@ -191,25 +186,18 @@ int via_final_context(struct drm_device *dev, int context)
        return 1;
 }
 
-int via_mem_alloc(DRM_IOCTL_ARGS)
+int via_mem_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_via_mem_t mem;
-
-       DRM_COPY_FROM_USER_IOCTL(mem, (drm_via_mem_t __user *) data,
-                                sizeof(mem));
+       drm_via_mem_t *mem = data;
 
        switch (mem.type) {
        case VIA_MEM_VIDEO:
-               if (via_fb_alloc(&mem) < 0)
+               if (via_fb_alloc(mem) < 0)
                        return -EFAULT;
-               DRM_COPY_TO_USER_IOCTL((drm_via_mem_t __user *) data, mem,
-                                      sizeof(mem));
                return 0;
        case VIA_MEM_AGP:
-               if (via_agp_alloc(&mem) < 0)
+               if (via_agp_alloc(mem) < 0)
                        return -EFAULT;
-               DRM_COPY_TO_USER_IOCTL((drm_via_mem_t __user *) data, mem,
-                                      sizeof(mem));
                return 0;
        }
 
@@ -288,21 +276,18 @@ static int via_agp_alloc(drm_via_mem_t * mem)
        return retval;
 }
 
-int via_mem_free(DRM_IOCTL_ARGS)
+int via_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       drm_via_mem_t mem;
+       drm_via_mem_t *mem = data;
 
-       DRM_COPY_FROM_USER_IOCTL(mem, (drm_via_mem_t __user *) data,
-                                sizeof(mem));
-
-       switch (mem.type) {
+       switch (mem->type) {
 
        case VIA_MEM_VIDEO:
-               if (via_fb_free(&mem) == 0)
+               if (via_fb_free(mem) == 0)
                        return 0;
                break;
        case VIA_MEM_AGP:
-               if (via_agp_free(&mem) == 0)
+               if (via_agp_free(mem) == 0)
                        return 0;
                break;
        }
@@ -356,7 +341,7 @@ static int via_agp_free(drm_via_mem_t * mem)
                retval = -1;
        }
 
-       DRM_DEBUG("free agp, free = %ld\n", agp.free);
+       DRM_DEBUG("free agp, free = %ld\n", agp.nfree);
 
        return retval;
 }
index 4b844af..ded5c4e 100644 (file)
@@ -252,10 +252,10 @@ eat_words(const uint32_t ** buf, const uint32_t * buf_end, unsigned num_words)
 static __inline__ drm_local_map_t *via_drm_lookup_agp_map(drm_via_state_t * seq,
                                                          unsigned long offset,
                                                          unsigned long size,
-                                                         drm_device_t * dev)
+                                                         struct drm_device * dev)
 {
 #ifdef __linux__
-       drm_map_list_t *r_list;
+       struct drm_map_list *r_list;
 #endif
        drm_local_map_t *map = seq->map_cache;
 
@@ -967,7 +967,7 @@ via_parse_vheader6(drm_via_private_t * dev_priv, uint32_t const **buffer,
 
 int
 via_verify_command_stream(const uint32_t * buf, unsigned int size,
-                         drm_device_t * dev, int agp)
+                         struct drm_device * dev, int agp)
 {
 
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
@@ -1031,18 +1031,18 @@ via_verify_command_stream(const uint32_t * buf, unsigned int size,
                case state_error:
                default:
                        *hc_state = saved_state;
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
        if (state == state_error) {
                *hc_state = saved_state;
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        return 0;
 }
 
 int
-via_parse_command_stream(drm_device_t * dev, const uint32_t * buf,
+via_parse_command_stream(struct drm_device * dev, const uint32_t * buf,
                         unsigned int size)
 {
 
@@ -1087,11 +1087,11 @@ via_parse_command_stream(drm_device_t * dev, const uint32_t * buf,
                        break;
                case state_error:
                default:
-                       return DRM_ERR(EINVAL);
+                       return -EINVAL;
                }
        }
        if (state == state_error) {
-               return DRM_ERR(EINVAL);
+               return -EINVAL;
        }
        return 0;
 }
index 84497c4..dac1db9 100644 (file)
@@ -49,7 +49,7 @@ typedef struct {
        drm_via_sequence_t unfinished;
        int agp_texture;
        int multitex;
-       drm_device_t *dev;
+       struct drm_device *dev;
        drm_local_map_t *map_cache;
        uint32_t vertex_count;
        int agp;
@@ -57,8 +57,8 @@ typedef struct {
 } drm_via_state_t;
 
 extern int via_verify_command_stream(const uint32_t * buf, unsigned int size, 
-                                   drm_device_t *dev, int agp);
-extern int via_parse_command_stream(drm_device_t *dev, const uint32_t * buf,
+                                   struct drm_device *dev, int agp);
+extern int via_parse_command_stream(struct drm_device *dev, const uint32_t * buf,
                                    unsigned int size);
 
 #endif
index 300ac61..c15e75b 100644 (file)
@@ -65,10 +65,9 @@ void via_release_futex(drm_via_private_t * dev_priv, int context)
        }
 }
 
-int via_decoder_futex(DRM_IOCTL_ARGS)
+int via_decoder_futex(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_futex_t fx;
+       drm_via_futex_t *fx = data;
        volatile int *lock;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        drm_via_sarea_t *sAPriv = dev_priv->sarea_priv;
@@ -76,21 +75,18 @@ int via_decoder_futex(DRM_IOCTL_ARGS)
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       DRM_COPY_FROM_USER_IOCTL(fx, (drm_via_futex_t __user *) data,
-                                sizeof(fx));
-
-       if (fx.lock > VIA_NR_XVMC_LOCKS)
+       if (fx->lock > VIA_NR_XVMC_LOCKS)
                return -EFAULT;
 
-       lock = (volatile int *)XVMCLOCKPTR(sAPriv, fx.lock);
+       lock = (volatile int *)XVMCLOCKPTR(sAPriv, fx->lock);
 
-       switch (fx.func) {
+       switch (fx->func) {
        case VIA_FUTEX_WAIT:
-               DRM_WAIT_ON(ret, dev_priv->decoder_queue[fx.lock],
-                           (fx.ms / 10) * (DRM_HZ / 100), *lock != fx.val);
+               DRM_WAIT_ON(ret, dev_priv->decoder_queue[fx->lock],
+                           (fx->ms / 10) * (DRM_HZ / 100), *lock != fx->val);
                return ret;
        case VIA_FUTEX_WAKE:
-               DRM_WAKEUP(&(dev_priv->decoder_queue[fx.lock]));
+               DRM_WAKEUP(&(dev_priv->decoder_queue[fx->lock]));
                return 0;
        }
        return 0;
diff --git a/tests/Makefile b/tests/Makefile
deleted file mode 100644 (file)
index b406e0a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-# These definitions are for handling dependencies in the out of kernel build.
-
-PROGS = dristat drmstat
-
-CLEANFILES = *.o *.ko $(PROGS) .depend .*.flags .*.d 
-
-# Build test utilities
-
-PRGCFLAGS = $(CFLAGS) -g -ansi -pedantic -DPOSIX_C_SOURCE=199309L \
-           -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE \
-           -I. -I../libdrm -I../shared-core
-
-DRMSTATLIBS = -L../libdrm -ldrm
-
-
-programs: $(PROGS)
-
-dristat: dristat.c
-       $(CC) $(PRGCFLAGS) $< -o $@
-
-drmstat: drmstat.c
-       $(CC) $(PRGCFLAGS) $< -o $@ $(DRMSTATLIBS)
-
-clean:
-       rm -f $(CLEANFILES)
-
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644 (file)
index 0000000..3b97fb7
--- /dev/null
@@ -0,0 +1,23 @@
+AM_CFLAGS = \
+       -I $(top_srcdir)/shared-core
+
+noinst_PROGRAMS = \
+       dristat \
+       drmstat
+
+EXTRA_LTLIBRARIES = libdrmtest.la
+libdrmtest_la_SOURCES = \
+       drmtest.c \
+       drmtest.h
+libdrmtest_la_LIBADD = \
+       $(top_builddir)/libdrm/libdrm.la
+
+LDADD = libdrmtest.la
+
+TESTS = openclose \
+       getversion \
+       getclient \
+       updatedraw
+
+EXTRA_PROGRAMS = $(TESTS)
+CLEANFILES = $(EXTRA_PROGRAMS) $(EXTRA_LTLIBRARIES)
\ No newline at end of file
diff --git a/tests/drmtest.c b/tests/drmtest.c
new file mode 100644 (file)
index 0000000..cae99a0
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright © 2007 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include <fcntl.h>
+#include "drmtest.h"
+
+/** Open the first DRM device we can find, searching up to 16 device nodes */
+int drm_open_any(void)
+{
+       char name[20];
+       int i, fd;
+
+       for (i = 0; i < 16; i++) {
+               sprintf(name, "/dev/dri/card%d", i);
+               fd = open(name, O_RDWR);
+               if (fd != -1)
+                       return fd;
+       }
+       abort();
+}
+
+
+/**
+ * Open the first DRM device we can find where we end up being the master.
+ */
+int drm_open_any_master(void)
+{
+       char name[20];
+       int i, fd;
+
+       for (i = 0; i < 16; i++) {
+               drm_client_t client;
+               int ret;
+
+               sprintf(name, "/dev/dri/card%d", i);
+               fd = open(name, O_RDWR);
+               if (fd == -1)
+                       continue;
+
+               /* Check that we're the only opener and authed. */
+               client.idx = 0;
+               ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
+               assert (ret == 0);
+               if (!client.auth) {
+                       close(fd);
+                       continue;
+               }
+               client.idx = 1;
+               ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
+               if (ret != -1 || errno != EINVAL) {
+                       close(fd);
+                       continue;
+               }
+               return fd;
+       }
+       fprintf(stderr, "Couldn't find an un-controlled DRM device\n");
+       abort();
+}
+
diff --git a/tests/drmtest.h b/tests/drmtest.h
new file mode 100644 (file)
index 0000000..afa0df4
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2007 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <assert.h>
+#include <errno.h>
+
+#include "xf86drm.h"
+
+int drm_open_any(void);
+int drm_open_any_master(void);
diff --git a/tests/getclient.c b/tests/getclient.c
new file mode 100644 (file)
index 0000000..349c16e
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright © 2007 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include <limits.h>
+#include "drmtest.h"
+
+/**
+ * Checks DRM_IOCTL_GET_CLIENT.
+ */
+int main(int argc, char **argv)
+{
+       int fd, ret;
+       drm_client_t client;
+
+       fd = drm_open_any();
+
+       /* Look for client index 0.  This should exist whether we're operating
+        * on an otherwise unused drm device, or the X Server is running on
+        * the device.
+        */
+       client.idx = 0;
+       ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
+       assert(ret == 0);
+
+       /* Look for some absurd client index and make sure it's invalid.
+        * The DRM drivers currently always return data, so the user has
+        * no real way to detect when the list has terminated.  That's bad,
+        * and this test is XFAIL as a result.
+        */
+       client.idx = 0x7fffffff;
+       ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
+       assert(ret == -1 && errno == EINVAL);
+
+       close(fd);
+       return 0;
+}
diff --git a/tests/getversion.c b/tests/getversion.c
new file mode 100644 (file)
index 0000000..3de90de
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright © 2007 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "drmtest.h"
+
+/**
+ * Checks DRM_IOCTL_GET_VERSION and libdrm's drmGetVersion() interface to it.
+ */
+int main(int argc, char **argv)
+{
+       int fd;
+       drmVersionPtr v;
+
+       fd = drm_open_any();
+       v = drmGetVersion(fd);
+       assert(strlen(v->name) != 0);
+       assert(strlen(v->date) != 0);
+       assert(strlen(v->desc) != 0);
+       assert(v->version_major >= 1);
+       drmFree(v);
+       close(fd);
+       return 0;
+}
diff --git a/tests/openclose.c b/tests/openclose.c
new file mode 100644 (file)
index 0000000..946a445
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2007 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "drmtest.h"
+
+int main(int argc, char **argv)
+{
+       int fd;
+
+       fd = drm_open_any();
+       close(fd);
+       return 0;
+}
diff --git a/tests/updatedraw.c b/tests/updatedraw.c
new file mode 100644 (file)
index 0000000..2f22fef
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright © 2007 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include "drmtest.h"
+
+static void
+set_draw_cliprects_empty(int fd, int drawable)
+{
+       int ret;
+       struct drm_update_draw update;
+
+       update.handle = drawable;
+       update.type = DRM_DRAWABLE_CLIPRECTS;
+       update.num = 0;
+       update.data = 0;
+
+       ret = ioctl(fd, DRM_IOCTL_UPDATE_DRAW, &update);
+       assert(ret == 0);
+}
+
+static void
+set_draw_cliprects_empty_fail(int fd, int drawable)
+{
+       int ret;
+       struct drm_update_draw update;
+
+       update.handle = drawable;
+       update.type = DRM_DRAWABLE_CLIPRECTS;
+       update.num = 0;
+       update.data = 0;
+
+       ret = ioctl(fd, DRM_IOCTL_UPDATE_DRAW, &update);
+       assert(ret == -1 && errno == EINVAL);
+}
+
+static void
+set_draw_cliprects_2(int fd, int drawable)
+{
+       int ret;
+       struct drm_update_draw update;
+       drm_clip_rect_t rects[2];
+
+       rects[0].x1 = 0;
+       rects[0].y1 = 0;
+       rects[0].x2 = 10;
+       rects[0].y2 = 10;
+
+       rects[1].x1 = 10;
+       rects[1].y1 = 10;
+       rects[1].x2 = 20;
+       rects[1].y2 = 20;
+
+       update.handle = drawable;
+       update.type = DRM_DRAWABLE_CLIPRECTS;
+       update.num = 2;
+       update.data = (unsigned long long)(uintptr_t)&rects;
+
+       ret = ioctl(fd, DRM_IOCTL_UPDATE_DRAW, &update);
+       assert(ret == 0);
+}
+
+static int add_drawable(int fd)
+{
+       drm_draw_t drawarg;
+       int ret;
+
+       /* Create a drawable.
+        * IOCTL_ADD_DRAW is RDWR, though it should really just be RD
+        */
+       drawarg.handle = 0;
+       ret = ioctl(fd, DRM_IOCTL_ADD_DRAW, &drawarg);
+       assert(ret == 0);
+       return drawarg.handle;
+}
+
+static int rm_drawable(int fd, int drawable, int fail)
+{
+       drm_draw_t drawarg;
+       int ret;
+
+       /* Create a drawable.
+        * IOCTL_ADD_DRAW is RDWR, though it should really just be RD
+        */
+       drawarg.handle = drawable;
+       ret = ioctl(fd, DRM_IOCTL_RM_DRAW, &drawarg);
+       if (!fail)
+               assert(ret == 0);
+       else
+               assert(ret == -1 && errno == EINVAL);
+
+       return drawarg.handle;
+}
+
+/**
+ * Tests drawable management: adding, removing, and updating the cliprects of
+ * drawables.
+ */
+int main(int argc, char **argv)
+{
+       int fd, ret, d1, d2;
+
+       fd = drm_open_any_master();
+
+       d1 = add_drawable(fd);
+       d2 = add_drawable(fd);
+       /* Do a series of cliprect updates */
+       set_draw_cliprects_empty(fd, d1);
+       set_draw_cliprects_empty(fd, d2);
+       set_draw_cliprects_2(fd, d1);
+       set_draw_cliprects_empty(fd, d1);
+
+       /* Remove our drawables */
+       rm_drawable(fd, d1, 0);
+       rm_drawable(fd, d2, 0);
+
+       /* Check that removing an unknown drawable returns error */
+       rm_drawable(fd, 0x7fffffff, 1);
+
+       /* Attempt to set cliprects on a nonexistent drawable */
+       set_draw_cliprects_empty_fail(fd, d1);
+
+       close(fd);
+       return 0;
+}