1d94470e9SBen Skeggs #ifndef __NVKM_RUNL_H__ 2d94470e9SBen Skeggs #define __NVKM_RUNL_H__ 3d94470e9SBen Skeggs #include <core/os.h> 4d94470e9SBen Skeggs struct nvkm_cgrp; 5d94470e9SBen Skeggs struct nvkm_memory; 6d94470e9SBen Skeggs enum nvkm_subdev_type; 7d94470e9SBen Skeggs 8d94470e9SBen Skeggs struct nvkm_engn { 9d94470e9SBen Skeggs const struct nvkm_engn_func { 10d94470e9SBen Skeggs } *func; 11d94470e9SBen Skeggs struct nvkm_runl *runl; 12d94470e9SBen Skeggs int id; 13d94470e9SBen Skeggs 14d94470e9SBen Skeggs struct nvkm_engine *engine; 15d94470e9SBen Skeggs 16d94470e9SBen Skeggs struct list_head head; 17d94470e9SBen Skeggs }; 18d94470e9SBen Skeggs 19d94470e9SBen Skeggs #define ENGN_PRINT(e,l,p,f,a...) \ 20d94470e9SBen Skeggs RUNL_PRINT((e)->runl, l, p, "%02d[%8s]:"f, (e)->id, (e)->engine->subdev.name, ##a) 21d94470e9SBen Skeggs #define ENGN_DEBUG(e,f,a...) ENGN_PRINT((e), DEBUG, info, " "f"\n", ##a) 22d94470e9SBen Skeggs 23d94470e9SBen Skeggs struct nvkm_runl { 24d94470e9SBen Skeggs const struct nvkm_runl_func { 25d94470e9SBen Skeggs } *func; 26d94470e9SBen Skeggs struct nvkm_fifo *fifo; 27d94470e9SBen Skeggs int id; 28d94470e9SBen Skeggs u32 addr; 29d94470e9SBen Skeggs 30d94470e9SBen Skeggs struct nvkm_chid *cgid; 31d94470e9SBen Skeggs struct nvkm_chid *chid; 32d94470e9SBen Skeggs 33d94470e9SBen Skeggs struct list_head engns; 34d94470e9SBen Skeggs 35d94470e9SBen Skeggs struct nvkm_runq *runq[2]; 36d94470e9SBen Skeggs int runq_nr; 37d94470e9SBen Skeggs 38*468fae7bSBen Skeggs struct list_head cgrps; 39*468fae7bSBen Skeggs int cgrp_nr; 40*468fae7bSBen Skeggs int chan_nr; 41*468fae7bSBen Skeggs struct mutex mutex; 42*468fae7bSBen Skeggs 43d94470e9SBen Skeggs struct list_head head; 44d94470e9SBen Skeggs }; 45d94470e9SBen Skeggs 46d94470e9SBen Skeggs struct nvkm_runl *nvkm_runl_new(struct nvkm_fifo *, int runi, u32 addr, int id_nr); 47d94470e9SBen Skeggs struct nvkm_runl *nvkm_runl_get(struct nvkm_fifo *, int runi, u32 addr); 48d94470e9SBen Skeggs struct nvkm_engn *nvkm_runl_add(struct nvkm_runl *, int engi, const struct nvkm_engn_func *, 49d94470e9SBen Skeggs enum nvkm_subdev_type, int inst); 50d94470e9SBen Skeggs void nvkm_runl_del(struct nvkm_runl *); 51d94470e9SBen Skeggs 52*468fae7bSBen Skeggs #define nvkm_runl_find_engn(engn,runl,cond) nvkm_list_find(engn, &(runl)->engns, head, (cond)) 53*468fae7bSBen Skeggs 54d94470e9SBen Skeggs #define nvkm_runl_foreach(runl,fifo) list_for_each_entry((runl), &(fifo)->runls, head) 55d94470e9SBen Skeggs #define nvkm_runl_foreach_engn(engn,runl) list_for_each_entry((engn), &(runl)->engns, head) 56*468fae7bSBen Skeggs #define nvkm_runl_foreach_engn_cond(engn,runl,cond) \ 57*468fae7bSBen Skeggs nvkm_list_foreach(engn, &(runl)->engns, head, (cond)) 58d94470e9SBen Skeggs 59d94470e9SBen Skeggs #define RUNL_PRINT(r,l,p,f,a...) \ 60d94470e9SBen Skeggs nvkm_printk__(&(r)->fifo->engine.subdev, NV_DBG_##l, p, "%06x:"f, (r)->addr, ##a) 61d94470e9SBen Skeggs #define RUNL_ERROR(r,f,a...) RUNL_PRINT((r), ERROR, err, " "f"\n", ##a) 62d94470e9SBen Skeggs #define RUNL_DEBUG(r,f,a...) RUNL_PRINT((r), DEBUG, info, " "f"\n", ##a) 63d94470e9SBen Skeggs #define RUNL_TRACE(r,f,a...) RUNL_PRINT((r), TRACE, info, " "f"\n", ##a) 64d94470e9SBen Skeggs #endif 65