brintos

brintos / linux-shallow public Read only

0
0
Text · 3.7 KiB · be508f6 Raw
119 lines · c
1/* SPDX-License-Identifier: MIT */2#ifndef __NVKM_FIFO_H__3#define __NVKM_FIFO_H__4#include <core/engine.h>5#include <core/object.h>6#include <core/event.h>7#include <subdev/gsp.h>8struct nvkm_fault_data;9 10#define NVKM_FIFO_ENGN_NR 1611 12struct nvkm_chan {13	const struct nvkm_chan_func *func;14	char name[64];15	struct nvkm_cgrp *cgrp;16	int runq;17 18	struct nvkm_gpuobj *inst;19	struct nvkm_vmm *vmm;20	struct nvkm_gpuobj *push;21	int id;22 23	struct {24		struct nvkm_memory *mem;25		u32 base;26	} userd;27 28	u32 ramfc_offset;29	struct nvkm_gpuobj *ramfc;30	struct nvkm_gpuobj *cache;31	struct nvkm_gpuobj *eng;32	struct nvkm_gpuobj *pgd;33	struct nvkm_ramht *ramht;34 35	spinlock_t lock;36	atomic_t blocked;37	atomic_t errored;38 39	struct {40		struct nvkm_gsp_object object;41		struct {42			dma_addr_t addr;43			void *ptr;44		} mthdbuf;45		struct nvkm_vctx *grctx;46	} rm;47 48	struct list_head cctxs;49	struct list_head head;50};51 52struct nvkm_chan *nvkm_chan_get_chid(struct nvkm_engine *, int id, unsigned long *irqflags);53struct nvkm_chan *nvkm_chan_get_inst(struct nvkm_engine *, u64 inst, unsigned long *irqflags);54void nvkm_chan_put(struct nvkm_chan **, unsigned long irqflags);55 56struct nvkm_chan *nvkm_uchan_chan(struct nvkm_object *);57 58struct nvkm_fifo {59	const struct nvkm_fifo_func *func;60	struct nvkm_engine engine;61 62	struct nvkm_chid *chid;63	struct nvkm_chid *cgid;64 65	struct list_head runqs;66	struct list_head runls;67 68	struct {69#define NVKM_FIFO_NONSTALL_EVENT BIT(0)70		struct nvkm_event event;71		struct nvkm_inth intr;72	} nonstall;73 74	struct {75		u32 chan_msec;76	} timeout;77 78	struct {79		struct nvkm_memory *mem;80		struct nvkm_vma *bar1;81 82		struct mutex mutex;83		struct list_head list;84	} userd;85 86	struct {87		u32 mthdbuf_size;88	} rm;89 90	spinlock_t lock;91	struct mutex mutex;92};93 94void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *);95void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *);96void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *);97bool nvkm_fifo_ctxsw_in_progress(struct nvkm_engine *);98 99int nv04_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);100int nv10_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);101int nv17_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);102int nv40_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);103int nv50_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);104int g84_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);105int g98_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);106int gf100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);107int gk104_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);108int gk110_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);109int gk208_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);110int gk20a_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);111int gm107_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);112int gm200_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);113int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);114int gv100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);115int tu102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);116int ga100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);117int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);118#endif119