These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / nvkm / subdev / fuse / base.c
index b7b7193..f414497 100644 (file)
  *
  * Authors: Martin Peres
  */
-#include <subdev/fuse.h>
+#include "priv.h"
 
-int
-_nvkm_fuse_init(struct nvkm_object *object)
+u32
+nvkm_fuse_read(struct nvkm_fuse *fuse, u32 addr)
 {
-       struct nvkm_fuse *fuse = (void *)object;
-       return nvkm_subdev_init(&fuse->base);
+       return fuse->func->read(fuse, addr);
 }
 
-void
-_nvkm_fuse_dtor(struct nvkm_object *object)
+static void *
+nvkm_fuse_dtor(struct nvkm_subdev *subdev)
 {
-       struct nvkm_fuse *fuse = (void *)object;
-       nvkm_subdev_destroy(&fuse->base);
+       return nvkm_fuse(subdev);
 }
 
+static const struct nvkm_subdev_func
+nvkm_fuse = {
+       .dtor = nvkm_fuse_dtor,
+};
+
 int
-nvkm_fuse_create_(struct nvkm_object *parent, struct nvkm_object *engine,
-                 struct nvkm_oclass *oclass, int length, void **pobject)
+nvkm_fuse_new_(const struct nvkm_fuse_func *func, struct nvkm_device *device,
+              int index, struct nvkm_fuse **pfuse)
 {
        struct nvkm_fuse *fuse;
-       int ret;
-
-       ret = nvkm_subdev_create_(parent, engine, oclass, 0, "FUSE",
-                                 "fuse", length, pobject);
-       fuse = *pobject;
-       return ret;
+       if (!(fuse = *pfuse = kzalloc(sizeof(*fuse), GFP_KERNEL)))
+               return -ENOMEM;
+       nvkm_subdev_ctor(&nvkm_fuse, device, index, 0, &fuse->subdev);
+       fuse->func = func;
+       spin_lock_init(&fuse->lock);
+       return 0;
 }