1/* $NetBSD: fifo.h,v 1.3 2021/12/18 23:45:33 riastradh Exp $ */ 2 3/* SPDX-License-Identifier: MIT */ 4#ifndef __NVKM_FIFO_H__ 5#define __NVKM_FIFO_H__ 6#include <core/engine.h> 7#include <core/object.h> 8#include <core/event.h> 9struct nvkm_fault_data; 10 11#define NVKM_FIFO_CHID_NR 4096 12 13struct nvkm_fifo_engn { 14 struct nvkm_object *object; 15 int refcount; 16 int usecount; 17}; 18 19struct nvkm_fifo_chan { 20 const struct nvkm_fifo_chan_func *func; 21 struct nvkm_fifo *fifo; 22 u64 engines; 23 struct nvkm_object object; 24 25 struct list_head head; 26 u16 chid; 27 struct nvkm_gpuobj *inst; 28 struct nvkm_gpuobj *push; 29 struct nvkm_vmm *vmm; 30#ifdef __NetBSD__ 31 bus_space_tag_t bst; 32 bus_space_handle_t bsh; 33 bool mapped; 34 bool subregion; 35#else 36 void __iomem *user; 37#endif 38 u64 addr; 39 u32 size; 40 41 struct nvkm_fifo_engn engn[NVKM_SUBDEV_NR]; 42}; 43 44struct nvkm_fifo { 45 const struct nvkm_fifo_func *func; 46 struct nvkm_engine engine; 47 48 DECLARE_BITMAP(mask, NVKM_FIFO_CHID_NR); 49 int nr; 50 struct list_head chan; 51 spinlock_t lock; 52 53 struct nvkm_event uevent; /* async user trigger */ 54 struct nvkm_event cevent; /* channel creation event */ 55 struct nvkm_event kevent; /* channel killed */ 56}; 57 58void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *); 59void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *); 60void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *); 61 62void nvkm_fifo_chan_put(struct nvkm_fifo *, unsigned long flags, 63 struct nvkm_fifo_chan **); 64struct nvkm_fifo_chan * 65nvkm_fifo_chan_inst(struct nvkm_fifo *, u64 inst, unsigned long *flags); 66struct nvkm_fifo_chan * 67nvkm_fifo_chan_chid(struct nvkm_fifo *, int chid, unsigned long *flags); 68 69int nv04_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 70int nv10_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 71int nv17_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 72int nv40_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 73int nv50_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 74int g84_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 75int gf100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 76int gk104_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 77int gk110_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 78int gk208_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 79int gk20a_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 80int gm107_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 81int gm200_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 82int gm20b_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 83int gp100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 84int gp10b_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 85int gv100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 86int tu102_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 87#endif 88