drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.h

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.h

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.h
Extension
.h
Size
4732 bytes
Lines
138
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct nvkm_engn {
	const struct nvkm_engn_func {
		int (*nonstall)(struct nvkm_engn *);
		bool (*chsw)(struct nvkm_engn *);
		int (*cxid)(struct nvkm_engn *, bool *cgid);
		void (*mmu_fault_trigger)(struct nvkm_engn *);
		bool (*mmu_fault_triggered)(struct nvkm_engn *);
		int (*ctor)(struct nvkm_engn *, struct nvkm_vctx *);
		void (*bind)(struct nvkm_engn *, struct nvkm_cctx *, struct nvkm_chan *);
		int (*ctor2)(struct nvkm_engn *, struct nvkm_vctx *, struct nvkm_chan *);
		int (*ramht_add)(struct nvkm_engn *, struct nvkm_object *, struct nvkm_chan *);
		void (*ramht_del)(struct nvkm_chan *, int hash);
	} *func;
	struct nvkm_runl *runl;
	int id;

	struct nvkm_engine *engine;

	int fault;

	struct {
		u32 desc;
		u32 size;
	} rm;

	struct list_head head;
};

#define ENGN_PRINT(e,l,p,f,a...)                                                           \
	RUNL_PRINT((e)->runl, l, p, "%02d[%8s]:"f, (e)->id, (e)->engine->subdev.name, ##a)
#define ENGN_DEBUG(e,f,a...) ENGN_PRINT((e), DEBUG,   info, " "f"\n", ##a)

struct nvkm_runl {
	const struct nvkm_runl_func {
		void (*init)(struct nvkm_runl *);
		void (*fini)(struct nvkm_runl *);
		int runqs;
		u8 size;
		int (*update)(struct nvkm_runl *);
		void (*insert_cgrp)(struct nvkm_cgrp *, struct nvkm_memory *, u64 offset);
		void (*insert_chan)(struct nvkm_chan *, struct nvkm_memory *, u64 offset);
		void (*commit)(struct nvkm_runl *, struct nvkm_memory *, u32 start, int count);
		int (*wait)(struct nvkm_runl *);
		bool (*pending)(struct nvkm_runl *);
		void (*block)(struct nvkm_runl *, u32 engm);
		void (*allow)(struct nvkm_runl *, u32 engm);
		void (*fault_clear)(struct nvkm_runl *);
		void (*preempt)(struct nvkm_runl *);
		bool (*preempt_pending)(struct nvkm_runl *);
	} *func;
	struct nvkm_fifo *fifo;
	int id;
	u32 addr;
	u32 chan;
	u16 doorbell;

	struct nvkm_chid *cgid;
#define NVKM_CHAN_EVENT_ERRORED BIT(0)
	struct nvkm_chid *chid;

	struct list_head engns;

	struct nvkm_runq *runq[2];
	int runq_nr;

	struct nvkm_inth inth;

	struct {
		int vector;
		struct nvkm_inth inth;
	} nonstall;

	struct list_head cgrps;
	int cgrp_nr;
	int chan_nr;
	atomic_t changed;
	struct nvkm_memory *mem;
	u32 offset;
	struct mutex mutex;

	int blocked;

	struct work_struct work;
	atomic_t rc_triggered;
	atomic_t rc_pending;

	struct list_head head;
};

struct nvkm_runl *nvkm_runl_new(struct nvkm_fifo *, int runi, u32 addr, int id_nr);

Annotation

Implementation Notes