linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / sound / core / pcm_lib.c
index eedc6cb..eeba2f0 100644 (file)
@@ -130,7 +130,7 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
 static void xrun(struct snd_pcm_substream *substream)
 {
        snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
-#ifdef CONFIG_SND_PCM_XRUN_DEBUG
+#ifdef CONFIG_SND_DEBUG
        if (substream->pstr->xrun_debug) {
                snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
                           substream->pcm->card->number,
@@ -204,7 +204,7 @@ static inline int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *subs
        delta = hw_ptr_interrupt - new_hw_ptr;
        if (delta > 0) {
                if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
-#ifdef CONFIG_SND_PCM_XRUN_DEBUG
+#ifdef CONFIG_SND_DEBUG
                        if (runtime->periods > 1 && substream->pstr->xrun_debug) {
                                snd_printd(KERN_ERR "Unexpected hw_pointer value [1] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
                                if (substream->pstr->xrun_debug > 1)
@@ -249,7 +249,7 @@ int snd_pcm_update_hw_ptr(struct snd_pcm_substream *substream)
        delta = old_hw_ptr - new_hw_ptr;
        if (delta > 0) {
                if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
-#ifdef CONFIG_SND_PCM_XRUN_DEBUG
+#ifdef CONFIG_SND_DEBUG
                        if (runtime->periods > 2 && substream->pstr->xrun_debug) {
                                snd_printd(KERN_ERR "Unexpected hw_pointer value [2] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
                                if (substream->pstr->xrun_debug > 1)
@@ -2299,7 +2299,19 @@ snd_pcm_sframes_t snd_pcm_lib_write(struct snd_pcm_substream *substream, const v
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
 
+       snd_assert(substream->ffile != NULL, return -ENXIO);
        nonblock = !!(substream->ffile->f_flags & O_NONBLOCK);
+#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
+       if (substream->oss.oss) {
+               struct snd_pcm_oss_setup *setup = substream->oss.setup;
+               if (setup != NULL) {
+                       if (setup->nonblock)
+                               nonblock = 1;
+                       else if (setup->block)
+                               nonblock = 0;
+               }
+       }
+#endif
 
        if (runtime->access != SNDRV_PCM_ACCESS_RW_INTERLEAVED &&
            runtime->channels > 1)
@@ -2362,7 +2374,19 @@ snd_pcm_sframes_t snd_pcm_lib_writev(struct snd_pcm_substream *substream,
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
 
+       snd_assert(substream->ffile != NULL, return -ENXIO);
        nonblock = !!(substream->ffile->f_flags & O_NONBLOCK);
+#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
+       if (substream->oss.oss) {
+               struct snd_pcm_oss_setup *setup = substream->oss.setup;
+               if (setup != NULL) {
+                       if (setup->nonblock)
+                               nonblock = 1;
+                       else if (setup->block)
+                               nonblock = 0;
+               }
+       }
+#endif
 
        if (runtime->access != SNDRV_PCM_ACCESS_RW_NONINTERLEAVED)
                return -EINVAL;
@@ -2572,7 +2596,19 @@ snd_pcm_sframes_t snd_pcm_lib_read(struct snd_pcm_substream *substream, void __u
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
 
+       snd_assert(substream->ffile != NULL, return -ENXIO);
        nonblock = !!(substream->ffile->f_flags & O_NONBLOCK);
+#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
+       if (substream->oss.oss) {
+               struct snd_pcm_oss_setup *setup = substream->oss.setup;
+               if (setup != NULL) {
+                       if (setup->nonblock)
+                               nonblock = 1;
+                       else if (setup->block)
+                               nonblock = 0;
+               }
+       }
+#endif
        if (runtime->access != SNDRV_PCM_ACCESS_RW_INTERLEAVED)
                return -EINVAL;
        return snd_pcm_lib_read1(substream, (unsigned long)buf, size, nonblock, snd_pcm_lib_read_transfer);
@@ -2629,7 +2665,20 @@ snd_pcm_sframes_t snd_pcm_lib_readv(struct snd_pcm_substream *substream,
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
 
+       snd_assert(substream->ffile != NULL, return -ENXIO);
        nonblock = !!(substream->ffile->f_flags & O_NONBLOCK);
+#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
+       if (substream->oss.oss) {
+               struct snd_pcm_oss_setup *setup = substream->oss.setup;
+               if (setup != NULL) {
+                       if (setup->nonblock)
+                               nonblock = 1;
+                       else if (setup->block)
+                               nonblock = 0;
+               }
+       }
+#endif
+
        if (runtime->access != SNDRV_PCM_ACCESS_RW_NONINTERLEAVED)
                return -EINVAL;
        return snd_pcm_lib_read1(substream, (unsigned long)bufs, frames, nonblock, snd_pcm_lib_readv_transfer);