提交 95268403 编写于 作者: L Laurent Pinchart 提交者: Mauro Carvalho Chehab

V4L/DVB: videobuf: Remove the videobuf_sg_dma_map/unmap functions

Instead of creating dirty wrappers around videobuf_dma_map/unmap that
create a dummy videobuf_queue structure, modify videobuf_dma_map/unmap
to take a device pointer argument and use it directly. The
videobuf_sg_dma_map/unmap then become unused and can be removed.
Signed-off-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 a438d6da
...@@ -57,7 +57,7 @@ void saa7146_dma_free(struct saa7146_dev *dev,struct videobuf_queue *q, ...@@ -57,7 +57,7 @@ void saa7146_dma_free(struct saa7146_dev *dev,struct videobuf_queue *q,
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb,0,0); videobuf_waiton(&buf->vb,0,0);
videobuf_dma_unmap(q, dma); videobuf_dma_unmap(q->dev, dma);
videobuf_dma_free(dma); videobuf_dma_free(dma);
buf->vb.state = VIDEOBUF_NEEDS_INIT; buf->vb.state = VIDEOBUF_NEEDS_INIT;
} }
......
...@@ -583,7 +583,7 @@ bttv_dma_free(struct videobuf_queue *q,struct bttv *btv, struct bttv_buffer *buf ...@@ -583,7 +583,7 @@ bttv_dma_free(struct videobuf_queue *q,struct bttv *btv, struct bttv_buffer *buf
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb,0,0); videobuf_waiton(&buf->vb,0,0);
videobuf_dma_unmap(q, dma); videobuf_dma_unmap(q->dev, dma);
videobuf_dma_free(dma); videobuf_dma_free(dma);
btcx_riscmem_free(btv->c.pci,&buf->bottom); btcx_riscmem_free(btv->c.pci,&buf->bottom);
btcx_riscmem_free(btv->c.pci,&buf->top); btcx_riscmem_free(btv->c.pci,&buf->top);
......
...@@ -1142,7 +1142,7 @@ void cx23885_free_buffer(struct videobuf_queue *q, struct cx23885_buffer *buf) ...@@ -1142,7 +1142,7 @@ void cx23885_free_buffer(struct videobuf_queue *q, struct cx23885_buffer *buf)
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb, 0, 0); videobuf_waiton(&buf->vb, 0, 0);
videobuf_dma_unmap(q, dma); videobuf_dma_unmap(q->dev, dma);
videobuf_dma_free(dma); videobuf_dma_free(dma);
btcx_riscmem_free(to_pci_dev(q->dev), &buf->risc); btcx_riscmem_free(to_pci_dev(q->dev), &buf->risc);
buf->vb.state = VIDEOBUF_NEEDS_INIT; buf->vb.state = VIDEOBUF_NEEDS_INIT;
......
...@@ -283,7 +283,7 @@ static int dsp_buffer_free(snd_cx88_card_t *chip) ...@@ -283,7 +283,7 @@ static int dsp_buffer_free(snd_cx88_card_t *chip)
BUG_ON(!chip->dma_size); BUG_ON(!chip->dma_size);
dprintk(2,"Freeing buffer\n"); dprintk(2,"Freeing buffer\n");
videobuf_sg_dma_unmap(&chip->pci->dev, chip->dma_risc); videobuf_dma_unmap(&chip->pci->dev, chip->dma_risc);
videobuf_dma_free(chip->dma_risc); videobuf_dma_free(chip->dma_risc);
btcx_riscmem_free(chip->pci,&chip->buf->risc); btcx_riscmem_free(chip->pci,&chip->buf->risc);
kfree(chip->buf); kfree(chip->buf);
...@@ -409,7 +409,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream, ...@@ -409,7 +409,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream,
if (ret < 0) if (ret < 0)
goto error; goto error;
ret = videobuf_sg_dma_map(&chip->pci->dev, dma); ret = videobuf_dma_map(&chip->pci->dev, dma);
if (ret < 0) if (ret < 0)
goto error; goto error;
......
...@@ -218,7 +218,7 @@ cx88_free_buffer(struct videobuf_queue *q, struct cx88_buffer *buf) ...@@ -218,7 +218,7 @@ cx88_free_buffer(struct videobuf_queue *q, struct cx88_buffer *buf)
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb,0,0); videobuf_waiton(&buf->vb,0,0);
videobuf_dma_unmap(q, dma); videobuf_dma_unmap(q->dev, dma);
videobuf_dma_free(dma); videobuf_dma_free(dma);
btcx_riscmem_free(to_pci_dev(q->dev), &buf->risc); btcx_riscmem_free(to_pci_dev(q->dev), &buf->risc);
buf->vb.state = VIDEOBUF_NEEDS_INIT; buf->vb.state = VIDEOBUF_NEEDS_INIT;
......
...@@ -426,7 +426,7 @@ static void omap24xxcam_vbq_release(struct videobuf_queue *vbq, ...@@ -426,7 +426,7 @@ static void omap24xxcam_vbq_release(struct videobuf_queue *vbq,
dma->direction); dma->direction);
dma->direction = DMA_NONE; dma->direction = DMA_NONE;
} else { } else {
videobuf_dma_unmap(vbq, videobuf_to_dma(vb)); videobuf_dma_unmap(vbq->dev, videobuf_to_dma(vb));
videobuf_dma_free(videobuf_to_dma(vb)); videobuf_dma_free(videobuf_to_dma(vb));
} }
......
...@@ -276,7 +276,7 @@ static void free_buffer(struct videobuf_queue *vq, struct pxa_buffer *buf) ...@@ -276,7 +276,7 @@ static void free_buffer(struct videobuf_queue *vq, struct pxa_buffer *buf)
* longer in STATE_QUEUED or STATE_ACTIVE * longer in STATE_QUEUED or STATE_ACTIVE
*/ */
videobuf_waiton(&buf->vb, 0, 0); videobuf_waiton(&buf->vb, 0, 0);
videobuf_dma_unmap(vq, dma); videobuf_dma_unmap(vq->dev, dma);
videobuf_dma_free(dma); videobuf_dma_free(dma);
for (i = 0; i < ARRAY_SIZE(buf->dmas); i++) { for (i = 0; i < ARRAY_SIZE(buf->dmas); i++) {
......
...@@ -630,7 +630,7 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream, ...@@ -630,7 +630,7 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream,
/* release the old buffer */ /* release the old buffer */
if (substream->runtime->dma_area) { if (substream->runtime->dma_area) {
saa7134_pgtable_free(dev->pci, &dev->dmasound.pt); saa7134_pgtable_free(dev->pci, &dev->dmasound.pt);
videobuf_sg_dma_unmap(&dev->pci->dev, &dev->dmasound.dma); videobuf_dma_unmap(&dev->pci->dev, &dev->dmasound.dma);
dsp_buffer_free(dev); dsp_buffer_free(dev);
substream->runtime->dma_area = NULL; substream->runtime->dma_area = NULL;
} }
...@@ -646,12 +646,12 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream, ...@@ -646,12 +646,12 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream,
return err; return err;
} }
if (0 != (err = videobuf_sg_dma_map(&dev->pci->dev, &dev->dmasound.dma))) { if (0 != (err = videobuf_dma_map(&dev->pci->dev, &dev->dmasound.dma))) {
dsp_buffer_free(dev); dsp_buffer_free(dev);
return err; return err;
} }
if (0 != (err = saa7134_pgtable_alloc(dev->pci,&dev->dmasound.pt))) { if (0 != (err = saa7134_pgtable_alloc(dev->pci,&dev->dmasound.pt))) {
videobuf_sg_dma_unmap(&dev->pci->dev, &dev->dmasound.dma); videobuf_dma_unmap(&dev->pci->dev, &dev->dmasound.dma);
dsp_buffer_free(dev); dsp_buffer_free(dev);
return err; return err;
} }
...@@ -660,7 +660,7 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream, ...@@ -660,7 +660,7 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream,
dev->dmasound.dma.sglen, dev->dmasound.dma.sglen,
0))) { 0))) {
saa7134_pgtable_free(dev->pci, &dev->dmasound.pt); saa7134_pgtable_free(dev->pci, &dev->dmasound.pt);
videobuf_sg_dma_unmap(&dev->pci->dev, &dev->dmasound.dma); videobuf_dma_unmap(&dev->pci->dev, &dev->dmasound.dma);
dsp_buffer_free(dev); dsp_buffer_free(dev);
return err; return err;
} }
...@@ -696,7 +696,7 @@ static int snd_card_saa7134_hw_free(struct snd_pcm_substream * substream) ...@@ -696,7 +696,7 @@ static int snd_card_saa7134_hw_free(struct snd_pcm_substream * substream)
if (substream->runtime->dma_area) { if (substream->runtime->dma_area) {
saa7134_pgtable_free(dev->pci, &dev->dmasound.pt); saa7134_pgtable_free(dev->pci, &dev->dmasound.pt);
videobuf_sg_dma_unmap(&dev->pci->dev, &dev->dmasound.dma); videobuf_dma_unmap(&dev->pci->dev, &dev->dmasound.dma);
dsp_buffer_free(dev); dsp_buffer_free(dev);
substream->runtime->dma_area = NULL; substream->runtime->dma_area = NULL;
} }
......
...@@ -256,7 +256,7 @@ void saa7134_dma_free(struct videobuf_queue *q,struct saa7134_buf *buf) ...@@ -256,7 +256,7 @@ void saa7134_dma_free(struct videobuf_queue *q,struct saa7134_buf *buf)
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb,0,0); videobuf_waiton(&buf->vb,0,0);
videobuf_dma_unmap(q, dma); videobuf_dma_unmap(q->dev, dma);
videobuf_dma_free(dma); videobuf_dma_free(dma);
buf->vb.state = VIDEOBUF_NEEDS_INIT; buf->vb.state = VIDEOBUF_NEEDS_INIT;
} }
......
...@@ -235,7 +235,7 @@ int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction, ...@@ -235,7 +235,7 @@ int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction,
} }
EXPORT_SYMBOL_GPL(videobuf_dma_init_overlay); EXPORT_SYMBOL_GPL(videobuf_dma_init_overlay);
int videobuf_dma_map(struct videobuf_queue *q, struct videobuf_dmabuf *dma) int videobuf_dma_map(struct device *dev, struct videobuf_dmabuf *dma)
{ {
MAGIC_CHECK(dma->magic, MAGIC_DMABUF); MAGIC_CHECK(dma->magic, MAGIC_DMABUF);
BUG_ON(0 == dma->nr_pages); BUG_ON(0 == dma->nr_pages);
...@@ -263,7 +263,7 @@ int videobuf_dma_map(struct videobuf_queue *q, struct videobuf_dmabuf *dma) ...@@ -263,7 +263,7 @@ int videobuf_dma_map(struct videobuf_queue *q, struct videobuf_dmabuf *dma)
return -ENOMEM; return -ENOMEM;
} }
if (!dma->bus_addr) { if (!dma->bus_addr) {
dma->sglen = dma_map_sg(q->dev, dma->sglist, dma->sglen = dma_map_sg(dev, dma->sglist,
dma->nr_pages, dma->direction); dma->nr_pages, dma->direction);
if (0 == dma->sglen) { if (0 == dma->sglen) {
printk(KERN_WARNING printk(KERN_WARNING
...@@ -279,14 +279,14 @@ int videobuf_dma_map(struct videobuf_queue *q, struct videobuf_dmabuf *dma) ...@@ -279,14 +279,14 @@ int videobuf_dma_map(struct videobuf_queue *q, struct videobuf_dmabuf *dma)
} }
EXPORT_SYMBOL_GPL(videobuf_dma_map); EXPORT_SYMBOL_GPL(videobuf_dma_map);
int videobuf_dma_unmap(struct videobuf_queue *q, struct videobuf_dmabuf *dma) int videobuf_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma)
{ {
MAGIC_CHECK(dma->magic, MAGIC_DMABUF); MAGIC_CHECK(dma->magic, MAGIC_DMABUF);
if (!dma->sglen) if (!dma->sglen)
return 0; return 0;
dma_unmap_sg(q->dev, dma->sglist, dma->sglen, dma->direction); dma_unmap_sg(dev, dma->sglist, dma->sglen, dma->direction);
vfree(dma->sglist); vfree(dma->sglist);
dma->sglist = NULL; dma->sglist = NULL;
...@@ -322,28 +322,6 @@ EXPORT_SYMBOL_GPL(videobuf_dma_free); ...@@ -322,28 +322,6 @@ EXPORT_SYMBOL_GPL(videobuf_dma_free);
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int videobuf_sg_dma_map(struct device *dev, struct videobuf_dmabuf *dma)
{
struct videobuf_queue q;
q.dev = dev;
return videobuf_dma_map(&q, dma);
}
EXPORT_SYMBOL_GPL(videobuf_sg_dma_map);
int videobuf_sg_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma)
{
struct videobuf_queue q;
q.dev = dev;
return videobuf_dma_unmap(&q, dma);
}
EXPORT_SYMBOL_GPL(videobuf_sg_dma_unmap);
/* --------------------------------------------------------------------- */
static void videobuf_vm_open(struct vm_area_struct *vma) static void videobuf_vm_open(struct vm_area_struct *vma)
{ {
struct videobuf_mapping *map = vma->vm_private_data; struct videobuf_mapping *map = vma->vm_private_data;
...@@ -520,7 +498,7 @@ static int __videobuf_iolock(struct videobuf_queue *q, ...@@ -520,7 +498,7 @@ static int __videobuf_iolock(struct videobuf_queue *q,
default: default:
BUG(); BUG();
} }
err = videobuf_dma_map(q, &mem->dma); err = videobuf_dma_map(q->dev, &mem->dma);
if (0 != err) if (0 != err)
return err; return err;
......
...@@ -331,7 +331,7 @@ static int dsp_buffer_free(struct cx25821_audio_dev *chip) ...@@ -331,7 +331,7 @@ static int dsp_buffer_free(struct cx25821_audio_dev *chip)
BUG_ON(!chip->dma_size); BUG_ON(!chip->dma_size);
dprintk(2, "Freeing buffer\n"); dprintk(2, "Freeing buffer\n");
videobuf_sg_dma_unmap(&chip->pci->dev, chip->dma_risc); videobuf_dma_unmap(&chip->pci->dev, chip->dma_risc);
videobuf_dma_free(chip->dma_risc); videobuf_dma_free(chip->dma_risc);
btcx_riscmem_free(chip->pci, &chip->buf->risc); btcx_riscmem_free(chip->pci, &chip->buf->risc);
kfree(chip->buf); kfree(chip->buf);
...@@ -470,7 +470,7 @@ static int snd_cx25821_hw_params(struct snd_pcm_substream *substream, ...@@ -470,7 +470,7 @@ static int snd_cx25821_hw_params(struct snd_pcm_substream *substream,
if (ret < 0) if (ret < 0)
goto error; goto error;
ret = videobuf_sg_dma_map(&chip->pci->dev, dma); ret = videobuf_dma_map(&chip->pci->dev, dma);
if (ret < 0) if (ret < 0)
goto error; goto error;
......
...@@ -1320,7 +1320,7 @@ void cx25821_free_buffer(struct videobuf_queue *q, struct cx25821_buffer *buf) ...@@ -1320,7 +1320,7 @@ void cx25821_free_buffer(struct videobuf_queue *q, struct cx25821_buffer *buf)
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb, 0, 0); videobuf_waiton(&buf->vb, 0, 0);
videobuf_dma_unmap(q, dma); videobuf_dma_unmap(q->dev, dma);
videobuf_dma_free(dma); videobuf_dma_free(dma);
btcx_riscmem_free(to_pci_dev(q->dev), &buf->risc); btcx_riscmem_free(to_pci_dev(q->dev), &buf->risc);
buf->vb.state = VIDEOBUF_NEEDS_INIT; buf->vb.state = VIDEOBUF_NEEDS_INIT;
......
...@@ -87,6 +87,16 @@ struct videobuf_dma_sg_memory { ...@@ -87,6 +87,16 @@ struct videobuf_dma_sg_memory {
struct videobuf_dmabuf dma; struct videobuf_dmabuf dma;
}; };
/*
* Scatter-gather DMA buffer API.
*
* These functions provide a simple way to create a page list and a
* scatter-gather list from a kernel, userspace of physical address and map the
* memory for DMA operation.
*
* Despite the name, this is totally unrelated to videobuf, except that
* videobuf-dma-sg uses the same API internally.
*/
void videobuf_dma_init(struct videobuf_dmabuf *dma); void videobuf_dma_init(struct videobuf_dmabuf *dma);
int videobuf_dma_init_user(struct videobuf_dmabuf *dma, int direction, int videobuf_dma_init_user(struct videobuf_dmabuf *dma, int direction,
unsigned long data, unsigned long size); unsigned long data, unsigned long size);
...@@ -96,8 +106,8 @@ int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction, ...@@ -96,8 +106,8 @@ int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction,
dma_addr_t addr, int nr_pages); dma_addr_t addr, int nr_pages);
int videobuf_dma_free(struct videobuf_dmabuf *dma); int videobuf_dma_free(struct videobuf_dmabuf *dma);
int videobuf_dma_map(struct videobuf_queue *q, struct videobuf_dmabuf *dma); int videobuf_dma_map(struct device *dev, struct videobuf_dmabuf *dma);
int videobuf_dma_unmap(struct videobuf_queue *q, struct videobuf_dmabuf *dma); int videobuf_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma);
struct videobuf_dmabuf *videobuf_to_dma(struct videobuf_buffer *buf); struct videobuf_dmabuf *videobuf_to_dma(struct videobuf_buffer *buf);
void *videobuf_sg_alloc(size_t size); void *videobuf_sg_alloc(size_t size);
...@@ -111,11 +121,5 @@ void videobuf_queue_sg_init(struct videobuf_queue *q, ...@@ -111,11 +121,5 @@ void videobuf_queue_sg_init(struct videobuf_queue *q,
unsigned int msize, unsigned int msize,
void *priv); void *priv);
/*FIXME: these variants are used only on *-alsa code, where videobuf is
* used without queue
*/
int videobuf_sg_dma_map(struct device *dev, struct videobuf_dmabuf *dma);
int videobuf_sg_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma);
#endif /* _VIDEOBUF_DMA_SG_H */ #endif /* _VIDEOBUF_DMA_SG_H */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册