1 /* SPDX-License-Identifier: MIT */
2 #ifndef __NVKM_FIFO_H__
3 #define __NVKM_FIFO_H__
4 #include <core/engine.h>
5 #include <core/object.h>
6 #include <core/event.h>
7 #include <subdev/gsp.h>
8 struct nvkm_fault_data;
10 #define NVKM_FIFO_ENGN_NR 16
13 const struct nvkm_chan_func *func;
15 struct nvkm_cgrp *cgrp;
18 struct nvkm_gpuobj *inst;
20 struct nvkm_gpuobj *push;
24 struct nvkm_memory *mem;
29 struct nvkm_gpuobj *ramfc;
30 struct nvkm_gpuobj *cache;
31 struct nvkm_gpuobj *eng;
32 struct nvkm_gpuobj *pgd;
33 struct nvkm_ramht *ramht;
40 struct nvkm_gsp_object object;
45 struct nvkm_vctx *grctx;
48 struct list_head cctxs;
49 struct list_head head;
52 struct nvkm_chan *nvkm_chan_get_chid(struct nvkm_engine *, int id, unsigned long *irqflags);
53 struct nvkm_chan *nvkm_chan_get_inst(struct nvkm_engine *, u64 inst, unsigned long *irqflags);
54 void nvkm_chan_put(struct nvkm_chan **, unsigned long irqflags);
56 struct nvkm_chan *nvkm_uchan_chan(struct nvkm_object *);
59 const struct nvkm_fifo_func *func;
60 struct nvkm_engine engine;
62 struct nvkm_chid *chid;
63 struct nvkm_chid *cgid;
65 struct list_head runqs;
66 struct list_head runls;
69 #define NVKM_FIFO_NONSTALL_EVENT BIT(0)
70 struct nvkm_event event;
71 struct nvkm_inth intr;
79 struct nvkm_memory *mem;
80 struct nvkm_vma *bar1;
83 struct list_head list;
94 void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *);
95 void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *);
96 void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *);
97 bool nvkm_fifo_ctxsw_in_progress(struct nvkm_engine *);
99 int nv04_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
100 int nv10_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
101 int nv17_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
102 int nv40_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
103 int nv50_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
104 int g84_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
105 int g98_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
106 int gf100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
107 int gk104_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
108 int gk110_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
109 int gk208_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
110 int gk20a_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
111 int gm107_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
112 int gm200_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
113 int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
114 int gv100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
115 int tu102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
116 int ga100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
117 int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);