drm/nouveau/core: implement shortcut for simple engctx construction
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Родитель
e5e454f918
Коммит
43598875b3
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче