Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / include / nvkm / core / namedb.h
1 #ifndef __NVKM_NAMEDB_H__
2 #define __NVKM_NAMEDB_H__
3 #include <core/parent.h>
4 struct nvkm_handle;
5
6 struct nvkm_namedb {
7         struct nvkm_parent parent;
8         rwlock_t lock;
9         struct list_head list;
10 };
11
12 static inline struct nvkm_namedb *
13 nv_namedb(void *obj)
14 {
15 #if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
16         if (unlikely(!nv_iclass(obj, NV_NAMEDB_CLASS)))
17                 nv_assert("BAD CAST -> NvNameDB, %08x", nv_hclass(obj));
18 #endif
19         return obj;
20 }
21
22 #define nvkm_namedb_create(p,e,c,v,s,m,d)                                   \
23         nvkm_namedb_create_((p), (e), (c), (v), (s), (m),                   \
24                                sizeof(**d), (void **)d)
25 #define nvkm_namedb_init(p)                                                 \
26         nvkm_parent_init(&(p)->parent)
27 #define nvkm_namedb_fini(p,s)                                               \
28         nvkm_parent_fini(&(p)->parent, (s))
29 #define nvkm_namedb_destroy(p)                                              \
30         nvkm_parent_destroy(&(p)->parent)
31
32 int  nvkm_namedb_create_(struct nvkm_object *, struct nvkm_object *,
33                             struct nvkm_oclass *, u32 pclass,
34                             struct nvkm_oclass *, u64 engcls,
35                             int size, void **);
36
37 int  _nvkm_namedb_ctor(struct nvkm_object *, struct nvkm_object *,
38                           struct nvkm_oclass *, void *, u32,
39                           struct nvkm_object **);
40 #define _nvkm_namedb_dtor _nvkm_parent_dtor
41 #define _nvkm_namedb_init _nvkm_parent_init
42 #define _nvkm_namedb_fini _nvkm_parent_fini
43
44 int  nvkm_namedb_insert(struct nvkm_namedb *, u32 name, struct nvkm_object *,
45                         struct nvkm_handle *);
46 void nvkm_namedb_remove(struct nvkm_handle *);
47
48 struct nvkm_handle *nvkm_namedb_get(struct nvkm_namedb *, u32);
49 struct nvkm_handle *nvkm_namedb_get_class(struct nvkm_namedb *, u16);
50 struct nvkm_handle *nvkm_namedb_get_vinst(struct nvkm_namedb *, u64);
51 struct nvkm_handle *nvkm_namedb_get_cinst(struct nvkm_namedb *, u32);
52 void nvkm_namedb_put(struct nvkm_handle *);
53 #endif