309 |
#define RME9652_PREALLOCATE_MEMORY /* via module snd-hammerfall-mem */ |
#define RME9652_PREALLOCATE_MEMORY /* via module snd-hammerfall-mem */ |
310 |
|
|
311 |
#ifdef RME9652_PREALLOCATE_MEMORY |
#ifdef RME9652_PREALLOCATE_MEMORY |
312 |
extern void *snd_hammerfall_get_buffer(struct pci_dev *, dma_addr_t *dmaaddr); |
static void *snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size, dma_addr_t *addrp, int capture) |
313 |
extern void snd_hammerfall_free_buffer(struct pci_dev *, void *ptr); |
{ |
314 |
|
struct snd_dma_device pdev; |
315 |
|
struct snd_dma_buffer dmbuf; |
316 |
|
|
317 |
|
snd_dma_device_pci(&pdev, pci, capture); |
318 |
|
dmbuf.bytes = 0; |
319 |
|
if (! snd_dma_get_reserved(&pdev, &dmbuf)) { |
320 |
|
if (snd_dma_alloc_pages(&pdev, size, &dmbuf) < 0) |
321 |
|
return NULL; |
322 |
|
snd_dma_set_reserved(&pdev, &dmbuf); |
323 |
|
} |
324 |
|
*addrp = dmbuf.addr; |
325 |
|
return dmbuf.area; |
326 |
|
} |
327 |
|
|
328 |
|
static void snd_hammerfall_free_buffer(struct pci_dev *pci, size_t size, void *ptr, dma_addr_t addr, int capture) |
329 |
|
{ |
330 |
|
struct snd_dma_device dev; |
331 |
|
snd_dma_device_pci(&dev, pci, capture); |
332 |
|
snd_dma_free_reserved(&dev); |
333 |
|
} |
334 |
|
|
335 |
|
#else |
336 |
|
static void *snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size, dma_addr_t *addrp, int capture) |
337 |
|
{ |
338 |
|
return snd_malloc_pci_pages(pci, size, addrp); |
339 |
|
} |
340 |
|
|
341 |
|
static void snd_hammerfall_free_buffer(struct pci_dev *pci, size_t size, void *ptr, dma_addr_t addr, int capture) |
342 |
|
{ |
343 |
|
snd_free_pci_pages(pci, size, ptr, addr); |
344 |
|
} |
345 |
#endif |
#endif |
346 |
|
|
347 |
|
|
348 |
static struct pci_device_id snd_rme9652_ids[] __devinitdata = { |
static struct pci_device_id snd_rme9652_ids[] __devinitdata = { |
349 |
{ |
{ |
350 |
.vendor = 0x10ee, |
.vendor = 0x10ee, |
1842 |
static void snd_rme9652_free_buffers(rme9652_t *rme9652) |
static void snd_rme9652_free_buffers(rme9652_t *rme9652) |
1843 |
{ |
{ |
1844 |
if (rme9652->capture_buffer_unaligned) { |
if (rme9652->capture_buffer_unaligned) { |
1845 |
#ifndef RME9652_PREALLOCATE_MEMORY |
snd_hammerfall_free_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, |
1846 |
snd_free_pci_pages(rme9652->pci, |
rme9652->capture_buffer_unaligned, |
1847 |
RME9652_DMA_AREA_BYTES, |
rme9652->capture_buffer_addr, 1); |
|
rme9652->capture_buffer_unaligned, |
|
|
rme9652->capture_buffer_addr); |
|
|
#else |
|
|
snd_hammerfall_free_buffer(rme9652->pci, rme9652->capture_buffer_unaligned); |
|
|
#endif |
|
1848 |
} |
} |
1849 |
|
|
1850 |
if (rme9652->playback_buffer_unaligned) { |
if (rme9652->playback_buffer_unaligned) { |
1851 |
#ifndef RME9652_PREALLOCATE_MEMORY |
snd_hammerfall_free_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, |
1852 |
snd_free_pci_pages(rme9652->pci, |
rme9652->playback_buffer_unaligned, |
1853 |
RME9652_DMA_AREA_BYTES, |
rme9652->playback_buffer_addr, 0); |
|
rme9652->playback_buffer_unaligned, |
|
|
rme9652->playback_buffer_addr); |
|
|
#else |
|
|
snd_hammerfall_free_buffer(rme9652->pci, rme9652->playback_buffer_unaligned); |
|
|
#endif |
|
1854 |
} |
} |
1855 |
} |
} |
1856 |
|
|
1877 |
dma_addr_t pb_addr, cb_addr; |
dma_addr_t pb_addr, cb_addr; |
1878 |
unsigned long pb_bus, cb_bus; |
unsigned long pb_bus, cb_bus; |
1879 |
|
|
1880 |
#ifndef RME9652_PREALLOCATE_MEMORY |
cb = snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, &cb_addr, 1); |
1881 |
cb = snd_malloc_pci_pages(rme9652->pci, RME9652_DMA_AREA_BYTES, &cb_addr); |
pb = snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, &pb_addr, 0); |
|
pb = snd_malloc_pci_pages(rme9652->pci, RME9652_DMA_AREA_BYTES, &pb_addr); |
|
|
#else |
|
|
cb = snd_hammerfall_get_buffer(rme9652->pci, &cb_addr); |
|
|
pb = snd_hammerfall_get_buffer(rme9652->pci, &pb_addr); |
|
|
#endif |
|
1882 |
|
|
1883 |
if (cb == 0 || pb == 0) { |
if (cb == 0 || pb == 0) { |
1884 |
if (cb) { |
if (cb) { |
1885 |
#ifdef RME9652_PREALLOCATE_MEMORY |
snd_hammerfall_free_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, cb, cb_addr, 1); |
|
snd_hammerfall_free_buffer(rme9652->pci, cb); |
|
|
#else |
|
|
snd_free_pci_pages(rme9652->pci, RME9652_DMA_AREA_BYTES, cb, cb_addr); |
|
|
#endif |
|
1886 |
} |
} |
1887 |
if (pb) { |
if (pb) { |
1888 |
#ifdef RME9652_PREALLOCATE_MEMORY |
snd_hammerfall_free_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, pb, pb_addr, 0); |
|
snd_hammerfall_free_buffer(rme9652->pci, pb); |
|
|
#else |
|
|
snd_free_pci_pages(rme9652->pci, RME9652_DMA_AREA_BYTES, pb, pb_addr); |
|
|
#endif |
|
1889 |
} |
} |
1890 |
|
|
1891 |
printk(KERN_ERR "%s: no buffers available\n", rme9652->card_name); |
printk(KERN_ERR "%s: no buffers available\n", rme9652->card_name); |