Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / include / nvkm / core / parent.h
diff --git a/kernel/drivers/gpu/drm/nouveau/include/nvkm/core/parent.h b/kernel/drivers/gpu/drm/nouveau/include/nvkm/core/parent.h
new file mode 100644 (file)
index 0000000..837e4fe
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef __NVKM_PARENT_H__
+#define __NVKM_PARENT_H__
+#include <core/object.h>
+
+struct nvkm_sclass {
+       struct nvkm_sclass *sclass;
+       struct nvkm_engine *engine;
+       struct nvkm_oclass *oclass;
+};
+
+struct nvkm_parent {
+       struct nvkm_object object;
+
+       struct nvkm_sclass *sclass;
+       u64 engine;
+
+       int  (*context_attach)(struct nvkm_object *, struct nvkm_object *);
+       int  (*context_detach)(struct nvkm_object *, bool suspend,
+                              struct nvkm_object *);
+
+       int  (*object_attach)(struct nvkm_object *parent,
+                             struct nvkm_object *object, u32 name);
+       void (*object_detach)(struct nvkm_object *parent, int cookie);
+};
+
+static inline struct nvkm_parent *
+nv_parent(void *obj)
+{
+#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
+       if (unlikely(!(nv_iclass(obj, NV_PARENT_CLASS))))
+               nv_assert("BAD CAST -> NvParent, %08x", nv_hclass(obj));
+#endif
+       return obj;
+}
+
+#define nvkm_parent_create(p,e,c,v,s,m,d)                                   \
+       nvkm_parent_create_((p), (e), (c), (v), (s), (m),                   \
+                              sizeof(**d), (void **)d)
+#define nvkm_parent_init(p)                                                 \
+       nvkm_object_init(&(p)->object)
+#define nvkm_parent_fini(p,s)                                               \
+       nvkm_object_fini(&(p)->object, (s))
+
+int  nvkm_parent_create_(struct nvkm_object *, struct nvkm_object *,
+                           struct nvkm_oclass *, u32 pclass,
+                           struct nvkm_oclass *, u64 engcls,
+                           int size, void **);
+void nvkm_parent_destroy(struct nvkm_parent *);
+
+void _nvkm_parent_dtor(struct nvkm_object *);
+#define _nvkm_parent_init nvkm_object_init
+#define _nvkm_parent_fini nvkm_object_fini
+
+int nvkm_parent_sclass(struct nvkm_object *, u16 handle,
+                      struct nvkm_object **pengine,
+                      struct nvkm_oclass **poclass);
+int nvkm_parent_lclass(struct nvkm_object *, u32 *, int);
+#endif