drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.h

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.h

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.h
Extension
.h
Size
2128 bytes
Lines
89
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_falcon_qmgr_seq {
	u16 id;
	enum {
		SEQ_STATE_FREE = 0,
		SEQ_STATE_PENDING,
		SEQ_STATE_USED,
		SEQ_STATE_CANCELLED
	} state;
	bool async;
	nvkm_falcon_qmgr_callback callback;
	void *priv;
	struct completion done;
	int result;
};

/*
 * We can have an arbitrary number of sequences, but realistically we will
 * probably not use that much simultaneously.
 */
#define NVKM_FALCON_QMGR_SEQ_NUM 16

struct nvkm_falcon_qmgr {
	struct nvkm_falcon *falcon;

	struct {
		struct mutex mutex;
		struct nvkm_falcon_qmgr_seq id[NVKM_FALCON_QMGR_SEQ_NUM];
		unsigned long tbl[BITS_TO_LONGS(NVKM_FALCON_QMGR_SEQ_NUM)];
	} seq;
};

struct nvkm_falcon_qmgr_seq *
nvkm_falcon_qmgr_seq_acquire(struct nvkm_falcon_qmgr *);
void nvkm_falcon_qmgr_seq_release(struct nvkm_falcon_qmgr *,
				  struct nvkm_falcon_qmgr_seq *);

struct nvkm_falcon_cmdq {
	struct nvkm_falcon_qmgr *qmgr;
	const char *name;
	struct mutex mutex;
	struct completion ready;

	u32 head_reg;
	u32 tail_reg;
	u32 offset;
	u32 size;

	u32 position;
};

struct nvkm_falcon_msgq {
	struct nvkm_falcon_qmgr *qmgr;
	const char *name;
	spinlock_t lock;

	u32 head_reg;
	u32 tail_reg;
	u32 offset;

	u32 position;
};

#define FLCNQ_PRINTK(q,l,p,f,a...) FLCN_PRINTK((q)->qmgr->falcon, l, p, "%s: "f, (q)->name, ##a)
#define FLCNQ_DBG(q,f,a...) FLCNQ_PRINTK((q), DEBUG, info, f, ##a)
#define FLCNQ_ERR(q,f,a...) FLCNQ_PRINTK((q), ERROR, err, f, ##a)
#endif

Annotation

Implementation Notes