Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: MIT */
0002 #ifndef __NVKM_FIFO_H__
0003 #define __NVKM_FIFO_H__
0004 #include <core/engine.h>
0005 #include <core/object.h>
0006 #include <core/event.h>
0007 struct nvkm_fault_data;
0008 
0009 #define NVKM_FIFO_CHID_NR 4096
0010 #define NVKM_FIFO_ENGN_NR 16
0011 
0012 struct nvkm_fifo_engn {
0013     struct nvkm_object *object;
0014     int refcount;
0015     int usecount;
0016 };
0017 
0018 struct nvkm_fifo_chan {
0019     const struct nvkm_fifo_chan_func *func;
0020     struct nvkm_fifo *fifo;
0021     u32 engm;
0022     struct nvkm_object object;
0023 
0024     struct list_head head;
0025     u16 chid;
0026     struct nvkm_gpuobj *inst;
0027     struct nvkm_gpuobj *push;
0028     struct nvkm_vmm *vmm;
0029     u64 addr;
0030     u32 size;
0031 
0032     struct nvkm_fifo_engn engn[NVKM_FIFO_ENGN_NR];
0033 };
0034 
0035 struct nvkm_fifo {
0036     const struct nvkm_fifo_func *func;
0037     struct nvkm_engine engine;
0038 
0039     DECLARE_BITMAP(mask, NVKM_FIFO_CHID_NR);
0040     int nr;
0041     struct list_head chan;
0042     spinlock_t lock;
0043     struct mutex mutex;
0044 
0045     struct nvkm_event uevent; /* async user trigger */
0046     struct nvkm_event kevent; /* channel killed */
0047 };
0048 
0049 void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *);
0050 void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *);
0051 void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *);
0052 
0053 void nvkm_fifo_chan_put(struct nvkm_fifo *, unsigned long flags,
0054             struct nvkm_fifo_chan **);
0055 struct nvkm_fifo_chan *
0056 nvkm_fifo_chan_inst(struct nvkm_fifo *, u64 inst, unsigned long *flags);
0057 struct nvkm_fifo_chan *
0058 nvkm_fifo_chan_chid(struct nvkm_fifo *, int chid, unsigned long *flags);
0059 
0060 int nv04_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0061 int nv10_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0062 int nv17_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0063 int nv40_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0064 int nv50_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0065 int g84_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0066 int gf100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0067 int gk104_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0068 int gk110_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0069 int gk208_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0070 int gk20a_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0071 int gm107_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0072 int gm200_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0073 int gm20b_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0074 int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0075 int gp10b_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0076 int gv100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0077 int tu102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0078 int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
0079 #endif