File Index
Files and directories
Sign in
FILE

fifo.h

File preview with syntax highlighting.

linux-6.19.14/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h 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 16
 11
 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	} userd;
 82
 83	struct {
 84		u32 mthdbuf_size;
 85	} rm;
 86
 87	spinlock_t lock;
 88	struct mutex mutex;
 89};
 90
 91void nvkm_fifo_fault(struct nvkm_fifo *, struct nvkm_fault_data *);
 92void nvkm_fifo_pause(struct nvkm_fifo *, unsigned long *);
 93void nvkm_fifo_start(struct nvkm_fifo *, unsigned long *);
 94bool nvkm_fifo_ctxsw_in_progress(struct nvkm_engine *);
 95
 96int nv04_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
 97int nv10_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
 98int nv17_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
 99int nv40_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
100int nv50_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
101int g84_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
102int g98_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
103int gf100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
104int gk104_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
105int gk110_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
106int gk208_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
107int gk20a_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
108int gm107_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
109int gm200_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
110int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
111int gv100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
112int tu102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
113int ga100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
114int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
115#endif
~/ Read-only file preview.