blob: 64454c2ebd908ce82a1b6886ee376dd37d71d489 [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;
13
Ben Skeggs0ad72862014-08-10 04:10:22 +100014 struct nvif_object vram;
15 struct nvif_object gart;
16 struct nvif_object nvsw;
Ben Skeggsebb945a2012-07-20 08:17:34 +100017
18 struct {
19 struct nouveau_bo *buffer;
Ben Skeggs24e83752017-11-01 03:56:19 +100020 struct nouveau_vma *vma;
Ben Skeggs0ad72862014-08-10 04:10:22 +100021 struct nvif_object ctxdma;
Ben Skeggs24e83752017-11-01 03:56:19 +100022 u64 addr;
Ben Skeggsebb945a2012-07-20 08:17:34 +100023 } push;
24
25 /* TODO: this will be reworked in the near future */
26 bool accel_done;
27 void *fence;
28 struct {
29 int max;
30 int free;
31 int cur;
32 int put;
33 int ib_base;
34 int ib_max;
35 int ib_free;
36 int ib_put;
37 } dma;
38 u32 user_get_hi;
39 u32 user_get;
40 u32 user_put;
41
Ben Skeggsa01ca782015-08-20 14:54:15 +100042 struct nvif_object user;
Ben Skeggsd8cc37d2016-11-05 13:31:25 +100043
44 struct nvif_notify kill;
45 atomic_t killed;
Ben Skeggsebb945a2012-07-20 08:17:34 +100046};
47
Ben Skeggseb47db42018-05-08 20:39:46 +100048int nouveau_channels_init(struct nouveau_drm *);
Ben Skeggsebb945a2012-07-20 08:17:34 +100049
Ben Skeggs0ad72862014-08-10 04:10:22 +100050int nouveau_channel_new(struct nouveau_drm *, struct nvif_device *,
Ben Skeggsfcf3f912015-09-04 14:40:32 +100051 u32 arg0, u32 arg1, struct nouveau_channel **);
Ben Skeggsebb945a2012-07-20 08:17:34 +100052void nouveau_channel_del(struct nouveau_channel **);
53int nouveau_channel_idle(struct nouveau_channel *);
54
Pierre Moreau703fa262014-08-18 22:43:24 +020055extern int nouveau_vram_pushbuf;
56
Ben Skeggsebb945a2012-07-20 08:17:34 +100057#endif