drm/nouveau/core: uninline subdev/engine/device lookup functions
authorBen Skeggs <bskeggs@redhat.com>
Fri, 5 Dec 2014 01:20:19 +0000 (11:20 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 22 Jan 2015 02:14:48 +0000 (12:14 +1000)
These are a tad more complex than a direct cast with paranoia safeties.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/core/engine.c
drivers/gpu/drm/nouveau/core/core/subdev.c
drivers/gpu/drm/nouveau/core/engine/device/base.c
drivers/gpu/drm/nouveau/core/include/core/device.h
drivers/gpu/drm/nouveau/core/include/core/engine.h
drivers/gpu/drm/nouveau/core/include/core/subdev.h

index 1f6954ae9dd36e51141a9b810d91e49f1ddad2b2..4835056b068967e62bd6ca0462f36467e8549585 100644 (file)
 #include <core/engine.h>
 #include <core/option.h>
 
+struct nouveau_engine *
+nouveau_engine(void *obj, int sub)
+{
+       struct nouveau_subdev *subdev = nouveau_subdev(obj, sub);
+       if (subdev && nv_iclass(subdev, NV_ENGINE_CLASS))
+               return nv_engine(subdev);
+       return NULL;
+}
+
 int
 nouveau_engine_create_(struct nouveau_object *parent,
                       struct nouveau_object *engobj,
index 28157bf57da15875cd300687aa93f52d300b694e..edae535406e572fad78160b6e515197621049229 100644 (file)
 #include <core/device.h>
 #include <core/option.h>
 
+struct nouveau_subdev *
+nouveau_subdev(void *obj, int sub)
+{
+       if (nv_device(obj)->subdev[sub])
+               return nv_subdev(nv_device(obj)->subdev[sub]);
+       return NULL;
+}
+
 void
 nouveau_subdev_reset(struct nouveau_object *subdev)
 {
index 714a93eb1fd3d6dd85ef6384d30e5260d32089d4..e2da1d4029cd692e92b682d42ea400e4e172116a 100644 (file)
@@ -508,6 +508,28 @@ nouveau_devobj_ofuncs = {
  * nouveau_device: engine functions
  *****************************************************************************/
 
+struct nouveau_device *
+nv_device(void *obj)
+{
+       struct nouveau_object *object = nv_object(obj);
+       struct nouveau_object *device = object;
+
+       if (device->engine)
+               device = device->engine;
+       if (device->parent)
+               device = device->parent;
+
+#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
+       if (unlikely(!nv_iclass(device, NV_SUBDEV_CLASS) ||
+                    (nv_hclass(device) & 0xff) != NVDEV_ENGINE_DEVICE)) {
+               nv_assert("BAD CAST -> NvDevice, 0x%08x 0x%08x",
+                         nv_hclass(object), nv_hclass(device));
+       }
+#endif
+
+       return (void *)device;
+}
+
 static struct nouveau_oclass
 nouveau_device_sclass[] = {
        { 0x0080, &nouveau_devobj_ofuncs },
index 33b35c487cba6819723582acde7f1b0bb282fe24..21a055aca5131c9d46e402a3a9fddbdd19ad2dc8 100644 (file)
@@ -105,44 +105,7 @@ struct nouveau_device {
 
 int nouveau_device_list(u64 *name, int size);
 
-static inline struct nouveau_device *
-nv_device(void *obj)
-{
-       struct nouveau_object *object = nv_object(obj);
-       struct nouveau_object *device = object;
-
-       if (device->engine)
-               device = device->engine;
-       if (device->parent)
-               device = device->parent;
-
-#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
-       if (unlikely(!nv_iclass(device, NV_SUBDEV_CLASS) ||
-                    (nv_hclass(device) & 0xff) != NVDEV_ENGINE_DEVICE)) {
-               nv_assert("BAD CAST -> NvDevice, 0x%08x 0x%08x",
-                         nv_hclass(object), nv_hclass(device));
-       }
-#endif
-
-       return (void *)device;
-}
-
-static inline struct nouveau_subdev *
-nouveau_subdev(void *obj, int sub)
-{
-       if (nv_device(obj)->subdev[sub])
-               return nv_subdev(nv_device(obj)->subdev[sub]);
-       return NULL;
-}
-
-static inline struct nouveau_engine *
-nouveau_engine(void *obj, int sub)
-{
-       struct nouveau_subdev *subdev = nouveau_subdev(obj, sub);
-       if (subdev && nv_iclass(subdev, NV_ENGINE_CLASS))
-               return nv_engine(subdev);
-       return NULL;
-}
+struct nouveau_device *nv_device(void *obj);
 
 static inline bool
 nv_device_match(struct nouveau_object *object, u16 dev, u16 ven, u16 sub)
index 8945755eeec04496ae000f49944cf35e9cb6c036..be04250a1c0097ce96daac31861f7e2ba5afac9f 100644 (file)
@@ -35,6 +35,8 @@ nv_engidx(struct nouveau_object *object)
        return nv_subidx(object);
 }
 
+struct nouveau_engine *nouveau_engine(void *obj, int idx);
+
 #define nouveau_engine_create(p,e,c,d,i,f,r)                                   \
        nouveau_engine_create_((p), (e), (c), (d), (i), (f),                   \
                               sizeof(**r),(void **)r)
index c24d64ba9a6bd1b5f144385e4bb54b1d1bb860cd..d9739aed0150e69d2aada513207c8c412f130d05 100644 (file)
@@ -33,6 +33,8 @@ nv_subidx(struct nouveau_object *object)
        return nv_hclass(nv_subdev(object)) & 0xff;
 }
 
+struct nouveau_subdev *nouveau_subdev(void *obj, int idx);
+
 #define nouveau_subdev_create(p,e,o,v,s,f,d)                                   \
        nouveau_subdev_create_((p), (e), (o), (v), (s), (f),                   \
                               sizeof(**d),(void **)d)