drm/nouveau/core: implement shortcut for simple engctx construction
authorBen Skeggs <bskeggs@redhat.com>
Thu, 22 Nov 2012 03:27:37 +0000 (13:27 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 28 Nov 2012 23:58:04 +0000 (09:58 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/core/engctx.c
drivers/gpu/drm/nouveau/core/engine/copy/nva3.c
drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c
drivers/gpu/drm/nouveau/core/engine/copy/nve0.c
drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c
drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c
drivers/gpu/drm/nouveau/core/include/core/engctx.h
drivers/gpu/drm/nouveau/core/include/core/falcon.h

index e41b10d..84c71fa 100644 (file)
@@ -189,6 +189,21 @@ nouveau_engctx_fini(struct nouveau_engctx *engctx, bool suspend)
        return nouveau_gpuobj_fini(&engctx->base, suspend);
 }
 
+int
+_nouveau_engctx_ctor(struct nouveau_object *parent,
+                    struct nouveau_object *engine,
+                    struct nouveau_oclass *oclass, void *data, u32 size,
+                    struct nouveau_object **pobject)
+{
+       struct nouveau_engctx *engctx;
+       int ret;
+
+       ret = nouveau_engctx_create(parent, engine, oclass, NULL, 256, 256,
+                                   NVOBJ_FLAG_ZERO_ALLOC, &engctx);
+       *pobject = nv_object(engctx);
+       return ret;
+}
+
 void
 _nouveau_engctx_dtor(struct nouveau_object *object)
 {
index f849b69..283248c 100644 (file)
@@ -38,10 +38,6 @@ struct nva3_copy_priv {
        struct nouveau_falcon base;
 };
 
-struct nva3_copy_chan {
-       struct nouveau_falcon_chan base;
-};
-
 /*******************************************************************************
  * Copy object classes
  ******************************************************************************/
@@ -56,29 +52,11 @@ nva3_copy_sclass[] = {
  * PCOPY context
  ******************************************************************************/
 
-static int
-nva3_copy_context_ctor(struct nouveau_object *parent,
-                      struct nouveau_object *engine,
-                      struct nouveau_oclass *oclass, void *data, u32 size,
-                      struct nouveau_object **pobject)
-{
-       struct nva3_copy_chan *priv;
-       int ret;
-
-       ret = nouveau_falcon_context_create(parent, engine, oclass, NULL, 256,
-                                           0, NVOBJ_FLAG_ZERO_ALLOC, &priv);
-       *pobject = nv_object(priv);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
 static struct nouveau_oclass
 nva3_copy_cclass = {
        .handle = NV_ENGCTX(COPY0, 0xa3),
        .ofuncs = &(struct nouveau_ofuncs) {
-               .ctor = nva3_copy_context_ctor,
+               .ctor = _nouveau_falcon_context_ctor,
                .dtor = _nouveau_falcon_context_dtor,
                .init = _nouveau_falcon_context_init,
                .fini = _nouveau_falcon_context_fini,
index ffd9bb8..b3ed273 100644 (file)
@@ -35,10 +35,6 @@ struct nvc0_copy_priv {
        struct nouveau_falcon base;
 };
 
-struct nvc0_copy_chan {
-       struct nouveau_falcon_chan base;
-};
-
 /*******************************************************************************
  * Copy object classes
  ******************************************************************************/
@@ -59,27 +55,9 @@ nvc0_copy1_sclass[] = {
  * PCOPY context
  ******************************************************************************/
 
-static int
-nvc0_copy_context_ctor(struct nouveau_object *parent,
-                      struct nouveau_object *engine,
-                      struct nouveau_oclass *oclass, void *data, u32 size,
-                      struct nouveau_object **pobject)
-{
-       struct nvc0_copy_chan *priv;
-       int ret;
-
-       ret = nouveau_falcon_context_create(parent, engine, oclass, NULL, 256,
-                                           256, NVOBJ_FLAG_ZERO_ALLOC, &priv);
-       *pobject = nv_object(priv);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
 static struct nouveau_ofuncs
 nvc0_copy_context_ofuncs = {
-       .ctor = nvc0_copy_context_ctor,
+       .ctor = _nouveau_falcon_context_ctor,
        .dtor = _nouveau_falcon_context_dtor,
        .init = _nouveau_falcon_context_init,
        .fini = _nouveau_falcon_context_fini,
index 889f1f0..dbbe9e8 100644 (file)
@@ -33,10 +33,6 @@ struct nve0_copy_priv {
        struct nouveau_engine base;
 };
 
-struct nve0_copy_chan {
-       struct nouveau_engctx base;
-};
-
 /*******************************************************************************
  * Copy object classes
  ******************************************************************************/
@@ -51,27 +47,9 @@ nve0_copy_sclass[] = {
  * PCOPY context
  ******************************************************************************/
 
-static int
-nve0_copy_context_ctor(struct nouveau_object *parent,
-                      struct nouveau_object *engine,
-                      struct nouveau_oclass *oclass, void *data, u32 size,
-                      struct nouveau_object **pobject)
-{
-       struct nve0_copy_chan *priv;
-       int ret;
-
-       ret = nouveau_engctx_create(parent, engine, oclass, NULL, 256,
-                                   256, NVOBJ_FLAG_ZERO_ALLOC, &priv);
-       *pobject = nv_object(priv);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
 static struct nouveau_ofuncs
 nve0_copy_context_ofuncs = {
-       .ctor = nve0_copy_context_ctor,
+       .ctor = _nouveau_engctx_ctor,
        .dtor = _nouveau_engctx_dtor,
        .init = _nouveau_engctx_init,
        .fini = _nouveau_engctx_fini,
index 2e04b96..b974905 100644 (file)
@@ -37,10 +37,6 @@ struct nv84_crypt_priv {
        struct nouveau_engine base;
 };
 
-struct nv84_crypt_chan {
-       struct nouveau_engctx base;
-};
-
 /*******************************************************************************
  * Crypt object classes
  ******************************************************************************/
@@ -87,29 +83,11 @@ nv84_crypt_sclass[] = {
  * PCRYPT context
  ******************************************************************************/
 
-static int
-nv84_crypt_context_ctor(struct nouveau_object *parent,
-                       struct nouveau_object *engine,
-                       struct nouveau_oclass *oclass, void *data, u32 size,
-                       struct nouveau_object **pobject)
-{
-       struct nv84_crypt_chan *priv;
-       int ret;
-
-       ret = nouveau_engctx_create(parent, engine, oclass, NULL, 256,
-                                   0, NVOBJ_FLAG_ZERO_ALLOC, &priv);
-       *pobject = nv_object(priv);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
 static struct nouveau_oclass
 nv84_crypt_cclass = {
        .handle = NV_ENGCTX(CRYPT, 0x84),
        .ofuncs = &(struct nouveau_ofuncs) {
-               .ctor = nv84_crypt_context_ctor,
+               .ctor = _nouveau_engctx_ctor,
                .dtor = _nouveau_engctx_dtor,
                .init = _nouveau_engctx_init,
                .fini = _nouveau_engctx_fini,
index e7f6bb6..21986f3 100644 (file)
@@ -40,10 +40,6 @@ struct nv98_crypt_priv {
        struct nouveau_falcon base;
 };
 
-struct nv98_crypt_chan {
-       struct nouveau_falcon_chan base;
-};
-
 /*******************************************************************************
  * Crypt object classes
  ******************************************************************************/
@@ -58,29 +54,11 @@ nv98_crypt_sclass[] = {
  * PCRYPT context
  ******************************************************************************/
 
-static int
-nv98_crypt_context_ctor(struct nouveau_object *parent,
-                       struct nouveau_object *engine,
-                       struct nouveau_oclass *oclass, void *data, u32 size,
-                       struct nouveau_object **pobject)
-{
-       struct nv98_crypt_chan *priv;
-       int ret;
-
-       ret = nouveau_falcon_context_create(parent, engine, oclass, NULL, 256,
-                                           256, NVOBJ_FLAG_ZERO_ALLOC, &priv);
-       *pobject = nv_object(priv);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
 static struct nouveau_oclass
 nv98_crypt_cclass = {
        .handle = NV_ENGCTX(CRYPT, 0x98),
        .ofuncs = &(struct nouveau_ofuncs) {
-               .ctor = nv98_crypt_context_ctor,
+               .ctor = _nouveau_falcon_context_ctor,
                .dtor = _nouveau_falcon_context_dtor,
                .init = _nouveau_falcon_context_init,
                .fini = _nouveau_falcon_context_fini,
index 8a947b6..2fd48b5 100644 (file)
@@ -39,6 +39,9 @@ void nouveau_engctx_destroy(struct nouveau_engctx *);
 int  nouveau_engctx_init(struct nouveau_engctx *);
 int  nouveau_engctx_fini(struct nouveau_engctx *, bool suspend);
 
+int  _nouveau_engctx_ctor(struct nouveau_object *, struct nouveau_object *,
+                         struct nouveau_oclass *, void *, u32,
+                         struct nouveau_object **);
 void _nouveau_engctx_dtor(struct nouveau_object *);
 int  _nouveau_engctx_init(struct nouveau_object *);
 int  _nouveau_engctx_fini(struct nouveau_object *, bool suspend);
index 47f040a..1edec38 100644 (file)
@@ -18,6 +18,7 @@ struct nouveau_falcon_chan {
 #define nouveau_falcon_context_fini(d,s)                                       \
        nouveau_engctx_fini(&(d)->base, (s))
 
+#define _nouveau_falcon_context_ctor _nouveau_engctx_ctor
 #define _nouveau_falcon_context_dtor _nouveau_engctx_dtor
 #define _nouveau_falcon_context_init _nouveau_engctx_init
 #define _nouveau_falcon_context_fini _nouveau_engctx_fini