| /* SPDX-License-Identifier: MIT */ |
| #ifndef __NOUVEAU_CHAN_H__ |
| #define __NOUVEAU_CHAN_H__ |
| #include <nvif/object.h> |
| #include <nvif/event.h> |
| #include <nvif/push.h> |
| struct nvif_device; |
| |
| struct nouveau_channel { |
| struct { |
| struct nvif_push _push; |
| struct nvif_push *push; |
| } chan; |
| |
| struct nvif_device *device; |
| struct nouveau_drm *drm; |
| struct nouveau_vmm *vmm; |
| |
| struct nvif_mem mem_userd; |
| struct nvif_object *userd; |
| |
| int runlist; |
| int chid; |
| u64 inst; |
| u32 token; |
| |
| struct nvif_object vram; |
| struct nvif_object gart; |
| struct nvif_object nvsw; |
| |
| struct { |
| struct nouveau_bo *buffer; |
| struct nouveau_vma *vma; |
| struct nvif_object ctxdma; |
| u64 addr; |
| } push; |
| |
| /* TODO: this will be reworked in the near future */ |
| bool accel_done; |
| void *fence; |
| struct { |
| int max; |
| int free; |
| int cur; |
| int put; |
| int ib_base; |
| int ib_max; |
| int ib_free; |
| int ib_put; |
| } dma; |
| u32 user_get_hi; |
| u32 user_get; |
| u32 user_put; |
| |
| struct nvif_object user; |
| struct nvif_object blit; |
| |
| struct nvif_event kill; |
| atomic_t killed; |
| }; |
| |
| int nouveau_channels_init(struct nouveau_drm *); |
| void nouveau_channels_fini(struct nouveau_drm *); |
| |
| int nouveau_channel_new(struct nouveau_drm *, struct nvif_device *, bool priv, u64 runm, |
| u32 vram, u32 gart, struct nouveau_channel **); |
| void nouveau_channel_del(struct nouveau_channel **); |
| int nouveau_channel_idle(struct nouveau_channel *); |
| void nouveau_channel_kill(struct nouveau_channel *); |
| |
| extern int nouveau_vram_pushbuf; |
| |
| #endif |