Update of /cvsroot/alsa/alsa-driver/acore In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24264/acore
Modified Files: memalloc.inc memalloc.inc1 memalloc.patch memory_wrapper.c pci_compat_22.c sgbuf.c Log Message: - clean up the DMA code. added the wrapper for 2.2/2.4 kernels. - don't include unneeded header files for 2.6 kernels. - always export pci_alloc_consistent() wrapper for 2.2 kernels. it's used for ISA buffer allocation now. - added the missing header files. Index: memalloc.inc =================================================================== RCS file: /cvsroot/alsa/alsa-driver/acore/memalloc.inc,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- memalloc.inc 5 Mar 2004 11:54:05 -0000 1.5 +++ memalloc.inc 6 Mar 2004 16:55:12 -0000 1.6 @@ -28,100 +28,6 @@ } #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0) -static LIST_HEAD(snd_pci_devices); - -struct snd_pci_device { - struct list_head *list; - struct device dev; - struct pci_dev *pci; - u64 dummy_mask; -}; - -static inline struct pci_dev *to_pci_dev(struct device *dev) -{ - return dev->d.pci; -} - -static inline void *dma_alloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle, int flag) -{ - return pci_alloc_consistent(to_pci_dev(dev), size, dma_handle); -} - -static inline void dma_free_coherent(struct device *dev, size_t size, - void *vaddr, dma_addr_t dma_handle) -{ - pci_free_consistent(to_pci_dev(dev), size, vaddr, dma_handle); -} - -struct device *snd_kdevice_pci(struct pci_dev *pci) -{ - struct snd_pci_device *pdev; - struct list_head *pos; - - list_for_each(pos, &snd_pci_devices) { - pdev = list_entry(pos, struct snd_pci_device, list); - if (pdev->pci == pci) - return &pdev->dev; - } - pdev = kmalloc(sizeof(struct snd_pci_device), GFP_KERNEL); - if (pdev == NULL) { - printk(KERN_ERR "unable to allocate snd_pci_device struct\n"); - return NULL; - } - pdev->dev.d.pci = pci; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) - pdev->dev.dma_mask = &pci->dma_mask; -#else - pdev->dev.dma_mask = &pdev->dummy_mask; -#endif - return &pdev->dev; -} - -static void snd_kdevice_free_all(void) -{ - struct snd_pci_device *pdev; - struct list_head *pos, *n; - - list_for_each_safe(pos, n, &snd_pci_devices) { - pdev = list_entry(pos, struct snd_pci_device, list); - kfree(pdev); - } -} - -static const char *snd_pci_dev_name(struct pci_dev *pci) -{ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) - if (pci) { - static char tmp[32]; - sprintf(tmp, "%02x:%02x:%02x", - pci->bus->number, - pci->bus->primary, - pci->bus->secondary); - return tmp; - } -#else - if (pci) - return pci->slot_name; -#endif - return "???"; -} - -static const char *snd_kdevice_busid(struct device *dev) -{ - return snd_pci_dev_name(dev->d.pci); -} - +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) #define __GFP_NOWARN 0 - -#else /* >= 2.5.0 */ - -static inline struct device *snd_kdevice_pci(struct pci_dev *pci) -{ - return &pci->dev; -} - -#define snd_kdevice_free_all() - -#endif /* <2.5.0 */ +#endif Index: memalloc.inc1 =================================================================== RCS file: /cvsroot/alsa/alsa-driver/acore/memalloc.inc1,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- memalloc.inc1 20 Nov 2003 10:47:30 -0000 1.2 +++ memalloc.inc1 6 Mar 2004 16:55:12 -0000 1.3 @@ -1,5 +1,8 @@ /* compatible functions */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) && defined(CONFIG_PCI) +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) +EXPORT_SYMBOL(snd_pci_compat_alloc_consistent); +EXPORT_SYMBOL(snd_pci_compat_free_consistent); +#ifdef CONFIG_PCI EXPORT_SYMBOL(snd_pci_compat_match_device); EXPORT_SYMBOL(snd_pci_compat_register_driver); EXPORT_SYMBOL(snd_pci_compat_unregister_driver); @@ -8,8 +11,6 @@ EXPORT_SYMBOL(snd_pci_compat_set_power_state); EXPORT_SYMBOL(snd_pci_compat_enable_device); EXPORT_SYMBOL(snd_pci_compat_find_capability); -EXPORT_SYMBOL(snd_pci_compat_alloc_consistent); -EXPORT_SYMBOL(snd_pci_compat_free_consistent); EXPORT_SYMBOL(snd_pci_compat_dma_supported); EXPORT_SYMBOL(snd_pci_compat_get_dma_mask); EXPORT_SYMBOL(snd_pci_compat_set_dma_mask); @@ -21,6 +22,7 @@ EXPORT_SYMBOL(snd_pci_compat_request_regions); EXPORT_SYMBOL(snd_pci_compat_release_regions); #endif +#endif #ifndef CONFIG_HAVE_VMALLOC_TO_PAGE EXPORT_SYMBOL(snd_compat_vmalloc_to_page); Index: memalloc.patch =================================================================== RCS file: /cvsroot/alsa/alsa-driver/acore/memalloc.patch,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- memalloc.patch 5 Mar 2004 11:54:05 -0000 1.5 +++ memalloc.patch 6 Mar 2004 16:55:12 -0000 1.6 @@ -1,96 +1,100 @@ ---- ../alsa-kernel/core/memalloc.c 2004-03-03 20:53:56.000000000 +0100 -+++ memalloc.c 2004-03-05 00:44:35.895900880 +0100 +--- memalloc.c 2004-03-06 17:00:36.556407787 +0100 ++++ memalloc.c 2004-03-06 17:00:32.107418149 +0100 @@ -1,3 +1,4 @@ +#include "memalloc.inc" /* * Copyright (c) by Jaroslav Kysela <[EMAIL PROTECTED]> * Takashi Iwai <[EMAIL PROTECTED]> -@@ -85,6 +86,7 @@ +@@ -89,6 +90,7 @@ * 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 + ++#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__) /* -@@ -135,6 +137,7 @@ +@@ -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 + +- 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 */ ++#else ++ dma_mask = pci->dma_mask; ++ pci->dma_mask = 0xffffffff; /* do without masking */ ++#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 ++ pci->dma_mask = dma_mask; /* restore */ ++#endif + if (ret) { + /* obtained address is out of range? */ + if (((unsigned long)*dma_handle + size - 1) & ~dma_mask) { +@@ -163,6 +189,8 @@ #define dma_alloc_coherent snd_dma_hack_alloc_coherent #endif /* arch */ +#endif /* >= 2.4.0 */ ++ /* * -@@ -462,7 +465,7 @@ - #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_dev_pages(snd_kdevice_pci(dev->dev.pci), size, &dmab->addr); - break; - #endif - case SNDRV_DMA_TYPE_DEV: -@@ -523,7 +526,7 @@ - #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_dev_pages_fallback(snd_kdevice_pci(dev->dev.pci), size, &dmab->addr, &dmab->bytes); - break; - #endif - case SNDRV_DMA_TYPE_DEV: -@@ -570,7 +573,7 @@ - #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_dev_pages(snd_kdevice_pci(dev->dev.pci), dmab->bytes, dmab->area, dmab->addr); - break; - #endif - case SNDRV_DMA_TYPE_DEV: -@@ -725,6 +728,7 @@ - kfree(mem); - } - up(&list_mutex); -+ snd_kdevice_free_all(); - } - - -@@ -772,7 +776,7 @@ - { - memset(dev, 0, sizeof(*dev)); - dev->type = SNDRV_DMA_TYPE_DEV; -- dev->dev.dev = &pci->dev; -+ dev->dev.dev = snd_kdevice_pci(pci); - dev->id = id; - } - -@@ -875,7 +879,11 @@ - if (mem->dev.dev.dev) { +@@ -797,9 +825,24 @@ + case SNDRV_DMA_TYPE_DEV: + case SNDRV_DMA_TYPE_DEV_SG: + if (mem->dev.dev) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) len += sprintf(page + len, "%s [%s]", - mem->dev.type == SNDRV_DMA_TYPE_PCI_SG ? "PCI" : "PCI-SG", -- mem->dev.dev.pci->slot_name); -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) -+ mem->dev.dev.pci->dev.bus_id); + mem->dev.type == SNDRV_DMA_TYPE_DEV_SG ? "DEV-SG" : "DEV", + mem->dev.dev->bus_id); +#else -+ snd_pci_dev_name(mem->dev.dev.pci)); -+#endif - } - break; - #endif -@@ -884,7 +892,11 @@ - if (mem->dev.dev.dev) { - len += sprintf(page + len, "%s [%s]", - mem->dev.type == SNDRV_DMA_TYPE_DEV_SG ? "DEV" : "DEV-SG", -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) - mem->dev.dev.dev->bus_id); ++ struct pci_dev *pci = (struct pci_dev *)mem->dev.dev; ++ len += sprintf(page + len, "%s ", ++ mem->dev.type == SNDRV_DMA_TYPE_DEV_SG ? "PCI-SG" : "PCI"); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) ++ len += sprintf(page + len, "[%02x:%02x:%02x]", ++ pci->bus->number, ++ pci->bus->primary, ++ pci->bus->secondary); +#else -+ snd_kdevice_busid(mem->dev.dev.dev)); ++ len += sprintf(page + len, "[%s]", ++ pci->slot_name); ++#endif /* < 2.4.0 */ +#endif - } + } else + len += sprintf(page + len, "ISA"); break; - default: -@@ -959,3 +971,5 @@ +@@ -875,3 +918,5 @@ EXPORT_SYMBOL(snd_malloc_pages); EXPORT_SYMBOL(snd_malloc_pages_fallback); EXPORT_SYMBOL(snd_free_pages); Index: memory_wrapper.c =================================================================== RCS file: /cvsroot/alsa/alsa-driver/acore/memory_wrapper.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- memory_wrapper.c 10 Nov 2003 17:32:37 -0000 1.10 +++ memory_wrapper.c 6 Mar 2004 16:55:12 -0000 1.11 @@ -15,11 +15,9 @@ #include <linux/mm.h> #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) -#ifdef CONFIG_PCI #include <sound/memalloc.h> #include "pci_compat_22.c" #endif -#endif /* vmalloc_to_page wrapper */ #ifndef CONFIG_HAVE_VMALLOC_TO_PAGE Index: pci_compat_22.c =================================================================== RCS file: /cvsroot/alsa/alsa-driver/acore/pci_compat_22.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- pci_compat_22.c 21 Jan 2004 08:22:17 -0000 1.10 +++ pci_compat_22.c 6 Mar 2004 16:55:12 -0000 1.11 @@ -2,6 +2,8 @@ * PCI-compatible layer for 2.2 kernels */ +#ifdef CONFIG_PCI + static LIST_HEAD(pci_drivers); struct pci_driver_mapping { @@ -296,46 +298,6 @@ return 0; } -static void *snd_pci_compat_alloc_consistent1(unsigned long dma_mask, - unsigned long size, - int hop) -{ - void *res; - - if (++hop > 10) - return NULL; - res = snd_malloc_pages(size, GFP_KERNEL | (dma_mask <= 0x00ffffff ? GFP_DMA : 0)); - if (res == NULL) - return NULL; - if ((virt_to_bus(res) & ~dma_mask) || - ((virt_to_bus(res) + size - 1) & ~dma_mask)) { - void *res1 = snd_pci_compat_alloc_consistent1(dma_mask, size, hop); - snd_free_pages(res, size); - return res1; - } - return res; -} - -void *snd_pci_compat_alloc_consistent(struct pci_dev *dev, - long size, - dma_addr_t *dmaaddr) -{ - unsigned long dma_mask = snd_pci_compat_get_dma_mask(dev); - void *res = snd_pci_compat_alloc_consistent1(dma_mask, size, 0); - if (res != NULL) - *dmaaddr = (dma_addr_t)virt_to_bus(res); - return res; -} - -void snd_pci_compat_free_consistent(struct pci_dev *dev, long size, void *ptr, dma_addr_t dmaaddr) -{ - if (bus_to_virt(dmaaddr) != ptr) { - printk(KERN_ERR "invalid address given %p != %lx to snd_pci_compat_free_consistent\n", ptr, (unsigned long)dmaaddr); - return; - } - snd_free_pages(ptr, size); -} - int snd_pci_compat_dma_supported(struct pci_dev *dev, dma_addr_t mask) { return 1; @@ -396,3 +358,53 @@ for (i = 0; i < 6; i++) snd_pci_compat_release_region(pdev, i); } + +#endif /* CONFIG_PCI */ + +/* these functions are outside of CONFIG_PCI */ + +static void *snd_pci_compat_alloc_consistent1(unsigned long dma_mask, + unsigned long size, + int hop) +{ + void *res; + + if (++hop > 10) + return NULL; + res = snd_malloc_pages(size, GFP_KERNEL | (dma_mask <= 0x00ffffff ? GFP_DMA : 0)); + if (res == NULL) + return NULL; + if ((virt_to_bus(res) & ~dma_mask) || + ((virt_to_bus(res) + size - 1) & ~dma_mask)) { + void *res1 = snd_pci_compat_alloc_consistent1(dma_mask, size, hop); + snd_free_pages(res, size); + return res1; + } + return res; +} + +void *snd_pci_compat_alloc_consistent(struct pci_dev *dev, + long size, + dma_addr_t *dmaaddr) +{ + unsigned long dma_mask; +#ifdef CONFIG_PCI + dma_mask = snd_pci_compat_get_dma_mask(dev); +#else + dma_mask = 0xffffff; /* ISA - 16MB */ +#endif + void *res = snd_pci_compat_alloc_consistent1(dma_mask, size, 0); + if (res != NULL) + *dmaaddr = (dma_addr_t)virt_to_bus(res); + return res; +} + +void snd_pci_compat_free_consistent(struct pci_dev *dev, long size, void *ptr, dma_addr_t dmaaddr) +{ + if (bus_to_virt(dmaaddr) != ptr) { + printk(KERN_ERR "invalid address given %p != %lx to snd_pci_compat_free_consistent\n", ptr, (unsigned long)dmaaddr); + return; + } + snd_free_pages(ptr, size); +} + Index: sgbuf.c =================================================================== RCS file: /cvsroot/alsa/alsa-driver/acore/sgbuf.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- sgbuf.c 3 Mar 2004 11:51:09 -0000 1.7 +++ sgbuf.c 6 Mar 2004 16:55:12 -0000 1.8 @@ -57,12 +57,8 @@ unsigned int i; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) unsigned long rmask; - if (sgbuf->dev.type == SNDRV_DMA_TYPE_PCI) - rmask = sgbuf->dev.dev.pci->dma_mask; - else if (sgbuf->dev.dev.dev->dma_mask) - rmask = *sgbuf->dev.dev.dev->dma_mask; - else - rmask = 0; + struct pci_dev *pci = (struct pci_dev *)sgbuf->dev.dev; + rmask = pci->dma_mask; if (rmask) rmask = ~rmask; else @@ -146,10 +142,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