Lines Matching refs:dev_priv

66 	dev_priv->dma_low += 8;					\
74 dev_priv->dma_low += 8; \
77 static void via_cmdbuf_start(drm_via_private_t *dev_priv);
78 static void via_cmdbuf_pause(drm_via_private_t *dev_priv);
79 static void via_cmdbuf_reset(drm_via_private_t *dev_priv);
80 static void via_cmdbuf_rewind(drm_via_private_t *dev_priv);
81 static int via_wait_idle(drm_via_private_t *dev_priv);
82 static void via_pad_cache(drm_via_private_t *dev_priv, int qwords);
88 static uint32_t via_cmdbuf_space(drm_via_private_t *dev_priv) in via_cmdbuf_space() argument
90 uint32_t agp_base = dev_priv->dma_offset + (uint32_t) dev_priv->agpAddr; in via_cmdbuf_space()
91 uint32_t hw_addr = *(dev_priv->hw_addr_ptr) - agp_base; in via_cmdbuf_space()
93 return ((hw_addr <= dev_priv->dma_low) ? in via_cmdbuf_space()
94 (dev_priv->dma_high + hw_addr - dev_priv->dma_low) : in via_cmdbuf_space()
95 (hw_addr - dev_priv->dma_low)); in via_cmdbuf_space()
102 static uint32_t via_cmdbuf_lag(drm_via_private_t *dev_priv) in via_cmdbuf_lag() argument
104 uint32_t agp_base = dev_priv->dma_offset + (uint32_t) dev_priv->agpAddr; in via_cmdbuf_lag()
105 uint32_t hw_addr = *(dev_priv->hw_addr_ptr) - agp_base; in via_cmdbuf_lag()
107 return ((hw_addr <= dev_priv->dma_low) ? in via_cmdbuf_lag()
108 (dev_priv->dma_low - hw_addr) : in via_cmdbuf_lag()
109 (dev_priv->dma_wrap + dev_priv->dma_low - hw_addr)); in via_cmdbuf_lag()
117 via_cmdbuf_wait(drm_via_private_t *dev_priv, unsigned int size) in via_cmdbuf_wait() argument
119 uint32_t agp_base = dev_priv->dma_offset + (uint32_t) dev_priv->agpAddr; in via_cmdbuf_wait()
123 hw_addr_ptr = dev_priv->hw_addr_ptr; in via_cmdbuf_wait()
124 cur_addr = dev_priv->dma_low; in via_cmdbuf_wait()
148 static inline uint32_t *via_check_dma(drm_via_private_t * dev_priv, in via_check_dma() argument
151 if ((dev_priv->dma_low + size + 4 * CMDBUF_ALIGNMENT_SIZE) > in via_check_dma()
152 dev_priv->dma_high) { in via_check_dma()
153 via_cmdbuf_rewind(dev_priv); in via_check_dma()
155 if (via_cmdbuf_wait(dev_priv, size) != 0) in via_check_dma()
158 return (uint32_t *) (dev_priv->dma_ptr + dev_priv->dma_low); in via_check_dma()
164 drm_via_private_t *dev_priv = in via_dma_cleanup() local
167 if (dev_priv->ring.virtual_start) { in via_dma_cleanup()
168 via_cmdbuf_reset(dev_priv); in via_dma_cleanup()
170 drm_legacy_ioremapfree(&dev_priv->ring.map, dev); in via_dma_cleanup()
171 dev_priv->ring.virtual_start = NULL; in via_dma_cleanup()
180 drm_via_private_t *dev_priv, in via_initialize() argument
183 if (!dev_priv || !dev_priv->mmio) { in via_initialize()
188 if (dev_priv->ring.virtual_start != NULL) { in via_initialize()
198 if (dev_priv->chipset == VIA_DX9_0) { in via_initialize()
203 dev_priv->ring.map.offset = dev->agp->base + init->offset; in via_initialize()
204 dev_priv->ring.map.size = init->size; in via_initialize()
205 dev_priv->ring.map.type = 0; in via_initialize()
206 dev_priv->ring.map.flags = 0; in via_initialize()
207 dev_priv->ring.map.mtrr = 0; in via_initialize()
209 drm_legacy_ioremap(&dev_priv->ring.map, dev); in via_initialize()
211 if (dev_priv->ring.map.handle == NULL) { in via_initialize()
218 dev_priv->ring.virtual_start = dev_priv->ring.map.handle; in via_initialize()
220 dev_priv->dma_ptr = dev_priv->ring.virtual_start; in via_initialize()
221 dev_priv->dma_low = 0; in via_initialize()
222 dev_priv->dma_high = init->size; in via_initialize()
223 dev_priv->dma_wrap = init->size; in via_initialize()
224 dev_priv->dma_offset = init->offset; in via_initialize()
225 dev_priv->last_pause_ptr = NULL; in via_initialize()
226 dev_priv->hw_addr_ptr = in via_initialize()
227 (volatile uint32_t *)((char *)dev_priv->mmio->handle + in via_initialize()
230 via_cmdbuf_start(dev_priv); in via_initialize()
237 drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; in via_dma_init() local
246 retcode = via_initialize(dev, dev_priv, init); in via_dma_init()
255 retcode = (dev_priv->ring.virtual_start != NULL) ? in via_dma_init()
268 drm_via_private_t *dev_priv; in via_dispatch_cmdbuffer() local
272 dev_priv = (drm_via_private_t *) dev->dev_private; in via_dispatch_cmdbuffer()
274 if (dev_priv->ring.virtual_start == NULL) { in via_dispatch_cmdbuffer()
282 if (copy_from_user(dev_priv->pci_buf, cmd->buf, cmd->size)) in via_dispatch_cmdbuffer()
292 via_verify_command_stream((uint32_t *) dev_priv->pci_buf, in via_dispatch_cmdbuffer()
297 vb = via_check_dma(dev_priv, (cmd->size < 0x100) ? 0x102 : cmd->size); in via_dispatch_cmdbuffer()
301 memcpy(vb, dev_priv->pci_buf, cmd->size); in via_dispatch_cmdbuffer()
303 dev_priv->dma_low += cmd->size; in via_dispatch_cmdbuffer()
311 via_pad_cache(dev_priv, (0x100 - cmd->size) >> 3); in via_dispatch_cmdbuffer()
312 via_cmdbuf_pause(dev_priv); in via_dispatch_cmdbuffer()
319 drm_via_private_t *dev_priv = dev->dev_private; in via_driver_dma_quiescent() local
321 if (!via_wait_idle(dev_priv)) in via_driver_dma_quiescent()
350 drm_via_private_t *dev_priv = dev->dev_private; in via_dispatch_pci_cmdbuffer() local
355 if (copy_from_user(dev_priv->pci_buf, cmd->buf, cmd->size)) in via_dispatch_pci_cmdbuffer()
359 via_verify_command_stream((uint32_t *) dev_priv->pci_buf, in via_dispatch_pci_cmdbuffer()
365 via_parse_command_stream(dev, (const uint32_t *)dev_priv->pci_buf, in via_dispatch_pci_cmdbuffer()
383 static inline uint32_t *via_align_buffer(drm_via_private_t *dev_priv, in via_align_buffer() argument
396 static inline uint32_t *via_get_dma(drm_via_private_t *dev_priv) in via_get_dma() argument
398 return (uint32_t *) (dev_priv->dma_ptr + dev_priv->dma_low); in via_get_dma()
406 static int via_hook_segment(drm_via_private_t *dev_priv, in via_hook_segment() argument
411 volatile uint32_t *paused_at = dev_priv->last_pause_ptr; in via_hook_segment()
417 (void) *(volatile uint32_t *)(via_get_dma(dev_priv) - 1); in via_hook_segment()
423 reader = *(dev_priv->hw_addr_ptr); in via_hook_segment()
424 ptr = ((volatile char *)paused_at - dev_priv->dma_ptr) + in via_hook_segment()
425 dev_priv->dma_offset + (uint32_t) dev_priv->agpAddr + 4; in via_hook_segment()
427 dev_priv->last_pause_ptr = via_get_dma(dev_priv) - 1; in via_hook_segment()
436 diff = (uint32_t) (ptr - reader) - dev_priv->dma_diff; in via_hook_segment()
439 paused = (via_read(dev_priv, 0x41c) & 0x80000000); in via_hook_segment()
442 reader = *(dev_priv->hw_addr_ptr); in via_hook_segment()
443 diff = (uint32_t) (ptr - reader) - dev_priv->dma_diff; in via_hook_segment()
446 paused = via_read(dev_priv, 0x41c) & 0x80000000; in via_hook_segment()
449 reader = *(dev_priv->hw_addr_ptr); in via_hook_segment()
450 diff = (uint32_t) (ptr - reader) - dev_priv->dma_diff; in via_hook_segment()
451 diff &= (dev_priv->dma_high - 1); in via_hook_segment()
452 if (diff != 0 && diff < (dev_priv->dma_high >> 1)) { in via_hook_segment()
455 ptr, reader, dev_priv->dma_diff); in via_hook_segment()
463 via_write(dev_priv, VIA_REG_TRANSET, (HC_ParaType_PreCR << 16)); in via_hook_segment()
464 via_write(dev_priv, VIA_REG_TRANSPACE, pause_addr_hi); in via_hook_segment()
465 via_write(dev_priv, VIA_REG_TRANSPACE, pause_addr_lo); in via_hook_segment()
466 via_read(dev_priv, VIA_REG_TRANSPACE); in via_hook_segment()
472 static int via_wait_idle(drm_via_private_t *dev_priv) in via_wait_idle() argument
476 while (!(via_read(dev_priv, VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) && --count) in via_wait_idle()
479 while (count && (via_read(dev_priv, VIA_REG_STATUS) & in via_wait_idle()
486 static uint32_t *via_align_cmd(drm_via_private_t *dev_priv, uint32_t cmd_type, in via_align_cmd() argument
496 via_cmdbuf_wait(dev_priv, 2 * CMDBUF_ALIGNMENT_SIZE); in via_align_cmd()
498 vb = via_get_dma(dev_priv); in via_align_cmd()
501 agp_base = dev_priv->dma_offset + (uint32_t) dev_priv->agpAddr; in via_align_cmd()
503 ((dev_priv->dma_low & CMDBUF_ALIGNMENT_MASK) >> 3); in via_align_cmd()
506 agp_base + dev_priv->dma_low - 8 + (qw_pad_count << 3); in via_align_cmd()
511 vb = via_align_buffer(dev_priv, vb, qw_pad_count - 1); in via_align_cmd()
516 static void via_cmdbuf_start(drm_via_private_t *dev_priv) in via_cmdbuf_start() argument
527 dev_priv->dma_low = 0; in via_cmdbuf_start()
529 agp_base = dev_priv->dma_offset + (uint32_t) dev_priv->agpAddr; in via_cmdbuf_start()
531 end_addr = agp_base + dev_priv->dma_high; in via_cmdbuf_start()
538 dev_priv->last_pause_ptr = in via_cmdbuf_start()
539 via_align_cmd(dev_priv, HC_HAGPBpID_PAUSE, 0, in via_cmdbuf_start()
543 (void) *(volatile uint32_t *)dev_priv->last_pause_ptr; in via_cmdbuf_start()
545 via_write(dev_priv, VIA_REG_TRANSET, (HC_ParaType_PreCR << 16)); in via_cmdbuf_start()
546 via_write(dev_priv, VIA_REG_TRANSPACE, command); in via_cmdbuf_start()
547 via_write(dev_priv, VIA_REG_TRANSPACE, start_addr_lo); in via_cmdbuf_start()
548 via_write(dev_priv, VIA_REG_TRANSPACE, end_addr_lo); in via_cmdbuf_start()
550 via_write(dev_priv, VIA_REG_TRANSPACE, pause_addr_hi); in via_cmdbuf_start()
551 via_write(dev_priv, VIA_REG_TRANSPACE, pause_addr_lo); in via_cmdbuf_start()
553 via_write(dev_priv, VIA_REG_TRANSPACE, command | HC_HAGPCMNT_MASK); in via_cmdbuf_start()
554 via_read(dev_priv, VIA_REG_TRANSPACE); in via_cmdbuf_start()
556 dev_priv->dma_diff = 0; in via_cmdbuf_start()
559 while (!(via_read(dev_priv, 0x41c) & 0x80000000) && count--); in via_cmdbuf_start()
561 reader = *(dev_priv->hw_addr_ptr); in via_cmdbuf_start()
562 ptr = ((volatile char *)dev_priv->last_pause_ptr - dev_priv->dma_ptr) + in via_cmdbuf_start()
563 dev_priv->dma_offset + (uint32_t) dev_priv->agpAddr + 4; in via_cmdbuf_start()
572 dev_priv->dma_diff = ptr - reader; in via_cmdbuf_start()
575 static void via_pad_cache(drm_via_private_t *dev_priv, int qwords) in via_pad_cache() argument
579 via_cmdbuf_wait(dev_priv, qwords + 2); in via_pad_cache()
580 vb = via_get_dma(dev_priv); in via_pad_cache()
582 via_align_buffer(dev_priv, vb, qwords); in via_pad_cache()
585 static inline void via_dummy_bitblt(drm_via_private_t *dev_priv) in via_dummy_bitblt() argument
587 uint32_t *vb = via_get_dma(dev_priv); in via_dummy_bitblt()
593 static void via_cmdbuf_jump(drm_via_private_t *dev_priv) in via_cmdbuf_jump() argument
600 via_align_cmd(dev_priv, HC_HAGPBpID_JUMP, 0, &jump_addr_hi, in via_cmdbuf_jump()
603 dev_priv->dma_wrap = dev_priv->dma_low; in via_cmdbuf_jump()
609 dev_priv->dma_low = 0; in via_cmdbuf_jump()
610 if (via_cmdbuf_wait(dev_priv, CMDBUF_ALIGNMENT_SIZE) != 0) in via_cmdbuf_jump()
613 via_dummy_bitblt(dev_priv); in via_cmdbuf_jump()
614 via_dummy_bitblt(dev_priv); in via_cmdbuf_jump()
617 via_align_cmd(dev_priv, HC_HAGPBpID_PAUSE, 0, &pause_addr_hi, in via_cmdbuf_jump()
619 via_align_cmd(dev_priv, HC_HAGPBpID_PAUSE, 0, &pause_addr_hi, in via_cmdbuf_jump()
623 dma_low_save1 = dev_priv->dma_low; in via_cmdbuf_jump()
635 via_align_cmd(dev_priv, HC_HAGPBpID_PAUSE, 0, &pause_addr_hi, in via_cmdbuf_jump()
637 via_align_cmd(dev_priv, HC_HAGPBpID_PAUSE, 0, &pause_addr_hi, in via_cmdbuf_jump()
641 dma_low_save2 = dev_priv->dma_low; in via_cmdbuf_jump()
642 dev_priv->dma_low = dma_low_save1; in via_cmdbuf_jump()
643 via_hook_segment(dev_priv, jump_addr_hi, jump_addr_lo, 0); in via_cmdbuf_jump()
644 dev_priv->dma_low = dma_low_save2; in via_cmdbuf_jump()
645 via_hook_segment(dev_priv, pause_addr_hi, pause_addr_lo, 0); in via_cmdbuf_jump()
649 static void via_cmdbuf_rewind(drm_via_private_t *dev_priv) in via_cmdbuf_rewind() argument
651 via_cmdbuf_jump(dev_priv); in via_cmdbuf_rewind()
654 static void via_cmdbuf_flush(drm_via_private_t *dev_priv, uint32_t cmd_type) in via_cmdbuf_flush() argument
658 via_align_cmd(dev_priv, cmd_type, 0, &pause_addr_hi, &pause_addr_lo, 0); in via_cmdbuf_flush()
659 via_hook_segment(dev_priv, pause_addr_hi, pause_addr_lo, 0); in via_cmdbuf_flush()
662 static void via_cmdbuf_pause(drm_via_private_t *dev_priv) in via_cmdbuf_pause() argument
664 via_cmdbuf_flush(dev_priv, HC_HAGPBpID_PAUSE); in via_cmdbuf_pause()
667 static void via_cmdbuf_reset(drm_via_private_t *dev_priv) in via_cmdbuf_reset() argument
669 via_cmdbuf_flush(dev_priv, HC_HAGPBpID_STOP); in via_cmdbuf_reset()
670 via_wait_idle(dev_priv); in via_cmdbuf_reset()
682 drm_via_private_t *dev_priv; in via_cmdbuf_size() local
687 dev_priv = (drm_via_private_t *) dev->dev_private; in via_cmdbuf_size()
689 if (dev_priv->ring.virtual_start == NULL) { in via_cmdbuf_size()
698 while (((tmp_size = via_cmdbuf_space(dev_priv)) < d_siz->size) in via_cmdbuf_size()
709 while (((tmp_size = via_cmdbuf_lag(dev_priv)) > d_siz->size) in via_cmdbuf_size()