Lines Matching refs:dev_priv
57 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_thread_fn() local
61 dev_priv->irqthread_pending)) { in vmw_thread_fn()
62 vmw_fences_update(dev_priv->fman); in vmw_thread_fn()
63 wake_up_all(&dev_priv->fence_queue); in vmw_thread_fn()
68 dev_priv->irqthread_pending)) { in vmw_thread_fn()
69 vmw_cmdbuf_irqthread(dev_priv->cman); in vmw_thread_fn()
90 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_irq_handler() local
94 status = vmw_irq_status_read(dev_priv); in vmw_irq_handler()
95 masked_status = status & READ_ONCE(dev_priv->irq_mask); in vmw_irq_handler()
98 vmw_irq_status_write(dev_priv, status); in vmw_irq_handler()
104 wake_up_all(&dev_priv->fifo_queue); in vmw_irq_handler()
107 vmw_irqflag_fence_goal(dev_priv))) && in vmw_irq_handler()
108 !test_and_set_bit(VMW_IRQTHREAD_FENCE, dev_priv->irqthread_pending)) in vmw_irq_handler()
114 dev_priv->irqthread_pending)) in vmw_irq_handler()
120 static bool vmw_fifo_idle(struct vmw_private *dev_priv, uint32_t seqno) in vmw_fifo_idle() argument
123 return (vmw_read(dev_priv, SVGA_REG_BUSY) == 0); in vmw_fifo_idle()
126 void vmw_update_seqno(struct vmw_private *dev_priv) in vmw_update_seqno() argument
128 uint32_t seqno = vmw_fence_read(dev_priv); in vmw_update_seqno()
130 if (dev_priv->last_read_seqno != seqno) { in vmw_update_seqno()
131 dev_priv->last_read_seqno = seqno; in vmw_update_seqno()
132 vmw_fences_update(dev_priv->fman); in vmw_update_seqno()
136 bool vmw_seqno_passed(struct vmw_private *dev_priv, in vmw_seqno_passed() argument
141 if (likely(dev_priv->last_read_seqno - seqno < VMW_FENCE_WRAP)) in vmw_seqno_passed()
144 vmw_update_seqno(dev_priv); in vmw_seqno_passed()
145 if (likely(dev_priv->last_read_seqno - seqno < VMW_FENCE_WRAP)) in vmw_seqno_passed()
148 if (!vmw_has_fences(dev_priv) && vmw_fifo_idle(dev_priv, seqno)) in vmw_seqno_passed()
156 ret = ((atomic_read(&dev_priv->marker_seq) - seqno) in vmw_seqno_passed()
162 int vmw_fallback_wait(struct vmw_private *dev_priv, in vmw_fallback_wait() argument
169 struct vmw_fifo_state *fifo_state = dev_priv->fifo; in vmw_fallback_wait()
187 if (dev_priv->cman) { in vmw_fallback_wait()
188 ret = vmw_cmdbuf_idle(dev_priv->cman, interruptible, in vmw_fallback_wait()
198 signal_seq = atomic_read(&dev_priv->marker_seq); in vmw_fallback_wait()
202 prepare_to_wait(&dev_priv->fence_queue, &__wait, in vmw_fallback_wait()
205 if (wait_condition(dev_priv, seqno)) in vmw_fallback_wait()
230 finish_wait(&dev_priv->fence_queue, &__wait); in vmw_fallback_wait()
232 vmw_fence_write(dev_priv, signal_seq); in vmw_fallback_wait()
234 wake_up_all(&dev_priv->fence_queue); in vmw_fallback_wait()
242 void vmw_generic_waiter_add(struct vmw_private *dev_priv, in vmw_generic_waiter_add() argument
245 spin_lock_bh(&dev_priv->waiter_lock); in vmw_generic_waiter_add()
247 vmw_irq_status_write(dev_priv, flag); in vmw_generic_waiter_add()
248 dev_priv->irq_mask |= flag; in vmw_generic_waiter_add()
249 vmw_write(dev_priv, SVGA_REG_IRQMASK, dev_priv->irq_mask); in vmw_generic_waiter_add()
251 spin_unlock_bh(&dev_priv->waiter_lock); in vmw_generic_waiter_add()
254 void vmw_generic_waiter_remove(struct vmw_private *dev_priv, in vmw_generic_waiter_remove() argument
257 spin_lock_bh(&dev_priv->waiter_lock); in vmw_generic_waiter_remove()
259 dev_priv->irq_mask &= ~flag; in vmw_generic_waiter_remove()
260 vmw_write(dev_priv, SVGA_REG_IRQMASK, dev_priv->irq_mask); in vmw_generic_waiter_remove()
262 spin_unlock_bh(&dev_priv->waiter_lock); in vmw_generic_waiter_remove()
265 void vmw_seqno_waiter_add(struct vmw_private *dev_priv) in vmw_seqno_waiter_add() argument
267 vmw_generic_waiter_add(dev_priv, SVGA_IRQFLAG_ANY_FENCE, in vmw_seqno_waiter_add()
268 &dev_priv->fence_queue_waiters); in vmw_seqno_waiter_add()
271 void vmw_seqno_waiter_remove(struct vmw_private *dev_priv) in vmw_seqno_waiter_remove() argument
273 vmw_generic_waiter_remove(dev_priv, SVGA_IRQFLAG_ANY_FENCE, in vmw_seqno_waiter_remove()
274 &dev_priv->fence_queue_waiters); in vmw_seqno_waiter_remove()
277 void vmw_goal_waiter_add(struct vmw_private *dev_priv) in vmw_goal_waiter_add() argument
279 vmw_generic_waiter_add(dev_priv, vmw_irqflag_fence_goal(dev_priv), in vmw_goal_waiter_add()
280 &dev_priv->goal_queue_waiters); in vmw_goal_waiter_add()
283 void vmw_goal_waiter_remove(struct vmw_private *dev_priv) in vmw_goal_waiter_remove() argument
285 vmw_generic_waiter_remove(dev_priv, vmw_irqflag_fence_goal(dev_priv), in vmw_goal_waiter_remove()
286 &dev_priv->goal_queue_waiters); in vmw_goal_waiter_remove()
291 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_irq_preinstall() local
294 status = vmw_irq_status_read(dev_priv); in vmw_irq_preinstall()
295 vmw_irq_status_write(dev_priv, status); in vmw_irq_preinstall()
300 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_irq_uninstall() local
305 if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) in vmw_irq_uninstall()
308 vmw_write(dev_priv, SVGA_REG_IRQMASK, 0); in vmw_irq_uninstall()
310 status = vmw_irq_status_read(dev_priv); in vmw_irq_uninstall()
311 vmw_irq_status_write(dev_priv, status); in vmw_irq_uninstall()
313 for (i = 0; i < dev_priv->num_irq_vectors; ++i) in vmw_irq_uninstall()
314 free_irq(dev_priv->irqs[i], dev); in vmw_irq_uninstall()
317 dev_priv->num_irq_vectors = 0; in vmw_irq_uninstall()
326 int vmw_irq_install(struct vmw_private *dev_priv) in vmw_irq_install() argument
328 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in vmw_irq_install()
329 struct drm_device *dev = &dev_priv->drm; in vmw_irq_install()
341 drm_err(&dev_priv->drm, in vmw_irq_install()
352 drm_err(&dev_priv->drm, in vmw_irq_install()
356 dev_priv->irqs[i] = ret; in vmw_irq_install()
358 ret = request_threaded_irq(dev_priv->irqs[i], vmw_irq_handler, vmw_thread_fn, in vmw_irq_install()
361 drm_err(&dev_priv->drm, in vmw_irq_install()
363 dev_priv->irqs[i], ret); in vmw_irq_install()
369 dev_priv->num_irq_vectors = i; in vmw_irq_install()