diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-11 11:32:28 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-11 11:32:28 -0700 |
commit | b44c0267b7571b449e05f390349c4e4d080f0f4c (patch) | |
tree | ac223157c3ce75b729a2e702babd13a691c20464 /drivers/media/video/ivtv/ivtv-queue.h | |
parent | bb3d2dd72302ea3eefcc6738cdd39ed5864b62f8 (diff) | |
parent | c43850981b5203e13747f8a696a762eb412d9394 (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.h | 39 |
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); } |