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