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

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

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 79ca2770
...@@ -74,6 +74,39 @@ nouveau_parent_sclass(struct nouveau_object *parent, u16 handle, ...@@ -74,6 +74,39 @@ nouveau_parent_sclass(struct nouveau_object *parent, u16 handle,
return -EINVAL; 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 int
nouveau_parent_create_(struct nouveau_object *parent, nouveau_parent_create_(struct nouveau_object *parent,
struct nouveau_object *engine, struct nouveau_object *engine,
......
...@@ -57,5 +57,6 @@ void _nouveau_parent_dtor(struct nouveau_object *); ...@@ -57,5 +57,6 @@ void _nouveau_parent_dtor(struct nouveau_object *);
int nouveau_parent_sclass(struct nouveau_object *, u16 handle, int nouveau_parent_sclass(struct nouveau_object *, u16 handle,
struct nouveau_object **pengine, struct nouveau_object **pengine,
struct nouveau_oclass **poclass); struct nouveau_oclass **poclass);
int nouveau_parent_lclass(struct nouveau_object *, u32 *, int);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment