drivers/gpu/drm/nouveau/include/nvif/chan.h

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/nouveau/include/nvif/chan.h

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/include/nvif/chan.h
Extension
.h
Size
2400 bytes
Lines
77
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 nvif_chan {
	const struct nvif_chan_func {
		struct {
			u32 (*read_get)(struct nvif_chan *);
		} push;

		struct {
			u32 (*read_get)(struct nvif_chan *);
			void (*push)(struct nvif_chan *, bool main, u64 addr, u32 size,
				     bool no_prefetch);
			void (*kick)(struct nvif_chan *);
			int (*post)(struct nvif_chan *, u32 gpptr, u32 pbptr);
			u32 post_size;
		} gpfifo;

		struct {
			int (*release)(struct nvif_chan *, u64 addr, u32 data);
		} sem;
	} *func;

	struct {
		struct nvif_map map;
	} userd;

	struct {
		struct nvif_map map;
		u32 cur;
		u32 max;
		int free;
	} gpfifo;

	struct {
		struct nvif_map map;
		u64 addr;
	} sema;

	struct nvif_push push;

	struct nvif_user *usermode;
	u32 doorbell_token;
};

int nvif_chan_dma_wait(struct nvif_chan *, u32 push_nr);

void nvif_chan_gpfifo_ctor(const struct nvif_chan_func *, void *userd, void *gpfifo, u32 gpfifo_size,
			   void *push, u64 push_addr, u32 push_size, struct nvif_chan *);
int nvif_chan_gpfifo_wait(struct nvif_chan *, u32 gpfifo_nr, u32 push_nr);
void nvif_chan_gpfifo_push(struct nvif_chan *, u64 addr, u32 size, bool no_prefetch);
int nvif_chan_gpfifo_post(struct nvif_chan *);

void nvif_chan506f_gpfifo_push(struct nvif_chan *, bool main, u64 addr, u32 size, bool no_prefetch);
void nvif_chan506f_gpfifo_kick(struct nvif_chan *);

int nvif_chan906f_ctor_(const struct nvif_chan_func *, void *userd, void *gpfifo, u32 gpfifo_size,
			void *push, u64 push_addr, u32 push_size, void *sema, u64 sema_addr,
			struct nvif_chan *);
u32 nvif_chan906f_read_get(struct nvif_chan *);
u32 nvif_chan906f_gpfifo_read_get(struct nvif_chan *);
int nvif_chan906f_gpfifo_post(struct nvif_chan *, u32 gpptr, u32 pbptr);

int nvif_chan506f_ctor(struct nvif_chan *, void *userd, void *gpfifo, u32 gpfifo_size,
		       void *push, u64 push_addr, u32 push_size);
int nvif_chan906f_ctor(struct nvif_chan *, void *userd, void *gpfifo, u32 gpfifo_size,
		       void *push, u64 push_addr, u32 push_size, void *sema, u64 sema_addr);
int nvif_chanc36f_ctor(struct nvif_chan *, void *userd, void *gpfifo, u32 gpfifo_size,
		       void *push, u64 push_addr, u32 push_size, void *sema, u64 sema_addr,
		       struct nvif_user *usermode, u32 doorbell_token);
#endif

Annotation

Implementation Notes