|
@@ -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) ({ \
|