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

Provided by KDAB

Privacy Policy
Improve your Profiling and Debugging skills
Find out more

source code of linux/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h