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