Lines Matching refs:dev_priv

47 	struct vmw_private *dev_priv = vmw_priv(dev);  in vmw_thread_fn()  local
51 dev_priv->irqthread_pending)) { in vmw_thread_fn()
52 vmw_fences_update(dev_priv->fman); in vmw_thread_fn()
53 wake_up_all(&dev_priv->fence_queue); in vmw_thread_fn()
58 dev_priv->irqthread_pending)) { in vmw_thread_fn()
59 vmw_cmdbuf_irqthread(dev_priv->cman); in vmw_thread_fn()
80 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_irq_handler() local
84 status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_handler()
85 masked_status = status & READ_ONCE(dev_priv->irq_mask); in vmw_irq_handler()
88 outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_handler()
94 wake_up_all(&dev_priv->fifo_queue); in vmw_irq_handler()
98 !test_and_set_bit(VMW_IRQTHREAD_FENCE, dev_priv->irqthread_pending)) in vmw_irq_handler()
104 dev_priv->irqthread_pending)) in vmw_irq_handler()
110 static bool vmw_fifo_idle(struct vmw_private *dev_priv, uint32_t seqno) in vmw_fifo_idle() argument
113 return (vmw_read(dev_priv, SVGA_REG_BUSY) == 0); in vmw_fifo_idle()
116 void vmw_update_seqno(struct vmw_private *dev_priv, in vmw_update_seqno() argument
119 u32 *fifo_mem = dev_priv->mmio_virt; in vmw_update_seqno()
122 if (dev_priv->last_read_seqno != seqno) { in vmw_update_seqno()
123 dev_priv->last_read_seqno = seqno; in vmw_update_seqno()
125 vmw_fences_update(dev_priv->fman); in vmw_update_seqno()
129 bool vmw_seqno_passed(struct vmw_private *dev_priv, in vmw_seqno_passed() argument
135 if (likely(dev_priv->last_read_seqno - seqno < VMW_FENCE_WRAP)) in vmw_seqno_passed()
138 fifo_state = &dev_priv->fifo; in vmw_seqno_passed()
139 vmw_update_seqno(dev_priv, fifo_state); in vmw_seqno_passed()
140 if (likely(dev_priv->last_read_seqno - seqno < VMW_FENCE_WRAP)) in vmw_seqno_passed()
144 vmw_fifo_idle(dev_priv, seqno)) in vmw_seqno_passed()
152 ret = ((atomic_read(&dev_priv->marker_seq) - seqno) in vmw_seqno_passed()
158 int vmw_fallback_wait(struct vmw_private *dev_priv, in vmw_fallback_wait() argument
165 struct vmw_fifo_state *fifo_state = &dev_priv->fifo; in vmw_fallback_wait()
183 if (dev_priv->cman) { in vmw_fallback_wait()
184 ret = vmw_cmdbuf_idle(dev_priv->cman, interruptible, in vmw_fallback_wait()
191 signal_seq = atomic_read(&dev_priv->marker_seq); in vmw_fallback_wait()
195 prepare_to_wait(&dev_priv->fence_queue, &__wait, in vmw_fallback_wait()
198 if (wait_condition(dev_priv, seqno)) in vmw_fallback_wait()
223 finish_wait(&dev_priv->fence_queue, &__wait); in vmw_fallback_wait()
225 u32 *fifo_mem = dev_priv->mmio_virt; in vmw_fallback_wait()
229 wake_up_all(&dev_priv->fence_queue); in vmw_fallback_wait()
237 void vmw_generic_waiter_add(struct vmw_private *dev_priv, in vmw_generic_waiter_add() argument
240 spin_lock_bh(&dev_priv->waiter_lock); in vmw_generic_waiter_add()
242 outl(flag, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_generic_waiter_add()
243 dev_priv->irq_mask |= flag; in vmw_generic_waiter_add()
244 vmw_write(dev_priv, SVGA_REG_IRQMASK, dev_priv->irq_mask); in vmw_generic_waiter_add()
246 spin_unlock_bh(&dev_priv->waiter_lock); in vmw_generic_waiter_add()
249 void vmw_generic_waiter_remove(struct vmw_private *dev_priv, in vmw_generic_waiter_remove() argument
252 spin_lock_bh(&dev_priv->waiter_lock); in vmw_generic_waiter_remove()
254 dev_priv->irq_mask &= ~flag; in vmw_generic_waiter_remove()
255 vmw_write(dev_priv, SVGA_REG_IRQMASK, dev_priv->irq_mask); in vmw_generic_waiter_remove()
257 spin_unlock_bh(&dev_priv->waiter_lock); in vmw_generic_waiter_remove()
260 void vmw_seqno_waiter_add(struct vmw_private *dev_priv) in vmw_seqno_waiter_add() argument
262 vmw_generic_waiter_add(dev_priv, SVGA_IRQFLAG_ANY_FENCE, in vmw_seqno_waiter_add()
263 &dev_priv->fence_queue_waiters); in vmw_seqno_waiter_add()
266 void vmw_seqno_waiter_remove(struct vmw_private *dev_priv) in vmw_seqno_waiter_remove() argument
268 vmw_generic_waiter_remove(dev_priv, SVGA_IRQFLAG_ANY_FENCE, in vmw_seqno_waiter_remove()
269 &dev_priv->fence_queue_waiters); in vmw_seqno_waiter_remove()
272 void vmw_goal_waiter_add(struct vmw_private *dev_priv) in vmw_goal_waiter_add() argument
274 vmw_generic_waiter_add(dev_priv, SVGA_IRQFLAG_FENCE_GOAL, in vmw_goal_waiter_add()
275 &dev_priv->goal_queue_waiters); in vmw_goal_waiter_add()
278 void vmw_goal_waiter_remove(struct vmw_private *dev_priv) in vmw_goal_waiter_remove() argument
280 vmw_generic_waiter_remove(dev_priv, SVGA_IRQFLAG_FENCE_GOAL, in vmw_goal_waiter_remove()
281 &dev_priv->goal_queue_waiters); in vmw_goal_waiter_remove()
284 int vmw_wait_seqno(struct vmw_private *dev_priv, in vmw_wait_seqno() argument
289 struct vmw_fifo_state *fifo = &dev_priv->fifo; in vmw_wait_seqno()
291 if (likely(dev_priv->last_read_seqno - seqno < VMW_FENCE_WRAP)) in vmw_wait_seqno()
294 if (likely(vmw_seqno_passed(dev_priv, seqno))) in vmw_wait_seqno()
297 vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); in vmw_wait_seqno()
300 return vmw_fallback_wait(dev_priv, lazy, true, seqno, in vmw_wait_seqno()
303 if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) in vmw_wait_seqno()
304 return vmw_fallback_wait(dev_priv, lazy, false, seqno, in vmw_wait_seqno()
307 vmw_seqno_waiter_add(dev_priv); in vmw_wait_seqno()
311 (dev_priv->fence_queue, in vmw_wait_seqno()
312 vmw_seqno_passed(dev_priv, seqno), in vmw_wait_seqno()
316 (dev_priv->fence_queue, in vmw_wait_seqno()
317 vmw_seqno_passed(dev_priv, seqno), in vmw_wait_seqno()
320 vmw_seqno_waiter_remove(dev_priv); in vmw_wait_seqno()
332 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_irq_preinstall() local
335 status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_preinstall()
336 outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_preinstall()
341 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_irq_uninstall() local
344 if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) in vmw_irq_uninstall()
350 vmw_write(dev_priv, SVGA_REG_IRQMASK, 0); in vmw_irq_uninstall()
352 status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_uninstall()
353 outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_uninstall()