10ce41e3cSBen Skeggs #ifndef __NVKM_OPROXY_H__
20ce41e3cSBen Skeggs #define __NVKM_OPROXY_H__
30ce41e3cSBen Skeggs #define nvkm_oproxy(p) container_of((p), struct nvkm_oproxy, base)
40ce41e3cSBen Skeggs #include <core/object.h>
50ce41e3cSBen Skeggs 
60ce41e3cSBen Skeggs struct nvkm_oproxy {
70ce41e3cSBen Skeggs 	const struct nvkm_oproxy_func *func;
80ce41e3cSBen Skeggs 	struct nvkm_object base;
90ce41e3cSBen Skeggs 	struct nvkm_object *object;
100ce41e3cSBen Skeggs };
110ce41e3cSBen Skeggs 
120ce41e3cSBen Skeggs struct nvkm_oproxy_func {
130ce41e3cSBen Skeggs 	void (*dtor[2])(struct nvkm_oproxy *);
140ce41e3cSBen Skeggs 	int  (*init[2])(struct nvkm_oproxy *);
150ce41e3cSBen Skeggs 	int  (*fini[2])(struct nvkm_oproxy *, bool suspend);
160ce41e3cSBen Skeggs };
170ce41e3cSBen Skeggs 
180ce41e3cSBen Skeggs void nvkm_oproxy_ctor(const struct nvkm_oproxy_func *,
190ce41e3cSBen Skeggs 		      const struct nvkm_oclass *, struct nvkm_oproxy *);
200ce41e3cSBen Skeggs int  nvkm_oproxy_new_(const struct nvkm_oproxy_func *,
210ce41e3cSBen Skeggs 		      const struct nvkm_oclass *, struct nvkm_oproxy **);
220ce41e3cSBen Skeggs #endif
23