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: Mauro Carvalho Chehab <mchehab@infradead.org> http://thread.gmane.org/gmane.comp.video.video4linux/34978/focus=34981 Reviewed-by: Ricardo Cerqueira <v4l@cerqueira.org>
This commit is contained in:
parent
7a7d9a89d0
commit
c1accaa21b
34 changed files with 125 additions and 130 deletions
|
@ -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
|
||||||
|
|
||||||
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
|
||||||
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)
|
||||||
* 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)
|
||||||
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
|
||||||
/* 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
|
||||||
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
|
||||||
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)
|
||||||
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)
|
||||||
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
|
||||||
|
|
||||||
/* 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)
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
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
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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 @@
|
||||||
#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)
|
||||||
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
|
||||||
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 {
|
||||||
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)
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
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,
|
||||||
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)
|
||||||
|
|
||||||
/* 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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
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,
|
||||||
#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 @@
|
||||||
#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)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
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)
|
||||||
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,
|
||||||
}
|
}
|
||||||
#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 @@
|
||||||
#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 @@
|
||||||
#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)
|
||||||
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)
|
||||||
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 @@
|
||||||
#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 */
|
||||||
|
|
Loading…
Reference in a new issue