• Home
  • Raw
  • Download

Lines Matching +full:timer +full:- +full:dsp

3    Copyright Echo Digital Audio Corporation (c) 1998 - 2004
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston,
22 MA 02111-1307, USA.
26 Translation from C++ and adaptation for use in ALSA-Driver
39 dev_dbg(chip->card->dev, "enable_midi_input(%d)\n", enable); in enable_midi_input()
42 return -EIO; in enable_midi_input()
45 chip->mtc_state = MIDI_IN_STATE_NORMAL; in enable_midi_input()
46 chip->comm_page->flags |= in enable_midi_input()
49 chip->comm_page->flags &= in enable_midi_input()
58 /* Send a buffer full of MIDI data to the DSP
63 return -EINVAL; in write_midi()
66 return -EIO; in write_midi()
72 chip->comm_page->midi_output[0] = bytes; in write_midi()
73 memcpy(&chip->comm_page->midi_output[1], data, bytes); in write_midi()
74 chip->comm_page->midi_out_free_count = 0; in write_midi()
77 dev_dbg(chip->card->dev, "write_midi: %d\n", bytes); in write_midi()
85 this state machine to parse the incoming MIDI data stream. Every time the DSP
86 sees a 0xF1 byte come in, it adds the DSP sample position to the MIDI data
87 stream. The DSP sample position is represented as a 32 bit unsigned value,
92 switch (chip->mtc_state) { in mtc_process_data()
95 chip->mtc_state = MIDI_IN_STATE_TS_HIGH; in mtc_process_data()
98 chip->mtc_state = MIDI_IN_STATE_TS_LOW; in mtc_process_data()
102 chip->mtc_state = MIDI_IN_STATE_F1_DATA; in mtc_process_data()
106 chip->mtc_state = MIDI_IN_STATE_NORMAL; in mtc_process_data()
115 from the DSP's buffer. It returns the number of bytes received. */
121 count = le16_to_cpu(chip->comm_page->midi_input[0]); in midi_service_irq()
131 midi_byte = le16_to_cpu(chip->comm_page->midi_input[i]); in midi_service_irq()
142 chip->midi_buffer[received++] = (u8)midi_byte; in midi_service_irq()
157 struct echoaudio *chip = substream->rmidi->private_data; in snd_echo_midi_input_open()
159 chip->midi_in = substream; in snd_echo_midi_input_open()
168 struct echoaudio *chip = substream->rmidi->private_data; in snd_echo_midi_input_trigger()
170 if (up != chip->midi_input_enabled) { in snd_echo_midi_input_trigger()
171 spin_lock_irq(&chip->lock); in snd_echo_midi_input_trigger()
173 spin_unlock_irq(&chip->lock); in snd_echo_midi_input_trigger()
174 chip->midi_input_enabled = up; in snd_echo_midi_input_trigger()
182 struct echoaudio *chip = substream->rmidi->private_data; in snd_echo_midi_input_close()
184 chip->midi_in = NULL; in snd_echo_midi_input_close()
192 struct echoaudio *chip = substream->rmidi->private_data; in snd_echo_midi_output_open()
194 chip->tinuse = 0; in snd_echo_midi_output_open()
195 chip->midi_full = 0; in snd_echo_midi_output_open()
196 chip->midi_out = substream; in snd_echo_midi_output_open()
204 struct echoaudio *chip = from_timer(chip, t, timer); in snd_echo_midi_output_write()
207 unsigned char buf[MIDI_OUT_BUFFER_SIZE - 1]; in snd_echo_midi_output_write()
212 spin_lock_irqsave(&chip->lock, flags); in snd_echo_midi_output_write()
213 chip->midi_full = 0; in snd_echo_midi_output_write()
214 if (!snd_rawmidi_transmit_empty(chip->midi_out)) { in snd_echo_midi_output_write()
215 bytes = snd_rawmidi_transmit_peek(chip->midi_out, buf, in snd_echo_midi_output_write()
216 MIDI_OUT_BUFFER_SIZE - 1); in snd_echo_midi_output_write()
217 dev_dbg(chip->card->dev, "Try to send %d bytes...\n", bytes); in snd_echo_midi_output_write()
220 dev_err(chip->card->dev, in snd_echo_midi_output_write()
224 chip->midi_full = 1; in snd_echo_midi_output_write()
226 dev_dbg(chip->card->dev, "%d bytes sent\n", sent); in snd_echo_midi_output_write()
227 snd_rawmidi_transmit_ack(chip->midi_out, sent); in snd_echo_midi_output_write()
229 /* Buffer is full. DSP's internal buffer is 64 (128 ?) in snd_echo_midi_output_write()
231 dev_dbg(chip->card->dev, "Full\n"); in snd_echo_midi_output_write()
233 chip->midi_full = 1; in snd_echo_midi_output_write()
237 /* We restart the timer only if there is some data left to send */ in snd_echo_midi_output_write()
238 if (!snd_rawmidi_transmit_empty(chip->midi_out) && chip->tinuse) { in snd_echo_midi_output_write()
239 /* The timer will expire slightly after the data has been in snd_echo_midi_output_write()
242 mod_timer(&chip->timer, jiffies + (time * HZ + 999) / 1000); in snd_echo_midi_output_write()
243 dev_dbg(chip->card->dev, in snd_echo_midi_output_write()
244 "Timer armed(%d)\n", ((time * HZ + 999) / 1000)); in snd_echo_midi_output_write()
246 spin_unlock_irqrestore(&chip->lock, flags); in snd_echo_midi_output_write()
254 struct echoaudio *chip = substream->rmidi->private_data; in snd_echo_midi_output_trigger()
256 dev_dbg(chip->card->dev, "snd_echo_midi_output_trigger(%d)\n", up); in snd_echo_midi_output_trigger()
257 spin_lock_irq(&chip->lock); in snd_echo_midi_output_trigger()
259 if (!chip->tinuse) { in snd_echo_midi_output_trigger()
260 timer_setup(&chip->timer, snd_echo_midi_output_write, in snd_echo_midi_output_trigger()
262 chip->tinuse = 1; in snd_echo_midi_output_trigger()
265 if (chip->tinuse) { in snd_echo_midi_output_trigger()
266 chip->tinuse = 0; in snd_echo_midi_output_trigger()
267 spin_unlock_irq(&chip->lock); in snd_echo_midi_output_trigger()
268 del_timer_sync(&chip->timer); in snd_echo_midi_output_trigger()
269 dev_dbg(chip->card->dev, "Timer removed\n"); in snd_echo_midi_output_trigger()
273 spin_unlock_irq(&chip->lock); in snd_echo_midi_output_trigger()
275 if (up && !chip->midi_full) in snd_echo_midi_output_trigger()
276 snd_echo_midi_output_write(&chip->timer); in snd_echo_midi_output_trigger()
283 struct echoaudio *chip = substream->rmidi->private_data; in snd_echo_midi_output_close()
285 chip->midi_out = NULL; in snd_echo_midi_output_close()
305 /* <--snd_echo_probe() */
311 if ((err = snd_rawmidi_new(card, card->shortname, 0, 1, 1, in snd_echo_midi_create()
312 &chip->rmidi)) < 0) in snd_echo_midi_create()
315 strcpy(chip->rmidi->name, card->shortname); in snd_echo_midi_create()
316 chip->rmidi->private_data = chip; in snd_echo_midi_create()
318 snd_rawmidi_set_ops(chip->rmidi, SNDRV_RAWMIDI_STREAM_INPUT, in snd_echo_midi_create()
320 snd_rawmidi_set_ops(chip->rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, in snd_echo_midi_create()
323 chip->rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT | in snd_echo_midi_create()