1#ifndef __NVKM_NAMEDB_H__ 2#define __NVKM_NAMEDB_H__ 3#include <core/parent.h> 4struct nvkm_handle; 5 6struct nvkm_namedb { 7 struct nvkm_parent parent; 8 rwlock_t lock; 9 struct list_head list; 10}; 11 12static inline struct nvkm_namedb * 13nv_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 32int 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 37int _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 44int nvkm_namedb_insert(struct nvkm_namedb *, u32 name, struct nvkm_object *, 45 struct nvkm_handle *); 46void nvkm_namedb_remove(struct nvkm_handle *); 47 48struct nvkm_handle *nvkm_namedb_get(struct nvkm_namedb *, u32); 49struct nvkm_handle *nvkm_namedb_get_class(struct nvkm_namedb *, u16); 50struct nvkm_handle *nvkm_namedb_get_vinst(struct nvkm_namedb *, u64); 51struct nvkm_handle *nvkm_namedb_get_cinst(struct nvkm_namedb *, u32); 52void nvkm_namedb_put(struct nvkm_handle *); 53#endif 54