Lines Matching refs:chan

46 	struct nouveau_channel *chan = container_of(event, typeof(*chan), kill);  in nouveau_channel_killed()  local
47 struct nouveau_cli *cli = (void *)chan->user.client; in nouveau_channel_killed()
49 NV_PRINTK(warn, cli, "channel %d killed!\n", chan->chid); in nouveau_channel_killed()
50 atomic_set(&chan->killed, 1); in nouveau_channel_killed()
51 if (chan->fence) in nouveau_channel_killed()
52 nouveau_fence_context_kill(chan->fence, -ENODEV); in nouveau_channel_killed()
58 nouveau_channel_idle(struct nouveau_channel *chan) in nouveau_channel_idle() argument
60 if (likely(chan && chan->fence && !atomic_read(&chan->killed))) { in nouveau_channel_idle()
61 struct nouveau_cli *cli = (void *)chan->user.client; in nouveau_channel_idle()
65 ret = nouveau_fence_new(chan, false, &fence); in nouveau_channel_idle()
73 chan->chid, nvxx_client(&cli->base)->name); in nouveau_channel_idle()
83 struct nouveau_channel *chan = *pchan; in nouveau_channel_del() local
84 if (chan) { in nouveau_channel_del()
85 struct nouveau_cli *cli = (void *)chan->user.client; in nouveau_channel_del()
87 if (chan->fence) in nouveau_channel_del()
88 nouveau_fence(chan->drm)->context_del(chan); in nouveau_channel_del()
91 nouveau_svmm_part(chan->vmm->svmm, chan->inst); in nouveau_channel_del()
93 nvif_object_dtor(&chan->nvsw); in nouveau_channel_del()
94 nvif_object_dtor(&chan->gart); in nouveau_channel_del()
95 nvif_object_dtor(&chan->vram); in nouveau_channel_del()
96 nvif_event_dtor(&chan->kill); in nouveau_channel_del()
97 nvif_object_dtor(&chan->user); in nouveau_channel_del()
98 nvif_mem_dtor(&chan->mem_userd); in nouveau_channel_del()
99 nvif_object_dtor(&chan->push.ctxdma); in nouveau_channel_del()
100 nouveau_vma_del(&chan->push.vma); in nouveau_channel_del()
101 nouveau_bo_unmap(chan->push.buffer); in nouveau_channel_del()
102 if (chan->push.buffer && chan->push.buffer->bo.pin_count) in nouveau_channel_del()
103 nouveau_bo_unpin(chan->push.buffer); in nouveau_channel_del()
104 nouveau_bo_ref(NULL, &chan->push.buffer); in nouveau_channel_del()
105 kfree(chan); in nouveau_channel_del()
113 struct nouveau_channel *chan = container_of(push, typeof(*chan), chan._push); in nouveau_channel_kick() local
114 chan->dma.cur = chan->dma.cur + (chan->chan._push.cur - chan->chan._push.bgn); in nouveau_channel_kick()
115 FIRE_RING(chan); in nouveau_channel_kick()
116 chan->chan._push.bgn = chan->chan._push.cur; in nouveau_channel_kick()
122 struct nouveau_channel *chan = container_of(push, typeof(*chan), chan._push); in nouveau_channel_wait() local
124 chan->dma.cur = chan->dma.cur + (chan->chan._push.cur - chan->chan._push.bgn); in nouveau_channel_wait()
125 ret = RING_SPACE(chan, size); in nouveau_channel_wait()
127 chan->chan._push.bgn = chan->chan._push.mem.object.map.ptr; in nouveau_channel_wait()
128 chan->chan._push.bgn = chan->chan._push.bgn + chan->dma.cur; in nouveau_channel_wait()
129 chan->chan._push.cur = chan->chan._push.bgn; in nouveau_channel_wait()
130 chan->chan._push.end = chan->chan._push.bgn + size; in nouveau_channel_wait()
141 struct nouveau_channel *chan; in nouveau_channel_prep() local
145 chan = *pchan = kzalloc(sizeof(*chan), GFP_KERNEL); in nouveau_channel_prep()
146 if (!chan) in nouveau_channel_prep()
149 chan->device = device; in nouveau_channel_prep()
150 chan->drm = drm; in nouveau_channel_prep()
151 chan->vmm = cli->svm.cli ? &cli->svm : &cli->vmm; in nouveau_channel_prep()
152 atomic_set(&chan->killed, 0); in nouveau_channel_prep()
160 &chan->push.buffer); in nouveau_channel_prep()
162 ret = nouveau_bo_pin(chan->push.buffer, target, false); in nouveau_channel_prep()
164 ret = nouveau_bo_map(chan->push.buffer); in nouveau_channel_prep()
172 chan->chan._push.mem.object.parent = cli->base.object.parent; in nouveau_channel_prep()
173 chan->chan._push.mem.object.client = &cli->base; in nouveau_channel_prep()
174 chan->chan._push.mem.object.name = "chanPush"; in nouveau_channel_prep()
175 chan->chan._push.mem.object.map.ptr = chan->push.buffer->kmap.virtual; in nouveau_channel_prep()
176 chan->chan._push.wait = nouveau_channel_wait; in nouveau_channel_prep()
177 chan->chan._push.kick = nouveau_channel_kick; in nouveau_channel_prep()
178 chan->chan.push = &chan->chan._push; in nouveau_channel_prep()
184 chan->push.addr = chan->push.buffer->offset; in nouveau_channel_prep()
187 ret = nouveau_vma_new(chan->push.buffer, chan->vmm, in nouveau_channel_prep()
188 &chan->push.vma); in nouveau_channel_prep()
194 chan->push.addr = chan->push.vma->addr; in nouveau_channel_prep()
202 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_prep()
204 if (chan->push.buffer->bo.resource->mem_type == TTM_PL_VRAM) { in nouveau_channel_prep()
222 if (chan->drm->agp.bridge) { in nouveau_channel_prep()
225 args.start = chan->drm->agp.base; in nouveau_channel_prep()
226 args.limit = chan->drm->agp.base + in nouveau_channel_prep()
227 chan->drm->agp.size - 1; in nouveau_channel_prep()
232 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_prep()
238 &chan->push.ctxdma); in nouveau_channel_prep()
273 struct nvif_chan_v0 chan; in nouveau_channel_ctor() member
277 struct nouveau_channel *chan; in nouveau_channel_ctor() local
295 ret = nouveau_channel_prep(drm, device, size, &chan); in nouveau_channel_ctor()
296 *pchan = chan; in nouveau_channel_ctor()
301 args.chan.version = 0; in nouveau_channel_ctor()
302 args.chan.namelen = sizeof(args.name); in nouveau_channel_ctor()
303 args.chan.runlist = __ffs64(runm); in nouveau_channel_ctor()
304 args.chan.runq = 0; in nouveau_channel_ctor()
305 args.chan.priv = priv; in nouveau_channel_ctor()
306 args.chan.devm = BIT(0); in nouveau_channel_ctor()
308 args.chan.vmm = 0; in nouveau_channel_ctor()
309 args.chan.ctxdma = nvif_handle(&chan->push.ctxdma); in nouveau_channel_ctor()
310 args.chan.offset = chan->push.addr; in nouveau_channel_ctor()
311 args.chan.length = 0; in nouveau_channel_ctor()
313 args.chan.vmm = nvif_handle(&chan->vmm->vmm.object); in nouveau_channel_ctor()
315 args.chan.ctxdma = nvif_handle(&chan->push.ctxdma); in nouveau_channel_ctor()
317 args.chan.ctxdma = 0; in nouveau_channel_ctor()
318 args.chan.offset = ioffset + chan->push.addr; in nouveau_channel_ctor()
319 args.chan.length = ilength; in nouveau_channel_ctor()
321 args.chan.huserd = 0; in nouveau_channel_ctor()
322 args.chan.ouserd = 0; in nouveau_channel_ctor()
328 0, PAGE_SIZE, NULL, 0, &chan->mem_userd); in nouveau_channel_ctor()
332 args.chan.huserd = nvif_handle(&chan->mem_userd.object); in nouveau_channel_ctor()
333 args.chan.ouserd = 0; in nouveau_channel_ctor()
335 chan->userd = &chan->mem_userd.object; in nouveau_channel_ctor()
337 chan->userd = &chan->user; in nouveau_channel_ctor()
344 &args, sizeof(args), &chan->user); in nouveau_channel_ctor()
350 chan->runlist = args.chan.runlist; in nouveau_channel_ctor()
351 chan->chid = args.chan.chid; in nouveau_channel_ctor()
352 chan->inst = args.chan.inst; in nouveau_channel_ctor()
353 chan->token = args.chan.token; in nouveau_channel_ctor()
358 nouveau_channel_init(struct nouveau_channel *chan, u32 vram, u32 gart) in nouveau_channel_init() argument
360 struct nvif_device *device = chan->device; in nouveau_channel_init()
361 struct nouveau_drm *drm = chan->drm; in nouveau_channel_init()
365 ret = nvif_object_map(chan->userd, NULL, 0); in nouveau_channel_init()
369 if (chan->user.oclass >= FERMI_CHANNEL_GPFIFO) { in nouveau_channel_init()
378 ret = nvif_event_ctor(&chan->user, "abi16ChanKilled", chan->chid, in nouveau_channel_init()
380 &args.base, sizeof(args), &chan->kill); in nouveau_channel_init()
382 ret = nvif_event_allow(&chan->kill); in nouveau_channel_init()
396 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_init()
404 ret = nvif_object_ctor(&chan->user, "abi16ChanVramCtxDma", vram, in nouveau_channel_init()
406 &chan->vram); in nouveau_channel_init()
414 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_init()
416 if (chan->drm->agp.bridge) { in nouveau_channel_init()
419 args.start = chan->drm->agp.base; in nouveau_channel_init()
420 args.limit = chan->drm->agp.base + in nouveau_channel_init()
421 chan->drm->agp.size - 1; in nouveau_channel_init()
426 args.limit = chan->vmm->vmm.limit - 1; in nouveau_channel_init()
429 ret = nvif_object_ctor(&chan->user, "abi16ChanGartCtxDma", gart, in nouveau_channel_init()
431 &chan->gart); in nouveau_channel_init()
437 switch (chan->user.oclass & 0x00ff) { in nouveau_channel_init()
440 chan->user_put = 0x40; in nouveau_channel_init()
441 chan->user_get = 0x44; in nouveau_channel_init()
442 chan->dma.max = (0x10000 / 4) - 2; in nouveau_channel_init()
445 chan->user_put = 0x40; in nouveau_channel_init()
446 chan->user_get = 0x44; in nouveau_channel_init()
447 chan->user_get_hi = 0x60; in nouveau_channel_init()
448 chan->dma.ib_base = 0x10000 / 4; in nouveau_channel_init()
449 chan->dma.ib_max = (0x02000 / 8) - 1; in nouveau_channel_init()
450 chan->dma.ib_put = 0; in nouveau_channel_init()
451 chan->dma.ib_free = chan->dma.ib_max - chan->dma.ib_put; in nouveau_channel_init()
452 chan->dma.max = chan->dma.ib_base; in nouveau_channel_init()
456 chan->dma.put = 0; in nouveau_channel_init()
457 chan->dma.cur = chan->dma.put; in nouveau_channel_init()
458 chan->dma.free = chan->dma.max - chan->dma.cur; in nouveau_channel_init()
460 ret = PUSH_WAIT(chan->chan.push, NOUVEAU_DMA_SKIPS); in nouveau_channel_init()
465 PUSH_DATA(chan->chan.push, 0x00000000); in nouveau_channel_init()
469 ret = nvif_object_ctor(&chan->user, "abi16NvswFence", 0x006e, in nouveau_channel_init()
471 NULL, 0, &chan->nvsw); in nouveau_channel_init()
475 ret = PUSH_WAIT(chan->chan.push, 2); in nouveau_channel_init()
479 PUSH_NVSQ(chan->chan.push, NV_SW, 0x0000, chan->nvsw.handle); in nouveau_channel_init()
480 PUSH_KICK(chan->chan.push); in nouveau_channel_init()
484 return nouveau_fence(chan->drm)->context_new(chan); in nouveau_channel_init()