drm/nouveau/parent: remove some (now) unnecessary special-case handling
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
493f189dc0
commit
102b49da15
@ -2,16 +2,10 @@
|
|||||||
#define __NVKM_PARENT_H__
|
#define __NVKM_PARENT_H__
|
||||||
#include <core/object.h>
|
#include <core/object.h>
|
||||||
|
|
||||||
struct nvkm_sclass {
|
|
||||||
struct nvkm_sclass *sclass;
|
|
||||||
struct nvkm_engine *engine;
|
|
||||||
struct nvkm_oclass *oclass;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct nvkm_parent {
|
struct nvkm_parent {
|
||||||
struct nvkm_object object;
|
struct nvkm_object object;
|
||||||
|
|
||||||
struct nvkm_sclass *sclass;
|
struct nvkm_oclass *sclass;
|
||||||
u64 engine;
|
u64 engine;
|
||||||
|
|
||||||
int (*context_attach)(struct nvkm_object *, struct nvkm_object *);
|
int (*context_attach)(struct nvkm_object *, struct nvkm_object *);
|
||||||
|
@ -30,35 +30,27 @@ nvkm_parent_sclass(struct nvkm_object *parent, u16 handle,
|
|||||||
struct nvkm_object **pengine,
|
struct nvkm_object **pengine,
|
||||||
struct nvkm_oclass **poclass)
|
struct nvkm_oclass **poclass)
|
||||||
{
|
{
|
||||||
struct nvkm_sclass *sclass;
|
struct nvkm_oclass *sclass, *oclass;
|
||||||
struct nvkm_engine *engine;
|
struct nvkm_engine *engine;
|
||||||
struct nvkm_oclass *oclass;
|
|
||||||
u64 mask;
|
u64 mask;
|
||||||
|
int i;
|
||||||
|
|
||||||
sclass = nv_parent(parent)->sclass;
|
sclass = nv_parent(parent)->sclass;
|
||||||
while (sclass) {
|
while ((oclass = sclass++) && oclass->ofuncs) {
|
||||||
if ((sclass->oclass->handle & 0xffff) == handle) {
|
if (oclass->handle == handle) {
|
||||||
*pengine = &parent->engine->subdev.object;
|
*pengine = &parent->engine->subdev.object;
|
||||||
*poclass = sclass->oclass;
|
*poclass = oclass;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sclass = sclass->sclass;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mask = nv_parent(parent)->engine;
|
mask = nv_parent(parent)->engine;
|
||||||
while (mask) {
|
while (i = __ffs64(mask), mask) {
|
||||||
int i = __ffs64(mask);
|
engine = nvkm_engine(parent, i);
|
||||||
|
|
||||||
if (nv_iclass(parent, NV_CLIENT_CLASS))
|
|
||||||
engine = nv_engine(nv_client(parent)->device);
|
|
||||||
else
|
|
||||||
engine = nvkm_engine(parent, i);
|
|
||||||
|
|
||||||
if (engine) {
|
if (engine) {
|
||||||
oclass = engine->sclass;
|
oclass = engine->sclass;
|
||||||
while (oclass->ofuncs) {
|
while (oclass->ofuncs) {
|
||||||
if ((oclass->handle & 0xffff) == handle) {
|
if (oclass->handle == handle) {
|
||||||
*pengine = nv_object(engine);
|
*pengine = nv_object(engine);
|
||||||
*poclass = oclass;
|
*poclass = oclass;
|
||||||
return 0;
|
return 0;
|
||||||
@ -76,17 +68,15 @@ nvkm_parent_sclass(struct nvkm_object *parent, u16 handle,
|
|||||||
int
|
int
|
||||||
nvkm_parent_lclass(struct nvkm_object *parent, u32 *lclass, int size)
|
nvkm_parent_lclass(struct nvkm_object *parent, u32 *lclass, int size)
|
||||||
{
|
{
|
||||||
struct nvkm_sclass *sclass;
|
struct nvkm_oclass *sclass, *oclass;
|
||||||
struct nvkm_engine *engine;
|
struct nvkm_engine *engine;
|
||||||
struct nvkm_oclass *oclass;
|
|
||||||
int nr = -1, i;
|
int nr = -1, i;
|
||||||
u64 mask;
|
u64 mask;
|
||||||
|
|
||||||
sclass = nv_parent(parent)->sclass;
|
sclass = nv_parent(parent)->sclass;
|
||||||
while (sclass) {
|
while ((oclass = sclass++) && oclass->ofuncs) {
|
||||||
if (++nr < size)
|
if (++nr < size)
|
||||||
lclass[nr] = sclass->oclass->handle & 0xffff;
|
lclass[nr] = oclass->handle;
|
||||||
sclass = sclass->sclass;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mask = nv_parent(parent)->engine;
|
mask = nv_parent(parent)->engine;
|
||||||
@ -95,7 +85,7 @@ nvkm_parent_lclass(struct nvkm_object *parent, u32 *lclass, int size)
|
|||||||
if (engine && (oclass = engine->sclass)) {
|
if (engine && (oclass = engine->sclass)) {
|
||||||
while (oclass->ofuncs) {
|
while (oclass->ofuncs) {
|
||||||
if (++nr < size)
|
if (++nr < size)
|
||||||
lclass[nr] = oclass->handle & 0xffff;
|
lclass[nr] = oclass->handle;
|
||||||
oclass++;
|
oclass++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,7 +103,6 @@ nvkm_parent_create_(struct nvkm_object *parent, struct nvkm_object *engine,
|
|||||||
int size, void **pobject)
|
int size, void **pobject)
|
||||||
{
|
{
|
||||||
struct nvkm_parent *object;
|
struct nvkm_parent *object;
|
||||||
struct nvkm_sclass *nclass;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = nvkm_object_create_(parent, engine, oclass, pclass |
|
ret = nvkm_object_create_(parent, engine, oclass, pclass |
|
||||||
@ -122,18 +111,7 @@ nvkm_parent_create_(struct nvkm_object *parent, struct nvkm_object *engine,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
while (sclass && sclass->ofuncs) {
|
object->sclass = sclass;
|
||||||
nclass = kzalloc(sizeof(*nclass), GFP_KERNEL);
|
|
||||||
if (!nclass)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
nclass->sclass = object->sclass;
|
|
||||||
object->sclass = nclass;
|
|
||||||
nclass->engine = engine ? nv_engine(engine) : NULL;
|
|
||||||
nclass->oclass = sclass;
|
|
||||||
sclass++;
|
|
||||||
}
|
|
||||||
|
|
||||||
object->engine = engcls;
|
object->engine = engcls;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -141,13 +119,6 @@ nvkm_parent_create_(struct nvkm_object *parent, struct nvkm_object *engine,
|
|||||||
void
|
void
|
||||||
nvkm_parent_destroy(struct nvkm_parent *parent)
|
nvkm_parent_destroy(struct nvkm_parent *parent)
|
||||||
{
|
{
|
||||||
struct nvkm_sclass *sclass;
|
|
||||||
|
|
||||||
while ((sclass = parent->sclass)) {
|
|
||||||
parent->sclass = sclass->sclass;
|
|
||||||
kfree(sclass);
|
|
||||||
}
|
|
||||||
|
|
||||||
nvkm_object_destroy(&parent->object);
|
nvkm_object_destroy(&parent->object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user