Пример #1
0
static int
nvd0_disp_ovly_ctor(struct nouveau_object *parent,
                    struct nouveau_object *engine,
                    struct nouveau_oclass *oclass, void *data, u32 size,
                    struct nouveau_object **pobject)
{
    struct nv50_display_ovly_class *args = data;
    struct nv50_disp_priv *priv = (void *)engine;
    struct nv50_disp_dmac *dmac;
    int ret;

    if (size < sizeof(*args) || args->head >= priv->head.nr)
        return -EINVAL;

    ret = nv50_disp_dmac_create_(parent, engine, oclass, args->pushbuf,
                                 5 + args->head, sizeof(*dmac),
                                 (void **)&dmac);
    *pobject = nv_object(dmac);
    if (ret)
        return ret;

    nv_parent(dmac)->object_attach = nvd0_disp_dmac_object_attach;
    nv_parent(dmac)->object_detach = nvd0_disp_dmac_object_detach;
    return 0;
}
Пример #2
0
static int
nv50_disp_mast_ctor(struct nouveau_object *parent,
		    struct nouveau_object *engine,
		    struct nouveau_oclass *oclass, void *data, u32 size,
		    struct nouveau_object **pobject)
{
	struct nv50_display_mast_class *args = data;
	struct nv50_disp_dmac *mast;
	int ret;

	if (size < sizeof(*args))
		return -EINVAL;

	ret = nv50_disp_dmac_create_(parent, engine, oclass, args->pushbuf,
				     0, sizeof(*mast), (void **)&mast);
	*pobject = nv_object(mast);
	if (ret)
		return ret;

	nv_parent(mast)->object_attach = nv50_disp_dmac_object_attach;
	nv_parent(mast)->object_detach = nv50_disp_dmac_object_detach;
	return 0;
}