From: Lee Revell <rlrevell@joe-job.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@lists.sourceforge.net
Subject: Re: Driver design question
Date: Tue, 24 Oct 2006 11:30:07 -0400 [thread overview]
Message-ID: <1161703808.3982.85.camel@mindpipe> (raw)
In-Reply-To: <s5hd58hpxk7.wl%tiwai@suse.de>
On Tue, 2006-10-24 at 17:01 +0200, Takashi Iwai wrote:
> At Mon, 23 Oct 2006 13:46:13 -0400,
> Lee Revell wrote:
> >
> > On Mon, 2006-10-23 at 15:09 +0200, Takashi Iwai wrote:
> > > At Fri, 20 Oct 2006 16:12:48 -0400,
> > > Lee Revell wrote:
> > > > ~ # aplay /usr/share/sounds/test/phone.wav
> > > > Playing WAVE '/usr/share/sounds/test/phone.wav': Signed 16 bit Little
> > > > Endian, Rate 44100 Hz, Stereo
> > > > hw_params: stereo yes, format 16bit, rate 44100
> > > > dream_pcm_open: channel 0x0 eight_bit 0x0 stereo 0x1 rate 0xac44
> > > > dream_playback_ack
> > > > dream_playback_copy: not running!
> > > > dream_pcm_start: channel is 0
> > > > dream_work_transfer: polling status byte returned 0
> > > > calling snd_pcm_indirect_playback_transfer
> > > > in dream_playback_copy: 0x4000 bytes DMA area 0xcdfb0000 sw_data 0x0
> > > > dream_playback_ack
> > > > dream_playback_ack
> > > > dream_work_transfer: polling status byte returned 0
> > > > calling snd_pcm_indirect_playback_transfer
> > > > dream_playback_ack
> > > > playback size is 0x1005
> > > > dream_playback_ack
> > > > playback size is 0x100a
> > > > dream_playback_ack
> > > > playback size is 0x100f
> > > > dream_playback_ack
> > > > playback size is 0x1015
> > > > dream_playback_ack
> > > > dream_playback_ack
> > >
> > > The problem looks like the calculation of dream->playback_hw_ptr
> > > passed to snd_pcm_indirect_playback_pointer(). This must be a _byte_
> > > offset in the "hardware" ring buffer. That is, it's between 0 and
> > > (rec->hw_buffer_size - 1). You set hw_buffer_size = 0x4000, but
> > > calculate playback_hw_ptr as [0, runtime->buffer_size] and in frames.
> > >
> >
> > With your patches I still get a similar result:
> > snd_pcm_indirect_playback_transfer is only called once or twice and the
> > first chunk of sound repeats endlessly.
> >
> > ~ # aplay /usr/share/sounds/test/phone.wav
> > Playing WAVE '/uhw_params: stereo yes, format 16bit, rate 44100
> > sr/share/sounds/dream_pcm_open: channel 0x0 eight_bit 0x0 stereo 0x1
> > rate 0xac44
> > test/phone.wav' dream_playback_ack
> > dream_playback_copy: not running!
> > dream_pcm_start: channel is 0
> > : Signed 16 bit calling snd_pcm_indirect_playback_transfer
> > in dream_playback_copy: 0x4000 bytes DMA area 0xcdfb0000 sw_data 0x0
> > Little Endian, Rdream_playback_copy: polling status byte returned 0
> > ate 44100 Hz, Stereo
> > dream_playback_copy done
> > dream_playback_ack
> > dream_playback_ack
> > dream_playback_ack
> > calling snd_pcm_indirect_playback_transfer
> > in dream_playback_copy: 0x4000 bytes DMA area 0xcdfb0000 sw_data 0x16384
> > dream_playback_ack
> > dream_playback_pointer: 0x134
> >
> > At this point playback hangs.
>
> Hm, that's bad. Is dream_get_mpu_data_poll_status_byte() function
> atomic?
>
It won't sleep, but it could spin for milliseconds. I think it's
probably not optimal to call from interrupt context...
> > Is it really necessary to make up a fake pointer like this?
>
> The only reason for using a background transfer is the damn mmap
> mode. Since mmap mode requires a DMA transfer without manual write
> operations, you must implement a pseudo DMA engine to transfer the
> data chunk in background.
>
I think it's not required to support mmap - read/write only is
acceptable.
Lee
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
next prev parent reply other threads:[~2006-10-24 15:30 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-14 11:29 Driver design question Takashi Iwai
2006-09-15 14:47 ` Lee Revell
2006-09-19 15:15 ` Takashi Iwai
2006-09-25 19:54 ` Lee Revell
2006-09-27 17:18 ` Takashi Iwai
2006-09-27 17:38 ` Lee Revell
2006-09-30 2:03 ` Lee Revell
2006-10-03 15:35 ` Lee Revell
2006-10-04 9:17 ` Takashi Iwai
2006-10-19 22:12 ` Lee Revell
2006-10-20 12:55 ` Takashi Iwai
2006-10-20 20:12 ` Lee Revell
2006-10-23 13:09 ` Takashi Iwai
2006-10-23 17:46 ` Lee Revell
2006-10-24 15:01 ` Takashi Iwai
2006-10-24 15:30 ` Lee Revell [this message]
2006-10-24 23:54 ` Lee Revell
2006-10-04 9:07 ` Takashi Iwai
2006-09-27 13:58 ` Lee Revell
2006-09-27 16:52 ` Takashi Iwai
-- strict thread matches above, loose matches on Subject: below --
2013-10-22 7:02 Driver Design Question Johannes Thumshirn
2013-10-23 3:10 ` Guenter Roeck
2013-10-23 7:29 ` Johannes Thumshirn
2006-09-12 20:27 Driver design question Lee Revell
2005-05-19 6:24 driver " Jean Delvare
2005-05-19 6:24 ` Jean Delvare
2005-05-19 6:24 ` Philip Edelbrock
2005-05-19 6:24 ` Philip Edelbrock
2005-05-19 6:24 ` Jean Delvare
2005-05-19 6:24 ` Philip Edelbrock
2005-05-19 6:24 ` Mark M. Hoffman
2005-05-19 6:24 ` Philip Pokorny
2005-05-19 6:24 ` Jean Delvare
2005-05-19 6:24 ` Mark D. Studebaker
2005-05-19 6:24 ` Philip Pokorny
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1161703808.3982.85.camel@mindpipe \
--to=rlrevell@joe-job.com \
--cc=alsa-devel@lists.sourceforge.net \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.