1b7019ac5SIlia Mirkin /* SPDX-License-Identifier: MIT */
2*f5e45689SBen Skeggs #ifndef __NVKM_CHAN_H__
3*f5e45689SBen Skeggs #define __NVKM_CHAN_H__
4*f5e45689SBen Skeggs #define nvkm_chan(p) container_of((p), struct nvkm_chan, object) /*FIXME: remove later */
5*f5e45689SBen Skeggs #include <engine/fifo.h>
69a65a38cSBen Skeggs 
7*f5e45689SBen Skeggs struct nvkm_chan_func {
88f0649b5SBen Skeggs 	void *(*dtor)(struct nvkm_fifo_chan *);
98f0649b5SBen Skeggs 	void (*init)(struct nvkm_fifo_chan *);
108f0649b5SBen Skeggs 	void (*fini)(struct nvkm_fifo_chan *);
118f0649b5SBen Skeggs 	int  (*engine_ctor)(struct nvkm_fifo_chan *, struct nvkm_engine *,
128f0649b5SBen Skeggs 			    struct nvkm_object *);
138f0649b5SBen Skeggs 	void (*engine_dtor)(struct nvkm_fifo_chan *, struct nvkm_engine *);
148f0649b5SBen Skeggs 	int  (*engine_init)(struct nvkm_fifo_chan *, struct nvkm_engine *);
158f0649b5SBen Skeggs 	int  (*engine_fini)(struct nvkm_fifo_chan *, struct nvkm_engine *,
168f0649b5SBen Skeggs 			    bool suspend);
178f0649b5SBen Skeggs 	int  (*object_ctor)(struct nvkm_fifo_chan *, struct nvkm_object *);
188f0649b5SBen Skeggs 	void (*object_dtor)(struct nvkm_fifo_chan *, int);
199d24907cSBen Skeggs 	u32 (*submit_token)(struct nvkm_fifo_chan *);
208f0649b5SBen Skeggs };
219a65a38cSBen Skeggs 
228f0649b5SBen Skeggs int nvkm_fifo_chan_ctor(const struct nvkm_fifo_chan_func *, struct nvkm_fifo *,
238f0649b5SBen Skeggs 			u32 size, u32 align, bool zero, u64 vm, u64 push,
24ad3b0d33SBen Skeggs 			u32 engm, int bar, u32 base, u32 user,
258f0649b5SBen Skeggs 			const struct nvkm_oclass *, struct nvkm_fifo_chan *);
26*f5e45689SBen Skeggs void nvkm_chan_del(struct nvkm_chan **);
279a65a38cSBen Skeggs 
28*f5e45689SBen Skeggs int nvkm_fifo_chan_child_new(const struct nvkm_oclass *, void *, u32, struct nvkm_object **);
299a65a38cSBen Skeggs #endif
30