]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/ivtv/ivtv-queue.c
Merge current mainline tree into linux-omap tree
[linux-2.6-omap-h63xx.git] / drivers / media / video / ivtv / ivtv-queue.c
index bff75aeee0a08e4c165b15640c2432bb90594d7f..39a216713244eecd6481d75d307e0ec38f9d74b1 100644 (file)
@@ -20,9 +20,7 @@
  */
 
 #include "ivtv-driver.h"
-#include "ivtv-streams.h"
 #include "ivtv-queue.h"
-#include "ivtv-mailbox.h"
 
 int ivtv_buf_copy_from_user(struct ivtv_stream *s, struct ivtv_buffer *buf, const char __user *src, int copybytes)
 {
@@ -195,7 +193,7 @@ void ivtv_flush_queues(struct ivtv_stream *s)
 int ivtv_stream_alloc(struct ivtv_stream *s)
 {
        struct ivtv *itv = s->itv;
-       int SGsize = sizeof(struct ivtv_SG_element) * s->buffers;
+       int SGsize = sizeof(struct ivtv_sg_element) * s->buffers;
        int i;
 
        if (s->buffers == 0)
@@ -205,27 +203,33 @@ int ivtv_stream_alloc(struct ivtv_stream *s)
                s->dma != PCI_DMA_NONE ? "DMA " : "",
                s->name, s->buffers, s->buf_size, s->buffers * s->buf_size / 1024);
 
-       if (ivtv_might_use_pio(s)) {
-               s->PIOarray = (struct ivtv_SG_element *)kzalloc(SGsize, GFP_KERNEL);
-               if (s->PIOarray == NULL) {
-                       IVTV_ERR("Could not allocate PIOarray for %s stream\n", s->name);
-                       return -ENOMEM;
-               }
+       s->sg_pending = kzalloc(SGsize, GFP_KERNEL);
+       if (s->sg_pending == NULL) {
+               IVTV_ERR("Could not allocate sg_pending for %s stream\n", s->name);
+               return -ENOMEM;
        }
+       s->sg_pending_size = 0;
 
-       /* Allocate DMA SG Arrays */
-       s->SGarray = (struct ivtv_SG_element *)kzalloc(SGsize, GFP_KERNEL);
-       if (s->SGarray == NULL) {
-               IVTV_ERR("Could not allocate SGarray for %s stream\n", s->name);
-               if (ivtv_might_use_pio(s)) {
-                       kfree(s->PIOarray);
-                       s->PIOarray = NULL;
-               }
+       s->sg_processing = kzalloc(SGsize, GFP_KERNEL);
+       if (s->sg_processing == NULL) {
+               IVTV_ERR("Could not allocate sg_processing for %s stream\n", s->name);
+               kfree(s->sg_pending);
+               s->sg_pending = NULL;
+               return -ENOMEM;
+       }
+       s->sg_processing_size = 0;
+
+       s->sg_dma = kzalloc(sizeof(struct ivtv_sg_element), GFP_KERNEL);
+       if (s->sg_dma == NULL) {
+               IVTV_ERR("Could not allocate sg_dma for %s stream\n", s->name);
+               kfree(s->sg_pending);
+               s->sg_pending = NULL;
+               kfree(s->sg_processing);
+               s->sg_processing = NULL;
                return -ENOMEM;
        }
-       s->SG_length = 0;
        if (ivtv_might_use_dma(s)) {
-               s->SG_handle = pci_map_single(itv->dev, s->SGarray, SGsize, s->dma);
+               s->sg_handle = pci_map_single(itv->dev, s->sg_dma, sizeof(struct ivtv_sg_element), s->dma);
                ivtv_stream_sync_for_cpu(s);
        }
 
@@ -272,16 +276,19 @@ void ivtv_stream_free(struct ivtv_stream *s)
        }
 
        /* Free SG Array/Lists */
-       if (s->SGarray != NULL) {
-               if (s->SG_handle != IVTV_DMA_UNMAPPED) {
-                       pci_unmap_single(s->itv->dev, s->SG_handle,
-                                sizeof(struct ivtv_SG_element) * s->buffers, PCI_DMA_TODEVICE);
-                       s->SG_handle = IVTV_DMA_UNMAPPED;
+       if (s->sg_dma != NULL) {
+               if (s->sg_handle != IVTV_DMA_UNMAPPED) {
+                       pci_unmap_single(s->itv->dev, s->sg_handle,
+                                sizeof(struct ivtv_sg_element), PCI_DMA_TODEVICE);
+                       s->sg_handle = IVTV_DMA_UNMAPPED;
                }
-               kfree(s->SGarray);
-               kfree(s->PIOarray);
-               s->PIOarray = NULL;
-               s->SGarray = NULL;
-               s->SG_length = 0;
+               kfree(s->sg_pending);
+               kfree(s->sg_processing);
+               kfree(s->sg_dma);
+               s->sg_pending = NULL;
+               s->sg_processing = NULL;
+               s->sg_dma = NULL;
+               s->sg_pending_size = 0;
+               s->sg_processing_size = 0;
        }
 }