blob: 93814d1d31e423790b1ac0e2549f6fcb43892007 [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;
Ben Skeggsbfe91af2019-02-19 17:21:48 +100011 struct nouveau_vmm *vmm;
Ben Skeggsebb945a2012-07-20 08:17:34 +100012
Ben Skeggsbbf89062014-08-10 04:10:25 +100013 int chid;
Ben Skeggs86b442d2018-12-11 14:50:02 +100014 u64 inst;
Ben Skeggs9d249072018-12-11 14:50:02 +100015 u32 token;
Ben Skeggsbbf89062014-08-10 04:10:25 +100016
Ben Skeggs0ad72862014-08-10 04:10:22 +100017 struct nvif_object vram;
18 struct nvif_object gart;
19 struct nvif_object nvsw;
Ben Skeggsebb945a2012-07-20 08:17:34 +100020
21 struct {
22 struct nouveau_bo *buffer;
Ben Skeggs24e83752017-11-01 03:56:19 +100023 struct nouveau_vma *vma;
Ben Skeggs0ad72862014-08-10 04:10:22 +100024 struct nvif_object ctxdma;
Ben Skeggs24e83752017-11-01 03:56:19 +100025 u64 addr;
Ben Skeggsebb945a2012-07-20 08:17:34 +100026 } push;
27
28 /* TODO: this will be reworked in the near future */
29 bool accel_done;
30 void *fence;
31 struct {
32 int max;
33 int free;
34 int cur;
35 int put;
36 int ib_base;
37 int ib_max;
38 int ib_free;
39 int ib_put;
40 } dma;
41 u32 user_get_hi;
42 u32 user_get;
43 u32 user_put;
44
Ben Skeggsa01ca782015-08-20 14:54:15 +100045 struct nvif_object user;
Ben Skeggsd8cc37d2016-11-05 13:31:25 +100046
47 struct nvif_notify kill;
48 atomic_t killed;
Ben Skeggsebb945a2012-07-20 08:17:34 +100049};
50
Ben Skeggseb47db42018-05-08 20:39:46 +100051int nouveau_channels_init(struct nouveau_drm *);
Ben Skeggsebb945a2012-07-20 08:17:34 +100052
Ben Skeggs0ad72862014-08-10 04:10:22 +100053int nouveau_channel_new(struct nouveau_drm *, struct nvif_device *,
Ben Skeggs85532bd2018-12-11 14:50:02 +100054 u32 arg0, u32 arg1, bool priv,
55 struct nouveau_channel **);
Ben Skeggsebb945a2012-07-20 08:17:34 +100056void nouveau_channel_del(struct nouveau_channel **);
57int nouveau_channel_idle(struct nouveau_channel *);
58
Pierre Moreau703fa262014-08-18 22:43:24 +020059extern int nouveau_vram_pushbuf;
60
Ben Skeggsebb945a2012-07-20 08:17:34 +100061#endif