예제 #1
0
파일: nouveau_drm.c 프로젝트: HanDH/linux-1
static void
nouveau_cli_destroy(struct nouveau_cli *cli)
{
    nvkm_vm_ref(NULL, &nvxx_client(&cli->base)->vm, NULL);
    nvif_client_fini(&cli->base);
    usif_client_fini(cli);
}
예제 #2
0
파일: gf100.c 프로젝트: 168519/linux
	atomic_inc(&vm->engref[NVDEV_SUBDEV_BAR]);

	/*
	 * Bootstrap page table lookup.
	 */
	if (bar_nr == 3) {
		ret = nvkm_gpuobj_new(nv_object(priv), NULL,
				      (bar_len >> 12) * 8, 0x1000,
				      NVOBJ_FLAG_ZERO_ALLOC,
				      &vm->pgt[0].obj[0]);
		vm->pgt[0].refcount[0] = 1;
		if (ret)
			return ret;
	}

	ret = nvkm_vm_ref(vm, &bar_vm->vm, bar_vm->pgd);
	nvkm_vm_ref(NULL, &vm, NULL);
	if (ret)
		return ret;

	nv_wo32(bar_vm->mem, 0x0200, lower_32_bits(bar_vm->pgd->addr));
	nv_wo32(bar_vm->mem, 0x0204, upper_32_bits(bar_vm->pgd->addr));
	nv_wo32(bar_vm->mem, 0x0208, lower_32_bits(bar_len - 1));
	nv_wo32(bar_vm->mem, 0x020c, upper_32_bits(bar_len - 1));
	return 0;
}

int
gf100_bar_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
	       struct nvkm_oclass *oclass, void *data, u32 size,
	       struct nvkm_object **pobject)