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