#define __NVIF_CLASS_H__
 
 /* these class numbers are made up by us, and not nvidia-assigned */
-#define NVIF_CLASS_CONTROL                                    /* if0001.h */ -1
-#define NVIF_CLASS_PERFMON                                    /* if0002.h */ -2
-#define NVIF_CLASS_PERFDOM                                    /* if0003.h */ -3
-#define NVIF_CLASS_SW_NV04                                    /* if0004.h */ -4
-#define NVIF_CLASS_SW_NV10                                    /* if0005.h */ -5
-#define NVIF_CLASS_SW_NV50                                    /* if0005.h */ -6
-#define NVIF_CLASS_SW_GF100                                   /* if0005.h */ -7
+#define NVIF_CLASS_CLIENT                            /* if0000.h */ -0x00000000
+
+#define NVIF_CLASS_CONTROL                           /* if0001.h */ -0x00000001
+
+#define NVIF_CLASS_PERFMON                           /* if0002.h */ -0x00000002
+#define NVIF_CLASS_PERFDOM                           /* if0003.h */ -0x00000003
+
+#define NVIF_CLASS_SW_NV04                           /* if0004.h */ -0x00000004
+#define NVIF_CLASS_SW_NV10                           /* if0005.h */ -0x00000005
+#define NVIF_CLASS_SW_NV50                           /* if0005.h */ -0x00000006
+#define NVIF_CLASS_SW_GF100                          /* if0005.h */ -0x00000007
 
 /* the below match nvidia-assigned (either in hw, or sw) class numbers */
 #define NV_NULL_CLASS                                                0x00000030
 
 #include <nvif/if0000.h>
 #include <nvif/unpack.h>
 
+static const struct nvkm_sclass
+nvkm_uclient_sclass = {
+       .oclass = NVIF_CLASS_CLIENT,
+};
+
 struct nvkm_client_notify {
        struct nvkm_client *client;
        struct nvkm_notify n;
 }
 
 static int
-nvkm_client_mthd_devlist(struct nvkm_object *object, void *data, u32 size)
+nvkm_client_mthd_devlist(struct nvkm_client *client, void *data, u32 size)
 {
        union {
-               struct nv_client_devlist_v0 v0;
+               struct nvif_client_devlist_v0 v0;
        } *args = data;
        int ret = -ENOSYS;
 
-       nvif_ioctl(object, "client devlist size %d\n", size);
+       nvif_ioctl(&client->object, "client devlist size %d\n", size);
        if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
-               nvif_ioctl(object, "client devlist vers %d count %d\n",
+               nvif_ioctl(&client->object, "client devlist vers %d count %d\n",
                           args->v0.version, args->v0.count);
                if (size == sizeof(args->v0.device[0]) * args->v0.count) {
                        ret = nvkm_device_list(args->v0.device, args->v0.count);
 static int
 nvkm_client_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size)
 {
+       struct nvkm_client *client = nvkm_client(object);
        switch (mthd) {
-       case NV_CLIENT_DEVLIST:
-               return nvkm_client_mthd_devlist(object, data, size);
+       case NVIF_CLIENT_V0_DEVLIST:
+               return nvkm_client_mthd_devlist(client, data, size);
        default:
                break;
        }
 nvkm_client_new(const char *name, u64 device, const char *cfg,
                const char *dbg, struct nvkm_client **pclient)
 {
-       struct nvkm_oclass oclass = {};
+       struct nvkm_oclass oclass = { .base = nvkm_uclient_sclass };
        struct nvkm_client *client;
 
        if (!(client = *pclient = kzalloc(sizeof(*client), GFP_KERNEL)))