Update of /cvsroot/alsa/alsa-kernel/pci/cs46xx In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18820/alsa-kernel/pci/cs46xx
Modified Files: cs46xx_lib.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: cs46xx_lib.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/cs46xx/cs46xx_lib.c,v retrieving revision 1.68 retrieving revision 1.69 diff -u -r1.68 -r1.69 --- cs46xx_lib.c 21 Jan 2004 18:32:47 -0000 1.68 +++ cs46xx_lib.c 2 Mar 2004 15:32:37 -0000 1.69 @@ -699,7 +699,7 @@ bytes = hw_to_end; if (sw_to_end < bytes) bytes = sw_to_end; - memcpy(cpcm->hw_area + cpcm->hw_data, + memcpy(cpcm->hw_buf.area + cpcm->hw_data, runtime->dma_area + cpcm->sw_data, bytes); cpcm->hw_data += bytes; @@ -740,7 +740,7 @@ if (sw_to_end < bytes) bytes = sw_to_end; memcpy(runtime->dma_area + chip->capt.sw_data, - chip->capt.hw_area + chip->capt.hw_data, + chip->capt.hw_buf.area + chip->capt.hw_data, bytes); chip->capt.hw_data += bytes; if ((int)chip->capt.hw_data == buffer_size) @@ -766,7 +766,7 @@ #else ptr = snd_cs46xx_peek(chip, BA1_PBA); #endif - ptr -= cpcm->hw_addr; + ptr -= cpcm->hw_buf.addr; return ptr >> cpcm->shift; } @@ -784,7 +784,7 @@ #else ptr = snd_cs46xx_peek(chip, BA1_PBA); #endif - ptr -= cpcm->hw_addr; + ptr -= cpcm->hw_buf.addr; bytes = ptr - cpcm->hw_io; @@ -802,14 +802,14 @@ static snd_pcm_uframes_t snd_cs46xx_capture_direct_pointer(snd_pcm_substream_t * substream) { cs46xx_t *chip = snd_pcm_substream_chip(substream); - size_t ptr = snd_cs46xx_peek(chip, BA1_CBA) - chip->capt.hw_addr; + size_t ptr = snd_cs46xx_peek(chip, BA1_CBA) - chip->capt.hw_buf.addr; return ptr >> chip->capt.shift; } static snd_pcm_uframes_t snd_cs46xx_capture_indirect_pointer(snd_pcm_substream_t * substream) { cs46xx_t *chip = snd_pcm_substream_chip(substream); - size_t ptr = snd_cs46xx_peek(chip, BA1_CBA) - chip->capt.hw_addr; + size_t ptr = snd_cs46xx_peek(chip, BA1_CBA) - chip->capt.hw_buf.addr; ssize_t bytes = ptr - chip->capt.hw_io; int buffer_size = substream->runtime->period_size * CS46XX_FRAGS << chip->capt.shift; @@ -933,7 +933,7 @@ /* If PCMReaderSCB and SrcTaskSCB not created yet ... */ if ( cpcm->pcm_channel == NULL) { cpcm->pcm_channel = cs46xx_dsp_create_pcm_channel (chip, sample_rate, - cpcm, cpcm->hw_addr,cpcm->pcm_channel_id); + cpcm, cpcm->hw_buf.addr,cpcm->pcm_channel_id); if (cpcm->pcm_channel == NULL) { snd_printk(KERN_ERR "cs46xx: failed to create virtual PCM channel\n"); return -ENOMEM; @@ -946,7 +946,7 @@ cs46xx_dsp_destroy_pcm_channel (chip,cpcm->pcm_channel); if ( (cpcm->pcm_channel = cs46xx_dsp_create_pcm_channel (chip, sample_rate, cpcm, - cpcm->hw_addr, + cpcm->hw_buf.addr, cpcm->pcm_channel_id)) == NULL) { snd_printk(KERN_ERR "cs46xx: failed to re-create virtual PCM channel\n"); return -ENOMEM; @@ -1002,11 +1002,11 @@ #endif if (params_periods(hw_params) == CS46XX_FRAGS) { - if (runtime->dma_area != cpcm->hw_area) + if (runtime->dma_area != cpcm->hw_buf.area) snd_pcm_lib_free_pages(substream); - runtime->dma_area = cpcm->hw_area; - runtime->dma_addr = cpcm->hw_addr; - runtime->dma_bytes = cpcm->hw_size; + runtime->dma_area = cpcm->hw_buf.area; + runtime->dma_addr = cpcm->hw_buf.addr; + runtime->dma_bytes = cpcm->hw_buf.bytes; #ifdef CONFIG_SND_CS46XX_NEW_DSP @@ -1026,7 +1026,7 @@ #endif } else { - if (runtime->dma_area == cpcm->hw_area) { + if (runtime->dma_area == cpcm->hw_buf.area) { runtime->dma_area = NULL; runtime->dma_addr = 0; runtime->dma_bytes = 0; @@ -1075,7 +1075,7 @@ is called and cpcm can actually be NULL here */ if (!cpcm) return -ENXIO; - if (runtime->dma_area != cpcm->hw_area) + if (runtime->dma_area != cpcm->hw_buf.area) snd_pcm_lib_free_pages(substream); runtime->dma_area = NULL; @@ -1144,7 +1144,7 @@ /* playback format && interrupt enable */ snd_cs46xx_poke(chip, (cpcm->pcm_channel->pcm_reader_scb->address + 1) << 2, pfie | cpcm->pcm_channel->pcm_slot); #else - snd_cs46xx_poke(chip, BA1_PBA, cpcm->hw_addr); + snd_cs46xx_poke(chip, BA1_PBA, cpcm->hw_buf.addr); tmp = snd_cs46xx_peek(chip, BA1_PDTC); tmp &= ~0x000003ff; tmp |= (4 << cpcm->shift) - 1; @@ -1167,14 +1167,14 @@ cs46xx_dsp_pcm_ostream_set_period (chip, params_period_bytes(hw_params)); #endif if (runtime->periods == CS46XX_FRAGS) { - if (runtime->dma_area != chip->capt.hw_area) + if (runtime->dma_area != chip->capt.hw_buf.area) snd_pcm_lib_free_pages(substream); - runtime->dma_area = chip->capt.hw_area; - runtime->dma_addr = chip->capt.hw_addr; - runtime->dma_bytes = chip->capt.hw_size; + runtime->dma_area = chip->capt.hw_buf.area; + runtime->dma_addr = chip->capt.hw_buf.addr; + runtime->dma_bytes = chip->capt.hw_buf.bytes; substream->ops = &snd_cs46xx_capture_ops; } else { - if (runtime->dma_area == chip->capt.hw_area) { + if (runtime->dma_area == chip->capt.hw_buf.area) { runtime->dma_area = NULL; runtime->dma_addr = 0; runtime->dma_bytes = 0; @@ -1192,7 +1192,7 @@ cs46xx_t *chip = snd_pcm_substream_chip(substream); snd_pcm_runtime_t *runtime = substream->runtime; - if (runtime->dma_area != chip->capt.hw_area) + if (runtime->dma_area != chip->capt.hw_buf.area) snd_pcm_lib_free_pages(substream); runtime->dma_area = NULL; runtime->dma_addr = 0; @@ -1206,7 +1206,7 @@ cs46xx_t *chip = snd_pcm_substream_chip(substream); snd_pcm_runtime_t *runtime = substream->runtime; - snd_cs46xx_poke(chip, BA1_CBA, chip->capt.hw_addr); + snd_cs46xx_poke(chip, BA1_CBA, chip->capt.hw_buf.addr); chip->capt.shift = 2; chip->capt.sw_bufsize = snd_pcm_lib_buffer_bytes(substream); chip->capt.sw_data = chip->capt.sw_io = chip->capt.sw_ready = 0; @@ -1382,8 +1382,7 @@ cpcm = snd_magic_kcalloc(cs46xx_pcm_t, 0, GFP_KERNEL); if (cpcm == NULL) return -ENOMEM; - cpcm->hw_size = PAGE_SIZE; - if ((cpcm->hw_area = snd_malloc_pci_pages(chip->pci, cpcm->hw_size, &cpcm->hw_addr)) == NULL) { + if (snd_dma_alloc_pages(&chip->dma_dev, PAGE_SIZE, &cpcm->hw_buf) < 0) { snd_magic_kfree(cpcm); return -ENOMEM; } @@ -1472,7 +1471,7 @@ { cs46xx_t *chip = snd_pcm_substream_chip(substream); - if ((chip->capt.hw_area = snd_malloc_pci_pages(chip->pci, chip->capt.hw_size, &chip->capt.hw_addr)) == NULL) + if (snd_dma_alloc_pages(&chip->dma_dev, PAGE_SIZE, &chip->capt.hw_buf) < 0) return -ENOMEM; chip->capt.substream = substream; substream->runtime->hw = snd_cs46xx_capture; @@ -1513,7 +1512,7 @@ #endif cpcm->substream = NULL; - snd_free_pci_pages(chip->pci, cpcm->hw_size, cpcm->hw_area, cpcm->hw_addr); + snd_dma_free_pages(&chip->dma_dev, &cpcm->hw_buf); chip->active_ctrl(chip, -1); return 0; @@ -1524,7 +1523,7 @@ cs46xx_t *chip = snd_pcm_substream_chip(substream); chip->capt.substream = NULL; - snd_free_pci_pages(chip->pci, chip->capt.hw_size, chip->capt.hw_area, chip->capt.hw_addr); + snd_dma_free_pages(&chip->dma_dev, &chip->capt.hw_buf); chip->active_ctrl(chip, -1); return 0; @@ -1703,7 +1702,8 @@ strcpy(pcm->name, "CS46xx"); 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; @@ -1734,7 +1734,8 @@ strcpy(pcm->name, "CS46xx - Rear"); chip->pcm_rear = 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, + pcm, 64*1024, 256*1024); if (rpcm) *rpcm = pcm; @@ -1763,7 +1764,8 @@ strcpy(pcm->name, "CS46xx - Center LFE"); chip->pcm_center_lfe = 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; @@ -1792,7 +1794,8 @@ strcpy(pcm->name, "CS46xx - IEC958"); chip->pcm_rear = 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; @@ -3877,7 +3880,6 @@ #endif chip->card = card; chip->pci = pci; - chip->capt.hw_size = PAGE_SIZE; chip->irq = -1; chip->ba0_addr = pci_resource_start(pci, 0); chip->ba1_addr = pci_resource_start(pci, 1); @@ -3913,6 +3915,10 @@ region->base = chip->ba1_addr + BA1_SP_REG; region->size = CS46XX_BA1_REG_SIZE; + memset(&chip->dma_dev, 0, sizeof(chip->dma_dev)); + chip->dma_dev.type = SNDRV_DMA_TYPE_PCI; + chip->dma_dev.dev.pci = pci; + /* set up amp and clkrun hack */ pci_read_config_word(pci, PCI_SUBSYSTEM_VENDOR_ID, &ss_vendor); pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &ss_card); ------------------------------------------------------- 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