Update of /cvsroot/alsa/alsa-kernel/pci/mixart
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18820/alsa-kernel/pci/mixart
Modified Files:
mixart.c mixart.h mixart_hwdep.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: mixart.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/mixart/mixart.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- mixart.c 24 Feb 2004 12:08:03 -0000 1.4
+++ mixart.c 2 Mar 2004 15:32:38 -0000 1.5
@@ -263,6 +263,9 @@
for (i=0; i<stream_count; i++) {
int j;
+ struct mixart_flowinfo *flowinfo;
+ struct mixart_bufferinfo *bufferinfo;
+
/* we don't yet know the format, so config 16 bit pcm audio
for instance */
streaming_group_req.stream_info[i].size_max_byte_frame = 1024;
streaming_group_req.stream_info[i].size_max_sample_frame = 256;
@@ -274,16 +277,18 @@
streaming_group_req.flow_entry[i] = j;
- chip->mgr->flowinfo_array[j].bufferinfo_array_phy_address =
(u32)chip->mgr->bufferinfo_physaddr + (j * sizeof(mixart_bufferinfo_t));
- chip->mgr->flowinfo_array[j].bufferinfo_count = 1;
/* 1 will set the miXart to ring-buffer mode ! */
-
- chip->mgr->bufferinfo_array[j].buffer_address = 0;
/* buffer is not yet allocated */
- chip->mgr->bufferinfo_array[j].available_length = 0;
/* buffer is not yet allocated */
+ flowinfo = (struct mixart_flowinfo *)chip->mgr->flowinfo.area;
+ flowinfo[j].bufferinfo_array_phy_address =
(u32)chip->mgr->bufferinfo.addr + (j * sizeof(mixart_bufferinfo_t));
+ flowinfo[j].bufferinfo_count = 1; /* 1 will set
the miXart to ring-buffer mode ! */
+
+ bufferinfo = (struct mixart_bufferinfo
*)chip->mgr->bufferinfo.area;
+ bufferinfo[j].buffer_address = 0; /* buffer is
not yet allocated */
+ bufferinfo[j].available_length = 0; /* buffer is
not yet allocated */
/* construct the identifier of the stream buffer received in
the interrupts ! */
- chip->mgr->bufferinfo_array[j].buffer_id = (chip->chip_idx <<
MIXART_NOTIFY_CARD_OFFSET) + (pcm_number << MIXART_NOTIFY_PCM_OFFSET ) + i;
+ bufferinfo[j].buffer_id = (chip->chip_idx <<
MIXART_NOTIFY_CARD_OFFSET) + (pcm_number << MIXART_NOTIFY_PCM_OFFSET ) + i;
if(capture) {
- chip->mgr->bufferinfo_array[j].buffer_id |=
MIXART_NOTIFY_CAPT_MASK;
+ bufferinfo[j].buffer_id |= MIXART_NOTIFY_CAPT_MASK;
}
}
@@ -602,13 +607,16 @@
err = snd_pcm_lib_malloc_pages(subs, params_buffer_bytes(hw));
if (err > 0) {
+ struct mixart_bufferinfo *bufferinfo;
int i = (chip->chip_idx * MIXART_MAX_STREAM_PER_CARD) +
(stream->pcm_number * (MIXART_PLAYBACK_STREAMS+MIXART_CAPTURE_STREAMS)) + subs->number;
if( subs->stream == SNDRV_PCM_STREAM_CAPTURE ) {
i += MIXART_PLAYBACK_STREAMS; /* in array capture is behind
playback */
}
- mgr->bufferinfo_array[i].buffer_address = subs->runtime->dma_addr;
- mgr->bufferinfo_array[i].available_length = subs->runtime->dma_bytes;
- /* mgr->bufferinfo_array[i].buffer_id is already defined */
+
+ bufferinfo = (struct mixart_bufferinfo *)chip->mgr->bufferinfo.area;
+ bufferinfo[i].buffer_address = subs->runtime->dma_addr;
+ bufferinfo[i].available_length = subs->runtime->dma_bytes;
+ /* bufferinfo[i].buffer_id is already defined */
snd_printdd("snd_mixart_hw_params(pcm %d) : dma_addr(%x) dma_bytes(%x)
subs-number(%d)\n", i, subs->runtime->dma_addr, subs->runtime->dma_bytes,
subs->number);
}
@@ -902,7 +910,8 @@
subs->stream << 8 | (subs->number + 1) |
(chip->chip_idx + 1) << 24;
}
- snd_pcm_lib_preallocate_pci_pages_for_all(chip->mgr->pci, pcm, 32*1024,
32*1024);
+ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI,
+ chip->mgr->pci, 32*1024, 32*1024);
}
/*
@@ -1070,14 +1079,14 @@
}
/* free flowarray */
- if(mgr->flowinfo_array) {
- snd_free_pci_pages(mgr->pci, PAGE_ALIGN(MIXART_MAX_STREAM_PER_CARD *
MIXART_MAX_CARDS * sizeof(mixart_flowinfo_t)),
- mgr->flowinfo_array, mgr->flowinfo_physaddr);
+ if(mgr->flowinfo.area) {
+ snd_dma_free_pages(&mgr->dma_dev, &mgr->flowinfo);
+ mgr->flowinfo.area = NULL;
}
/* free bufferarray */
- if(mgr->bufferinfo_array) {
- snd_free_pci_pages(mgr->pci, PAGE_ALIGN(MIXART_MAX_STREAM_PER_CARD *
MIXART_MAX_CARDS * sizeof(mixart_bufferinfo_t)),
- mgr->bufferinfo_array, mgr->bufferinfo_physaddr);
+ if(mgr->bufferinfo.area) {
+ snd_dma_free_pages(&mgr->dma_dev, &mgr->bufferinfo);
+ mgr->bufferinfo.area = NULL;
}
snd_magic_kfree(mgr);
@@ -1380,25 +1389,27 @@
/* init firmware status (mgr->hwdep->dsp_loaded reset in hwdep_new) */
mgr->board_type = MIXART_DAUGHTER_TYPE_NONE;
+ memset(&mgr->dma_dev, 0, sizeof(mgr->dma_dev));
+ mgr->dma_dev.type = SNDRV_DMA_TYPE_PCI;
+ mgr->dma_dev.dev.pci = mgr->pci;
+
/* create array of streaminfo */
size = PAGE_ALIGN( (MIXART_MAX_STREAM_PER_CARD * MIXART_MAX_CARDS *
sizeof(mixart_flowinfo_t)) );
- mgr->flowinfo_array = snd_malloc_pci_pages(mgr->pci, size,
&mgr->flowinfo_physaddr);
- if(!mgr->flowinfo_array) {
+ if (snd_dma_alloc_pages(&mgr->dma_dev, size, &mgr->flowinfo) < 0) {
snd_mixart_free(mgr);
return -ENOMEM;
}
/* init streaminfo_array */
- memset(mgr->flowinfo_array, 0, size);
+ memset(mgr->flowinfo.area, 0, size);
/* create array of bufferinfo */
size = PAGE_ALIGN( (MIXART_MAX_STREAM_PER_CARD * MIXART_MAX_CARDS *
sizeof(mixart_bufferinfo_t)) );
- mgr->bufferinfo_array = snd_malloc_pci_pages(mgr->pci, size,
&mgr->bufferinfo_physaddr);
- if(!mgr->bufferinfo_array) {
+ if (snd_dma_alloc_pages(&mgr->dma_dev, size, &mgr->bufferinfo) < 0) {
snd_mixart_free(mgr);
return -ENOMEM;
}
/* init bufferinfo_array */
- memset(mgr->bufferinfo_array, 0, size);
+ memset(mgr->bufferinfo.area, 0, size);
pci_set_drvdata(pci, mgr);
dev++;
Index: mixart.h
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/mixart/mixart.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- mixart.h 24 Feb 2004 12:08:03 -0000 1.2
+++ mixart.h 2 Mar 2004 15:32:38 -0000 1.3
@@ -114,10 +114,9 @@
snd_hwdep_t *hwdep;
unsigned int board_type; /* read from embedded once elf file is loaded,
250 = miXart8, 251 = with AES, 252 = with Cobranet */
- mixart_flowinfo_t* flowinfo_array;
- dma_addr_t flowinfo_physaddr;
- mixart_bufferinfo_t* bufferinfo_array;
- dma_addr_t bufferinfo_physaddr;
+ struct snd_dma_device dma_dev;
+ struct snd_dma_buffer flowinfo;
+ struct snd_dma_buffer bufferinfo;
mixart_uid_t uid_console_manager;
int sample_rate;
Index: mixart_hwdep.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/mixart/mixart_hwdep.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- mixart_hwdep.c 23 Feb 2004 18:18:24 -0000 1.3
+++ mixart_hwdep.c 2 Mar 2004 15:32:38 -0000 1.4
@@ -441,7 +441,7 @@
}
/* miXart waits at this point on the pointer to the flow table */
- writel_be( (u32)mgr->flowinfo_physaddr, MIXART_MEM( mgr,
MIXART_FLOWTABLE_PTR ) ); /* give pointer of flow table to miXart */
+ writel_be( (u32)mgr->flowinfo.addr, MIXART_MEM( mgr,
MIXART_FLOWTABLE_PTR ) ); /* give pointer of flow table to miXart */
return 0; /* return, another xilinx file has to be loaded before */
-------------------------------------------------------
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