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