1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __NOUVEAU_CHAN_H__ 3 #define __NOUVEAU_CHAN_H__ 4 #include <nvif/object.h> 5 #include <nvif/notify.h> 6 struct nvif_device; 7 8 struct nouveau_channel { 9 struct nvif_device *device; 10 struct nouveau_drm *drm; 11 struct nouveau_vmm *vmm; 12 13 int chid; 14 u64 inst; 15 u32 token; 16 17 struct nvif_object vram; 18 struct nvif_object gart; 19 struct nvif_object nvsw; 20 21 struct { 22 struct nouveau_bo *buffer; 23 struct nouveau_vma *vma; 24 struct nvif_object ctxdma; 25 u64 addr; 26 } 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 45 struct nvif_object user; 46 47 struct nvif_notify kill; 48 atomic_t killed; 49 }; 50 51 int nouveau_channels_init(struct nouveau_drm *); 52 53 int nouveau_channel_new(struct nouveau_drm *, struct nvif_device *, 54 u32 arg0, u32 arg1, bool priv, 55 struct nouveau_channel **); 56 void nouveau_channel_del(struct nouveau_channel **); 57 int nouveau_channel_idle(struct nouveau_channel *); 58 59 extern int nouveau_vram_pushbuf; 60 61 #endif 62