Update of /cvsroot/alsa/alsa-kernel/pci/ymfpci In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18820/alsa-kernel/pci/ymfpci
Modified Files: ymfpci_main.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: ymfpci_main.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ymfpci/ymfpci_main.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -r1.47 -r1.48 --- ymfpci_main.c 21 Jan 2004 18:32:48 -0000 1.47 +++ ymfpci_main.c 2 Mar 2004 15:32:38 -0000 1.48 @@ -541,20 +541,15 @@ static int __devinit snd_ymfpci_ac3_init(ymfpci_t *chip) { - unsigned char *ptr; - dma_addr_t ptr_addr; - - if ((ptr = snd_malloc_pci_pages(chip->pci, 4096, &ptr_addr)) == NULL) + if (snd_dma_alloc_pages(&chip->dma_dev, 4096, &chip->ac3_tmp_base) < 0) return -ENOMEM; - chip->ac3_tmp_base = ptr; - chip->ac3_tmp_base_addr = ptr_addr; chip->bank_effect[3][0]->base = - chip->bank_effect[3][1]->base = cpu_to_le32(chip->ac3_tmp_base_addr); + chip->bank_effect[3][1]->base = cpu_to_le32(chip->ac3_tmp_base.addr); chip->bank_effect[3][0]->loop_end = chip->bank_effect[3][1]->loop_end = cpu_to_le32(1024); chip->bank_effect[4][0]->base = - chip->bank_effect[4][1]->base = cpu_to_le32(chip->ac3_tmp_base_addr + 2048); + chip->bank_effect[4][1]->base = cpu_to_le32(chip->ac3_tmp_base.addr + 2048); chip->bank_effect[4][0]->loop_end = chip->bank_effect[4][1]->loop_end = cpu_to_le32(1024); @@ -572,9 +567,9 @@ snd_ymfpci_readl(chip, YDSXGR_MAPOFEFFECT) & ~(3 << 3)); spin_unlock_irq(&chip->reg_lock); // snd_ymfpci_irq_wait(chip); - if (chip->ac3_tmp_base) { - snd_free_pci_pages(chip->pci, 4096, chip->ac3_tmp_base, chip->ac3_tmp_base_addr); - chip->ac3_tmp_base = NULL; + if (chip->ac3_tmp_base.area) { + snd_dma_free_pages(&chip->dma_dev, &chip->ac3_tmp_base); + chip->ac3_tmp_base.area = NULL; } return 0; } @@ -1104,7 +1099,8 @@ strcpy(pcm->name, "YMFPCI"); chip->pcm = pcm; - snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, 64*1024, 256*1024); + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, + chip->pci, 64*1024, 256*1024); if (rpcm) *rpcm = pcm; @@ -1149,7 +1145,8 @@ chip->device_id == PCI_DEVICE_ID_YAMAHA_754 ? "Direct Recording" : "AC'97"); chip->pcm2 = pcm; - snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, 64*1024, 256*1024); + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, + chip->pci, 64*1024, 256*1024); if (rpcm) *rpcm = pcm; @@ -1193,7 +1190,8 @@ strcpy(pcm->name, "YMFPCI - IEC958"); chip->pcm_spdif = pcm; - snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, 64*1024, 256*1024); + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, + chip->pci, 64*1024, 256*1024); if (rpcm) *rpcm = pcm; @@ -1237,7 +1235,8 @@ strcpy(pcm->name, "YMFPCI - Rear PCM"); chip->pcm_4ch = pcm; - snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, 64*1024, 256*1024); + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, + chip->pci, 64*1024, 256*1024); if (rpcm) *rpcm = pcm; @@ -1976,12 +1975,11 @@ chip->work_size; /* work_ptr must be aligned to 256 bytes, but it's already covered with the kernel page allocation mechanism */ - if ((ptr = snd_malloc_pci_pages(chip->pci, size, &ptr_addr)) == NULL) + if (snd_dma_alloc_pages(&chip->dma_dev, size, &chip->work_ptr) < 0) return -ENOMEM; + ptr = chip->work_ptr.area; + ptr_addr = chip->work_ptr.addr; memset(ptr, 0, size); /* for sure */ - chip->work_ptr = ptr; - chip->work_ptr_addr = ptr_addr; - chip->work_ptr_size = size; chip->bank_base_playback = ptr; chip->bank_base_playback_addr = ptr_addr; @@ -2024,7 +2022,7 @@ chip->work_base = ptr; chip->work_base_addr = ptr_addr; - snd_assert(ptr + chip->work_size == chip->work_ptr + chip->work_ptr_size, ); + snd_assert(ptr + chip->work_size == chip->work_ptr.area + chip->work_ptr.bytes, ); snd_ymfpci_writel(chip, YDSXGR_PLAYCTRLBASE, chip->bank_base_playback_addr); snd_ymfpci_writel(chip, YDSXGR_RECCTRLBASE, chip->bank_base_capture_addr); @@ -2107,8 +2105,8 @@ #endif if (chip->reg_area_virt) iounmap((void *)chip->reg_area_virt); - if (chip->work_ptr) - snd_free_pci_pages(chip->pci, chip->work_ptr_size, chip->work_ptr, chip->work_ptr_addr); + if (chip->work_ptr.area) + snd_dma_free_pages(&chip->dma_dev, &chip->work_ptr); if (chip->irq >= 0) free_irq(chip->irq, (void *)chip); @@ -2276,6 +2274,10 @@ } chip->irq = pci->irq; + memset(&chip->dma_dev, 0, sizeof(chip->dma_dev)); + chip->dma_dev.type = SNDRV_DMA_TYPE_PCI; + chip->dma_dev.dev.pci = pci; + snd_ymfpci_aclink_reset(pci); if (snd_ymfpci_codec_ready(chip, 0) < 0) { snd_ymfpci_free(chip); ------------------------------------------------------- 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