- transition from "ioctl" interface

Signed-off-by: Ben Skeggs <bske...@nvidia.com>
---
 drivers/gpu/drm/nouveau/dispnv50/base.c       | 33 +++++--------
 drivers/gpu/drm/nouveau/dispnv50/core.c       | 49 ++++++++-----------
 drivers/gpu/drm/nouveau/dispnv50/curs.c       | 35 ++++++-------
 drivers/gpu/drm/nouveau/dispnv50/oimm.c       | 29 +++++------
 drivers/gpu/drm/nouveau/dispnv50/ovly.c       | 32 +++++-------
 drivers/gpu/drm/nouveau/dispnv50/wimm.c       | 25 ++++------
 drivers/gpu/drm/nouveau/dispnv50/wndw.c       | 27 ++++------
 .../gpu/drm/nouveau/include/nvif/driverif.h   | 18 +++++++
 drivers/gpu/drm/nouveau/include/nvif/object.h | 29 -----------
 .../gpu/drm/nouveau/nvkm/engine/disp/udisp.c  | 20 ++++++++
 10 files changed, 129 insertions(+), 168 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/dispnv50/base.c 
b/drivers/gpu/drm/nouveau/dispnv50/base.c
index 7c752acf2b48..db0b42c6243e 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/base.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/base.c
@@ -26,28 +26,21 @@
 int
 nv50_base_new(struct nouveau_drm *drm, int head, struct nv50_wndw **pwndw)
 {
-       struct {
-               s32 oclass;
-               int version;
-               int (*new)(struct nouveau_drm *, int, s32, struct nv50_wndw **);
-       } bases[] = {
-               { GK110_DISP_BASE_CHANNEL_DMA, 0, base917c_new },
-               { GK104_DISP_BASE_CHANNEL_DMA, 0, base917c_new },
-               { GF110_DISP_BASE_CHANNEL_DMA, 0, base907c_new },
-               { GT214_DISP_BASE_CHANNEL_DMA, 0, base827c_new },
-               { GT200_DISP_BASE_CHANNEL_DMA, 0, base827c_new },
-               {   G82_DISP_BASE_CHANNEL_DMA, 0, base827c_new },
-               {  NV50_DISP_BASE_CHANNEL_DMA, 0, base507c_new },
-               {}
-       };
-       struct nv50_disp *disp = nv50_disp(drm->dev);
-       int cid;
+       int (*ctor)(struct nouveau_drm *, int, s32, struct nv50_wndw **);
+       struct nvif_disp *disp = nv50_disp(drm->dev)->disp;
 
-       cid = nvif_mclass(&disp->disp->object, bases);
-       if (cid < 0) {
+       switch (disp->impl->chan.base.oclass) {
+       case GK110_DISP_BASE_CHANNEL_DMA: ctor = base917c_new; break;
+       case GK104_DISP_BASE_CHANNEL_DMA: ctor = base917c_new; break;
+       case GF110_DISP_BASE_CHANNEL_DMA: ctor = base907c_new; break;
+       case GT214_DISP_BASE_CHANNEL_DMA: ctor = base827c_new; break;
+       case GT200_DISP_BASE_CHANNEL_DMA: ctor = base827c_new; break;
+       case   G82_DISP_BASE_CHANNEL_DMA: ctor = base827c_new; break;
+       case  NV50_DISP_BASE_CHANNEL_DMA: ctor = base507c_new; break;
+       default:
                NV_ERROR(drm, "No supported base class\n");
-               return cid;
+               return -ENODEV;
        }
 
-       return bases[cid].new(drm, head, bases[cid].oclass, pwndw);
+       return ctor(drm, head, disp->impl->chan.base.oclass, pwndw);
 }
diff --git a/drivers/gpu/drm/nouveau/dispnv50/core.c 
b/drivers/gpu/drm/nouveau/dispnv50/core.c
index a9c3e53ef909..7d5438355715 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/core.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/core.c
@@ -43,41 +43,34 @@ nv50_core_del(struct nv50_core **pcore)
 int
 nv50_core_new(struct nouveau_drm *drm, struct nv50_core **pcore)
 {
-       struct {
-               s32 oclass;
-               int version;
-               int (*new)(struct nouveau_drm *, s32, struct nv50_core **);
-       } cores[] = {
-               { AD102_DISP_CORE_CHANNEL_DMA, 0, corec57d_new },
-               { GA102_DISP_CORE_CHANNEL_DMA, 0, corec57d_new },
-               { TU102_DISP_CORE_CHANNEL_DMA, 0, corec57d_new },
-               { GV100_DISP_CORE_CHANNEL_DMA, 0, corec37d_new },
-               { GP102_DISP_CORE_CHANNEL_DMA, 0, core917d_new },
-               { GP100_DISP_CORE_CHANNEL_DMA, 0, core917d_new },
-               { GM200_DISP_CORE_CHANNEL_DMA, 0, core917d_new },
-               { GM107_DISP_CORE_CHANNEL_DMA, 0, core917d_new },
-               { GK110_DISP_CORE_CHANNEL_DMA, 0, core917d_new },
-               { GK104_DISP_CORE_CHANNEL_DMA, 0, core917d_new },
-               { GF110_DISP_CORE_CHANNEL_DMA, 0, core907d_new },
-               { GT214_DISP_CORE_CHANNEL_DMA, 0, core827d_new },
-               { GT206_DISP_CORE_CHANNEL_DMA, 0, core827d_new },
-               { GT200_DISP_CORE_CHANNEL_DMA, 0, core827d_new },
-               {   G82_DISP_CORE_CHANNEL_DMA, 0, core827d_new },
-               {  NV50_DISP_CORE_CHANNEL_DMA, 0, core507d_new },
-               {}
-       };
+       int (*ctor)(struct nouveau_drm *, s32, struct nv50_core **);
        struct nv50_disp *disp = nv50_disp(drm->dev);
        struct nv50_core *core;
-       int cid;
        int ret;
 
-       cid = nvif_mclass(&disp->disp->object, cores);
-       if (cid < 0) {
+       switch (disp->disp->impl->chan.core.oclass) {
+       case AD102_DISP_CORE_CHANNEL_DMA: ctor = corec57d_new; break;
+       case GA102_DISP_CORE_CHANNEL_DMA: ctor = corec57d_new; break;
+       case TU102_DISP_CORE_CHANNEL_DMA: ctor = corec57d_new; break;
+       case GV100_DISP_CORE_CHANNEL_DMA: ctor = corec37d_new; break;
+       case GP102_DISP_CORE_CHANNEL_DMA: ctor = core917d_new; break;
+       case GP100_DISP_CORE_CHANNEL_DMA: ctor = core917d_new; break;
+       case GM200_DISP_CORE_CHANNEL_DMA: ctor = core917d_new; break;
+       case GM107_DISP_CORE_CHANNEL_DMA: ctor = core917d_new; break;
+       case GK110_DISP_CORE_CHANNEL_DMA: ctor = core917d_new; break;
+       case GK104_DISP_CORE_CHANNEL_DMA: ctor = core917d_new; break;
+       case GF110_DISP_CORE_CHANNEL_DMA: ctor = core907d_new; break;
+       case GT214_DISP_CORE_CHANNEL_DMA: ctor = core827d_new; break;
+       case GT206_DISP_CORE_CHANNEL_DMA: ctor = core827d_new; break;
+       case GT200_DISP_CORE_CHANNEL_DMA: ctor = core827d_new; break;
+       case   G82_DISP_CORE_CHANNEL_DMA: ctor = core827d_new; break;
+       case  NV50_DISP_CORE_CHANNEL_DMA: ctor = core507d_new; break;
+       default:
                NV_ERROR(drm, "No supported core channel class\n");
-               return cid;
+               return -ENODEV;
        }
 
-       ret = cores[cid].new(drm, cores[cid].oclass, &core);
+       ret = ctor(drm, disp->disp->impl->chan.core.oclass, &core);
        *pcore = core;
        if (ret)
                return ret;
diff --git a/drivers/gpu/drm/nouveau/dispnv50/curs.c 
b/drivers/gpu/drm/nouveau/dispnv50/curs.c
index 31d8b2e4791d..8d1026c6baec 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/curs.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/curs.c
@@ -26,29 +26,22 @@
 int
 nv50_curs_new(struct nouveau_drm *drm, int head, struct nv50_wndw **pwndw)
 {
-       struct {
-               s32 oclass;
-               int version;
-               int (*new)(struct nouveau_drm *, int, s32, struct nv50_wndw **);
-       } curses[] = {
-               { GA102_DISP_CURSOR, 0, cursc37a_new },
-               { TU102_DISP_CURSOR, 0, cursc37a_new },
-               { GV100_DISP_CURSOR, 0, cursc37a_new },
-               { GK104_DISP_CURSOR, 0, curs907a_new },
-               { GF110_DISP_CURSOR, 0, curs907a_new },
-               { GT214_DISP_CURSOR, 0, curs507a_new },
-               {   G82_DISP_CURSOR, 0, curs507a_new },
-               {  NV50_DISP_CURSOR, 0, curs507a_new },
-               {}
-       };
-       struct nv50_disp *disp = nv50_disp(drm->dev);
-       int cid;
+       int (*ctor)(struct nouveau_drm *, int, s32, struct nv50_wndw **);
+       struct nvif_disp *disp = nv50_disp(drm->dev)->disp;
 
-       cid = nvif_mclass(&disp->disp->object, curses);
-       if (cid < 0) {
+       switch (disp->impl->chan.curs.oclass) {
+       case GA102_DISP_CURSOR: ctor = cursc37a_new; break;
+       case TU102_DISP_CURSOR: ctor = cursc37a_new; break;
+       case GV100_DISP_CURSOR: ctor = cursc37a_new; break;
+       case GK104_DISP_CURSOR: ctor = curs907a_new; break;
+       case GF110_DISP_CURSOR: ctor = curs907a_new; break;
+       case GT214_DISP_CURSOR: ctor = curs507a_new; break;
+       case   G82_DISP_CURSOR: ctor = curs507a_new; break;
+       case  NV50_DISP_CURSOR: ctor = curs507a_new; break;
+       default:
                NV_ERROR(drm, "No supported cursor immediate class\n");
-               return cid;
+               return -ENODEV;
        }
 
-       return curses[cid].new(drm, head, curses[cid].oclass, pwndw);
+       return ctor(drm, head, disp->impl->chan.curs.oclass, pwndw);
 }
diff --git a/drivers/gpu/drm/nouveau/dispnv50/oimm.c 
b/drivers/gpu/drm/nouveau/dispnv50/oimm.c
index 2a2841d344c8..4a06cd293cb5 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/oimm.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/oimm.c
@@ -26,26 +26,19 @@
 int
 nv50_oimm_init(struct nouveau_drm *drm, struct nv50_wndw *wndw)
 {
-       static const struct {
-               s32 oclass;
-               int version;
-               int (*init)(struct nouveau_drm *, s32, struct nv50_wndw *);
-       } oimms[] = {
-               { GK104_DISP_OVERLAY, 0, oimm507b_init },
-               { GF110_DISP_OVERLAY, 0, oimm507b_init },
-               { GT214_DISP_OVERLAY, 0, oimm507b_init },
-               {   G82_DISP_OVERLAY, 0, oimm507b_init },
-               {  NV50_DISP_OVERLAY, 0, oimm507b_init },
-               {}
-       };
-       struct nv50_disp *disp = nv50_disp(drm->dev);
-       int cid;
+       int (*ctor)(struct nouveau_drm *, s32, struct nv50_wndw *);
+       struct nvif_disp *disp = nv50_disp(drm->dev)->disp;
 
-       cid = nvif_mclass(&disp->disp->object, oimms);
-       if (cid < 0) {
+       switch (disp->impl->chan.oimm.oclass) {
+       case GK104_DISP_OVERLAY: ctor = oimm507b_init; break;
+       case GF110_DISP_OVERLAY: ctor = oimm507b_init; break;
+       case GT214_DISP_OVERLAY: ctor = oimm507b_init; break;
+       case   G82_DISP_OVERLAY: ctor = oimm507b_init; break;
+       case  NV50_DISP_OVERLAY: ctor = oimm507b_init; break;
+       default:
                NV_ERROR(drm, "No supported overlay immediate class\n");
-               return cid;
+               return -ENODEV;
        }
 
-       return oimms[cid].init(drm, oimms[cid].oclass, wndw);
+       return ctor(drm, disp->impl->chan.oimm.oclass, wndw);
 }
diff --git a/drivers/gpu/drm/nouveau/dispnv50/ovly.c 
b/drivers/gpu/drm/nouveau/dispnv50/ovly.c
index 90c246d47604..029c86a53c1f 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/ovly.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/ovly.c
@@ -27,29 +27,23 @@
 int
 nv50_ovly_new(struct nouveau_drm *drm, int head, struct nv50_wndw **pwndw)
 {
-       static const struct {
-               s32 oclass;
-               int version;
-               int (*new)(struct nouveau_drm *, int, s32, struct nv50_wndw **);
-       } ovlys[] = {
-               { GK104_DISP_OVERLAY_CONTROL_DMA, 0, ovly917e_new },
-               { GF110_DISP_OVERLAY_CONTROL_DMA, 0, ovly907e_new },
-               { GT214_DISP_OVERLAY_CHANNEL_DMA, 0, ovly827e_new },
-               { GT200_DISP_OVERLAY_CHANNEL_DMA, 0, ovly827e_new },
-               {   G82_DISP_OVERLAY_CHANNEL_DMA, 0, ovly827e_new },
-               {  NV50_DISP_OVERLAY_CHANNEL_DMA, 0, ovly507e_new },
-               {}
-       };
-       struct nv50_disp *disp = nv50_disp(drm->dev);
-       int cid, ret;
+       int (*ctor)(struct nouveau_drm *, int, s32, struct nv50_wndw **);
+       struct nvif_disp *disp = nv50_disp(drm->dev)->disp;
+       int ret;
 
-       cid = nvif_mclass(&disp->disp->object, ovlys);
-       if (cid < 0) {
+       switch (disp->impl->chan.ovly.oclass) {
+       case GK104_DISP_OVERLAY_CONTROL_DMA: ctor = ovly917e_new; break;
+       case GF110_DISP_OVERLAY_CONTROL_DMA: ctor = ovly907e_new; break;
+       case GT214_DISP_OVERLAY_CHANNEL_DMA: ctor = ovly827e_new; break;
+       case GT200_DISP_OVERLAY_CHANNEL_DMA: ctor = ovly827e_new; break;
+       case   G82_DISP_OVERLAY_CHANNEL_DMA: ctor = ovly827e_new; break;
+       case  NV50_DISP_OVERLAY_CHANNEL_DMA: ctor = ovly507e_new; break;
+       default:
                NV_ERROR(drm, "No supported overlay class\n");
-               return cid;
+               return -ENODEV;
        }
 
-       ret = ovlys[cid].new(drm, head, ovlys[cid].oclass, pwndw);
+       ret = ctor(drm, head, disp->impl->chan.ovly.oclass, pwndw);
        if (ret)
                return ret;
 
diff --git a/drivers/gpu/drm/nouveau/dispnv50/wimm.c 
b/drivers/gpu/drm/nouveau/dispnv50/wimm.c
index 566fbddfc8d7..c94830cf07cb 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/wimm.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/wimm.c
@@ -26,24 +26,17 @@
 int
 nv50_wimm_init(struct nouveau_drm *drm, struct nv50_wndw *wndw)
 {
-       struct {
-               s32 oclass;
-               int version;
-               int (*init)(struct nouveau_drm *, s32, struct nv50_wndw *);
-       } wimms[] = {
-               { GA102_DISP_WINDOW_IMM_CHANNEL_DMA, 0, wimmc37b_init },
-               { TU102_DISP_WINDOW_IMM_CHANNEL_DMA, 0, wimmc37b_init },
-               { GV100_DISP_WINDOW_IMM_CHANNEL_DMA, 0, wimmc37b_init },
-               {}
-       };
-       struct nv50_disp *disp = nv50_disp(drm->dev);
-       int cid;
+       int (*ctor)(struct nouveau_drm *, s32, struct nv50_wndw *);
+       struct nvif_disp *disp = nv50_disp(drm->dev)->disp;
 
-       cid = nvif_mclass(&disp->disp->object, wimms);
-       if (cid < 0) {
+       switch (disp->impl->chan.wimm.oclass) {
+       case GA102_DISP_WINDOW_IMM_CHANNEL_DMA: ctor = wimmc37b_init; break;
+       case TU102_DISP_WINDOW_IMM_CHANNEL_DMA: ctor = wimmc37b_init; break;
+       case GV100_DISP_WINDOW_IMM_CHANNEL_DMA: ctor = wimmc37b_init; break;
+       default:
                NV_ERROR(drm, "No supported window immediate class\n");
-               return cid;
+               return -ENODEV;
        }
 
-       return wimms[cid].init(drm, wimms[cid].oclass, wndw);
+       return ctor(drm, disp->impl->chan.wimm.oclass, wndw);
 }
diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.c 
b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
index 19606755daf5..6fb6d2252e15 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/wndw.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
@@ -810,27 +810,20 @@ int
 nv50_wndw_new(struct nouveau_drm *drm, enum drm_plane_type type, int index,
              struct nv50_wndw **pwndw)
 {
-       struct {
-               s32 oclass;
-               int version;
-               int (*new)(struct nouveau_drm *, enum drm_plane_type,
-                          int, s32, struct nv50_wndw **);
-       } wndws[] = {
-               { GA102_DISP_WINDOW_CHANNEL_DMA, 0, wndwc67e_new },
-               { TU102_DISP_WINDOW_CHANNEL_DMA, 0, wndwc57e_new },
-               { GV100_DISP_WINDOW_CHANNEL_DMA, 0, wndwc37e_new },
-               {}
-       };
-       struct nv50_disp *disp = nv50_disp(drm->dev);
-       int cid, ret;
+       int (*ctor)(struct nouveau_drm *, enum drm_plane_type, int, s32, struct 
nv50_wndw **);
+       struct nvif_disp *disp = nv50_disp(drm->dev)->disp;
+       int ret;
 
-       cid = nvif_mclass(&disp->disp->object, wndws);
-       if (cid < 0) {
+       switch (disp->impl->chan.wndw.oclass) {
+       case GA102_DISP_WINDOW_CHANNEL_DMA: ctor = wndwc67e_new; break;
+       case TU102_DISP_WINDOW_CHANNEL_DMA: ctor = wndwc57e_new; break;
+       case GV100_DISP_WINDOW_CHANNEL_DMA: ctor = wndwc37e_new; break;
+       default:
                NV_ERROR(drm, "No supported window class\n");
-               return cid;
+               return -ENODEV;
        }
 
-       ret = wndws[cid].new(drm, type, index, wndws[cid].oclass, pwndw);
+       ret = ctor(drm, type, index, disp->impl->chan.wndw.oclass, pwndw);
        if (ret)
                return ret;
 
diff --git a/drivers/gpu/drm/nouveau/include/nvif/driverif.h 
b/drivers/gpu/drm/nouveau/include/nvif/driverif.h
index e479e8114605..f96638ce4b12 100644
--- a/drivers/gpu/drm/nouveau/include/nvif/driverif.h
+++ b/drivers/gpu/drm/nouveau/include/nvif/driverif.h
@@ -220,6 +220,10 @@ struct nvif_faultbuf_impl {
 struct nvif_disp_impl {
        void (*del)(struct nvif_disp_priv *);
 
+       struct {
+               u32 oclass;
+       } caps;
+
        struct {
                u32 mask;
        } conn;
@@ -231,6 +235,20 @@ struct nvif_disp_impl {
        struct {
                u32 mask;
        } head;
+
+       struct {
+               struct nvif_disp_impl_core {
+                       s32 oclass;
+               } core;
+
+               struct nvif_disp_impl_dmac {
+                       s32 oclass;
+               } base, ovly, wndw, wimm;
+
+               struct nvif_disp_impl_pioc {
+                       s32 oclass;
+               } curs, oimm;
+       } chan;
 };
 
 struct nvif_device_impl {
diff --git a/drivers/gpu/drm/nouveau/include/nvif/object.h 
b/drivers/gpu/drm/nouveau/include/nvif/object.h
index 819ae1c9729d..10a8f3e1ea81 100644
--- a/drivers/gpu/drm/nouveau/include/nvif/object.h
+++ b/drivers/gpu/drm/nouveau/include/nvif/object.h
@@ -82,35 +82,6 @@ void nvif_object_unmap(struct nvif_object *);
 
 #define nvif_mthd(a,b,c,d) nvif_object_mthd((a), (b), (c), (d))
 
-struct nvif_mclass {
-       s32 oclass;
-       int version;
-};
-
-#define nvif_mclass(o,m) ({                                                    
\
-       struct nvif_object *object = (o);                                      \
-       struct nvif_sclass *sclass;                                            \
-       typeof(m[0]) *mclass = (m);                                            \
-       int ret = -ENODEV;                                                     \
-       int cnt, i, j;                                                         \
-                                                                               
\
-       cnt = nvif_object_sclass_get(object, &sclass);                         \
-       if (cnt >= 0) {                                                        \
-               for (i = 0; ret < 0 && mclass[i].oclass; i++) {                \
-                       for (j = 0; j < cnt; j++) {                            \
-                               if (mclass[i].oclass  == sclass[j].oclass &&   \
-                                   mclass[i].version >= sclass[j].minver &&   \
-                                   mclass[i].version <= sclass[j].maxver) {   \
-                                       ret = i;                               \
-                                       break;                                 \
-                               }                                              \
-                       }                                                      \
-               }                                                              \
-               nvif_object_sclass_put(&sclass);                               \
-       }                                                                      \
-       ret;                                                                   \
-})
-
 #define NVIF_RD32_(p,o,dr)   nvif_rd32((p), (o) + (dr))
 #define NVIF_WR32_(p,o,dr,f) nvif_wr32((p), (o) + (dr), (f))
 #define NVIF_RD32(p,A...) DRF_RD(NVIF_RD32_,                  (p), 0, ##A)
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.c 
b/drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.c
index 06e465edf3e9..fd8590514c7e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.c
@@ -171,6 +171,10 @@ nvkm_udisp_new(struct nvkm_device *device, const struct 
nvif_disp_impl **pimpl,
        udisp->disp = disp;
        udisp->impl = nvkm_udisp_impl;
 
+       if (disp->func->user.caps.oclass) {
+               udisp->impl.caps.oclass = disp->func->user.caps.oclass;
+       }
+
        list_for_each_entry(conn, &disp->conns, head)
                udisp->impl.conn.mask |= BIT(conn->index);
 
@@ -180,6 +184,22 @@ nvkm_udisp_new(struct nvkm_device *device, const struct 
nvif_disp_impl **pimpl,
        list_for_each_entry(head, &disp->heads, head)
                udisp->impl.head.mask |= BIT(head->id);
 
+       if (disp->func->user.core.oclass) {
+               udisp->impl.chan.core.oclass = disp->func->user.core.oclass;
+               udisp->impl.chan.curs.oclass = disp->func->user.curs.oclass;
+
+               if (!disp->func->user.wndw.oclass) {
+                       /* EVO */
+                       udisp->impl.chan.base.oclass = 
disp->func->user.base.oclass;
+                       udisp->impl.chan.ovly.oclass = 
disp->func->user.ovly.oclass;
+                       udisp->impl.chan.oimm.oclass = 
disp->func->user.oimm.oclass;
+               } else {
+                       /* NVDisplay (GV100-) */
+                       udisp->impl.chan.wndw.oclass = 
disp->func->user.wndw.oclass;
+                       udisp->impl.chan.wimm.oclass = 
disp->func->user.wimm.oclass;
+               }
+       }
+
        *pimpl = &udisp->impl;
        *ppriv = udisp;
        *pobject = &udisp->object;
-- 
2.41.0

Reply via email to