Home | History | Annotate | Line # | Download | only in engine
      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