unsigned long saa7134_buffer_base(struct saa7134_buf *buf) { unsigned long base; base = saa7134_buffer_startpage(buf) * 4096; base += buf->vb.dma.sglist[0].offset; return base; }
unsigned long saa7134_buffer_base(struct saa7134_buf *buf) { unsigned long base; struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb); base = saa7134_buffer_startpage(buf) * 4096; base += dma->sglist[0].offset; return base; }
unsigned long saa7134_buffer_base(struct saa7134_buf *buf) { unsigned long base; struct sg_table *dma = vb2_dma_sg_plane_desc(&buf->vb2, 0); base = saa7134_buffer_startpage(buf) * 4096; base += dma->sgl[0].offset; return base; }
static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, enum v4l2_field field) { struct saa7134_dev *dev = q->priv_data; struct saa7134_buf *buf = container_of(vb,struct saa7134_buf,vb); unsigned int lines, llength, size; int err; dprintk("buffer_prepare [%p,%s]\n",buf,v4l2_field_names[field]); llength = TS_PACKET_SIZE; lines = dev->ts.nr_packets; size = lines * llength; if (0 != buf->vb.baddr && buf->vb.bsize < size) return -EINVAL; if (buf->vb.size != size) { saa7134_dma_free(q,buf); } if (VIDEOBUF_NEEDS_INIT == buf->vb.state) { struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb); dprintk("buffer_prepare: needs_init\n"); buf->vb.width = llength; buf->vb.height = lines; buf->vb.size = size; buf->pt = &dev->ts.pt_ts; err = videobuf_iolock(q,&buf->vb,NULL); if (err) goto oops; err = saa7134_pgtable_build(dev->pci,buf->pt, dma->sglist, dma->sglen, saa7134_buffer_startpage(buf)); if (err) goto oops; } buf->vb.state = VIDEOBUF_PREPARED; buf->activate = buffer_activate; buf->vb.field = field; return 0; oops: saa7134_dma_free(q,buf); return err; }