Lines Matching refs:dev_priv
36 bool vmw_supports_3d(struct vmw_private *dev_priv) in vmw_supports_3d() argument
39 const struct vmw_fifo_state *fifo = dev_priv->fifo; in vmw_supports_3d()
41 if (!(dev_priv->capabilities & SVGA_CAP_3D)) in vmw_supports_3d()
44 if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS) { in vmw_supports_3d()
47 if (!dev_priv->has_mob) in vmw_supports_3d()
50 result = vmw_devcap_get(dev_priv, SVGA3D_DEVCAP_3D); in vmw_supports_3d()
55 if (!(dev_priv->capabilities & SVGA_CAP_EXTENDED_FIFO)) in vmw_supports_3d()
58 BUG_ON(vmw_is_svga_v3(dev_priv)); in vmw_supports_3d()
60 fifo_min = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MIN); in vmw_supports_3d()
64 hwversion = vmw_fifo_mem_read(dev_priv, in vmw_supports_3d()
77 if (dev_priv->active_display_unit == vmw_du_legacy) in vmw_supports_3d()
83 bool vmw_fifo_have_pitchlock(struct vmw_private *dev_priv) in vmw_fifo_have_pitchlock() argument
87 if (!(dev_priv->capabilities & SVGA_CAP_EXTENDED_FIFO)) in vmw_fifo_have_pitchlock()
90 caps = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_CAPABILITIES); in vmw_fifo_have_pitchlock()
97 struct vmw_fifo_state *vmw_fifo_create(struct vmw_private *dev_priv) in vmw_fifo_create() argument
103 if (!dev_priv->fifo_mem) in vmw_fifo_create()
123 if (dev_priv->capabilities & SVGA_CAP_EXTENDED_FIFO) in vmw_fifo_create()
124 min = vmw_read(dev_priv, SVGA_REG_MEM_REGS); in vmw_fifo_create()
130 vmw_fifo_mem_write(dev_priv, SVGA_FIFO_MIN, min); in vmw_fifo_create()
131 vmw_fifo_mem_write(dev_priv, SVGA_FIFO_MAX, dev_priv->fifo_mem_size); in vmw_fifo_create()
133 vmw_fifo_mem_write(dev_priv, SVGA_FIFO_NEXT_CMD, min); in vmw_fifo_create()
134 vmw_fifo_mem_write(dev_priv, SVGA_FIFO_STOP, min); in vmw_fifo_create()
135 vmw_fifo_mem_write(dev_priv, SVGA_FIFO_BUSY, 0); in vmw_fifo_create()
138 vmw_write(dev_priv, SVGA_REG_CONFIG_DONE, 1); in vmw_fifo_create()
140 max = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MAX); in vmw_fifo_create()
141 min = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MIN); in vmw_fifo_create()
142 fifo->capabilities = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_CAPABILITIES); in vmw_fifo_create()
144 drm_info(&dev_priv->drm, in vmw_fifo_create()
151 drm_warn(&dev_priv->drm, in vmw_fifo_create()
159 void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason) in vmw_fifo_ping_host() argument
161 u32 *fifo_mem = dev_priv->fifo_mem; in vmw_fifo_ping_host()
163 vmw_write(dev_priv, SVGA_REG_SYNC, reason); in vmw_fifo_ping_host()
167 void vmw_fifo_destroy(struct vmw_private *dev_priv) in vmw_fifo_destroy() argument
169 struct vmw_fifo_state *fifo = dev_priv->fifo; in vmw_fifo_destroy()
184 dev_priv->fifo = NULL; in vmw_fifo_destroy()
187 static bool vmw_fifo_is_full(struct vmw_private *dev_priv, uint32_t bytes) in vmw_fifo_is_full() argument
189 uint32_t max = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MAX); in vmw_fifo_is_full()
190 uint32_t next_cmd = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_NEXT_CMD); in vmw_fifo_is_full()
191 uint32_t min = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MIN); in vmw_fifo_is_full()
192 uint32_t stop = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_STOP); in vmw_fifo_is_full()
197 static int vmw_fifo_wait_noirq(struct vmw_private *dev_priv, in vmw_fifo_wait_noirq() argument
208 prepare_to_wait(&dev_priv->fifo_queue, &__wait, in vmw_fifo_wait_noirq()
211 if (!vmw_fifo_is_full(dev_priv, bytes)) in vmw_fifo_wait_noirq()
224 finish_wait(&dev_priv->fifo_queue, &__wait); in vmw_fifo_wait_noirq()
225 wake_up_all(&dev_priv->fifo_queue); in vmw_fifo_wait_noirq()
230 static int vmw_fifo_wait(struct vmw_private *dev_priv, in vmw_fifo_wait() argument
236 if (likely(!vmw_fifo_is_full(dev_priv, bytes))) in vmw_fifo_wait()
239 vmw_fifo_ping_host(dev_priv, SVGA_SYNC_FIFOFULL); in vmw_fifo_wait()
240 if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) in vmw_fifo_wait()
241 return vmw_fifo_wait_noirq(dev_priv, bytes, in vmw_fifo_wait()
244 vmw_generic_waiter_add(dev_priv, SVGA_IRQFLAG_FIFO_PROGRESS, in vmw_fifo_wait()
245 &dev_priv->fifo_queue_waiters); in vmw_fifo_wait()
249 (dev_priv->fifo_queue, in vmw_fifo_wait()
250 !vmw_fifo_is_full(dev_priv, bytes), timeout); in vmw_fifo_wait()
253 (dev_priv->fifo_queue, in vmw_fifo_wait()
254 !vmw_fifo_is_full(dev_priv, bytes), timeout); in vmw_fifo_wait()
261 vmw_generic_waiter_remove(dev_priv, SVGA_IRQFLAG_FIFO_PROGRESS, in vmw_fifo_wait()
262 &dev_priv->fifo_queue_waiters); in vmw_fifo_wait()
277 static void *vmw_local_fifo_reserve(struct vmw_private *dev_priv, in vmw_local_fifo_reserve() argument
280 struct vmw_fifo_state *fifo_state = dev_priv->fifo; in vmw_local_fifo_reserve()
281 u32 *fifo_mem = dev_priv->fifo_mem; in vmw_local_fifo_reserve()
289 max = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MAX); in vmw_local_fifo_reserve()
290 min = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MIN); in vmw_local_fifo_reserve()
291 next_cmd = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_NEXT_CMD); in vmw_local_fifo_reserve()
302 uint32_t stop = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_STOP); in vmw_local_fifo_reserve()
311 else if (vmw_fifo_is_full(dev_priv, bytes)) { in vmw_local_fifo_reserve()
312 ret = vmw_fifo_wait(dev_priv, bytes, in vmw_local_fifo_reserve()
324 ret = vmw_fifo_wait(dev_priv, bytes, in vmw_local_fifo_reserve()
336 vmw_fifo_mem_write(dev_priv, in vmw_local_fifo_reserve()
365 void *vmw_cmd_ctx_reserve(struct vmw_private *dev_priv, uint32_t bytes, in vmw_cmd_ctx_reserve() argument
370 if (dev_priv->cman) in vmw_cmd_ctx_reserve()
371 ret = vmw_cmdbuf_reserve(dev_priv->cman, bytes, in vmw_cmd_ctx_reserve()
374 ret = vmw_local_fifo_reserve(dev_priv, bytes); in vmw_cmd_ctx_reserve()
427 static void vmw_local_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes) in vmw_local_fifo_commit() argument
429 struct vmw_fifo_state *fifo_state = dev_priv->fifo; in vmw_local_fifo_commit()
430 uint32_t next_cmd = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_NEXT_CMD); in vmw_local_fifo_commit()
431 uint32_t max = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MAX); in vmw_local_fifo_commit()
432 uint32_t min = vmw_fifo_mem_read(dev_priv, SVGA_FIFO_MIN); in vmw_local_fifo_commit()
442 vmw_fifo_res_copy(fifo_state, dev_priv, in vmw_local_fifo_commit()
445 vmw_fifo_slow_copy(fifo_state, dev_priv, in vmw_local_fifo_commit()
461 vmw_fifo_mem_write(dev_priv, SVGA_FIFO_NEXT_CMD, next_cmd); in vmw_local_fifo_commit()
465 vmw_fifo_mem_write(dev_priv, SVGA_FIFO_RESERVED, 0); in vmw_local_fifo_commit()
468 vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); in vmw_local_fifo_commit()
472 void vmw_cmd_commit(struct vmw_private *dev_priv, uint32_t bytes) in vmw_cmd_commit() argument
474 if (dev_priv->cman) in vmw_cmd_commit()
475 vmw_cmdbuf_commit(dev_priv->cman, bytes, NULL, false); in vmw_cmd_commit()
477 vmw_local_fifo_commit(dev_priv, bytes); in vmw_cmd_commit()
487 void vmw_cmd_commit_flush(struct vmw_private *dev_priv, uint32_t bytes) in vmw_cmd_commit_flush() argument
489 if (dev_priv->cman) in vmw_cmd_commit_flush()
490 vmw_cmdbuf_commit(dev_priv->cman, bytes, NULL, true); in vmw_cmd_commit_flush()
492 vmw_local_fifo_commit(dev_priv, bytes); in vmw_cmd_commit_flush()
502 int vmw_cmd_flush(struct vmw_private *dev_priv, bool interruptible) in vmw_cmd_flush() argument
506 if (dev_priv->cman) in vmw_cmd_flush()
507 return vmw_cmdbuf_cur_flush(dev_priv->cman, interruptible); in vmw_cmd_flush()
512 int vmw_cmd_send_fence(struct vmw_private *dev_priv, uint32_t *seqno) in vmw_cmd_send_fence() argument
519 fm = VMW_CMD_RESERVE(dev_priv, bytes); in vmw_cmd_send_fence()
521 *seqno = atomic_read(&dev_priv->marker_seq); in vmw_cmd_send_fence()
523 (void)vmw_fallback_wait(dev_priv, false, true, *seqno, in vmw_cmd_send_fence()
529 *seqno = atomic_add_return(1, &dev_priv->marker_seq); in vmw_cmd_send_fence()
532 if (!vmw_has_fences(dev_priv)) { in vmw_cmd_send_fence()
539 vmw_cmd_commit(dev_priv, 0); in vmw_cmd_send_fence()
546 vmw_cmd_commit_flush(dev_priv, bytes); in vmw_cmd_send_fence()
547 vmw_update_seqno(dev_priv); in vmw_cmd_send_fence()
562 static int vmw_cmd_emit_dummy_legacy_query(struct vmw_private *dev_priv, in vmw_cmd_emit_dummy_legacy_query() argument
571 struct ttm_buffer_object *bo = &dev_priv->dummy_query_bo->tbo; in vmw_cmd_emit_dummy_legacy_query()
577 cmd = VMW_CMD_RESERVE(dev_priv, sizeof(*cmd)); in vmw_cmd_emit_dummy_legacy_query()
594 vmw_cmd_commit(dev_priv, sizeof(*cmd)); in vmw_cmd_emit_dummy_legacy_query()
608 static int vmw_cmd_emit_dummy_gb_query(struct vmw_private *dev_priv, in vmw_cmd_emit_dummy_gb_query() argument
617 struct ttm_buffer_object *bo = &dev_priv->dummy_query_bo->tbo; in vmw_cmd_emit_dummy_gb_query()
623 cmd = VMW_CMD_RESERVE(dev_priv, sizeof(*cmd)); in vmw_cmd_emit_dummy_gb_query()
635 vmw_cmd_commit(dev_priv, sizeof(*cmd)); in vmw_cmd_emit_dummy_gb_query()
659 int vmw_cmd_emit_dummy_query(struct vmw_private *dev_priv, in vmw_cmd_emit_dummy_query() argument
662 if (dev_priv->has_mob) in vmw_cmd_emit_dummy_query()
663 return vmw_cmd_emit_dummy_gb_query(dev_priv, cid); in vmw_cmd_emit_dummy_query()
665 return vmw_cmd_emit_dummy_legacy_query(dev_priv, cid); in vmw_cmd_emit_dummy_query()