Update of /cvsroot/alsa/alsa-driver/acore
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16257

Modified Files:
        memalloc.patch 
Log Message:
- moved the hack for the old 2.6 kernels to the patch.
- fixed the compilation with 2.4 kernels.


Index: memalloc.patch
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/acore/memalloc.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- memalloc.patch      6 Mar 2004 16:55:12 -0000       1.6
+++ memalloc.patch      16 Apr 2004 09:24:44 -0000      1.7
@@ -1,66 +1,108 @@
---- memalloc.c 2004-03-06 17:00:36.556407787 +0100
-+++ memalloc.c 2004-03-06 17:00:32.107418149 +0100
+--- memalloc.c 2004-04-16 10:55:50.373199180 +0200
++++ memalloc.c 2004-04-16 10:57:22.365350732 +0200
 @@ -1,3 +1,4 @@
 +#include "memalloc.inc"
  /*
   *  Copyright (c) by Jaroslav Kysela <[EMAIL PROTECTED]>
   *                   Takashi Iwai <[EMAIL PROTECTED]>
-@@ -89,6 +90,7 @@
+@@ -91,7 +92,43 @@
   *  Hacks
   */
  
 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
- static void *snd_dma_alloc_coherent1(struct device *dev, size_t size,
-                                    dma_addr_t *dma_handle, int flags)
- {
-@@ -112,7 +114,15 @@
- #undef dma_free_coherent
- #define dma_free_coherent snd_dma_free_coherent1
- 
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 5)
++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
++#endif /* < 2.6.5 */
++
 +#else
 +
 +/* for 2.2/2.4 kernels */
 +#define dma_alloc_coherent(dev,size,addr,flags) pci_alloc_consistent((struct pci_dev 
*)(dev),size,addr)
 +#define dma_free_coherent(dev,size,ptr,addr) pci_free_consistent((struct pci_dev 
*)(dev),size,ptr,addr)
- 
++
 +#endif /* >= 2.6.0 */
 +
 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
  #if defined(__i386__) || defined(__ppc__) || defined(__x86_64__)
- 
++
  /*
-@@ -136,13 +146,29 @@
- {
-       void *ret;
-       u64 dma_mask;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
-+      struct pci_dev *pci = (struct pci_dev *)dev;
-+#endif
+  * A hack to allocate large buffers via dma_alloc_coherent()
+  *
+@@ -108,21 +145,45 @@
+  * so dma_mask doesn't have to be messed with.
+  */
  
--      if (dev == NULL || !dev->dma_mask)
-+      if (dev == NULL
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
-+          || !dev->dma_mask
-+#endif
-+          )
-               return dma_alloc_coherent(dev, size, dma_handle, flags);
 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
-       dma_mask = *dev->dma_mask;
-       *dev->dma_mask = 0xffffffff;    /* do without masking */
++#define VALID_DMA_MASK(dev)   (dev)->dma_mask
++#define GET_DMA_MASK(dev)     *(dev)->dma_mask
++#define SET_DMA_MASK(dev,val) (*(dev)->dma_mask = (val))
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 5)
++#define GET_COHERENT_DMA_MASK(dev)    (dev)->coherent_dma_mask
++#define SET_COHERENT_DMA_MASK(dev,val)        ((dev)->coherent_dma_mask = (val))
 +#else
-+      dma_mask = pci->dma_mask;
-+      pci->dma_mask = 0xffffffff;     /* do without masking */
++#define GET_COHERENT_DMA_MASK(dev)    0 /* dummy */
++#define SET_COHERENT_DMA_MASK(dev,val)
 +#endif
-       ret = dma_alloc_coherent(dev, size, dma_handle, flags);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
-       *dev->dma_mask = dma_mask;      /* restore */
++#else /* 2.4.x */
++#define VALID_DMA_MASK(dev)   0
++#define GET_DMA_MASK(dev)     ((struct pci_dev *)(dev))->dma_mask
++#define SET_DMA_MASK(dev,val) (((struct pci_dev *)(dev))->dma_mask = (val))
++#ifdef CONFIG_HAVE_PCI_CONSISTENT_DMA_MASK
++#define GET_COHERENT_DMA_MASK(dev)    ((struct pci_dev *)(dev))->consistent_dma_mask
++#define SET_COHERENT_DMA_MASK(dev,val)        (((struct pci_dev 
*)(dev))->consistent_dma_mask = (val))
 +#else
-+      pci->dma_mask = dma_mask;       /* restore */
++#define GET_COHERENT_DMA_MASK(dev)    0 /* dummy */
++#define SET_COHERENT_DMA_MASK(dev,val)
++#endif
 +#endif
++
+ static void *snd_dma_hack_alloc_coherent(struct device *dev, size_t size,
+                                        dma_addr_t *dma_handle, int flags)
+ {
+       void *ret;
+       u64 dma_mask, coherent_dma_mask;
+ 
+-      if (dev == NULL || !dev->dma_mask)
++      if (dev == NULL || VALID_DMA_MASK(dev))
+               return dma_alloc_coherent(dev, size, dma_handle, flags);
+-      dma_mask = *dev->dma_mask;
+-      coherent_dma_mask = dev->coherent_dma_mask;
+-      *dev->dma_mask = 0xffffffff;    /* do without masking */
+-      dev->coherent_dma_mask = 0xffffffff;    /* do without masking */
++      dma_mask = GET_DMA_MASK(dev);
++      coherent_dma_mask = GET_COHERENT_DMA_MASK(dev);
++      SET_DMA_MASK(dev, 0xffffffff);  /* do without masking */
++      SET_COHERENT_DMA_MASK(dev, 0xffffffff);         /* do without masking */
+       ret = dma_alloc_coherent(dev, size, dma_handle, flags);
+-      *dev->dma_mask = dma_mask;      /* restore */
+-      dev->coherent_dma_mask = coherent_dma_mask;     /* restore */
++      SET_DMA_MASK(dev, dma_mask);    /* restore */
++      SET_COHERENT_DMA_MASK(dev, coherent_dma_mask)   /* restore */;
        if (ret) {
                /* obtained address is out of range? */
                if (((unsigned long)*dma_handle + size - 1) & ~dma_mask) {
-@@ -163,6 +189,8 @@
+@@ -147,6 +208,8 @@
  #define dma_alloc_coherent snd_dma_hack_alloc_coherent
  
  #endif /* arch */
@@ -69,7 +111,7 @@
  
  /*
   *
-@@ -797,9 +825,24 @@
+@@ -781,9 +844,24 @@
                case SNDRV_DMA_TYPE_DEV:
                case SNDRV_DMA_TYPE_DEV_SG:
                        if (mem->dev.dev) {
@@ -94,7 +136,7 @@
                        } else
                                len += sprintf(page + len, "ISA");
                        break;
-@@ -875,3 +918,5 @@
+@@ -840,3 +918,5 @@
  EXPORT_SYMBOL(snd_malloc_pages);
  EXPORT_SYMBOL(snd_malloc_pages_fallback);
  EXPORT_SYMBOL(snd_free_pages);



-------------------------------------------------------
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