Lines Matching defs:blitq

461 	drm_via_blitq_t *blitq = dev_priv->blit_queues + engine;
467 DRM_DEBUG("DMA blit handler called. engine = %d, from_irq = %d, blitq = 0x%lx\n",
468 engine, from_irq, (unsigned long) blitq);
471 spin_lock(&blitq->blit_lock);
473 spin_lock_irqsave(&blitq->blit_lock, irqsave);
475 done_transfer = blitq->is_active &&
477 done_transfer = done_transfer || (blitq->aborting && !(status & VIA_DMA_CSR_DE));
479 cur = blitq->cur;
482 blitq->blits[cur]->aborted = blitq->aborting;
483 blitq->done_blit_handle++;
485 DRM_SPIN_WAKEUP_ALL(&blitq->blit_queue[cur],
486 &blitq->blit_lock);
488 wake_up(blitq->blit_queue + cur);
494 blitq->cur = cur;
502 blitq->is_active = 0;
503 blitq->aborting = 0;
504 schedule_work(&blitq->wq);
506 } else if (blitq->is_active && time_after_eq(jiffies, blitq->end)) {
513 blitq->aborting = 1;
514 blitq->end = jiffies + HZ;
517 if (!blitq->is_active) {
518 if (blitq->num_outstanding) {
519 via_fire_dmablit(dev, blitq->blits[cur], engine);
520 blitq->is_active = 1;
521 blitq->cur = cur;
522 blitq->num_outstanding--;
523 blitq->end = jiffies + HZ;
524 if (!timer_pending(&blitq->poll_timer))
525 mod_timer(&blitq->poll_timer, jiffies + 1);
527 if (timer_pending(&blitq->poll_timer))
528 del_timer(&blitq->poll_timer);
534 spin_unlock(&blitq->blit_lock);
536 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
547 via_dmablit_active(drm_via_blitq_t *blitq, int engine, uint32_t handle, drm_waitqueue_t **queue)
549 via_dmablit_active(drm_via_blitq_t *blitq, int engine, uint32_t handle, wait_queue_head_t **queue)
559 spin_lock_irqsave(&blitq->blit_lock, irqsave);
566 active = ((blitq->done_blit_handle - handle) > (1 << 23)) &&
567 ((blitq->cur_blit_handle - handle) <= (1 << 23));
570 slot = handle - blitq->done_blit_handle + blitq->cur - 1;
573 *queue = blitq->blit_queue + slot;
577 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
592 drm_via_blitq_t *blitq = dev_priv->blit_queues + engine;
601 spin_lock(&blitq->blit_lock);
602 if (via_dmablit_active(blitq, engine, handle, &queue)) {
603 DRM_SPIN_WAIT_ON(ret, queue, &blitq->blit_lock, 3*HZ,
604 !via_dmablit_active(blitq, engine, handle, NULL));
606 spin_unlock(&blitq->blit_lock);
608 if (via_dmablit_active(blitq, engine, handle, &queue)) {
610 !via_dmablit_active(blitq, engine, handle, NULL));
633 drm_via_blitq_t *blitq = from_timer(blitq, t, poll_timer);
634 struct drm_device *dev = blitq->dev;
636 (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues);
643 if (!timer_pending(&blitq->poll_timer)) {
644 mod_timer(&blitq->poll_timer, jiffies + 1);
669 drm_via_blitq_t *blitq = container_of(work, drm_via_blitq_t, wq);
670 struct drm_device *dev = blitq->dev;
677 (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues));
679 spin_lock_irqsave(&blitq->blit_lock, irqsave);
681 while (blitq->serviced != blitq->cur) {
683 cur_released = blitq->serviced++;
687 if (blitq->serviced >= VIA_NUM_BLIT_SLOTS)
688 blitq->serviced = 0;
690 cur_sg = blitq->blits[cur_released];
691 blitq->num_free++;
694 DRM_SPIN_WAKEUP_ONE(&blitq->busy_queue, &blitq->blit_lock);
697 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
700 wake_up(&blitq->busy_queue);
714 spin_lock_irqsave(&blitq->blit_lock, irqsave);
717 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
731 drm_via_blitq_t *blitq;
736 blitq = dev_priv->blit_queues + i;
737 blitq->dev = dev;
738 blitq->cur_blit_handle = 0;
739 blitq->done_blit_handle = 0;
740 blitq->head = 0;
741 blitq->cur = 0;
742 blitq->serviced = 0;
743 blitq->num_free = VIA_NUM_BLIT_SLOTS - 1;
744 blitq->num_outstanding = 0;
745 blitq->is_active = 0;
746 blitq->aborting = 0;
747 spin_lock_init(&blitq->blit_lock);
750 DRM_INIT_WAITQUEUE(blitq->blit_queue + j, "viablt");
751 DRM_INIT_WAITQUEUE(&blitq->busy_queue, "viabusy");
754 init_waitqueue_head(blitq->blit_queue + j);
755 init_waitqueue_head(&blitq->busy_queue);
757 INIT_WORK(&blitq->wq, via_dmablit_workqueue);
758 timer_setup(&blitq->poll_timer, via_dmablit_timer, 0);
870 via_dmablit_grab_slot(drm_via_blitq_t *blitq, int engine)
875 DRM_DEBUG("Num free is %d\n", blitq->num_free);
876 spin_lock_irqsave(&blitq->blit_lock, irqsave);
877 while (blitq->num_free == 0) {
879 DRM_SPIN_WAIT_ON(ret, &blitq->busy_queue, &blitq->blit_lock,
881 blitq->num_free > 0);
887 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
891 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
893 VIA_WAIT_ON(ret, blitq->busy_queue, HZ, blitq->num_free > 0);
897 spin_lock_irqsave(&blitq->blit_lock, irqsave);
901 blitq->num_free--;
902 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
912 via_dmablit_release_slot(drm_via_blitq_t *blitq)
916 spin_lock_irqsave(&blitq->blit_lock, irqsave);
917 blitq->num_free++;
919 DRM_SPIN_WAKEUP_ONE(&blitq->busy_queue, &blitq->blit_lock);
921 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
923 wake_up(&blitq->busy_queue);
937 drm_via_blitq_t *blitq;
948 blitq = dev_priv->blit_queues + engine;
949 if (0 != (ret = via_dmablit_grab_slot(blitq, engine)))
952 via_dmablit_release_slot(blitq);
956 via_dmablit_release_slot(blitq);
968 spin_lock_irqsave(&blitq->blit_lock, irqsave);
970 blitq->blits[blitq->head++] = vsg;
971 if (blitq->head >= VIA_NUM_BLIT_SLOTS)
972 blitq->head = 0;
973 blitq->num_outstanding++;
974 xfer->sync.sync_handle = ++blitq->cur_blit_handle;
976 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);