Lines Matching refs:dmac

118 nv50_dmac_destroy(struct nv50_dmac *dmac)
120 nvif_object_dtor(&dmac->vram);
121 nvif_object_dtor(&dmac->sync);
123 nv50_chan_destroy(&dmac->base);
125 nvif_mem_dtor(&dmac->_push.mem);
131 struct nv50_dmac *dmac = container_of(push, typeof(*dmac), _push);
133 dmac->cur = push->cur - (u32 *)dmac->_push.mem.object.map.ptr;
134 if (dmac->put != dmac->cur) {
138 if (dmac->push->mem.type & NVIF_MEM_VRAM) {
139 struct nvif_device *device = dmac->base.device;
147 NVIF_WV32(&dmac->base.user, NV507C, PUT, PTR, dmac->cur);
148 dmac->put = dmac->cur;
155 nv50_dmac_free(struct nv50_dmac *dmac)
157 u32 get = NVIF_RV32(&dmac->base.user, NV507C, GET, PTR);
158 if (get > dmac->cur) /* NVIDIA stay 5 away from GET, do the same. */
159 return get - dmac->cur - 5;
160 return dmac->max - dmac->cur;
164 nv50_dmac_wind(struct nv50_dmac *dmac)
169 u32 get = NVIF_RV32(&dmac->base.user, NV507C, GET, PTR);
172 if (dmac->put == 0)
173 nv50_dmac_kick(dmac->push);
175 if (nvif_msec(dmac->base.device, 2000,
176 if (NVIF_TV32(&dmac->base.user, NV507C, GET, PTR, >, 0))
182 PUSH_RSVD(dmac->push, PUSH_JUMP(dmac->push, 0));
183 dmac->cur = 0;
190 struct nv50_dmac *dmac = container_of(push, typeof(*dmac), _push);
193 if (WARN_ON(size > dmac->max))
196 dmac->cur = push->cur - (u32 *)dmac->_push.mem.object.map.ptr;
197 if (dmac->cur + size >= dmac->max) {
198 int ret = nv50_dmac_wind(dmac);
202 push->cur = dmac->_push.mem.object.map.ptr;
203 push->cur = push->cur + dmac->cur;
207 if (nvif_msec(dmac->base.device, 2000,
208 if ((free = nv50_dmac_free(dmac)) >= size)
215 push->bgn = dmac->_push.mem.object.map.ptr;
216 push->bgn = push->bgn + dmac->cur;
225 struct nv50_dmac *dmac)
232 mutex_init(&dmac->lock);
247 &dmac->_push.mem);
251 dmac->ptr = dmac->_push.mem.object.map.ptr;
252 dmac->_push.wait = nv50_dmac_wait;
253 dmac->_push.kick = nv50_dmac_kick;
254 dmac->push = &dmac->_push;
255 dmac->push->bgn = dmac->_push.mem.object.map.ptr;
256 dmac->push->cur = dmac->push->bgn;
257 dmac->push->end = dmac->push->bgn;
258 dmac->max = 0x1000/4 - 1;
264 dmac->max -= 12;
266 args->pushbuf = nvif_handle(&dmac->_push.mem.object);
269 &dmac->base);
276 ret = nvif_object_ctor(&dmac->base.user, "kmsSyncCtxDma", NV50_DISP_HANDLE_SYNCBUF,
284 &dmac->sync);
288 ret = nvif_object_ctor(&dmac->base.user, "kmsVramCtxDma", NV50_DISP_HANDLE_VRAM,
296 &dmac->vram);