Update of /cvsroot/alsa/alsa-driver/pci In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18820/alsa-driver/pci
Modified Files: atiixp.c hdspm.c intel8x0m.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: atiixp.c =================================================================== RCS file: /cvsroot/alsa/alsa-driver/pci/atiixp.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- atiixp.c 24 Feb 2004 15:23:10 -0000 1.1 +++ atiixp.c 2 Mar 2004 15:32:35 -0000 1.2 @@ -220,7 +220,6 @@ u32 next; /* address of the next packet descriptor */ } atiixp_dma_desc_t; - /* * stream enum */ @@ -242,8 +241,8 @@ */ struct snd_atiixp_dma { const atiixp_dma_ops_t *ops; - atiixp_dma_desc_t *desc; /* packets buffer */ - dma_addr_t desc_addr; /* physical address of packets buffer */ + struct snd_dma_device desc_dev; + struct snd_dma_buffer desc_buf; snd_pcm_substream_t *substream; /* assigned PCM substream */ unsigned int buf_addr, buf_bytes; /* DMA buffer address, bytes */ unsigned int period_bytes, periods; @@ -359,9 +358,11 @@ if (periods > ATI_MAX_DESCRIPTORS) return -ENOMEM; - if (! dma->desc) { - dma->desc = snd_malloc_pci_pages(chip->pci, ATI_DESC_LIST_SIZE, &dma->desc_addr); - if (! dma->desc) + if (dma->desc_buf.area == NULL) { + memset(&dma->desc_dev, 0, sizeof(dma->desc_dev)); + dma->desc_dev.type = SNDRV_DMA_TYPE_PCI; + dma->desc_dev.dev.pci = chip->pci; + if (snd_dma_alloc_pages(&dma->desc_dev, ATI_DESC_LIST_SIZE, &dma->desc_buf) < 0) return -ENOMEM; dma->period_bytes = dma->periods = 0; /* clear */ } @@ -378,20 +379,21 @@ /* fill the entries */ addr = (u32)substream->runtime->dma_addr; - desc_addr = (u32)dma->desc_addr; + desc_addr = (u32)dma->desc_buf.addr; for (i = 0; i < periods; i++) { - dma->desc[i].addr = cpu_to_le32(addr); - dma->desc[i].status = 0; - dma->desc[i].size = period_bytes >> 2; /* in dwords */ + atiixp_dma_desc_t *desc = &((atiixp_dma_desc_t *)dma->desc_buf.area)[i]; + desc->addr = cpu_to_le32(addr); + desc->status = 0; + desc->size = period_bytes >> 2; /* in dwords */ desc_addr += sizeof(atiixp_dma_desc_t); if (i == periods - 1) - dma->desc[i].next = cpu_to_le32((u32)dma->desc_addr); + desc->next = cpu_to_le32((u32)dma->desc_buf.addr); else - dma->desc[i].next = cpu_to_le32(desc_addr); + desc->next = cpu_to_le32(desc_addr); addr += period_bytes; } - writel(cpu_to_le32((u32)dma->desc_addr | ATI_REG_LINKPTR_EN), + writel(cpu_to_le32((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN), chip->remap_addr + dma->ops->llp_offset); dma->period_bytes = period_bytes; @@ -405,10 +407,10 @@ */ static void atiixp_clear_dma_packets(atiixp_t *chip, atiixp_dma_t *dma, snd_pcm_substream_t *substream) { - if (dma->desc) { + if (dma->desc_buf.area) { writel(0, chip->remap_addr + dma->ops->llp_offset); - snd_free_pci_pages(chip->pci, ATI_DESC_LIST_SIZE, dma->desc, dma->desc_addr); - dma->desc = NULL; + snd_dma_free_pages(&dma->desc_dev, &dma->desc_buf); + dma->desc_buf.area = NULL; } } @@ -1219,7 +1221,8 @@ pcm->private_data = chip; strcpy(pcm->name, "ATI IXP AC97"); - snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, 64*1024, 128*1024); + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, + chip->pci, 64*1024, 128*1024); /* no SPDIF support on codec? */ if (chip->dmas[ATI_DMA_SPDIF].pcm && ! chip->dmas[ATI_DMA_SPDIF].pcm->rates) @@ -1233,7 +1236,8 @@ pcm->private_data = chip; strcpy(pcm->name, "ATI IXP IEC958"); - snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, 64*1024, 128*1024); + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, chip->pci, + 64*1024, 128*1024); /* pre-select AC97 SPDIF slots 10/11 */ for (i = 0; i < 3; i++) { Index: hdspm.c =================================================================== RCS file: /cvsroot/alsa/alsa-driver/pci/hdspm.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- hdspm.c 30 Jan 2004 11:52:29 -0000 1.1 +++ hdspm.c 2 Mar 2004 15:32:35 -0000 1.2 @@ -3417,9 +3417,11 @@ wanted = HDSPM_DMA_AREA_BYTES + 4096; /* dont know why, but it works */ if ((err = - snd_pcm_lib_preallocate_sg_pages_for_all(hdspm->pci, pcm, - wanted, - wanted)) < 0) { + snd_pcm_lib_preallocate_pages_for_all(pcm, + SNDRV_DMA_TYPE_PCI_SG, + hdspm->pci, + wanted, + wanted)) < 0) { snd_printdd("Could not preallocate %d Bytes\n", wanted); return err; Index: intel8x0m.c =================================================================== RCS file: /cvsroot/alsa/alsa-driver/pci/intel8x0m.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- intel8x0m.c 21 Jan 2004 18:33:32 -0000 1.2 +++ intel8x0m.c 2 Mar 2004 15:32:35 -0000 1.3 @@ -260,9 +260,9 @@ spinlock_t reg_lock; spinlock_t ac97_lock; + struct snd_dma_device dma_dev; + struct snd_dma_buffer bdbars; u32 bdbars_count; - u32 *bdbars; - dma_addr_t bdbars_addr; u32 int_sta_reg; /* interrupt status register */ u32 int_sta_mask; /* interrupt status mask */ unsigned int pcm_pos_shift; @@ -808,8 +808,10 @@ strcpy(pcm->name, chip->card->shortname); chip->pcm[device] = pcm; - snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, rec->prealloc_size, - rec->prealloc_max_size); + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, + chip->pci, + rec->prealloc_size, + rec->prealloc_max_size); return 0; } @@ -1060,8 +1062,8 @@ /* --- */ synchronize_irq(chip->irq); __hw_end: - if (chip->bdbars) - snd_free_pci_pages(chip->pci, chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, chip->bdbars, chip->bdbars_addr); + if (chip->bdbars.area) + snd_dma_free_pages(&chip->dma_dev, &chip->bdbars); if (chip->remap_addr) iounmap((void *) chip->remap_addr); if (chip->remap_bmaddr) @@ -1319,8 +1321,10 @@ /* allocate buffer descriptor lists */ /* the start of each lists must be aligned to 8 bytes */ - chip->bdbars = (u32 *)snd_malloc_pci_pages(pci, chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, &chip->bdbars_addr); - if (chip->bdbars == NULL) { + memset(&chip->dma_dev, 0, sizeof(chip->dma_dev)); + chip->dma_dev.type = SNDRV_DMA_TYPE_PCI; + chip->dma_dev.dev.pci = pci; + if (snd_dma_alloc_pages(&chip->dma_dev, chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, &chip->bdbars) < 0) { snd_intel8x0_free(chip); return -ENOMEM; } @@ -1329,8 +1333,8 @@ int_sta_masks = 0; for (i = 0; i < chip->bdbars_count; i++) { ichdev = &chip->ichd[i]; - ichdev->bdbar = chip->bdbars + (i * ICH_MAX_FRAGS * 2); - ichdev->bdbar_addr = chip->bdbars_addr + (i * sizeof(u32) * ICH_MAX_FRAGS * 2); + ichdev->bdbar = ((u32 *)chip->bdbars.area) + (i * ICH_MAX_FRAGS * 2); + ichdev->bdbar_addr = chip->bdbars.addr + (i * sizeof(u32) * ICH_MAX_FRAGS * 2); int_sta_masks |= ichdev->int_sta_mask; } chip->int_sta_reg = ICH_REG_GLOB_STA; ------------------------------------------------------- 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