Update of /cvsroot/alsa/alsa-kernel/pci/korg1212 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18820/alsa-kernel/pci/korg1212
Modified Files: korg1212.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: korg1212.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/korg1212/korg1212.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- korg1212.c 21 Jan 2004 18:32:48 -0000 1.34 +++ korg1212.c 2 Mar 2004 15:32:38 -0000 1.35 @@ -347,9 +347,14 @@ struct resource *res_ioport; struct resource *res_iomem2; + struct snd_dma_device dma_dev; + + struct snd_dma_buffer dma_dsp; + struct snd_dma_buffer dma_play; + struct snd_dma_buffer dma_rec; + struct snd_dma_buffer dma_shared; + u32 dspCodeSize; - u32 dspMemPhy; // DSP memory block handle (Physical Address) - void * dspMemPtr; // block memory (Virtual Address) u32 DataBufsSize; @@ -357,6 +362,7 @@ KorgAudioBuffer * recordDataBufsPtr; KorgSharedBuffer * sharedBufferPtr; + u32 RecDataPhy; u32 PlayDataPhy; unsigned long sharedBufferPhy; @@ -1238,10 +1244,10 @@ snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_IN_PROCESS); - memcpy(korg1212->dspMemPtr, dspCode, korg1212->dspCodeSize); + memcpy(korg1212->dma_dsp.area, dspCode, korg1212->dspCodeSize); rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_StartDSPDownload, - UpperWordSwap(korg1212->dspMemPhy), + UpperWordSwap(korg1212->dma_dsp.addr), 0, 0, 0); #if K1212_DEBUG_LEVEL > 0 @@ -2134,12 +2140,9 @@ // ---------------------------------------------------- // free up memory resources used for the DSP download. // ---------------------------------------------------- - if (korg1212->dspMemPtr) { - snd_free_pci_pages(korg1212->pci, korg1212->dspCodeSize, - korg1212->dspMemPtr, (dma_addr_t)korg1212->dspMemPhy); - korg1212->dspMemPhy = 0; - korg1212->dspMemPtr = 0; - korg1212->dspCodeSize = 0; + if (korg1212->dma_dsp.area) { + snd_dma_free_pages(&korg1212->dma_dev, &korg1212->dma_dsp); + korg1212->dma_dsp.area = NULL; } #ifndef K1212_LARGEALLOC @@ -2147,18 +2150,14 @@ // ------------------------------------------------------ // free up memory resources used for the Play/Rec Buffers // ------------------------------------------------------ - if (korg1212->playDataBufsPtr) { - snd_free_pci_pages(korg1212->pci, korg1212->DataBufsSize, - korg1212->playDataBufsPtr, (dma_addr_t)korg1212->PlayDataPhy); - korg1212->PlayDataPhy = 0; - korg1212->playDataBufsPtr = NULL; + if (korg1212->dma_play.area) { + snd_dma_free_pages(&korg1212->dma_dev, &korg1212->dma_play); + korg1212->dma_play.area = NULL; } - if (korg1212->recordDataBufsPtr) { - snd_free_pci_pages(korg1212->pci, korg1212->DataBufsSize, - korg1212->recordDataBufsPtr, (dma_addr_t)korg1212->RecDataPhy); - korg1212->RecDataPhy = 0; - korg1212->recordDataBufsPtr = NULL; + if (korg1212->dma_rec.area) { + snd_dma_free_pages(&korg1212->dma_dev, &korg1212->dma_rec); + korg1212->dma_rec.area = NULL; } #endif @@ -2166,11 +2165,9 @@ // ---------------------------------------------------- // free up memory resources used for the Shared Buffers // ---------------------------------------------------- - if (korg1212->sharedBufferPtr) { - snd_free_pci_pages(korg1212->pci, (u32) sizeof(KorgSharedBuffer), - korg1212->sharedBufferPtr, (dma_addr_t)korg1212->sharedBufferPhy); - korg1212->sharedBufferPhy = 0; - korg1212->sharedBufferPtr = NULL; + if (korg1212->dma_shared.area) { + snd_dma_free_pages(&korg1212->dma_dev, &korg1212->dma_shared); + korg1212->dma_shared.area = NULL; } snd_magic_kfree(korg1212); @@ -2193,7 +2190,6 @@ int err; unsigned int i; unsigned ioport_size, iomem_size, iomem2_size; - dma_addr_t phys_addr; korg1212_t * korg1212; static snd_device_ops_t ops = { @@ -2332,13 +2328,16 @@ stateName[korg1212->cardState]); #endif - korg1212->sharedBufferPtr = (KorgSharedBuffer *) snd_malloc_pci_pages(korg1212->pci, sizeof(KorgSharedBuffer), &phys_addr); - korg1212->sharedBufferPhy = (unsigned long)phys_addr; + memset(&korg1212->dma_dev, 0, sizeof(korg1212->dma_dev)); + korg1212->dma_dev.type = SNDRV_DMA_TYPE_PCI; + korg1212->dma_dev.dev.pci = korg1212->pci; - if (korg1212->sharedBufferPtr == NULL) { + if (snd_dma_alloc_pages(&korg1212->dma_dev, sizeof(KorgSharedBuffer), &korg1212->dma_shared) < 0) { snd_printk(KERN_ERR "can not allocate shared buffer memory (%Zd bytes)\n", sizeof(KorgSharedBuffer)); return -ENOMEM; } + korg1212->sharedBufferPtr = (KorgSharedBuffer *)korg1212->dma_shared.area; + korg1212->sharedBufferPhy = korg1212->dma_shared.addr; #if K1212_DEBUG_LEVEL > 0 K1212_DEBUG_PRINTK("K1212_DEBUG: Shared Buffer Area = 0x%p (0x%08lx), %d bytes\n", korg1212->sharedBufferPtr, korg1212->sharedBufferPhy, sizeof(KorgSharedBuffer)); @@ -2348,30 +2347,28 @@ korg1212->DataBufsSize = sizeof(KorgAudioBuffer) * kNumBuffers; - korg1212->playDataBufsPtr = (KorgAudioBuffer *) snd_malloc_pci_pages(korg1212->pci, korg1212->DataBufsSize, &phys_addr); - korg1212->PlayDataPhy = (u32)phys_addr; - - if (korg1212->playDataBufsPtr == NULL) { + if (snd_dma_alloc_pages(&korg1212->dma_dev, korg1212->DataBufsSize, &korg1212->dma_play) < 0) { snd_printk(KERN_ERR "can not allocate play data buffer memory (%d bytes)\n", korg1212->DataBufsSize); return -ENOMEM; } + korg1212->playDataBufsPtr = (KorgAudioBuffer *)korg1212->dma_play.area; + korg1212->PlayDataPhy = korg1212->dma_play.addr; #if K1212_DEBUG_LEVEL > 0 K1212_DEBUG_PRINTK("K1212_DEBUG: Play Data Area = 0x%p (0x%08x), %d bytes\n", korg1212->playDataBufsPtr, korg1212->PlayDataPhy, korg1212->DataBufsSize); #endif - korg1212->recordDataBufsPtr = (KorgAudioBuffer *) snd_malloc_pci_pages(korg1212->pci, korg1212->DataBufsSize, &phys_addr); - korg1212->RecDataPhy = (u32)phys_addr; - - if (korg1212->recordDataBufsPtr == NULL) { + if (snd_dma_alloc_pages(&korg1212->dma_dev, korg1212->DataBufsSize, &korg1212->dma_rec) < 0) { snd_printk(KERN_ERR "can not allocate record data buffer memory (%d bytes)\n", korg1212->DataBufsSize); return -ENOMEM; } + korg1212->recordDataBufsPtr = (KorgAudioBuffer *)korg1212->dma_rec.area; + korg1212->RecDataPhy = korg1212->dma_rec.addr; #if K1212_DEBUG_LEVEL > 0 K1212_DEBUG_PRINTK("K1212_DEBUG: Record Data Area = 0x%p (0x%08x), %d bytes\n", - korg1212->recordDataBufsPtr, korg1212->RecDataPhy, korg1212->DataBufsSize); + korg1212->recordDataBufsPtr, korg1212->RecDataBufsPhy, korg1212->DataBufsSize); #endif #else // K1212_LARGEALLOC @@ -2392,17 +2389,14 @@ korg1212->AdatTimeCodePhy = korg1212->sharedBufferPhy + offsetof(KorgSharedBuffer, AdatTimeCode); - korg1212->dspMemPtr = snd_malloc_pci_pages(korg1212->pci, korg1212->dspCodeSize, &phys_addr); - korg1212->dspMemPhy = (u32)phys_addr; - - if (korg1212->dspMemPtr == NULL) { + if (snd_dma_alloc_pages(&korg1212->dma_dev, korg1212->dspCodeSize, &korg1212->dma_dsp) < 0) { snd_printk(KERN_ERR "can not allocate dsp code memory (%d bytes)\n", korg1212->dspCodeSize); return -ENOMEM; } #if K1212_DEBUG_LEVEL > 0 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP Code area = 0x%p (0x%08x) %d bytes [%s]\n", - korg1212->dspMemPtr, korg1212->dspMemPhy, korg1212->dspCodeSize, + korg1212->dma_dsp.area, korg1212->dma_dsp.addr, korg1212->dspCodeSize, stateName[korg1212->cardState]); #endif @@ -2425,7 +2419,7 @@ "VolumeTablePhy = %08x L[%08x]\n" "RoutingTablePhy = %08x L[%08x]\n" "AdatTimeCodePhy = %08x L[%08x]\n", - korg1212->dspMemPhy, UpperWordSwap(korg1212->dspMemPhy), + korg1212->dma_dsp.addr, UpperWordSwap(korg1212->dma_dsp.addr), korg1212->PlayDataPhy, LowerWordSwap(korg1212->PlayDataPhy), korg1212->RecDataPhy, LowerWordSwap(korg1212->RecDataPhy), korg1212->VolumeTablePhy, LowerWordSwap(korg1212->VolumeTablePhy), ------------------------------------------------------- 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