int nouveau_gpuobj_dup(struct nouveau_object *parent, struct nouveau_gpuobj *base, struct nouveau_gpuobj **pgpuobj) { struct nouveau_gpuobj *gpuobj; int ret; ret = nouveau_object_create(parent, parent->engine, &nouveau_gpudup_oclass, 0, &gpuobj); *pgpuobj = gpuobj; if (ret) return ret; nouveau_object_ref(nv_object(base), &gpuobj->parent); gpuobj->addr = base->addr; gpuobj->size = base->size; return 0; }
static int nouveau_barobj_ctor(struct nouveau_object *parent, struct nouveau_object *engine, struct nouveau_oclass *oclass, void *mem, u32 size, struct nouveau_object **pobject) { struct nouveau_bar *bar = (void *)engine; struct nouveau_barobj *barobj; int ret; ret = nouveau_object_create(parent, engine, oclass, 0, &barobj); *pobject = nv_object(barobj); if (ret) return ret; ret = bar->kmap(bar, mem, NV_MEM_ACCESS_RW, &barobj->vma); if (ret) return ret; barobj->iomem = bar->iomem + (u32)barobj->vma.offset; return 0; }