Lines Matching refs:midi
55 wf_mpu_status (snd_wavefront_midi_t *midi)
58 return inb (midi->mpu_status_port);
62 input_avail (snd_wavefront_midi_t *midi)
65 return !(wf_mpu_status(midi) & INPUT_AVAIL);
69 output_ready (snd_wavefront_midi_t *midi)
72 return !(wf_mpu_status(midi) & OUTPUT_READY);
76 read_data (snd_wavefront_midi_t *midi)
79 return inb (midi->mpu_data_port);
83 write_data (snd_wavefront_midi_t *midi, unsigned char byte)
86 outb (byte, midi->mpu_data_port);
109 return &acard->wavefront.midi;
114 snd_wavefront_midi_t *midi = &card->wavefront.midi;
132 if (midi->substream_output[midi->output_mpu] == NULL) {
141 if (output_ready (midi))
145 spin_lock_irqsave (&midi->virtual, flags);
146 if ((midi->mode[midi->output_mpu] & MPU401_MODE_OUTPUT) == 0) {
147 spin_unlock_irqrestore (&midi->virtual, flags);
150 if (output_ready (midi)) {
151 if (snd_rawmidi_transmit(midi->substream_output[midi->output_mpu], &midi_byte, 1) == 1) {
152 if (!midi->isvirtual ||
155 write_data(midi, midi_byte);
158 if (midi->istimer) {
159 if (--midi->istimer <= 0)
160 del_timer(&midi->timer);
162 midi->mode[midi->output_mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
163 spin_unlock_irqrestore (&midi->virtual, flags);
167 spin_unlock_irqrestore (&midi->virtual, flags);
170 spin_unlock_irqrestore (&midi->virtual, flags);
175 if (midi->substream_output[!midi->output_mpu] == NULL) {
184 if (output_ready (midi))
188 spin_lock_irqsave (&midi->virtual, flags);
189 if (!midi->isvirtual)
191 mpu = midi->output_mpu ^ mask;
193 if ((midi->mode[mpu] & MPU401_MODE_OUTPUT) == 0) {
194 spin_unlock_irqrestore (&midi->virtual, flags);
197 if (snd_rawmidi_transmit_empty(midi->substream_output[mpu]))
199 if (output_ready (midi)) {
200 if (mpu != midi->output_mpu) {
201 write_data(midi, mpu == internal_mpu ?
204 midi->output_mpu = mpu;
205 } else if (snd_rawmidi_transmit(midi->substream_output[mpu], &midi_byte, 1) == 1) {
206 if (!midi->isvirtual ||
209 write_data(midi, midi_byte);
213 if (midi->istimer) {
214 if (--midi->istimer <= 0)
215 del_timer(&midi->timer);
217 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
218 spin_unlock_irqrestore (&midi->virtual, flags);
222 spin_unlock_irqrestore (&midi->virtual, flags);
225 spin_unlock_irqrestore (&midi->virtual, flags);
232 snd_wavefront_midi_t *midi;
242 midi = get_wavefront_midi(substream);
243 if (!midi)
246 spin_lock_irqsave (&midi->open, flags);
247 midi->mode[mpu] |= MPU401_MODE_INPUT;
248 midi->substream_input[mpu] = substream;
249 spin_unlock_irqrestore (&midi->open, flags);
257 snd_wavefront_midi_t *midi;
267 midi = get_wavefront_midi(substream);
268 if (!midi)
271 spin_lock_irqsave (&midi->open, flags);
272 midi->mode[mpu] |= MPU401_MODE_OUTPUT;
273 midi->substream_output[mpu] = substream;
274 spin_unlock_irqrestore (&midi->open, flags);
282 snd_wavefront_midi_t *midi;
292 midi = get_wavefront_midi(substream);
293 if (!midi)
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 midi = get_wavefront_midi(substream);
317 if (!midi)
320 spin_lock_irqsave (&midi->open, flags);
321 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT;
322 spin_unlock_irqrestore (&midi->open, flags);
329 snd_wavefront_midi_t *midi;
340 midi = get_wavefront_midi(substream);
341 if (!midi)
344 spin_lock_irqsave (&midi->virtual, flags);
346 midi->mode[mpu] |= MPU401_MODE_INPUT_TRIGGER;
348 midi->mode[mpu] &= ~MPU401_MODE_INPUT_TRIGGER;
350 spin_unlock_irqrestore (&midi->virtual, flags);
355 snd_wavefront_midi_t *midi = from_timer(midi, t, timer);
356 snd_wavefront_card_t *card = midi->timer_card;
359 spin_lock_irqsave (&midi->virtual, flags);
360 mod_timer(&midi->timer, 1 + jiffies);
361 spin_unlock_irqrestore (&midi->virtual, flags);
368 snd_wavefront_midi_t *midi;
379 midi = get_wavefront_midi(substream);
380 if (!midi)
383 spin_lock_irqsave (&midi->virtual, flags);
385 if ((midi->mode[mpu] & MPU401_MODE_OUTPUT_TRIGGER) == 0) {
386 if (!midi->istimer) {
387 timer_setup(&midi->timer,
390 mod_timer(&midi->timer, 1 + jiffies);
392 midi->istimer++;
393 midi->mode[mpu] |= MPU401_MODE_OUTPUT_TRIGGER;
396 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
398 spin_unlock_irqrestore (&midi->virtual, flags);
409 snd_wavefront_midi_t *midi;
415 midi = &card->wavefront.midi;
417 if (!input_avail (midi)) { /* not for us */
422 spin_lock_irqsave (&midi->virtual, flags);
425 if (input_avail (midi)) {
426 byte = read_data (midi);
428 if (midi->isvirtual) {
430 substream = midi->substream_input[external_mpu];
433 substream = midi->substream_output[internal_mpu];
437 substream = midi->substream_input[internal_mpu];
445 if (midi->mode[mpu] & MPU401_MODE_INPUT_TRIGGER) {
452 spin_unlock_irqrestore (&midi->virtual, flags);
463 spin_lock_irqsave (&card->wavefront.midi.virtual, flags);
464 card->wavefront.midi.isvirtual = 1;
465 card->wavefront.midi.output_mpu = internal_mpu;
466 card->wavefront.midi.input_mpu = internal_mpu;
467 spin_unlock_irqrestore (&card->wavefront.midi.virtual, flags);
476 spin_lock_irqsave (&card->wavefront.midi.virtual, flags);
479 card->wavefront.midi.isvirtual = 0;
480 spin_unlock_irqrestore (&card->wavefront.midi.virtual, flags);
490 snd_wavefront_midi_t *midi;
493 midi = &dev->midi;
501 for (i = 0; i < 30000 && !output_ready (midi); i++);
503 if (!output_ready (midi)) {
514 outb (UART_MODE_ON, midi->mpu_command_port);
517 if (input_avail (midi)) {
518 if (read_data (midi) == MPU_ACK) {