summaryrefslogtreecommitdiffstats
path: root/drivers/media/video/ivtv/ivtv-queue.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-11 11:32:28 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-11 11:32:28 -0700
commitb44c0267b7571b449e05f390349c4e4d080f0f4c (patch)
treeac223157c3ce75b729a2e702babd13a691c20464 /drivers/media/video/ivtv/ivtv-queue.h
parentbb3d2dd72302ea3eefcc6738cdd39ed5864b62f8 (diff)
parentc43850981b5203e13747f8a696a762eb412d9394 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: V4L/DVB (5751): Ivtv: fix ia64 printk format warnings. V4L/DVB (5761): Fix broken b2c2 dependency on non x86 architectures V4L/DVB (5673): Fix audio stuttering for saa711x/ivtv when in radio mode. V4L/DVB (5736): Add V4L2_FBUF_CAP/FLAG_LOCAL/GLOBAL_INV_ALPHA V4L/DVB (5732): Add ivtv CROPCAP support and fix ivtv S_CROP for video output. V4L/DVB (5730): Remove unused V4L2_CAP_VIDEO_OUTPUT_POS V4L/DVB (5720): Usbvision: fix urb allocation and submits V4L/DVB (5716): Tda10086,tda826x: fix tuning, STR/SNR values V4L/DVB (5675): Move big PIO accesses from the interrupt handler to a workhandler V4L/DVB (5699): Cinergyt2: fix file release handler V4L/DVB (5700): Saa7111: fix picture settings cache bug V4L/DVB (5702): Fix Kconfig items to avoid linkedition errors
Diffstat (limited to 'drivers/media/video/ivtv/ivtv-queue.h')
-rw-r--r--drivers/media/video/ivtv/ivtv-queue.h39
1 files changed, 33 insertions, 6 deletions
diff --git a/drivers/media/video/ivtv/ivtv-queue.h b/drivers/media/video/ivtv/ivtv-queue.h
index 903edd4b438..2ed8d548255 100644
--- a/drivers/media/video/ivtv/ivtv-queue.h
+++ b/drivers/media/video/ivtv/ivtv-queue.h
@@ -20,18 +20,43 @@
*/
#define IVTV_DMA_UNMAPPED ((u32) -1)
+#define SLICED_VBI_PIO 1
/* ivtv_buffer utility functions */
+
+static inline int ivtv_might_use_pio(struct ivtv_stream *s)
+{
+ return s->dma == PCI_DMA_NONE || (SLICED_VBI_PIO && s->type == IVTV_ENC_STREAM_TYPE_VBI);
+}
+
+static inline int ivtv_use_pio(struct ivtv_stream *s)
+{
+ struct ivtv *itv = s->itv;
+
+ return s->dma == PCI_DMA_NONE ||
+ (SLICED_VBI_PIO && s->type == IVTV_ENC_STREAM_TYPE_VBI && itv->vbi.sliced_in->service_set);
+}
+
+static inline int ivtv_might_use_dma(struct ivtv_stream *s)
+{
+ return s->dma != PCI_DMA_NONE;
+}
+
+static inline int ivtv_use_dma(struct ivtv_stream *s)
+{
+ return !ivtv_use_pio(s);
+}
+
static inline void ivtv_buf_sync_for_cpu(struct ivtv_stream *s, struct ivtv_buffer *buf)
{
- if (s->dma != PCI_DMA_NONE)
+ if (ivtv_use_dma(s))
pci_dma_sync_single_for_cpu(s->itv->dev, buf->dma_handle,
s->buf_size + 256, s->dma);
}
static inline void ivtv_buf_sync_for_device(struct ivtv_stream *s, struct ivtv_buffer *buf)
{
- if (s->dma != PCI_DMA_NONE)
+ if (ivtv_use_dma(s))
pci_dma_sync_single_for_device(s->itv->dev, buf->dma_handle,
s->buf_size + 256, s->dma);
}
@@ -53,12 +78,14 @@ void ivtv_stream_free(struct ivtv_stream *s);
static inline void ivtv_stream_sync_for_cpu(struct ivtv_stream *s)
{
- pci_dma_sync_single_for_cpu(s->itv->dev, s->SG_handle,
- sizeof(struct ivtv_SG_element) * s->buffers, PCI_DMA_TODEVICE);
+ if (ivtv_use_dma(s))
+ pci_dma_sync_single_for_cpu(s->itv->dev, s->SG_handle,
+ sizeof(struct ivtv_SG_element) * s->buffers, PCI_DMA_TODEVICE);
}
static inline void ivtv_stream_sync_for_device(struct ivtv_stream *s)
{
- pci_dma_sync_single_for_device(s->itv->dev, s->SG_handle,
- sizeof(struct ivtv_SG_element) * s->buffers, PCI_DMA_TODEVICE);
+ if (ivtv_use_dma(s))
+ pci_dma_sync_single_for_device(s->itv->dev, s->SG_handle,
+ sizeof(struct ivtv_SG_element) * s->buffers, PCI_DMA_TODEVICE);
}