Lines Matching refs:chan
34 struct nvkm_fifo_chan *chan; member
44 struct nvkm_fifo_chan *chan = object->chan; in nvkm_fifo_chan_child_fini() local
45 struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; in nvkm_fifo_chan_child_fini()
52 if (chan->func->engine_fini) { in nvkm_fifo_chan_child_fini()
53 ret = chan->func->engine_fini(chan, engine, suspend); in nvkm_fifo_chan_child_fini()
55 nvif_error(&chan->object, in nvkm_fifo_chan_child_fini()
67 nvif_trace(&chan->object, "detached %s\n", name); in nvkm_fifo_chan_child_fini()
77 struct nvkm_fifo_chan *chan = object->chan; in nvkm_fifo_chan_child_init() local
78 struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; in nvkm_fifo_chan_child_init()
91 if (chan->func->engine_init) { in nvkm_fifo_chan_child_init()
92 ret = chan->func->engine_init(chan, engine); in nvkm_fifo_chan_child_init()
94 nvif_error(&chan->object, in nvkm_fifo_chan_child_init()
100 nvif_trace(&chan->object, "attached %s\n", name); in nvkm_fifo_chan_child_init()
110 struct nvkm_fifo_chan *chan = object->chan; in nvkm_fifo_chan_child_del() local
111 struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; in nvkm_fifo_chan_child_del()
113 if (chan->func->object_dtor) in nvkm_fifo_chan_child_del()
114 chan->func->object_dtor(chan, object->hash); in nvkm_fifo_chan_child_del()
117 if (chan->func->engine_dtor) in nvkm_fifo_chan_child_del()
118 chan->func->engine_dtor(chan, engine); in nvkm_fifo_chan_child_del()
120 if (chan->vm) in nvkm_fifo_chan_child_del()
121 atomic_dec(&chan->vm->engref[engine->subdev.index]); in nvkm_fifo_chan_child_del()
137 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(oclass->parent); in nvkm_fifo_chan_child_new() local
138 struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; in nvkm_fifo_chan_child_new()
145 object->chan = chan; in nvkm_fifo_chan_child_new()
154 if (chan->vm) in nvkm_fifo_chan_child_new()
155 atomic_inc(&chan->vm->engref[engine->subdev.index]); in nvkm_fifo_chan_child_new()
158 ret = engine->func->fifo.cclass(chan, &cclass, in nvkm_fifo_chan_child_new()
168 if (chan->func->engine_ctor) { in nvkm_fifo_chan_child_new()
169 ret = chan->func->engine_ctor(chan, oclass->engine, in nvkm_fifo_chan_child_new()
190 if (chan->func->object_ctor) { in nvkm_fifo_chan_child_new()
192 chan->func->object_ctor(chan, object->oproxy.object); in nvkm_fifo_chan_child_new()
204 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); in nvkm_fifo_chan_child_get() local
205 struct nvkm_fifo *fifo = chan->fifo; in nvkm_fifo_chan_child_get()
208 u64 mask = chan->engines; in nvkm_fifo_chan_child_get()
249 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); in nvkm_fifo_chan_ntfy() local
250 if (chan->func->ntfy) in nvkm_fifo_chan_ntfy()
251 return chan->func->ntfy(chan, type, pevent); in nvkm_fifo_chan_ntfy()
258 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); in nvkm_fifo_chan_map() local
259 *addr = chan->addr; in nvkm_fifo_chan_map()
260 *size = chan->size; in nvkm_fifo_chan_map()
267 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); in nvkm_fifo_chan_rd32() local
268 if (unlikely(!chan->user)) { in nvkm_fifo_chan_rd32()
269 chan->user = ioremap(chan->addr, chan->size); in nvkm_fifo_chan_rd32()
270 if (!chan->user) in nvkm_fifo_chan_rd32()
273 if (unlikely(addr + 4 > chan->size)) in nvkm_fifo_chan_rd32()
275 *data = ioread32_native(chan->user + addr); in nvkm_fifo_chan_rd32()
282 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); in nvkm_fifo_chan_wr32() local
283 if (unlikely(!chan->user)) { in nvkm_fifo_chan_wr32()
284 chan->user = ioremap(chan->addr, chan->size); in nvkm_fifo_chan_wr32()
285 if (!chan->user) in nvkm_fifo_chan_wr32()
288 if (unlikely(addr + 4 > chan->size)) in nvkm_fifo_chan_wr32()
290 iowrite32_native(data, chan->user + addr); in nvkm_fifo_chan_wr32()
297 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); in nvkm_fifo_chan_fini() local
298 chan->func->fini(chan); in nvkm_fifo_chan_fini()
305 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); in nvkm_fifo_chan_init() local
306 chan->func->init(chan); in nvkm_fifo_chan_init()
313 struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); in nvkm_fifo_chan_dtor() local
314 struct nvkm_fifo *fifo = chan->fifo; in nvkm_fifo_chan_dtor()
315 void *data = chan->func->dtor(chan); in nvkm_fifo_chan_dtor()
319 if (!list_empty(&chan->head)) { in nvkm_fifo_chan_dtor()
320 __clear_bit(chan->chid, fifo->mask); in nvkm_fifo_chan_dtor()
321 list_del(&chan->head); in nvkm_fifo_chan_dtor()
325 if (chan->user) in nvkm_fifo_chan_dtor()
326 iounmap(chan->user); in nvkm_fifo_chan_dtor()
328 nvkm_vm_ref(NULL, &chan->vm, NULL); in nvkm_fifo_chan_dtor()
330 nvkm_gpuobj_del(&chan->push); in nvkm_fifo_chan_dtor()
331 nvkm_gpuobj_del(&chan->inst); in nvkm_fifo_chan_dtor()
352 struct nvkm_fifo_chan *chan) in nvkm_fifo_chan_ctor() argument
361 nvkm_object_ctor(&nvkm_fifo_chan_func, oclass, &chan->object); in nvkm_fifo_chan_ctor()
362 chan->func = func; in nvkm_fifo_chan_ctor()
363 chan->fifo = fifo; in nvkm_fifo_chan_ctor()
364 chan->engines = engines; in nvkm_fifo_chan_ctor()
365 INIT_LIST_HEAD(&chan->head); in nvkm_fifo_chan_ctor()
368 ret = nvkm_gpuobj_new(device, size, align, zero, NULL, &chan->inst); in nvkm_fifo_chan_ctor()
378 ret = nvkm_object_bind(&dmaobj->object, chan->inst, -16, in nvkm_fifo_chan_ctor()
379 &chan->push); in nvkm_fifo_chan_ctor()
387 ret = nvkm_vm_ref(client->vm, &chan->vm, NULL); in nvkm_fifo_chan_ctor()
399 chan->chid = find_first_zero_bit(fifo->mask, NVKM_FIFO_CHID_NR); in nvkm_fifo_chan_ctor()
400 if (chan->chid >= NVKM_FIFO_CHID_NR) { in nvkm_fifo_chan_ctor()
404 list_add(&chan->head, &fifo->chan); in nvkm_fifo_chan_ctor()
405 __set_bit(chan->chid, fifo->mask); in nvkm_fifo_chan_ctor()
409 chan->addr = device->func->resource_addr(device, bar) + in nvkm_fifo_chan_ctor()
410 base + user * chan->chid; in nvkm_fifo_chan_ctor()
411 chan->size = user; in nvkm_fifo_chan_ctor()