mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-18 15:54:25 +00:00
There are instances (such as non-recoverable GPU page faults) where NVKM decides that a channel's context is no longer viable, and will be removed from the runlist. This commit notifies the owner of the channel when this happens, so it has the opportunity to take some kind of recovery action instead of hanging. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
72 lines
2.3 KiB
C
72 lines
2.3 KiB
C
#ifndef __NVKM_FIFO_H__
|
|
#define __NVKM_FIFO_H__
|
|
#include <core/engine.h>
|
|
#include <core/event.h>
|
|
|
|
#define NVKM_FIFO_CHID_NR 4096
|
|
|
|
struct nvkm_fifo_engn {
|
|
struct nvkm_object *object;
|
|
int refcount;
|
|
int usecount;
|
|
};
|
|
|
|
struct nvkm_fifo_chan {
|
|
const struct nvkm_fifo_chan_func *func;
|
|
struct nvkm_fifo *fifo;
|
|
u64 engines;
|
|
struct nvkm_object object;
|
|
|
|
struct list_head head;
|
|
u16 chid;
|
|
struct nvkm_gpuobj *inst;
|
|
struct nvkm_gpuobj *push;
|
|
struct nvkm_vm *vm;
|
|
void __iomem *user;
|
|
u64 addr;
|
|
u32 size;
|
|
|
|
struct nvkm_fifo_engn engn[NVKM_SUBDEV_NR];
|
|
};
|
|
|
|
struct nvkm_fifo {
|
|
const struct nvkm_fifo_func *func;
|
|
struct nvkm_engine engine;
|
|
|
|
DECLARE_BITMAP(mask, NVKM_FIFO_CHID_NR);
|
|
int nr;
|
|
struct list_head chan;
|
|
spinlock_t lock;
|
|
|
|
struct nvkm_event uevent; /* async user trigger */
|
|
struct nvkm_event cevent; /* channel creation event */
|
|
struct nvkm_event kevent; /* channel killed */
|
|
};
|
|
|
|
void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *);
|
|
void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *);
|
|
|
|
void nvkm_fifo_chan_put(struct nvkm_fifo *, unsigned long flags,
|
|
struct nvkm_fifo_chan **);
|
|
struct nvkm_fifo_chan *
|
|
nvkm_fifo_chan_inst(struct nvkm_fifo *, u64 inst, unsigned long *flags);
|
|
struct nvkm_fifo_chan *
|
|
nvkm_fifo_chan_chid(struct nvkm_fifo *, int chid, unsigned long *flags);
|
|
|
|
int nv04_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int nv10_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int nv17_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int nv40_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int nv50_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int g84_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gf100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gk104_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gk110_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gk208_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gk20a_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gm107_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gm200_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gm20b_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
int gp100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **);
|
|
#endif
|