Update of /cvsroot/alsa/alsa-kernel/core
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23362/core

Modified Files:
        memalloc.c pcm_memory.c sgbuf.c 
Log Message:
- clean up the DMA code again.
  now only struct device pointer is handled for every BUS type.
  the pointer must be given via the corresponding macro snd_dma_xxx_data().
- added the hack for dma_alloc_coherent() to accept dev = NULL for ISA
  buffers.
- added the missing include files.


Index: memalloc.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/memalloc.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- memalloc.c  3 Mar 2004 12:07:42 -0000       1.26
+++ memalloc.c  6 Mar 2004 16:51:28 -0000       1.27
@@ -25,11 +25,15 @@
 #include <linux/module.h>
 #include <linux/proc_fs.h>
 #include <linux/init.h>
+#include <linux/pci.h>
 #include <linux/slab.h>
 #include <linux/mm.h>
 #include <linux/dma-mapping.h>
 #include <asm/semaphore.h>
 #include <sound/memalloc.h>
+#ifdef CONFIG_SBUS
+#include <asm/sbus.h>
+#endif
 
 
 MODULE_AUTHOR("Takashi Iwai <[EMAIL PROTECTED]>, Jaroslav Kysela <[EMAIL 
PROTECTED]>");
@@ -85,6 +89,30 @@
  *  Hacks
  */
 
+static void *snd_dma_alloc_coherent1(struct device *dev, size_t size,
+                                    dma_addr_t *dma_handle, int flags)
+{
+       if (dev)
+               return dma_alloc_coherent(dev, size, dma_handle, flags);
+       else /* FIXME: dma_alloc_coherent does't always accept dev=NULL */
+               return pci_alloc_consistent(NULL, size, dma_handle);
+}
+
+static void snd_dma_free_coherent1(struct device *dev, size_t size, void *dma_addr,
+                                  dma_addr_t dma_handle)
+{
+       if (dev)
+               return dma_free_coherent(dev, size, dma_addr, dma_handle);
+       else
+               return pci_free_consistent(NULL, size, dma_addr, dma_handle);
+}
+
+#undef dma_alloc_coherent
+#define dma_alloc_coherent snd_dma_alloc_coherent1
+#undef dma_free_coherent
+#define dma_free_coherent snd_dma_free_coherent1
+
+
 #if defined(__i386__) || defined(__ppc__) || defined(__x86_64__)
 
 /*
@@ -257,9 +285,8 @@
        return res;
 }
 
-static inline 
-void *snd_malloc_dev_pages_fallback(struct device *dev, size_t size,
-                                   dma_addr_t *dma, size_t *res_size)
+static void *snd_malloc_dev_pages_fallback(struct device *dev, size_t size,
+                                          dma_addr_t *dma, size_t *res_size)
 {
        void *res;
 
@@ -274,9 +301,8 @@
        return NULL;
 }
 
-static inline
-void snd_free_dev_pages(struct device *dev, size_t size, void *ptr,
-                       dma_addr_t dma)
+static void snd_free_dev_pages(struct device *dev, size_t size, void *ptr,
+                              dma_addr_t dma)
 {
        int pg;
 
@@ -287,65 +313,12 @@
        dma_free_coherent(dev, PAGE_SIZE << pg, ptr, dma);
 }
 
-#if defined(CONFIG_ISA) && ! defined(CONFIG_PCI)
-
-static inline
-void *snd_malloc_isa_pages(size_t size, dma_addr_t *dma_addr)
-{
-       void *dma_area;
-       dma_area = snd_malloc_pages(size, GFP_ATOMIC|GFP_DMA);
-       *dma_addr = dma_area ? isa_virt_to_bus(dma_area) : 0UL;
-       return dma_area;
-}
-
-static inline
-void *snd_malloc_isa_pages_fallback(size_t size,
-                                   dma_addr_t *dma_addr,
-                                   size_t *res_size)
-{
-       void *dma_area;
-       dma_area = snd_malloc_pages_fallback(size, GFP_ATOMIC|GFP_DMA, res_size);
-       *dma_addr = dma_area ? isa_virt_to_bus(dma_area) : 0UL;
-       return dma_area;
-}
-
-static inline
-void snd_free_isa_pages(size_t size, void *ptr, dma_addr_t addr)
-{
-       return snd_free_pages(ptr, size);
-}
-
-#endif
-
-#if defined(CONFIG_ISA) && defined(CONFIG_PCI)
-
-static inline
-void *snd_malloc_isa_pages(size_t size, dma_addr_t *dma_addr)
-{
-       return snd_malloc_dev_pages(NULL, size, dma_addr);
-}
-
-static inline
-void *snd_malloc_isa_pages_fallback(size_t size,
-                                   dma_addr_t *dma_addr,
-                                   size_t *res_size)
-{
-       return snd_malloc_dev_pages_fallback(NULL, size, dma_addr, res_size);
-}
-
-static inline
-void snd_free_isa_pages(size_t size, void *ptr, dma_addr_t addr)
-{
-       return snd_free_dev_pages(NULL, size, ptr, addr);
-}
-
-#endif
-
 #ifdef CONFIG_SBUS
 
-static void *snd_malloc_sbus_pages(struct sbus_dev *sdev, size_t size,
+static void *snd_malloc_sbus_pages(struct device *dev, size_t size,
                                   dma_addr_t *dma_addr)
 {
+       struct sbus_dev *sdev = (struct sbus_dev *)dev;
        int pg;
        void *res;
 
@@ -359,14 +332,14 @@
        return res;
 }
 
-static void *snd_malloc_sbus_pages_fallback(struct sbus_dev *sdev, size_t size,
+static void *snd_malloc_sbus_pages_fallback(struct device *dev, size_t size,
                                            dma_addr_t *dma_addr, size_t *res_size)
 {
        void *res;
 
        snd_assert(res_size != NULL, return NULL);
        do {
-               if ((res = snd_malloc_sbus_pages(sdev, size, dma_addr)) != NULL) {
+               if ((res = snd_malloc_sbus_pages(dev, size, dma_addr)) != NULL) {
                        *res_size = size;
                        return res;
                }
@@ -375,9 +348,10 @@
        return NULL;
 }
 
-static void snd_free_sbus_pages(struct sbus_dev *sdev, size_t size,
+static void snd_free_sbus_pages(struct device *dev, size_t size,
                                void *ptr, dma_addr_t dma_addr)
 {
+       struct sbus_dev *sdev = (struct sbus_dev *)dev;
        int pg;
 
        if (ptr == NULL)
@@ -408,21 +382,7 @@
                if (! allow_unused || (a->id != SNDRV_DMA_DEVICE_UNUSED && b->id != 
SNDRV_DMA_DEVICE_UNUSED))
                        return 0;
        }
-       switch (a->type) {
-       case SNDRV_DMA_TYPE_CONTINUOUS:
-#ifdef CONFIG_ISA
-       case SNDRV_DMA_TYPE_ISA:
-#endif
-               return a->dev.flags == b->dev.flags;
-#ifdef CONFIG_SBUS
-       case SNDRV_DMA_TYPE_SBUS:
-               return a->dev.sbus == b->dev.sbus;
-#endif
-       case SNDRV_DMA_TYPE_DEV:
-       case SNDRV_DMA_TYPE_DEV_SG:
-               return a->dev.dev == b->dev.dev;
-       }
-       return 0;
+       return a->dev == b->dev;
 }
 
 /**
@@ -447,28 +407,17 @@
        dmab->bytes = 0;
        switch (dev->type) {
        case SNDRV_DMA_TYPE_CONTINUOUS:
-               dmab->area = snd_malloc_pages(size, dev->dev.flags);
+               dmab->area = snd_malloc_pages(size, (unsigned long)dev->dev);
                dmab->addr = 0;
                break;
-#ifdef CONFIG_ISA
-       case SNDRV_DMA_TYPE_ISA:
-               dmab->area = snd_malloc_isa_pages(size, &dmab->addr);
-               break;
-#endif
 #ifdef CONFIG_SBUS
        case SNDRV_DMA_TYPE_SBUS:
-               dmab->area = snd_malloc_sbus_pages(dev->dev.sbus, size, &dmab->addr);
-               break;
-#endif
-#ifdef CONFIG_PCI
-       case SNDRV_DMA_TYPE_PCI:
-               dmab->area = snd_malloc_dev_pages(&dev->dev.pci->dev, size, 
&dmab->addr);
+               dmab->area = snd_malloc_sbus_pages(dev->dev, size, &dmab->addr);
                break;
 #endif
        case SNDRV_DMA_TYPE_DEV:
-               dmab->area = snd_malloc_dev_pages(dev->dev.dev, size, &dmab->addr);
+               dmab->area = snd_malloc_dev_pages(dev->dev, size, &dmab->addr);
                break;
-       case SNDRV_DMA_TYPE_PCI_SG:
        case SNDRV_DMA_TYPE_DEV_SG:
                snd_malloc_sgbuf_pages(dev, size, dmab, NULL);
                break;
@@ -508,28 +457,17 @@
        dmab->bytes = 0;
        switch (dev->type) {
        case SNDRV_DMA_TYPE_CONTINUOUS:
-               dmab->area = snd_malloc_pages_fallback(size, dev->dev.flags, 
&dmab->bytes);
+               dmab->area = snd_malloc_pages_fallback(size, (unsigned long)dev->dev, 
&dmab->bytes);
                dmab->addr = 0;
                break;
-#ifdef CONFIG_ISA
-       case SNDRV_DMA_TYPE_ISA:
-               dmab->area = snd_malloc_isa_pages_fallback(size, &dmab->addr, 
&dmab->bytes);
-               break;
-#endif
 #ifdef CONFIG_SBUS
        case SNDRV_DMA_TYPE_SBUS:
-               dmab->area = snd_malloc_sbus_pages_fallback(dev->dev.sbus, size, 
&dmab->addr, &dmab->bytes);
-               break;
-#endif
-#ifdef CONFIG_PCI
-       case SNDRV_DMA_TYPE_PCI:
-               dmab->area = snd_malloc_dev_pages_fallback(&dev->dev.pci->dev, size, 
&dmab->addr, &dmab->bytes);
+               dmab->area = snd_malloc_sbus_pages_fallback(dev->dev, size, 
&dmab->addr, &dmab->bytes);
                break;
 #endif
        case SNDRV_DMA_TYPE_DEV:
-               dmab->area = snd_malloc_dev_pages_fallback(dev->dev.dev, size, 
&dmab->addr, &dmab->bytes);
+               dmab->area = snd_malloc_dev_pages_fallback(dev->dev, size, 
&dmab->addr, &dmab->bytes);
                break;
-       case SNDRV_DMA_TYPE_PCI_SG:
        case SNDRV_DMA_TYPE_DEV_SG:
                snd_malloc_sgbuf_pages(dev, size, dmab, &dmab->bytes);
                break;
@@ -558,26 +496,15 @@
        case SNDRV_DMA_TYPE_CONTINUOUS:
                snd_free_pages(dmab->area, dmab->bytes);
                break;
-#ifdef CONFIG_ISA
-       case SNDRV_DMA_TYPE_ISA:
-               snd_free_isa_pages(dmab->bytes, dmab->area, dmab->addr);
-               break;
-#endif
 #ifdef CONFIG_SBUS
        case SNDRV_DMA_TYPE_SBUS:
-               snd_free_sbus_pages(dev->dev.sbus, dmab->bytes, dmab->area, 
dmab->addr);
-               break;
-#endif
-#ifdef CONFIG_PCI
-       case SNDRV_DMA_TYPE_PCI:
-               snd_free_dev_pages(&dev->dev.pci->dev, dmab->bytes, dmab->area, 
dmab->addr);
+               snd_free_sbus_pages(dev->dev, dmab->bytes, dmab->area, dmab->addr);
                break;
 #endif
        case SNDRV_DMA_TYPE_DEV:
-               snd_free_dev_pages(dev->dev.dev, dmab->bytes, dmab->area, dmab->addr);
+               snd_free_dev_pages(dev->dev, dmab->bytes, dmab->area, dmab->addr);
                break;
        case SNDRV_DMA_TYPE_DEV_SG:
-       case SNDRV_DMA_TYPE_PCI_SG:
                snd_free_sgbuf_pages(dmab);
                break;
        default:
@@ -772,7 +699,7 @@
 {
        memset(dev, 0, sizeof(*dev));
        dev->type = SNDRV_DMA_TYPE_DEV;
-       dev->dev.dev = &pci->dev;
+       dev->dev = snd_dma_pci_data(pci);
        dev->id = id;
 }
 
@@ -857,35 +784,24 @@
                len += sprintf(page + len, " : type ");
                switch (mem->dev.type) {
                case SNDRV_DMA_TYPE_CONTINUOUS:
-                       len += sprintf(page + len, "CONT [%x]", mem->dev.dev.flags);
-                       break;
-#ifdef CONFIG_ISA
-               case SNDRV_DMA_TYPE_ISA:
-                       len += sprintf(page + len, "ISA [%x]", mem->dev.dev.flags);
+                       len += sprintf(page + len, "CONT [%p]", mem->dev.dev);
                        break;
-#endif
 #ifdef CONFIG_SBUS
                case SNDRV_DMA_TYPE_SBUS:
-                       len += sprintf(page + len, "SBUS [%x]", 
mem->dev.dev.sbus->slot);
-                       break;
-#endif
-#ifdef CONFIG_PCI
-               case SNDRV_DMA_TYPE_PCI:
-               case SNDRV_DMA_TYPE_PCI_SG:
-                       if (mem->dev.dev.dev) {
-                               len += sprintf(page + len, "%s [%s]",
-                                              mem->dev.type == SNDRV_DMA_TYPE_PCI_SG 
? "PCI" : "PCI-SG",
-                                              mem->dev.dev.pci->slot_name);
+                       {
+                               struct sbus_dev *sdev = (struct sbus_dev 
*)(mem->dev.dev);
+                               len += sprintf(page + len, "SBUS [%x]", sbus->slot);
                        }
                        break;
 #endif
                case SNDRV_DMA_TYPE_DEV:
                case SNDRV_DMA_TYPE_DEV_SG:
-                       if (mem->dev.dev.dev) {
+                       if (mem->dev.dev) {
                                len += sprintf(page + len, "%s [%s]",
-                                              mem->dev.type == SNDRV_DMA_TYPE_DEV_SG 
? "DEV" : "DEV-SG",
-                                              mem->dev.dev.dev->bus_id);
-                       }
+                                              mem->dev.type == SNDRV_DMA_TYPE_DEV_SG 
? "DEV-SG" : "DEV",
+                                              mem->dev.dev->bus_id);
+                       } else
+                               len += sprintf(page + len, "ISA");
                        break;
                default:
                        len += sprintf(page + len, "UNKNOWN");

Index: pcm_memory.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/pcm_memory.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- pcm_memory.c        2 Mar 2004 15:32:36 -0000       1.24
+++ pcm_memory.c        6 Mar 2004 16:51:28 -0000       1.25
@@ -241,18 +241,11 @@
  * Returns zero if successful, or a negative error code on failure.
  */
 int snd_pcm_lib_preallocate_pages(snd_pcm_substream_t *substream,
-                                 int type, void *data,
+                                 int type, struct device *data,
                                  size_t size, size_t max)
 {
-       switch (type) {
-       case SNDRV_DMA_TYPE_ISA:
-               if ((unsigned long)data == 0)
-                       data = snd_pcm_dma_flags(GFP_DMA|GFP_ATOMIC);
-       default:
-               substream->dma_device.type = type;
-               substream->dma_device.dev.data = data;
-               break;
-       }
+       substream->dma_device.type = type;
+       substream->dma_device.dev = data;
        setup_pcm_id(substream);
        return snd_pcm_lib_preallocate_pages1(substream, size, max);
 }

Index: sgbuf.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/sgbuf.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- sgbuf.c     2 Mar 2004 18:06:50 -0000       1.6
+++ sgbuf.c     6 Mar 2004 16:51:28 -0000       1.7
@@ -74,10 +74,7 @@
                return NULL;
        memset(sgbuf, 0, sizeof(*sgbuf));
        sgbuf->dev = *dev;
-       if (dev->type == SNDRV_DMA_TYPE_PCI_SG)
-               sgbuf->dev.type = SNDRV_DMA_TYPE_PCI;
-       else
-               sgbuf->dev.type =SNDRV_DMA_TYPE_DEV;
+       sgbuf->dev.type = SNDRV_DMA_TYPE_DEV;
        pages = snd_sgbuf_aligned_pages(size);
        sgbuf->tblsize = sgbuf_align_table(pages);
        sgbuf->table = kmalloc(sizeof(*sgbuf->table) * sgbuf->tblsize, GFP_KERNEL);



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to