214 lines · c
1/* SPDX-License-Identifier: MIT */2#ifndef __NVKM_FIFO_PRIV_H__3#define __NVKM_FIFO_PRIV_H__4#define nvkm_fifo(p) container_of((p), struct nvkm_fifo, engine)5#include <engine/fifo.h>6#include <core/enum.h>7struct nvkm_cctx;8struct nvkm_cgrp;9struct nvkm_engn;10struct nvkm_memory;11struct nvkm_runl;12struct nvkm_runq;13struct nvkm_vctx;14 15struct nvkm_fifo_func {16 void (*dtor)(struct nvkm_fifo *);17 18 int (*chid_nr)(struct nvkm_fifo *);19 int (*chid_ctor)(struct nvkm_fifo *, int nr);20 int (*runq_nr)(struct nvkm_fifo *);21 int (*runl_ctor)(struct nvkm_fifo *);22 23 void (*init)(struct nvkm_fifo *);24 void (*init_pbdmas)(struct nvkm_fifo *, u32 mask);25 26 irqreturn_t (*intr)(struct nvkm_inth *);27 void (*intr_mmu_fault_unit)(struct nvkm_fifo *, int unit);28 void (*intr_ctxsw_timeout)(struct nvkm_fifo *, u32 engm);29 30 const struct nvkm_fifo_func_mmu_fault {31 void (*recover)(struct nvkm_fifo *, struct nvkm_fault_data *);32 const struct nvkm_enum *access;33 const struct nvkm_enum *engine;34 const struct nvkm_enum *reason;35 const struct nvkm_enum *hubclient;36 const struct nvkm_enum *gpcclient;37 } *mmu_fault;38 39 void (*pause)(struct nvkm_fifo *, unsigned long *);40 void (*start)(struct nvkm_fifo *, unsigned long *);41 42 int (*nonstall_ctor)(struct nvkm_fifo *);43 const struct nvkm_event_func *nonstall;44 45 const struct nvkm_runl_func *runl;46 const struct nvkm_runq_func *runq;47 const struct nvkm_engn_func *engn;48 const struct nvkm_engn_func *engn_sw;49 const struct nvkm_engn_func *engn_ce;50 51 struct nvkm_fifo_func_cgrp {52 struct nvkm_sclass user;53 const struct nvkm_cgrp_func *func;54 bool force;55 } cgrp;56 57 struct nvkm_fifo_func_chan {58 struct nvkm_sclass user;59 const struct nvkm_chan_func *func;60 } chan;61};62 63int r535_fifo_new(const struct nvkm_fifo_func *, struct nvkm_device *, enum nvkm_subdev_type, int,64 struct nvkm_fifo **);65int nvkm_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *, enum nvkm_subdev_type, int,66 struct nvkm_fifo **);67 68int nv04_fifo_chid_ctor(struct nvkm_fifo *, int);69int nv04_fifo_runl_ctor(struct nvkm_fifo *);70void nv04_fifo_init(struct nvkm_fifo *);71irqreturn_t nv04_fifo_intr(struct nvkm_inth *);72void nv04_fifo_pause(struct nvkm_fifo *, unsigned long *);73void nv04_fifo_start(struct nvkm_fifo *, unsigned long *);74extern const struct nvkm_runl_func nv04_runl;75extern const struct nvkm_engn_func nv04_engn;76extern const struct nvkm_cgrp_func nv04_cgrp;77extern const struct nvkm_chan_func_inst nv04_chan_inst;78extern const struct nvkm_chan_func_userd nv04_chan_userd;79void nv04_chan_ramfc_clear(struct nvkm_chan *);80void nv04_chan_start(struct nvkm_chan *);81void nv04_chan_stop(struct nvkm_chan *);82void nv04_eobj_ramht_del(struct nvkm_chan *, int);83 84int nv10_fifo_chid_nr(struct nvkm_fifo *);85 86int nv50_fifo_chid_nr(struct nvkm_fifo *);87int nv50_fifo_chid_ctor(struct nvkm_fifo *, int);88void nv50_fifo_init(struct nvkm_fifo *);89extern const struct nvkm_runl_func nv50_runl;90int nv50_runl_update(struct nvkm_runl *);91int nv50_runl_wait(struct nvkm_runl *);92extern const struct nvkm_engn_func nv50_engn_sw;93extern const struct nvkm_chan_func_inst nv50_chan_inst;94extern const struct nvkm_chan_func_userd nv50_chan_userd;95void nv50_chan_unbind(struct nvkm_chan *);96void nv50_chan_start(struct nvkm_chan *);97void nv50_chan_stop(struct nvkm_chan *);98void nv50_chan_preempt(struct nvkm_chan *);99int nv50_eobj_ramht_add(struct nvkm_engn *, struct nvkm_object *, struct nvkm_chan *);100void nv50_eobj_ramht_del(struct nvkm_chan *, int);101 102extern const struct nvkm_event_func g84_fifo_nonstall;103extern const struct nvkm_engn_func g84_engn;104extern const struct nvkm_chan_func g84_chan;105 106int gf100_fifo_chid_ctor(struct nvkm_fifo *, int);107int gf100_fifo_runq_nr(struct nvkm_fifo *);108bool gf100_fifo_intr_pbdma(struct nvkm_fifo *);109void gf100_fifo_intr_mmu_fault(struct nvkm_fifo *);110void gf100_fifo_intr_mmu_fault_unit(struct nvkm_fifo *, int);111void gf100_fifo_intr_sched(struct nvkm_fifo *);112void gf100_fifo_intr_ctxsw_timeout(struct nvkm_fifo *, u32);113void gf100_fifo_mmu_fault_recover(struct nvkm_fifo *, struct nvkm_fault_data *);114extern const struct nvkm_enum gf100_fifo_mmu_fault_access[];115extern const struct nvkm_event_func gf100_fifo_nonstall;116bool gf100_runl_preempt_pending(struct nvkm_runl *);117void gf100_runq_init(struct nvkm_runq *);118bool gf100_runq_intr(struct nvkm_runq *, struct nvkm_runl *);119void gf100_engn_mmu_fault_trigger(struct nvkm_engn *);120bool gf100_engn_mmu_fault_triggered(struct nvkm_engn *);121extern const struct nvkm_engn_func gf100_engn_sw;122extern const struct nvkm_chan_func_inst gf100_chan_inst;123void gf100_chan_userd_clear(struct nvkm_chan *);124void gf100_chan_preempt(struct nvkm_chan *);125 126int gk104_fifo_chid_nr(struct nvkm_fifo *);127int gk104_fifo_runl_ctor(struct nvkm_fifo *);128void gk104_fifo_init(struct nvkm_fifo *);129void gk104_fifo_init_pbdmas(struct nvkm_fifo *, u32);130irqreturn_t gk104_fifo_intr(struct nvkm_inth *);131void gk104_fifo_intr_runlist(struct nvkm_fifo *);132void gk104_fifo_intr_chsw(struct nvkm_fifo *);133void gk104_fifo_intr_bind(struct nvkm_fifo *);134extern const struct nvkm_fifo_func_mmu_fault gk104_fifo_mmu_fault;135extern const struct nvkm_enum gk104_fifo_mmu_fault_reason[];136extern const struct nvkm_enum gk104_fifo_mmu_fault_hubclient[];137extern const struct nvkm_enum gk104_fifo_mmu_fault_gpcclient[];138void gk104_runl_insert_chan(struct nvkm_chan *, struct nvkm_memory *, u64);139void gk104_runl_commit(struct nvkm_runl *, struct nvkm_memory *, u32, int);140bool gk104_runl_pending(struct nvkm_runl *);141void gk104_runl_block(struct nvkm_runl *, u32);142void gk104_runl_allow(struct nvkm_runl *, u32);143void gk104_runl_fault_clear(struct nvkm_runl *);144extern const struct nvkm_runq_func gk104_runq;145void gk104_runq_init(struct nvkm_runq *);146bool gk104_runq_intr(struct nvkm_runq *, struct nvkm_runl *);147extern const struct nvkm_bitfield gk104_runq_intr_0_names[];148bool gk104_runq_idle(struct nvkm_runq *);149extern const struct nvkm_engn_func gk104_engn;150bool gk104_engn_chsw(struct nvkm_engn *);151int gk104_engn_cxid(struct nvkm_engn *, bool *cgid);152int gk104_ectx_ctor(struct nvkm_engn *, struct nvkm_vctx *);153extern const struct nvkm_engn_func gk104_engn_ce;154extern const struct nvkm_chan_func_userd gk104_chan_userd;155extern const struct nvkm_chan_func_ramfc gk104_chan_ramfc;156void gk104_chan_bind(struct nvkm_chan *);157void gk104_chan_bind_inst(struct nvkm_chan *);158void gk104_chan_unbind(struct nvkm_chan *);159void gk104_chan_start(struct nvkm_chan *);160void gk104_chan_stop(struct nvkm_chan *);161 162int gk110_fifo_chid_ctor(struct nvkm_fifo *, int);163extern const struct nvkm_runl_func gk110_runl;164extern const struct nvkm_cgrp_func gk110_cgrp;165void gk110_runl_insert_cgrp(struct nvkm_cgrp *, struct nvkm_memory *, u64);166extern const struct nvkm_chan_func gk110_chan;167void gk110_chan_preempt(struct nvkm_chan *);168 169extern const struct nvkm_runq_func gk208_runq;170void gk208_runq_init(struct nvkm_runq *);171 172void gm107_fifo_intr_mmu_fault_unit(struct nvkm_fifo *, int);173extern const struct nvkm_fifo_func_mmu_fault gm107_fifo_mmu_fault;174extern const struct nvkm_runl_func gm107_runl;175extern const struct nvkm_chan_func gm107_chan;176 177int gm200_fifo_chid_nr(struct nvkm_fifo *);178int gm200_fifo_runq_nr(struct nvkm_fifo *);179 180extern const struct nvkm_enum gv100_fifo_mmu_fault_access[];181extern const struct nvkm_enum gv100_fifo_mmu_fault_reason[];182extern const struct nvkm_enum gv100_fifo_mmu_fault_hubclient[];183extern const struct nvkm_enum gv100_fifo_mmu_fault_gpcclient[];184void gv100_runl_insert_cgrp(struct nvkm_cgrp *, struct nvkm_memory *, u64);185void gv100_runl_insert_chan(struct nvkm_chan *, struct nvkm_memory *, u64);186void gv100_runl_preempt(struct nvkm_runl *);187extern const struct nvkm_runq_func gv100_runq;188extern const struct nvkm_engn_func gv100_engn;189void gv100_ectx_bind(struct nvkm_engn *, struct nvkm_cctx *, struct nvkm_chan *);190extern const struct nvkm_engn_func gv100_engn_ce;191int gv100_ectx_ce_ctor(struct nvkm_engn *, struct nvkm_vctx *);192void gv100_ectx_ce_bind(struct nvkm_engn *, struct nvkm_cctx *, struct nvkm_chan *);193extern const struct nvkm_chan_func_userd gv100_chan_userd;194extern const struct nvkm_chan_func_ramfc gv100_chan_ramfc;195 196void tu102_fifo_intr_ctxsw_timeout_info(struct nvkm_engn *, u32 info);197extern const struct nvkm_fifo_func_mmu_fault tu102_fifo_mmu_fault;198 199int ga100_fifo_runl_ctor(struct nvkm_fifo *);200int ga100_fifo_nonstall_ctor(struct nvkm_fifo *);201extern const struct nvkm_event_func ga100_fifo_nonstall;202extern const struct nvkm_runl_func ga100_runl;203extern const struct nvkm_runq_func ga100_runq;204extern const struct nvkm_engn_func ga100_engn;205extern const struct nvkm_engn_func ga100_engn_ce;206extern const struct nvkm_cgrp_func ga100_cgrp;207extern const struct nvkm_chan_func ga100_chan;208 209int nvkm_uchan_new(struct nvkm_fifo *, struct nvkm_cgrp *, const struct nvkm_oclass *,210 void *argv, u32 argc, struct nvkm_object **);211int nvkm_ucgrp_new(struct nvkm_fifo *, const struct nvkm_oclass *, void *argv, u32 argc,212 struct nvkm_object **);213#endif214