Lines Matching defs:vsg

67 via_unmap_blit_from_device(struct pci_dev *pdev, drm_via_sg_info_t *vsg)
69 int num_desc = vsg->num_desc;
70 unsigned cur_descriptor_page = num_desc / vsg->descriptors_per_page;
71 unsigned descriptor_this_page = num_desc % vsg->descriptors_per_page;
72 drm_via_descriptor_t *desc_ptr = vsg->desc_pages[cur_descriptor_page] +
74 dma_addr_t next = vsg->chain_start;
79 descriptor_this_page = vsg->descriptors_per_page - 1;
80 desc_ptr = vsg->desc_pages[cur_descriptor_page] +
84 dma_unmap_page(&pdev->dev, desc_ptr->mem_addr, desc_ptr->size, vsg->direction);
100 drm_via_sg_info_t *vsg,
118 desc_ptr = vsg->desc_pages[cur_descriptor_page];
134 vsg->pages[VIA_PFN(cur_mem) -
137 vsg->direction);
145 if (++num_descriptors_this_page >= vsg->descriptors_per_page) {
147 desc_ptr = vsg->desc_pages[++cur_descriptor_page];
161 vsg->chain_start = next;
162 vsg->state = dr_via_device_mapped;
164 vsg->num_desc = num_desc;
175 via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_t *vsg)
179 switch (vsg->state) {
181 via_unmap_blit_from_device(pdev, vsg);
184 for (i = 0; i < vsg->num_desc_pages; ++i) {
185 if (vsg->desc_pages[i] != NULL)
186 free_page((unsigned long)vsg->desc_pages[i]);
188 kfree(vsg->desc_pages);
191 unpin_user_pages_dirty_lock(vsg->pages, vsg->num_pages,
192 (vsg->direction == DMA_FROM_DEVICE));
195 vfree(vsg->pages);
198 vsg->state = dr_via_sg_init;
200 vfree(vsg->bounce_buffer);
201 vsg->bounce_buffer = NULL;
202 vsg->free_on_sequence = 0;
210 via_fire_dmablit(struct drm_device *dev, drm_via_sg_info_t *vsg, int engine)
220 via_write(dev_priv, VIA_PCI_DMA_DPR0 + engine*0x10, vsg->chain_start);
232 via_lock_all_dma_pages(drm_via_sg_info_t *vsg, drm_via_dmablit_t *xfer)
236 vsg->num_pages = VIA_PFN(xfer->mem_addr + (xfer->num_lines * xfer->mem_stride - 1)) -
239 vsg->pages = vzalloc(array_size(sizeof(struct page *), vsg->num_pages));
240 if (NULL == vsg->pages)
243 vsg->num_pages,
244 vsg->direction == DMA_FROM_DEVICE ? FOLL_WRITE : 0,
245 vsg->pages);
246 if (ret != vsg->num_pages) {
249 vsg->state = dr_via_pages_locked;
252 vsg->state = dr_via_pages_locked;
264 via_alloc_desc_pages(drm_via_sg_info_t *vsg)
268 vsg->descriptors_per_page = PAGE_SIZE / sizeof(drm_via_descriptor_t);
269 vsg->num_desc_pages = (vsg->num_desc + vsg->descriptors_per_page - 1) /
270 vsg->descriptors_per_page;
272 if (NULL == (vsg->desc_pages = kcalloc(vsg->num_desc_pages, sizeof(void *), GFP_KERNEL)))
275 vsg->state = dr_via_desc_pages_alloc;
276 for (i = 0; i < vsg->num_desc_pages; ++i) {
277 if (NULL == (vsg->desc_pages[i] =
281 DRM_DEBUG("Allocated %d pages for %d descriptors.\n", vsg->num_desc_pages,
282 vsg->num_desc);
574 via_build_sg_info(struct drm_device *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *xfer)
579 vsg->direction = (draw) ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
580 vsg->bounce_buffer = NULL;
582 vsg->state = dr_via_sg_init;
653 if (0 != (ret = via_lock_all_dma_pages(vsg, xfer))) {
655 via_free_sg_info(dev->pdev, vsg);
659 via_map_blit_for_device(dev->pdev, xfer, vsg, 0);
660 if (0 != (ret = via_alloc_desc_pages(vsg))) {
662 via_free_sg_info(dev->pdev, vsg);
665 via_map_blit_for_device(dev->pdev, xfer, vsg, 1);
724 drm_via_sg_info_t *vsg;
739 if (NULL == (vsg = kmalloc(sizeof(*vsg), GFP_KERNEL))) {
743 if (0 != (ret = via_build_sg_info(dev, vsg, xfer))) {
745 kfree(vsg);
750 blitq->blits[blitq->head++] = vsg;