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