X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sound%2Foss%2Fdmabuf.c;h=eaf69971bf92d5d5b54306dd2109d37ee5bffd07;hb=refs%2Fheads%2Fvserver;hp=73aa1903181559f99b817c1d09ed9de49751fdca;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/sound/oss/dmabuf.c b/sound/oss/dmabuf.c index 73aa19031..eaf69971b 100644 --- a/sound/oss/dmabuf.c +++ b/sound/oss/dmabuf.c @@ -1,5 +1,5 @@ /* - * sound/dmabuf.c + * sound/oss/dmabuf.c * * The DMA buffer manager for digitized voice applications */ @@ -25,6 +25,7 @@ #define BE_CONSERVATIVE #define SAMPLE_ROUNDUP 0 +#include #include "sound_config.h" #define DMAP_FREE_ON_CLOSE 0 @@ -88,7 +89,7 @@ static int sound_alloc_dmap(struct dma_buffparms *dmap) while (start_addr == NULL && dmap->buffsize > PAGE_SIZE) { for (sz = 0, size = PAGE_SIZE; size < dmap->buffsize; sz++, size <<= 1); dmap->buffsize = PAGE_SIZE * (1 << sz); - start_addr = (char *) __get_free_pages(GFP_ATOMIC|GFP_DMA, sz); + start_addr = (char *) __get_free_pages(GFP_ATOMIC|GFP_DMA|__GFP_NOWARN, sz); if (start_addr == NULL) dmap->buffsize /= 2; } @@ -236,7 +237,7 @@ static unsigned int default_set_bits(int dev, unsigned int bits) mm_segment_t fs = get_fs(); set_fs(get_ds()); - audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_SETFMT, (caddr_t)&bits); + audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_SETFMT, (void __user *)&bits); set_fs(fs); return bits; } @@ -246,7 +247,7 @@ static int default_set_speed(int dev, int speed) mm_segment_t fs = get_fs(); set_fs(get_ds()); - audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_SPEED, (caddr_t)&speed); + audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_SPEED, (void __user *)&speed); set_fs(fs); return speed; } @@ -257,7 +258,7 @@ static short default_set_channels(int dev, short channels) mm_segment_t fs = get_fs(); set_fs(get_ds()); - audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_CHANNELS, (caddr_t)&c); + audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_CHANNELS, (void __user *)&c); set_fs(fs); return c; } @@ -547,7 +548,7 @@ int DMAbuf_activate_recording(int dev, struct dma_buffparms *dmap) } return 0; } -/* aquires lock */ +/* acquires lock */ int DMAbuf_getrdbuffer(int dev, char **buf, int *len, int dontblock) { struct audio_operations *adev = audio_devs[dev]; @@ -821,7 +822,7 @@ static int find_output_space(int dev, char **buf, int *size) *size = len & ~SAMPLE_ROUNDUP; return (*size > 0); } -/* aquires lock */ +/* acquires lock */ int DMAbuf_getwrbuffer(int dev, char **buf, int *size, int dontblock) { struct audio_operations *adev = audio_devs[dev]; @@ -855,7 +856,7 @@ int DMAbuf_getwrbuffer(int dev, char **buf, int *size, int dontblock) spin_unlock_irqrestore(&dmap->lock,flags); return 0; } -/* has to aquire dmap->lock */ +/* has to acquire dmap->lock */ int DMAbuf_move_wrpointer(int dev, int l) { struct audio_operations *adev = audio_devs[dev]; @@ -926,6 +927,7 @@ int DMAbuf_start_dma(int dev, unsigned long physaddr, int count, int dma_mode) sound_start_dma(dmap, physaddr, count, dma_mode); return count; } +EXPORT_SYMBOL(DMAbuf_start_dma); static int local_start_dma(struct audio_operations *adev, unsigned long physaddr, int count, int dma_mode) { @@ -1055,6 +1057,8 @@ void DMAbuf_outputintr(int dev, int notify_only) do_outputintr(dev, notify_only); spin_unlock_irqrestore(&dmap->lock,flags); } +EXPORT_SYMBOL(DMAbuf_outputintr); + /* called with dmap->lock held in irq context */ static void do_inputintr(int dev) { @@ -1154,36 +1158,7 @@ void DMAbuf_inputintr(int dev) do_inputintr(dev); spin_unlock_irqrestore(&dmap->lock,flags); } - -int DMAbuf_open_dma(int dev) -{ - /* - * NOTE! This routine opens only the primary DMA channel (output). - */ - struct audio_operations *adev = audio_devs[dev]; - int err; - - if ((err = open_dmap(adev, OPEN_READWRITE, adev->dmap_out)) < 0) - return -EBUSY; - dma_init_buffers(adev->dmap_out); - adev->dmap_out->flags |= DMA_ALLOC_DONE; - adev->dmap_out->fragment_size = adev->dmap_out->buffsize; - - if (adev->dmap_out->dma >= 0) { - unsigned long flags; - - flags=claim_dma_lock(); - clear_dma_ff(adev->dmap_out->dma); - disable_dma(adev->dmap_out->dma); - release_dma_lock(flags); - } - return 0; -} - -void DMAbuf_close_dma(int dev) -{ - close_dmap(audio_devs[dev], audio_devs[dev]->dmap_out); -} +EXPORT_SYMBOL(DMAbuf_inputintr); void DMAbuf_init(int dev, int dma1, int dma2) { @@ -1192,12 +1167,6 @@ void DMAbuf_init(int dev, int dma1, int dma2) * NOTE! This routine could be called several times. */ - /* drag in audio_syms.o */ - { - extern char audio_syms_symbol; - audio_syms_symbol = 0; - } - if (adev && adev->dmap_out == NULL) { if (adev->d == NULL) panic("OSS: audio_devs[%d]->d == NULL\n", dev);