Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / include / nvkm / core / namedb.h
diff --git a/kernel/drivers/gpu/drm/nouveau/include/nvkm/core/namedb.h b/kernel/drivers/gpu/drm/nouveau/include/nvkm/core/namedb.h
new file mode 100644 (file)
index 0000000..4cfe16f
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef __NVKM_NAMEDB_H__
+#define __NVKM_NAMEDB_H__
+#include <core/parent.h>
+struct nvkm_handle;
+
+struct nvkm_namedb {
+       struct nvkm_parent parent;
+       rwlock_t lock;
+       struct list_head list;
+};
+
+static inline struct nvkm_namedb *
+nv_namedb(void *obj)
+{
+#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
+       if (unlikely(!nv_iclass(obj, NV_NAMEDB_CLASS)))
+               nv_assert("BAD CAST -> NvNameDB, %08x", nv_hclass(obj));
+#endif
+       return obj;
+}
+
+#define nvkm_namedb_create(p,e,c,v,s,m,d)                                   \
+       nvkm_namedb_create_((p), (e), (c), (v), (s), (m),                   \
+                              sizeof(**d), (void **)d)
+#define nvkm_namedb_init(p)                                                 \
+       nvkm_parent_init(&(p)->parent)
+#define nvkm_namedb_fini(p,s)                                               \
+       nvkm_parent_fini(&(p)->parent, (s))
+#define nvkm_namedb_destroy(p)                                              \
+       nvkm_parent_destroy(&(p)->parent)
+
+int  nvkm_namedb_create_(struct nvkm_object *, struct nvkm_object *,
+                           struct nvkm_oclass *, u32 pclass,
+                           struct nvkm_oclass *, u64 engcls,
+                           int size, void **);
+
+int  _nvkm_namedb_ctor(struct nvkm_object *, struct nvkm_object *,
+                         struct nvkm_oclass *, void *, u32,
+                         struct nvkm_object **);
+#define _nvkm_namedb_dtor _nvkm_parent_dtor
+#define _nvkm_namedb_init _nvkm_parent_init
+#define _nvkm_namedb_fini _nvkm_parent_fini
+
+int  nvkm_namedb_insert(struct nvkm_namedb *, u32 name, struct nvkm_object *,
+                       struct nvkm_handle *);
+void nvkm_namedb_remove(struct nvkm_handle *);
+
+struct nvkm_handle *nvkm_namedb_get(struct nvkm_namedb *, u32);
+struct nvkm_handle *nvkm_namedb_get_class(struct nvkm_namedb *, u16);
+struct nvkm_handle *nvkm_namedb_get_vinst(struct nvkm_namedb *, u64);
+struct nvkm_handle *nvkm_namedb_get_cinst(struct nvkm_namedb *, u32);
+void nvkm_namedb_put(struct nvkm_handle *);
+#endif