Lines Matching full:dmac

120 nv50_dmac_destroy(struct nv50_dmac *dmac)  in nv50_dmac_destroy()  argument
122 nvif_object_dtor(&dmac->vram); in nv50_dmac_destroy()
123 nvif_object_dtor(&dmac->sync); in nv50_dmac_destroy()
125 nv50_chan_destroy(&dmac->base); in nv50_dmac_destroy()
127 nvif_mem_dtor(&dmac->_push.mem); in nv50_dmac_destroy()
133 struct nv50_dmac *dmac = container_of(push, typeof(*dmac), _push); in nv50_dmac_kick() local
135 dmac->cur = push->cur - (u32 *)dmac->_push.mem.object.map.ptr; in nv50_dmac_kick()
136 if (dmac->put != dmac->cur) { in nv50_dmac_kick()
140 if (dmac->push->mem.type & NVIF_MEM_VRAM) { in nv50_dmac_kick()
141 struct nvif_device *device = dmac->base.device; in nv50_dmac_kick()
149 NVIF_WV32(&dmac->base.user, NV507C, PUT, PTR, dmac->cur); in nv50_dmac_kick()
150 dmac->put = dmac->cur; in nv50_dmac_kick()
157 nv50_dmac_free(struct nv50_dmac *dmac) in nv50_dmac_free() argument
159 u32 get = NVIF_RV32(&dmac->base.user, NV507C, GET, PTR); in nv50_dmac_free()
160 if (get > dmac->cur) /* NVIDIA stay 5 away from GET, do the same. */ in nv50_dmac_free()
161 return get - dmac->cur - 5; in nv50_dmac_free()
162 return dmac->max - dmac->cur; in nv50_dmac_free()
166 nv50_dmac_wind(struct nv50_dmac *dmac) in nv50_dmac_wind() argument
171 u32 get = NVIF_RV32(&dmac->base.user, NV507C, GET, PTR); in nv50_dmac_wind()
174 if (dmac->put == 0) in nv50_dmac_wind()
175 nv50_dmac_kick(dmac->push); in nv50_dmac_wind()
177 if (nvif_msec(dmac->base.device, 2000, in nv50_dmac_wind()
178 if (NVIF_TV32(&dmac->base.user, NV507C, GET, PTR, >, 0)) in nv50_dmac_wind()
184 PUSH_RSVD(dmac->push, PUSH_JUMP(dmac->push, 0)); in nv50_dmac_wind()
185 dmac->cur = 0; in nv50_dmac_wind()
192 struct nv50_dmac *dmac = container_of(push, typeof(*dmac), _push); in nv50_dmac_wait() local
195 if (WARN_ON(size > dmac->max)) in nv50_dmac_wait()
198 dmac->cur = push->cur - (u32 *)dmac->_push.mem.object.map.ptr; in nv50_dmac_wait()
199 if (dmac->cur + size >= dmac->max) { in nv50_dmac_wait()
200 int ret = nv50_dmac_wind(dmac); in nv50_dmac_wait()
204 push->cur = dmac->_push.mem.object.map.ptr; in nv50_dmac_wait()
205 push->cur = push->cur + dmac->cur; in nv50_dmac_wait()
209 if (nvif_msec(dmac->base.device, 2000, in nv50_dmac_wait()
210 if ((free = nv50_dmac_free(dmac)) >= size) in nv50_dmac_wait()
217 push->bgn = dmac->_push.mem.object.map.ptr; in nv50_dmac_wait()
218 push->bgn = push->bgn + dmac->cur; in nv50_dmac_wait()
231 struct nv50_dmac *dmac) in nv50_dmac_create() argument
238 mutex_init(&dmac->lock); in nv50_dmac_create()
254 &dmac->_push.mem); in nv50_dmac_create()
258 dmac->ptr = dmac->_push.mem.object.map.ptr; in nv50_dmac_create()
259 dmac->_push.wait = nv50_dmac_wait; in nv50_dmac_create()
260 dmac->_push.kick = nv50_dmac_kick; in nv50_dmac_create()
261 dmac->push = &dmac->_push; in nv50_dmac_create()
262 dmac->push->bgn = dmac->_push.mem.object.map.ptr; in nv50_dmac_create()
263 dmac->push->cur = dmac->push->bgn; in nv50_dmac_create()
264 dmac->push->end = dmac->push->bgn; in nv50_dmac_create()
265 dmac->max = 0x1000/4 - 1; in nv50_dmac_create()
271 dmac->max -= 12; in nv50_dmac_create()
273 args->pushbuf = nvif_handle(&dmac->_push.mem.object); in nv50_dmac_create()
276 &dmac->base); in nv50_dmac_create()
283 ret = nvif_object_ctor(&dmac->base.user, "kmsSyncCtxDma", NV50_DISP_HANDLE_SYNCBUF, in nv50_dmac_create()
291 &dmac->sync); in nv50_dmac_create()
295 ret = nvif_object_ctor(&dmac->base.user, "kmsVramCtxDma", NV50_DISP_HANDLE_VRAM, in nv50_dmac_create()
303 &dmac->vram); in nv50_dmac_create()