Lines Matching refs:chan
108 nouveau_abi16_ntfy_fini(struct nouveau_abi16_chan *chan, in nouveau_abi16_ntfy_fini() argument
112 nvkm_mm_free(&chan->heap, &ntfy->node); in nouveau_abi16_ntfy_fini()
119 struct nouveau_abi16_chan *chan) in nouveau_abi16_chan_fini() argument
125 if (chan->chan && chan->ntfy) in nouveau_abi16_chan_fini()
126 nouveau_channel_idle(chan->chan); in nouveau_abi16_chan_fini()
129 list_for_each_entry_safe(ntfy, temp, &chan->notifiers, head) { in nouveau_abi16_chan_fini()
130 nouveau_abi16_ntfy_fini(chan, ntfy); in nouveau_abi16_chan_fini()
133 if (chan->ntfy) { in nouveau_abi16_chan_fini()
134 nouveau_bo_vma_del(chan->ntfy, &chan->ntfy_vma); in nouveau_abi16_chan_fini()
135 nouveau_bo_unpin(chan->ntfy); in nouveau_abi16_chan_fini()
136 drm_gem_object_unreference_unlocked(&chan->ntfy->gem); in nouveau_abi16_chan_fini()
139 if (chan->heap.block_size) in nouveau_abi16_chan_fini()
140 nvkm_mm_fini(&chan->heap); in nouveau_abi16_chan_fini()
143 if (chan->chan) { in nouveau_abi16_chan_fini()
144 nouveau_channel_idle(chan->chan); in nouveau_abi16_chan_fini()
145 nouveau_channel_del(&chan->chan); in nouveau_abi16_chan_fini()
148 list_del(&chan->head); in nouveau_abi16_chan_fini()
149 kfree(chan); in nouveau_abi16_chan_fini()
156 struct nouveau_abi16_chan *chan, *temp; in nouveau_abi16_fini() local
159 list_for_each_entry_safe(chan, temp, &abi16->channels, head) { in nouveau_abi16_fini()
160 nouveau_abi16_chan_fini(abi16, chan); in nouveau_abi16_fini()
249 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_channel_alloc() local
278 chan = kzalloc(sizeof(*chan), GFP_KERNEL); in nouveau_abi16_ioctl_channel_alloc()
279 if (!chan) in nouveau_abi16_ioctl_channel_alloc()
282 INIT_LIST_HEAD(&chan->notifiers); in nouveau_abi16_ioctl_channel_alloc()
283 list_add(&chan->head, &abi16->channels); in nouveau_abi16_ioctl_channel_alloc()
287 init->tt_ctxdma_handle, &chan->chan); in nouveau_abi16_ioctl_channel_alloc()
291 init->channel = chan->chan->chid; in nouveau_abi16_ioctl_channel_alloc()
297 if (chan->chan->push.buffer->bo.mem.mem_type == TTM_PL_VRAM) in nouveau_abi16_ioctl_channel_alloc()
305 init->subchan[1].handle = chan->chan->nvsw.handle; in nouveau_abi16_ioctl_channel_alloc()
312 0, 0, &chan->ntfy); in nouveau_abi16_ioctl_channel_alloc()
314 ret = nouveau_bo_pin(chan->ntfy, TTM_PL_FLAG_TT, false); in nouveau_abi16_ioctl_channel_alloc()
319 ret = nouveau_bo_vma_add(chan->ntfy, cli->vm, in nouveau_abi16_ioctl_channel_alloc()
320 &chan->ntfy_vma); in nouveau_abi16_ioctl_channel_alloc()
325 ret = drm_gem_handle_create(file_priv, &chan->ntfy->gem, in nouveau_abi16_ioctl_channel_alloc()
330 ret = nvkm_mm_init(&chan->heap, 0, PAGE_SIZE, 1); in nouveau_abi16_ioctl_channel_alloc()
333 nouveau_abi16_chan_fini(abi16, chan); in nouveau_abi16_ioctl_channel_alloc()
340 struct nouveau_abi16_chan *chan; in nouveau_abi16_chan() local
342 list_for_each_entry(chan, &abi16->channels, head) { in nouveau_abi16_chan()
343 if (chan->chan->chid == channel) in nouveau_abi16_chan()
344 return chan; in nouveau_abi16_chan()
356 struct nouveau_abi16_chan *chan; in nouveau_abi16_usif() local
376 if (!(chan = nouveau_abi16_chan(abi16, args->v0.token))) in nouveau_abi16_usif()
378 args->v0.object = nvif_handle(&chan->chan->user); in nouveau_abi16_usif()
393 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_channel_free() local
398 chan = nouveau_abi16_chan(abi16, req->channel); in nouveau_abi16_ioctl_channel_free()
399 if (!chan) in nouveau_abi16_ioctl_channel_free()
401 nouveau_abi16_chan_fini(abi16, chan); in nouveau_abi16_ioctl_channel_free()
410 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_grobj_alloc() local
424 chan = nouveau_abi16_chan(abi16, init->channel); in nouveau_abi16_ioctl_grobj_alloc()
425 if (!chan) in nouveau_abi16_ioctl_grobj_alloc()
428 ret = nvif_object_sclass_get(&chan->chan->user, &sclass); in nouveau_abi16_ioctl_grobj_alloc()
485 list_add(&ntfy->head, &chan->notifiers); in nouveau_abi16_ioctl_grobj_alloc()
488 ret = nvif_object_init(&chan->chan->user, init->handle, oclass, in nouveau_abi16_ioctl_grobj_alloc()
493 nouveau_abi16_ntfy_fini(chan, ntfy); in nouveau_abi16_ioctl_grobj_alloc()
503 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_notifierobj_alloc() local
518 chan = nouveau_abi16_chan(abi16, info->channel); in nouveau_abi16_ioctl_notifierobj_alloc()
519 if (!chan) in nouveau_abi16_ioctl_notifierobj_alloc()
526 list_add(&ntfy->head, &chan->notifiers); in nouveau_abi16_ioctl_notifierobj_alloc()
528 ret = nvkm_mm_head(&chan->heap, 0, 1, info->size, info->size, 1, in nouveau_abi16_ioctl_notifierobj_alloc()
538 args.start += chan->ntfy_vma.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
539 args.limit += chan->ntfy_vma.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
544 args.start += drm->agp.base + chan->ntfy->bo.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
545 args.limit += drm->agp.base + chan->ntfy->bo.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
549 args.start += chan->ntfy->bo.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
550 args.limit += chan->ntfy->bo.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
555 ret = nvif_object_init(&chan->chan->user, info->handle, in nouveau_abi16_ioctl_notifierobj_alloc()
566 nouveau_abi16_ntfy_fini(chan, ntfy); in nouveau_abi16_ioctl_notifierobj_alloc()
575 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_gpuobj_free() local
582 chan = nouveau_abi16_chan(abi16, fini->channel); in nouveau_abi16_ioctl_gpuobj_free()
583 if (!chan) in nouveau_abi16_ioctl_gpuobj_free()
587 nouveau_channel_idle(chan->chan); in nouveau_abi16_ioctl_gpuobj_free()
589 list_for_each_entry(ntfy, &chan->notifiers, head) { in nouveau_abi16_ioctl_gpuobj_free()
591 nouveau_abi16_ntfy_fini(chan, ntfy); in nouveau_abi16_ioctl_gpuobj_free()