Update of /cvsroot/alsa/alsa-kernel/pci/emu10k1
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18820/alsa-kernel/pci/emu10k1

Modified Files:
        emu10k1_callback.c emu10k1_main.c emufx.c emupcm.c emuproc.c 
        memory.c 
Log Message:
Big DMA cleanup originated by Russell King <[EMAIL PROTECTED]>
* Russel
  - introduced 'struct device' support for 2.6 dma_alloc_coherent()
* Jaroslav
  - removed all bus-specific allocation functions
  - extended snd_dma_alloc_pages/snd_dma_free_pages to handle all bus types
  - recoded all (or almost all) device drivers
  - sgbuf functions are bus independent now


Index: emu10k1_callback.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emu10k1_callback.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- emu10k1_callback.c  15 Aug 2002 12:13:09 -0000      1.9
+++ emu10k1_callback.c  2 Mar 2004 15:32:37 -0000       1.10
@@ -405,7 +405,7 @@
        snd_emu10k1_ptr_write(hw, Z2, ch, 0);
 
        /* invalidate maps */
-       temp = (hw->silent_page_dmaaddr << 1) | MAP_PTI_MASK;
+       temp = (hw->silent_page.addr << 1) | MAP_PTI_MASK;
        snd_emu10k1_ptr_write(hw, MAPA, ch, temp);
        snd_emu10k1_ptr_write(hw, MAPB, ch, temp);
 #if 0

Index: emu10k1_main.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emu10k1_main.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- emu10k1_main.c      21 Jan 2004 18:32:47 -0000      1.30
+++ emu10k1_main.c      2 Mar 2004 15:32:37 -0000       1.31
@@ -97,7 +97,8 @@
        unsigned int silent_page;
 
        emu->fx8010.itram_size = (16 * 1024)/2;
-       emu->fx8010.etram_size = 0;
+       emu->fx8010.etram_pages.area = NULL;
+       emu->fx8010.etram_pages.bytes = 0;
 
        /* disable audio and lock cache */
        outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, 
emu->port + HCFG);
@@ -184,15 +185,15 @@
        /*
         *  Clear page with silence & setup all pointers to this page
         */
-       memset(emu->silent_page, 0, PAGE_SIZE);
-       silent_page = emu->silent_page_dmaaddr << 1;
+       memset(emu->silent_page.area, 0, PAGE_SIZE);
+       silent_page = emu->silent_page.addr << 1;
        for (idx = 0; idx < MAXPAGES; idx++)
-               emu->ptb_pages[idx] = cpu_to_le32(silent_page | idx);
-       snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages_dmaaddr);
+               ((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx);
+       snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr);
        snd_emu10k1_ptr_write(emu, TCB, 0, 0);  /* taken from original driver */
        snd_emu10k1_ptr_write(emu, TCBS, 0, 4); /* taken from original driver */
 
-       silent_page = (emu->silent_page_dmaaddr << 1) | MAP_PTI_MASK;
+       silent_page = (emu->silent_page.addr << 1) | MAP_PTI_MASK;
        for (ch = 0; ch < NUM_G; ch++) {
                snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
                snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
@@ -546,10 +547,10 @@
                }
        if (emu->memhdr)
                snd_util_memhdr_free(emu->memhdr);
-       if (emu->silent_page)
-               snd_free_pci_pages(emu->pci, EMUPAGESIZE, emu->silent_page, 
emu->silent_page_dmaaddr);
-       if (emu->ptb_pages)
-               snd_free_pci_pages(emu->pci, 32 * 1024, (void *)emu->ptb_pages, 
emu->ptb_pages_dmaaddr);
+       if (emu->silent_page.area)
+               snd_dma_free_pages(&emu->dma_dev, &emu->silent_page);
+       if (emu->ptb_pages.area)
+               snd_dma_free_pages(&emu->dma_dev, &emu->ptb_pages);
        if (emu->page_ptr_table)
                vfree(emu->page_ptr_table);
        if (emu->page_addr_table)
@@ -638,9 +639,12 @@
        }
        emu->irq = pci->irq;
 
+       memset(&emu->dma_dev, 0, sizeof(emu->dma_dev));
+       emu->dma_dev.type = SNDRV_DMA_TYPE_PCI;
+       emu->dma_dev.dev.pci = pci;
+
        emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
-       emu->ptb_pages = snd_malloc_pci_pages(pci, 32 * 1024, &emu->ptb_pages_dmaaddr);
-       if (emu->ptb_pages == NULL) {
+       if (snd_dma_alloc_pages(&emu->dma_dev, 32 * 1024, &emu->ptb_pages) < 0) {
                snd_emu10k1_free(emu);
                return -ENOMEM;
        }
@@ -652,8 +656,7 @@
                return -ENOMEM;
        }
 
-       emu->silent_page = snd_malloc_pci_pages(pci, EMUPAGESIZE, 
&emu->silent_page_dmaaddr);
-       if (emu->silent_page == NULL) {
+       if (snd_dma_alloc_pages(&emu->dma_dev, EMUPAGESIZE, &emu->silent_page) < 0) {
                snd_emu10k1_free(emu);
                return -ENOMEM;
        }

Index: emufx.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emufx.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- emufx.c     4 Feb 2004 18:26:44 -0000       1.49
+++ emufx.c     2 Mar 2004 15:32:37 -0000       1.50
@@ -506,16 +506,16 @@
 
        while (frames > *tram_pos) {
                count = *tram_pos + 1;
-               snd_emu10k1_fx8010_playback_tram_poke1((unsigned short 
*)emu->fx8010.etram_pages + *tram_pos,
-                                                      (unsigned short 
*)emu->fx8010.etram_pages + *tram_pos + tram_size / 2,
+               snd_emu10k1_fx8010_playback_tram_poke1((unsigned short 
*)emu->fx8010.etram_pages.area + *tram_pos,
+                                                      (unsigned short 
*)emu->fx8010.etram_pages.area + *tram_pos + tram_size / 2,
                                                       src, count, *tram_shift);
                src += count * 2;
                frames -= count;
                *tram_pos = (tram_size / 2) - 1;
                (*tram_shift)++;
        }
-       snd_emu10k1_fx8010_playback_tram_poke1((unsigned short 
*)emu->fx8010.etram_pages + *tram_pos,
-                                              (unsigned short 
*)emu->fx8010.etram_pages + *tram_pos + tram_size / 2,
+       snd_emu10k1_fx8010_playback_tram_poke1((unsigned short 
*)emu->fx8010.etram_pages.area + *tram_pos,
+                                              (unsigned short 
*)emu->fx8010.etram_pages.area + *tram_pos + tram_size / 2,
                                               src, frames, *tram_shift++);
        *tram_pos -= frames;
 }
@@ -760,7 +760,7 @@
        strcpy(pcm->name, "EMU10K1 FX8010");
        emu->pcm_fx8010 = pcm;
        
-       snd_pcm_lib_preallocate_pci_pages_for_all(emu->pci, pcm, 64*1024, 0);
+       snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, emu->pci, 
64*1024, 0);
 
        if (rpcm)
                *rpcm = pcm;
@@ -2218,32 +2218,30 @@
                }
                size = 0x2000 << size_reg;
        }
-       if (emu->fx8010.etram_size == size)
+       if (emu->fx8010.etram_pages.bytes == size)
                return 0;
        spin_lock_irq(&emu->emu_lock);
        outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG);
        spin_unlock_irq(&emu->emu_lock);
        snd_emu10k1_ptr_write(emu, TCB, 0, 0);
        snd_emu10k1_ptr_write(emu, TCBS, 0, 0);
-       if (emu->fx8010.etram_pages != NULL) {
-               snd_free_pci_pages(emu->pci, emu->fx8010.etram_size * 2, 
emu->fx8010.etram_pages, emu->fx8010.etram_pages_dmaaddr);
-               emu->fx8010.etram_pages = NULL;
-               emu->fx8010.etram_size = 0;
+       if (emu->fx8010.etram_pages.area != NULL) {
+               snd_dma_free_pages(&emu->dma_dev, &emu->fx8010.etram_pages);
+               emu->fx8010.etram_pages.area = NULL;
+               emu->fx8010.etram_pages.bytes = 0;
        }
 
        if (size > 0) {
-               emu->fx8010.etram_pages = snd_malloc_pci_pages(emu->pci, size * 2, 
&emu->fx8010.etram_pages_dmaaddr);
-               if (emu->fx8010.etram_pages == NULL)
+               if (snd_dma_alloc_pages(&emu->dma_dev, size * 2, 
&emu->fx8010.etram_pages) < 0)
                        return -ENOMEM;
-               memset(emu->fx8010.etram_pages, 0, size * 2);
-               snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages_dmaaddr);
+               memset(emu->fx8010.etram_pages.area, 0, size * 2);
+               snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages.addr);
                snd_emu10k1_ptr_write(emu, TCBS, 0, size_reg);
                spin_lock_irq(&emu->emu_lock);
                outl(inl(emu->port + HCFG) & ~HCFG_LOCKTANKCACHE_MASK, emu->port + 
HCFG);
                spin_unlock_irq(&emu->emu_lock);        
        }
 
-       emu->fx8010.etram_size = size;
        return 0;
 }
 
@@ -2269,7 +2267,7 @@
        memset(info, 0, sizeof(info));
        info->card = emu->card_type;
        info->internal_tram_size = emu->fx8010.itram_size;
-       info->external_tram_size = emu->fx8010.etram_size;
+       info->external_tram_size = emu->fx8010.etram_pages.bytes;
        fxbus = fxbuses;
        extin = emu->audigy ? audigy_ins : creative_ins;
        extout = emu->audigy ? audigy_outs : creative_outs;

Index: emupcm.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emupcm.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- emupcm.c    7 Nov 2003 17:52:01 -0000       1.23
+++ emupcm.c    2 Mar 2004 15:32:37 -0000       1.24
@@ -323,7 +323,7 @@
        snd_emu10k1_ptr_write(emu, Z1, voice, 0);
        snd_emu10k1_ptr_write(emu, Z2, voice, 0);
        // invalidate maps
-       silent_page = ((unsigned int)emu->silent_page_dmaaddr << 1) | MAP_PTI_MASK;
+       silent_page = ((unsigned int)emu->silent_page.addr << 1) | MAP_PTI_MASK;
        snd_emu10k1_ptr_write(emu, MAPA, voice, silent_page);
        snd_emu10k1_ptr_write(emu, MAPB, voice, silent_page);
        // modulation envelope
@@ -998,11 +998,11 @@
        emu->pcm = pcm;
 
        for (substream = pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream; substream; 
substream = substream->next)
-               if ((err = snd_pcm_lib_preallocate_sg_pages(emu->pci, substream, 
64*1024, 64*1024)) < 0)
+               if ((err = snd_pcm_lib_preallocate_pages(substream, 
SNDRV_DMA_TYPE_PCI_SG, emu->pci, 64*1024, 64*1024)) < 0)
                        return err;
 
        for (substream = pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream; substream; 
substream = substream->next)
-               snd_pcm_lib_preallocate_pci_pages(emu->pci, substream, 64*1024, 
64*1024);
+               snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_PCI, emu->pci, 
64*1024, 64*1024);
 
        if (rpcm)
                *rpcm = pcm;
@@ -1048,7 +1048,7 @@
        strcpy(pcm->name, "EMU10K1 MIC");
        emu->pcm_mic = pcm;
 
-       snd_pcm_lib_preallocate_pci_pages_for_all(emu->pci, pcm, 64*1024, 64*1024);
+       snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, emu->pci, 
64*1024, 64*1024);
 
        if (rpcm)
                *rpcm = pcm;
@@ -1157,7 +1157,7 @@
        emu->efx_voices_mask[1] = 0;
        snd_ctl_add(emu->card, snd_ctl_new1(&snd_emu10k1_pcm_efx_voices_mask, emu));
 
-       snd_pcm_lib_preallocate_pci_pages_for_all(emu->pci, pcm, 64*1024, 64*1024);
+       snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, emu->pci, 
64*1024, 64*1024);
 
        return 0;
 }

Index: emuproc.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emuproc.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- emuproc.c   23 Oct 2003 14:34:53 -0000      1.14
+++ emuproc.c   2 Mar 2004 15:32:37 -0000       1.15
@@ -117,7 +117,7 @@
        snd_iprintf(buffer, "Card                  : %s\n",
                    emu->audigy ? "Audigy" : (emu->APS ? "EMU APS" : "Creative"));
        snd_iprintf(buffer, "Internal TRAM (words) : 0x%x\n", emu->fx8010.itram_size);
-       snd_iprintf(buffer, "External TRAM (words) : 0x%x\n", emu->fx8010.etram_size);
+       snd_iprintf(buffer, "External TRAM (words) : 0x%x\n", 
emu->fx8010.etram_pages.bytes);
        snd_iprintf(buffer, "\n");
        if (emu->audigy) {
                snd_iprintf(buffer, "Effect Send Routing   : A=%i, B=%i, C=%i, D=%i\n",

Index: memory.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/memory.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- memory.c    16 Jan 2004 18:02:40 -0000      1.14
+++ memory.c    2 Mar 2004 15:32:37 -0000       1.15
@@ -30,7 +30,7 @@
  * aligned pages in others
  */
 #define __set_ptb_entry(emu,page,addr) \
-       ((emu)->ptb_pages[page] = cpu_to_le32(((addr) << 1) | (page)))
+       (((u32 *)(emu)->ptb_pages.area)[page] = cpu_to_le32(((addr) << 1) | (page)))
 
 #define UNIT_PAGES             (PAGE_SIZE / EMUPAGESIZE)
 #define MAX_ALIGN_PAGES                (MAXPAGES / UNIT_PAGES)
@@ -44,7 +44,7 @@
 /* fill PTB entrie(s) corresponding to page with addr */
 #define set_ptb_entry(emu,page,addr)   __set_ptb_entry(emu,page,addr)
 /* fill PTB entrie(s) corresponding to page with silence pointer */
-#define set_silent_ptb(emu,page)       
__set_ptb_entry(emu,page,emu->silent_page_dmaaddr)
+#define set_silent_ptb(emu,page)       __set_ptb_entry(emu,page,emu->silent_page.addr)
 #else
 /* fill PTB entries -- we need to fill UNIT_PAGES entries */
 static inline void set_ptb_entry(emu10k1_t *emu, int page, dma_addr_t addr)
@@ -436,22 +436,20 @@
 static int synth_alloc_pages(emu10k1_t *emu, emu10k1_memblk_t *blk)
 {
        int page, first_page, last_page;
-       void *ptr;
-       dma_addr_t addr;
+       struct snd_dma_buffer dmab;
 
        emu10k1_memblk_init(blk);
        get_single_page_range(emu->memhdr, blk, &first_page, &last_page);
        /* allocate kernel pages */
        for (page = first_page; page <= last_page; page++) {
-               ptr = snd_malloc_pci_page(emu->pci, &addr);
-               if (ptr == NULL)
+               if (snd_dma_alloc_pages(&emu->dma_dev, PAGE_SIZE, &dmab) < 0)
                        goto __fail;
-               if (! is_valid_page(emu, addr)) {
-                       snd_free_pci_page(emu->pci, ptr, addr);
+               if (! is_valid_page(emu, dmab.addr)) {
+                       snd_dma_free_pages(&emu->dma_dev, &dmab);
                        goto __fail;
                }
-               emu->page_addr_table[page] = addr;
-               emu->page_ptr_table[page] = ptr;
+               emu->page_addr_table[page] = dmab.addr;
+               emu->page_ptr_table[page] = dmab.area;
        }
        return 0;
 
@@ -459,7 +457,10 @@
        /* release allocated pages */
        last_page = page - 1;
        for (page = first_page; page <= last_page; page++) {
-               snd_free_pci_page(emu->pci, emu->page_ptr_table[page], 
emu->page_addr_table[page]);
+               dmab.area = emu->page_ptr_table[page];
+               dmab.addr = emu->page_addr_table[page];
+               dmab.bytes = PAGE_SIZE;
+               snd_dma_free_pages(&emu->dma_dev, &dmab);
                emu->page_addr_table[page] = 0;
                emu->page_ptr_table[page] = NULL;
        }
@@ -473,11 +474,16 @@
 static int synth_free_pages(emu10k1_t *emu, emu10k1_memblk_t *blk)
 {
        int page, first_page, last_page;
+       struct snd_dma_buffer dmab;
 
        get_single_page_range(emu->memhdr, blk, &first_page, &last_page);
        for (page = first_page; page <= last_page; page++) {
-               if (emu->page_ptr_table[page])
-                       snd_free_pci_page(emu->pci, emu->page_ptr_table[page], 
emu->page_addr_table[page]);
+               if (emu->page_ptr_table[page] == NULL)
+                       continue;
+               dmab.area = emu->page_ptr_table[page];
+               dmab.addr = emu->page_addr_table[page];
+               dmab.bytes = PAGE_SIZE;
+               snd_dma_free_pages(&emu->dma_dev, &dmab);
                emu->page_addr_table[page] = 0;
                emu->page_ptr_table[page] = NULL;
        }



-------------------------------------------------------
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-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to