Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-leds
[sfrench/cifs-2.6.git] / drivers / char / drm / mga_state.c
index 2837e669183a29674747b71dd1101f09b1638a9a..d3f8aade07b336be0d6d37d2a1e09913669d5680 100644 (file)
@@ -42,7 +42,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;
@@ -150,8 +150,8 @@ static __inline__ void mga_g400_emit_tex0(drm_mga_private_t * dev_priv)
        drm_mga_texture_regs_t *tex = &sarea_priv->tex_state[0];
        DMA_LOCALS;
 
-/*     printk("mga_g400_emit_tex0 %x %x %x\n", tex->texorg, */
-/*            tex->texctl, tex->texctl2); */
+/*     printk("mga_g400_emit_tex0 %x %x %x\n", tex->texorg, */
+/*            tex->texctl, tex->texctl2); */
 
        BEGIN_DMA(6);
 
@@ -190,8 +190,8 @@ static __inline__ void mga_g400_emit_tex1(drm_mga_private_t * dev_priv)
        drm_mga_texture_regs_t *tex = &sarea_priv->tex_state[1];
        DMA_LOCALS;
 
-/*     printk("mga_g400_emit_tex1 %x %x %x\n", tex->texorg,  */
-/*            tex->texctl, tex->texctl2); */
+/*     printk("mga_g400_emit_tex1 %x %x %x\n", tex->texorg,  */
+/*            tex->texctl, tex->texctl2); */
 
        BEGIN_DMA(5);
 
@@ -256,7 +256,7 @@ static __inline__ void mga_g400_emit_pipe(drm_mga_private_t * dev_priv)
        unsigned int pipe = sarea_priv->warp_pipe;
        DMA_LOCALS;
 
-/*     printk("mga_g400_emit_pipe %x\n", pipe); */
+/*     printk("mga_g400_emit_pipe %x\n", pipe); */
 
        BEGIN_DMA(10);
 
@@ -392,7 +392,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;
@@ -411,7 +411,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;
@@ -453,13 +453,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;
@@ -471,7 +471,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;
 }
@@ -480,12 +480,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;
@@ -500,7 +500,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",
@@ -568,12 +568,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;
@@ -598,7 +598,7 @@ static void mga_dma_dispatch_swap(drm_device_t * dev)
                  MGA_PLNWT, 0xffffffff, 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;
 
@@ -619,10 +619,10 @@ static void mga_dma_dispatch_swap(drm_device_t * dev)
 
        FLUSH_DMA();
 
-       DRM_DEBUG("%s... done.\n", __FUNCTION__);
+       DRM_DEBUG("... done.\n");
 }
 
-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;
@@ -631,7 +631,7 @@ static void mga_dma_dispatch_vertex(drm_device_t * dev, drm_buf_t * buf)
        u32 length = (u32) buf->used;
        int i = 0;
        DMA_LOCALS;
-       DRM_DEBUG("vertex: buf=%d used=%d\n", buf->idx, buf->used);
+       DRM_DEBUG("buf=%d used=%d\n", buf->idx, buf->used);
 
        if (buf->used) {
                buf_priv->dispatched = 1;
@@ -669,7 +669,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;
@@ -678,7 +678,7 @@ static void mga_dma_dispatch_indices(drm_device_t * dev, drm_buf_t * buf,
        u32 address = (u32) buf->bus_address;
        int i = 0;
        DMA_LOCALS;
-       DRM_DEBUG("indices: buf=%d start=%d end=%d\n", buf->idx, start, end);
+       DRM_DEBUG("buf=%d start=%d end=%d\n", buf->idx, start, end);
 
        if (start != end) {
                buf_priv->dispatched = 1;
@@ -718,7 +718,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;
@@ -766,12 +766,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;
@@ -828,24 +828,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;
-
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       drm_mga_clear_t *clear = data;
 
-       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.
         */
@@ -854,13 +850,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;
@@ -876,37 +871,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;
+       drm_mga_vertex_t *vertex = data;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+       LOCK_TEST_WITH_RETURN(dev, file_priv);
 
-       DRM_COPY_FROM_USER_IOCTL(vertex,
-                                (drm_mga_vertex_t __user *) data,
-                                sizeof(vertex));
-
-       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);
@@ -916,82 +906,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);
+                       DRM_INFO("-EBUSY\n");
+               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.
         */
@@ -1000,28 +981,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.
         */
@@ -1030,24 +1007,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);
+               DRM_ERROR("called with no initialization\n");
+               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;
@@ -1055,36 +1028,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);
+               DRM_ERROR("called with no initialization\n");
+               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);
@@ -1093,53 +1065,40 @@ static int mga_set_fence(DRM_IOCTL_ARGS)
                  MGA_DMAPAD, 0x00000000, MGA_SOFTRAP, 0x00000000);
        ADVANCE_DMA();
 
-       if (DRM_COPY_TO_USER((u32 __user *) data, &temp, sizeof(u32))) {
-               DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
-       }
-
        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);
+               DRM_ERROR("called with no initialization\n");
+               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);
-
-       if (DRM_COPY_TO_USER((u32 __user *) data, &fence, sizeof(u32))) {
-               DRM_ERROR("copy_to_user\n");
-               return DRM_ERR(EFAULT);
-       }
-
+       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),
 };
 
 int mga_max_ioctl = DRM_ARRAY_SIZE(mga_ioctls);