Commit c1accaa2 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

V4L/DVB (6252): Adapt drivers to use the newer videobuf modules

PCI-dependent videobuf_foo methods were renamed as videobuf_pci_foo.

Also, videobuf_dmabuf is now part of videobuf-dma-sg private struct.
So, to access it, a subroutine call is needed.

This patch renames all occurences of those function calls to be
consistent with the video-buf split.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
http://thread.gmane.org/gmane.comp.video.video4linux/34978/focus=34981Reviewed-by: default avatarRicardo Cerqueira <v4l@cerqueira.org>
parent 7a7d9a89
...@@ -150,7 +150,7 @@ Some very frequently asked questions about linuxtv-dvb ...@@ -150,7 +150,7 @@ Some very frequently asked questions about linuxtv-dvb
- saa7146_vv: SAA7146 video and vbi functions. These are only needed - saa7146_vv: SAA7146 video and vbi functions. These are only needed
for full-featured cards. for full-featured cards.
- video-buf: capture helper module for the saa7146_vv driver. This - videobuf-dma-sg: capture helper module for the saa7146_vv driver. This
one is responsible to handle capture buffers. one is responsible to handle capture buffers.
- dvb-ttpci: The main driver for AV7110 based, full-featured - dvb-ttpci: The main driver for AV7110 based, full-featured
......
...@@ -126,8 +126,12 @@ config TUNER_SIMPLE ...@@ -126,8 +126,12 @@ config TUNER_SIMPLE
endif # VIDEO_TUNER_CUSTOMIZE endif # VIDEO_TUNER_CUSTOMIZE
config VIDEO_BUF config VIDEOBUF_GEN
tristate
config VIDEOBUF_DMA_SG
depends on PCI depends on PCI
select VIDEOBUF_GEN
tristate tristate
config VIDEO_BUF_DVB config VIDEO_BUF_DVB
......
...@@ -5,5 +5,5 @@ config VIDEO_SAA7146 ...@@ -5,5 +5,5 @@ config VIDEO_SAA7146
config VIDEO_SAA7146_VV config VIDEO_SAA7146_VV
tristate tristate
depends on VIDEO_DEV depends on VIDEO_DEV
select VIDEO_BUF select VIDEOBUF_DMA_SG
select VIDEO_SAA7146 select VIDEO_SAA7146
...@@ -100,7 +100,7 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop) ...@@ -100,7 +100,7 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop)
* general helper functions * general helper functions
****************************************************************************/ ****************************************************************************/
/* this is videobuf_vmalloc_to_sg() from video-buf.c /* this is videobuf_vmalloc_to_sg() from videobuf-dma-sg.c
make sure virt has been allocated with vmalloc_32(), otherwise the BUG() make sure virt has been allocated with vmalloc_32(), otherwise the BUG()
may be triggered on highmem machines */ may be triggered on highmem machines */
static struct scatterlist* vmalloc_to_sg(unsigned char *virt, int nr_pages) static struct scatterlist* vmalloc_to_sg(unsigned char *virt, int nr_pages)
......
...@@ -53,13 +53,14 @@ void saa7146_res_free(struct saa7146_fh *fh, unsigned int bits) ...@@ -53,13 +53,14 @@ void saa7146_res_free(struct saa7146_fh *fh, unsigned int bits)
void saa7146_dma_free(struct saa7146_dev *dev,struct videobuf_queue *q, void saa7146_dma_free(struct saa7146_dev *dev,struct videobuf_queue *q,
struct saa7146_buf *buf) struct saa7146_buf *buf)
{ {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
DEB_EE(("dev:%p, buf:%p\n",dev,buf)); DEB_EE(("dev:%p, buf:%p\n",dev,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, &buf->vb.dma); videobuf_dma_unmap(q, dma);
videobuf_dma_free(&buf->vb.dma); videobuf_dma_free(dma);
buf->vb.state = STATE_NEEDS_INIT; buf->vb.state = STATE_NEEDS_INIT;
} }
......
...@@ -165,7 +165,7 @@ static void saa7146_set_vbi_capture(struct saa7146_dev *dev, struct saa7146_buf ...@@ -165,7 +165,7 @@ static void saa7146_set_vbi_capture(struct saa7146_dev *dev, struct saa7146_buf
/* we don't wait here for the first field anymore. this is different from the video /* we don't wait here for the first field anymore. this is different from the video
capture and might cause that the first buffer is only half filled (with only capture and might cause that the first buffer is only half filled (with only
one field). but since this is some sort of streaming data, this is not that negative. one field). but since this is some sort of streaming data, this is not that negative.
but by doing this, we can use the whole engine from video-buf.c... */ but by doing this, we can use the whole engine from videobuf-dma-sg.c... */
/* /*
WRITE_RPS1(CMD_PAUSE | CMD_OAN | CMD_SIG1 | e_wait); WRITE_RPS1(CMD_PAUSE | CMD_OAN | CMD_SIG1 | e_wait);
...@@ -239,6 +239,8 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e ...@@ -239,6 +239,8 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e
saa7146_dma_free(dev,q,buf); saa7146_dma_free(dev,q,buf);
if (STATE_NEEDS_INIT == buf->vb.state) { if (STATE_NEEDS_INIT == buf->vb.state) {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
buf->vb.width = llength; buf->vb.width = llength;
buf->vb.height = lines; buf->vb.height = lines;
buf->vb.size = size; buf->vb.size = size;
...@@ -250,7 +252,8 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e ...@@ -250,7 +252,8 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e
err = videobuf_iolock(q,&buf->vb, NULL); err = videobuf_iolock(q,&buf->vb, NULL);
if (err) if (err)
goto oops; goto oops;
err = saa7146_pgtable_build_single(dev->pci, &buf->pt[2], buf->vb.dma.sglist, buf->vb.dma.sglen); err = saa7146_pgtable_build_single(dev->pci, &buf->pt[2],
dma->sglist, dma->sglen);
if (0 != err) if (0 != err)
return err; return err;
} }
...@@ -404,7 +407,7 @@ static int vbi_open(struct saa7146_dev *dev, struct file *file) ...@@ -404,7 +407,7 @@ static int vbi_open(struct saa7146_dev *dev, struct file *file)
fh->vbi_fmt.start[1] = 312; fh->vbi_fmt.start[1] = 312;
fh->vbi_fmt.count[1] = 16; fh->vbi_fmt.count[1] = 16;
videobuf_queue_init(&fh->vbi_q, &vbi_qops, videobuf_queue_pci_init(&fh->vbi_q, &vbi_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VBI_CAPTURE, V4L2_BUF_TYPE_VBI_CAPTURE,
V4L2_FIELD_SEQ_TB, // FIXME: does this really work? V4L2_FIELD_SEQ_TB, // FIXME: does this really work?
......
...@@ -594,8 +594,9 @@ static int set_control(struct saa7146_fh *fh, struct v4l2_control *c) ...@@ -594,8 +594,9 @@ static int set_control(struct saa7146_fh *fh, struct v4l2_control *c)
static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *buf) static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *buf)
{ {
struct pci_dev *pci = dev->pci; struct pci_dev *pci = dev->pci;
struct scatterlist *list = buf->vb.dma.sglist; struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
int length = buf->vb.dma.sglen; struct scatterlist *list = dma->sglist;
int length = dma->sglen;
struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat);
DEB_EE(("dev:%p, buf:%p, sg_len:%d\n",dev,buf,length)); DEB_EE(("dev:%p, buf:%p, sg_len:%d\n",dev,buf,length));
...@@ -655,7 +656,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu ...@@ -655,7 +656,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu
/* if we have a user buffer, the first page may not be /* if we have a user buffer, the first page may not be
aligned to a page boundary. */ aligned to a page boundary. */
pt1->offset = buf->vb.dma.sglist->offset; pt1->offset = list->offset;
pt2->offset = pt1->offset+o1; pt2->offset = pt1->offset+o1;
pt3->offset = pt1->offset+o2; pt3->offset = pt1->offset+o2;
...@@ -1411,7 +1412,7 @@ static int video_open(struct saa7146_dev *dev, struct file *file) ...@@ -1411,7 +1412,7 @@ static int video_open(struct saa7146_dev *dev, struct file *file)
sfmt = format_by_fourcc(dev,fh->video_fmt.pixelformat); sfmt = format_by_fourcc(dev,fh->video_fmt.pixelformat);
fh->video_fmt.sizeimage = (fh->video_fmt.width * fh->video_fmt.height * sfmt->depth)/8; fh->video_fmt.sizeimage = (fh->video_fmt.width * fh->video_fmt.height * sfmt->depth)/8;
videobuf_queue_init(&fh->video_q, &video_qops, videobuf_queue_pci_init(&fh->video_q, &video_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_INTERLACED, V4L2_FIELD_INTERLACED,
......
...@@ -364,7 +364,7 @@ endmenu # encoder / decoder chips ...@@ -364,7 +364,7 @@ endmenu # encoder / decoder chips
config VIDEO_VIVI config VIDEO_VIVI
tristate "Virtual Video Driver" tristate "Virtual Video Driver"
depends on VIDEO_V4L2 && !SPARC32 && !SPARC64 && PCI depends on VIDEO_V4L2 && !SPARC32 && !SPARC64 && PCI
select VIDEO_BUF select VIDEOBUF_DMA_SG
default n default n
---help--- ---help---
Enables a virtual video driver. This device shows a color bar Enables a virtual video driver. This device shows a color bar
......
...@@ -87,7 +87,8 @@ obj-$(CONFIG_TUNER_TDA8290) += tda8290.o ...@@ -87,7 +87,8 @@ obj-$(CONFIG_TUNER_TDA8290) += tda8290.o
obj-$(CONFIG_TUNER_TEA5767) += tea5767.o obj-$(CONFIG_TUNER_TEA5767) += tea5767.o
obj-$(CONFIG_TUNER_TEA5761) += tea5761.o obj-$(CONFIG_TUNER_TEA5761) += tea5761.o
obj-$(CONFIG_VIDEO_BUF) += video-buf.o obj-$(CONFIG_VIDEOBUF_GEN) += videobuf-core.o
obj-$(CONFIG_VIDEOBUF_DMA_SG) += videobuf-dma-sg.o
obj-$(CONFIG_VIDEO_BUF_DVB) += video-buf-dvb.o obj-$(CONFIG_VIDEO_BUF_DVB) += video-buf-dvb.o
obj-$(CONFIG_VIDEO_BTCX) += btcx-risc.o obj-$(CONFIG_VIDEO_BTCX) += btcx-risc.o
obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
......
...@@ -4,7 +4,7 @@ config VIDEO_BT848 ...@@ -4,7 +4,7 @@ config VIDEO_BT848
select I2C_ALGOBIT select I2C_ALGOBIT
select FW_LOADER select FW_LOADER
select VIDEO_BTCX select VIDEO_BTCX
select VIDEO_BUF select VIDEOBUF_DMA_SG
select VIDEO_IR select VIDEO_IR
select VIDEO_TUNER select VIDEO_TUNER
select VIDEO_TVEEPROM select VIDEO_TVEEPROM
......
...@@ -2582,7 +2582,7 @@ static int setup_window(struct bttv_fh *fh, struct bttv *btv, ...@@ -2582,7 +2582,7 @@ static int setup_window(struct bttv_fh *fh, struct bttv *btv,
if (check_btres(fh, RESOURCE_OVERLAY)) { if (check_btres(fh, RESOURCE_OVERLAY)) {
struct bttv_buffer *new; struct bttv_buffer *new;
new = videobuf_alloc(sizeof(*new)); new = videobuf_pci_alloc(sizeof(*new));
new->crop = btv->crop[!!fh->do_crop].rect; new->crop = btv->crop[!!fh->do_crop].rect;
bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new); bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new);
retval = bttv_switch_overlay(btv,fh,new); retval = bttv_switch_overlay(btv,fh,new);
...@@ -3048,7 +3048,7 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file, ...@@ -3048,7 +3048,7 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
mutex_lock(&fh->cap.lock); mutex_lock(&fh->cap.lock);
if (*on) { if (*on) {
fh->ov.tvnorm = btv->tvnorm; fh->ov.tvnorm = btv->tvnorm;
new = videobuf_alloc(sizeof(*new)); new = videobuf_pci_alloc(sizeof(*new));
new->crop = btv->crop[!!fh->do_crop].rect; new->crop = btv->crop[!!fh->do_crop].rect;
bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new); bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new);
} else { } else {
...@@ -3141,9 +3141,12 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file, ...@@ -3141,9 +3141,12 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
retval = -EIO; retval = -EIO;
/* fall through */ /* fall through */
case STATE_DONE: case STATE_DONE:
videobuf_dma_sync(&fh->cap,&buf->vb.dma); {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
videobuf_dma_sync(&fh->cap,dma);
bttv_dma_free(&fh->cap,btv,buf); bttv_dma_free(&fh->cap,btv,buf);
break; break;
}
default: default:
retval = -EINVAL; retval = -EINVAL;
break; break;
...@@ -3337,7 +3340,7 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file, ...@@ -3337,7 +3340,7 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
if (check_btres(fh, RESOURCE_OVERLAY)) { if (check_btres(fh, RESOURCE_OVERLAY)) {
struct bttv_buffer *new; struct bttv_buffer *new;
new = videobuf_alloc(sizeof(*new)); new = videobuf_pci_alloc(sizeof(*new));
new->crop = btv->crop[!!fh->do_crop].rect; new->crop = btv->crop[!!fh->do_crop].rect;
bttv_overlay_risc(btv,&fh->ov,fh->ovfmt,new); bttv_overlay_risc(btv,&fh->ov,fh->ovfmt,new);
retval = bttv_switch_overlay(btv,fh,new); retval = bttv_switch_overlay(btv,fh,new);
...@@ -3696,7 +3699,7 @@ static unsigned int bttv_poll(struct file *file, poll_table *wait) ...@@ -3696,7 +3699,7 @@ static unsigned int bttv_poll(struct file *file, poll_table *wait)
mutex_unlock(&fh->cap.lock); mutex_unlock(&fh->cap.lock);
return POLLERR; return POLLERR;
} }
fh->cap.read_buf = videobuf_alloc(fh->cap.msize); fh->cap.read_buf = videobuf_pci_alloc(fh->cap.msize);
if (NULL == fh->cap.read_buf) { if (NULL == fh->cap.read_buf) {
mutex_unlock(&fh->cap.lock); mutex_unlock(&fh->cap.lock);
return POLLERR; return POLLERR;
...@@ -3763,13 +3766,13 @@ static int bttv_open(struct inode *inode, struct file *file) ...@@ -3763,13 +3766,13 @@ static int bttv_open(struct inode *inode, struct file *file)
fh->ov.setup_ok = 0; fh->ov.setup_ok = 0;
v4l2_prio_open(&btv->prio,&fh->prio); v4l2_prio_open(&btv->prio,&fh->prio);
videobuf_queue_init(&fh->cap, &bttv_video_qops, videobuf_queue_pci_init(&fh->cap, &bttv_video_qops,
btv->c.pci, &btv->s_lock, btv->c.pci, &btv->s_lock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_INTERLACED, V4L2_FIELD_INTERLACED,
sizeof(struct bttv_buffer), sizeof(struct bttv_buffer),
fh); fh);
videobuf_queue_init(&fh->vbi, &bttv_vbi_qops, videobuf_queue_pci_init(&fh->vbi, &bttv_vbi_qops,
btv->c.pci, &btv->s_lock, btv->c.pci, &btv->s_lock,
V4L2_BUF_TYPE_VBI_CAPTURE, V4L2_BUF_TYPE_VBI_CAPTURE,
V4L2_FIELD_SEQ_TB, V4L2_FIELD_SEQ_TB,
......
...@@ -574,10 +574,12 @@ bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc, ...@@ -574,10 +574,12 @@ bttv_risc_hook(struct bttv *btv, int slot, struct btcx_riscmem *risc,
void void
bttv_dma_free(struct videobuf_queue *q,struct bttv *btv, struct bttv_buffer *buf) bttv_dma_free(struct videobuf_queue *q,struct bttv *btv, struct bttv_buffer *buf)
{ {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb,0,0); videobuf_waiton(&buf->vb,0,0);
videobuf_dma_unmap(q, &buf->vb.dma); videobuf_dma_unmap(q, dma);
videobuf_dma_free(&buf->vb.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);
buf->vb.state = STATE_NEEDS_INIT; buf->vb.state = STATE_NEEDS_INIT;
...@@ -699,6 +701,7 @@ int ...@@ -699,6 +701,7 @@ int
bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf) bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf)
{ {
const struct bttv_tvnorm *tvnorm = bttv_tvnorms + buf->tvnorm; const struct bttv_tvnorm *tvnorm = bttv_tvnorms + buf->tvnorm;
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
dprintk(KERN_DEBUG dprintk(KERN_DEBUG
"bttv%d: buffer field: %s format: %s size: %dx%d\n", "bttv%d: buffer field: %s format: %s size: %dx%d\n",
...@@ -716,25 +719,25 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf) ...@@ -716,25 +719,25 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf)
switch (buf->vb.field) { switch (buf->vb.field) {
case V4L2_FIELD_TOP: case V4L2_FIELD_TOP:
bttv_risc_packed(btv,&buf->top,buf->vb.dma.sglist, bttv_risc_packed(btv,&buf->top,dma->sglist,
/* offset */ 0,bpl, /* offset */ 0,bpl,
/* padding */ 0,/* skip_lines */ 0, /* padding */ 0,/* skip_lines */ 0,
buf->vb.height); buf->vb.height);
break; break;
case V4L2_FIELD_BOTTOM: case V4L2_FIELD_BOTTOM:
bttv_risc_packed(btv,&buf->bottom,buf->vb.dma.sglist, bttv_risc_packed(btv,&buf->bottom,dma->sglist,
0,bpl,0,0,buf->vb.height); 0,bpl,0,0,buf->vb.height);
break; break;
case V4L2_FIELD_INTERLACED: case V4L2_FIELD_INTERLACED:
bttv_risc_packed(btv,&buf->top,buf->vb.dma.sglist, bttv_risc_packed(btv,&buf->top,dma->sglist,
0,bpl,bpl,0,buf->vb.height >> 1); 0,bpl,bpl,0,buf->vb.height >> 1);
bttv_risc_packed(btv,&buf->bottom,buf->vb.dma.sglist, bttv_risc_packed(btv,&buf->bottom,dma->sglist,
bpl,bpl,bpl,0,buf->vb.height >> 1); bpl,bpl,bpl,0,buf->vb.height >> 1);
break; break;
case V4L2_FIELD_SEQ_TB: case V4L2_FIELD_SEQ_TB:
bttv_risc_packed(btv,&buf->top,buf->vb.dma.sglist, bttv_risc_packed(btv,&buf->top,dma->sglist,
0,bpl,0,0,buf->vb.height >> 1); 0,bpl,0,0,buf->vb.height >> 1);
bttv_risc_packed(btv,&buf->bottom,buf->vb.dma.sglist, bttv_risc_packed(btv,&buf->bottom,dma->sglist,
bpf,bpl,0,0,buf->vb.height >> 1); bpf,bpl,0,0,buf->vb.height >> 1);
break; break;
default: default:
...@@ -767,7 +770,7 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf) ...@@ -767,7 +770,7 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf)
bttv_calc_geo(btv,&buf->geo,buf->vb.width, bttv_calc_geo(btv,&buf->geo,buf->vb.width,
buf->vb.height,/* both_fields */ 0, buf->vb.height,/* both_fields */ 0,
tvnorm,&buf->crop); tvnorm,&buf->crop);
bttv_risc_planar(btv, &buf->top, buf->vb.dma.sglist, bttv_risc_planar(btv, &buf->top, dma->sglist,
0,buf->vb.width,0,buf->vb.height, 0,buf->vb.width,0,buf->vb.height,
uoffset,voffset,buf->fmt->hshift, uoffset,voffset,buf->fmt->hshift,
buf->fmt->vshift,0); buf->fmt->vshift,0);
...@@ -776,7 +779,7 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf) ...@@ -776,7 +779,7 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf)
bttv_calc_geo(btv,&buf->geo,buf->vb.width, bttv_calc_geo(btv,&buf->geo,buf->vb.width,
buf->vb.height,0, buf->vb.height,0,
tvnorm,&buf->crop); tvnorm,&buf->crop);
bttv_risc_planar(btv, &buf->bottom, buf->vb.dma.sglist, bttv_risc_planar(btv, &buf->bottom, dma->sglist,
0,buf->vb.width,0,buf->vb.height, 0,buf->vb.width,0,buf->vb.height,
uoffset,voffset,buf->fmt->hshift, uoffset,voffset,buf->fmt->hshift,
buf->fmt->vshift,0); buf->fmt->vshift,0);
...@@ -789,14 +792,14 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf) ...@@ -789,14 +792,14 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf)
ypadding = buf->vb.width; ypadding = buf->vb.width;
cpadding = buf->vb.width >> buf->fmt->hshift; cpadding = buf->vb.width >> buf->fmt->hshift;
bttv_risc_planar(btv,&buf->top, bttv_risc_planar(btv,&buf->top,
buf->vb.dma.sglist, dma->sglist,
0,buf->vb.width,ypadding,lines, 0,buf->vb.width,ypadding,lines,
uoffset,voffset, uoffset,voffset,
buf->fmt->hshift, buf->fmt->hshift,
buf->fmt->vshift, buf->fmt->vshift,
cpadding); cpadding);
bttv_risc_planar(btv,&buf->bottom, bttv_risc_planar(btv,&buf->bottom,
buf->vb.dma.sglist, dma->sglist,
ypadding,buf->vb.width,ypadding,lines, ypadding,buf->vb.width,ypadding,lines,
uoffset+cpadding, uoffset+cpadding,
voffset+cpadding, voffset+cpadding,
...@@ -812,7 +815,7 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf) ...@@ -812,7 +815,7 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf)
ypadding = buf->vb.width; ypadding = buf->vb.width;
cpadding = buf->vb.width >> buf->fmt->hshift; cpadding = buf->vb.width >> buf->fmt->hshift;
bttv_risc_planar(btv,&buf->top, bttv_risc_planar(btv,&buf->top,
buf->vb.dma.sglist, dma->sglist,
0,buf->vb.width,0,lines, 0,buf->vb.width,0,lines,
uoffset >> 1, uoffset >> 1,
voffset >> 1, voffset >> 1,
...@@ -820,7 +823,7 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf) ...@@ -820,7 +823,7 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf)
buf->fmt->vshift, buf->fmt->vshift,
0); 0);
bttv_risc_planar(btv,&buf->bottom, bttv_risc_planar(btv,&buf->bottom,
buf->vb.dma.sglist, dma->sglist,
lines * ypadding,buf->vb.width,0,lines, lines * ypadding,buf->vb.width,0,lines,
lines * ypadding + (uoffset >> 1), lines * ypadding + (uoffset >> 1),
lines * ypadding + (voffset >> 1), lines * ypadding + (voffset >> 1),
...@@ -839,10 +842,10 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf) ...@@ -839,10 +842,10 @@ bttv_buffer_risc(struct bttv *btv, struct bttv_buffer *buf)
buf->vb.field = V4L2_FIELD_SEQ_TB; buf->vb.field = V4L2_FIELD_SEQ_TB;
bttv_calc_geo(btv,&buf->geo,tvnorm->swidth,tvnorm->sheight, bttv_calc_geo(btv,&buf->geo,tvnorm->swidth,tvnorm->sheight,
1,tvnorm,&buf->crop); 1,tvnorm,&buf->crop);
bttv_risc_packed(btv, &buf->top, buf->vb.dma.sglist, bttv_risc_packed(btv, &buf->top, dma->sglist,
/* offset */ 0, RAW_BPL, /* padding */ 0, /* offset */ 0, RAW_BPL, /* padding */ 0,
/* skip_lines */ 0, RAW_LINES); /* skip_lines */ 0, RAW_LINES);
bttv_risc_packed(btv, &buf->bottom, buf->vb.dma.sglist, bttv_risc_packed(btv, &buf->bottom, dma->sglist,
buf->vb.size/2 , RAW_BPL, 0, 0, RAW_LINES); buf->vb.size/2 , RAW_BPL, 0, 0, RAW_LINES);
} }
......
...@@ -150,13 +150,14 @@ static int vbi_buffer_prepare(struct videobuf_queue *q, ...@@ -150,13 +150,14 @@ static int vbi_buffer_prepare(struct videobuf_queue *q,
if (redo_dma_risc) { if (redo_dma_risc) {
unsigned int bpl, padding, offset; unsigned int bpl, padding, offset;
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
bpl = 2044; /* max. vbipack */ bpl = 2044; /* max. vbipack */
padding = VBI_BPL - bpl; padding = VBI_BPL - bpl;
if (fh->vbi_fmt.fmt.count[0] > 0) { if (fh->vbi_fmt.fmt.count[0] > 0) {
rc = bttv_risc_packed(btv, &buf->top, rc = bttv_risc_packed(btv, &buf->top,
buf->vb.dma.sglist, dma->sglist,
/* offset */ 0, bpl, /* offset */ 0, bpl,
padding, skip_lines0, padding, skip_lines0,
fh->vbi_fmt.fmt.count[0]); fh->vbi_fmt.fmt.count[0]);
...@@ -168,7 +169,7 @@ static int vbi_buffer_prepare(struct videobuf_queue *q, ...@@ -168,7 +169,7 @@ static int vbi_buffer_prepare(struct videobuf_queue *q,
offset = fh->vbi_fmt.fmt.count[0] * VBI_BPL; offset = fh->vbi_fmt.fmt.count[0] * VBI_BPL;
rc = bttv_risc_packed(btv, &buf->bottom, rc = bttv_risc_packed(btv, &buf->bottom,
buf->vb.dma.sglist, dma->sglist,
offset, bpl, offset, bpl,
padding, skip_lines1, padding, skip_lines1,
fh->vbi_fmt.fmt.count[1]); fh->vbi_fmt.fmt.count[1]);
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
#include <linux/device.h> #include <linux/device.h>
#include <media/video-buf.h> #include <media/videobuf-dma-sg.h>
#include <media/tuner.h> #include <media/tuner.h>
#include <media/tveeprom.h> #include <media/tveeprom.h>
#include <media/ir-common.h> #include <media/ir-common.h>
......
...@@ -1197,7 +1197,7 @@ static int cafe_setup_siobuf(struct cafe_camera *cam, int index) ...@@ -1197,7 +1197,7 @@ static int cafe_setup_siobuf(struct cafe_camera *cam, int index)
buf->v4lbuf.field = V4L2_FIELD_NONE; buf->v4lbuf.field = V4L2_FIELD_NONE;
buf->v4lbuf.memory = V4L2_MEMORY_MMAP; buf->v4lbuf.memory = V4L2_MEMORY_MMAP;
/* /*
* Offset: must be 32-bit even on a 64-bit system. video-buf * Offset: must be 32-bit even on a 64-bit system. videobuf-dma-sg
* just uses the length times the index, but the spec warns * just uses the length times the index, but the spec warns
* against doing just that - vma merging problems. So we * against doing just that - vma merging problems. So we
* leave a gap between each pair of buffers. * leave a gap between each pair of buffers.
......
...@@ -4,7 +4,7 @@ config VIDEO_CX88 ...@@ -4,7 +4,7 @@ config VIDEO_CX88
select I2C_ALGOBIT select I2C_ALGOBIT
select FW_LOADER select FW_LOADER
select VIDEO_BTCX select VIDEO_BTCX
select VIDEO_BUF select VIDEOBUF_DMA_SG
select VIDEO_TUNER select VIDEO_TUNER
select VIDEO_TVEEPROM select VIDEO_TVEEPROM
select VIDEO_IR select VIDEO_IR
......
...@@ -72,7 +72,7 @@ struct cx88_audio_dev { ...@@ -72,7 +72,7 @@ struct cx88_audio_dev {
unsigned int period_size; unsigned int period_size;
unsigned int num_periods; unsigned int num_periods;
struct videobuf_dmabuf dma_risc; struct videobuf_dmabuf *dma_risc;
struct cx88_buffer *buf; struct cx88_buffer *buf;
...@@ -282,11 +282,12 @@ static int dsp_buffer_free(snd_cx88_card_t *chip) ...@@ -282,11 +282,12 @@ 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_pci_dma_unmap(chip->pci, &chip->dma_risc); videobuf_pci_dma_unmap(chip->pci, 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);
chip->dma_risc = NULL;
chip->dma_size = 0; chip->dma_size = 0;
return 0; return 0;
...@@ -366,6 +367,8 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream, ...@@ -366,6 +367,8 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream,
struct snd_pcm_hw_params * hw_params) struct snd_pcm_hw_params * hw_params)
{ {
snd_cx88_card_t *chip = snd_pcm_substream_chip(substream); snd_cx88_card_t *chip = snd_pcm_substream_chip(substream);
struct videobuf_dmabuf *dma;
struct cx88_buffer *buf; struct cx88_buffer *buf;
int ret; int ret;
...@@ -381,7 +384,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream, ...@@ -381,7 +384,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream,
BUG_ON(!chip->dma_size); BUG_ON(!chip->dma_size);
BUG_ON(chip->num_periods & (chip->num_periods-1)); BUG_ON(chip->num_periods & (chip->num_periods-1));
buf = kzalloc(sizeof(*buf), GFP_KERNEL); buf = videobuf_pci_alloc(sizeof(*buf));
if (NULL == buf) if (NULL == buf)
return -ENOMEM; return -ENOMEM;
...@@ -392,17 +395,18 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream, ...@@ -392,17 +395,18 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream,
buf->vb.height = chip->num_periods; buf->vb.height = chip->num_periods;
buf->vb.size = chip->dma_size; buf->vb.size = chip->dma_size;
videobuf_dma_init(&buf->vb.dma); dma=videobuf_to_dma(&buf->vb);
ret = videobuf_dma_init_kernel(&buf->vb.dma, PCI_DMA_FROMDEVICE, videobuf_dma_init(dma);
ret = videobuf_dma_init_kernel(dma, PCI_DMA_FROMDEVICE,
(PAGE_ALIGN(buf->vb.size) >> PAGE_SHIFT)); (PAGE_ALIGN(buf->vb.size) >> PAGE_SHIFT));
if (ret < 0) if (ret < 0)
goto error; goto error;
ret = videobuf_pci_dma_map(chip->pci,&buf->vb.dma); ret = videobuf_pci_dma_map(chip->pci,dma);
if (ret < 0) if (ret < 0)
goto error; goto error;
ret = cx88_risc_databuffer(chip->pci, &buf->risc, buf->vb.dma.sglist, ret = cx88_risc_databuffer(chip->pci, &buf->risc, dma->sglist,
buf->vb.width, buf->vb.height, 1); buf->vb.width, buf->vb.height, 1);
if (ret < 0) if (ret < 0)
goto error; goto error;
...@@ -414,9 +418,9 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream, ...@@ -414,9 +418,9 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream,
buf->vb.state = STATE_PREPARED; buf->vb.state = STATE_PREPARED;
chip->buf = buf; chip->buf = buf;
chip->dma_risc = buf->vb.dma; chip->dma_risc = dma;
substream->runtime->dma_area = chip->dma_risc.vmalloc; substream->runtime->dma_area = chip->dma_risc->vmalloc;
substream->runtime->dma_bytes = chip->dma_size; substream->runtime->dma_bytes = chip->dma_size;
substream->runtime->dma_addr = 0; substream->runtime->dma_addr = 0;
return 0; return 0;
......
...@@ -1111,7 +1111,7 @@ static int mpeg_open(struct inode *inode, struct file *file) ...@@ -1111,7 +1111,7 @@ static int mpeg_open(struct inode *inode, struct file *file)
file->private_data = fh; file->private_data = fh;
fh->dev = dev; fh->dev = dev;
videobuf_queue_init(&fh->mpegq, &blackbird_qops, videobuf_queue_pci_init(&fh->mpegq, &blackbird_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_INTERLACED, V4L2_FIELD_INTERLACED,
......
...@@ -213,10 +213,12 @@ int cx88_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc, ...@@ -213,10 +213,12 @@ int cx88_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc,
void void
cx88_free_buffer(struct videobuf_queue *q, struct cx88_buffer *buf) cx88_free_buffer(struct videobuf_queue *q, struct cx88_buffer *buf)
{ {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb,0,0); videobuf_waiton(&buf->vb,0,0);
videobuf_dma_unmap(q, &buf->vb.dma); videobuf_dma_unmap(q, dma);
videobuf_dma_free(&buf->vb.dma); videobuf_dma_free(dma);
btcx_riscmem_free((struct pci_dev *)q->dev, &buf->risc); btcx_riscmem_free((struct pci_dev *)q->dev, &buf->risc);
buf->vb.state = STATE_NEEDS_INIT; buf->vb.state = STATE_NEEDS_INIT;
} }
......
...@@ -710,7 +710,7 @@ static int cx8802_dvb_probe(struct cx8802_driver *drv) ...@@ -710,7 +710,7 @@ static int cx8802_dvb_probe(struct cx8802_driver *drv)
/* dvb stuff */ /* dvb stuff */
printk(KERN_INFO "%s/2: cx2388x based DVB/ATSC card\n", core->name); printk(KERN_INFO "%s/2: cx2388x based DVB/ATSC card\n", core->name);
videobuf_queue_init(&dev->dvb.dvbq, &dvb_qops, videobuf_queue_pci_init(&dev->dvb.dvbq, &dvb_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_TOP, V4L2_FIELD_TOP,
......
...@@ -237,6 +237,7 @@ int cx8802_buf_prepare(struct videobuf_queue *q, struct cx8802_dev *dev, ...@@ -237,6 +237,7 @@ int cx8802_buf_prepare(struct videobuf_queue *q, struct cx8802_dev *dev,
struct cx88_buffer *buf, enum v4l2_field field) struct cx88_buffer *buf, enum v4l2_field field)
{ {
int size = dev->ts_packet_size * dev->ts_packet_count; int size = dev->ts_packet_size * dev->ts_packet_count;
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
int rc; int rc;
dprintk(1, "%s: %p\n", __FUNCTION__, buf); dprintk(1, "%s: %p\n", __FUNCTION__, buf);
...@@ -252,7 +253,7 @@ int cx8802_buf_prepare(struct videobuf_queue *q, struct cx8802_dev *dev, ...@@ -252,7 +253,7 @@ int cx8802_buf_prepare(struct videobuf_queue *q, struct cx8802_dev *dev,
if (0 != (rc = videobuf_iolock(q,&buf->vb,NULL))) if (0 != (rc = videobuf_iolock(q,&buf->vb,NULL)))
goto fail; goto fail;
cx88_risc_databuffer(dev->pci, &buf->risc, cx88_risc_databuffer(dev->pci, &buf->risc,
buf->vb.dma.sglist, dma->sglist,
buf->vb.width, buf->vb.height, 0); buf->vb.width, buf->vb.height, 0);
} }
buf->vb.state = STATE_PREPARED; buf->vb.state = STATE_PREPARED;
......
...@@ -172,6 +172,7 @@ vbi_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, ...@@ -172,6 +172,7 @@ vbi_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
return -EINVAL; return -EINVAL;
if (STATE_NEEDS_INIT == buf->vb.state) { if (STATE_NEEDS_INIT == buf->vb.state) {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
buf->vb.width = VBI_LINE_LENGTH; buf->vb.width = VBI_LINE_LENGTH;
buf->vb.height = VBI_LINE_COUNT; buf->vb.height = VBI_LINE_COUNT;
buf->vb.size = size; buf->vb.size = size;
...@@ -180,7 +181,7 @@ vbi_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, ...@@ -180,7 +181,7 @@ vbi_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
if (0 != (rc = videobuf_iolock(q,&buf->vb,NULL))) if (0 != (rc = videobuf_iolock(q,&buf->vb,NULL)))
goto fail; goto fail;
cx88_risc_buffer(dev->pci, &buf->risc, cx88_risc_buffer(dev->pci, &buf->risc,
buf->vb.dma.sglist, dma->sglist,
0, buf->vb.width * buf->vb.height, 0, buf->vb.width * buf->vb.height,
buf->vb.width, 0, buf->vb.width, 0,
buf->vb.height); buf->vb.height);
......
...@@ -534,6 +534,7 @@ buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, ...@@ -534,6 +534,7 @@ buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
struct cx8800_dev *dev = fh->dev; struct cx8800_dev *dev = fh->dev;
struct cx88_core *core = dev->core; struct cx88_core *core = dev->core;
struct cx88_buffer *buf = container_of(vb,struct cx88_buffer,vb); struct cx88_buffer *buf = container_of(vb,struct cx88_buffer,vb);
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
int rc, init_buffer = 0; int rc, init_buffer = 0;
BUG_ON(NULL == fh->fmt); BUG_ON(NULL == fh->fmt);
...@@ -566,30 +567,30 @@ buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, ...@@ -566,30 +567,30 @@ buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
switch (buf->vb.field) { switch (buf->vb.field) {
case V4L2_FIELD_TOP: case V4L2_FIELD_TOP:
cx88_risc_buffer(dev->pci, &buf->risc, cx88_risc_buffer(dev->pci, &buf->risc,
buf->vb.dma.sglist, 0, UNSET, dma->sglist, 0, UNSET,
buf->bpl, 0, buf->vb.height); buf->bpl, 0, buf->vb.height);
break; break;
case V4L2_FIELD_BOTTOM: case V4L2_FIELD_BOTTOM:
cx88_risc_buffer(dev->pci, &buf->risc, cx88_risc_buffer(dev->pci, &buf->risc,
buf->vb.dma.sglist, UNSET, 0, dma->sglist, UNSET, 0,
buf->bpl, 0, buf->vb.height); buf->bpl, 0, buf->vb.height);
break; break;
case V4L2_FIELD_INTERLACED: case V4L2_FIELD_INTERLACED:
cx88_risc_buffer(dev->pci, &buf->risc, cx88_risc_buffer(dev->pci, &buf->risc,
buf->vb.dma.sglist, 0, buf->bpl, dma->sglist, 0, buf->bpl,
buf->bpl, buf->bpl, buf->bpl, buf->bpl,
buf->vb.height >> 1); buf->vb.height >> 1);
break; break;
case V4L2_FIELD_SEQ_TB: case V4L2_FIELD_SEQ_TB:
cx88_risc_buffer(dev->pci, &buf->risc, cx88_risc_buffer(dev->pci, &buf->risc,
buf->vb.dma.sglist, dma->sglist,
0, buf->bpl * (buf->vb.height >> 1), 0, buf->bpl * (buf->vb.height >> 1),
buf->bpl, 0, buf->bpl, 0,
buf->vb.height >> 1); buf->vb.height >> 1);
break; break;
case V4L2_FIELD_SEQ_BT: case V4L2_FIELD_SEQ_BT:
cx88_risc_buffer(dev->pci, &buf->risc, cx88_risc_buffer(dev->pci, &buf->risc,
buf->vb.dma.sglist, dma->sglist,
buf->bpl * (buf->vb.height >> 1), 0, buf->bpl * (buf->vb.height >> 1), 0,
buf->bpl, 0, buf->bpl, 0,
buf->vb.height >> 1); buf->vb.height >> 1);
...@@ -752,13 +753,13 @@ static int video_open(struct inode *inode, struct file *file) ...@@ -752,13 +753,13 @@ static int video_open(struct inode *inode, struct file *file)
fh->height = 240; fh->height = 240;
fh->fmt = format_by_fourcc(V4L2_PIX_FMT_BGR24); fh->fmt = format_by_fourcc(V4L2_PIX_FMT_BGR24);
videobuf_queue_init(&fh->vidq, &cx8800_video_qops, videobuf_queue_pci_init(&fh->vidq, &cx8800_video_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_INTERLACED, V4L2_FIELD_INTERLACED,
sizeof(struct cx88_buffer), sizeof(struct cx88_buffer),
fh); fh);
videobuf_queue_init(&fh->vbiq, &cx8800_vbi_qops, videobuf_queue_pci_init(&fh->vbiq, &cx8800_vbi_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VBI_CAPTURE, V4L2_BUF_TYPE_VBI_CAPTURE,
V4L2_FIELD_SEQ_TB, V4L2_FIELD_SEQ_TB,
...@@ -1104,28 +1105,9 @@ static int vidioc_enum_fmt_cap (struct file *file, void *priv, ...@@ -1104,28 +1105,9 @@ static int vidioc_enum_fmt_cap (struct file *file, void *priv,
#ifdef CONFIG_VIDEO_V4L1_COMPAT #ifdef CONFIG_VIDEO_V4L1_COMPAT
static int vidiocgmbuf (struct file *file, void *priv, struct video_mbuf *mbuf) static int vidiocgmbuf (struct file *file, void *priv, struct video_mbuf *mbuf)
{ {
struct cx8800_fh *fh = priv; struct cx8800_fh *fh = priv;
struct videobuf_queue *q;
struct v4l2_requestbuffers req;
unsigned int i;
int err;
q = get_queue(fh); return videobuf_cgmbuf (get_queue(fh), mbuf, 8);
memset(&req,0,sizeof(req));
req.type = q->type;
req.count = 8;
req.memory = V4L2_MEMORY_MMAP;
err = videobuf_reqbufs(q,&req);
if (err < 0)
return err;
mbuf->frames = req.count;
mbuf->size = 0;
for (i = 0; i < mbuf->frames; i++) {
mbuf->offsets[i] = q->bufs[i]->boff;
mbuf->size += q->bufs[i]->bsize;
}
return 0;
} }
#endif #endif
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
#include <media/tuner.h> #include <media/tuner.h>
#include <media/tveeprom.h> #include <media/tveeprom.h>
#include <media/video-buf.h> #include <media/videobuf-dma-sg.h>
#include <media/cx2341x.h> #include <media/cx2341x.h>
#include <media/audiochip.h> #include <media/audiochip.h>
#if defined(CONFIG_VIDEO_BUF_DVB) || defined(CONFIG_VIDEO_BUF_DVB_MODULE) #if defined(CONFIG_VIDEO_BUF_DVB) || defined(CONFIG_VIDEO_BUF_DVB_MODULE)
......
config VIDEO_SAA7134 config VIDEO_SAA7134
tristate "Philips SAA7134 support" tristate "Philips SAA7134 support"
depends on VIDEO_DEV && PCI && I2C depends on VIDEO_DEV && PCI && I2C
select VIDEO_BUF select VIDEOBUF_DMA_SG
select VIDEO_IR select VIDEO_IR
select VIDEO_TUNER select VIDEO_TUNER
select CRC32 select CRC32
......
...@@ -236,9 +236,10 @@ int saa7134_buffer_startpage(struct saa7134_buf *buf) ...@@ -236,9 +236,10 @@ int saa7134_buffer_startpage(struct saa7134_buf *buf)
unsigned long saa7134_buffer_base(struct saa7134_buf *buf) unsigned long saa7134_buffer_base(struct saa7134_buf *buf)
{ {
unsigned long base; unsigned long base;
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
base = saa7134_buffer_startpage(buf) * 4096; base = saa7134_buffer_startpage(buf) * 4096;
base += buf->vb.dma.sglist[0].offset; base += dma->sglist[0].offset;
return base; return base;
} }
...@@ -286,11 +287,12 @@ void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt) ...@@ -286,11 +287,12 @@ void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt)
void saa7134_dma_free(struct videobuf_queue *q,struct saa7134_buf *buf) void saa7134_dma_free(struct videobuf_queue *q,struct saa7134_buf *buf)
{ {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
BUG_ON(in_interrupt()); BUG_ON(in_interrupt());
videobuf_waiton(&buf->vb,0,0); videobuf_waiton(&buf->vb,0,0);
videobuf_dma_unmap(q, &buf->vb.dma); videobuf_dma_unmap(q, dma);
videobuf_dma_free(&buf->vb.dma); videobuf_dma_free(dma);
buf->vb.state = STATE_NEEDS_INIT; buf->vb.state = STATE_NEEDS_INIT;
} }
......
...@@ -850,7 +850,7 @@ static int dvb_init(struct saa7134_dev *dev) ...@@ -850,7 +850,7 @@ static int dvb_init(struct saa7134_dev *dev)
dev->ts.nr_bufs = 32; dev->ts.nr_bufs = 32;
dev->ts.nr_packets = 32*4; dev->ts.nr_packets = 32*4;
dev->dvb.name = dev->name; dev->dvb.name = dev->name;
videobuf_queue_init(&dev->dvb.dvbq, &saa7134_ts_qops, videobuf_queue_pci_init(&dev->dvb.dvbq, &saa7134_ts_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_ALTERNATE, V4L2_FIELD_ALTERNATE,
......
...@@ -400,7 +400,7 @@ static int empress_init(struct saa7134_dev *dev) ...@@ -400,7 +400,7 @@ static int empress_init(struct saa7134_dev *dev)
printk(KERN_INFO "%s: registered device video%d [mpeg]\n", printk(KERN_INFO "%s: registered device video%d [mpeg]\n",
dev->name,dev->empress_dev->minor & 0x1f); dev->name,dev->empress_dev->minor & 0x1f);
videobuf_queue_init(&dev->empress_tsq, &saa7134_ts_qops, videobuf_queue_pci_init(&dev->empress_tsq, &saa7134_ts_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_ALTERNATE, V4L2_FIELD_ALTERNATE,
......
...@@ -92,6 +92,8 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, ...@@ -92,6 +92,8 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
} }
if (STATE_NEEDS_INIT == buf->vb.state) { if (STATE_NEEDS_INIT == buf->vb.state) {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
buf->vb.width = llength; buf->vb.width = llength;
buf->vb.height = lines; buf->vb.height = lines;
buf->vb.size = size; buf->vb.size = size;
...@@ -101,8 +103,8 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, ...@@ -101,8 +103,8 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
if (err) if (err)
goto oops; goto oops;
err = saa7134_pgtable_build(dev->pci,buf->pt, err = saa7134_pgtable_build(dev->pci,buf->pt,
buf->vb.dma.sglist, dma->sglist,
buf->vb.dma.sglen, dma->sglen,
saa7134_buffer_startpage(buf)); saa7134_buffer_startpage(buf));
if (err) if (err)
goto oops; goto oops;
......
...@@ -137,6 +137,8 @@ static int buffer_prepare(struct videobuf_queue *q, ...@@ -137,6 +137,8 @@ static int buffer_prepare(struct videobuf_queue *q,
saa7134_dma_free(q,buf); saa7134_dma_free(q,buf);
if (STATE_NEEDS_INIT == buf->vb.state) { if (STATE_NEEDS_INIT == buf->vb.state) {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
buf->vb.width = llength; buf->vb.width = llength;
buf->vb.height = lines; buf->vb.height = lines;
buf->vb.size = size; buf->vb.size = size;
...@@ -146,8 +148,8 @@ static int buffer_prepare(struct videobuf_queue *q, ...@@ -146,8 +148,8 @@ static int buffer_prepare(struct videobuf_queue *q,
if (err) if (err)
goto oops; goto oops;
err = saa7134_pgtable_build(dev->pci,buf->pt, err = saa7134_pgtable_build(dev->pci,buf->pt,
buf->vb.dma.sglist, dma->sglist,
buf->vb.dma.sglen, dma->sglen,
saa7134_buffer_startpage(buf)); saa7134_buffer_startpage(buf));
if (err) if (err)
goto oops; goto oops;
......
...@@ -1037,6 +1037,8 @@ static int buffer_prepare(struct videobuf_queue *q, ...@@ -1037,6 +1037,8 @@ static int buffer_prepare(struct videobuf_queue *q,
} }
if (STATE_NEEDS_INIT == buf->vb.state) { if (STATE_NEEDS_INIT == buf->vb.state) {
struct videobuf_dmabuf *dma=videobuf_to_dma(&buf->vb);
buf->vb.width = fh->width; buf->vb.width = fh->width;
buf->vb.height = fh->height; buf->vb.height = fh->height;
buf->vb.size = size; buf->vb.size = size;
...@@ -1048,8 +1050,8 @@ static int buffer_prepare(struct videobuf_queue *q, ...@@ -1048,8 +1050,8 @@ static int buffer_prepare(struct videobuf_queue *q,
if (err) if (err)
goto oops; goto oops;
err = saa7134_pgtable_build(dev->pci,buf->pt, err = saa7134_pgtable_build(dev->pci,buf->pt,
buf->vb.dma.sglist, dma->sglist,
buf->vb.dma.sglen, dma->sglen,
saa7134_buffer_startpage(buf)); saa7134_buffer_startpage(buf));
if (err) if (err)
goto oops; goto oops;
...@@ -1309,13 +1311,13 @@ static int video_open(struct inode *inode, struct file *file) ...@@ -1309,13 +1311,13 @@ static int video_open(struct inode *inode, struct file *file)
fh->height = 576; fh->height = 576;
v4l2_prio_open(&dev->prio,&fh->prio); v4l2_prio_open(&dev->prio,&fh->prio);
videobuf_queue_init(&fh->cap, &video_qops, videobuf_queue_pci_init(&fh->cap, &video_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_INTERLACED, V4L2_FIELD_INTERLACED,
sizeof(struct saa7134_buf), sizeof(struct saa7134_buf),
fh); fh);
videobuf_queue_init(&fh->vbi, &saa7134_vbi_qops, videobuf_queue_pci_init(&fh->vbi, &saa7134_vbi_qops,
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VBI_CAPTURE, V4L2_BUF_TYPE_VBI_CAPTURE,
V4L2_FIELD_SEQ_TB, V4L2_FIELD_SEQ_TB,
...@@ -2137,29 +2139,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file, ...@@ -2137,29 +2139,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file,
} }
#ifdef CONFIG_VIDEO_V4L1_COMPAT #ifdef CONFIG_VIDEO_V4L1_COMPAT
case VIDIOCGMBUF: case VIDIOCGMBUF:
{ return videobuf_cgmbuf(saa7134_queue(fh), arg, gbuffers);
struct video_mbuf *mbuf = arg;
struct videobuf_queue *q;
struct v4l2_requestbuffers req;
unsigned int i;
q = saa7134_queue(fh);
memset(&req,0,sizeof(req));
req.type = q->type;
req.count = gbuffers;
req.memory = V4L2_MEMORY_MMAP;
err = videobuf_reqbufs(q,&req);
if (err < 0)
return err;
memset(mbuf,0,sizeof(*mbuf));
mbuf->frames = req.count;
mbuf->size = 0;
for (i = 0; i < mbuf->frames; i++) {
mbuf->offsets[i] = q->bufs[i]->boff;
mbuf->size += q->bufs[i]->bsize;
}
return 0;
}
#endif #endif
case VIDIOC_REQBUFS: case VIDIOC_REQBUFS:
return videobuf_reqbufs(saa7134_queue(fh),arg); return videobuf_reqbufs(saa7134_queue(fh),arg);
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include <media/tuner.h> #include <media/tuner.h>
#include <media/ir-common.h> #include <media/ir-common.h>
#include <media/ir-kbd-i2c.h> #include <media/ir-kbd-i2c.h>
#include <media/video-buf.h> #include <media/videobuf-dma-sg.h>
#include <sound/driver.h> #include <sound/driver.h>
#include <sound/core.h> #include <sound/core.h>
#include <sound/pcm.h> #include <sound/pcm.h>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include <linux/file.h> #include <linux/file.h>
#include <linux/freezer.h> #include <linux/freezer.h>
#include <media/video-buf.h> #include <media/videobuf-dma-sg.h>
#include <media/video-buf-dvb.h> #include <media/video-buf-dvb.h>
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
...@@ -45,6 +45,7 @@ static int videobuf_dvb_thread(void *data) ...@@ -45,6 +45,7 @@ static int videobuf_dvb_thread(void *data)
struct videobuf_buffer *buf; struct videobuf_buffer *buf;
unsigned long flags; unsigned long flags;
int err; int err;
struct videobuf_dmabuf *dma;
dprintk("dvb thread started\n"); dprintk("dvb thread started\n");
set_freezable(); set_freezable();
...@@ -65,8 +66,9 @@ static int videobuf_dvb_thread(void *data) ...@@ -65,8 +66,9 @@ static int videobuf_dvb_thread(void *data)
try_to_freeze(); try_to_freeze();
/* feed buffer data to demux */ /* feed buffer data to demux */
dma=videobuf_to_dma(buf);
if (buf->state == STATE_DONE) if (buf->state == STATE_DONE)
dvb_dmx_swfilter(&dvb->demux, buf->dma.vmalloc, dvb_dmx_swfilter(&dvb->demux, dma->vmalloc,
buf->size); buf->size);
/* requeue buffer */ /* requeue buffer */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#include <linux/videodev.h> #include <linux/videodev.h>
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
#include <media/saa7146.h> #include <media/saa7146.h>
#include <media/video-buf.h> #include <media/videobuf-dma-sg.h>
#define MAX_SAA7146_CAPTURE_BUFFERS 32 /* arbitrary */ #define MAX_SAA7146_CAPTURE_BUFFERS 32 /* arbitrary */
#define BUFFER_TIMEOUT (HZ/2) /* 0.5 seconds */ #define BUFFER_TIMEOUT (HZ/2) /* 0.5 seconds */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment