This is the first shot at this - I've tested it on ARM, covering both
ISA ALSA devices on a PCI machine, and driver model devices on a non-
PCI, non-ISA machine.  However, it needs more testing.  Can people
on alsa-devel please test these patches.

Convert remaining PCI-using functions to use the driver model functions.

diff -urpN orig/sound/core/memalloc.c linux/sound/core/memalloc.c
--- orig/sound/core/memalloc.c  Sun Feb 29 19:37:15 2004
+++ linux/sound/core/memalloc.c Sun Feb 29 19:39:29 2004
@@ -146,11 +146,6 @@ static int compare_device(const struct s
        case SNDRV_DMA_TYPE_ISA:
 #endif
                return a->dev.flags == b->dev.flags;
-#ifdef CONFIG_PCI
-       case SNDRV_DMA_TYPE_PCI:
-       case SNDRV_DMA_TYPE_PCI_SG:
-               return a->dev.pci == b->dev.pci;
-#endif
 #ifdef CONFIG_SBUS
        case SNDRV_DMA_TYPE_SBUS:
                return a->dev.sbus == b->dev.sbus;
@@ -192,14 +187,6 @@ int snd_dma_alloc_pages(const struct snd
                dmab->area = snd_malloc_isa_pages(size, &dmab->addr);
                break;
 #endif
-#ifdef CONFIG_PCI
-       case SNDRV_DMA_TYPE_PCI:
-               dmab->area = snd_malloc_pci_pages(dev->dev.pci, size, &dmab->addr);
-               break;
-       case SNDRV_DMA_TYPE_PCI_SG:
-               snd_malloc_sgbuf_pages(&dev->dev.pci->dev, size, dmab);
-               break;
-#endif
 #ifdef CONFIG_SBUS
        case SNDRV_DMA_TYPE_SBUS:
                dmab->area = snd_malloc_sbus_pages(dev->dev.sbus, size, &dmab->addr);
@@ -242,14 +229,6 @@ void snd_dma_free_pages(const struct snd
                snd_free_isa_pages(dmab->bytes, dmab->area, dmab->addr);
                break;
 #endif
-#ifdef CONFIG_PCI
-       case SNDRV_DMA_TYPE_PCI:
-               snd_free_pci_pages(dev->dev.pci, dmab->bytes, dmab->area, dmab->addr);
-               break;
-       case SNDRV_DMA_TYPE_PCI_SG:
-               snd_free_sgbuf_pages(dmab);
-               break;
-#endif
 #ifdef CONFIG_SBUS
        case SNDRV_DMA_TYPE_SBUS:
                snd_free_sbus_pages(dev->dev.sbus, dmab->bytes, dmab->area, 
dmab->addr);
@@ -946,17 +925,6 @@ static int snd_mem_proc_read(char *page,
                case SNDRV_DMA_TYPE_CONTINUOUS:
                        len += sprintf(page + len, "CONT [%x]", mem->dev.dev.flags);
                        break;
-#ifdef CONFIG_PCI
-               case SNDRV_DMA_TYPE_PCI:
-               case SNDRV_DMA_TYPE_PCI_SG:
-                       if (mem->dev.dev.pci) {
-                               len += sprintf(page + len, "%s [%04x:%04x]",
-                                              mem->dev.type == SNDRV_DMA_TYPE_PCI ? 
"PCI" : "PCI-SG",
-                                              mem->dev.dev.pci->vendor,
-                                              mem->dev.dev.pci->device);
-                       }
-                       break;
-#endif
 #ifdef CONFIG_ISA
                case SNDRV_DMA_TYPE_ISA:
                        len += sprintf(page + len, "ISA [%x]", mem->dev.dev.flags);
diff -urpN orig/sound/core/pcm_memory.c linux/sound/core/pcm_memory.c
--- orig/sound/core/pcm_memory.c        Sun Feb 29 19:38:37 2004
+++ linux/sound/core/pcm_memory.c       Sun Feb 29 19:33:33 2004
@@ -538,10 +538,8 @@ int snd_pcm_lib_preallocate_pci_pages(st
                                      snd_pcm_substream_t *substream,
                                      size_t size, size_t max)
 {
-       substream->dma_device.type = SNDRV_DMA_TYPE_PCI;
-       substream->dma_device.dev.pci = pci;
-       setup_pcm_id(substream);
-       return snd_pcm_lib_preallocate_pages1(substream, size, max);
+       return snd_pcm_lib_preallocate_dev_pages(pci ? &pci->dev : NULL,
+                                                substream, size, max);
 }
 
 /*
@@ -562,14 +560,8 @@ int snd_pcm_lib_preallocate_pci_pages_fo
                                              snd_pcm_t *pcm,
                                              size_t size, size_t max)
 {
-       snd_pcm_substream_t *substream;
-       int stream, err;
-
-       for (stream = 0; stream < 2; stream++)
-               for (substream = pcm->streams[stream].substream; substream; substream 
= substream->next)
-                       if ((err = snd_pcm_lib_preallocate_pci_pages(pci, substream, 
size, max)) < 0)
-                               return err;
-       return 0;
+       return snd_pcm_lib_preallocate_dev_pages_for_all(pci ? &pci->dev : NULL,
+                                                        pcm, size, max);
 }
 
 #endif /* CONFIG_PCI */
@@ -644,10 +636,8 @@ int snd_pcm_lib_preallocate_sg_pages(str
                                     snd_pcm_substream_t *substream,
                                     size_t size, size_t max)
 {
-       substream->dma_device.type = SNDRV_DMA_TYPE_PCI_SG;
-       substream->dma_device.dev.pci = pci;
-       setup_pcm_id(substream);
-       return snd_pcm_lib_preallocate_pages1(substream, size, max);
+       return snd_pcm_lib_preallocate_dev_sg_pages(pci ? &pci->dev : NULL,
+                                                   substream, size, max);
 }
 
 /*
@@ -668,14 +658,8 @@ int snd_pcm_lib_preallocate_sg_pages_for
                                             snd_pcm_t *pcm,
                                             size_t size, size_t max)
 {
-       snd_pcm_substream_t *substream;
-       int stream, err;
-
-       for (stream = 0; stream < 2; stream++)
-               for (substream = pcm->streams[stream].substream; substream; substream 
= substream->next)
-                       if ((err = snd_pcm_lib_preallocate_sg_pages(pci, substream, 
size, max)) < 0)
-                               return err;
-       return 0;
+       return snd_pcm_lib_preallocate_dev_sg_pages_for_all(pci ? &pci->dev : NULL,
+                                                           pcm, size, max);
 }
 
 #endif /* CONFIG_PCI */
diff -urpN orig/include/sound/memalloc.h linux/include/sound/memalloc.h
--- orig/include/sound/memalloc.h       Sun Feb 29 19:37:12 2004
+++ linux/include/sound/memalloc.h      Sun Feb 29 19:41:01 2004
@@ -38,7 +38,6 @@ struct snd_dma_device {
        int type;                       /* SNDRV_MEM_TYPE_XXX */
        union {
                struct device *dev;     /* generic device */
-               struct pci_dev *pci;    /* for PCI and PCI-SG types */
                unsigned int flags;     /* GFP_XXX for continous and ISA types */
 #ifdef CONFIG_SBUS
                struct sbus_dev *sbus;  /* for SBUS type */
@@ -53,9 +52,7 @@ struct snd_dma_device {
 #define SNDRV_DMA_TYPE_UNKNOWN         0       /* not defined */
 #define SNDRV_DMA_TYPE_CONTINUOUS      1       /* continuous no-DMA memory */
 #define SNDRV_DMA_TYPE_ISA             2       /* ISA continuous */
-#define SNDRV_DMA_TYPE_PCI             3       /* PCI continuous */
 #define SNDRV_DMA_TYPE_SBUS            4       /* SBUS continuous */
-#define SNDRV_DMA_TYPE_PCI_SG          5       /* PCI SG-buffer */
 #define SNDRV_DMA_TYPE_DEV             6       /* generic device continuous */
 #define SNDRV_DMA_TYPE_DEV_SG          7       /* generic device SG-buffer */
 
@@ -66,8 +63,8 @@ struct snd_dma_device {
 static inline void snd_dma_device_pci(struct snd_dma_device *dev, struct pci_dev 
*pci, unsigned int id)
 {
        memset(dev, 0, sizeof(*dev));
-       dev->type = SNDRV_DMA_TYPE_PCI;
-       dev->dev.pci = pci;
+       dev->type = SNDRV_DMA_TYPE_DEV;
+       dev->dev.dev = &pci->dev;
        dev->id = id;
 }
 #endif


-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 PCMCIA      - http://pcmcia.arm.linux.org.uk/
                 2.6 Serial core


-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to