Lines Matching refs:chan
44 nouveau_channel_idle(struct nouveau_channel *chan) in nouveau_channel_idle() argument
46 if (likely(chan && chan->fence)) { in nouveau_channel_idle()
47 struct nouveau_cli *cli = (void *)chan->user.client; in nouveau_channel_idle()
51 ret = nouveau_fence_new(chan, false, &fence); in nouveau_channel_idle()
59 chan->chid, nvxx_client(&cli->base)->name); in nouveau_channel_idle()
69 struct nouveau_channel *chan = *pchan; in nouveau_channel_del() local
70 if (chan) { in nouveau_channel_del()
71 if (chan->fence) in nouveau_channel_del()
72 nouveau_fence(chan->drm)->context_del(chan); in nouveau_channel_del()
73 nvif_object_fini(&chan->nvsw); in nouveau_channel_del()
74 nvif_object_fini(&chan->gart); in nouveau_channel_del()
75 nvif_object_fini(&chan->vram); in nouveau_channel_del()
76 nvif_object_fini(&chan->user); in nouveau_channel_del()
77 nvif_object_fini(&chan->push.ctxdma); in nouveau_channel_del()
78 nouveau_bo_vma_del(chan->push.buffer, &chan->push.vma); in nouveau_channel_del()
79 nouveau_bo_unmap(chan->push.buffer); in nouveau_channel_del()
80 if (chan->push.buffer && chan->push.buffer->pin_refcnt) in nouveau_channel_del()
81 nouveau_bo_unpin(chan->push.buffer); in nouveau_channel_del()
82 nouveau_bo_ref(NULL, &chan->push.buffer); in nouveau_channel_del()
83 kfree(chan); in nouveau_channel_del()
95 struct nouveau_channel *chan; in nouveau_channel_prep() local
99 chan = *pchan = kzalloc(sizeof(*chan), GFP_KERNEL); in nouveau_channel_prep()
100 if (!chan) in nouveau_channel_prep()
103 chan->device = device; in nouveau_channel_prep()
104 chan->drm = drm; in nouveau_channel_prep()
112 &chan->push.buffer); in nouveau_channel_prep()
114 ret = nouveau_bo_pin(chan->push.buffer, target, false); in nouveau_channel_prep()
116 ret = nouveau_bo_map(chan->push.buffer); in nouveau_channel_prep()
128 chan->push.vma.offset = chan->push.buffer->bo.offset; in nouveau_channel_prep()
131 ret = nouveau_bo_vma_add(chan->push.buffer, cli->vm, in nouveau_channel_prep()
132 &chan->push.vma); in nouveau_channel_prep()
143 if (chan->push.buffer->bo.mem.mem_type == TTM_PL_VRAM) { in nouveau_channel_prep()
161 if (chan->drm->agp.bridge) { in nouveau_channel_prep()
164 args.start = chan->drm->agp.base; in nouveau_channel_prep()
165 args.limit = chan->drm->agp.base + in nouveau_channel_prep()
166 chan->drm->agp.size - 1; in nouveau_channel_prep()
176 &args, sizeof(args), &chan->push.ctxdma); in nouveau_channel_prep()
201 struct nouveau_channel *chan; in nouveau_channel_ind() local
206 ret = nouveau_channel_prep(drm, device, 0x12000, &chan); in nouveau_channel_ind()
207 *pchan = chan; in nouveau_channel_ind()
217 args.kepler.ioffset = 0x10000 + chan->push.vma.offset; in nouveau_channel_ind()
224 args.fermi.ioffset = 0x10000 + chan->push.vma.offset; in nouveau_channel_ind()
230 args.nv50.ioffset = 0x10000 + chan->push.vma.offset; in nouveau_channel_ind()
231 args.nv50.pushbuf = nvif_handle(&chan->push.ctxdma); in nouveau_channel_ind()
237 &args, size, &chan->user); in nouveau_channel_ind()
239 if (chan->user.oclass >= KEPLER_CHANNEL_GPFIFO_A) in nouveau_channel_ind()
240 chan->chid = args.kepler.chid; in nouveau_channel_ind()
242 if (chan->user.oclass >= FERMI_CHANNEL_GPFIFO) in nouveau_channel_ind()
243 chan->chid = args.fermi.chid; in nouveau_channel_ind()
245 chan->chid = args.nv50.chid; in nouveau_channel_ind()
265 struct nouveau_channel *chan; in nouveau_channel_dma() local
269 ret = nouveau_channel_prep(drm, device, 0x10000, &chan); in nouveau_channel_dma()
270 *pchan = chan; in nouveau_channel_dma()
276 args.pushbuf = nvif_handle(&chan->push.ctxdma); in nouveau_channel_dma()
277 args.offset = chan->push.vma.offset; in nouveau_channel_dma()
281 &args, sizeof(args), &chan->user); in nouveau_channel_dma()
283 chan->chid = args.chid; in nouveau_channel_dma()
293 nouveau_channel_init(struct nouveau_channel *chan, u32 vram, u32 gart) in nouveau_channel_init() argument
295 struct nvif_device *device = chan->device; in nouveau_channel_init()
296 struct nouveau_cli *cli = (void *)chan->user.client; in nouveau_channel_init()
301 nvif_object_map(&chan->user); in nouveau_channel_init()
317 ret = nvif_object_init(&chan->user, vram, NV_DMA_IN_MEMORY, in nouveau_channel_init()
318 &args, sizeof(args), &chan->vram); in nouveau_channel_init()
328 if (chan->drm->agp.bridge) { in nouveau_channel_init()
331 args.start = chan->drm->agp.base; in nouveau_channel_init()
332 args.limit = chan->drm->agp.base + in nouveau_channel_init()
333 chan->drm->agp.size - 1; in nouveau_channel_init()
341 ret = nvif_object_init(&chan->user, gart, NV_DMA_IN_MEMORY, in nouveau_channel_init()
342 &args, sizeof(args), &chan->gart); in nouveau_channel_init()
348 switch (chan->user.oclass & 0x00ff) { in nouveau_channel_init()
351 chan->user_put = 0x40; in nouveau_channel_init()
352 chan->user_get = 0x44; in nouveau_channel_init()
353 chan->dma.max = (0x10000 / 4) - 2; in nouveau_channel_init()
356 chan->user_put = 0x40; in nouveau_channel_init()
357 chan->user_get = 0x44; in nouveau_channel_init()
358 chan->user_get_hi = 0x60; in nouveau_channel_init()
359 chan->dma.ib_base = 0x10000 / 4; in nouveau_channel_init()
360 chan->dma.ib_max = (0x02000 / 8) - 1; in nouveau_channel_init()
361 chan->dma.ib_put = 0; in nouveau_channel_init()
362 chan->dma.ib_free = chan->dma.ib_max - chan->dma.ib_put; in nouveau_channel_init()
363 chan->dma.max = chan->dma.ib_base; in nouveau_channel_init()
367 chan->dma.put = 0; in nouveau_channel_init()
368 chan->dma.cur = chan->dma.put; in nouveau_channel_init()
369 chan->dma.free = chan->dma.max - chan->dma.cur; in nouveau_channel_init()
371 ret = RING_SPACE(chan, NOUVEAU_DMA_SKIPS); in nouveau_channel_init()
376 OUT_RING(chan, 0x00000000); in nouveau_channel_init()
380 ret = nvif_object_init(&chan->user, 0x006e, in nouveau_channel_init()
382 NULL, 0, &chan->nvsw); in nouveau_channel_init()
386 ret = RING_SPACE(chan, 2); in nouveau_channel_init()
390 BEGIN_NV04(chan, NvSubSw, 0x0000, 1); in nouveau_channel_init()
391 OUT_RING (chan, chan->nvsw.handle); in nouveau_channel_init()
392 FIRE_RING (chan); in nouveau_channel_init()
396 return nouveau_fence(chan->drm)->context_new(chan); in nouveau_channel_init()