Lines Matching refs:dev_priv

36 	struct vmw_private *dev_priv = vmw_priv(dev);  in vmw_irq_handler()  local
39 spin_lock(&dev_priv->irq_lock); in vmw_irq_handler()
40 status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_handler()
41 masked_status = status & dev_priv->irq_mask; in vmw_irq_handler()
42 spin_unlock(&dev_priv->irq_lock); in vmw_irq_handler()
45 outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_handler()
52 vmw_fences_update(dev_priv->fman); in vmw_irq_handler()
53 wake_up_all(&dev_priv->fence_queue); in vmw_irq_handler()
57 wake_up_all(&dev_priv->fifo_queue); in vmw_irq_handler()
63 static bool vmw_fifo_idle(struct vmw_private *dev_priv, uint32_t seqno) in vmw_fifo_idle() argument
66 return (vmw_read(dev_priv, SVGA_REG_BUSY) == 0); in vmw_fifo_idle()
69 void vmw_update_seqno(struct vmw_private *dev_priv, in vmw_update_seqno() argument
72 __le32 __iomem *fifo_mem = dev_priv->mmio_virt; in vmw_update_seqno()
75 if (dev_priv->last_read_seqno != seqno) { in vmw_update_seqno()
76 dev_priv->last_read_seqno = seqno; in vmw_update_seqno()
78 vmw_fences_update(dev_priv->fman); in vmw_update_seqno()
82 bool vmw_seqno_passed(struct vmw_private *dev_priv, in vmw_seqno_passed() argument
88 if (likely(dev_priv->last_read_seqno - seqno < VMW_FENCE_WRAP)) in vmw_seqno_passed()
91 fifo_state = &dev_priv->fifo; in vmw_seqno_passed()
92 vmw_update_seqno(dev_priv, fifo_state); in vmw_seqno_passed()
93 if (likely(dev_priv->last_read_seqno - seqno < VMW_FENCE_WRAP)) in vmw_seqno_passed()
97 vmw_fifo_idle(dev_priv, seqno)) in vmw_seqno_passed()
105 ret = ((atomic_read(&dev_priv->marker_seq) - seqno) in vmw_seqno_passed()
111 int vmw_fallback_wait(struct vmw_private *dev_priv, in vmw_fallback_wait() argument
118 struct vmw_fifo_state *fifo_state = &dev_priv->fifo; in vmw_fallback_wait()
136 signal_seq = atomic_read(&dev_priv->marker_seq); in vmw_fallback_wait()
140 prepare_to_wait(&dev_priv->fence_queue, &__wait, in vmw_fallback_wait()
143 if (wait_condition(dev_priv, seqno)) in vmw_fallback_wait()
168 finish_wait(&dev_priv->fence_queue, &__wait); in vmw_fallback_wait()
170 __le32 __iomem *fifo_mem = dev_priv->mmio_virt; in vmw_fallback_wait()
173 wake_up_all(&dev_priv->fence_queue); in vmw_fallback_wait()
180 void vmw_seqno_waiter_add(struct vmw_private *dev_priv) in vmw_seqno_waiter_add() argument
182 spin_lock(&dev_priv->waiter_lock); in vmw_seqno_waiter_add()
183 if (dev_priv->fence_queue_waiters++ == 0) { in vmw_seqno_waiter_add()
186 spin_lock_irqsave(&dev_priv->irq_lock, irq_flags); in vmw_seqno_waiter_add()
188 dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_seqno_waiter_add()
189 dev_priv->irq_mask |= SVGA_IRQFLAG_ANY_FENCE; in vmw_seqno_waiter_add()
190 vmw_write(dev_priv, SVGA_REG_IRQMASK, dev_priv->irq_mask); in vmw_seqno_waiter_add()
191 spin_unlock_irqrestore(&dev_priv->irq_lock, irq_flags); in vmw_seqno_waiter_add()
193 spin_unlock(&dev_priv->waiter_lock); in vmw_seqno_waiter_add()
196 void vmw_seqno_waiter_remove(struct vmw_private *dev_priv) in vmw_seqno_waiter_remove() argument
198 spin_lock(&dev_priv->waiter_lock); in vmw_seqno_waiter_remove()
199 if (--dev_priv->fence_queue_waiters == 0) { in vmw_seqno_waiter_remove()
202 spin_lock_irqsave(&dev_priv->irq_lock, irq_flags); in vmw_seqno_waiter_remove()
203 dev_priv->irq_mask &= ~SVGA_IRQFLAG_ANY_FENCE; in vmw_seqno_waiter_remove()
204 vmw_write(dev_priv, SVGA_REG_IRQMASK, dev_priv->irq_mask); in vmw_seqno_waiter_remove()
205 spin_unlock_irqrestore(&dev_priv->irq_lock, irq_flags); in vmw_seqno_waiter_remove()
207 spin_unlock(&dev_priv->waiter_lock); in vmw_seqno_waiter_remove()
211 void vmw_goal_waiter_add(struct vmw_private *dev_priv) in vmw_goal_waiter_add() argument
213 spin_lock(&dev_priv->waiter_lock); in vmw_goal_waiter_add()
214 if (dev_priv->goal_queue_waiters++ == 0) { in vmw_goal_waiter_add()
217 spin_lock_irqsave(&dev_priv->irq_lock, irq_flags); in vmw_goal_waiter_add()
219 dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_goal_waiter_add()
220 dev_priv->irq_mask |= SVGA_IRQFLAG_FENCE_GOAL; in vmw_goal_waiter_add()
221 vmw_write(dev_priv, SVGA_REG_IRQMASK, dev_priv->irq_mask); in vmw_goal_waiter_add()
222 spin_unlock_irqrestore(&dev_priv->irq_lock, irq_flags); in vmw_goal_waiter_add()
224 spin_unlock(&dev_priv->waiter_lock); in vmw_goal_waiter_add()
227 void vmw_goal_waiter_remove(struct vmw_private *dev_priv) in vmw_goal_waiter_remove() argument
229 spin_lock(&dev_priv->waiter_lock); in vmw_goal_waiter_remove()
230 if (--dev_priv->goal_queue_waiters == 0) { in vmw_goal_waiter_remove()
233 spin_lock_irqsave(&dev_priv->irq_lock, irq_flags); in vmw_goal_waiter_remove()
234 dev_priv->irq_mask &= ~SVGA_IRQFLAG_FENCE_GOAL; in vmw_goal_waiter_remove()
235 vmw_write(dev_priv, SVGA_REG_IRQMASK, dev_priv->irq_mask); in vmw_goal_waiter_remove()
236 spin_unlock_irqrestore(&dev_priv->irq_lock, irq_flags); in vmw_goal_waiter_remove()
238 spin_unlock(&dev_priv->waiter_lock); in vmw_goal_waiter_remove()
241 int vmw_wait_seqno(struct vmw_private *dev_priv, in vmw_wait_seqno() argument
246 struct vmw_fifo_state *fifo = &dev_priv->fifo; in vmw_wait_seqno()
248 if (likely(dev_priv->last_read_seqno - seqno < VMW_FENCE_WRAP)) in vmw_wait_seqno()
251 if (likely(vmw_seqno_passed(dev_priv, seqno))) in vmw_wait_seqno()
254 vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); in vmw_wait_seqno()
257 return vmw_fallback_wait(dev_priv, lazy, true, seqno, in vmw_wait_seqno()
260 if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) in vmw_wait_seqno()
261 return vmw_fallback_wait(dev_priv, lazy, false, seqno, in vmw_wait_seqno()
264 vmw_seqno_waiter_add(dev_priv); in vmw_wait_seqno()
268 (dev_priv->fence_queue, in vmw_wait_seqno()
269 vmw_seqno_passed(dev_priv, seqno), in vmw_wait_seqno()
273 (dev_priv->fence_queue, in vmw_wait_seqno()
274 vmw_seqno_passed(dev_priv, seqno), in vmw_wait_seqno()
277 vmw_seqno_waiter_remove(dev_priv); in vmw_wait_seqno()
289 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_irq_preinstall() local
292 if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) in vmw_irq_preinstall()
295 spin_lock_init(&dev_priv->irq_lock); in vmw_irq_preinstall()
296 status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_preinstall()
297 outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_preinstall()
307 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_irq_uninstall() local
310 if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) in vmw_irq_uninstall()
313 vmw_write(dev_priv, SVGA_REG_IRQMASK, 0); in vmw_irq_uninstall()
315 status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_uninstall()
316 outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); in vmw_irq_uninstall()