fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / sound / oss / dmabuf.c
index 73aa190..eaf6997 100644 (file)
@@ -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 <linux/mm.h>
 #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);