drm/nouveau/core: add function to return list of supported children
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
79ca27706a
commit
29dff2f554
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue