Lines Matching defs:blitq

315 	drm_via_blitq_t *blitq = dev_priv->blit_queues + engine;
321 DRM_DEBUG("DMA blit handler called. engine = %d, from_irq = %d, blitq = 0x%lx\n",
322 engine, from_irq, (unsigned long) blitq);
325 spin_lock(&blitq->blit_lock);
327 spin_lock_irqsave(&blitq->blit_lock, irqsave);
329 done_transfer = blitq->is_active &&
331 done_transfer = done_transfer || (blitq->aborting && !(status & VIA_DMA_CSR_DE));
333 cur = blitq->cur;
336 blitq->blits[cur]->aborted = blitq->aborting;
337 blitq->done_blit_handle++;
338 wake_up(blitq->blit_queue + cur);
343 blitq->cur = cur;
351 blitq->is_active = 0;
352 blitq->aborting = 0;
353 schedule_work(&blitq->wq);
355 } else if (blitq->is_active && time_after_eq(jiffies, blitq->end)) {
362 blitq->aborting = 1;
363 blitq->end = jiffies + HZ;
366 if (!blitq->is_active) {
367 if (blitq->num_outstanding) {
368 via_fire_dmablit(dev, blitq->blits[cur], engine);
369 blitq->is_active = 1;
370 blitq->cur = cur;
371 blitq->num_outstanding--;
372 blitq->end = jiffies + HZ;
373 if (!timer_pending(&blitq->poll_timer))
374 mod_timer(&blitq->poll_timer, jiffies + 1);
376 if (timer_pending(&blitq->poll_timer))
377 del_timer(&blitq->poll_timer);
383 spin_unlock(&blitq->blit_lock);
385 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
395 via_dmablit_active(drm_via_blitq_t *blitq, int engine, uint32_t handle, wait_queue_head_t **queue)
401 spin_lock_irqsave(&blitq->blit_lock, irqsave);
407 active = ((blitq->done_blit_handle - handle) > (1 << 23)) &&
408 ((blitq->cur_blit_handle - handle) <= (1 << 23));
411 slot = handle - blitq->done_blit_handle + blitq->cur - 1;
414 *queue = blitq->blit_queue + slot;
417 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
431 drm_via_blitq_t *blitq = dev_priv->blit_queues + engine;
435 if (via_dmablit_active(blitq, engine, handle, &queue)) {
437 !via_dmablit_active(blitq, engine, handle, NULL));
459 drm_via_blitq_t *blitq = from_timer(blitq, t, poll_timer);
460 struct drm_device *dev = blitq->dev;
462 (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues);
469 if (!timer_pending(&blitq->poll_timer)) {
470 mod_timer(&blitq->poll_timer, jiffies + 1);
495 drm_via_blitq_t *blitq = container_of(work, drm_via_blitq_t, wq);
496 struct drm_device *dev = blitq->dev;
503 (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues));
505 spin_lock_irqsave(&blitq->blit_lock, irqsave);
507 while (blitq->serviced != blitq->cur) {
509 cur_released = blitq->serviced++;
513 if (blitq->serviced >= VIA_NUM_BLIT_SLOTS)
514 blitq->serviced = 0;
516 cur_sg = blitq->blits[cur_released];
517 blitq->num_free++;
519 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
521 wake_up(&blitq->busy_queue);
526 spin_lock_irqsave(&blitq->blit_lock, irqsave);
529 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
543 drm_via_blitq_t *blitq;
548 blitq = dev_priv->blit_queues + i;
549 blitq->dev = dev;
550 blitq->cur_blit_handle = 0;
551 blitq->done_blit_handle = 0;
552 blitq->head = 0;
553 blitq->cur = 0;
554 blitq->serviced = 0;
555 blitq->num_free = VIA_NUM_BLIT_SLOTS - 1;
556 blitq->num_outstanding = 0;
557 blitq->is_active = 0;
558 blitq->aborting = 0;
559 spin_lock_init(&blitq->blit_lock);
561 init_waitqueue_head(blitq->blit_queue + j);
562 init_waitqueue_head(&blitq->busy_queue);
563 INIT_WORK(&blitq->wq, via_dmablit_workqueue);
564 timer_setup(&blitq->poll_timer, via_dmablit_timer, 0);
677 via_dmablit_grab_slot(drm_via_blitq_t *blitq, int engine)
682 DRM_DEBUG("Num free is %d\n", blitq->num_free);
683 spin_lock_irqsave(&blitq->blit_lock, irqsave);
684 while (blitq->num_free == 0) {
685 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
687 VIA_WAIT_ON(ret, blitq->busy_queue, HZ, blitq->num_free > 0);
691 spin_lock_irqsave(&blitq->blit_lock, irqsave);
694 blitq->num_free--;
695 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
705 via_dmablit_release_slot(drm_via_blitq_t *blitq)
709 spin_lock_irqsave(&blitq->blit_lock, irqsave);
710 blitq->num_free++;
711 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
712 wake_up(&blitq->busy_queue);
725 drm_via_blitq_t *blitq;
736 blitq = dev_priv->blit_queues + engine;
737 if (0 != (ret = via_dmablit_grab_slot(blitq, engine)))
740 via_dmablit_release_slot(blitq);
744 via_dmablit_release_slot(blitq);
748 spin_lock_irqsave(&blitq->blit_lock, irqsave);
750 blitq->blits[blitq->head++] = vsg;
751 if (blitq->head >= VIA_NUM_BLIT_SLOTS)
752 blitq->head = 0;
753 blitq->num_outstanding++;
754 xfer->sync.sync_handle = ++blitq->cur_blit_handle;
756 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);