Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux-2.6-block.git] / drivers / gpu / drm / nouveau / include / nvkm / engine / fifo.h
CommitLineData
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 8struct nvkm_fault_data;
8f0649b5 9
2546db0e 10#define NVKM_FIFO_ENGN_NR 16
8f0649b5 11
f5e45689
BS
12struct 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
52struct nvkm_chan *nvkm_chan_get_chid(struct nvkm_engine *, int id, unsigned long *irqflags);
53struct nvkm_chan *nvkm_chan_get_inst(struct nvkm_engine *, u64 inst, unsigned long *irqflags);
54void nvkm_chan_put(struct nvkm_chan **, unsigned long irqflags);
55
b5ce219a
BS
56struct nvkm_chan *nvkm_uchan_chan(struct nvkm_object *);
57
05c7145d 58struct 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 94void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *);
13de7f46
BS
95void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *);
96void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *);
0ceceaa9 97bool nvkm_fifo_ctxsw_in_progress(struct nvkm_engine *);
8f0649b5 98
ab0db2bd
BS
99int nv04_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
100int nv10_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
101int nv17_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
102int nv40_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
103int nv50_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
104int g84_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
d94470e9 105int g98_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
ab0db2bd
BS
106int gf100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
107int gk104_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
108int gk110_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
109int gk208_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
110int gk20a_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
111int gm107_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
112int gm200_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
ab0db2bd 113int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
ab0db2bd
BS
114int gv100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
115int tu102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
7f4f35ea 116int ga100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
49b2dfc0 117int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
c420b2dc 118#endif