blob: 93d065d4a2a19ea7305a4c1fd03c89b37473d7b0 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Ben Skeggsebb945a2012-07-20 08:17:34 +10002#ifndef __NOUVEAU_CHAN_H__
3#define __NOUVEAU_CHAN_H__
Ben Skeggs0ad72862014-08-10 04:10:22 +10004#include <nvif/object.h>
Ben Skeggsd8cc37d2016-11-05 13:31:25 +10005#include <nvif/notify.h>
Ben Skeggs0ad72862014-08-10 04:10:22 +10006struct nvif_device;
Ben Skeggsebb945a2012-07-20 08:17:34 +10007
8struct nouveau_channel {
Ben Skeggs0ad72862014-08-10 04:10:22 +10009 struct nvif_device *device;
Ben Skeggsebb945a2012-07-20 08:17:34 +100010 struct nouveau_drm *drm;
11
Ben Skeggsbbf89062014-08-10 04:10:25 +100012 int chid;
Ben Skeggs86b442d2018-12-11 14:50:02 +100013 u64 inst;
Ben Skeggsbbf89062014-08-10 04:10:25 +100014
Ben Skeggs0ad72862014-08-10 04:10:22 +100015 struct nvif_object vram;
16 struct nvif_object gart;
17 struct nvif_object nvsw;
Ben Skeggsebb945a2012-07-20 08:17:34 +100018
19 struct {
20 struct nouveau_bo *buffer;
Ben Skeggs24e83752017-11-01 03:56:19 +100021 struct nouveau_vma *vma;
Ben Skeggs0ad72862014-08-10 04:10:22 +100022 struct nvif_object ctxdma;
Ben Skeggs24e83752017-11-01 03:56:19 +100023 u64 addr;
Ben Skeggsebb945a2012-07-20 08:17:34 +100024 } push;
25
26 /* TODO: this will be reworked in the near future */
27 bool accel_done;
28 void *fence;
29 struct {
30 int max;
31 int free;
32 int cur;
33 int put;
34 int ib_base;
35 int ib_max;
36 int ib_free;
37 int ib_put;
38 } dma;
39 u32 user_get_hi;
40 u32 user_get;
41 u32 user_put;
42
Ben Skeggsa01ca782015-08-20 14:54:15 +100043 struct nvif_object user;
Ben Skeggsd8cc37d2016-11-05 13:31:25 +100044
45 struct nvif_notify kill;
46 atomic_t killed;
Ben Skeggsebb945a2012-07-20 08:17:34 +100047};
48
Ben Skeggseb47db42018-05-08 20:39:46 +100049int nouveau_channels_init(struct nouveau_drm *);
Ben Skeggsebb945a2012-07-20 08:17:34 +100050
Ben Skeggs0ad72862014-08-10 04:10:22 +100051int nouveau_channel_new(struct nouveau_drm *, struct nvif_device *,
Ben Skeggsfcf3f912015-09-04 14:40:32 +100052 u32 arg0, u32 arg1, struct nouveau_channel **);
Ben Skeggsebb945a2012-07-20 08:17:34 +100053void nouveau_channel_del(struct nouveau_channel **);
54int nouveau_channel_idle(struct nouveau_channel *);
55
Pierre Moreau703fa262014-08-18 22:43:24 +020056extern int nouveau_vram_pushbuf;
57
Ben Skeggsebb945a2012-07-20 08:17:34 +100058#endif