Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29dff2f5 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/core: add function to return list of supported children



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 79ca2770
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -74,6 +74,39 @@ nouveau_parent_sclass(struct nouveau_object *parent, u16 handle,
	return -EINVAL;
}

int
nouveau_parent_lclass(struct nouveau_object *parent, u32 *lclass, int size)
{
	struct nouveau_sclass *sclass;
	struct nouveau_engine *engine;
	struct nouveau_oclass *oclass;
	int nr = -1, i;
	u64 mask;

	sclass = nv_parent(parent)->sclass;
	while (sclass) {
		if (++nr < size)
			lclass[nr] = sclass->oclass->handle;
		sclass = sclass->sclass;
	}

	mask = nv_parent(parent)->engine;
	while (i = __ffs64(mask), mask) {
		engine = nouveau_engine(parent, i);
		if (engine && (oclass = engine->sclass)) {
			while (oclass->ofuncs) {
				if (++nr < size)
					lclass[nr] = oclass->handle;
				oclass++;
			}
		}

		mask &= ~(1ULL << i);
	}

	return nr + 1;
}

int
nouveau_parent_create_(struct nouveau_object *parent,
		       struct nouveau_object *engine,
+1 −0
Original line number Diff line number Diff line
@@ -57,5 +57,6 @@ void _nouveau_parent_dtor(struct nouveau_object *);
int nouveau_parent_sclass(struct nouveau_object *, u16 handle,
			  struct nouveau_object **pengine,
			  struct nouveau_oclass **poclass);
int nouveau_parent_lclass(struct nouveau_object *, u32 *, int);

#endif