From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: hdsp driver Date: Fri, 28 Feb 2003 16:14:28 +0100 Sender: alsa-devel-admin@lists.sourceforge.net Message-ID: References: <200302271843.h1RIhYa04397@linuxaudiosystems.com> Mime-Version: 1.0 (generated by SEMI 1.14.4 - "Hosorogi") Content-Type: multipart/mixed; boundary="Multipart_Fri_Feb_28_16:14:28_2003-1" Return-path: In-Reply-To: <200302271843.h1RIhYa04397@linuxaudiosystems.com> Errors-To: alsa-devel-admin@lists.sourceforge.net List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: To: Paul Davis Cc: alsa-devel@lists.sourceforge.net List-Id: alsa-devel@alsa-project.org --Multipart_Fri_Feb_28_16:14:28_2003-1 Content-Type: text/plain; charset=US-ASCII Hi Paul, At Thu, 27 Feb 2003 13:43:34 -0500, Paul Davis wrote: > > i haven't had time today to get the patch for the hdsp ready. however, > the new source works here (i have some CVS sync issues). i'll get it > out to the list on monday (i'm gone for the weekend). could you check the attached patch (to the current cvs version) for rme9652 and hdsp? it will replace the memory allocation using the new snd-page-alloc module instead of snd-hammerfall-mem. although the former doesn't allocate the buffer in advance by checking the pci id, but it will preserve the buffers at alsasound stop or restart operations just like the latter does. Takashi --Multipart_Fri_Feb_28_16:14:28_2003-1 Content-Type: application/octet-stream Content-Disposition: attachment; filename="rme-mem-new.dif" Content-Transfer-Encoding: 7bit Index: alsa-kernel/scripts/Modules.dep =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/scripts/Modules.dep,v retrieving revision 1.16 diff -u -r1.16 Modules.dep --- alsa-kernel/scripts/Modules.dep 25 Feb 2003 14:55:50 -0000 1.16 +++ alsa-kernel/scripts/Modules.dep 27 Feb 2003 14:08:14 -0000 @@ -187,9 +187,8 @@ |snd-nm256 snd-pcm snd-ac97-codec %dir linux/sound/pci/rme9652 -snd-hammerfall-mem -|snd-rme9652 snd-pcm snd-hammerfall-mem -|snd-hdsp snd-pcm snd-hammerfall-mem +|snd-rme9652 snd-pcm +|snd-hdsp snd-pcm snd-rawmidi %dir linux/sound/pci/trident snd-trident-synth @if_sequencer snd-seq-midi-emul snd-ainstr-simple Index: alsa-kernel/pci/rme9652/Makefile =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/rme9652/Makefile,v retrieving revision 1.7 diff -u -r1.7 Makefile --- alsa-kernel/pci/rme9652/Makefile 10 Feb 2003 09:02:18 -0000 1.7 +++ alsa-kernel/pci/rme9652/Makefile 26 Feb 2003 15:52:21 -0000 @@ -3,10 +3,9 @@ # Copyright (c) 2001 by Jaroslav Kysela # -snd-hammerfall-mem-objs := hammerfall_mem.o snd-rme9652-objs := rme9652.o snd-hdsp-objs := hdsp.o # Toplevel Module Dependency -obj-$(CONFIG_SND_RME9652) += snd-rme9652.o snd-hammerfall-mem.o -obj-$(CONFIG_SND_HDSP) += snd-hdsp.o snd-hammerfall-mem.o +obj-$(CONFIG_SND_RME9652) += snd-rme9652.o +obj-$(CONFIG_SND_HDSP) += snd-hdsp.o Index: alsa-kernel/pci/rme9652/hammerfall_mem.h =================================================================== RCS file: alsa-kernel/pci/rme9652/hammerfall_mem.h diff -N alsa-kernel/pci/rme9652/hammerfall_mem.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ alsa-kernel/pci/rme9652/hammerfall_mem.h 28 Feb 2003 13:28:18 -0000 @@ -0,0 +1,35 @@ +/* + */ + +#include + +static void *snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size, dma_addr_t *addrp, int capture) +{ + struct snd_dma_device pdev; + struct snd_dma_buffer dmbuf; + + snd_dma_device_pci(&pdev, pci, capture); + memset(&dmbuf, 0, sizeof(dmbuf)); + if (! snd_dma_get_reserved(&pdev, &dmbuf)) { + if (snd_dma_alloc_pages(&pdev, size, &dmbuf) < 0) + return NULL; + snd_dma_set_reserved(&pdev, &dmbuf); + } + *addrp = dmbuf.addr; + return dmbuf.area; +} + +static void snd_hammerfall_free_buffer(struct pci_dev *pci, int capture) +{ + struct snd_dma_device dev; + snd_dma_device_pci(&dev, pci, capture); + snd_dma_set_reserved(&dev, NULL); +} + +static void snd_hammerfall_release_buffer(struct pci_dev *pci, int capture) +{ + struct snd_dma_device dev; + snd_dma_device_pci(&dev, pci, capture); + snd_dma_free_reserved(&dev); +} + Index: alsa-kernel/pci/rme9652/hdsp.c =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/rme9652/hdsp.c,v retrieving revision 1.21 diff -u -r1.21 hdsp.c --- alsa-kernel/pci/rme9652/hdsp.c 14 Feb 2003 09:33:44 -0000 1.21 +++ alsa-kernel/pci/rme9652/hdsp.c 26 Feb 2003 15:52:11 -0000 @@ -405,12 +405,6 @@ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; -#define HDSP_PREALLOCATE_MEMORY /* via module snd-hdsp_mem */ - -#ifdef HDSP_PREALLOCATE_MEMORY -extern void *snd_hammerfall_get_buffer(struct pci_dev *, dma_addr_t *dmaaddr); -extern void snd_hammerfall_free_buffer(struct pci_dev *, void *ptr); -#endif static struct pci_device_id snd_hdsp_ids[] __devinitdata = { { @@ -2084,28 +2078,16 @@ snd_info_set_text_ops(entry, hdsp, snd_hdsp_proc_read); } +#include "hammerfall_mem.h" + static void snd_hdsp_free_buffers(hdsp_t *hdsp) { if (hdsp->capture_buffer_unaligned) { -#ifndef HDSP_PREALLOCATE_MEMORY - snd_free_pci_pages(hdsp->pci, - HDSP_DMA_AREA_BYTES, - hdsp->capture_buffer_unaligned, - hdsp->capture_buffer_addr); -#else - snd_hammerfall_free_buffer(hdsp->pci, hdsp->capture_buffer_unaligned); -#endif + snd_hammerfall_release_buffer(hdsp->pci, 1); } if (hdsp->playback_buffer_unaligned) { -#ifndef HDSP_PREALLOCATE_MEMORY - snd_free_pci_pages(hdsp->pci, - HDSP_DMA_AREA_BYTES, - hdsp->playback_buffer_unaligned, - hdsp->playback_buffer_addr); -#else - snd_hammerfall_free_buffer(hdsp->pci, hdsp->playback_buffer_unaligned); -#endif + snd_hammerfall_release_buffer(hdsp->pci, 0); } } @@ -2115,29 +2097,14 @@ dma_addr_t pb_addr, cb_addr; unsigned long pb_bus, cb_bus; -#ifndef HDSP_PREALLOCATE_MEMORY - cb = snd_malloc_pci_pages(hdsp->pci, HDSP_DMA_AREA_BYTES, &cb_addr); - pb = snd_malloc_pci_pages(hdsp->pci, HDSP_DMA_AREA_BYTES, &pb_addr); -#else - cb = snd_hammerfall_get_buffer(hdsp->pci, &cb_addr); - pb = snd_hammerfall_get_buffer(hdsp->pci, &pb_addr); -#endif + pb = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES, &pb_addr, 0); + cb = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES, &cb_addr, 1); if (cb == 0 || pb == 0) { - if (cb) { -#ifdef HDSP_PREALLOCATE_MEMORY - snd_hammerfall_free_buffer(hdsp->pci, cb); -#else - snd_free_pci_pages(hdsp->pci, HDSP_DMA_AREA_BYTES, cb, cb_addr); -#endif - } - if (pb) { -#ifdef HDSP_PREALLOCATE_MEMORY - snd_hammerfall_free_buffer(hdsp->pci, pb); -#else - snd_free_pci_pages(hdsp->pci, HDSP_DMA_AREA_BYTES, pb, pb_addr); -#endif - } + if (pb) + snd_hammerfall_free_buffer(hdsp->pci, 0); + if (cb) + snd_hammerfall_free_buffer(hdsp->pci, 1); printk(KERN_ERR "%s: no buffers available\n", hdsp->card_name); return -ENOMEM; Index: alsa-kernel/pci/rme9652/rme9652.c =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/rme9652/rme9652.c,v retrieving revision 1.27 diff -u -r1.27 rme9652.c --- alsa-kernel/pci/rme9652/rme9652.c 3 Feb 2003 09:48:44 -0000 1.27 +++ alsa-kernel/pci/rme9652/rme9652.c 26 Feb 2003 15:52:04 -0000 @@ -306,12 +306,6 @@ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; -#define RME9652_PREALLOCATE_MEMORY /* via module snd-hammerfall-mem */ - -#ifdef RME9652_PREALLOCATE_MEMORY -extern void *snd_hammerfall_get_buffer(struct pci_dev *, dma_addr_t *dmaaddr); -extern void snd_hammerfall_free_buffer(struct pci_dev *, void *ptr); -#endif static struct pci_device_id snd_rme9652_ids[] __devinitdata = { { @@ -1807,28 +1801,16 @@ snd_info_set_text_ops(entry, rme9652, snd_rme9652_proc_read); } +#include "hammerfall_mem.h" + static void snd_rme9652_free_buffers(rme9652_t *rme9652) { if (rme9652->capture_buffer_unaligned) { -#ifndef RME9652_PREALLOCATE_MEMORY - snd_free_pci_pages(rme9652->pci, - RME9652_DMA_AREA_BYTES, - rme9652->capture_buffer_unaligned, - rme9652->capture_buffer_addr); -#else - snd_hammerfall_free_buffer(rme9652->pci, rme9652->capture_buffer_unaligned); -#endif + snd_hammerfall_release_buffer(rme9652->pci, 1); } if (rme9652->playback_buffer_unaligned) { -#ifndef RME9652_PREALLOCATE_MEMORY - snd_free_pci_pages(rme9652->pci, - RME9652_DMA_AREA_BYTES, - rme9652->playback_buffer_unaligned, - rme9652->playback_buffer_addr); -#else - snd_hammerfall_free_buffer(rme9652->pci, rme9652->playback_buffer_unaligned); -#endif + snd_hammerfall_release_buffer(rme9652->pci, 0); } } @@ -1855,29 +1837,14 @@ dma_addr_t pb_addr, cb_addr; unsigned long pb_bus, cb_bus; -#ifndef RME9652_PREALLOCATE_MEMORY - cb = snd_malloc_pci_pages(rme9652->pci, RME9652_DMA_AREA_BYTES, &cb_addr); - pb = snd_malloc_pci_pages(rme9652->pci, RME9652_DMA_AREA_BYTES, &pb_addr); -#else - cb = snd_hammerfall_get_buffer(rme9652->pci, &cb_addr); - pb = snd_hammerfall_get_buffer(rme9652->pci, &pb_addr); -#endif + pb = snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, &pb_addr, 0); + cb = snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, &cb_addr, 1); if (cb == 0 || pb == 0) { - if (cb) { -#ifdef RME9652_PREALLOCATE_MEMORY - snd_hammerfall_free_buffer(rme9652->pci, cb); -#else - snd_free_pci_pages(rme9652->pci, RME9652_DMA_AREA_BYTES, cb, cb_addr); -#endif - } - if (pb) { -#ifdef RME9652_PREALLOCATE_MEMORY - snd_hammerfall_free_buffer(rme9652->pci, pb); -#else - snd_free_pci_pages(rme9652->pci, RME9652_DMA_AREA_BYTES, pb, pb_addr); -#endif - } + if (pb) + snd_hammerfall_free_buffer(rme9652->pci, 0); + if (cb) + snd_hammerfall_free_buffer(rme9652->pci, 1); printk(KERN_ERR "%s: no buffers available\n", rme9652->card_name); return -ENOMEM; --Multipart_Fri_Feb_28_16:14:28_2003-1-- ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf