Lines Matching refs:chan

51 	struct nouveau_channel *chan = container_of(ntfy, typeof(*chan), kill);  in nouveau_channel_killed()  local
52 struct nouveau_cli *cli = (void *)chan->user.client; in nouveau_channel_killed()
53 NV_PRINTK(warn, cli, "channel %d killed!\n", chan->chid); in nouveau_channel_killed()
54 atomic_set(&chan->killed, 1); in nouveau_channel_killed()
55 if (chan->fence) in nouveau_channel_killed()
56 nouveau_fence_context_kill(chan->fence, -ENODEV); in nouveau_channel_killed()
61 nouveau_channel_idle(struct nouveau_channel *chan) in nouveau_channel_idle() argument
63 if (likely(chan && chan->fence && !atomic_read(&chan->killed))) { in nouveau_channel_idle()
64 struct nouveau_cli *cli = (void *)chan->user.client; in nouveau_channel_idle()
68 ret = nouveau_fence_new(chan, false, &fence); in nouveau_channel_idle()
76 chan->chid, nvxx_client(&cli->base)->name); in nouveau_channel_idle()
86 struct nouveau_channel *chan = *pchan; in nouveau_channel_del() local
87 if (chan) { in nouveau_channel_del()
88 struct nouveau_cli *cli = (void *)chan->user.client; in nouveau_channel_del()
90 if (chan->fence) in nouveau_channel_del()
91 nouveau_fence(chan->drm)->context_del(chan); in nouveau_channel_del()
94 nouveau_svmm_part(chan->vmm->svmm, chan->inst); in nouveau_channel_del()
96 nvif_object_dtor(&chan->nvsw); in nouveau_channel_del()
97 nvif_object_dtor(&chan->gart); in nouveau_channel_del()
98 nvif_object_dtor(&chan->vram); in nouveau_channel_del()
99 nvif_notify_dtor(&chan->kill); in nouveau_channel_del()
100 nvif_object_dtor(&chan->user); in nouveau_channel_del()
101 nvif_object_dtor(&chan->push.ctxdma); in nouveau_channel_del()
102 nouveau_vma_del(&chan->push.vma); in nouveau_channel_del()
103 nouveau_bo_unmap(chan->push.buffer); in nouveau_channel_del()
104 if (chan->push.buffer && chan->push.buffer->bo.pin_count) in nouveau_channel_del()
105 nouveau_bo_unpin(chan->push.buffer); in nouveau_channel_del()
106 nouveau_bo_ref(NULL, &chan->push.buffer); in nouveau_channel_del()
107 kfree(chan); in nouveau_channel_del()
115 struct nouveau_channel *chan = container_of(push, typeof(*chan), chan._push); in nouveau_channel_kick() local
116 chan->dma.cur = chan->dma.cur + (chan->chan._push.cur - chan->chan._push.bgn); in nouveau_channel_kick()
117 FIRE_RING(chan); in nouveau_channel_kick()
118 chan->chan._push.bgn = chan->chan._push.cur; in nouveau_channel_kick()
124 struct nouveau_channel *chan = container_of(push, typeof(*chan), chan._push); in nouveau_channel_wait() local
126 chan->dma.cur = chan->dma.cur + (chan->chan._push.cur - chan->chan._push.bgn); in nouveau_channel_wait()
127 ret = RING_SPACE(chan, size); in nouveau_channel_wait()
129 chan->chan._push.bgn = chan->chan._push.mem.object.map.ptr; in nouveau_channel_wait()
130 chan->chan._push.bgn = chan->chan._push.bgn + chan->dma.cur; in nouveau_channel_wait()
131 chan->chan._push.cur = chan->chan._push.bgn; in nouveau_channel_wait()
132 chan->chan._push.end = chan->chan._push.bgn + size; in nouveau_channel_wait()
143 struct nouveau_channel *chan; in nouveau_channel_prep() local
147 chan = *pchan = kzalloc(sizeof(*chan), GFP_KERNEL); in nouveau_channel_prep()
148 if (!chan) in nouveau_channel_prep()
151 chan->device = device; in nouveau_channel_prep()
152 chan->drm = drm; in nouveau_channel_prep()
153 chan->vmm = cli->svm.cli ? &cli->svm : &cli->vmm; in nouveau_channel_prep()
154 atomic_set(&chan->killed, 0); in nouveau_channel_prep()
162 &chan->push.buffer); in nouveau_channel_prep()
164 ret = nouveau_bo_pin(chan->push.buffer, target, false); in nouveau_channel_prep()
166 ret = nouveau_bo_map(chan->push.buffer); in nouveau_channel_prep()
174 chan->chan._push.mem.object.parent = cli->base.object.parent; in nouveau_channel_prep()
175 chan->chan._push.mem.object.client = &cli->base; in nouveau_channel_prep()
176 chan->chan._push.mem.object.name = "chanPush"; in nouveau_channel_prep()
177 chan->chan._push.mem.object.map.ptr = chan->push.buffer->kmap.virtual; in nouveau_channel_prep()
178 chan->chan._push.wait = nouveau_channel_wait; in nouveau_channel_prep()
179 chan->chan._push.kick = nouveau_channel_kick; in nouveau_channel_prep()
180 chan->chan.push = &chan->chan._push; in nouveau_channel_prep()
186 chan->push.addr = chan->push.buffer->offset; in nouveau_channel_prep()
189 ret = nouveau_vma_new(chan->push.buffer, chan->vmm, in nouveau_channel_prep()
190 &chan->push.vma); in nouveau_channel_prep()
196 chan->push.addr = chan->push.vma->addr; in nouveau_channel_prep()
204 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_prep()
206 if (chan->push.buffer->bo.resource->mem_type == TTM_PL_VRAM) { in nouveau_channel_prep()
224 if (chan->drm->agp.bridge) { in nouveau_channel_prep()
227 args.start = chan->drm->agp.base; in nouveau_channel_prep()
228 args.limit = chan->drm->agp.base + in nouveau_channel_prep()
229 chan->drm->agp.size - 1; in nouveau_channel_prep()
234 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_prep()
240 &chan->push.ctxdma); in nouveau_channel_prep()
271 struct nouveau_channel *chan; in nouveau_channel_ind() local
276 ret = nouveau_channel_prep(drm, device, 0x12000, &chan); in nouveau_channel_ind()
277 *pchan = chan; in nouveau_channel_ind()
286 args.volta.ioffset = 0x10000 + chan->push.addr; in nouveau_channel_ind()
288 args.volta.vmm = nvif_handle(&chan->vmm->vmm.object); in nouveau_channel_ind()
295 args.kepler.ioffset = 0x10000 + chan->push.addr; in nouveau_channel_ind()
297 args.kepler.vmm = nvif_handle(&chan->vmm->vmm.object); in nouveau_channel_ind()
304 args.fermi.ioffset = 0x10000 + chan->push.addr; in nouveau_channel_ind()
305 args.fermi.vmm = nvif_handle(&chan->vmm->vmm.object); in nouveau_channel_ind()
310 args.nv50.ioffset = 0x10000 + chan->push.addr; in nouveau_channel_ind()
311 args.nv50.pushbuf = nvif_handle(&chan->push.ctxdma); in nouveau_channel_ind()
312 args.nv50.vmm = nvif_handle(&chan->vmm->vmm.object); in nouveau_channel_ind()
317 *oclass++, &args, size, &chan->user); in nouveau_channel_ind()
319 if (chan->user.oclass >= VOLTA_CHANNEL_GPFIFO_A) { in nouveau_channel_ind()
320 chan->chid = args.volta.chid; in nouveau_channel_ind()
321 chan->inst = args.volta.inst; in nouveau_channel_ind()
322 chan->token = args.volta.token; in nouveau_channel_ind()
324 if (chan->user.oclass >= KEPLER_CHANNEL_GPFIFO_A) { in nouveau_channel_ind()
325 chan->chid = args.kepler.chid; in nouveau_channel_ind()
326 chan->inst = args.kepler.inst; in nouveau_channel_ind()
328 if (chan->user.oclass >= FERMI_CHANNEL_GPFIFO) { in nouveau_channel_ind()
329 chan->chid = args.fermi.chid; in nouveau_channel_ind()
331 chan->chid = args.nv50.chid; in nouveau_channel_ind()
352 struct nouveau_channel *chan; in nouveau_channel_dma() local
356 ret = nouveau_channel_prep(drm, device, 0x10000, &chan); in nouveau_channel_dma()
357 *pchan = chan; in nouveau_channel_dma()
363 args.pushbuf = nvif_handle(&chan->push.ctxdma); in nouveau_channel_dma()
364 args.offset = chan->push.addr; in nouveau_channel_dma()
369 &chan->user); in nouveau_channel_dma()
371 chan->chid = args.chid; in nouveau_channel_dma()
381 nouveau_channel_init(struct nouveau_channel *chan, u32 vram, u32 gart) in nouveau_channel_init() argument
383 struct nvif_device *device = chan->device; in nouveau_channel_init()
384 struct nouveau_drm *drm = chan->drm; in nouveau_channel_init()
388 nvif_object_map(&chan->user, NULL, 0); in nouveau_channel_init()
390 if (chan->user.oclass >= FERMI_CHANNEL_GPFIFO && in nouveau_channel_init()
391 chan->user.oclass < AMPERE_CHANNEL_GPFIFO_B) { in nouveau_channel_init()
392 ret = nvif_notify_ctor(&chan->user, "abi16ChanKilled", in nouveau_channel_init()
395 NULL, 0, 0, &chan->kill); in nouveau_channel_init()
397 ret = nvif_notify_get(&chan->kill); in nouveau_channel_init()
411 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_init()
419 ret = nvif_object_ctor(&chan->user, "abi16ChanVramCtxDma", vram, in nouveau_channel_init()
421 &chan->vram); in nouveau_channel_init()
429 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_init()
431 if (chan->drm->agp.bridge) { in nouveau_channel_init()
434 args.start = chan->drm->agp.base; in nouveau_channel_init()
435 args.limit = chan->drm->agp.base + in nouveau_channel_init()
436 chan->drm->agp.size - 1; in nouveau_channel_init()
441 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_init()
444 ret = nvif_object_ctor(&chan->user, "abi16ChanGartCtxDma", gart, in nouveau_channel_init()
446 &chan->gart); in nouveau_channel_init()
452 switch (chan->user.oclass & 0x00ff) { in nouveau_channel_init()
455 chan->user_put = 0x40; in nouveau_channel_init()
456 chan->user_get = 0x44; in nouveau_channel_init()
457 chan->dma.max = (0x10000 / 4) - 2; in nouveau_channel_init()
460 chan->user_put = 0x40; in nouveau_channel_init()
461 chan->user_get = 0x44; in nouveau_channel_init()
462 chan->user_get_hi = 0x60; in nouveau_channel_init()
463 chan->dma.ib_base = 0x10000 / 4; in nouveau_channel_init()
464 chan->dma.ib_max = (0x02000 / 8) - 1; in nouveau_channel_init()
465 chan->dma.ib_put = 0; in nouveau_channel_init()
466 chan->dma.ib_free = chan->dma.ib_max - chan->dma.ib_put; in nouveau_channel_init()
467 chan->dma.max = chan->dma.ib_base; in nouveau_channel_init()
471 chan->dma.put = 0; in nouveau_channel_init()
472 chan->dma.cur = chan->dma.put; in nouveau_channel_init()
473 chan->dma.free = chan->dma.max - chan->dma.cur; in nouveau_channel_init()
475 ret = PUSH_WAIT(chan->chan.push, NOUVEAU_DMA_SKIPS); in nouveau_channel_init()
480 PUSH_DATA(chan->chan.push, 0x00000000); in nouveau_channel_init()
484 ret = nvif_object_ctor(&chan->user, "abi16NvswFence", 0x006e, in nouveau_channel_init()
486 NULL, 0, &chan->nvsw); in nouveau_channel_init()
490 ret = PUSH_WAIT(chan->chan.push, 2); in nouveau_channel_init()
494 PUSH_NVSQ(chan->chan.push, NV_SW, 0x0000, chan->nvsw.handle); in nouveau_channel_init()
495 PUSH_KICK(chan->chan.push); in nouveau_channel_init()
499 return nouveau_fence(chan->drm)->context_new(chan); in nouveau_channel_init()
555 drm->chan.nr = args.v.channels.data; in nouveau_channels_init()
556 drm->chan.context_base = dma_fence_context_alloc(drm->chan.nr); in nouveau_channels_init()