static int __videobuf_iolock(struct videobuf_queue *q, struct videobuf_buffer *vb, struct v4l2_framebuffer *fbuf) { int err, pages; dma_addr_t bus; struct videobuf_dma_sg_memory *mem = vb->priv; BUG_ON(!mem); MAGIC_CHECK(mem->magic, MAGIC_SG_MEM); if (!mem->dma.dev) mem->dma.dev = q->dev; else WARN_ON(mem->dma.dev != q->dev); switch (vb->memory) { case V4L2_MEMORY_MMAP: case V4L2_MEMORY_USERPTR: if (0 == vb->baddr) { /* no userspace addr -- kernel bounce buffer */ pages = PAGE_ALIGN(vb->size) >> PAGE_SHIFT; err = videobuf_dma_init_kernel(&mem->dma, DMA_FROM_DEVICE, pages); if (0 != err) return err; } else if (vb->memory == V4L2_MEMORY_USERPTR) {
int videobuf_iolock(struct pci_dev *pci, struct videobuf_buffer *vb, struct v4l2_framebuffer *fbuf) { int err,pages; dma_addr_t bus; switch (vb->memory) { case V4L2_MEMORY_MMAP: case V4L2_MEMORY_USERPTR: if (0 == vb->baddr) { /* no userspace addr -- kernel bounce buffer */ pages = PAGE_ALIGN(vb->size) >> PAGE_SHIFT; err = videobuf_dma_init_kernel(&vb->dma,PCI_DMA_FROMDEVICE, pages); if (0 != err) return err; } else {