Lines Matching refs:chan
100 nouveau_abi16_ntfy_fini(struct nouveau_abi16_chan *chan, in nouveau_abi16_ntfy_fini() argument
103 nvkm_mm_free(&chan->heap, &ntfy->node); in nouveau_abi16_ntfy_fini()
110 struct nouveau_abi16_chan *chan) in nouveau_abi16_chan_fini() argument
116 if (chan->chan && chan->ntfy) in nouveau_abi16_chan_fini()
117 nouveau_channel_idle(chan->chan); in nouveau_abi16_chan_fini()
120 list_for_each_entry_safe(ntfy, temp, &chan->notifiers, head) { in nouveau_abi16_chan_fini()
121 nouveau_abi16_ntfy_fini(chan, ntfy); in nouveau_abi16_chan_fini()
124 if (chan->ntfy) { in nouveau_abi16_chan_fini()
125 nouveau_bo_vma_del(chan->ntfy, &chan->ntfy_vma); in nouveau_abi16_chan_fini()
126 nouveau_bo_unpin(chan->ntfy); in nouveau_abi16_chan_fini()
127 drm_gem_object_unreference_unlocked(&chan->ntfy->gem); in nouveau_abi16_chan_fini()
130 if (chan->heap.block_size) in nouveau_abi16_chan_fini()
131 nvkm_mm_fini(&chan->heap); in nouveau_abi16_chan_fini()
134 if (chan->chan) { in nouveau_abi16_chan_fini()
135 abi16->handles &= ~(1ULL << (chan->chan->object->handle & 0xffff)); in nouveau_abi16_chan_fini()
136 nouveau_channel_del(&chan->chan); in nouveau_abi16_chan_fini()
139 list_del(&chan->head); in nouveau_abi16_chan_fini()
140 kfree(chan); in nouveau_abi16_chan_fini()
147 struct nouveau_abi16_chan *chan, *temp; in nouveau_abi16_fini() local
150 list_for_each_entry_safe(chan, temp, &abi16->channels, head) { in nouveau_abi16_fini()
151 nouveau_abi16_chan_fini(abi16, chan); in nouveau_abi16_fini()
241 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_channel_alloc() local
274 chan = kzalloc(sizeof(*chan), GFP_KERNEL); in nouveau_abi16_ioctl_channel_alloc()
275 if (!chan) in nouveau_abi16_ioctl_channel_alloc()
278 INIT_LIST_HEAD(&chan->notifiers); in nouveau_abi16_ioctl_channel_alloc()
279 list_add(&chan->head, &abi16->channels); in nouveau_abi16_ioctl_channel_alloc()
286 init->tt_ctxdma_handle, &chan->chan); in nouveau_abi16_ioctl_channel_alloc()
294 if (chan->chan->push.buffer->bo.mem.mem_type == TTM_PL_VRAM) in nouveau_abi16_ioctl_channel_alloc()
302 init->subchan[1].handle = chan->chan->nvsw.handle; in nouveau_abi16_ioctl_channel_alloc()
309 0, 0, &chan->ntfy); in nouveau_abi16_ioctl_channel_alloc()
311 ret = nouveau_bo_pin(chan->ntfy, TTM_PL_FLAG_TT, false); in nouveau_abi16_ioctl_channel_alloc()
316 ret = nouveau_bo_vma_add(chan->ntfy, cli->vm, in nouveau_abi16_ioctl_channel_alloc()
317 &chan->ntfy_vma); in nouveau_abi16_ioctl_channel_alloc()
322 ret = drm_gem_handle_create(file_priv, &chan->ntfy->gem, in nouveau_abi16_ioctl_channel_alloc()
327 ret = nvkm_mm_init(&chan->heap, 0, PAGE_SIZE, 1); in nouveau_abi16_ioctl_channel_alloc()
330 nouveau_abi16_chan_fini(abi16, chan); in nouveau_abi16_ioctl_channel_alloc()
337 struct nouveau_abi16_chan *chan; in nouveau_abi16_chan() local
339 list_for_each_entry(chan, &abi16->channels, head) { in nouveau_abi16_chan()
340 if (chan->chan->object->handle == NOUVEAU_ABI16_CHAN(channel)) in nouveau_abi16_chan()
341 return chan; in nouveau_abi16_chan()
352 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_channel_free() local
357 chan = nouveau_abi16_chan(abi16, req->channel); in nouveau_abi16_ioctl_channel_free()
358 if (!chan) in nouveau_abi16_ioctl_channel_free()
360 nouveau_abi16_chan_fini(abi16, chan); in nouveau_abi16_ioctl_channel_free()
426 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_notifierobj_alloc() local
440 chan = nouveau_abi16_chan(abi16, info->channel); in nouveau_abi16_ioctl_notifierobj_alloc()
441 if (!chan) in nouveau_abi16_ioctl_notifierobj_alloc()
448 list_add(&ntfy->head, &chan->notifiers); in nouveau_abi16_ioctl_notifierobj_alloc()
451 ret = nvkm_mm_head(&chan->heap, 0, 1, info->size, info->size, 1, in nouveau_abi16_ioctl_notifierobj_alloc()
461 args.ctxdma.start += chan->ntfy_vma.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
462 args.ctxdma.limit += chan->ntfy_vma.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
467 args.ctxdma.start += drm->agp.base + chan->ntfy->bo.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
468 args.ctxdma.limit += drm->agp.base + chan->ntfy->bo.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
473 args.ctxdma.start += chan->ntfy->bo.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
474 args.ctxdma.limit += chan->ntfy->bo.offset; in nouveau_abi16_ioctl_notifierobj_alloc()
486 nouveau_abi16_ntfy_fini(chan, ntfy); in nouveau_abi16_ioctl_notifierobj_alloc()
507 struct nouveau_abi16_chan *chan; in nouveau_abi16_ioctl_gpuobj_free() local
515 chan = nouveau_abi16_chan(abi16, fini->channel); in nouveau_abi16_ioctl_gpuobj_free()
516 if (!chan) in nouveau_abi16_ioctl_gpuobj_free()
521 nouveau_channel_idle(chan->chan); in nouveau_abi16_ioctl_gpuobj_free()
528 list_for_each_entry(ntfy, &chan->notifiers, head) { in nouveau_abi16_ioctl_gpuobj_free()
530 nvkm_mm_free(&chan->heap, &ntfy->node); in nouveau_abi16_ioctl_gpuobj_free()