• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/gpu/drm/via/

Lines Matching defs:blitq

312 	drm_via_blitq_t *blitq = dev_priv->blit_queues + engine;
318 DRM_DEBUG("DMA blit handler called. engine = %d, from_irq = %d, blitq = 0x%lx\n",
319 engine, from_irq, (unsigned long) blitq);
322 spin_lock(&blitq->blit_lock);
324 spin_lock_irqsave(&blitq->blit_lock, irqsave);
326 done_transfer = blitq->is_active &&
328 done_transfer = done_transfer || (blitq->aborting && !(status & VIA_DMA_CSR_DE));
330 cur = blitq->cur;
333 blitq->blits[cur]->aborted = blitq->aborting;
334 blitq->done_blit_handle++;
335 DRM_WAKEUP(blitq->blit_queue + cur);
340 blitq->cur = cur;
348 blitq->is_active = 0;
349 blitq->aborting = 0;
350 schedule_work(&blitq->wq);
352 } else if (blitq->is_active && time_after_eq(jiffies, blitq->end)) {
359 blitq->aborting = 1;
360 blitq->end = jiffies + DRM_HZ;
363 if (!blitq->is_active) {
364 if (blitq->num_outstanding) {
365 via_fire_dmablit(dev, blitq->blits[cur], engine);
366 blitq->is_active = 1;
367 blitq->cur = cur;
368 blitq->num_outstanding--;
369 blitq->end = jiffies + DRM_HZ;
370 if (!timer_pending(&blitq->poll_timer))
371 mod_timer(&blitq->poll_timer, jiffies + 1);
373 if (timer_pending(&blitq->poll_timer))
374 del_timer(&blitq->poll_timer);
380 spin_unlock(&blitq->blit_lock);
382 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
392 via_dmablit_active(drm_via_blitq_t *blitq, int engine, uint32_t handle, wait_queue_head_t **queue)
398 spin_lock_irqsave(&blitq->blit_lock, irqsave);
404 active = ((blitq->done_blit_handle - handle) > (1 << 23)) &&
405 ((blitq->cur_blit_handle - handle) <= (1 << 23));
408 slot = handle - blitq->done_blit_handle + blitq->cur - 1;
411 *queue = blitq->blit_queue + slot;
414 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
428 drm_via_blitq_t *blitq = dev_priv->blit_queues + engine;
432 if (via_dmablit_active(blitq, engine, handle, &queue)) {
434 !via_dmablit_active(blitq, engine, handle, NULL));
456 drm_via_blitq_t *blitq = (drm_via_blitq_t *) data;
457 struct drm_device *dev = blitq->dev;
459 (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues);
466 if (!timer_pending(&blitq->poll_timer)) {
467 mod_timer(&blitq->poll_timer, jiffies + 1);
492 drm_via_blitq_t *blitq = container_of(work, drm_via_blitq_t, wq);
493 struct drm_device *dev = blitq->dev;
500 (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues));
502 spin_lock_irqsave(&blitq->blit_lock, irqsave);
504 while (blitq->serviced != blitq->cur) {
506 cur_released = blitq->serviced++;
510 if (blitq->serviced >= VIA_NUM_BLIT_SLOTS)
511 blitq->serviced = 0;
513 cur_sg = blitq->blits[cur_released];
514 blitq->num_free++;
516 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
518 DRM_WAKEUP(&blitq->busy_queue);
523 spin_lock_irqsave(&blitq->blit_lock, irqsave);
526 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
540 drm_via_blitq_t *blitq;
545 blitq = dev_priv->blit_queues + i;
546 blitq->dev = dev;
547 blitq->cur_blit_handle = 0;
548 blitq->done_blit_handle = 0;
549 blitq->head = 0;
550 blitq->cur = 0;
551 blitq->serviced = 0;
552 blitq->num_free = VIA_NUM_BLIT_SLOTS - 1;
553 blitq->num_outstanding = 0;
554 blitq->is_active = 0;
555 blitq->aborting = 0;
556 spin_lock_init(&blitq->blit_lock);
558 DRM_INIT_WAITQUEUE(blitq->blit_queue + j);
559 DRM_INIT_WAITQUEUE(&blitq->busy_queue);
560 INIT_WORK(&blitq->wq, via_dmablit_workqueue);
561 setup_timer(&blitq->poll_timer, via_dmablit_timer,
562 (unsigned long)blitq);
675 via_dmablit_grab_slot(drm_via_blitq_t *blitq, int engine)
680 DRM_DEBUG("Num free is %d\n", blitq->num_free);
681 spin_lock_irqsave(&blitq->blit_lock, irqsave);
682 while (blitq->num_free == 0) {
683 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
685 DRM_WAIT_ON(ret, blitq->busy_queue, DRM_HZ, blitq->num_free > 0);
689 spin_lock_irqsave(&blitq->blit_lock, irqsave);
692 blitq->num_free--;
693 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
703 via_dmablit_release_slot(drm_via_blitq_t *blitq)
707 spin_lock_irqsave(&blitq->blit_lock, irqsave);
708 blitq->num_free++;
709 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);
710 DRM_WAKEUP(&blitq->busy_queue);
723 drm_via_blitq_t *blitq;
734 blitq = dev_priv->blit_queues + engine;
735 if (0 != (ret = via_dmablit_grab_slot(blitq, engine)))
738 via_dmablit_release_slot(blitq);
742 via_dmablit_release_slot(blitq);
746 spin_lock_irqsave(&blitq->blit_lock, irqsave);
748 blitq->blits[blitq->head++] = vsg;
749 if (blitq->head >= VIA_NUM_BLIT_SLOTS)
750 blitq->head = 0;
751 blitq->num_outstanding++;
752 xfer->sync.sync_handle = ++blitq->cur_blit_handle;
754 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);