提交 6af5289e 编写于 作者: B Ben Skeggs

drm/nv50/kms: use sclass() instead of trial-and-error

Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
上级 036a12b6
......@@ -66,15 +66,29 @@ static int
nv50_chan_create(struct nvif_object *disp, const u32 *oclass, u8 head,
void *data, u32 size, struct nv50_chan *chan)
{
const u32 handle = (oclass[0] << 16) | head;
u32 sclass[8];
int ret, i;
ret = nvif_object_sclass(disp, sclass, ARRAY_SIZE(sclass));
WARN_ON(ret > ARRAY_SIZE(sclass));
if (ret < 0)
return ret;
while (oclass[0]) {
int ret = nvif_object_init(disp, NULL, (oclass[0] << 16) | head,
oclass[0], data, size,
&chan->user);
if (oclass++, ret == 0) {
nvif_object_map(&chan->user);
return ret;
for (i = 0; i < ARRAY_SIZE(sclass); i++) {
if (sclass[i] == oclass[0]) {
ret = nvif_object_init(disp, NULL, handle,
oclass[0], data, size,
&chan->user);
if (ret == 0)
nvif_object_map(&chan->user);
return ret;
}
}
oclass++;
}
return -ENOSYS;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册