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> 9 struct nvkm_fault_data; 10 11 #define NVKM_FIFO_CHID_NR 4096 12 13 struct nvkm_fifo_engn { 14 struct nvkm_object *object; 15 int refcount; 16 int usecount; 17 }; 18 19 struct 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 44 struct 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 58 void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *); 59 void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *); 60 void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *); 61 62 void nvkm_fifo_chan_put(struct nvkm_fifo *, unsigned long flags, 63 struct nvkm_fifo_chan **); 64 struct nvkm_fifo_chan * 65 nvkm_fifo_chan_inst(struct nvkm_fifo *, u64 inst, unsigned long *flags); 66 struct nvkm_fifo_chan * 67 nvkm_fifo_chan_chid(struct nvkm_fifo *, int chid, unsigned long *flags); 68 69 int nv04_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 70 int nv10_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 71 int nv17_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 72 int nv40_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 73 int nv50_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 74 int g84_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 75 int gf100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 76 int gk104_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 77 int gk110_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 78 int gk208_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 79 int gk20a_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 80 int gm107_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 81 int gm200_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 82 int gm20b_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 83 int gp100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 84 int gp10b_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 85 int gv100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 86 int tu102_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); 87 #endif 88