Lines Matching refs:chan
43 nouveau_channel_idle(struct nouveau_channel *chan) in nouveau_channel_idle() argument
45 struct nouveau_cli *cli = (void *)nvif_client(chan->object); in nouveau_channel_idle()
49 ret = nouveau_fence_new(chan, false, &fence); in nouveau_channel_idle()
57 chan->object->handle, nvxx_client(&cli->base)->name); in nouveau_channel_idle()
64 struct nouveau_channel *chan = *pchan; in nouveau_channel_del() local
65 if (chan) { in nouveau_channel_del()
66 if (chan->fence) { in nouveau_channel_del()
67 nouveau_channel_idle(chan); in nouveau_channel_del()
68 nouveau_fence(chan->drm)->context_del(chan); in nouveau_channel_del()
70 nvif_object_fini(&chan->nvsw); in nouveau_channel_del()
71 nvif_object_fini(&chan->gart); in nouveau_channel_del()
72 nvif_object_fini(&chan->vram); in nouveau_channel_del()
73 nvif_object_ref(NULL, &chan->object); in nouveau_channel_del()
74 nvif_object_fini(&chan->push.ctxdma); in nouveau_channel_del()
75 nouveau_bo_vma_del(chan->push.buffer, &chan->push.vma); in nouveau_channel_del()
76 nouveau_bo_unmap(chan->push.buffer); in nouveau_channel_del()
77 if (chan->push.buffer && chan->push.buffer->pin_refcnt) in nouveau_channel_del()
78 nouveau_bo_unpin(chan->push.buffer); in nouveau_channel_del()
79 nouveau_bo_ref(NULL, &chan->push.buffer); in nouveau_channel_del()
80 nvif_device_ref(NULL, &chan->device); in nouveau_channel_del()
81 kfree(chan); in nouveau_channel_del()
93 struct nouveau_channel *chan; in nouveau_channel_prep() local
97 chan = *pchan = kzalloc(sizeof(*chan), GFP_KERNEL); in nouveau_channel_prep()
98 if (!chan) in nouveau_channel_prep()
101 nvif_device_ref(device, &chan->device); in nouveau_channel_prep()
102 chan->drm = drm; in nouveau_channel_prep()
110 &chan->push.buffer); in nouveau_channel_prep()
112 ret = nouveau_bo_pin(chan->push.buffer, target, false); in nouveau_channel_prep()
114 ret = nouveau_bo_map(chan->push.buffer); in nouveau_channel_prep()
126 chan->push.vma.offset = chan->push.buffer->bo.offset; in nouveau_channel_prep()
129 ret = nouveau_bo_vma_add(chan->push.buffer, cli->vm, in nouveau_channel_prep()
130 &chan->push.vma); in nouveau_channel_prep()
141 if (chan->push.buffer->bo.mem.mem_type == TTM_PL_VRAM) { in nouveau_channel_prep()
158 if (chan->drm->agp.stat == ENABLED) { in nouveau_channel_prep()
161 args.start = chan->drm->agp.base; in nouveau_channel_prep()
162 args.limit = chan->drm->agp.base + in nouveau_channel_prep()
163 chan->drm->agp.size - 1; in nouveau_channel_prep()
174 &args, sizeof(args), &chan->push.ctxdma); in nouveau_channel_prep()
198 struct nouveau_channel *chan; in nouveau_channel_ind() local
203 ret = nouveau_channel_prep(drm, device, handle, 0x12000, &chan); in nouveau_channel_ind()
204 *pchan = chan; in nouveau_channel_ind()
213 args.kepler.pushbuf = chan->push.ctxdma.handle; in nouveau_channel_ind()
215 args.kepler.ioffset = 0x10000 + chan->push.vma.offset; in nouveau_channel_ind()
219 args.nv50.pushbuf = chan->push.ctxdma.handle; in nouveau_channel_ind()
221 args.nv50.ioffset = 0x10000 + chan->push.vma.offset; in nouveau_channel_ind()
226 &args, size, &chan->object); in nouveau_channel_ind()
228 retn = chan->object->data; in nouveau_channel_ind()
229 if (chan->object->oclass >= KEPLER_CHANNEL_GPFIFO_A) in nouveau_channel_ind()
230 chan->chid = retn->kepler.chid; in nouveau_channel_ind()
232 chan->chid = retn->nv50.chid; in nouveau_channel_ind()
252 struct nouveau_channel *chan; in nouveau_channel_dma() local
256 ret = nouveau_channel_prep(drm, device, handle, 0x10000, &chan); in nouveau_channel_dma()
257 *pchan = chan; in nouveau_channel_dma()
263 args.pushbuf = chan->push.ctxdma.handle; in nouveau_channel_dma()
264 args.offset = chan->push.vma.offset; in nouveau_channel_dma()
268 &args, sizeof(args), &chan->object); in nouveau_channel_dma()
270 retn = chan->object->data; in nouveau_channel_dma()
271 chan->chid = retn->chid; in nouveau_channel_dma()
281 nouveau_channel_init(struct nouveau_channel *chan, u32 vram, u32 gart) in nouveau_channel_init() argument
283 struct nvif_device *device = chan->device; in nouveau_channel_init()
290 nvif_object_map(chan->object); in nouveau_channel_init()
306 ret = nvif_object_init(chan->object, NULL, vram, in nouveau_channel_init()
308 sizeof(args), &chan->vram); in nouveau_channel_init()
318 if (chan->drm->agp.stat == ENABLED) { in nouveau_channel_init()
321 args.start = chan->drm->agp.base; in nouveau_channel_init()
322 args.limit = chan->drm->agp.base + in nouveau_channel_init()
323 chan->drm->agp.size - 1; in nouveau_channel_init()
331 ret = nvif_object_init(chan->object, NULL, gart, in nouveau_channel_init()
333 sizeof(args), &chan->gart); in nouveau_channel_init()
339 switch (chan->object->oclass & 0x00ff) { in nouveau_channel_init()
342 chan->user_put = 0x40; in nouveau_channel_init()
343 chan->user_get = 0x44; in nouveau_channel_init()
344 chan->dma.max = (0x10000 / 4) - 2; in nouveau_channel_init()
347 chan->user_put = 0x40; in nouveau_channel_init()
348 chan->user_get = 0x44; in nouveau_channel_init()
349 chan->user_get_hi = 0x60; in nouveau_channel_init()
350 chan->dma.ib_base = 0x10000 / 4; in nouveau_channel_init()
351 chan->dma.ib_max = (0x02000 / 8) - 1; in nouveau_channel_init()
352 chan->dma.ib_put = 0; in nouveau_channel_init()
353 chan->dma.ib_free = chan->dma.ib_max - chan->dma.ib_put; in nouveau_channel_init()
354 chan->dma.max = chan->dma.ib_base; in nouveau_channel_init()
358 chan->dma.put = 0; in nouveau_channel_init()
359 chan->dma.cur = chan->dma.put; in nouveau_channel_init()
360 chan->dma.free = chan->dma.max - chan->dma.cur; in nouveau_channel_init()
362 ret = RING_SPACE(chan, NOUVEAU_DMA_SKIPS); in nouveau_channel_init()
367 OUT_RING(chan, 0x00000000); in nouveau_channel_init()
371 ret = nvif_object_init(chan->object, NULL, 0x006e, 0x006e, in nouveau_channel_init()
372 NULL, 0, &chan->nvsw); in nouveau_channel_init()
376 swch = (void *)nvxx_object(&chan->nvsw)->parent; in nouveau_channel_init()
378 swch->flip_data = chan; in nouveau_channel_init()
380 ret = RING_SPACE(chan, 2); in nouveau_channel_init()
384 BEGIN_NV04(chan, NvSubSw, 0x0000, 1); in nouveau_channel_init()
385 OUT_RING (chan, chan->nvsw.handle); in nouveau_channel_init()
386 FIRE_RING (chan); in nouveau_channel_init()
390 return nouveau_fence(chan->drm)->context_new(chan); in nouveau_channel_init()