Commit | Line | Data |
---|---|---|
b7019ac5 | 1 | /* SPDX-License-Identifier: MIT */ |
05c7145d BS |
2 | #ifndef __NVKM_FIFO_H__ |
3 | #define __NVKM_FIFO_H__ | |
8f0649b5 | 4 | #include <core/engine.h> |
4246b92c | 5 | #include <core/object.h> |
8f0649b5 | 6 | #include <core/event.h> |
2a77d015 | 7 | #include <subdev/gsp.h> |
ddc669e2 | 8 | struct nvkm_fault_data; |
8f0649b5 | 9 | |
2546db0e | 10 | #define NVKM_FIFO_ENGN_NR 16 |
8f0649b5 | 11 | |
f5e45689 BS |
12 | struct nvkm_chan { |
13 | const struct nvkm_chan_func *func; | |
468fae7b BS |
14 | char name[64]; |
15 | struct nvkm_cgrp *cgrp; | |
b084fff2 | 16 | int runq; |
468fae7b | 17 | |
d3e7a439 BS |
18 | struct nvkm_gpuobj *inst; |
19 | struct nvkm_vmm *vmm; | |
06db7fde BS |
20 | struct nvkm_gpuobj *push; |
21 | int id; | |
f5e45689 | 22 | |
fbe9f433 BS |
23 | struct { |
24 | struct nvkm_memory *mem; | |
25 | u32 base; | |
26 | } userd; | |
27 | ||
3647c53b BS |
28 | u32 ramfc_offset; |
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; | |
34 | ||
67059b9f BS |
35 | spinlock_t lock; |
36 | atomic_t blocked; | |
37 | atomic_t errored; | |
38 | ||
2a77d015 BS |
39 | struct { |
40 | struct nvkm_gsp_object object; | |
41 | struct { | |
42 | dma_addr_t addr; | |
43 | void *ptr; | |
44 | } mthdbuf; | |
361c3cd8 | 45 | struct nvkm_vctx *grctx; |
2a77d015 BS |
46 | } rm; |
47 | ||
f48dd293 | 48 | struct list_head cctxs; |
8f0649b5 | 49 | struct list_head head; |
ebb945a9 BS |
50 | }; |
51 | ||
c358f538 BS |
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); | |
55 | ||
b5ce219a BS |
56 | struct nvkm_chan *nvkm_uchan_chan(struct nvkm_object *); |
57 | ||
05c7145d | 58 | struct nvkm_fifo { |
8f0649b5 | 59 | const struct nvkm_fifo_func *func; |
13de7f46 | 60 | struct nvkm_engine engine; |
9bd2ddba | 61 | |
800ac1f8 BS |
62 | struct nvkm_chid *chid; |
63 | struct nvkm_chid *cgid; | |
64 | ||
1c488ba9 | 65 | struct list_head runqs; |
d94470e9 | 66 | struct list_head runls; |
1c488ba9 | 67 | |
d67f3b96 BS |
68 | struct { |
69 | #define NVKM_FIFO_NONSTALL_EVENT BIT(0) | |
70 | struct nvkm_event event; | |
7f4f35ea | 71 | struct nvkm_inth intr; |
d67f3b96 BS |
72 | } nonstall; |
73 | ||
4a492fd5 BS |
74 | struct { |
75 | u32 chan_msec; | |
76 | } timeout; | |
77 | ||
fbe9f433 BS |
78 | struct { |
79 | struct nvkm_memory *mem; | |
80 | struct nvkm_vma *bar1; | |
da1fbcc0 BS |
81 | |
82 | struct mutex mutex; | |
83 | struct list_head list; | |
fbe9f433 BS |
84 | } userd; |
85 | ||
2a77d015 BS |
86 | struct { |
87 | u32 mthdbuf_size; | |
88 | } rm; | |
89 | ||
ebb945a9 | 90 | spinlock_t lock; |
a6419360 | 91 | struct mutex mutex; |
ebb945a9 BS |
92 | }; |
93 | ||
ddc669e2 | 94 | void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *); |
13de7f46 BS |
95 | void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *); |
96 | void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *); | |
0ceceaa9 | 97 | bool nvkm_fifo_ctxsw_in_progress(struct nvkm_engine *); |
8f0649b5 | 98 | |
ab0db2bd BS |
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 **); | |
d94470e9 | 105 | int g98_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); |
ab0db2bd BS |
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 **); | |
ab0db2bd | 113 | int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); |
ab0db2bd BS |
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 **); | |
7f4f35ea | 116 | int ga100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); |
49b2dfc0 | 117 | int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); |
c420b2dc | 118 | #endif |