int
 nv50_disp_chan_ctor(const struct nv50_disp_chan_func *func,
                    const struct nv50_disp_chan_mthd *mthd,
-                   struct nv50_disp_root *root, int chid, int head,
+                   struct nv50_disp_root *root, int ctrl, int user, int head,
                    const struct nvkm_oclass *oclass,
                    struct nv50_disp_chan *chan)
 {
        chan->func = func;
        chan->mthd = mthd;
        chan->root = root;
-       chan->chid.ctrl = chid;
-       chan->chid.user = chid;
+       chan->chid.ctrl = ctrl;
+       chan->chid.user = user;
        chan->head = head;
 
        if (disp->chan[chan->chid.user]) {
 int
 nv50_disp_chan_new_(const struct nv50_disp_chan_func *func,
                    const struct nv50_disp_chan_mthd *mthd,
-                   struct nv50_disp_root *root, int chid, int head,
+                   struct nv50_disp_root *root, int ctrl, int user, int head,
                    const struct nvkm_oclass *oclass,
                    struct nvkm_object **pobject)
 {
                return -ENOMEM;
        *pobject = &chan->object;
 
-       return nv50_disp_chan_ctor(func, mthd, root, chid, head, oclass, chan);
+       return nv50_disp_chan_ctor(func, mthd, root, ctrl, user,
+                                  head, oclass, chan);
 }
 
 
 int nv50_disp_chan_ctor(const struct nv50_disp_chan_func *,
                        const struct nv50_disp_chan_mthd *,
-                       struct nv50_disp_root *, int chid, int head,
+                       struct nv50_disp_root *, int ctrl, int user, int head,
                        const struct nvkm_oclass *, struct nv50_disp_chan *);
 int nv50_disp_chan_new_(const struct nv50_disp_chan_func *,
                        const struct nv50_disp_chan_mthd *,
-                       struct nv50_disp_root *, int chid, int head,
+                       struct nv50_disp_root *, int ctrl, int user, int head,
                        const struct nvkm_oclass *, struct nvkm_object **);
 
 extern const struct nv50_disp_chan_func nv50_disp_pioc_func;
 struct nv50_disp_pioc_oclass {
        int (*ctor)(const struct nv50_disp_chan_func *,
                    const struct nv50_disp_chan_mthd *,
-                   struct nv50_disp_root *, int chid,
+                   struct nv50_disp_root *, int ctrl, int user,
                    const struct nvkm_oclass *, void *data, u32 size,
                    struct nvkm_object **);
        struct nvkm_sclass base;
        const struct nv50_disp_chan_func *func;
        const struct nv50_disp_chan_mthd *mthd;
-       int chid;
+       struct {
+               int ctrl;
+               int user;
+       } chid;
 };
 
 extern const struct nv50_disp_pioc_oclass nv50_disp_oimm_oclass;
 
 int nv50_disp_curs_new(const struct nv50_disp_chan_func *,
                       const struct nv50_disp_chan_mthd *,
-                      struct nv50_disp_root *, int chid,
+                      struct nv50_disp_root *, int ctrl, int user,
                       const struct nvkm_oclass *, void *data, u32 size,
                       struct nvkm_object **);
 int nv50_disp_oimm_new(const struct nv50_disp_chan_func *,
                       const struct nv50_disp_chan_mthd *,
-                      struct nv50_disp_root *, int chid,
+                      struct nv50_disp_root *, int ctrl, int user,
                       const struct nvkm_oclass *, void *data, u32 size,
                       struct nvkm_object **);
 #endif
 
        .base.maxver = 0,
        .ctor = nv50_disp_curs_new,
        .func = &nv50_disp_pioc_func,
-       .chid = 7,
+       .chid = { 7, 7 },
 };
 
        .base.maxver = 0,
        .ctor = nv50_disp_curs_new,
        .func = &gf119_disp_pioc_func,
-       .chid = 13,
+       .chid = { 13, 13 },
 };
 
        .base.maxver = 0,
        .ctor = nv50_disp_curs_new,
        .func = &gf119_disp_pioc_func,
-       .chid = 13,
+       .chid = { 13, 13 },
 };
 
        .base.maxver = 0,
        .ctor = nv50_disp_curs_new,
        .func = &nv50_disp_pioc_func,
-       .chid = 7,
+       .chid = { 7, 7 },
 };
 
 int
 nv50_disp_curs_new(const struct nv50_disp_chan_func *func,
                   const struct nv50_disp_chan_mthd *mthd,
-                  struct nv50_disp_root *root, int chid,
+                  struct nv50_disp_root *root, int ctrl, int user,
                   const struct nvkm_oclass *oclass, void *data, u32 size,
                   struct nvkm_object **pobject)
 {
        } else
                return ret;
 
-       return nv50_disp_chan_new_(func, mthd, root, chid + head,
+       return nv50_disp_chan_new_(func, mthd, root, ctrl + head, user + head,
                                   head, oclass, pobject);
 }
 
        .base.maxver = 0,
        .ctor = nv50_disp_curs_new,
        .func = &nv50_disp_pioc_func,
-       .chid = 7,
+       .chid = { 7, 7 },
 };
 
        chan->func = func;
 
        ret = nv50_disp_chan_ctor(&nv50_disp_dmac_func_, mthd, root,
-                                 chid, head, oclass, &chan->base);
+                                 chid, chid, head, oclass, &chan->base);
        if (ret)
                return ret;
 
 
        .base.maxver = 0,
        .ctor = nv50_disp_oimm_new,
        .func = &nv50_disp_pioc_func,
-       .chid = 5,
+       .chid = { 5, 5 },
 };
 
        .base.maxver = 0,
        .ctor = nv50_disp_oimm_new,
        .func = &gf119_disp_pioc_func,
-       .chid = 9,
+       .chid = { 9, 9 },
 };
 
        .base.maxver = 0,
        .ctor = nv50_disp_oimm_new,
        .func = &gf119_disp_pioc_func,
-       .chid = 9,
+       .chid = { 9, 9 },
 };
 
        .base.maxver = 0,
        .ctor = nv50_disp_oimm_new,
        .func = &nv50_disp_pioc_func,
-       .chid = 5,
+       .chid = { 5, 5 },
 };
 
 int
 nv50_disp_oimm_new(const struct nv50_disp_chan_func *func,
                   const struct nv50_disp_chan_mthd *mthd,
-                  struct nv50_disp_root *root, int chid,
+                  struct nv50_disp_root *root, int ctrl, int user,
                   const struct nvkm_oclass *oclass, void *data, u32 size,
                   struct nvkm_object **pobject)
 {
        } else
                return ret;
 
-       return nv50_disp_chan_new_(func, mthd, root, chid + head,
+       return nv50_disp_chan_new_(func, mthd, root, ctrl + head, user + head,
                                   head, oclass, pobject);
 }
 
        .base.maxver = 0,
        .ctor = nv50_disp_oimm_new,
        .func = &nv50_disp_pioc_func,
-       .chid = 5,
+       .chid = { 5, 5 },
 };
 
 {
        const struct nv50_disp_pioc_oclass *sclass = oclass->priv;
        struct nv50_disp_root *root = nv50_disp_root(oclass->parent);
-       return sclass->ctor(sclass->func, sclass->mthd, root, sclass->chid,
-                           oclass, data, size, pobject);
+       return sclass->ctor(sclass->func, sclass->mthd, root, sclass->chid.ctrl,
+                           sclass->chid.user, oclass, data, size, pobject);
 }
 
 static int