Lines Matching defs:midi

58 wf_mpu_status (snd_wavefront_midi_t *midi)
61 return inb (midi->mpu_status_port);
65 input_avail (snd_wavefront_midi_t *midi)
68 return !(wf_mpu_status(midi) & INPUT_AVAIL);
72 output_ready (snd_wavefront_midi_t *midi)
75 return !(wf_mpu_status(midi) & OUTPUT_READY);
79 read_data (snd_wavefront_midi_t *midi)
82 return inb (midi->mpu_data_port);
86 write_data (snd_wavefront_midi_t *midi, unsigned char byte)
89 outb (byte, midi->mpu_data_port);
112 return &acard->wavefront.midi;
117 snd_wavefront_midi_t *midi = &card->wavefront.midi;
135 if (midi->substream_output[midi->output_mpu] == NULL) {
144 if (output_ready (midi))
148 spin_lock_irqsave (&midi->virtual, flags);
149 if ((midi->mode[midi->output_mpu] & MPU401_MODE_OUTPUT) == 0) {
150 spin_unlock_irqrestore (&midi->virtual, flags);
153 if (output_ready (midi)) {
154 if (snd_rawmidi_transmit(midi->substream_output[midi->output_mpu], &midi_byte, 1) == 1) {
155 if (!midi->isvirtual ||
158 write_data(midi, midi_byte);
161 if (midi->istimer) {
162 if (--midi->istimer <= 0)
163 del_timer(&midi->timer);
165 midi->mode[midi->output_mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
166 spin_unlock_irqrestore (&midi->virtual, flags);
170 spin_unlock_irqrestore (&midi->virtual, flags);
173 spin_unlock_irqrestore (&midi->virtual, flags);
178 if (midi->substream_output[!midi->output_mpu] == NULL) {
187 if (output_ready (midi))
191 spin_lock_irqsave (&midi->virtual, flags);
192 if (!midi->isvirtual)
194 mpu = midi->output_mpu ^ mask;
196 if ((midi->mode[mpu] & MPU401_MODE_OUTPUT) == 0) {
197 spin_unlock_irqrestore (&midi->virtual, flags);
200 if (snd_rawmidi_transmit_empty(midi->substream_output[mpu]))
202 if (output_ready (midi)) {
203 if (mpu != midi->output_mpu) {
204 write_data(midi, mpu == internal_mpu ?
207 midi->output_mpu = mpu;
208 } else if (snd_rawmidi_transmit(midi->substream_output[mpu], &midi_byte, 1) == 1) {
209 if (!midi->isvirtual ||
212 write_data(midi, midi_byte);
216 if (midi->istimer) {
217 if (--midi->istimer <= 0)
218 del_timer(&midi->timer);
220 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
221 spin_unlock_irqrestore (&midi->virtual, flags);
225 spin_unlock_irqrestore (&midi->virtual, flags);
228 spin_unlock_irqrestore (&midi->virtual, flags);
235 snd_wavefront_midi_t *midi;
245 if ((midi = get_wavefront_midi (substream)) == NULL)
248 spin_lock_irqsave (&midi->open, flags);
249 midi->mode[mpu] |= MPU401_MODE_INPUT;
250 midi->substream_input[mpu] = substream;
251 spin_unlock_irqrestore (&midi->open, flags);
259 snd_wavefront_midi_t *midi;
269 if ((midi = get_wavefront_midi (substream)) == NULL)
272 spin_lock_irqsave (&midi->open, flags);
273 midi->mode[mpu] |= MPU401_MODE_OUTPUT;
274 midi->substream_output[mpu] = substream;
275 spin_unlock_irqrestore (&midi->open, flags);
283 snd_wavefront_midi_t *midi;
293 if ((midi = get_wavefront_midi (substream)) == NULL)
296 spin_lock_irqsave (&midi->open, flags);
297 midi->mode[mpu] &= ~MPU401_MODE_INPUT;
298 spin_unlock_irqrestore (&midi->open, flags);
306 snd_wavefront_midi_t *midi;
316 if ((midi = get_wavefront_midi (substream)) == NULL)
319 spin_lock_irqsave (&midi->open, flags);
320 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT;
321 spin_unlock_irqrestore (&midi->open, flags);
328 snd_wavefront_midi_t *midi;
339 if ((midi = get_wavefront_midi (substream)) == NULL) {
343 spin_lock_irqsave (&midi->virtual, flags);
345 midi->mode[mpu] |= MPU401_MODE_INPUT_TRIGGER;
347 midi->mode[mpu] &= ~MPU401_MODE_INPUT_TRIGGER;
349 spin_unlock_irqrestore (&midi->virtual, flags);
355 snd_wavefront_midi_t *midi = &card->wavefront.midi;
358 spin_lock_irqsave (&midi->virtual, flags);
359 midi->timer.expires = 1 + jiffies;
360 add_timer(&midi->timer);
361 spin_unlock_irqrestore (&midi->virtual, flags);
368 snd_wavefront_midi_t *midi;
379 if ((midi = get_wavefront_midi (substream)) == NULL) {
383 spin_lock_irqsave (&midi->virtual, flags);
385 if ((midi->mode[mpu] & MPU401_MODE_OUTPUT_TRIGGER) == 0) {
386 if (!midi->istimer) {
387 init_timer(&midi->timer);
388 midi->timer.function = snd_wavefront_midi_output_timer;
389 midi->timer.data = (unsigned long) substream->rmidi->card->private_data;
390 midi->timer.expires = 1 + jiffies;
391 add_timer(&midi->timer);
393 midi->istimer++;
394 midi->mode[mpu] |= MPU401_MODE_OUTPUT_TRIGGER;
397 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
399 spin_unlock_irqrestore (&midi->virtual, flags);
410 snd_wavefront_midi_t *midi;
416 midi = &card->wavefront.midi;
418 if (!input_avail (midi)) { /* not for us */
423 spin_lock_irqsave (&midi->virtual, flags);
426 if (input_avail (midi)) {
427 byte = read_data (midi);
429 if (midi->isvirtual) {
431 substream = midi->substream_input[external_mpu];
434 substream = midi->substream_output[internal_mpu];
438 substream = midi->substream_input[internal_mpu];
446 if (midi->mode[mpu] & MPU401_MODE_INPUT_TRIGGER) {
453 spin_unlock_irqrestore (&midi->virtual, flags);
464 spin_lock_irqsave (&card->wavefront.midi.virtual, flags);
465 card->wavefront.midi.isvirtual = 1;
466 card->wavefront.midi.output_mpu = internal_mpu;
467 card->wavefront.midi.input_mpu = internal_mpu;
468 spin_unlock_irqrestore (&card->wavefront.midi.virtual, flags);
477 spin_lock_irqsave (&card->wavefront.midi.virtual, flags);
480 card->wavefront.midi.isvirtual = 0;
481 spin_unlock_irqrestore (&card->wavefront.midi.virtual, flags);
491 snd_wavefront_midi_t *midi;
494 midi = &dev->midi;
502 for (i = 0; i < 30000 && !output_ready (midi); i++);
504 if (!output_ready (midi)) {
515 outb (UART_MODE_ON, midi->mpu_command_port);
518 if (input_avail (midi)) {
519 if (read_data (midi) == MPU_ACK) {