• Home
  • Raw
  • Download

Lines Matching refs:dma

37 int ivtv_udma_fill_sg_list (struct ivtv_user_dma *dma, struct ivtv_dma_page_info *dma_page, int map…  in ivtv_udma_fill_sg_list()  argument
52 if (PageHighMem(dma->map[map_offset])) { in ivtv_udma_fill_sg_list()
55 if (dma->bouncemap[map_offset] == NULL) in ivtv_udma_fill_sg_list()
56 dma->bouncemap[map_offset] = alloc_page(GFP_KERNEL); in ivtv_udma_fill_sg_list()
57 if (dma->bouncemap[map_offset] == NULL) in ivtv_udma_fill_sg_list()
60 src = kmap_atomic(dma->map[map_offset]) + offset; in ivtv_udma_fill_sg_list()
61 memcpy(page_address(dma->bouncemap[map_offset]) + offset, src, len); in ivtv_udma_fill_sg_list()
64 sg_set_page(&dma->SGlist[map_offset], dma->bouncemap[map_offset], len, offset); in ivtv_udma_fill_sg_list()
67 sg_set_page(&dma->SGlist[map_offset], dma->map[map_offset], len, offset); in ivtv_udma_fill_sg_list()
75 void ivtv_udma_fill_sg_array (struct ivtv_user_dma *dma, u32 buffer_offset, u32 buffer_offset_2, u3… in ivtv_udma_fill_sg_array() argument
79 for (i = 0, sg = dma->SGlist; i < dma->SG_length; i++, sg = sg_next(sg)) { in ivtv_udma_fill_sg_array()
80 dma->SGarray[i].size = cpu_to_le32(sg_dma_len(sg)); in ivtv_udma_fill_sg_array()
81 dma->SGarray[i].src = cpu_to_le32(sg_dma_address(sg)); in ivtv_udma_fill_sg_array()
82 dma->SGarray[i].dst = cpu_to_le32(buffer_offset); in ivtv_udma_fill_sg_array()
106 struct ivtv_user_dma *dma = &itv->udma; in ivtv_udma_setup() local
112 if (dma->SG_length || dma->page_count) { in ivtv_udma_setup()
114 dma->SG_length, dma->page_count); in ivtv_udma_setup()
128 user_dma.uaddr, user_dma.page_count, dma->map, in ivtv_udma_setup()
136 put_page(dma->map[i]); in ivtv_udma_setup()
142 dma->page_count = user_dma.page_count; in ivtv_udma_setup()
145 if (ivtv_udma_fill_sg_list(dma, &user_dma, 0) < 0) { in ivtv_udma_setup()
146 for (i = 0; i < dma->page_count; i++) { in ivtv_udma_setup()
147 put_page(dma->map[i]); in ivtv_udma_setup()
149 dma->page_count = 0; in ivtv_udma_setup()
154 dma->SG_length = pci_map_sg(itv->pdev, dma->SGlist, dma->page_count, PCI_DMA_TODEVICE); in ivtv_udma_setup()
157 ivtv_udma_fill_sg_array (dma, ivtv_dest_addr, 0, -1); in ivtv_udma_setup()
160 dma->SGarray[dma->SG_length - 1].size |= cpu_to_le32(0x80000000); in ivtv_udma_setup()
163 return dma->page_count; in ivtv_udma_setup()
168 struct ivtv_user_dma *dma = &itv->udma; in ivtv_udma_unmap() local
174 if (dma->page_count == 0) in ivtv_udma_unmap()
178 if (dma->SG_length) { in ivtv_udma_unmap()
179 pci_unmap_sg(itv->pdev, dma->SGlist, dma->page_count, PCI_DMA_TODEVICE); in ivtv_udma_unmap()
180 dma->SG_length = 0; in ivtv_udma_unmap()
186 for (i = 0; i < dma->page_count; i++) { in ivtv_udma_unmap()
187 put_page(dma->map[i]); in ivtv_udma_unmap()
189 dma->page_count = 0; in ivtv_udma_unmap()