diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2016-11-04 08:20:35 +0100 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2016-11-07 05:04:41 +0100 |
commit | a3f8a41fd2b4b5f95374c0084d048c33d783b422 (patch) | |
tree | dd92c92123717074ad693f3de897a6d1cce5a536 /drivers/gpu/drm/nouveau/include | |
parent | drm/nouveau: silence sparse warnings about symbols not being marked static (diff) | |
download | linux-a3f8a41fd2b4b5f95374c0084d048c33d783b422.tar.xz linux-a3f8a41fd2b4b5f95374c0084d048c33d783b422.zip |
drm/nouveau/nvif: helper to match against supported class list
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/include')
-rw-r--r-- | drivers/gpu/drm/nouveau/include/nvif/object.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvif/object.h b/drivers/gpu/drm/nouveau/include/nvif/object.h index 8d815967767f..9e58b305b020 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/object.h +++ b/drivers/gpu/drm/nouveau/include/nvif/object.h @@ -66,6 +66,35 @@ void nvif_object_unmap(struct nvif_object *); #define nvif_mthd(a,b,c,d) nvif_object_mthd((a), (b), (c), (d)) +struct nvif_mclass { + s32 oclass; + int version; +}; + +#define nvif_mclass(o,m) ({ \ + struct nvif_object *object = (o); \ + struct nvif_sclass *sclass; \ + const typeof(m[0]) *mclass = (m); \ + int ret = -ENODEV; \ + int cnt, i, j; \ + \ + cnt = nvif_object_sclass_get(object, &sclass); \ + if (cnt >= 0) { \ + for (i = 0; ret < 0 && mclass[i].oclass; i++) { \ + for (j = 0; j < cnt; j++) { \ + if (mclass[i].oclass == sclass[j].oclass && \ + mclass[i].version >= sclass[j].minver && \ + mclass[i].version <= sclass[j].maxver) { \ + ret = i; \ + break; \ + } \ + } \ + } \ + nvif_object_sclass_put(&sclass); \ + } \ + ret; \ +}) + /*XXX*/ #include <core/object.h> #define nvxx_object(a) ({ \ |