Lines Matching defs:fman
117 struct vmw_fence_manager *fman = fman_from_fence(fence);
119 spin_lock(&fman->lock);
121 --fman->num_fence_objects;
122 spin_unlock(&fman->lock);
141 struct vmw_fence_manager *fman = fman_from_fence(fence);
142 struct vmw_private *dev_priv = fman->dev_priv;
168 static void __vmw_fences_update(struct vmw_fence_manager *fman);
175 struct vmw_fence_manager *fman = fman_from_fence(fence);
176 struct vmw_private *dev_priv = fman->dev_priv;
201 __vmw_fences_update(fman);
262 struct vmw_fence_manager *fman =
270 mutex_lock(&fman->goal_irq_mutex);
272 spin_lock(&fman->lock);
273 list_splice_init(&fman->cleanup_list, &list);
274 seqno_valid = fman->seqno_valid;
275 spin_unlock(&fman->lock);
277 if (!seqno_valid && fman->goal_irq_on) {
278 fman->goal_irq_on = false;
279 vmw_goal_waiter_remove(fman->dev_priv);
281 mutex_unlock(&fman->goal_irq_mutex);
289 * hence fman::lock not held.
302 struct vmw_fence_manager *fman = kzalloc(sizeof(*fman), GFP_KERNEL);
304 if (unlikely(!fman))
307 fman->dev_priv = dev_priv;
308 spin_lock_init(&fman->lock);
309 INIT_LIST_HEAD(&fman->fence_list);
310 INIT_LIST_HEAD(&fman->cleanup_list);
311 INIT_WORK(&fman->work, &vmw_fence_work_func);
312 fman->fifo_down = true;
313 fman->user_fence_size = ttm_round_pot(sizeof(struct vmw_user_fence)) +
315 fman->fence_size = ttm_round_pot(sizeof(struct vmw_fence_obj));
316 fman->event_fence_action_size =
318 mutex_init(&fman->goal_irq_mutex);
319 fman->ctx = dma_fence_context_alloc(1);
321 return fman;
324 void vmw_fence_manager_takedown(struct vmw_fence_manager *fman)
328 (void) cancel_work_sync(&fman->work);
330 spin_lock(&fman->lock);
331 lists_empty = list_empty(&fman->fence_list) &&
332 list_empty(&fman->cleanup_list);
333 spin_unlock(&fman->lock);
336 kfree(fman);
339 static int vmw_fence_obj_init(struct vmw_fence_manager *fman,
345 dma_fence_init(&fence->base, &vmw_fence_ops, &fman->lock,
346 fman->ctx, seqno);
350 spin_lock(&fman->lock);
351 if (unlikely(fman->fifo_down)) {
355 list_add_tail(&fence->head, &fman->fence_list);
356 ++fman->num_fence_objects;
359 spin_unlock(&fman->lock);
364 static void vmw_fences_perform_actions(struct vmw_fence_manager *fman,
371 fman->pending_actions[action->type]--;
380 list_add_tail(&action->head, &fman->cleanup_list);
388 * @fman: Pointer to a fence manager.
400 static bool vmw_fence_goal_new_locked(struct vmw_fence_manager *fman,
407 if (likely(!fman->seqno_valid))
410 fifo_mem = fman->dev_priv->mmio_virt;
415 fman->seqno_valid = false;
416 list_for_each_entry(fence, &fman->fence_list, head) {
418 fman->seqno_valid = true;
446 struct vmw_fence_manager *fman = fman_from_fence(fence);
453 fifo_mem = fman->dev_priv->mmio_virt;
455 if (likely(fman->seqno_valid &&
460 fman->seqno_valid = true;
465 static void __vmw_fences_update(struct vmw_fence_manager *fman)
471 u32 *fifo_mem = fman->dev_priv->mmio_virt;
475 list_for_each_entry_safe(fence, next_fence, &fman->fence_list, head) {
482 vmw_fences_perform_actions(fman, &action_list);
493 needs_rerun = vmw_fence_goal_new_locked(fman, seqno);
502 if (!list_empty(&fman->cleanup_list))
503 (void) schedule_work(&fman->work);
506 void vmw_fences_update(struct vmw_fence_manager *fman)
508 spin_lock(&fman->lock);
509 __vmw_fences_update(fman);
510 spin_unlock(&fman->lock);
515 struct vmw_fence_manager *fman = fman_from_fence(fence);
520 vmw_fences_update(fman);
550 int vmw_fence_create(struct vmw_fence_manager *fman,
561 ret = vmw_fence_obj_init(fman, fence, seqno,
579 struct vmw_fence_manager *fman = fman_from_fence(fence);
585 ttm_mem_global_free(vmw_mem_glob(fman->dev_priv),
586 fman->user_fence_size);
601 struct vmw_fence_manager *fman,
609 struct ttm_mem_global *mem_glob = vmw_mem_glob(fman->dev_priv);
621 ret = ttm_mem_global_alloc(mem_glob, fman->user_fence_size,
632 ret = vmw_fence_obj_init(fman, &ufence->fence, seqno,
665 ttm_mem_global_free(mem_glob, fman->user_fence_size);
673 * @fman: pointer to a fence manager
679 int vmw_wait_dma_fence(struct vmw_fence_manager *fman,
719 void vmw_fence_fifo_down(struct vmw_fence_manager *fman)
726 * restart when we've released the fman->lock.
729 spin_lock(&fman->lock);
730 fman->fifo_down = true;
731 while (!list_empty(&fman->fence_list)) {
733 list_entry(fman->fence_list.prev, struct vmw_fence_obj,
736 spin_unlock(&fman->lock);
747 vmw_fences_perform_actions(fman, &action_list);
752 spin_lock(&fman->lock);
754 spin_unlock(&fman->lock);
757 void vmw_fence_fifo_up(struct vmw_fence_manager *fman)
759 spin_lock(&fman->lock);
760 fman->fifo_down = false;
761 spin_unlock(&fman->lock);
862 struct vmw_fence_manager *fman;
871 fman = fman_from_fence(fence);
876 spin_lock(&fman->lock);
878 spin_unlock(&fman->lock);
964 struct vmw_fence_manager *fman = fman_from_fence(fence);
967 mutex_lock(&fman->goal_irq_mutex);
968 spin_lock(&fman->lock);
970 fman->pending_actions[action->type]++;
976 vmw_fences_perform_actions(fman, &action_list);
981 * This function may set fman::seqno_valid, so it must
987 spin_unlock(&fman->lock);
990 if (!fman->goal_irq_on) {
991 fman->goal_irq_on = true;
992 vmw_goal_waiter_add(fman->dev_priv);
994 vmw_fences_update(fman);
996 mutex_unlock(&fman->goal_irq_mutex);
1023 struct vmw_fence_manager *fman = fman_from_fence(fence);
1036 eaction->dev = fman->dev_priv->dev;
1057 struct vmw_fence_manager *fman = fman_from_fence(fence);
1058 struct drm_device *dev = fman->dev_priv->dev;