drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c
Extension
.c
Size
4794 bytes
Lines
210
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

if (c++ == index) {
			oclass->base = gr->func->sclass[index];
			return index;
		}
	}

	return c;
}

static int
nvkm_gr_cclass_new(struct nvkm_chan *chan, const struct nvkm_oclass *oclass,
		   struct nvkm_object **pobject)
{
	struct nvkm_gr *gr = nvkm_gr(oclass->engine);
	if (gr->func->chan_new)
		return gr->func->chan_new(gr, chan, oclass, pobject);
	return 0;
}

static void
nvkm_gr_intr(struct nvkm_engine *engine)
{
	struct nvkm_gr *gr = nvkm_gr(engine);
	gr->func->intr(gr);
}

static int
nvkm_gr_nonstall(struct nvkm_engine *engine)
{
	struct nvkm_gr *gr = nvkm_gr(engine);

	if (gr->func->nonstall)
		return gr->func->nonstall(gr);

	return -EINVAL;
}

static int
nvkm_gr_oneinit(struct nvkm_engine *engine)
{
	struct nvkm_gr *gr = nvkm_gr(engine);
	if (gr->func->oneinit)
		return gr->func->oneinit(gr);
	return 0;
}

static int
nvkm_gr_reset(struct nvkm_engine *engine)
{
	struct nvkm_gr *gr = nvkm_gr(engine);

	if (gr->func->reset)
		return gr->func->reset(gr);

	return -ENOSYS;
}

static int
nvkm_gr_init(struct nvkm_engine *engine)
{
	struct nvkm_gr *gr = nvkm_gr(engine);

	if (gr->func->init)
		return gr->func->init(gr);

	return 0;
}

static int
nvkm_gr_fini(struct nvkm_engine *engine, enum nvkm_suspend_state suspend)
{
	struct nvkm_gr *gr = nvkm_gr(engine);
	if (gr->func->fini)
		return gr->func->fini(gr, suspend != NVKM_POWEROFF);
	return 0;
}

static void *
nvkm_gr_dtor(struct nvkm_engine *engine)
{
	struct nvkm_gr *gr = nvkm_gr(engine);
	if (gr->func->dtor)
		return gr->func->dtor(gr);
	return gr;
}

static const struct nvkm_engine_func
nvkm_gr = {
	.dtor = nvkm_gr_dtor,
	.oneinit = nvkm_gr_oneinit,

Annotation

Implementation Notes