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
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>
8struct nvkm_fault_data;
9
10#define NVKM_FIFO_ENGN_NR 16
11
12struct nvkm_chan {
13 const struct nvkm_chan_func *func;
14 char name[64];
15 struct nvkm_cgrp *cgrp;
16 int runq;
17
18 struct nvkm_gpuobj *inst;
19 struct nvkm_vmm *vmm;
20 struct nvkm_gpuobj *push;
21 int id;
22
23 struct {
24 struct nvkm_memory *mem;
25 u32 base;
26 } userd;
27
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
35 spinlock_t lock;
36 atomic_t blocked;
37 atomic_t errored;
38
39 struct {
40 struct nvkm_gsp_object object;
41 struct {
42 dma_addr_t addr;
43 void *ptr;
44 } mthdbuf;
45 struct nvkm_vctx *grctx;
46 } rm;
47
48 struct list_head cctxs;
49 struct list_head head;
50};
51
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
56struct nvkm_chan *nvkm_uchan_chan(struct nvkm_object *);
57
58struct nvkm_fifo {
59 const struct nvkm_fifo_func *func;
60 struct nvkm_engine engine;
61
62 struct nvkm_chid *chid;
63 struct nvkm_chid *cgid;
64
65 struct list_head runqs;
66 struct list_head runls;
67
68 struct {
69#define NVKM_FIFO_NONSTALL_EVENT BIT(0)
70 struct nvkm_event event;
71 struct nvkm_inth intr;
72 } nonstall;
73
74 struct {
75 u32 chan_msec;
76 } timeout;
77
78 struct {
79 struct nvkm_memory *mem;
80 struct nvkm_vma *bar1;
81
82 struct mutex mutex;
83 struct list_head list;
84 } userd;
85
86 struct {
87 u32 mthdbuf_size;
88 } rm;
89
90 spinlock_t lock;
91 struct mutex mutex;
92};
93
94void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *);
95void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *);
96void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *);
97bool nvkm_fifo_ctxsw_in_progress(struct nvkm_engine *);
98
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 **);
105int g98_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
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 **);
113int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
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 **);
116int ga100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
117int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
118#endif